Index: azure_iot_hub/trunk/app_iothub_client/.project
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/.project	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/.project	(revision 389)
@@ -6,8 +6,7 @@
 		<project>asp3_dcre</project>
 		<project>azure_iothub</project>
-		<project>busybox</project>
 		<project>curl-7.57.0</project>
-		<project>expat-2.2.5</project>
 		<project>musl-1.1.18</project>
+		<project>ntshell</project>
 		<project>wolfssl-3.15.7</project>
 		<project>zlib-1.2.11</project>
Index: azure_iot_hub/trunk/app_iothub_client/Debug/Makefile
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/Debug/Makefile	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/Debug/Makefile	(revision 389)
@@ -9,47 +9,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id: Makefile 735 2016-04-03 14:11:07Z ertl-hiro $
@@ -57,15 +42,15 @@
 
 #
-#  ã¿ã¼ã²ããã®æå®ï¼Makefile.targetã§ä¸æ¸ããããã®ãé²ãããï¼
+#  ターゲットの指定（Makefile.targetで上書きされるのを防ぐため）
 #
 all:
 
 #
-#  ã¿ã¼ã²ããç¥ç§°ã®å®ç¾©
+#  ターゲット略称の定義
 #
 TARGET = gr_sakura_gcc
 
 #
-#  ãã­ã°ã©ãã³ã°è¨èªã®å®ç¾©
+#  プログラミング言語の定義
 #
 SRCLANG = c
@@ -75,5 +60,4 @@
 		$(SRCDIR)/../wolfssl-3.15.7/Debug/libwolfssl.a \
 		$(SRCDIR)/../curl-7.57.0/Debug/libcurl.a \
-		$(SRCDIR)/../expat-2.2.5/Debug/libexpat.a \
 		$(SRCDIR)/../azure_iothub/Debug/libazure_iothub.a
 endif
@@ -85,41 +69,41 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ソースファイルのディレクトリの定義
 #
 SRCDIR = ../../asp3_dcre
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®æ¡å¼µå­ã®è¨­å®
+#  オブジェクトファイル名の拡張子の設定
 #
 OBJEXT = elf
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ã®ãã£ã¬ã¯ããªå
-#  ï¼ã«ã¼ãã«ã©ã¤ãã©ãªãmakeå¯¾è±¡ã«ããæã¯ï¼ç©ºã«å®ç¾©ããï¼
+#  カーネルライブラリ（libkernel.a）のディレクトリ名
+#  （カーネルライブラリもmake対象にする時は，空に定義する）
 #
 KERNEL_LIB = ../../asp3_dcre/Debug
 
 #
-#  ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãããã©ããã®å®ç¾©
+#  カーネルを関数単位でコンパイルするかどうかの定義
 #
 KERNEL_FUNCOBJS = 
 
 #
-#  TECSãå¤ããã©ããã®å®ç¾©
+#  TECSを外すかどうかの定義
 #
 OMIT_TECS = 
 
 #
-#  ãã¬ã¼ã¹ã­ã°ãåå¾ãããã©ããã®å®ç¾©
+#  トレースログを取得するかどうかの定義
 #
 ENABLE_TRACE = 
 
 #
-#  éçºãã¼ã«ï¼ã³ã³ãã¤ã©ç­ï¼ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  開発ツール（コンパイラ等）のディレクトリの定義
 #
 DEVTOOLDIR = 
 
 #
-#  ã¦ã¼ãã£ãªãã£ãã­ã°ã©ã ã®åç§°
+#  ユーティリティプログラムの名称
 #
 CFG = ruby -Eutf-8 $(SRCDIR)/cfg/cfg.rb
@@ -127,5 +111,5 @@
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®å®ç¾©
+#  オブジェクトファイル名の定義
 #
 OBJNAME = app_iothub_client
@@ -139,20 +123,20 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã®å®ç¾©
+#  依存関係ファイルを置くディレクトリの定義
 #
 DEPDIR = deps
 
 #
-#  ã¿ã¼ã²ããä¾å­é¨ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ターゲット依存部のディレクトリの定義
 #
 TARGETDIR = $(SRCDIR)/target/$(TARGET)
 
 #
-#  ã¿ã¼ã²ããä¾å­ã®å®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット依存の定義のインクルード
 #
 include $(TARGETDIR)/Makefile.target
 
 #
-#  TECSçæãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  TECS生成ファイルのディレクトリの定義
 #
 TECSGENDIR = ./gen
@@ -163,5 +147,5 @@
 
 #
-#  TECSãçæããå®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  TECSが生成する定義のインクルード
 #
 ifndef OMIT_TECS
@@ -173,5 +157,5 @@
 
 #
-#  mbedãµã¼ãã¹ã®å®ç¾©
+#  mbedサービスの定義
 #
 
@@ -179,5 +163,5 @@
 
 #
-#  gdicãµã¼ãã¹ã®å®ç¾©
+#  gdicサービスの定義
 #
 
@@ -185,6 +169,5 @@
 
 #
-#  å
-±éã³ã³ãã¤ã«ãªãã·ã§ã³ã®å®ç¾©
+#  共通コンパイルオプションの定義
 #
 COPTS := -g -std=gnu99 $(COPTS)
@@ -200,5 +183,4 @@
 CDEFS := $(CDEFS) -DDHCP4_CLI_CFG -DUSE_PING -DUSE_RESOLVER -DUSE_NETAPP_SUBR -DNOUSE_MPF_NET_BUF -DECHONET_USE_MALLOC -DHAVE_CONFIG_H -DWOLFSSL_USER_SETTINGS -DRamDisk=binary_______ntshell_src_rom_fs_bin_start
 INCLUDES := -I. -I$(SRCDIR)/include -I$(SRCDIR) \
-	-I$(SRCDIR)/../usbhost/src \
 	-I$(SRCDIR)/../zlib-1.2.11/src \
 	-I$(SRCDIR)/../wolfssl-3.15.7/wolfssl \
@@ -207,5 +189,4 @@
 	-I$(SRCDIR)/../curl-7.57.0/include \
 	-I$(SRCDIR)/../curl-7.57.0 \
-	-I$(SRCDIR)/../expat-2.2.5/src \
 	-I$(SRCDIR)/../azure_iothub/c-utility/inc \
 	-I$(SRCDIR)/../azure_iothub/c-utility/pal/toppers \
@@ -213,4 +194,5 @@
 	-I$(SRCDIR)/../azure_iothub/iothub_client/inc/internal \
 	-I$(SRCDIR)/../azure_iothub/deps/parson \
+	-I$(SRCDIR)/../azure_iothub/certs \
 	$(INCLUDES)
 LDFLAGS := $(LDFLAGS) -L.
@@ -222,10 +204,7 @@
 APPLDIRS := $(APPLDIRS) ../../ntshell/fatfs ../../ntshell/ntshell ../../ntshell/ntshell/core ../../ntshell/ntshell/util ../../ntshell/src
 APPL_COBJS := $(APPL_COBJS) netcmd.o fdtable.o stdio_stub.o io_stub.o socket_stub.o ffarch.o diskio.o ff.o mmc_rspi.o ccsbcs.o ntshell.o text_editor.o text_history.o usrcmd.o vtrecv.o vtsend.o ntlibc.o ntstdio.o ntopt.o syscall.o
-APPLDIRS := $(APPLDIRS) ../../ntshell/lcd
-APPL_COBJS := $(APPL_COBJS) adafruit_gfx.o draw_font.o misaki_font.o
-APPL_CFLAGS := $(APPL_CFLAGS) -DADAFRUIT_SSD1306
-
-#
-#  ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã«é¢ããå®ç¾©
+
+#
+#  アプリケーションプログラムに関する定義
 #
 APPLNAME = app_iothub_client
@@ -237,8 +216,8 @@
 APPL_ASMOBJS :=
 ifdef USE_CXX
-	APPL_CXXOBJS := main.o ntshell_main.o client.o certs.o platform_toppers.o threadapi_toppers.o tickcounter_toppers.o
+	APPL_CXXOBJS := main.o ntshell_main.o client.o
 	APPL_COBJS := $(APPL_COBJS)
 else
-	APPL_COBJS := $(APPL_COBJS) main.o ntshell_main.o client.o certs.o platform_toppers.o threadapi_toppers.o tickcounter_toppers.o
+	APPL_COBJS := $(APPL_COBJS) main.o ntshell_main.o client.o
 endif
 APPL_COBJS := $(APPL_COBJS) log_output.o vasyslog.o t_perror.o strerror.o
@@ -251,30 +230,30 @@
 ifdef TINETDIR
 	#
-	#  ãããã¯ã¼ã¯ãµã¼ãã¹ã®å®ç¾©
+	#  ネットワークサービスの定義
 	#
 	NO_USE_TINET_LIBRARY = true
 
-	#  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãä½ããä¸ã¤é¸æããã
+	#  ネットワークインタフェースの選択、何れか一つ選択する。
 	NET_IF = ether
 
-	#  ã¤ã¼ãµãããã»ãã£ãã¤ã¹ãã©ã¤ãã®é¸æ
+	#  イーサネット・ディバイスドライバの選択
 	NET_DEV = if_rx62n
 
-	#  ãããã¯ã¼ã¯å±¤ã®é¸æ
+	#  ネットワーク層の選択
 	#SUPPORT_INET6 = true
 	SUPPORT_INET4 = true
 
-	#  API ã«çµè¾¼ãæ©è½ã®é¸æ
+	#  API に組込む機能の選択
 	#API_CFG_IP4MAPPED_ADDR = true
 
-	#  ãã©ã³ã¹ãã¼ãå±¤ã®é¸æ
+	#  トランスポート層の選択
 	SUPPORT_TCP = true
 	SUPPORT_UDP = true
 
-	# IGMPãæå¹ã«è¨­å®
+	# IGMPを有効に設定
 	SUPPORT_IGMP = true
 
 	#
-	#  ãããã¯ã¼ã¯ãµã¼ãã¹ã® Makefile ã®ã¤ã³ã¯ã«ã¼ã
+	#  ネットワークサービスの Makefile のインクルード
 	#
 	include $(SRCDIR)/$(TINETDIR)/Makefile.tinet
@@ -282,5 +261,5 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(TECSGENDIR) $(SRCDIR)/tecs_kernel \
@@ -293,5 +272,5 @@
 
 #
-#  ã¿ã¼ã²ãããã¡ã¤ã«
+#  ターゲットファイル
 #
 .PHONY: all
@@ -309,8 +288,8 @@
 endif
 
-##### ä»¥ä¸ã¯ç·¨éããªããã¨ #####
-
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«é¢ããå®ç¾©
+##### 以下は編集しないこと #####
+
+#
+#  コンフィギュレータに関する定義
 #
 ifndef TINETDIR
@@ -332,14 +311,14 @@
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
-#
-#  KERNEL_ASMOBJS: ã«ã¼ãã«ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãã¢ã»ã³ããªè¨èªã®
-#				   ãªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_COBJS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãCè¨èªã§ï¼ã½ã¼ã¹
-#				 ãã¡ã¤ã«ã¨1å¯¾1ã«å¯¾å¿ãããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_LCSRCS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããCè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ã§ï¼
-#				  1ã¤ã®ã½ã¼ã¹ãã¡ã¤ã«ããè¤æ°ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãç
-#				  æãããã®ï¼
-#  KERNEL_LCOBJS: ä¸ã®ã½ã¼ã¹ãã¡ã¤ã«ããçæããããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
+#  カーネルに関する定義
+#
+#  KERNEL_ASMOBJS: カーネルライブラリに含める，ソースがアセンブリ言語の
+#				   オブジェクトファイル．
+#  KERNEL_COBJS: カーネルのライブラリに含める，ソースがC言語で，ソース
+#				 ファイルと1対1に対応するオブジェクトファイル．
+#  KERNEL_LCSRCS: カーネルのライブラリに含めるC言語のソースファイルで，
+#				  1つのソースファイルから複数のオブジェクトファイルを生
+#				  成するもの．
+#  KERNEL_LCOBJS: 上のソースファイルから生成されるオブジェクトファイル．
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(SRCDIR)/kernel
@@ -349,5 +328,5 @@
 
 #
-#  ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾©
+#  カーネルのファイル構成の定義
 #
 include $(SRCDIR)/kernel/Makefile.kernel
@@ -382,5 +361,5 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãããã£ã¬ã¯ããªã«é¢ããå®ç¾©
+#  ソースファイルのあるディレクトリに関する定義
 #
 vpath %.c $(KERNEL_DIRS) $(SYSSVC_DIRS) $(APPL_DIRS)
@@ -391,5 +370,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã®ããã®å¤æ°ã®å®ç¾©
+#  コンパイルのための変数の定義
 #
 KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS)
@@ -419,10 +398,10 @@
 
 #
-#  tecsgenããCããªãã­ã»ããµãå¼ã³åºãéã®ãªãã·ã§ã³ã®å®ç¾©
+#  tecsgenからCプリプロセッサを呼び出す際のオプションの定義
 #
 TECS_CPP = $(CC) $(CDEFS) $(INCLUDES) $(SYSSVC_CFLAGS) -D TECSGEN -E
 
 #
-#  tecsgenã®å¼åºã
+#  tecsgenの呼出し
 #
 .PHONY: tecs
@@ -432,5 +411,5 @@
 
 #
-#  ã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®çæ
+#  カーネルのコンフィギュレーションファイルの生成
 #
 cfg1_out.c cfg1_out.db: cfg1_out.timestamp ;
@@ -454,5 +433,5 @@
 
 #
-#  ãªãã»ãããã¡ã¤ã«ï¼offset.hï¼ã®çæè¦å
+#  オフセットファイル（offset.h）の生成規則
 #
 $(OFFSET_H): offset.timestamp ;
@@ -462,5 +441,5 @@
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªãã¡ã¤ã«ã®çæ
+#  カーネルライブラリファイルの生成
 #
 libkernel.a: $(OFFSET_H) $(KERNEL_LIB_OBJS)
@@ -470,5 +449,5 @@
 
 #
-#  ä¸¦åmakeã®ããã®ä¾å­é¢ä¿ã®å®ç¾©
+#  並列makeのための依存関係の定義
 #
 $(APPL_OBJS) $(SYSSVC_OBJS): | kernel_cfg.timestamp
@@ -477,11 +456,10 @@
 
 #
-#  ç¹å¥ãªä¾å­é¢ä¿ã®å®ç¾©
+#  特別な依存関係の定義
 #
 tBannerMain.o: $(filter-out tBannerMain.o,$(ALL_OBJS)) $(LIBS_DEP)
 
 #
-#  å
-¨ä½ã®ãªã³ã¯
+#  全体のリンク
 #
 $(OBJFILE): $(ALL_OBJS) $(LIBS_DEP)
@@ -491,5 +469,5 @@
 
 #
-#  ä¾å­é¢ä¿ãã©ã«ãã®ä½æ
+#  依存関係フォルダの作成
 #
 $(DEPDIR):
@@ -497,5 +475,5 @@
 
 #
-#  ã·ã³ãã«ãã¡ã¤ã«ã®çæ
+#  シンボルファイルの生成
 #
 $(OBJNAME).syms: $(OBJFILE)
@@ -503,5 +481,5 @@
 
 #
-#  ãã¤ããªãã¡ã¤ã«ã®çæ
+#  バイナリファイルの生成
 #
 $(OBJNAME).bin: $(OBJFILE)
@@ -511,5 +489,5 @@
 
 #
-#  Sã¬ã³ã¼ããã¡ã¤ã«ã®çæ
+#  Sレコードファイルの生成
 #
 $(OBJNAME).srec: $(OBJFILE)
@@ -520,5 +498,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯å¦ç
+#  エラーチェック処理
 #
 .PHONY: check
@@ -530,5 +508,5 @@
 
 #
-#  ã³ã³ãã¤ã«çµæã®æ¶å»
+#  コンパイル結果の消去
 #
 .PHONY: clean
@@ -555,9 +533,8 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã®ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã¯ï¼å
-±éã®ã³ã³ãã¤ã«ãªãã·ã§ã³
-#  ã®ã¿ãä»ãã¦ã³ã³ãã¤ã«ããï¼
+#  コンフィギュレータが生成したファイルのコンパイルルールの定義
+#
+#  コンフィギュレータが生成したファイルは，共通のコンパイルオプション
+#  のみを付けてコンパイルする．
 #
 ALL_CFG_COBJS = $(CFG_COBJS) cfg1_out.o
@@ -574,14 +551,14 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+#  依存関係ファイルのインクルード
 #
 -include $(DEPDIR)/*.d
 
 #
-#  éçºãã¼ã«ã®ã³ãã³ãåã®å®ç¾©
+#  開発ツールのコマンド名の定義
 #
 ifeq ($(TOOL),gcc)
 	#
-	#  GNUéçºç°å¢ç¨
+	#  GNU開発環境用
 	#
 	ifdef GCC_TARGET
@@ -621,5 +598,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
+#  コンパイルルールの定義
 #
 $(KERNEL_COBJS): %.o: %.c
@@ -667,5 +644,5 @@
 
 #
-#  ããã©ã«ãã³ã³ãã¤ã«ã«ã¼ã«ãä¸æ¸ã
+#  デフォルトコンパイルルールを上書き
 #
 %.o: %.c
Index: azure_iot_hub/trunk/app_iothub_client/src/certs.c
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/certs.c	(revision 388)
+++ 	(revision )
@@ -1,80 +1,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-/* This file contains certs needed to communicate with Azure (IoT) */
-
-#include "certs.h"
-
-const char certificates[] =
-/* DigiCert Baltimore Root */
-"-----BEGIN CERTIFICATE-----\r\n"
-"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\r\n"
-"RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\r\n"
-"VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\r\n"
-"DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\r\n"
-"ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\r\n"
-"VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\r\n"
-"mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\r\n"
-"IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\r\n"
-"mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\r\n"
-"XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\r\n"
-"dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\r\n"
-"jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\r\n"
-"BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\r\n"
-"DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\r\n"
-"9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\r\n"
-"jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\r\n"
-"Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\r\n"
-"ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\r\n"
-"R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\r\n"
-"-----END CERTIFICATE-----\r\n"
-/*DigiCert Global Root CA*/
-"-----BEGIN CERTIFICATE-----\r\n"
-"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n"
-"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n"
-"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n"
-"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n"
-"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n"
-"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n"
-"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n"
-"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n"
-"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n"
-"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n"
-"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n"
-"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n"
-"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n"
-"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n"
-"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n"
-"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n"
-"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n"
-"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n"
-"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n"
-"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n"
-"-----END CERTIFICATE-----\r\n"
-/*D-TRUST Root Class 3 CA 2 2009*/
-"-----BEGIN CERTIFICATE-----\r\n"
-"MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF\r\n"
-"MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD\r\n"
-"bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha\r\n"
-"ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM\r\n"
-"HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB\r\n"
-"BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03\r\n"
-"UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42\r\n"
-"tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R\r\n"
-"ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM\r\n"
-"lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp\r\n"
-"/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G\r\n"
-"A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G\r\n"
-"A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj\r\n"
-"dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy\r\n"
-"MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl\r\n"
-"cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js\r\n"
-"L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL\r\n"
-"BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni\r\n"
-"acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0\r\n"
-"o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K\r\n"
-"zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8\r\n"
-"PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y\r\n"
-"Johw1+qRzT65ysCQblrGXnRl11z+o+I=\r\n"
-"-----END CERTIFICATE-----\r\n"
-;
Index: azure_iot_hub/trunk/app_iothub_client/src/certs.h
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/certs.h	(revision 388)
+++ 	(revision )
@@ -1,18 +1,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-#ifndef CERTS_H
-#define CERTS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-    extern const char certificates[];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* CERTS_H */
Index: azure_iot_hub/trunk/app_iothub_client/src/main.c
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/main.c	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/src/main.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /* 
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®æ¬ä½
+ *  サンプルプログラム(1)の本体
  */
 
@@ -86,13 +71,7 @@
 #include "fdtable.h"
 #include "gpio_api.h"
-#include "usb_hbth.h"
 #include "ntshell_main.h"
-#ifdef IF_ETHER_BTUSB
-#include <btstack/utils.h>
-#endif
 #include "ntp_cli.h"
 #include "netcmd.h"
-#include "adafruit_ssd1306.h"
-#include "draw_font.h"
 
 ID ws_api_mailboxid = MAIN_DATAQUEUE;
@@ -101,12 +80,5 @@
 #endif
 
-#ifdef IF_ETHER_BTUSB
-extern int bt_bnep_mode;
-/* PANUåããªã¢ã¼ãã¢ãã¬ã¹ */
-bd_addr_t remote_addr = {0x00,0x1B,0xDC,0x09,0x27,0x26};
-bool_t dhcp_enable = false;
-#else
 bool_t dhcp_enable = true;
-#endif
 
 uint8_t mac_addr[6] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0x01};
@@ -144,9 +116,8 @@
 	obj->prev = obj->now;
 
-	/* ã¿ã¤ãã¼åå¾ */
+	/* タイマー取得 */
 	timer = main_get_timer();
 
-	/* å¾
-ã¡ */
+	/* 待ち */
 	ret = serial_trea_dat(SIO_PORTID, buf, cnt, timer);
 	if ((ret < 0) && (ret != E_OK) && (ret != E_TMOUT)) {
@@ -164,9 +135,9 @@
 	}
 
-			/* æéçµé */
+			/* 時間経過 */
 	int elapse = obj->now - obj->prev;
 	main_progress(elapse);
 
-	/* ã¿ã¤ã ã¢ã¦ãå¦ç */
+	/* タイムアウト処理 */
 	main_timeout();
 
@@ -182,13 +153,8 @@
 
 /*
- * ã¡ã¤ã³ã¿ã¹ã¯
+ * メインタスク
  */
 void main_task(intptr_t exinf)
 {
-#ifdef IF_ETHER_BTUSB
-	// PANU mode
-	bt_bnep_mode = 0;
-#endif
-
 	main_initialize();
 
@@ -198,12 +164,8 @@
 }
 
-#if !defined(_MSC_VER)
-LCD_Handler_t lcd;
-#endif
-
 int wolfSSL_Debugging_ON(void);
 
 /*
- * åæå
+ * 初期化
  */
 static void main_initialize()
@@ -257,35 +219,8 @@
 	ether_set_link_callback(netif_link_callback);
 
-	/* åæå */
+	/* 初期化 */
 	ffarch_init();
 
 	gpio_write(&led_green, 0);
-#if !defined(_MSC_VER)
-	i2c_init(&lcd.i2c, I2C_SDA, I2C_SCL);
-	i2c_frequency(&lcd.i2c, 100000);
-
-	lcd_init3(&lcd, NC);
-
-	lcd_begin(&lcd, SSD1306_SWITCHCAPVCC, SSD1306_I2C_ADDRESS, true);
-
-	lcd_clearDisplay(&lcd);
-
-	lcd_display(&lcd);
-
-	lcd_drawString(&lcd, "OLEDè¡¨ç¤ºåæåå®äº!", 0, 0, WHITE, BLACK);
-
-	lcd_display(&lcd);
-#endif
-#ifdef IF_ETHER_BTUSB
-	usbhost_init(USBHOST_TASK);
-#endif
-
-	if (f_stat("1:/upload/main.mrb", &fno) != FR_OK) {
-		exec = false;
-	}
-
-	if (exec) {
-		cmd_execute("mruby -b 1:/upload/main.mrb", NULL);
-	}
 
 	ret = get_tim(&main_obj.now);
@@ -298,5 +233,5 @@
 
 /*
- * ã¿ã¤ãã¼åå¾
+ * タイマー取得
  */
 static int main_get_timer()
@@ -308,5 +243,5 @@
 
 /*
- * æéçµé
+ * 時間経過
  */
 static void main_progress(int interval)
@@ -321,5 +256,5 @@
 
 /*
- * ã¿ã¤ã ã¢ã¦ãå¦ç
+ * タイムアウト処理
  */
 static void main_timeout()
@@ -329,5 +264,5 @@
 }
 
-/* MACã¢ãã¬ã¹ã®è¨­å®æã«å¼ã°ãã */
+/* MACアドレスの設定時に呼ばれる */
 void mbed_mac_address(char *mac)
 {
Index: azure_iot_hub/trunk/app_iothub_client/src/main.cdl
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/main.cdl	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/src/main.cdl	(revision 389)
@@ -1,14 +1,14 @@
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (1)ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		サンプルプログラム(1)のコンポーネント記述ファイル
  *
  *  $Id$
  */
 /*
- *  ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å®ç¾©
+ *  カーネルオブジェクトの定義
  */
 import(<kernel.cdl>);
 
 /*
- *  ã¿ã¼ã²ããéä¾å­ã®ã»ã«ã¿ã¤ãã®å®ç¾©
+ *  ターゲット非依存のセルタイプの定義
  */
 import("syssvc/tSerialPort.cdl");
@@ -20,40 +20,39 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨ã®åãè¾¼ã¿
+ *  ターゲット依存部の取り込み
  */
 import("ntshell.cdl");
 
 /*
- *  ãã»ã«ã®çµä¸ãè¨è¿°ãã¨ã¯ï¼"cell"ã§å§ã¾ãè¡ããï¼ããã«å¯¾å¿ãã"};"
- *  ã®è¡ã¾ã§ã®ãã¨ãè¨ãï¼
+ *  「セルの組上げ記述」とは，"cell"で始まる行から，それに対応する"};"
+ *  の行までのことを言う．
  */
 
 /*
- *  ã·ã¹ãã ã­ã°æ©è½ã®çµä¸ãè¨è¿°
+ *  システムログ機能の組上げ記述
  *
- *  ã·ã¹ãã ã­ã°æ©è½ãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ãï¼ã³
- *  ã³ãã¤ã«ãªãã·ã§ã³ã«-DTOPPERS_OMIT_SYSLOGãè¿½å ããã°ããï¼ãã ãï¼
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¯ã·ã¹ãã ã­ã°æ©è½ãä½¿ç¨ããããï¼ãããå¤ããã¨
- *  ãå¿
-è¦ã§ããï¼ã¾ãï¼ã·ã¹ãã ã­ã°æ©è½ã®ã¢ããã¿ãå¤ããªããã°ãªããª
- *  ãï¼tecsgenãè­¦åã¡ãã»ã¼ã¸ãåºããï¼ç¡è¦ãã¦ããï¼
+ *  システムログ機能を外す場合には，以下のセルの組上げ記述を削除し，コ
+ *  ンパイルオプションに-DTOPPERS_OMIT_SYSLOGを追加すればよい．ただし，
+ *  システムログタスクはシステムログ機能を使用するため，それも外すこと
+ *  が必要である．また，システムログ機能のアダプタも外さなければならな
+ *  い．tecsgenが警告メッセージを出すが，無視してよい．
  */
 cell tSysLog SysLog {
-	logBufferSize = 32;					/* ã­ã°ãããã¡ã®ãµã¤ãº */
+	logBufferSize = 32;					/* ログバッファのサイズ */
 	initLogMask = C_EXP("LOG_UPTO(LOG_NOTICE)");
-										/* ã­ã°ãããã¡ã«è¨é²ãã¹ãéè¦åº¦ */
+										/* ログバッファに記録すべき重要度 */
 	initLowMask = C_EXP("LOG_UPTO(LOG_EMERG)");
-									   	/* ä½ã¬ãã«åºåãã¹ãéè¦åº¦ */
-	/* ä½ã¬ãã«åºåã¨ã®çµå */
+									   	/* 低レベル出力すべき重要度 */
+	/* 低レベル出力との結合 */
 	cPutLog = PutLogTarget.ePutLog;
 };
 
 /*
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ã¹ãã ã­ã°æ©è½
- *  ãå¼ã³åºãããã®ã¢ããã¿ã®çµä¸ãè¨è¿°
+ *  C言語で記述されたアプリケーションから，TECSベースのシステムログ機能
+ *  を呼び出すためのアダプタの組上げ記述
  *
- *  ã·ã¹ãã ã­ã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã«ï¼syslogé¢æ°ã¨syslog_0é¢æ°ï½syslog_5
- *  é¢æ°ä»¥å¤ã®ãã®ï¼ã«ãCè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããå¼ã³åºããª
- *  ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ããã°ããï¼
+ *  システムログ機能のサービスコール（syslog関数とsyslog_0関数～syslog_5
+ *  関数以外のもの）ルをC言語で記述されたアプリケーションから呼び出さな
+ *  い場合には，以下のセルの組上げ記述を削除すればよい．
  */
 cell tSysLogAdapter SysLogAdapter {
@@ -62,28 +61,27 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®çµä¸ãè¨è¿°
+ *  シリアルインタフェースドライバの組上げ記述
  *
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨
- *  è¿°ãåé¤ããã°ããï¼ãã ãï¼ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¯ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼
- *  ã¹ãã©ã¤ããä½¿ç¨ããããï¼ãããå¤ããã¨ãå¿
-è¦ã§ããï¼ã¾ãï¼ã·ãªã¢
- *  ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¢ããã¿ãå¤ããªããã°ãªããªãï¼
+ *  シリアルインタフェースドライバを外す場合には，以下のセルの組上げ記
+ *  述を削除すればよい．ただし，システムログタスクはシリアルインタフェー
+ *  スドライバを使用するため，それも外すことが必要である．また，シリア
+ *  ルインタフェースドライバのアダプタも外さなければならない．
  */
 cell tSerialPort SerialPort1 {
-	receiveBufferSize = 256;			/* åä¿¡ãããã¡ã®ãµã¤ãº */
-	sendBufferSize    = 256;			/* éä¿¡ãããã¡ã®ãµã¤ãº */
+	receiveBufferSize = 256;			/* 受信バッファのサイズ */
+	sendBufferSize    = 256;			/* 送信バッファのサイズ */
 
-	/* ã¿ã¼ã²ããä¾å­é¨ã¨ã®çµå */
+	/* ターゲット依存部との結合 */
 	cSIOPort = SIOPortTarget1.eSIOPort;
-	eiSIOCBR <= SIOPortTarget1.ciSIOCBR;	/* ã³ã¼ã«ããã¯ */
+	eiSIOCBR <= SIOPortTarget1.ciSIOCBR;	/* コールバック */
 };
 
 /*
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ãªã¢ã«ã¤ã³ã¿
- *  ãã§ã¼ã¹ãã©ã¤ããå¼ã³åºãããã®ã¢ããã¿ã®çµä¸ãè¨è¿°
+ *  C言語で記述されたアプリケーションから，TECSベースのシリアルインタ
+ *  フェースドライバを呼び出すためのアダプタの組上げ記述
  *
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãµã¼ãã¹ã³ã¼ã«ãCè¨èªã§è¨è¿°ãããã¢
- *  ããªã±ã¼ã·ã§ã³ããå¼ã³åºããªãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãå
- *  é¤ããã°ããï¼
+ *  シリアルインタフェースドライバのサービスコールをC言語で記述されたア
+ *  プリケーションから呼び出さない場合には，以下のセルの組上げ記述を削
+ *  除すればよい．
  */
 cell tSerialAdapter SerialAdapter {
@@ -92,33 +90,32 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®çµä¸ãè¨è¿°
+ *  システムログタスクの組上げ記述
  *
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ãã
- *  ã°ããï¼
+ *  システムログタスクを外す場合には，以下のセルの組上げ記述を削除すれ
+ *  ばよい．
  */
 cell tLogTask LogTask {
-	priority  = 3;					/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®åªå
-åº¦ */
-	stackSize = LogTaskStackSize;	/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
+	priority  = 3;					/* システムログタスクの優先度 */
+	stackSize = LogTaskStackSize;	/* システムログタスクのスタックサイズ */
 
-	/* ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå */
+	/* シリアルインタフェースドライバとの結合 */
 	cSerialPort        = SerialPort1.eSerialPort;
 	cnSerialPortManage = SerialPort1.enSerialPortManage;
 
-	/* ã·ã¹ãã ã­ã°æ©è½ã¨ã®çµå */
+	/* システムログ機能との結合 */
 	cSysLog = SysLog.eSysLog;
 
-	/* ä½ã¬ãã«åºåã¨ã®çµå */
+	/* 低レベル出力との結合 */
 	cPutLog = PutLogTarget.ePutLog;
 };
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸åºåã®çµä¸ãè¨è¿°
+ *  カーネル起動メッセージ出力の組上げ記述
  *
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°
- *  ãåé¤ããã°ããï¼
+ *  カーネル起動メッセージの出力を外す場合には，以下のセルの組上げ記述
+ *  を削除すればよい．
  */
 cell tBanner Banner {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	targetName      = BannerTargetName;
 	copyrightNotice = BannerCopyrightNotice;
Index: azure_iot_hub/trunk/app_iothub_client/src/main.cfg
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/main.cfg	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/src/main.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  サンプルプログラム(1)のシステムコンフィギュレーションファイル
  */
 #include "main.h"
@@ -69,15 +54,15 @@
 INCLUDE("tinet_main.cfg");
 
-/* DHCP ã¯ã©ã¤ã¢ã³ã */
+/* DHCP クライアント */
 #include "netapp/dhcp4_cli.h"
 //INCLUDE("netapp/dhcp4_cli_asp.cfg");
 INCLUDE("netapp/tinet_dhcp4_cli.cfg");
 
-/* DNSã¯ã©ã¤ã¢ã³ã */
+/* DNSクライアント */
 #include "netapp/resolver.h"
 INCLUDE("netapp/resolver_asp.cfg");
 INCLUDE("netapp/tinet_resolver.cfg");
 
-/* NTPã¯ã©ã¤ã¢ã³ã */
+/* NTPクライアント */
 #include "ntp_cli.h"
 //INCLUDE("ntp_cli.cfg");
@@ -93,8 +78,4 @@
 INCLUDE("mbed_api.cfg");
 
-#ifdef IF_ETHER_BTUSB
-INCLUDE("usb_hbth.cfg");
-#endif
-
 INCLUDE("ntshell_main.cfg");
 
Index: azure_iot_hub/trunk/app_iothub_client/src/main.h
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/main.h	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/src/main.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,9 +40,9 @@
 
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (1)ã®ããããã¡ã¤ã«
+ *		サンプルプログラム(1)のヘッダファイル
  */
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®å®ç¾©
+ *  ターゲット依存の定義
  */
 #include <kernel.h>
@@ -68,22 +53,19 @@
 
 /*
- *  åã¿ã¹ã¯ã®åªå
-åº¦ã®å®ç¾©
+ *  各タスクの優先度の定義
  */
 
-#define MAIN_PRIORITY	5		/* ã¡ã¤ã³ã¿ã¹ã¯ã®åªå
-åº¦ */
+#define MAIN_PRIORITY	5		/* メインタスクの優先度 */
 
-#define MAIN_STACK_SIZE		2048	/* ã¡ã¤ã³ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®ãµã¤ãº */
+#define MAIN_STACK_SIZE		2048	/* メインタスクのスタック領域のサイズ */
 
-#define NUM_MAIN_DATAQUEUE	1	/* ã¡ã¤ã³ã¿ã¹ã¯ã§å¾
-ã¡åãã¦ãããã¼ã¿ã­ã¥ã¼ã®ãµã¤ãº */
+#define NUM_MAIN_DATAQUEUE	1	/* メインタスクで待ち受けているデータキューのサイズ */
 
 /*
- *  é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨
+ *  関数のプロトタイプ宣言
  */
 #ifndef TOPPERS_MACRO_ONLY
 
-/* ã¡ã¤ã³ã¿ã¹ã¯ */
+/* メインタスク */
 extern void main_task(intptr_t exinf);
 
Index: azure_iot_hub/trunk/app_iothub_client/src/main_msvc.cfg
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/main_msvc.cfg	(revision 388)
+++ 	(revision )
@@ -1,106 +1,0 @@
-/*
- *  TOPPERS ECHONET Lite Communication Middleware
- * 
- *  Copyright (C) 2014-2016 Cores Co., Ltd. Japan
- * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
- * 
- *  @(#) $Id$
- */
-
-/*
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
- */
-#include "main.h"
-#include <tinet_config.h>
-#include <net/net_endian.h>
-#include <netinet/in.h>
-#include <netinet/in_itron.h>
-#include <tinet_nic_defs.h>
-#include <netinet/in_var.h>
-#include <net/ethernet.h>
-#include <net/if6_var.h>
-
-INCLUDE("target_kernel.cfg");
-INCLUDE("syssvc/syslog.cfg");
-INCLUDE("syssvc/banner.cfg");
-INCLUDE("syssvc/serial.cfg");
-INCLUDE("syssvc/logtask.cfg");
-
-INCLUDE("tinet/tinet_asp.cfg");
-INCLUDE("tinet_main.cfg");
-
-/* DHCP ã¯ã©ã¤ã¢ã³ã */
-#include "netapp/dhcp4_cli.h"
-//INCLUDE("netapp/dhcp4_cli_asp.cfg");
-INCLUDE("netapp/tinet_dhcp4_cli.cfg");
-
-/* DNSã¯ã©ã¤ã¢ã³ã */
-#include "netapp/resolver.h"
-INCLUDE("netapp/resolver_asp.cfg");
-INCLUDE("netapp/tinet_resolver.cfg");
-
-/* NTPã¯ã©ã¤ã¢ã³ã */
-#include "ntp_cli.h"
-//INCLUDE("ntp_cli.cfg");
-INCLUDE("tinet_ntp_cli.cfg");
-
-#include "net_misc.h"
-INCLUDE("net_misc.cfg");
-
-/* FatFs */
-INCLUDE("ffarch.cfg");
-
-/* mbed */
-INCLUDE("mbed_api.cfg");
-
-#ifdef IF_ETHER_BTUSB
-INCLUDE("usb_hbth.cfg");
-#endif
-
-INCLUDE("ntshell_main.cfg");
-
-CRE_TSK(MAIN_TASK, { TA_ACT, 0, main_task, MAIN_PRIORITY, MAIN_STACK_SIZE, NULL });
-CRE_DTQ(MAIN_DATAQUEUE, { TA_TFIFO, NUM_MAIN_DATAQUEUE, NULL });
Index: azure_iot_hub/trunk/app_iothub_client/src/tinet_app_config.h
===================================================================
--- azure_iot_hub/trunk/app_iothub_client/src/tinet_app_config.h	(revision 388)
+++ azure_iot_hub/trunk/app_iothub_client/src/tinet_app_config.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,7 +36,7 @@
 
 /*
- *  ã¤ã³ã¿ã¼ããããã­ãã³ã«ãã¡ããªã¼ã®ãµãã¼ã
- *
- *    Makefile ã§æå®ãã¦ãè¯ã
+ *  インターネットプロトコルファミリーのサポート
+ *
+ *    Makefile で指定しても良い
  */
 
@@ -58,6 +46,6 @@
 /*#define SUPPORT_UDP		UDP			*/
 
-/*ãã¼ã¿ãªã³ã¯å±¤ã®ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ãé¸æãã	*/
-/*ããããä¸ã¤ã ãé¸æã§ããã				*/
+/*データリンク層のネットワークインタフェースを選択する	*/
+/*いずれか一つだけ選択できる。				*/
 
 /*#define SUPPORT_PPP		PointtoPointProtocol	*/
@@ -68,33 +56,33 @@
 
 /*
- *  TCP/IP ã«é¢ããå®ç¾©
- */
-
-/* TCP ã«é¢ããå®ç¾© */
-
-/*
- *  TCP éä¿¡ç«¯ç¹ã®éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½
- *    æ³¨æ: Makefile ã§æå®ãã¦ããã
+ *  TCP/IP に関する定義
+ */
+
+/* TCP に関する定義 */
+
+/*
+ *  TCP 通信端点の送受信ウィンドバッファの省コピー機能
+ *    注意: Makefile で指定している。
  */
 /*#define TCP_CFG_RWBUF_CSAVE_ONLY*/
-			/* TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã¿æå¹ã«ããã	*/
+			/* TCP 通信端点の受信ウィンドバッファの省コピー機能のみ有効にする。	*/
 /*#define TCP_CFG_RWBUF_CSAVE*/
-			/* TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã«ããã	*/
+			/* TCP 通信端点の受信ウィンドバッファの省コピー機能を有効にする。	*/
 /*#define TCP_CFG_SWBUF_CSAVE_ONLY*/
-			/* TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã¿æå¹ã«ããã	*/
+			/* TCP 通信端点の送信ウィンドバッファの省コピー機能のみ有効にする。	*/
 /*#define TCP_CFG_SWBUF_CSAVE*/
-			/* TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã«ããã	*/
-
-/*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã
- *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®æå¤§ã¨ã³ããªæ°ã
- *  ãã ããæ­£å¸¸ã«åä¿¡ããã»ã°ã¡ã³ããç ´æ£ãããããåéåæ°ãå¢å ããã
- *  ã¾ããæå®ããªãã¨å¶éããªãã
+			/* TCP 通信端点の送信ウィンドバッファの省コピー機能を有効にする。	*/
+
+/*
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能の、
+ *  受信ウィンドバッファキューの最大エントリ数。
+ *  ただし、正常に受信したセグメントも破棄するため、再送回数が増加する。
+ *  また、指定しないと制限しない。
  */
 /*#define TCP_CFG_RWBUF_CSAVE_MAX_QUEUES	2*/
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã§ã
- *  éä¿¡ã¦ã£ã³ããããã¡ã«ä½¿ç¨ãããããã¯ã¼ã¯ãããã¡ã®ãµã¤ãºã
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能で、
+ *  送信ウィンドバッファに使用するネットワークバッファのサイズ。
  */
 #define USE_TCP_MSS_SEG
@@ -104,10 +92,10 @@
 #ifdef SUPPORT_INET6
 
-#define TCP_CFG_SWBUF_CSAVE_MAX_SIZE	(IF_HDR_SIZE + IPV6_MMTU)	/* æå¤§ãµã¤ãº */
+#define TCP_CFG_SWBUF_CSAVE_MAX_SIZE	(IF_HDR_SIZE + IPV6_MMTU)	/* 最大サイズ */
 
 #else	/* of #ifdef SUPPORT_INET6 */
 
 #ifdef SUPPORT_INET4
-#define TCP_CFG_SWBUF_CSAVE_MAX_SIZE	(IF_HDR_SIZE + IP4_MSS)		/* æå¤§ãµã¤ãº */
+#define TCP_CFG_SWBUF_CSAVE_MAX_SIZE	(IF_HDR_SIZE + IP4_MSS)		/* 最大サイズ */
 #endif
 
@@ -116,12 +104,12 @@
 #else	/* of #ifdef USE_TCP_MSS_SEG */
 
-#define TCP_CFG_SWBUF_CSAVE_MAX_SIZE	IF_PDU_SIZE			/* æå¤§ãµã¤ãº */
+#define TCP_CFG_SWBUF_CSAVE_MAX_SIZE	IF_PDU_SIZE			/* 最大サイズ */
 
 #endif	/* of #ifdef USE_TCP_MSS_SEG */
 
-#define TCP_CFG_SWBUF_CSAVE_MIN_SIZE	0				/* æå°ãµã¤ãº */
-
-/*
- *  TCP ã®ãã³ãã­ãã­ã³ã°ã³ã¼ã«æ©è½
+#define TCP_CFG_SWBUF_CSAVE_MIN_SIZE	0				/* 最小サイズ */
+
+/*
+ *  TCP のノンブロッキングコール機能
  */
 
@@ -131,8 +119,8 @@
 
 /*
- *  MAX_TCP_SND_SEG: éä¿¡ã»ã°ã¡ã³ããµã¤ãºã®æå¤§å¤
- *
- *    ç¸æãã MSS ãªãã·ã§ã³ã§ã»ã°ã¡ã³ããµã¤ãºãæå®ããã¦ãã
- *    ãã®å¤ã§ãã»ã°ã¡ã³ããµã¤ãºãå¶éã§ããã
+ *  MAX_TCP_SND_SEG: 送信セグメントサイズの最大値
+ *
+ *    相手から MSS オプションでセグメントサイズを指定されても、
+ *    この値で、セグメントサイズを制限できる。
  */
 
@@ -158,5 +146,5 @@
 
 /*
- *  DEF_TCP_RCV_SEG: åä¿¡ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤
+ *  DEF_TCP_RCV_SEG: 受信セグメントサイズの規定値
  */
 
@@ -182,12 +170,9 @@
 
 /*
- *  ã¿ã¹ã¯ããã® Time Wait ç¶æ
-ã® TCP éä¿¡ç«¯ç¹åé¢æ©è½
- *
- *  Time Wait ç¶æ
-ã® TCP éä¿¡ç«¯ç¹ã®ã¨ã³ããªæ°ãæå®ããã
- *  æå®ããªããã0 ãæå®ããã¨ã
- *  ã¿ã¹ã¯ãã Time Wait ç¶æ
-ã® TCP éä¿¡ç«¯ç¹ãåé¢ããæ©è½ã¯çµè¾¼ã¾ãªãã
+ *  タスクからの Time Wait 状態の TCP 通信端点分離機能
+ *
+ *  Time Wait 状態の TCP 通信端点のエントリ数を指定する。
+ *  指定しないか、0 を指定すると、
+ *  タスクから Time Wait 状態の TCP 通信端点を分離する機能は組込まない。
  */
 #if !defined(SUPPORT_TCP)
@@ -200,19 +185,17 @@
 
 /*
- *  TCP ãããã®ãã¬ã¼ã¹åºåæ©è½
+ *  TCP ヘッダのトレース出力機能
  */
 //#define TCP_CFG_TRACE
 
 /*
- *  ãã¬ã¼ã¹åºåå¯¾è±¡ã®ãªã¢ã¼ããã¹ãã® IPv4 ã¢ãã¬ã¹
- *  IPV4_ADDRANY ãæå®ããã¨ãå
-¨ã¦ã®ãã¹ããå¯¾è±¡ã¨ããã
+ *  トレース出力対象のリモートホストの IPv4 アドレス
+ *  IPV4_ADDRANY を指定すると、全てのホストを対象とする。
  */
 #define TCP_CFG_TRACE_IPV4_RADDR	IPV4_ADDRANY
 
 /*
- *  ãã¬ã¼ã¹åºåå¯¾è±¡ã®ãªã¢ã¼ããã¹ãã®ãã¼ãçªå·
- *  TCP_PORTANY ãæå®ããã¨ãå
-¨ã¦ã®ãã¼ãçªå·ãå¯¾è±¡ã«ããã
+ *  トレース出力対象のリモートホストのポート番号
+ *  TCP_PORTANY を指定すると、全てのポート番号を対象にする。
  */
 #define TCP_CFG_TRACE_RPORTNO		TCP_PORTANY
@@ -220,7 +203,6 @@
 
 /*
- *  ãã¬ã¼ã¹åºåå¯¾è±¡ã®ã­ã¼ã«ã«ãã¹ãã®ãã¼ãçªå·
- *  TCP_PORTANY ãæå®ããã¨ãå
-¨ã¦ã®ãã¼ãçªå·ãå¯¾è±¡ã«ããã
+ *  トレース出力対象のローカルホストのポート番号
+ *  TCP_PORTANY を指定すると、全てのポート番号を対象にする。
  */
 #define TCP_CFG_TRACE_LPORTNO		TCP_PORTANY
@@ -228,14 +210,13 @@
 
 /*
- *  ITRON TCP/IP APIãTCP ã®æ¡å¼µæ©è½
+ *  ITRON TCP/IP API、TCP の拡張機能
  */
 #define TCP_CFG_EXTENTIONS
 
 /*
- *  TCP_CFG_URG_OFFSET: ç·æ¥ãã¼ã¿ã®æå¾ã®ãã¤ãã®ãªãã»ãã
- *
- *    -1: BSD ã®å®è£
-ãç·æ¥ãã¤ã³ã¿ã¯ãç·æ¥ãã¼ã¿ã®æå¾ã®ãã¤ãã®æ¬¡ã®ãã¤ããå·®ãã
- *     0: RFC1122 ã®è¦å®ãç·æ¥ãã¤ã³ã¿ã¯ãç·æ¥ãã¼ã¿ã®æå¾ã®ãã¤ããå·®ãã
+ *  TCP_CFG_URG_OFFSET: 緊急データの最後のバイトのオフセット
+ *
+ *    -1: BSD の実装、緊急ポインタは、緊急データの最後のバイトの次のバイトを差す。
+ *     0: RFC1122 の規定、緊急ポインタは、緊急データの最後のバイトを差す。
  */
 
@@ -243,8 +224,8 @@
 //#define TCP_CFG_URG_OFFSET	0
 
-/* UDP ã«é¢ããå®ç¾© */
-
-/*
- *  UDP ã®ãã³ãã­ãã­ã³ã°ã³ã¼ã«æ©è½
+/* UDP に関する定義 */
+
+/*
+ *  UDP のノンブロッキングコール機能
  */
 
@@ -254,9 +235,9 @@
 
 /*
- *  ITRON TCP/IP APIãUDP ã®æ¡å¼µæ©è½
+ *  ITRON TCP/IP API、UDP の拡張機能
  */
 #define UDP_CFG_EXTENTIONS
 
-/* IPv6 ã«é¢ããå®ç¾© */
+/* IPv6 に関する定義 */
 
 #ifdef SUPPORT_PPP
@@ -281,5 +262,5 @@
 #endif	/* of #ifdef SUPPORT_ETHER */
 
-/* IPv4 ã«é¢ããå®ç¾© */
+/* IPv4 に関する定義 */
 
 #ifdef SUPPORT_PPP
@@ -288,5 +269,5 @@
 #define IPV4_ADDR_LOCAL			MAKE_IPV4_ADDR(192,168,1,21)
 #else
-#define IPV4_ADDR_LOCAL			MAKE_IPV4_ADDR(0,0,0,0)		/* ç¸æã«å²ãå½ã¦ã¦ãããå ´å	*/
+#define IPV4_ADDR_LOCAL			MAKE_IPV4_ADDR(0,0,0,0)		/* 相手に割り当ててもらう場合	*/
 #endif
 
@@ -294,5 +275,5 @@
 #define IPV4_ADDR_REMOTE		MAKE_IPV4_ADDR(192,168,1,31)
 #else
-#define IPV4_ADDR_REMOTE		MAKE_IPV4_ADDR(0,0,0,0)		/* ç¸æã«å²ãå½ã¦ã¦ãããå ´å	*/
+#define IPV4_ADDR_REMOTE		MAKE_IPV4_ADDR(0,0,0,0)		/* 相手に割り当ててもらう場合	*/
 #endif
 
@@ -335,77 +316,75 @@
 
 /*
- *  ãã¼ã¿ãªã³ã¯å±¤ (ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹) ã«é¢ããå®ç¾©
- */
-
-/*
- *  ã¤ã¼ãµãããã«é¢ããå®ç¾©
- */
-
-/*
- *  PPP ã«é¢ããå®ç¾©
- */
-
-#define HDLC_PORTID			1	/* HDLC(PPP)ã«ç¨ããã·ãªã¢ã«ãã¼ãçªå·	*/
+ *  データリンク層 (ネットワークインタフェース) に関する定義
+ */
+
+/*
+ *  イーサネットに関する定義
+ */
+
+/*
+ *  PPP に関する定義
+ */
+
+#define HDLC_PORTID			1	/* HDLC(PPP)に用いるシリアルポート番号	*/
 
 /*#define PPP_IDLE_TIMEOUT		(180*NET_TIMER_HZ)*/
-					/* åæ­ã¾ã§ã®ã¢ã¤ãã«æéã		*/
-					/* åæ­ããªãå ´åã¯ã³ã¡ã³ãã¢ã¦ãããã	*/
-
-/*#define PPP_CFG_MODEM			 ã¢ãã æ¥ç¶ã®å ´åã¯ã³ã¡ã³ããå¤ãã	*/
+					/* 切断までのアイドル時間、		*/
+					/* 切断しない場合はコメントアウトする。	*/
+
+/*#define PPP_CFG_MODEM			 モデム接続の場合はコメントを外す。	*/
 
 #define MODEM_CFG_INIT			"ATE1&D0&S0\\V0\\Q1S0=1"
-					/* ã¢ãã åæåæå­å			*/
-					/* NTT DoComo ã¢ãã¤ã«ã¢ããã¿ 96F ç¨	*/
-					/*   E1: ã¨ã³ã¼ããã¯ãã			*/
-					/*  &D0: ERä¿¡å·ç¡è¦			*/
-					/*  &S0: DRä¿¡å·å¸¸æ ON			*/
-					/*  \V0: ãªã¶ã«ãã³ã¼ã TYPE 1		*/
-					/*  \Q1: XON/XOFF ãã­ã¼å¶å¾¡		*/
-					/* S0=1: èªåçä¿¡ãªã³ã°åæ° = 1 å	*/
+					/* モデム初期化文字列			*/
+					/* NTT DoComo モバイルアダプタ 96F 用	*/
+					/*   E1: エコーバックあり			*/
+					/*  &D0: ER信号無視			*/
+					/*  &S0: DR信号常時 ON			*/
+					/*  \V0: リザルトコード TYPE 1		*/
+					/*  \Q1: XON/XOFF フロー制御		*/
+					/* S0=1: 自動着信リング回数 = 1 回	*/
 
 #define MODEM_CFG_PHONE_NUMBER		"090-xxxx-9242"
 
-					/* èªæ§ææ
-å ±ã®è¦å®å¤			*/
+					/* 自構成情報の規定値			*/
 #define DEF_LCP_LOCAL_CFGS		(LCP_CFG_MRU|LCP_CFG_ACCM|LCP_CFG_MAGIC|\
 					 LCP_CFG_ACCOMP|LCP_CFG_PCOMP|LCP_CFG_PAP)
 
-					/* ç¸æã«è¨±ãæ§ææ
-å ±ã®è¦å®å¤		*/
+					/* 相手に許す構成情報の規定値		*/
 #define DEF_LCP_REMOTE_CFGS		(LCP_CFG_MRU|LCP_CFG_ACCM|LCP_CFG_MAGIC|\
 					 LCP_CFG_ACCOMP|LCP_CFG_PCOMP|LCP_CFG_PAP)
 
 /*
- *  èªè¨¼ã«é¢ããå®ç¾©
- */
-
-#define AUTH_CFG_CLIENT		   	/* èªè¨¼ã¯ã©ã¤ã¢ã³ãã¢ã¼ãã®æã¯ã³ã¡ã³ããå¤ãã	*/
-#define AUTH_CFG_SERVER			/* èªè¨¼ãµã¼ãã¢ã¼ãã®æã¯ã³ã¡ã³ããå¤ãã		*/
-
-#define AUTH_LOCAL_USER			"h8"		/* èªãã¹ãã¸ã®ã­ã°ã¤ã³èªè¨¼ã¦ã¼ã¶å	*/
-#define AUTH_LOCAL_PASSWD		"3048f"		/* èªãã¹ãã¸ã®ã­ã°ã¤ã³èªè¨¼ãã¹ã¯ã¼ã	*/
-#define AUTH_REMOTE_USER		"pen3"		/* ç¸æã¸ã®ã­ã°ã¤ã³èªè¨¼ã¦ã¼ã¶å		*/
-#define AUTH_REMOTE_PASSWD		"600MHz"	/* ç¸æã¸ã®ã­ã°ã¤ã³èªè¨¼ãã¹ã¯ã¼ã		*/
-
-/*
- *  ARP ã«é¢ããå®ç¾©
- */
-
-/*#define ARP_CFG_CALLBACK_DUPLICATED*/	/* IP ã¢ãã¬ã¹éè¤æ¤åºã³ã¼ã«ããã¯é¢æ°ã	*/
-					/* å®ç¾©ããå ´åã¯ã³ã¡ã³ããå¤ãã		*/
-
-/*
- *  ICMPv4/v6 ã«é¢ããå®ç¾©
+ *  認証に関する定義
+ */
+
+#define AUTH_CFG_CLIENT		   	/* 認証クライアントモードの時はコメントを外す。	*/
+#define AUTH_CFG_SERVER			/* 認証サーバモードの時はコメントを外す。		*/
+
+#define AUTH_LOCAL_USER			"h8"		/* 自ホストへのログイン認証ユーザ名	*/
+#define AUTH_LOCAL_PASSWD		"3048f"		/* 自ホストへのログイン認証パスワード	*/
+#define AUTH_REMOTE_USER		"pen3"		/* 相手へのログイン認証ユーザ名		*/
+#define AUTH_REMOTE_PASSWD		"600MHz"	/* 相手へのログイン認証パスワード		*/
+
+/*
+ *  ARP に関する定義
+ */
+
+/*#define ARP_CFG_CALLBACK_DUPLICATED*/	/* IP アドレス重複検出コールバック関数を	*/
+					/* 定義する場合はコメントを外す。		*/
+
+/*
+ *  ICMPv4/v6 に関する定義
  */
 
 #ifdef USE_PING
 
-#define ICMP_CFG_CALLBACK_ECHO_REPLY	/* ICMP ECHO å¿ç­ãåä¿¡ããã¨ãå¼åºãã³ã¼ã«ããã¯é¢æ°ã	*/
-					/* å®ç¾©ããå ´åã¯ã³ã¡ã³ããå¤ãã			*/
+#define ICMP_CFG_CALLBACK_ECHO_REPLY	/* ICMP ECHO 応答を受信したとき呼出すコールバック関数を	*/
+					/* 定義する場合はコメントを外す。			*/
 
 #endif	/* of #ifdef USE_PING */
 
 /*
- *  ãããã¯ã¼ã¯ãããã¡ã«é¢ããå®ç¾©
+ *  ネットワークバッファに関する定義
  */
 
@@ -413,15 +392,15 @@
 
 /*
- *  ã¤ã¼ãµãããã®å ´åã®ãããã¯ã¼ã¯ãããã¡æ°ã®å²ãå½ã¦
- */
-
-/*
- *  64 ãªã¯ããã
- *
- *    IPv4 ã§ã®ã¿å²ãå½ã¦ãã
- *
- *    IPv6 ã§ã¯ãTCP å¶å¾¡ã»ã°ã¡ã³ãï¼CSEGãSDU ãªãï¼ãµã¤ãºã®
- *    ãããã¯ã¼ã¯ãããã¡ï¼IF + IPv6 + TCP = 74ï¼ä»¥ä¸ã®
- *    ãããã¯ã¼ã¯ãããã¡ã¯ä¸è¦ã§ããã
+ *  イーサネットの場合のネットワークバッファ数の割り当て
+ */
+
+/*
+ *  64 オクテット
+ *
+ *    IPv4 でのみ割り当てる。
+ *
+ *    IPv6 では、TCP 制御セグメント（CSEG、SDU なし）サイズの
+ *    ネットワークバッファ（IF + IPv6 + TCP = 74）以下の
+ *    ネットワークバッファは不要である。
  */
 
@@ -437,13 +416,13 @@
 
 /*
- *  CSEGï¼IF + IP + TCPï¼
- *
- *    IPv6 ã§ã®ã¿å²ãå½ã¦ãã
- *
- *    MBED Ethernet Controler ã®ãã£ãã¤ã¹ãã©ã¤ãï¼if_mbedï¼ã®æä½å²å½ã¦é·ã¯ã
- *    ã¤ã¼ãµããããã¬ã¼ã ã®æç­é·ã§ãã 60ï¼CRC ã® 4 ãªã¯ããããé¤ãã
- *    æ´ã«ã¢ã©ã¤ã³ãã¦ 62ï¼ãªã¯ãããã§ããã
- *    å¾ã£ã¦ãIPv4 ã§ã¯ãCSEG ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡
- *   ï¼IF + IPv4 + TCP = 54ï¼ã¯ä¸è¦ã§ããã
+ *  CSEG（IF + IP + TCP）
+ *
+ *    IPv6 でのみ割り当てる。
+ *
+ *    MBED Ethernet Controler のディバイスドライバ（if_mbed）の最低割当て長は、
+ *    イーサネットフレームの最短長である 60（CRC の 4 オクテットを除き、
+ *    更にアラインして 62）オクテットである。
+ *    従って、IPv4 では、CSEG サイズのネットワークバッファ
+ *   （IF + IPv4 + TCP = 54）は不要である。
  */
 
@@ -459,9 +438,9 @@
 
 /*
- *  128 ãªã¯ããã
- *
- *    IPv4 ã§ãTCP MSSï¼IP MSSãIF + 576 ãªã¯ãããï¼ã®
- *    ãããã¯ã¼ã¯ãããã¡ãå²ãå½ã¦ãå ´åã
- *    128 ãªã¯ãããã®ãããã¯ã¼ã¯ãããã¡ã¯å²ãå½ã¦ãªãã
+ *  128 オクテット
+ *
+ *    IPv4 で、TCP MSS（IP MSS、IF + 576 オクテット）の
+ *    ネットワークバッファを割り当てる場合、
+ *    128 オクテットのネットワークバッファは割り当てない。
  */
 
@@ -477,9 +456,9 @@
 
 /*
- *  256 ãªã¯ããã
- *
- *    IPv4 ã§ãTCP MSSï¼IP MSSãIF + 576 ãªã¯ãããï¼ã®
- *    ãããã¯ã¼ã¯ãããã¡ãå²ãå½ã¦ãå ´åã
- *    256 ãªã¯ãããã®ãããã¯ã¼ã¯ãããã¡ã¯å²ãå½ã¦ãªãã
+ *  256 オクテット
+ *
+ *    IPv4 で、TCP MSS（IP MSS、IF + 576 オクテット）の
+ *    ネットワークバッファを割り当てる場合、
+ *    256 オクテットのネットワークバッファは割り当てない。
  */
 
@@ -496,9 +475,9 @@
 
 /*
- *  512 ãªã¯ããã	
- *
- *    IPv4 ã§ãTCP MSSï¼IP MSSãIF + 576 ãªã¯ãããï¼ã®
- *    ãããã¯ã¼ã¯ãããã¡ãå²ãå½ã¦ãå ´åã
- *    512 ãªã¯ãããã®ãããã¯ã¼ã¯ãããã¡ã¯å²ãå½ã¦ãªãã
+ *  512 オクテット	
+ *
+ *    IPv4 で、TCP MSS（IP MSS、IF + 576 オクテット）の
+ *    ネットワークバッファを割り当てる場合、
+ *    512 オクテットのネットワークバッファは割り当てない。
  */
 
@@ -514,9 +493,9 @@
 
 /*
- *  TCP MSSï¼IP MSSãIF + 576 ãªã¯ãããï¼
- *
- *   ã»IPv4 ã§ã®ã¿å²ãå½ã¦ãã
- *   ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã§ã
- *     çã³ãã¼ API ãä½¿ç¨ããã¨ãã¯ã+1 å²ãå½ã¦ãã
+ *  TCP MSS（IP MSS、IF + 576 オクテット）
+ *
+ *   ・IPv4 でのみ割り当てる。
+ *   ・送受信ウィンドバッファの省コピー機能が有効で、
+ *     省コピー API を使用するときは、+1 割り当てる。
  */
 
@@ -531,18 +510,18 @@
 #define NUM_MPF_NET_BUF_IP_MSS		6
 #else
-#define NUM_MPF_NET_BUF_IP_MSS		4	/* IF + 576 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_IP_MSS		4	/* IF + 576 オクテット	*/
 #endif
 
 #else	/* of #if defined(SUPPORT_INET4) && defined(USE_TCP_MSS_SEG) */
 
-#define NUM_MPF_NET_BUF_IP_MSS		0	/* IF + 576 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_IP_MSS		0	/* IF + 576 オクテット	*/
 
 #endif	/* of #if defined(SUPPORT_INET4) && defined(USE_TCP_MSS_SEG) */
 
 /*
- *  1024 ãªã¯ããã	
- *
- *    TCP MSS ã®ãããã¯ã¼ã¯ãããã¡ãå²ãå½ã¦ãå ´åã
- *    1024 ãªã¯ãããã®ãããã¯ã¼ã¯ãããã¡ã¯å²ãå½ã¦ãªãã
+ *  1024 オクテット	
+ *
+ *    TCP MSS のネットワークバッファを割り当てる場合、
+ *    1024 オクテットのネットワークバッファは割り当てない。
  */
 
@@ -552,15 +531,15 @@
 
 #if defined(USE_TCP_MSS_SEG)
-#define NUM_MPF_NET_BUF_1024		0	/* 1024 ãªã¯ããã	*/
-#else
-#define NUM_MPF_NET_BUF_1024		2	/* 1024 ãªã¯ããã	*/
-#endif
-
-/*
- *  TCP MSSï¼IPV6 MMTUãIF + 1280 ãªã¯ãããï¼
- *
- *   ã»IPv6 ã§ã®ã¿å²ãå½ã¦ãã
- *   ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã§ã
- *     çã³ãã¼ API ãä½¿ç¨ããã¨ãã¯ã+1 å²ãå½ã¦ãã
+#define NUM_MPF_NET_BUF_1024		0	/* 1024 オクテット	*/
+#else
+#define NUM_MPF_NET_BUF_1024		2	/* 1024 オクテット	*/
+#endif
+
+/*
+ *  TCP MSS（IPV6 MMTU、IF + 1280 オクテット）
+ *
+ *   ・IPv6 でのみ割り当てる。
+ *   ・送受信ウィンドバッファの省コピー機能が有効で、
+ *     省コピー API を使用するときは、+1 割り当てる。
  */
 
@@ -585,10 +564,10 @@
 
 /*
- *  IF æå¤§ PDU ãµã¤ãº
- *
- *   ã»TCP MSS ã®ãããã¯ã¼ã¯ãããã¡ãå²ãå½ã¦ãå ´åã
- *     IF æå¤§ PDU ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ã¯å²ãå½ã¦ãªãã
- *   ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã§ã
- *     çã³ãã¼ API ãä½¿ç¨ããã¨ãã¯ã+1 å²ãå½ã¦ãã
+ *  IF 最大 PDU サイズ
+ *
+ *   ・TCP MSS のネットワークバッファを割り当てる場合、
+ *     IF 最大 PDU サイズのネットワークバッファは割り当てない。
+ *   ・送受信ウィンドバッファの省コピー機能が有効で、
+ *     省コピー API を使用するときは、+1 割り当てる。
  */
 
@@ -612,12 +591,12 @@
 
 /*
- *  65536 ãªã¯ããã
- *
- *  ã»NET_BUF_CFG_LONG_LEN ãå®ç¾©ããã¨ãã®ã¿å²ãå½ã¦ãã
+ *  65536 オクテット
+ *
+ *  ・NET_BUF_CFG_LONG_LEN を定義したときのみ割り当てる。
  */
 
 #ifdef NET_BUF_CFG_LONG_LEN
 
-/* IPv6 ç¨ */
+/* IPv6 用 */
 
 #ifdef NUM_MPF_NET_BUF6_65536
@@ -640,8 +619,8 @@
 
 /*
- *  DNS ãµã¼ãã«é¢ããå®ç¾©
- */
-
-/* DNS ãµã¼ãã® IP ã¢ãã¬ã¹ */
+ *  DNS サーバに関する定義
+ */
+
+/* DNS サーバの IP アドレス */
 
 //#if !defined(DHCP6_CLI_CFG)
@@ -659,5 +638,5 @@
 //#endif
 
-/* DOMAIN å */
+/* DOMAIN 名 */
 
 #if !(defined(DHCP4_CLI_CFG) || defined(DHCP6_CLI_CFG))
@@ -666,17 +645,15 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ãã«é¢ããå®ç¾©
- */
-
-/* DHCPv6 ã®åä½ã¢ã¼ãã®è¨­å® */
+ *  DHCP クライアントに関する定義
+ */
+
+/* DHCPv6 の動作モードの設定 */
 
 #define DHCP6_CLI_CFG_MODE	DHCP6_CLI_CFG_STATELESS
 //#define DHCP6_CLI_CFG_MODE	DHCP6_CLI_CFG_STATEFULL
 
-#define ETHER_OUTPUT_PRIORITY	7	/* Ethernet åºåã¿ã¹ã¯ã®åªå
-åº¦		*/
-#define TCP_OUT_TASK_PRIORITY	6	/* TCP åºåã¿ã¹ã¯ã®åªå
-åº¦			*/
-#define NUM_DTQ_ETHER_OUTPUT	16	/* Ethernet åºåãã¼ã¿ã­ã¥ã¼ãµã¤ãº	*/
+#define ETHER_OUTPUT_PRIORITY	7	/* Ethernet 出力タスクの優先度		*/
+#define TCP_OUT_TASK_PRIORITY	6	/* TCP 出力タスクの優先度			*/
+#define NUM_DTQ_ETHER_OUTPUT	16	/* Ethernet 出力データキューサイズ	*/
 
 #endif /* _TINET_APP_CONFIG_H_ */
Index: azure_iot_hub/trunk/asp3_dcre/Debug/Makefile
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/Debug/Makefile	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/Debug/Makefile	(revision 389)
@@ -9,47 +9,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -57,15 +42,15 @@
 
 #
-#  ã¿ã¼ã²ããã®æå®ï¼Makefile.targetã§ä¸æ¸ããããã®ãé²ãããï¼
+#  ターゲットの指定（Makefile.targetで上書きされるのを防ぐため）
 #
 all:
 
 #
-#  ã¿ã¼ã²ããç¥ç§°ã®å®ç¾©
+#  ターゲット略称の定義
 #
 TARGET = gr_sakura_gcc
 
 #
-#  ãã­ã°ã©ãã³ã°è¨èªã®å®ç¾©
+#  プログラミング言語の定義
 #
 SRCLANG = c
@@ -80,41 +65,41 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ソースファイルのディレクトリの定義
 #
 SRCDIR = ..
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®æ¡å¼µå­ã®è¨­å®
+#  オブジェクトファイル名の拡張子の設定
 #
 OBJEXT = elf
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ã®ãã£ã¬ã¯ããªå
-#  ï¼ã«ã¼ãã«ã©ã¤ãã©ãªãmakeå¯¾è±¡ã«ããæã¯ï¼ç©ºã«å®ç¾©ããï¼
+#  カーネルライブラリ（libkernel.a）のディレクトリ名
+#  （カーネルライブラリもmake対象にする時は，空に定義する）
 #
 KERNEL_LIB = 
 
 #
-#  ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãããã©ããã®å®ç¾©
+#  カーネルを関数単位でコンパイルするかどうかの定義
 #
 KERNEL_FUNCOBJS = 
 
 #
-#  TECSãå¤ããã©ããã®å®ç¾©
+#  TECSを外すかどうかの定義
 #
 OMIT_TECS = 
 
 #
-#  ãã¬ã¼ã¹ã­ã°ãåå¾ãããã©ããã®å®ç¾©
+#  トレースログを取得するかどうかの定義
 #
 ENABLE_TRACE = 
 
 #
-#  éçºãã¼ã«ï¼ã³ã³ãã¤ã©ç­ï¼ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  開発ツール（コンパイラ等）のディレクトリの定義
 #
 DEVTOOLDIR = 
 
 #
-#  ã¦ã¼ãã£ãªãã£ãã­ã°ã©ã ã®åç§°
+#  ユーティリティプログラムの名称
 #
 CFG = ruby -Eutf-8 $(SRCDIR)/cfg/cfg.rb
@@ -122,5 +107,5 @@
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®å®ç¾©
+#  オブジェクトファイル名の定義
 #
 OBJNAME = asp
@@ -134,20 +119,20 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã®å®ç¾©
+#  依存関係ファイルを置くディレクトリの定義
 #
 DEPDIR = deps
 
 #
-#  ã¿ã¼ã²ããä¾å­é¨ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ターゲット依存部のディレクトリの定義
 #
 TARGETDIR = $(SRCDIR)/target/$(TARGET)
 
 #
-#  ã¿ã¼ã²ããä¾å­ã®å®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット依存の定義のインクルード
 #
 include $(TARGETDIR)/Makefile.target
 
 #
-#  TECSçæãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  TECS生成ファイルのディレクトリの定義
 #
 TECSGENDIR = ./gen
@@ -158,5 +143,5 @@
 
 #
-#  TECSãçæããå®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  TECSが生成する定義のインクルード
 #
 ifndef OMIT_TECS
@@ -168,5 +153,5 @@
 
 #
-#  mbedãµã¼ãã¹ã®å®ç¾©
+#  mbedサービスの定義
 #
 
@@ -174,6 +159,5 @@
 
 #
-#  å
-±éã³ã³ãã¤ã«ãªãã·ã§ã³ã®å®ç¾©
+#  共通コンパイルオプションの定義
 #
 COPTS := -g -std=gnu99 $(COPTS)
@@ -194,5 +178,5 @@
 
 #
-#  ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã«é¢ããå®ç¾©
+#  アプリケーションプログラムに関する定義
 #
 APPLNAME = sample1
@@ -217,30 +201,30 @@
 ifdef TINETDIR
 	#
-	#  ãããã¯ã¼ã¯ãµã¼ãã¹ã®å®ç¾©
+	#  ネットワークサービスの定義
 	#
 	NO_USE_TINET_LIBRARY = true
 
-	#  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãä½ããä¸ã¤é¸æããã
+	#  ネットワークインタフェースの選択、何れか一つ選択する。
 	NET_IF = ether
 
-	#  ã¤ã¼ãµãããã»ãã£ãã¤ã¹ãã©ã¤ãã®é¸æ
+	#  イーサネット・ディバイスドライバの選択
 	NET_DEV = if_rx62n
 
-	#  ãããã¯ã¼ã¯å±¤ã®é¸æ
+	#  ネットワーク層の選択
 	#SUPPORT_INET6 = true
 	SUPPORT_INET4 = true
 
-	#  API ã«çµè¾¼ãæ©è½ã®é¸æ
+	#  API に組込む機能の選択
 	#API_CFG_IP4MAPPED_ADDR = true
 
-	#  ãã©ã³ã¹ãã¼ãå±¤ã®é¸æ
+	#  トランスポート層の選択
 	SUPPORT_TCP = true
 	#SUPPORT_UDP = true
 
-	# IGMPãæå¹ã«è¨­å®
+	# IGMPを有効に設定
 	#SUPPORT_IGMP = true
 
 	#
-	#  ãããã¯ã¼ã¯ãµã¼ãã¹ã® Makefile ã®ã¤ã³ã¯ã«ã¼ã
+	#  ネットワークサービスの Makefile のインクルード
 	#
 	include $(SRCDIR)/$(TINETDIR)/Makefile.tinet
@@ -248,5 +232,5 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(TECSGENDIR) $(SRCDIR)/tecs_kernel \
@@ -259,5 +243,5 @@
 
 #
-#  ã¿ã¼ã²ãããã¡ã¤ã«
+#  ターゲットファイル
 #
 .PHONY: all
@@ -275,8 +259,8 @@
 endif
 
-##### ä»¥ä¸ã¯ç·¨éããªããã¨ #####
-
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«é¢ããå®ç¾©
+##### 以下は編集しないこと #####
+
+#
+#  コンフィギュレータに関する定義
 #
 ifndef TINETDIR
@@ -298,14 +282,14 @@
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
-#
-#  KERNEL_ASMOBJS: ã«ã¼ãã«ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãã¢ã»ã³ããªè¨èªã®
-#				   ãªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_COBJS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãCè¨èªã§ï¼ã½ã¼ã¹
-#				 ãã¡ã¤ã«ã¨1å¯¾1ã«å¯¾å¿ãããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_LCSRCS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããCè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ã§ï¼
-#				  1ã¤ã®ã½ã¼ã¹ãã¡ã¤ã«ããè¤æ°ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãç
-#				  æãããã®ï¼
-#  KERNEL_LCOBJS: ä¸ã®ã½ã¼ã¹ãã¡ã¤ã«ããçæããããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
+#  カーネルに関する定義
+#
+#  KERNEL_ASMOBJS: カーネルライブラリに含める，ソースがアセンブリ言語の
+#				   オブジェクトファイル．
+#  KERNEL_COBJS: カーネルのライブラリに含める，ソースがC言語で，ソース
+#				 ファイルと1対1に対応するオブジェクトファイル．
+#  KERNEL_LCSRCS: カーネルのライブラリに含めるC言語のソースファイルで，
+#				  1つのソースファイルから複数のオブジェクトファイルを生
+#				  成するもの．
+#  KERNEL_LCOBJS: 上のソースファイルから生成されるオブジェクトファイル．
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(SRCDIR)/kernel
@@ -315,5 +299,5 @@
 
 #
-#  ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾©
+#  カーネルのファイル構成の定義
 #
 include $(SRCDIR)/kernel/Makefile.kernel
@@ -348,5 +332,5 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãããã£ã¬ã¯ããªã«é¢ããå®ç¾©
+#  ソースファイルのあるディレクトリに関する定義
 #
 vpath %.c $(KERNEL_DIRS) $(SYSSVC_DIRS) $(APPL_DIRS)
@@ -357,5 +341,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã®ããã®å¤æ°ã®å®ç¾©
+#  コンパイルのための変数の定義
 #
 KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS)
@@ -385,10 +369,10 @@
 
 #
-#  tecsgenããCããªãã­ã»ããµãå¼ã³åºãéã®ãªãã·ã§ã³ã®å®ç¾©
+#  tecsgenからCプリプロセッサを呼び出す際のオプションの定義
 #
 TECS_CPP = $(CC) $(CDEFS) $(INCLUDES) $(SYSSVC_CFLAGS) -D TECSGEN -E
 
 #
-#  tecsgenã®å¼åºã
+#  tecsgenの呼出し
 #
 .PHONY: tecs
@@ -398,5 +382,5 @@
 
 #
-#  ã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®çæ
+#  カーネルのコンフィギュレーションファイルの生成
 #
 cfg1_out.c cfg1_out.db: cfg1_out.timestamp ;
@@ -420,5 +404,5 @@
 
 #
-#  ãªãã»ãããã¡ã¤ã«ï¼offset.hï¼ã®çæè¦å
+#  オフセットファイル（offset.h）の生成規則
 #
 $(OFFSET_H): offset.timestamp ;
@@ -428,5 +412,5 @@
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªãã¡ã¤ã«ã®çæ
+#  カーネルライブラリファイルの生成
 #
 libkernel.a: $(OFFSET_H) $(KERNEL_LIB_OBJS)
@@ -436,5 +420,5 @@
 
 #
-#  ä¸¦åmakeã®ããã®ä¾å­é¢ä¿ã®å®ç¾©
+#  並列makeのための依存関係の定義
 #
 $(APPL_OBJS) $(SYSSVC_OBJS): | kernel_cfg.timestamp
@@ -443,11 +427,10 @@
 
 #
-#  ç¹å¥ãªä¾å­é¢ä¿ã®å®ç¾©
+#  特別な依存関係の定義
 #
 tBannerMain.o: $(filter-out tBannerMain.o,$(ALL_OBJS)) $(LIBS_DEP)
 
 #
-#  å
-¨ä½ã®ãªã³ã¯
+#  全体のリンク
 #
 $(OBJFILE): $(ALL_OBJS) $(LIBS_DEP)
@@ -457,5 +440,5 @@
 
 #
-#  ä¾å­é¢ä¿ãã©ã«ãã®ä½æ
+#  依存関係フォルダの作成
 #
 $(DEPDIR):
@@ -463,5 +446,5 @@
 
 #
-#  ã·ã³ãã«ãã¡ã¤ã«ã®çæ
+#  シンボルファイルの生成
 #
 $(OBJNAME).syms: $(OBJFILE)
@@ -469,5 +452,5 @@
 
 #
-#  ãã¤ããªãã¡ã¤ã«ã®çæ
+#  バイナリファイルの生成
 #
 $(OBJNAME).bin: $(OBJFILE)
@@ -477,5 +460,5 @@
 
 #
-#  Sã¬ã³ã¼ããã¡ã¤ã«ã®çæ
+#  Sレコードファイルの生成
 #
 $(OBJNAME).srec: $(OBJFILE)
@@ -486,5 +469,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯å¦ç
+#  エラーチェック処理
 #
 .PHONY: check
@@ -496,5 +479,5 @@
 
 #
-#  ã³ã³ãã¤ã«çµæã®æ¶å»
+#  コンパイル結果の消去
 #
 .PHONY: clean
@@ -521,9 +504,8 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã®ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã¯ï¼å
-±éã®ã³ã³ãã¤ã«ãªãã·ã§ã³
-#  ã®ã¿ãä»ãã¦ã³ã³ãã¤ã«ããï¼
+#  コンフィギュレータが生成したファイルのコンパイルルールの定義
+#
+#  コンフィギュレータが生成したファイルは，共通のコンパイルオプション
+#  のみを付けてコンパイルする．
 #
 ALL_CFG_COBJS = $(CFG_COBJS) cfg1_out.o
@@ -540,14 +522,14 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+#  依存関係ファイルのインクルード
 #
 -include $(DEPDIR)/*.d
 
 #
-#  éçºãã¼ã«ã®ã³ãã³ãåã®å®ç¾©
+#  開発ツールのコマンド名の定義
 #
 ifeq ($(TOOL),gcc)
 	#
-	#  GNUéçºç°å¢ç¨
+	#  GNU開発環境用
 	#
 	ifdef GCC_TARGET
@@ -587,5 +569,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
+#  コンパイルルールの定義
 #
 $(KERNEL_COBJS): %.o: %.c
@@ -633,5 +615,5 @@
 
 #
-#  ããã©ã«ãã³ã³ãã¤ã«ã«ã¼ã«ãä¸æ¸ã
+#  デフォルトコンパイルルールを上書き
 #
 %.o: %.c
Index: azure_iot_hub/trunk/asp3_dcre/DebugCitrus/Makefile
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/DebugCitrus/Makefile	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/DebugCitrus/Makefile	(revision 389)
@@ -9,47 +9,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -57,15 +42,15 @@
 
 #
-#  ã¿ã¼ã²ããã®æå®ï¼Makefile.targetã§ä¸æ¸ããããã®ãé²ãããï¼
+#  ターゲットの指定（Makefile.targetで上書きされるのを防ぐため）
 #
 all:
 
 #
-#  ã¿ã¼ã²ããç¥ç§°ã®å®ç¾©
+#  ターゲット略称の定義
 #
 TARGET = gr_citrus_gcc
 
 #
-#  ãã­ã°ã©ãã³ã°è¨èªã®å®ç¾©
+#  プログラミング言語の定義
 #
 SRCLANG = c
@@ -80,41 +65,41 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ソースファイルのディレクトリの定義
 #
 SRCDIR = ..
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®æ¡å¼µå­ã®è¨­å®
+#  オブジェクトファイル名の拡張子の設定
 #
 OBJEXT = elf
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ã®ãã£ã¬ã¯ããªå
-#  ï¼ã«ã¼ãã«ã©ã¤ãã©ãªãmakeå¯¾è±¡ã«ããæã¯ï¼ç©ºã«å®ç¾©ããï¼
+#  カーネルライブラリ（libkernel.a）のディレクトリ名
+#  （カーネルライブラリもmake対象にする時は，空に定義する）
 #
 KERNEL_LIB = 
 
 #
-#  ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãããã©ããã®å®ç¾©
+#  カーネルを関数単位でコンパイルするかどうかの定義
 #
 KERNEL_FUNCOBJS = 
 
 #
-#  TECSãå¤ããã©ããã®å®ç¾©
+#  TECSを外すかどうかの定義
 #
 OMIT_TECS = 
 
 #
-#  ãã¬ã¼ã¹ã­ã°ãåå¾ãããã©ããã®å®ç¾©
+#  トレースログを取得するかどうかの定義
 #
 ENABLE_TRACE = 
 
 #
-#  éçºãã¼ã«ï¼ã³ã³ãã¤ã©ç­ï¼ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  開発ツール（コンパイラ等）のディレクトリの定義
 #
 DEVTOOLDIR = 
 
 #
-#  ã¦ã¼ãã£ãªãã£ãã­ã°ã©ã ã®åç§°
+#  ユーティリティプログラムの名称
 #
 CFG = ruby -Eutf-8 $(SRCDIR)/cfg/cfg.rb
@@ -122,5 +107,5 @@
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®å®ç¾©
+#  オブジェクトファイル名の定義
 #
 OBJNAME = asp
@@ -134,20 +119,20 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã®å®ç¾©
+#  依存関係ファイルを置くディレクトリの定義
 #
 DEPDIR = deps
 
 #
-#  ã¿ã¼ã²ããä¾å­é¨ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ターゲット依存部のディレクトリの定義
 #
 TARGETDIR = $(SRCDIR)/target/$(TARGET)
 
 #
-#  ã¿ã¼ã²ããä¾å­ã®å®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット依存の定義のインクルード
 #
 include $(TARGETDIR)/Makefile.target
 
 #
-#  TECSçæãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  TECS生成ファイルのディレクトリの定義
 #
 TECSGENDIR = ./gen
@@ -158,5 +143,5 @@
 
 #
-#  TECSãçæããå®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  TECSが生成する定義のインクルード
 #
 ifndef OMIT_TECS
@@ -168,5 +153,5 @@
 
 #
-#  mbedãµã¼ãã¹ã®å®ç¾©
+#  mbedサービスの定義
 #
 
@@ -174,6 +159,5 @@
 
 #
-#  å
-±éã³ã³ãã¤ã«ãªãã·ã§ã³ã®å®ç¾©
+#  共通コンパイルオプションの定義
 #
 COPTS := -g -std=gnu99 $(COPTS)
@@ -194,5 +178,5 @@
 
 #
-#  ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã«é¢ããå®ç¾©
+#  アプリケーションプログラムに関する定義
 #
 APPLNAME = sample1
@@ -217,30 +201,30 @@
 ifdef TINETDIR
 	#
-	#  ãããã¯ã¼ã¯ãµã¼ãã¹ã®å®ç¾©
+	#  ネットワークサービスの定義
 	#
 	NO_USE_TINET_LIBRARY = true
 
-	#  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãä½ããä¸ã¤é¸æããã
+	#  ネットワークインタフェースの選択、何れか一つ選択する。
 	NET_IF = ether
 
-	#  ã¤ã¼ãµãããã»ãã£ãã¤ã¹ãã©ã¤ãã®é¸æ
+	#  イーサネット・ディバイスドライバの選択
 	NET_DEV = if_rx62n
 
-	#  ãããã¯ã¼ã¯å±¤ã®é¸æ
+	#  ネットワーク層の選択
 	#SUPPORT_INET6 = true
 	SUPPORT_INET4 = true
 
-	#  API ã«çµè¾¼ãæ©è½ã®é¸æ
+	#  API に組込む機能の選択
 	#API_CFG_IP4MAPPED_ADDR = true
 
-	#  ãã©ã³ã¹ãã¼ãå±¤ã®é¸æ
+	#  トランスポート層の選択
 	SUPPORT_TCP = true
 	#SUPPORT_UDP = true
 
-	# IGMPãæå¹ã«è¨­å®
+	# IGMPを有効に設定
 	#SUPPORT_IGMP = true
 
 	#
-	#  ãããã¯ã¼ã¯ãµã¼ãã¹ã® Makefile ã®ã¤ã³ã¯ã«ã¼ã
+	#  ネットワークサービスの Makefile のインクルード
 	#
 	include $(SRCDIR)/$(TINETDIR)/Makefile.tinet
@@ -248,5 +232,5 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(TECSGENDIR) $(SRCDIR)/tecs_kernel \
@@ -259,5 +243,5 @@
 
 #
-#  ã¿ã¼ã²ãããã¡ã¤ã«
+#  ターゲットファイル
 #
 .PHONY: all
@@ -275,8 +259,8 @@
 endif
 
-##### ä»¥ä¸ã¯ç·¨éããªããã¨ #####
-
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«é¢ããå®ç¾©
+##### 以下は編集しないこと #####
+
+#
+#  コンフィギュレータに関する定義
 #
 ifndef TINETDIR
@@ -298,14 +282,14 @@
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
-#
-#  KERNEL_ASMOBJS: ã«ã¼ãã«ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãã¢ã»ã³ããªè¨èªã®
-#				   ãªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_COBJS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãCè¨èªã§ï¼ã½ã¼ã¹
-#				 ãã¡ã¤ã«ã¨1å¯¾1ã«å¯¾å¿ãããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_LCSRCS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããCè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ã§ï¼
-#				  1ã¤ã®ã½ã¼ã¹ãã¡ã¤ã«ããè¤æ°ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãç
-#				  æãããã®ï¼
-#  KERNEL_LCOBJS: ä¸ã®ã½ã¼ã¹ãã¡ã¤ã«ããçæããããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
+#  カーネルに関する定義
+#
+#  KERNEL_ASMOBJS: カーネルライブラリに含める，ソースがアセンブリ言語の
+#				   オブジェクトファイル．
+#  KERNEL_COBJS: カーネルのライブラリに含める，ソースがC言語で，ソース
+#				 ファイルと1対1に対応するオブジェクトファイル．
+#  KERNEL_LCSRCS: カーネルのライブラリに含めるC言語のソースファイルで，
+#				  1つのソースファイルから複数のオブジェクトファイルを生
+#				  成するもの．
+#  KERNEL_LCOBJS: 上のソースファイルから生成されるオブジェクトファイル．
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(SRCDIR)/kernel
@@ -315,5 +299,5 @@
 
 #
-#  ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾©
+#  カーネルのファイル構成の定義
 #
 include $(SRCDIR)/kernel/Makefile.kernel
@@ -348,5 +332,5 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãããã£ã¬ã¯ããªã«é¢ããå®ç¾©
+#  ソースファイルのあるディレクトリに関する定義
 #
 vpath %.c $(KERNEL_DIRS) $(SYSSVC_DIRS) $(APPL_DIRS)
@@ -357,5 +341,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã®ããã®å¤æ°ã®å®ç¾©
+#  コンパイルのための変数の定義
 #
 KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS)
@@ -385,10 +369,10 @@
 
 #
-#  tecsgenããCããªãã­ã»ããµãå¼ã³åºãéã®ãªãã·ã§ã³ã®å®ç¾©
+#  tecsgenからCプリプロセッサを呼び出す際のオプションの定義
 #
 TECS_CPP = $(CC) $(CDEFS) $(INCLUDES) $(SYSSVC_CFLAGS) -D TECSGEN -E
 
 #
-#  tecsgenã®å¼åºã
+#  tecsgenの呼出し
 #
 .PHONY: tecs
@@ -398,5 +382,5 @@
 
 #
-#  ã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®çæ
+#  カーネルのコンフィギュレーションファイルの生成
 #
 cfg1_out.c cfg1_out.db: cfg1_out.timestamp ;
@@ -420,5 +404,5 @@
 
 #
-#  ãªãã»ãããã¡ã¤ã«ï¼offset.hï¼ã®çæè¦å
+#  オフセットファイル（offset.h）の生成規則
 #
 $(OFFSET_H): offset.timestamp ;
@@ -428,5 +412,5 @@
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªãã¡ã¤ã«ã®çæ
+#  カーネルライブラリファイルの生成
 #
 libkernel.a: $(OFFSET_H) $(KERNEL_LIB_OBJS)
@@ -436,5 +420,5 @@
 
 #
-#  ä¸¦åmakeã®ããã®ä¾å­é¢ä¿ã®å®ç¾©
+#  並列makeのための依存関係の定義
 #
 $(APPL_OBJS) $(SYSSVC_OBJS): | kernel_cfg.timestamp
@@ -443,11 +427,10 @@
 
 #
-#  ç¹å¥ãªä¾å­é¢ä¿ã®å®ç¾©
+#  特別な依存関係の定義
 #
 tBannerMain.o: $(filter-out tBannerMain.o,$(ALL_OBJS)) $(LIBS_DEP)
 
 #
-#  å
-¨ä½ã®ãªã³ã¯
+#  全体のリンク
 #
 $(OBJFILE): $(ALL_OBJS) $(LIBS_DEP)
@@ -457,5 +440,5 @@
 
 #
-#  ä¾å­é¢ä¿ãã©ã«ãã®ä½æ
+#  依存関係フォルダの作成
 #
 $(DEPDIR):
@@ -463,5 +446,5 @@
 
 #
-#  ã·ã³ãã«ãã¡ã¤ã«ã®çæ
+#  シンボルファイルの生成
 #
 $(OBJNAME).syms: $(OBJFILE)
@@ -469,5 +452,5 @@
 
 #
-#  ãã¤ããªãã¡ã¤ã«ã®çæ
+#  バイナリファイルの生成
 #
 $(OBJNAME).bin: $(OBJFILE)
@@ -477,5 +460,5 @@
 
 #
-#  Sã¬ã³ã¼ããã¡ã¤ã«ã®çæ
+#  Sレコードファイルの生成
 #
 $(OBJNAME).srec: $(OBJFILE)
@@ -486,5 +469,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯å¦ç
+#  エラーチェック処理
 #
 .PHONY: check
@@ -496,5 +479,5 @@
 
 #
-#  ã³ã³ãã¤ã«çµæã®æ¶å»
+#  コンパイル結果の消去
 #
 .PHONY: clean
@@ -521,9 +504,8 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã®ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã¯ï¼å
-±éã®ã³ã³ãã¤ã«ãªãã·ã§ã³
-#  ã®ã¿ãä»ãã¦ã³ã³ãã¤ã«ããï¼
+#  コンフィギュレータが生成したファイルのコンパイルルールの定義
+#
+#  コンフィギュレータが生成したファイルは，共通のコンパイルオプション
+#  のみを付けてコンパイルする．
 #
 ALL_CFG_COBJS = $(CFG_COBJS) cfg1_out.o
@@ -540,14 +522,14 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+#  依存関係ファイルのインクルード
 #
 -include $(DEPDIR)/*.d
 
 #
-#  éçºãã¼ã«ã®ã³ãã³ãåã®å®ç¾©
+#  開発ツールのコマンド名の定義
 #
 ifeq ($(TOOL),gcc)
 	#
-	#  GNUéçºç°å¢ç¨
+	#  GNU開発環境用
 	#
 	ifdef GCC_TARGET
@@ -587,5 +569,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
+#  コンパイルルールの定義
 #
 $(KERNEL_COBJS): %.o: %.c
@@ -633,5 +615,5 @@
 
 #
-#  ããã©ã«ãã³ã³ãã¤ã«ã«ã¼ã«ãä¸æ¸ã
+#  デフォルトコンパイルルールを上書き
 #
 %.o: %.c
Index: azure_iot_hub/trunk/asp3_dcre/MANIFEST
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/MANIFEST	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/MANIFEST	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/README.txt
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/README.txt	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/README.txt	(revision 389)
@@ -1,56 +1,53 @@
 
-	TOPPERS/ASP3 Kernelï¼Release 3.2ï¼
+	TOPPERS/ASP3 Kernel（Release 3.2）
 		Toyohashi Open Platform for Embedded Real-Time Systems/
 		Advanced Standard Profile Kernel
 
-TOPPERS/ASP3ã«ã¼ãã«ï¼TOPPERS/ASPã«ã¼ãã« Release 3.Xï¼ä»¥ä¸ï¼ASP3ã«ã¼ã
-ã«ï¼ã¯ï¼TOPPERS/ASPã«ã¼ãã«ãæ¡å¼µã»æ¹è¯ãããã®ã§ï¼TOPPERSç¬¬3ä¸ä»£ã«ã¼ã
-ã«ï¼ITRONç³»ï¼ã®åºç¤ã¨ãªããã®ã¨ãã¦éçºãããªã¢ã«ã¿ã¤ã ã«ã¼ãã«ã§ãï¼
+TOPPERS/ASP3カーネル（TOPPERS/ASPカーネル Release 3.X．以下，ASP3カーネ
+ル）は，TOPPERS/ASPカーネルを拡張・改良したもので，TOPPERS第3世代カーネ
+ル（ITRON系）の基盤となるものとして開発したリアルタイムカーネルです．
 
-TOPPERS/ASPã«ã¼ãã«ã¯ï¼Î¼ITRON4.0ä»æ§ã®ã¹ã¿ã³ãã¼ããã­ãã¡ã¤ã«æºæ ã®ãª
-ã¢ã«ã¿ã¤ã ã«ã¼ãã«ã§ããTOPPERS/JSPã«ã¼ãã«ãæ¡å¼µã»æ¹è¯ããå½¢ã§éçºãã
-ãã®ã§ãï¼
+TOPPERS/ASPカーネルは，μITRON4.0仕様のスタンダードプロファイル準拠のリ
+アルタイムカーネルであるTOPPERS/JSPカーネルを拡張・改良する形で開発した
+ものです．
 
-ãæåã«èª­ãã¹ããã­ã¥ã¡ã³ãã
+【最初に読むべきドキュメント】
 
-ASP3ã«ã¼ãã«ã®ä»æ§æ¦è¦ãdoc/asp_spec.txtã«ï¼ã¦ã¼ã¶ã¼ãºããã¥ã¢ã«ã
-doc/user.txtã«ããã¾ãï¼ã¾ãï¼å¾æ¥ã®TOPPERSã«ã¼ãã«ããASP3ã«ã¼ãã«ã¸ç§»
-è¡ããããã®æ¹æ³ãè¨è¿°ãããã¤ã°ã¬ã¼ã·ã§ã³ã¬ã¤ããdoc/migration.txtã«ã
-ãã¾ãï¼ASP3ã«ã¼ãã«ãä½¿ç¨ããå ´åã«ã¯ï¼ã¾ãã¯ãããã®ãã­ã¥ã¡ã³ããã
-èª­ã¿ä¸ããï¼
+ASP3カーネルの仕様概要がdoc/asp_spec.txtに，ユーザーズマニュアルが
+doc/user.txtにあります．また，従来のTOPPERSカーネルからASP3カーネルへ移
+行するための方法を記述したマイグレーションガイドがdoc/migration.txtにあ
+ります．ASP3カーネルを使用する場合には，まずはこれらのドキュメントをお
+読み下さい．
 
-ããã¡ã¤ã«ã®é²è¦§ã«ããã£ã¦ã
+【ファイルの閲覧にあたって】
 
-ASP3ã«ã¼ãã«ã®ãã­ã¥ã¡ã³ãï¼ãã¬ã¼ã³ãã­ã¹ããã¡ã¤ã«ï¼ããã³ã½ã¼ã¹ãã¡
-ã¤ã«ãèª­ãéã«ã¯ï¼TABã4ã«è¨­å®ãã¦ãã ããï¼
+ASP3カーネルのドキュメント（プレーンテキストファイル）およびソースファ
+イルを読む際には，TABを4に設定してください．
 
-ãå©ç¨æ¡ä»¶ã
+【利用条件】
 
-ASP3ã«ã¼ãã«ã®å©ç¨æ¡ä»¶ã¯ï¼åãã¡ã¤ã«ã®å
-é ­ã«è¡¨ç¤ºããã¦ããTOPPERSã©ã¤ã»
-ã³ã¹ã§ãï¼TOPPERSã©ã¤ã»ã³ã¹ã«é¢ããFAQãï¼ä»¥ä¸ã®ãã¼ã¸ã«ããã¾ãï¼
+ASP3カーネルの利用条件は，各ファイルの先頭に表示されているTOPPERSライセ
+ンスです．TOPPERSライセンスに関するFAQが，以下のページにあります．
 
 	http://www.toppers.jp/faq/faq_ct12.html
 
-ãè³ªåã»ãã°ã¬ãã¼ãã»æè¦ç­ã®éä»å
-ã
+【質問・バグレポート・意見等の送付先】
 
-ASP3ã«ã¼ãã«ãããè¯ããã®ã«ããããã®ãæè¦ç­ãæ­è¿ãã¾ãï¼ASP3ã«ã¼ã
-ã«ã«é¢ããè³ªåããã°ã¬ãã¼ãï¼ãæè¦ç­ã¯ï¼TOPPERSãã­ã¸ã§ã¯ãã®ä¼å¡ã¯
-TOPPERSéçºè
-ã¡ã¼ãªã³ã°ãªã¹ãï¼dev@toppers.jpï¼å®ã¾ãã¯ASP3ã«ã¼ãã«ã®ã
-ã°ãã©ãã­ã³ã°ã·ã¹ãã ï¼Tracï¼ã«ï¼ãã®ä»ã®æ¹ã¯TOPPERSã¦ã¼ã¶ã¼ãºã¡ã¼ãªã³
-ã°ãªã¹ãï¼users@toppers.jpï¼å®ã«ãé¡ããã¾ãï¼
+ASP3カーネルをより良いものにするためのご意見等を歓迎します．ASP3カーネ
+ルに関する質問やバグレポート，ご意見等は，TOPPERSプロジェクトの会員は
+TOPPERS開発者メーリングリスト（dev@toppers.jp）宛またはASP3カーネルのバ
+グトラッキングシステム（Trac）に，その他の方はTOPPERSユーザーズメーリン
+グリスト（users@toppers.jp）宛にお願いします．
 
-TOPPERSã¦ã¼ã¶ã¼ãºã¡ã¼ãªã³ã°ãªã¹ãã¸ã®ç»é²æ¹æ³ã«ã¤ãã¦ã¯ï¼ä»¥ä¸ã®ãã¼ã¸ã«
-èª¬æãããã¾ãï¼
+TOPPERSユーザーズメーリングリストへの登録方法については，以下のページに
+説明があります．
 
 	http://www.toppers.jp/community.html
 
-ããã¼ãã£ã³ã°ã«ããã£ã¦ã
+【ポーティングにあたって】
 
-ASP3ã«ã¼ãã«ãï¼TOPPERSãã­ã¸ã§ã¯ããããªã¼ãã³ã½ã¼ã¹ã«ãããã¨ãåæã«ï¼
-æªãµãã¼ãã®ã¿ã¼ã²ããã«ãã¼ãã£ã³ã°ãããå ´åã«ã¯ï¼ããããããç¸è«ã
-ã ããã¨å¹¸ãã§ãï¼
+ASP3カーネルを，TOPPERSプロジェクトからオープンソースにすることを前提に，
+未サポートのターゲットにポーティングされる場合には，あらかじめご相談く
+ださると幸いです．
 
-ä»¥ä¸
+以上
Index: azure_iot_hub/trunk/asp3_dcre/arch/gcc/tool_stddef.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/gcc/tool_stddef.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/gcc/tool_stddef.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		t_stddef.hã®éçºç°å¢ä¾å­é¨ï¼GCCç¨ï¼
+ *		t_stddef.hの開発環境依存部（GCC用）
  */
 
@@ -63,34 +48,33 @@
 
 /*
- *  ã³ã³ãã¤ã©ã®æ¡å¼µæ©è½ã®ããã®ãã¯ã­å®ç¾©
- */
-#ifndef __cplusplus					/* C++ã«ã¯inline ããã */
+ *  コンパイラの拡張機能のためのマクロ定義
+ */
+#ifndef __cplusplus					/* C++にはinline がある */
 #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
-									/* C99ã«ã¯inline ããã */
-#define inline	__inline__			/* ã¤ã³ã©ã¤ã³é¢æ° */
+									/* C99にはinline がある */
+#define inline	__inline__			/* インライン関数 */
 #endif /* !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L */
 #endif /* __cplusplus */
 
-#define Inline	static inline		/* ã¤ã³ã©ã¤ã³é¢æ° */
-
-#ifndef __cplusplus					/* C++ã«ã¯asmããã */
-#define asm		__asm__				/* ã¤ã³ã©ã¤ã³ã¢ã»ã³ãã© */
+#define Inline	static inline		/* インライン関数 */
+
+#ifndef __cplusplus					/* C++にはasmがある */
+#define asm		__asm__				/* インラインアセンブラ */
 #endif /* __cplusplus */
 
-#define Asm		__asm__ volatile	/* ã¤ã³ã©ã¤ã³ã¢ã»ã³ãã©ï¼æé©åææ­¢ï¼*/
+#define Asm		__asm__ volatile	/* インラインアセンブラ（最適化抑止）*/
 
 #define NoReturn	__attribute__((__noreturn__))
-									/* ãªã¿ã¼ã³ããªãé¢æ° */
-
-/*
- *  éçºç°å¢ã®æ¨æºã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã®å©ç¨
- *
- *  NULLã®å®ç¾©ãstddef.hããï¼INT_MAXï¼INT_MINï¼UINT_MAXï¼LONG_MAXï¼
- *  LONG_MINï¼ULONG_MAXï¼CHAR_BITã®å®ç¾©ãlimits.hããåãè¾¼ãï¼
- *
- *  C++/EC++ã§ã¯ï¼æ¨æºä»æ§ä¸ã¯ãããã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ãç¨æããã¦
- *  ããã¨ã¯éããªãã®ã§æ³¨æãå¿
-è¦ã§ããï¼ã»ã¨ãã©ã®éçºç°å¢ã§ç¨æãã
- *  ã¦ããï¼ï¼
+									/* リターンしない関数 */
+
+/*
+ *  開発環境の標準インクルードファイルの利用
+ *
+ *  NULLの定義をstddef.hから，INT_MAX，INT_MIN，UINT_MAX，LONG_MAX，
+ *  LONG_MIN，ULONG_MAX，CHAR_BITの定義をlimits.hから取り込む．
+ *
+ *  C++/EC++では，標準仕様上はこれらのインクルードファイルが用意されて
+ *  いるとは限らないので注意が必要である（ほとんどの開発環境で用意され
+ *  ている）．
  */
 #ifndef TOPPERS_MACRO_ONLY
@@ -100,42 +84,42 @@
 
 /*
- *  stdint.hã®ä»£ç¨ã¨ãªãå®ç¾©
- *
- *  éçºç°å¢ã«stdint.hãç¨æããã¦ãããï¼åæ´æ°åã®ãµã¤ãºããããã¿ã¼
- *  ã³ã«å½ã¦ã¯ã¾ãå ´åã«ï¼stdint.hã®ä»£ç¨ã¨ãªãå®ç¾©ãä¸ããï¼
- *
- *  TOPPERS_STDINT_TYPE1: char/short/int/long longã®ãããé·ããããã
- *                        8/16/32/64ãããã§ï¼ãã¤ã³ã¿ã®ãããé·ãlong
- *                        ã®ãããé·ã¨ä¸è´ããå ´å
+ *  stdint.hの代用となる定義
+ *
+ *  開発環境にstdint.hが用意されておらず，各整数型のサイズがあるパター
+ *  ンに当てはまる場合に，stdint.hの代用となる定義を与える．
+ *
+ *  TOPPERS_STDINT_TYPE1: char/short/int/long longのビット長がそれぞれ
+ *                        8/16/32/64ビットで，ポインタのビット長がlong
+ *                        のビット長と一致する場合
  */
 #ifdef TOPPERS_STDINT_TYPE1
 
 /*
- *  ã³ã³ãã¤ã©ä¾å­ã®ãã¼ã¿åã®å®ç¾©
+ *  コンパイラ依存のデータ型の定義
  */
 #ifndef TOPPERS_MACRO_ONLY
 
-typedef signed char			int8_t;		/* ç¬¦å·ä»ã8ãããæ´æ° */
-typedef unsigned char		uint8_t;	/* ç¬¦å·ç¡ã8ãããæ´æ° */
-
-typedef signed short		int16_t;	/* ç¬¦å·ä»ã16ãããæ´æ° */
-typedef unsigned short		uint16_t;	/* ç¬¦å·ç¡ã16ãããæ´æ° */
-
-typedef signed int			int32_t;	/* ç¬¦å·ä»ã32ãããæ´æ° */
-typedef unsigned int		uint32_t;	/* ç¬¦å·ç¡ã32ãããæ´æ° */
-
-typedef signed long long	int64_t;	/* ç¬¦å·ä»ã64ãããæ´æ° */
-typedef unsigned long long	uint64_t;	/* ç¬¦å·ç¡ã64ãããæ´æ° */
-
-typedef int8_t				int_least8_t;	/* 8ãããä»¥ä¸ã®ç¬¦å·ä»ãæ´æ° */
-typedef uint8_t				uint_least8_t;	/* 8ãããä»¥ä¸ã®ç¬¦å·ç¡ãæ´æ° */
-
-typedef long				intptr_t;	/* ãã¤ã³ã¿ãæ ¼ç´ã§ããç¬¦å·ä»ãæ´æ° */
-typedef unsigned long		uintptr_t;	/* ãã¤ã³ã¿ãæ ¼ç´ã§ããç¬¦å·ç¡ãæ´æ° */
+typedef signed char			int8_t;		/* 符号付き8ビット整数 */
+typedef unsigned char		uint8_t;	/* 符号無し8ビット整数 */
+
+typedef signed short		int16_t;	/* 符号付き16ビット整数 */
+typedef unsigned short		uint16_t;	/* 符号無し16ビット整数 */
+
+typedef signed int			int32_t;	/* 符号付き32ビット整数 */
+typedef unsigned int		uint32_t;	/* 符号無し32ビット整数 */
+
+typedef signed long long	int64_t;	/* 符号付き64ビット整数 */
+typedef unsigned long long	uint64_t;	/* 符号無し64ビット整数 */
+
+typedef int8_t				int_least8_t;	/* 8ビット以上の符号付き整数 */
+typedef uint8_t				uint_least8_t;	/* 8ビット以上の符号無し整数 */
+
+typedef long				intptr_t;	/* ポインタを格納できる符号付き整数 */
+typedef unsigned long		uintptr_t;	/* ポインタを格納できる符号無し整数 */
 
 #endif /* TOPPERS_MACRO_ONLY */
 
 /*
- *  ã³ã³ãã¤ã©ä¾å­ã®ãã¼ã¿åã®æ´æ°å®æ°ãä½ããã¯ã­
+ *  コンパイラ依存のデータ型の整数定数を作るマクロ
  */
 #ifndef INT8_C
@@ -172,5 +156,5 @@
 
 /*
- *  ã³ã³ãã¤ã©ä¾å­ã®ãã¼ã¿åã«æ ¼ç´ã§ããæå¤§å¤ã¨æå°å¤ã®å®ç¾©
+ *  コンパイラ依存のデータ型に格納できる最大値と最小値の定義
  */
 #define INT8_MAX			SCHAR_MAX
@@ -197,14 +181,14 @@
 
 /*
- *  æµ®åå°æ°ç¹åã«é¢ããå®ç¾©
- *
- *  TOPPERS_STDFLOAT_TYPE1: floatãIEEE754æºæ ã®åç²¾åº¦æµ®åå°æ°ç¹æ°ï¼
- *							doubleãåç²¾åº¦æµ®åå°æ°ç¹æ°ã®å ´å
+ *  浮動小数点型に関する定義
+ *
+ *  TOPPERS_STDFLOAT_TYPE1: floatがIEEE754準拠の単精度浮動小数点数，
+ *							doubleが倍精度浮動小数点数の場合
  */
 #ifdef TOPPERS_STDFLOAT_TYPE1
 #ifndef TOPPERS_MACRO_ONLY
 
-typedef float		float32_t;			/* IEEE754æºæ ã®åç²¾åº¦æµ®åå°æ°ç¹æ° */
-typedef double		double64_t;			/* IEEE754æºæ ã®åç²¾åº¦æµ®åå°æ°ç¹æ° */
+typedef float		float32_t;			/* IEEE754準拠の単精度浮動小数点数 */
+typedef double		double64_t;			/* IEEE754準拠の倍精度浮動小数点数 */
 
 #endif /* TOPPERS_MACRO_ONLY */
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/Makefile.prc
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/Makefile.prc	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/Makefile.prc	(revision 389)
@@ -1,23 +1,23 @@
 #
-#		Makefileã®ãã­ã»ããµä¾å­é¨ï¼M68040ç¨ï¼
+#		Makefileのプロセッサ依存部（M68040用）
 #
 
 #
-#  GNUéçºç°å¢ã®ã¿ã¼ã²ããã¢ã¼ã­ãã¯ãã£ã®å®ç¾©
+#  GNU開発環境のターゲットアーキテクチャの定義
 #
 GCC_TARGET = rx-elf
 
 #
-#  ãã­ã»ããµä¾å­é¨ãã£ã¬ã¯ããªåã®å®ç¾©
+#  プロセッサ依存部ディレクトリ名の定義
 #
 PRCDIR = $(SRCDIR)/arch/$(PRC)_$(TOOL)
 
 #
-#  ãã¼ã«ä¾å­é¨ãã£ã¬ã¯ããªåã®å®ç¾© 
+#  ツール依存部ディレクトリ名の定義 
 #
 TOOLDIR = $(SRCDIR)/arch/$(TOOL)
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES := $(INCLUDES) -I$(TOOLDIR) -I$(PRCDIR)
@@ -26,5 +26,5 @@
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
+#  カーネルに関する定義
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(PRCDIR)
@@ -33,5 +33,5 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿é¢ä¿ã®å¤æ°ã®å®ç¾©
+#  コンフィギュレータ関係の変数の定義
 #
 CFG_TABS := $(CFG_TABS) --symval-table $(PRCDIR)/prc_sym.def
@@ -39,5 +39,5 @@
 
 #
-#  ãªãã»ãããã¡ã¤ã«çæã®ããã®å®ç¾©
+#  オフセットファイル生成のための定義
 #
 TARGET_OFFSET_TRB = $(PRCDIR)/prc_offset.trb
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_cfg1_out.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_cfg1_out.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_cfg1_out.h	(revision 389)
@@ -1,5 +1,4 @@
 /*
- *		cfg1_out.cã®ãªã³ã¯ã«å¿
-è¦ãªã¹ã¿ãã®å®ç¾©
+ *		cfg1_out.cのリンクに必要なスタブの定義
  */
 
@@ -21,5 +20,5 @@
 
 /*
- *  ãªãã»ãããã¡ã¤ã«ãçæããããã®å®ç¾©
+ *  オフセットファイルを生成するための定義
  */
 const uint8_t	MAGIC_1 = 0x12;
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_check.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_check.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_check.trb	(revision 389)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 # 
-#		ãã¹3ã®çæã¹ã¯ãªããã®ã³ã¢ä¾å­é¨ï¼ARMç¨ï¼
+#		パス3の生成スクリプトのコア依存部（ARM用）
 # 
 #  $Id$
@@ -7,5 +7,5 @@
 
 #
-#  ã¿ã¼ã²ããéä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット非依存部のインクルード
 #
 IncludeTrb("kernel/kernel_check.trb")
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_insn.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_insn.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_insn.h	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -58,5 +43,5 @@
 
 /*
- *		ãã­ã»ããµã®ç¹æ®å½ä»¤ã®ã¤ã³ã©ã¤ã³é¢æ°å®ç¾©ï¼RX630ç¨ï¼
+ *		プロセッサの特殊命令のインライン関数定義（RX630用）
  */
 
@@ -76,5 +61,5 @@
 
 /*
- *  Iãã©ã°, IPLãåå¾ããããã®ãã¯ã­å®ç¾©
+ *  Iフラグ, IPLを取得するためのマクロ定義
  */
 #define PSW_I_MASK		( 0x00010000UL )
@@ -84,5 +69,5 @@
 
 /*
- *  Iãã©ã°, IPLãåå¾ããããã®ãã¯ã­å®ç¾©
+ *  Iフラグ, IPLを取得するためのマクロ定義
  */
 #define PSW_I_MASK		( 0x00010000 )
@@ -94,5 +79,5 @@
 
 /*
- *  ãã­ã»ããµã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿(PSW)ã®ç¾å¨å¤ã®èª­åºã
+ *  プロセッサステータスレジスタ(PSW)の現在値の読出し
  */
 static uint32_t
@@ -106,5 +91,5 @@
 
 /*
- *  ãã­ã»ããµã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿(PSW)ã¸è¨­å®
+ *  プロセッサステータスレジスタ(PSW)へ設定
  */
 static void
@@ -116,5 +101,5 @@
 
 /*
- *  IPLã®ç¾å¨å¤ã®èª­åºã
+ *  IPLの現在値の読出し
  */
 Inline uint32_t
@@ -126,5 +111,5 @@
 
 /*
- *  IPLã¸è¨­å®
+ *  IPLへ設定
  */
 Inline void
@@ -136,5 +121,5 @@
 
 /*
- *  NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ã®ç¦æ­¢
+ *  NMIを除くすべての割込みの禁止
  */
 static void
@@ -146,5 +131,5 @@
 
 /*
- *  NMIãé¤ããã¹ã¦ã®å²è¾¼ã¿ã®è¨±å¯
+ *  NMIを除くすべての割込みの許可
  */
 static void
@@ -156,5 +141,5 @@
 
 /*
- *  ã¨ã³ãã£ã¢ã³å¤æ 16bit
+ *  エンディアン変換 16bit
  */
 static uint16_t
@@ -166,5 +151,5 @@
 
 /*
- *  ã¨ã³ãã£ã¢ã³å¤æ 32bit
+ *  エンディアン変換 32bit
  */
 static uint32_t
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,9 +39,9 @@
 
 /*
- *		kernel.hã®ãã­ã»ããµä¾å­é¨ï¼RX630ç¨ï¼
+ *		kernel.hのプロセッサ依存部（RX630用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_kernel.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯
- *  ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã
- *  ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼
+ *  このインクルードファイルは，target_kernel.h（または，そこからインク
+ *  ルードされるファイル）のみからインクルードされる．他のファイルから
+ *  直接インクルードしてはならない．
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ã«ã¼ãã«æ¬ä½ãã³ã³ãã¤ã«ããããã®ãã¯ã­å®ç¾©
+ *  カーネル本体をコンパイルするためのマクロ定義
  */
 //#define ALLFUNC
@@ -71,45 +56,41 @@
 
 /*
- *  ãµãã¼ãããæ©è½ã®å®ç¾©
+ *  サポートする機能の定義
  */
-#define TOPPERS_TARGET_SUPPORT_DIS_INT		/* dis_intããµãã¼ããã */
-#define TOPPERS_TARGET_SUPPORT_ENA_INT		/* ena_intããµãã¼ããã */
-#define TOPPERS_TARGET_SUPPORT_CLR_INT		/* clr_intããµãã¼ããã */
-#define TOPPERS_TARGET_SUPPORT_RAS_INT		/* ras_intããµãã¼ããã */
-#define TOPPERS_TARGET_SUPPORT_PRB_INT		/* prb_intããµãã¼ããã */
+#define TOPPERS_TARGET_SUPPORT_DIS_INT		/* dis_intをサポートする */
+#define TOPPERS_TARGET_SUPPORT_ENA_INT		/* ena_intをサポートする */
+#define TOPPERS_TARGET_SUPPORT_CLR_INT		/* clr_intをサポートする */
+#define TOPPERS_TARGET_SUPPORT_RAS_INT		/* ras_intをサポートする */
+#define TOPPERS_TARGET_SUPPORT_PRB_INT		/* prb_intをサポートする */
 
 /*
- *  ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿åªå
-åº¦ã®ç¯å²
+ *  カーネル管理の割込み優先度の範囲
  *
- *  TMIN_INTPRIã®å®ç¾©ãå¤æ´ãããã¨ã§ï¼ã©ã®ã¬ãã«ãããé«ãå²è¾¼ã¿åªå
-åº¦
- *  ãæã¤ãã®ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ããããå¤æ´ã§ããï¼
+ *  TMIN_INTPRIの定義を変更することで，どのレベルよりも高い割込み優先度
+ *  を持つものをカーネル管理外の割込みとするかを変更できる．
  *
- *  TMIN_INTPRIã«è¨­å®ã§ããå¤ã¯ï¼-15ï½-1ã®ç¯å²ã§ããï¼ä¾ãã°TMIN_INTPRI
- *  ã-14ã«è¨­å®ããã¨ï¼NMIã«å ãã¦ã¬ãã«7ã®å²è¾¼ã¿ãã«ã¼ãã«ç®¡çå¤ã¨ãªãï¼
- *  TMIN_INTPRIã-15ã«è¨­å®ããã¨ï¼NMIä»¥å¤ã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã
- *  è¨­ããªããã¨ã«ãªãï¼
+ *  TMIN_INTPRIに設定できる値は，-15～-1の範囲である．例えばTMIN_INTPRI
+ *  を-14に設定すると，NMIに加えてレベル7の割込みがカーネル管理外となる．
+ *  TMIN_INTPRIを-15に設定すると，NMI以外にカーネル管理外の割込みを
+ *  設けないことになる．
  */
 #ifndef TMIN_INTPRI
-#define TMIN_INTPRI		( -15 )		/* å²è¾¼ã¿åªå
-åº¦ã®æå°å¤ï¼æé«å¤ï¼*/
+#define TMIN_INTPRI		( -15 )		/* 割込み優先度の最小値（最高値）*/
 #endif /* TMIN_INTPRI */
-#define TMAX_INTPRI		( -1 )		/* å²è¾¼ã¿åªå
-åº¦ã®æå¤§å¤ï¼æä½å¤ï¼ */
+#define TMAX_INTPRI		( -1 )		/* 割込み優先度の最大値（最低値） */
 
 
 /*
- *  å²è¾¼ã¿å±æ§ã®å®ç¾©
+ *  割込み属性の定義
  */
-#define	TA_POSEDGE		TA_EDGE			/* ãã¸ãã£ãã¨ãã¸ããªã¬ */
-#define	TA_NEGEDGE		UINT_C( 0x04 )	/* ãã¬ãã£ãã¨ãã¸ããªã¬ */
-#define	TA_BOTHEDGE		UINT_C( 0x08 )	/* ä¸¡ã¨ãã¸ããªã¬ */
+#define	TA_POSEDGE		TA_EDGE			/* ポジティブエッジトリガ */
+#define	TA_NEGEDGE		UINT_C( 0x04 )	/* ネガティブエッジトリガ */
+#define	TA_BOTHEDGE		UINT_C( 0x08 )	/* 両エッジトリガ */
 
-#define	TA_LOWLEVEL		UINT_C( 0x10 )	/* Lã¬ãã« */
+#define	TA_LOWLEVEL		UINT_C( 0x10 )	/* Lレベル */
 
 
 /*
- *  ããã©ã«ãã®å²è¾¼ã¿/ä¾å¤ãã³ãã©ã®æç¡
+ *  デフォルトの割込み/例外ハンドラの有無
  */
 /*#define	OMIT_DEFAULT_INT_HANDLER*/
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
-# 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+# 
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,11 +42,11 @@
 
 #
-#		ãã¹2ã®çæã¹ã¯ãªããã®ã³ã¢ä¾å­é¨ï¼RX63xç¨ï¼
-#
-
-# 
-#  å²è¾¼ã¿çªå·ã¨å²è¾¼ã¿ãã³ãã©çªå·ã®å®ç¾©
-# 
-#  RX630ã§ã¯å²è¾¼ã¿çªå·ã¨å²è¾¼ã¿ãã³ãã©çªå·ã1å¯¾1ã§å¯¾å¿ããï¼
+#		パス2の生成スクリプトのコア依存部（RX63x用）
+#
+
+# 
+#  割込み番号と割込みハンドラ番号の定義
+# 
+#  RX630では割込み番号と割込みハンドラ番号が1対1で対応する．
 # 
 $INTNO_VALID = [ 16, 21, 23, *(27..59), 62, *(64..79), 90, 91, 92, 93, 98, 102, *(106..112), 114, *(122..167), *(170..203), *(214..253) ]
@@ -69,8 +54,8 @@
 
 # 
-#  ä¾å¤çªå·ã®å®ç¾©
-# 
-#  åºå®ãã¯ã¿ãã¼ãã«ã®ãã¯ã¿ãã¼ãã«ã¢ãã¬ã¹ã®å°ããé çªã«ä¾å¤çªå·ãå²æ¯ãï¼
-#  (äºç´é åãå«ã)
+#  例外番号の定義
+# 
+#  固定ベクタテーブルのベクタテーブルアドレスの小さい順番に例外番号を割振る．
+#  (予約領域も含む)
 # 
 
@@ -78,5 +63,5 @@
 
 # 
-#  INTå²è¾¼ã¿ã®çªå·
+#  INT割込みの番号
 # 
 
@@ -84,7 +69,7 @@
 
 # 
-#  å²è¾¼ã¿çªå·ï¼å²è¾¼ã¿ãã³ãã©çªå·ï¼ä¾å¤çªå·ã®ç¯å²
-# 
-# (äºç´é åãå«ã)
+#  割込み番号，割込みハンドラ番号，例外番号の範囲
+# 
+# (予約領域も含む)
 # 
 
@@ -94,5 +79,5 @@
 
 # 
-#  ATT_ISRã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå·ã¨ããã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã©çªå·
+#  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
 # 
 
@@ -102,5 +87,5 @@
 
 # 
-#  DEF_INTï¼DEF_EXCã§ä½¿ç¨ã§ããå²è¾¼ã¿ãã³ãã©çªå·ï¼CPUä¾å¤ãã³ãã©çªå·
+#  DEF_INT／DEF_EXCで使用できる割込みハンドラ番号／CPU例外ハンドラ番号
 # 
 
@@ -110,6 +95,5 @@
 
 # 
-#  CFG_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå·ã¨å²è¾¼ã¿åªå
-åº¦
+#  CFG_INTで使用できる割込み番号と割込み優先度
 # 
 
@@ -119,5 +103,5 @@
 
 # 
-#  ã¿ã¼ã²ããéä¾å­é¨ã«å«ã¾ããæ¨æºã®å²è¾¼ã¿ç®¡çæ©è½/ä¾å¤ç®¡çæ©è½ã®åæåå¦çãä½¿ç¨ãã
+#  ターゲット非依存部に含まれる標準の割込み管理機能/例外管理機能の初期化処理を使用する
 # 
 
@@ -127,5 +111,5 @@
 
 # 
-#  ã¹ã¿ãã¯ãµã¤ãºã®ãã§ãã¯æ¹æ³æå®
+#  スタックサイズのチェック方法指定
 # 
 
@@ -134,11 +118,9 @@
 
 # 
-#  ã¿ã¹ã¯ã¹ã¿ãã¯ãµã¤ãºã®æå°å¤
-# 
-#  ã¿ã¹ã¯èµ·åæã«4byte,
-#  å²è¾¼ã¿å
-¥å£å¦çã«ã¦48byte, CPUä¾å¤å
-¥å£å¦çã«ã¦84byte,
-#  ã§ãããã, æå°å¤ã¯88byteã¨ãã.
+#  タスクスタックサイズの最小値
+# 
+#  タスク起動時に4byte,
+#  割込み入口処理にて48byte, CPU例外入口処理にて84byte,
+#  であるため, 最小値は88byteとする.
 # 
 
@@ -146,5 +128,5 @@
 
 # 
-#  å®æ°å®ç¾©
+#  定数定義
 # 
 
@@ -152,10 +134,10 @@
 
 #
-#  ã¿ã¼ã²ããå®ç¾©ã®å²è¾¼ã¿è¦æ±ã©ã¤ã³å±æ§
+#  ターゲット定義の割込み要求ライン属性
 #
 $TARGET_INTATR = $TA_POSEDGE|$TA_NEGEDGE|$TA_BOTHEDGE|$TA_LOWLEVEL
 
 # 
-# ã¿ã¼ã²ããä¾å­ã®å²è¾¼ã¿ãã³ãã©å±æ§ã®å®ç¾©
+# ターゲット依存の割込みハンドラ属性の定義
 # 
 
@@ -164,10 +146,10 @@
 
 # 
-# ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿ãã³ãã©ã¯åºå®ãããªããã,
+# カーネル管理外割込みハンドラは固定させないため,
 # INTNO_FIX_KERNEL
 # INHNO_FIX_KERNEL
 # INHNO_FIX_NONKERNEL
 # INHNO_FIX_NONKERNEL
-# ãå®ç¾©ããªã.
+# を定義しない.
 # 
 
@@ -176,11 +158,10 @@
 
 #
-#  æ¨æºãã³ãã¬ã¼ããã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+#  標準テンプレートファイルのインクルード
 #
 IncludeTrb("kernel/kernel.trb")
 
 #
-#  å²è¾¼ã¿çªå·ããå²è¾¼ã¿åªå
-åº¦åã³å±æ§ãåãåºããã¼ãã«
+#  割込み番号から割込み優先度及び属性を取り出すテーブル
 #
 $kernelCfgC.comment_header("Interrupt Level and Attribute Table")
@@ -201,11 +182,11 @@
 
 #
-#  å²è¾¼ã¿ãã¯ã¿åã³å²è¾¼ã¿ãã³ãã©å®ç¾©
+#  割込みベクタ及び割込みハンドラ定義
 #
 $kernelCfgAsm.add(<<EOS)
 ;
-;  RX630ã¢ã¼ã­ãã¯ãã£ä¾å­åºåãã¡ã¤ã«
-;
-;  å²è¾¼ã¿ãã¯ã¿åã³å²è¾¼ã¿ãã³ãã©å®ç¾©
+;  RX630アーキテクチャ依存出力ファイル
+;
+;  割込みベクタ及び割込みハンドラ定義
 ;
 
@@ -277,5 +258,5 @@
 $kernelCfgAsm.append(<<EOS)
 ;
-;  å¯å¤ãã¯ã¿ãã¼ãã«
+;  可変ベクタテーブル
 ;
 
@@ -305,5 +286,5 @@
 $kernelCfgAsm.append(<<EOS)
 ;
-;  åºå®ãã¯ã¿ãã¼ãã«
+;  固定ベクタテーブル
 ;
 
@@ -318,8 +299,8 @@
 	 .word	 0FFFFFFFFH 	 ; OFS0
 	 .space	 010H
-	 .word	 0FFFFFFFFH 	 ; å¶å¾¡ã³ã¼ã, IDã³ã¼ã1 - 3
-	 .word	 0FFFFFFFFH 	 ; IDã³ã¼ã4 - 7
-	 .word	 0FFFFFFFFH 	 ; IDã³ã¼ã8 - 11
-	 .word	 0FFFFFFFFH 	 ; IDã³ã¼ã12 - 15
+	 .word	 0FFFFFFFFH 	 ; 制御コード, IDコード1 - 3
+	 .word	 0FFFFFFFFH 	 ; IDコード4 - 7
+	 .word	 0FFFFFFFFH 	 ; IDコード8 - 11
+	 .word	 0FFFFFFFFH 	 ; IDコード12 - 15
 EOS
 (12..30).each do |excnoVal|
@@ -338,27 +319,27 @@
 
 #
-#  å²è¾¼ã¿è¦æ±ã©ã¤ã³å±æ§ã«é¢ããã¿ã¼ã²ããä¾å­ã®ã¨ã©ã¼ãã§ãã¯
+#  割込み要求ライン属性に関するターゲット依存のエラーチェック
 #
 $cfgData[:CFG_INT].each do |key, params|
-  # IRQå²è¾¼ã¿çªå·ãã©ããããã§ãã¯
+  # IRQ割込み番号かどうかをチェック
   if $INTNO_INT.include?(key)
-    # TA_POSEDGEã¨TA_NEGEDGEãåæã«è¨­å®ããã¦ããå ´å
+    # TA_POSEDGEとTA_NEGEDGEが同時に設定されている場合
     if (params[:intatr].val & ($TA_POSEDGE|$TA_NEGEDGE)) == $TA_POSEDGE|$TA_NEGEDGE
       error_illegal_sym("E_RSATR", params, :intatr, :intno)
     end
-    # TA_POSEDGEã¨TA_BOTHEDGEãåæã«è¨­å®ããã¦ããå ´å
+    # TA_POSEDGEとTA_BOTHEDGEが同時に設定されている場合
     if (params[:intatr].val & ($TA_POSEDGE|$TA_BOTHEDGE)) == $TA_POSEDGE|$TA_BOTHEDGE
       error_illegal_sym("E_RSATR", params, :intatr, :intno)
     end
-    # TA_NEGEDGEã¨TA_BOTHEDGEãåæã«è¨­å®ããã¦ããå ´å
+    # TA_NEGEDGEとTA_BOTHEDGEが同時に設定されている場合
     if (params[:intatr].val & ($TA_NEGEDGE|$TA_BOTHEDGE)) == $TA_NEGEDGE|$TA_BOTHEDGE
       error_illegal_sym("E_RSATR", params, :intatr, :intno)
     end
-    # TA_POSEDGEã¨TA_NEGEDGEã¨TA_BOTHEDGEãåæã«è¨­å®ããã¦ããå ´å
+    # TA_POSEDGEとTA_NEGEDGEとTA_BOTHEDGEが同時に設定されている場合
     if (params[:intatr].val & ($TA_POSEDGE|$TA_NEGEDGE|$TA_BOTHEDGE)) == $TA_POSEDGE|$TA_NEGEDGE|$TA_BOTHEDGE
       error_illegal_sym("E_RSATR", params, :intatr, :intno)
     end
   else
-    # IRQå²è¾¼ã¿ä»¥å¤ã®å²è¾¼ã¿ã«å¯¾ãã¦å²è¾¼ã¿å±æ§ãæå®ããã¦ããå ´å
+    # IRQ割込み以外の割込みに対して割込み属性が指定されている場合
     if (params[:intatr].val & (~($TA_ENAINT|$TA_EDGE))) != 0
       error_illegal_sym("E_RSATR", params, :intatr, :intno)
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel_impl.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel_impl.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel_impl.c	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -58,5 +43,5 @@
 
 /*
- *		ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
+ *		プロセッサ依存モジュール（RX630用）
  */
 
@@ -66,20 +51,19 @@
 
 /*
- *  å²è¾¼ã¿çºçåæ°ãä¿å­ããå¤æ°
+ *  割込み発生回数を保存する変数
  */
 uint16_t	intnest;
 
 /*
- *  CPUã­ãã¯ãã©ã°å®ç¾ã®ããã®å¤æ°
+ *  CPUロックフラグ実現のための変数
  */
 #if TIPM_LOCK != -15
-bool_t		lock_flag;		/* CPUã­ãã¯ãã©ã°ã®å¤ãä¿æããå¤æ° */
-uint32_t	saved_ipl;		/* å²è¾¼ã¿åªå
-åº¦ã¬ãã«ãä¿å­ããå¤æ° */
+bool_t		lock_flag;		/* CPUロックフラグの値を保持する変数 */
+uint32_t	saved_ipl;		/* 割込み優先度レベルを保存する変数 */
 #endif	/* TIPM_LOCK != -15	*/
 
 
 /*
- *  ãã­ã»ããµä¾å­ã®åæå
+ *  プロセッサ依存の初期化
  */
 void
@@ -87,11 +71,8 @@
 {
 	/*
-	 *  å²è¾¼ã¿çºçåæ°ã®åæå
-	 *
-	 *  ã¹ã¿ã¼ãã¢ããã¯å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
- & éã¿ã¹ã¯ã³ã³ãã­ã¹ã
-	 *  ã«ã¦åä½ãããã, éã¿ã¹ã¯ã³ã³ãã­ã¹ãã«å½è£
-ãã.
+	 *  割込み発生回数の初期化
+	 *
+	 *  スタートアップは全割込みロック状態 & 非タスクコンテキスト
+	 *  にて動作するため, 非タスクコンテキストに偽装する.
 	 */
 	intnest = 1U;
@@ -99,5 +80,5 @@
 #if TIPM_LOCK != -15
 	/*
-	 *  CPUã­ãã¯ãã©ã°å®ç¾ã®ããã®å¤æ°ã®åæå
+	 *  CPUロックフラグ実現のための変数の初期化
 	 */
 	lock_flag = true;
@@ -108,5 +89,5 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã®çµäºå¦ç
+ *  プロセッサ依存の終了処理
  */
 void
@@ -114,16 +95,14 @@
 {
 	/*
-	 *  ç¹ã«å¿
-è¦ãªå¦çã¯ãªã
-	 */
-}
-
-
-/*
- *  CPUä¾å¤ã®çºçç¶æ³ã®ã­ã°åºå
+	 *  特に必要な処理はない
+	 */
+}
+
+
+/*
+ *  CPU例外の発生状況のログ出力
  *
- *  CPUä¾å¤ãã³ãã©ã®ä¸­ããï¼CPUä¾å¤æ
-å ±ãã¤ã³ã¿ï¼p_excinfï¼ãå¼æ°ã¨ã
- *  ã¦å¼ã³åºããã¨ã§ï¼CPUä¾å¤ã®çºçç¶æ³ãã·ã¹ãã ã­ã°ã«åºåããï¼
+ *  CPU例外ハンドラの中から，CPU例外情報ポインタ（p_excinf）を引数とし
+ *  て呼び出すことで，CPU例外の発生状況をシステムログに出力する．
  */
 #ifdef SUPPORT_XLOG_SYS
@@ -156,9 +135,9 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨­å®
+ *  割込み要求ラインの属性の設定
  *
- *  ASPã«ã¼ãã«ã§ã®å©ç¨ãæ³å®ãã¦ï¼ãã©ã¡ã¼ã¿ã¨ã©ã¼ã¯ã¢ãµã¼ã·ã§ã³ã§ãã§ã
- *  ã¯ãã¦ããï¼cfg_intãµã¼ãã¹ã³ã¼ã«ãè¨­ããå ´åã«ã¯ï¼ã¨ã©ã¼ãè¿ããã
- *  ã«ãã¹ãã§ãããï¼
+ *  ASPカーネルでの利用を想定して，パラメータエラーはアサーションでチェッ
+ *  クしている．cfg_intサービスコールを設ける場合には，エラーを返すよう
+ *  にすべきであろう．
  */
 void
@@ -181,17 +160,16 @@
 
 	/*
-	 *  å²è¾¼ã¿ã®ãã¹ã¯
-	 *
-	 *  å²è¾¼ã¿ãåãä»ããã¾ã¾ï¼ã¬ãã«ããªã¬ï¼ã¨ãã¸ããªã¬ã®è¨­å®ãï¼å²
-	 *  è¾¼ã¿åªå
-åº¦ã®è¨­å®ãè¡ãã®ã¯å±éºãªããï¼å²è¾¼ã¿å±æ§ã«ãããããï¼
-	 *  ä¸æ¦ãã¹ã¯ããï¼
+	 *  割込みのマスク
+	 *
+	 *  割込みを受け付けたまま，レベルトリガ／エッジトリガの設定や，割
+	 *  込み優先度の設定を行うのは危険なため，割込み属性にかかわらず，
+	 *  一旦マスクする．
 	 */
 	( void )disable_int( intno );
 
 	/*
-	 *  ã¬ãã«ããªã¬/ã¨ãã¸ããªã¬ã®è¨­å®
-	 *
-	 *  IRQã®ã¿ãµãã¼ããã
+	 *  レベルトリガ/エッジトリガの設定
+	 *
+	 *  IRQのみサポートする
 	 */
 	if( INTNO_IRQ( intno ) != 0U ){
@@ -212,6 +190,6 @@
 		else{
 			/*
-			 *  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«ã¦ãã§ãã¯ãã¦ãããã,
-			 *  ããã¸ãããã¨ã¯ããããªã.
+			 *  コンフィギュレータにてチェックしているため,
+			 *  ここへくることはありえない.
 			 */
 			irq_val = 0U;
@@ -222,12 +200,12 @@
 
 	/*
-	 *  å²è¾¼ã¿ã¬ãã«ã®è¨­å®
-	 *
-	 *  å²è¾¼ã¿çªå·ã«å¯¾å¿ããIPRå¤ãè¨­å®ãã.
+	 *  割込みレベルの設定
+	 *
+	 *  割込み番号に対応したIPR値を設定する.
 	 */
 	sil_wrb_mem(ipr_reg_addr[intno], cfg_int_table[intno].intpri);
 
 	/*
-	 *  å²è¾¼ã¿ã®ãã¹ã¯è§£é¤
+	 *  割込みのマスク解除
  	 */
 	if( ( intatr & TA_ENAINT ) != 0U ){
@@ -239,5 +217,5 @@
 #ifndef OMIT_DEFAULT_INT_HANDLER
 /*
- *  æªç»é²ã®å²è¾¼ã¿ãçºçããå ´åã«å¼ã³åºããã
+ *  未登録の割込みが発生した場合に呼び出される
  */
 void
@@ -250,5 +228,5 @@
 #ifndef OMIT_DEFAULT_EXC_HANDLER
 /*
- *  æªç»é²ã®ä¾å¤ãçºçããå ´åã«å¼ã³åºããã
+ *  未登録の例外が発生した場合に呼び出される
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel_impl.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel_impl.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_kernel_impl.h	(revision 389)
@@ -11,47 +11,32 @@
  *  Copyright (C) 2013      by Mitsuhiro Matsuura
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -59,9 +44,9 @@
 
 /*
- *		ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
- *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_kernel_impl.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯
- *  ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã
- *  ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼
+ *		プロセッサ依存モジュール（RX630用）
+ *
+ *  このインクルードファイルは，target_kernel_impl.h（または，そこからインク
+ *  ルードされるファイル）のみからインクルードされる．他のファイルから
+ *  直接インクルードしてはならない．
  */
 
@@ -70,5 +55,5 @@
 
 /*
- *  ãã­ã»ããµã®ç¹æ®å½ä»¤ã®ã¤ã³ã©ã¤ã³é¢æ°å®ç¾©
+ *  プロセッサの特殊命令のインライン関数定義
  */
 #include "prc_insn.h"
@@ -78,5 +63,5 @@
 
 /*
- *  éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯åæå¤
+ *  非タスクコンテキスト用のスタック初期値
  */
 
@@ -84,14 +69,14 @@
 
 /*
- *  ã¿ã¹ã¯ã³ã³ãã­ã¹ããã­ãã¯ã®å®ç¾©
+ *  タスクコンテキストブロックの定義
  */
 typedef struct task_context_block {
-	void	*sp;		/* ã¹ã¿ãã¯ãã¤ã³ã¿ */
-	FP		pc;			/* ãã­ã°ã©ã ã«ã¦ã³ã¿ */
+	void	*sp;		/* スタックポインタ */
+	FP		pc;			/* プログラムカウンタ */
 } TSKCTXB;
 
 
 /*
- *  å²è¾¼ã¿çºçåæ°ãä¿å­ããå¤æ°
+ *  割込み発生回数を保存する変数
  */
 extern uint16_t intnest;
@@ -100,17 +85,13 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã§ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯
- *
- *  TIPM_LOCKã¯ï¼CPUã­ãã¯ç¶æ
-ã§ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ï¼ããªãã¡ï¼ã«ã¼ã
- *  ã«ç®¡çå¤ã®ãã®ãé¤ããã¹ã¦ã®å²è¾¼ã¿è¦æ±ããã¹ã¯ããå¤ã«å®ç¾©ããï¼
- *
- *  TMIN_INTPRIå¤æ´ãããã¨ã§ç®¡çå¤å²è¾¼ã¿ã®æç¡ãæ±ºå®ããï¼
- *  ä¾ãã°TMIN_INTPRIã-14ã«è¨­å®ããã¨ï¼ã¬ãã«15ã®å²è¾¼ã¿ãã«ã¼ãã«ç®¡çå¤ã¨
- *  ãªãï¼TMIN_INTPRIã-15ã«è¨­å®ããã¨ï¼NMIä»¥å¤ã«ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã
- *  è¨­ããªããã¨ã«ãªãï¼ãã®å ´åã«ã¯-15ã«è¨­å®ãããã¨ãæ¨å¥¨ããï¼ï¼
+ *  CPUロック状態での割込み優先度マスク
+ *
+ *  TIPM_LOCKは，CPUロック状態での割込み優先度マスク，すなわち，カーネ
+ *  ル管理外のものを除くすべての割込み要求をマスクする値に定義する．
+ *
+ *  TMIN_INTPRI変更することで管理外割込みの有無を決定する．
+ *  例えばTMIN_INTPRIを-14に設定すると，レベル15の割込みがカーネル管理外と
+ *  なる．TMIN_INTPRIを-15に設定すると，NMI以外にカーネル管理外の割込みを
+ *  設けないことになる（この場合には-15に設定することを推奨する）．
  */
 #ifndef TIPM_LOCK
@@ -121,18 +102,16 @@
 
 /*
- *  TOPPERSæ¨æºå²è¾¼ã¿å¦çã¢ãã«ã®å®ç¾
- */
-/*
- *  ã³ã³ãã­ã¹ãã®åç
-§
- *
- *  RXã§ã¯ï¼å²è¾¼ã¿ã®æ»ãå
-ãã¿ã¹ã¯ãã©ãããå¤æ­ããããã« intnest
- *  ãä½¿ç¨ãã¦ããï¼ãããç¨ãã¦ã³ã³ãã­ã¹ããå¤æ­ããï¼
+ *  TOPPERS標準割込み処理モデルの実現
+ */
+/*
+ *  コンテキストの参照
+ *
+ *  RXでは，割込みの戻り先がタスクかどうかを判断するために intnest
+ *  を使用している．これを用いてコンテキストを判断する．
  */
 Inline bool_t
 sense_context( void )
 {
-	/*  ãã¹ãã«ã¦ã³ã¿0ããå¤§ãªãéã¿ã¹ã¯ã³ã³ãã­ã¹ã  */
+	/*  ネストカウンタ0より大なら非タスクコンテキスト  */
 	return ( intnest > 0U );
 }
@@ -140,13 +119,11 @@
 
 /*
- *  CPUã­ãã¯ãã©ã°å®ç¾ã®ããã®å¤æ°
- *
- *  ãããã®å¤æ°ã¯ï¼CPUã­ãã¯ç¶æ
-ã®æã®ã¿æ¸ãæãã¦ãããã®ã¨ããï¼
+ *  CPUロックフラグ実現のための変数
+ *
+ *  これらの変数は，CPUロック状態の時のみ書き換えてよいものとする．
  */
 #if TIPM_LOCK != -15
-extern bool_t	lock_flag;		/* CPUã­ãã¯ãã©ã°ã®å¤ãä¿æããå¤æ° */
-extern uint32_t	saved_ipl;		/* å²è¾¼ã¿åªå
-åº¦ã¬ãã«ãä¿å­ããå¤æ° */
+extern bool_t	lock_flag;		/* CPUロックフラグの値を保持する変数 */
+extern uint32_t	saved_ipl;		/* 割込み優先度レベルを保存する変数 */
 #endif	/* TIPM_LOCK != -15	*/
 
@@ -155,33 +132,23 @@
 
 /*
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®å¤é¨è¡¨ç¾ã¨å
-é¨è¡¨ç¾ã®å¤æ
- *
- *  RX630ã§ã¯ï¼ãã­ã»ããµã¹ãã¼ã¿ã¹ã¯ã¼ãã¬ã¸ã¹ã¿ï¼PSWï¼ã®ä¸ãã
- *  24ï½27ãããç®ã®4ãããã«å²è¾¼ã¿åªå
-åº¦ã¬ãã«ï¼IPLï¼ãç½®ããã¦ããï¼
- *  ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿ãå®è£
-ããå ´åã«IPLãä½¿ç¨ããå¶å¾¡ãè¡ãï¼
- *  ã«ã¼ãã«ã¯å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ï¼-1ããé£ç¶ããè² ã®å¤ï¼ã§ç®¡çããã¦
- *  ããããIPLã¨ã®å¤æãå¿
-è¦ã¨ãªãï¼
- */
-#define IPL_TO_IPM( ipl )	(-(( PRI )(( ipl ) >> 24U )))		/* IPLãIPMã«	*/
-#define IPM_TO_IPL( ipm )	((( uint32_t )(-( ipm ))) << 24U )	/* IPMãIPLã«	*/
-
-
-/*
- *  CPUã­ãã¯ç¶æ
-ã§ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®IPL
+ *  割込み優先度マスクの外部表現と内部表現の変換
+ *
+ *  RX630では，プロセッサステータスワードレジスタ（PSW）の下から
+ *  24～27ビット目の4ビットに割込み優先度レベル（IPL）が置かれている．
+ *  カーネル管理外割込みを実装する場合にIPLを使用した制御を行う．
+ *  カーネルは割込み優先度マスク（-1から連続した負の値）で管理されて
+ *  いるためIPLとの変換が必要となる．
+ */
+#define IPL_TO_IPM( ipl )	(-(( PRI )(( ipl ) >> 24U )))		/* IPLをIPMに	*/
+#define IPM_TO_IPL( ipm )	((( uint32_t )(-( ipm ))) << 24U )	/* IPMをIPLに	*/
+
+
+/*
+ *  CPUロック状態での割込み優先度マスクのIPL
  */
 #define IPL_LOCK		( IPM_TO_IPL( TIPM_LOCK ) )
 
 /*
- *  TIPM_ENAALLï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ï¼ã®IPL
+ *  TIPM_ENAALL（割込み優先度マスク全解除）のIPL
  */
 #define IPL_ENAALL		( IPM_TO_IPL( TIPM_ENAALL ) )
@@ -191,6 +158,6 @@
 
 /*
- *  å²è¾¼ã¿è¦å æ¯ã®ã¬ãã« & å±æ§å®ç¾©ãã¼ãã«
- *  (ãã³ãã¬ã¼ããã¡ã¤ã«ã«ããåºå)
+ *  割込み要因毎のレベル & 属性定義テーブル
+ *  (テンプレートファイルによる出力)
  */
 typedef struct cfg_int_info {
@@ -203,9 +170,8 @@
 
 /*
- *  å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å®
- *
- *  å²è¾¼ã¿çªå·ãæå¹ãªå¤ãå³å¯ã«ãã§ãã¯ãããã,
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿åºåãã¼ãã«ãåç
-§ãã.
+ *  割込み番号の範囲の判定
+ *
+ *  割込み番号が有効な値か厳密にチェックするため,
+ *  コンフィギュレータ出力テーブルを参照する.
  */
 #define VALID_INTNO( intno )	\
@@ -214,13 +180,13 @@
 #define VALID_INTNO_CFGINT( intno )	VALID_INTNO( intno )
 
-/* cre_intã§æå¹ãªå²è¾¼ã¿çªå·ã®æå®  */
+/* cre_intで有効な割込み番号の指定  */
 #define VALID_INTNO_CREINT          VALID_INTNO_CFGINT((intno))
 
-/* cre_isrã§æå¹ãªå²è¾¼ã¿çªå·ã®æå®  */
+/* cre_isrで有効な割込み番号の指定  */
 #define	VALID_INTNO_CREISR(intno)	VALID_INTNO_CFGINT((intno))
 
 
 /*
- *  å²è¾¼ã¿å¶å¾¡ã¬ã¸ã¹ã¿é¢é£ã®å®ç¾©
+ *  割込み制御レジスタ関連の定義
  */
 #define	IRQ_POSEDGE			( 0x08U )
@@ -231,23 +197,17 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã¸ã®ç§»è¡
- *
- *  IPMï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ï¼ãï¼saved_iipmã«ä¿å­ãï¼ã«ã¼
- *  ãã«ç®¡çå¤ã®ãã®ãé¤ããã¹ã¦ã®å²è¾¼ã¿è¦æ±ããã¹ã¯ããå¤ï¼TIPM_LOCKï¼
- *  ã«è¨­å®ããï¼ã¾ãï¼lock_flagãTRUEã«ããï¼
- *
- *  IPMãï¼æåããTIPM_LOCKã¨åããããããé«ãå ´åã«ã¯ï¼ããã
- *  saved_iipmã«ä¿å­ããã®ã¿ã§ï¼TIPM_LOCKã«ã¯è¨­å®ããªãï¼ããã¯ï¼ã¢ãã«
- *  ä¸ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ãï¼TIPM_LOCKã¨åããããããé«ãã¬ãã«ã«è¨­å®
- *  ããã¦ããç¶æ
-ã«ãããï¼
- *
- *  ãã®é¢æ°ã¯ï¼CPUã­ãã¯ç¶æ
-ï¼lock_flagãTRUEã®ç¶æ
-ï¼ã§å¼ã°ãããã¨ã¯
- *  ãªããã®ã¨æ³å®ãã¦ããï¼
+ *  CPUロック状態への移行
+ *
+ *  IPM（ハードウェアの割込み優先度マスク）を，saved_iipmに保存し，カー
+ *  ネル管理外のものを除くすべての割込み要求をマスクする値（TIPM_LOCK）
+ *  に設定する．また，lock_flagをTRUEにする．
+ *
+ *  IPMが，最初からTIPM_LOCKと同じかそれより高い場合には，それを
+ *  saved_iipmに保存するのみで，TIPM_LOCKには設定しない．これは，モデル
+ *  上の割込み優先度マスクが，TIPM_LOCKと同じかそれより高いレベルに設定
+ *  されている状態にあたる．
+ *
+ *  この関数は，CPUロック状態（lock_flagがTRUEの状態）で呼ばれることは
+ *  ないものと想定している．
  */
 Inline void
@@ -260,8 +220,8 @@
 
 	/*
-	 *  current_ipl()ã®è¿ãå¤ãç´æ¥saved_iplã«ä¿å­ããï¼ä¸æå¤æ°ipl
-	 *  ãç¨ãã¦ããã®ã¯ï¼current_ipl()ãå¼ãã ç´å¾ã«å²è¾¼ã¿ãçºçãï¼
-	 *  èµ·åãããå²è¾¼ã¿å¦çã§saved_iplãå¤æ´ãããå¯è½æ§ãããããã§
-	 *  ããï¼
+	 *  current_ipl()の返り値を直接saved_iplに保存せず，一時変数ipl
+	 *  を用いているのは，current_ipl()を呼んだ直後に割込みが発生し，
+	 *  起動された割込み処理でsaved_iplが変更される可能性があるためで
+	 *  ある．
 	 */
 	ipl = current_ipl();
@@ -278,15 +238,11 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®è§£é¤
- *
- *  lock_flagãFALSEã«ãï¼IPMï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ï¼ãï¼
- *  saved_iipmã«ä¿å­ããå¤ã«æ»ãï¼
- *
- *  ãã®é¢æ°ã¯ï¼CPUã­ãã¯ç¶æ
-ï¼lock_flagãtrueã®ç¶æ
-ï¼ã§ã®ã¿å¼ã°ããã
- *  ã®ã¨æ³å®ãã¦ããï¼
+ *  CPUロック状態の解除
+ *
+ *  lock_flagをFALSEにし，IPM（ハードウェアの割込み優先度マスク）を，
+ *  saved_iipmに保存した値に戻す．
+ *
+ *  この関数は，CPUロック状態（lock_flagがtrueの状態）でのみ呼ばれるも
+ *  のと想定している．
  */
 Inline void
@@ -304,7 +260,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®åç
-§
+ *  CPUロック状態の参照
  */
 Inline bool_t
@@ -320,5 +274,5 @@
 
 /*
- *  å²è¾¼ã¿å±æ§ã®è¨­å®ã®ãã§ãã¯
+ *  割込み属性の設定のチェック
  */
 Inline bool_t
@@ -329,14 +283,10 @@
 
 /*
- * ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®è¨­å®
- *
- *  CPUã­ãã¯ãã©ã°ãã¯ãªã¢ããã¦ããæã¯ï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå
-åº¦ã
- *  ã¹ã¯ãè¨­å®ããï¼CPUã­ãã¯ãã©ã°ãã»ããããã¦ããæã¯ï¼saved_iipm
- *  ãè¨­å®ãï¼ããã«ï¼ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ãï¼è¨­å®ãããã¨
- *  ããï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã¨TIPM_LOCKã®é«ãæ¹ã«è¨­å®ããï¼
+ * （モデル上の）割込み優先度マスクの設定
+ *
+ *  CPUロックフラグがクリアされている時は，ハードウェアの割込み優先度マ
+ *  スクを設定する．CPUロックフラグがセットされている時は，saved_iipm
+ *  を設定し，さらに，ハードウェアの割込み優先度マスクを，設定しようと
+ *  した（モデル上の）割込み優先度マスクとTIPM_LOCKの高い方に設定する．
  */
 Inline void
@@ -360,12 +310,8 @@
 
 /*
- * ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®åç
-§
- *
- *  CPUã­ãã¯ãã©ã°ãã¯ãªã¢ããã¦ããæã¯ãã¼ãã¦ã§ã¢ã®å²è¾¼ã¿åªå
-åº¦ã
- *  ã¹ã¯ãï¼ã»ããããã¦ããæã¯saved_iipmãåç
-§ããï¼
+ * （モデル上の）割込み優先度マスクの参照
+ *
+ *  CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ
+ *  スクを，セットされている時はsaved_iipmを参照する．
  */
 Inline PRI
@@ -389,8 +335,8 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ç¦æ­¢ãã©ã°ã®ã»ãã
- *
- *  å²è¾¼ã¿å±æ§ãè¨­å®ããã¦ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿è¦æ±ç¦æ­¢
- *  ãã©ã°ãã»ãããããã¨ããå ´åã«ã¯ï¼FALSEãè¿ãï¼
+ *  割込み要求禁止フラグのセット
+ *
+ *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
+ *  フラグをセットしようとした場合には，FALSEを返す．
  */
 Inline bool_t
@@ -398,5 +344,5 @@
 {
 	/*
-	 *  ã¬ãã«å®ç¾©ã0ã§ããå ´åã¯CFG_INTããã¦ããªã
+	 *  レベル定義が0である場合はCFG_INTされていない
 	 */
 	if( cfg_int_table[intno].intpri == 0 ){
@@ -412,8 +358,8 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ç¦æ­¢ãã©ã°ã®ã¯ãªã¢
- *
- *  å²è¾¼ã¿å±æ§ãè¨­å®ããã¦ããªãå²è¾¼ã¿è¦æ±ã©ã¤ã³ã«å¯¾ãã¦å²è¾¼ã¿è¦æ±ç¦æ­¢
- *  ãã©ã°ãã¯ãªã¢ãããã¨ããå ´åã«ã¯ï¼FALSEãè¿ãï¼
+ *  割込み要求禁止フラグのクリア
+ *
+ *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
+ *  フラグをクリアしようとした場合には，FALSEを返す．
  */
 Inline bool_t
@@ -421,5 +367,5 @@
 {
 	/*
-	 *  ã¬ãã«å®ç¾©ã0ã§ããå ´åã¯CFG_INTããã¦ããªã
+	 *  レベル定義が0である場合はCFG_INTされていない
 	 */
 	if( cfg_int_table[intno].intpri == 0 ){
@@ -435,6 +381,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ãã¯ãªã¢ã§ããç¶æ
-ãï¼
+ *  割込み要求がクリアできる状態か？
  */
 Inline bool_t
@@ -445,5 +390,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢
+ *  割込み要求のクリア
  */
 Inline void
@@ -455,6 +400,5 @@
 
 /*
- *  å²è¾¼ã¿ãè¦æ±ã§ããç¶æ
-ãï¼
+ *  割込みが要求できる状態か？
  */
 Inline bool_t
@@ -465,6 +409,6 @@
 
 /*
- * å²è¾¼ã¿ã®è¦æ±
- * æ³¨æï¼ãããã§ãµãã¼ãããã¦ããªãæä½
+ * 割込みの要求
+ * 注意：チップでサポートされていない操作
  */
 Inline void
@@ -475,5 +419,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã®ãã§ãã¯
+ *  割込み要求のチェック
  */
 Inline bool_t
@@ -481,6 +425,6 @@
 {
 	/*
-	 *  å²è¾¼ã¿è¦æ±ã¬ã¸ã¹ã¿ã¯0 or 1ã§ãããªããã,
-	 *  ãã®ã¾ã¾ã®å¤ãè¿ã.
+	 *  割込み要求レジスタは0 or 1でしかないため,
+	 *  そのままの値を返す.
 	 */
 	return sil_reb_mem(IR_REG(intno));
@@ -488,11 +432,10 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®å±æ§ã®è¨­å®
+ *  割込み要求ラインの属性の設定
  */
 extern void	config_int( INTNO intno, ATR intatr, PRI intpri );
 
 /*
- *  å²è¾¼ã¿ãåãä»ããããã®é
-å»¶å¦ç
+ *  割込みを受け付けるための遅延処理
  */
 Inline void
@@ -502,48 +445,33 @@
 
 /*
- *  æé«åªå
-é ä½ã¿ã¹ã¯ã¸ã®ãã£ã¹ãããï¼prc_support.a30ï¼
- *
- *  dispatchã¯ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãããå¼ã³åºããããµã¼ãã¹ã³ã¼ã«å¦çã
- *  ãå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãã»CPUã­ãã¯ç¶æ
-ã»ãã£ã¹ãã
- *  ãè¨±å¯ç¶æ
-ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-ã§å¼ã³åºããª
- *  ããã°ãªããªãï¼
+ *  最高優先順位タスクへのディスパッチ（prc_support.a30）
+ *
+ *  dispatchは，タスクコンテキストから呼び出されたサービスコール処理か
+ *  ら呼び出すべきもので，タスクコンテキスト・CPUロック状態・ディスパッ
+ *  チ許可状態・（モデル上の）割込み優先度マスク全解除状態で呼び出さな
+ *  ければならない．
  */
 extern void	dispatch( void );
 
 /*
- *  éã¿ã¹ã¯ã³ã³ãã­ã¹ãããã®ãã£ã¹ãããè¦æ±
+ *  非タスクコンテキストからのディスパッチ要求
  */
 #define request_dispatch()
 
 /*
- *  ãã£ã¹ãããã£ã®åä½éå§ï¼prc_support.a30ï¼
- *
- *  start_dispatchã¯ï¼ã«ã¼ãã«èµ·åæã«å¼ã³åºãã¹ããã®ã§ï¼ãã¹ã¦ã®å²è¾¼
- *  ã¿ãç¦æ­¢ããç¶æ
-ï¼å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-ã¨åç­ã®ç¶æ
-ï¼ã§å¼ã³åºããªããã°
- *  ãªããªãï¼
+ *  ディスパッチャの動作開始（prc_support.a30）
+ *
+ *  start_dispatchは，カーネル起動時に呼び出すべきもので，すべての割込
+ *  みを禁止した状態（全割込みロック状態と同等の状態）で呼び出さなければ
+ *  ならない．
  */
 extern void	start_dispatch( void ) NoReturn;
 
 /*
- *  ç¾å¨ã®ã³ã³ãã­ã¹ããæ¨ã¦ã¦ãã£ã¹ãããï¼prc_support.a30ï¼
- *
- *  exit_and_dispatchã¯ï¼ext_tskããå¼ã³åºãã¹ããã®ã§ï¼ã¿ã¹ã¯ã³ã³ãã­
- *  ã¹ãã»CPUã­ãã¯ç¶æ
-ã»ãã£ã¹ãããè¨±å¯ç¶æ
-ã»ï¼ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå
-
- *  åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-ã§å¼ã³åºããªããã°ãªããªãï¼
+ *  現在のコンテキストを捨ててディスパッチ（prc_support.a30）
+ *
+ *  exit_and_dispatchは，ext_tskから呼び出すべきもので，タスクコンテキ
+ *  スト・CPUロック状態・ディスパッチ許可状態・（モデル上の）割込み優先
+ *  度マスク全解除状態で呼び出さなければならない．
  */
 #define _kernel_exit_and_dispatch();	\
@@ -554,22 +482,20 @@
 
 /*
- *  ã«ã¼ãã«ã®çµäºå¦çã®å¼åºãï¼prc_support.a30ï¼
- *
- *  call_exit_kernelã¯ï¼ã«ã¼ãã«ã®çµäºæã«å¼ã³åºãã¹ããã®ã§ï¼éã¿ã¹ã¯
- *  ã³ã³ãã­ã¹ãã«åãæãã¦ï¼ã«ã¼ãã«ã®çµäºå¦çï¼exit_kernelï¼ãå¼ã³åº
- *  ãï¼
+ *  カーネルの終了処理の呼出し（prc_support.a30）
+ *
+ *  call_exit_kernelは，カーネルの終了時に呼び出すべきもので，非タスク
+ *  コンテキストに切り換えて，カーネルの終了処理（exit_kernel）を呼び出
+ *  す．
  */
 extern void call_exit_kernel( void ) NoReturn;
 
 /*
- *  ã¿ã¹ã¯ã³ã³ãã­ã¹ãã®åæå
- *
- *  ã¿ã¹ã¯ãä¼æ­¢ç¶æ
-ããå®è¡ã§ããç¶æ
-ã«ç§»è¡ããæã«å¼ã°ããï¼ãã®æç¹
- *  ã§ã¹ã¿ãã¯é åãä½¿ã£ã¦ã¯ãªããªãï¼
- *
- *  activate_contextãï¼ã¤ã³ã©ã¤ã³é¢æ°ã§ã¯ãªããã¯ã­å®ç¾©ã¨ãã¦ããã®ã¯ï¼
- *  ãã®æç¹ã§ã¯TCBãå®ç¾©ããã¦ããªãããã§ããï¼
+ *  タスクコンテキストの初期化
+ *
+ *  タスクが休止状態から実行できる状態に移行する時に呼ばれる．この時点
+ *  でスタック領域を使ってはならない．
+ *
+ *  activate_contextを，インライン関数ではなくマクロ定義としているのは，
+ *  この時点ではTCBが定義されていないためである．
  */
 extern void	start_r( void );
@@ -579,8 +505,8 @@
 	{																					\
 																						\
-		/*  ã¹ã¿ãã¯ãã¤ã³ã¿åæå¤ã®è¨­å®  */											\
+		/*  スタックポインタ初期値の設定  */											\
 		( p_tcb )->tskctxb.sp = ( void * )((( uint32_t ) ( p_tcb )->p_tinib->stk ) + 	\
 								( p_tcb )->p_tinib->stksz );							\
-		/* èµ·åçªå°ã®è¨­å® */															\
+		/* 起動番地の設定 */															\
 		( p_tcb )->tskctxb.pc = ( FP ) start_r;											\
 	}																					\
@@ -589,5 +515,5 @@
 
 /*
- *  calltexã¯ä½¿ç¨ããªã
+ *  calltexは使用しない
  */
 #define OMIT_CALLTEX
@@ -595,9 +521,7 @@
 
 /*
- *  å²è¾¼ã¿ãã³ãã©ã®è¨­å®
- *
- *  RX630ã¯ROMã«å²è¾¼ã¿ãã¯ã¿ãé
-ç½®ããããï¼æ¬é¢æ°ã¯ç©ºé¢æ°ã§å®è£
-ããï¼
+ *  割込みハンドラの設定
+ *
+ *  RX630はROMに割込みベクタを配置するため，本関数は空関数で実装する．
  */
 Inline void
@@ -607,9 +531,7 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©ã®è¨­å®
- *
- *  RX630ã¯ROMã«ä¾å¤ãã¯ã¿ãé
-ç½®ããããï¼æ¬é¢æ°ã¯ç©ºé¢æ°ã§å®è£
-ããï¼
+ *  CPU例外ハンドラの設定
+ *
+ *  RX630はROMに例外ベクタを配置するため，本関数は空関数で実装する．
  */
 Inline void
@@ -619,14 +541,12 @@
 
 /*
- *  å²è¾¼ã¿/ä¾å¤ãã³ãã©ã®å
-¥å£å¦çã®çæãã¯ã­
- *
- *  ãã³ãã¬ã¼ããã¡ã¤ã«ã«ããçæããããç©ºãã¯ã­ã¨ããï¼
+ *  割込み/例外ハンドラの入口処理の生成マクロ
+ *
+ *  テンプレートファイルにより生成するため空マクロとする．
  */
 #define HDR_ENTRY(hdr, intexc_num , tobejmp)
 
 /*
- *  å²è¾¼ã¿ãã³ãã©ã®å
-¥å£å¦çã®çæãã¯ã­
+ *  割込みハンドラの入口処理の生成マクロ
  */
 #define _INT_ENTRY(inhno, inthdr)				_kernel_##inthdr##_##inhno##_entry
@@ -639,6 +559,5 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©ã®å
-¥å£å¦çã®çæãã¯ã­
+ *  CPU例外ハンドラの入口処理の生成マクロ
  */
 #define _EXC_ENTRY(excno , exchdr)					_kernel_##exchdr##_##excno##_entry
@@ -651,9 +570,8 @@
 
 /*
- *  CPUä¾å¤ã®çºçããæã®ã³ã³ãã­ã¹ãã®åç
-§
- *
- *  CPUä¾å¤ã®çºçããæã®ã³ã³ãã­ã¹ããï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãã®æã«FALSEï¼
- *  ããã§ãªãæã«trueãè¿ãï¼
+ *  CPU例外の発生した時のコンテキストの参照
+ *
+ *  CPU例外の発生した時のコンテキストが，タスクコンテキストの時にFALSE，
+ *  そうでない時にtrueを返す．
  */
 Inline bool_t
@@ -661,5 +579,5 @@
 {
 	/* 
-	 *  ãã¹ãã«ã¦ã³ã¿ã1ããå¤§ãªãéã¿ã¹ã¯ã³ã³ãã­ã¹ã
+	 *  ネストカウンタが1より大なら非タスクコンテキスト
 	 */
 	return( intnest > 1U );
@@ -669,7 +587,6 @@
 
 /*
- *  CPUä¾å¤æ
-å ± p_excinf ãã PSW ã®å¤ãåå¾ããããã®ãªãã»ããå¤
- *  EXCNO + ACC + FPSW + R1ï½R15 + PC
+ *  CPU例外情報 p_excinf から PSW の値を取得するためのオフセット値
+ *  EXCNO + ACC + FPSW + R1～R15 + PC
  */
 #define EXC_GET_PSW_OFFSET	(4+8+4+60+4)
@@ -678,6 +595,5 @@
 
 /*
- *  CPUä¾å¤ã®çºçããæã®IPLã®åç
-§
+ *  CPU例外の発生した時のIPLの参照
  */
 Inline uint32_t
@@ -697,29 +613,17 @@
 
 /*
- *  CPUä¾å¤ã®çºçããæã®ã³ã³ãã­ã¹ãã¨å²è¾¼ã¿ã®ãã¹ã¯ç¶æ
-ã®åç
-§
- *
- *  CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ
-ãï¼ã«ã¼ãã«å®è¡ä¸­ã§ãªãï¼ã¿ã¹ã¯ã³
- *  ã³ãã­ã¹ãã§ããï¼å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-ã§ãªãï¼CPUã­ãã¯ç¶æ
-ã§ãªãï¼ï¼ã¢
- *  ãã«ä¸ã®ï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-ã§ããæã«trueï¼ããã§ãªãæ
- *  ã«FALSEãè¿ãï¼CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦çä¸­ã§çºçããå ´å
- *  ã«ãFALSEãè¿ãï¼ï¼
+ *  CPU例外の発生した時のコンテキストと割込みのマスク状態の参照
+ *
+ *  CPU例外の発生した時のシステム状態が，カーネル実行中でなく，タスクコ
+ *  ンテキストであり，全割込みロック状態でなく，CPUロック状態でなく，（モ
+ *  デル上の）割込み優先度マスク全解除状態である時にtrue，そうでない時
+ *  にFALSEを返す（CPU例外がカーネル管理外の割込み処理中で発生した場合
+ *  にもFALSEを返す）．
  *  
- *  ã«ã¼ãã«å®è¡ä¸­ã§ãªãâ (TIPM_LOCK== -15) Iãã©ã° == 1
+ *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
  *                         (else)           IPL < IPL_LOCK
- *  ã¿ã¹ã¯ã³ã³ãã­ã¹ãã§ããâintnest == 0
- *  å
-¨å²è¾¼ã¿ã­ãã¯ã§ãªãâ Iãã©ã° == 1
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ãå
-¨è§£é¤âIPL == 0
+ *  タスクコンテキストである→intnest == 0
+ *  全割込みロックでない→ Iフラグ == 1
+ *  割込み優先度マスクが全解除→IPL == 0
  *  
  *  
@@ -734,24 +638,16 @@
 
 /*
- *  CPUä¾å¤ã®çºçããæã®ã³ã³ãã­ã¹ãã¨å²è¾¼ã¿ï¼CPUã­ãã¯ç¶æ
-ã®åç
-§
- *
- *  CPUä¾å¤ã®çºçããæã®ã·ã¹ãã ç¶æ
-ãï¼ã«ã¼ãã«å®è¡ä¸­ã§ãªãï¼ã¿ã¹ã¯ã³
- *  ã³ãã­ã¹ãã§ããï¼å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-ã§ãªãï¼CPUã­ãã¯ç¶æ
-ã§ãªãæã«
- *  trueï¼ããã§ãªãæã«falseãè¿ãï¼CPUä¾å¤ãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿å¦
- *  çä¸­ã§çºçããå ´åã«ãfalseãè¿ãï¼ï¼
+ *  CPU例外の発生した時のコンテキストと割込み／CPUロック状態の参照
+ *
+ *  CPU例外の発生した時のシステム状態が，カーネル実行中でなく，タスクコ
+ *  ンテキストであり，全割込みロック状態でなく，CPUロック状態でない時に
+ *  true，そうでない時にfalseを返す（CPU例外がカーネル管理外の割込み処
+ *  理中で発生した場合にもfalseを返す）．
  *  
- *  ã«ã¼ãã«å®è¡ä¸­ã§ãªãâ (TIPM_LOCK== -15) Iãã©ã° == 1
+ *  カーネル実行中でない→ (TIPM_LOCK== -15) Iフラグ == 1
  *                         (else)           IPL < TIPM_LOCK
- *  ã¿ã¹ã¯ã³ã³ãã­ã¹ãã§ããâintnest < 1 
- *  å
-¨å²è¾¼ã¿ã­ãã¯ã§ãªãâ Iãã©ã° == 1
- *  CPUã­ãã¯ç¶æ
-ã§ãªãâ(TIPM_LOCK== -15) Iãã©ã° == 1
+ *  タスクコンテキストである→intnest < 1 
+ *  全割込みロックでない→ Iフラグ == 1
+ *  CPUロック状態でない→(TIPM_LOCK== -15) Iフラグ == 1
  *                         (else)           IPL < TIPM_LOCK
  */
@@ -771,10 +667,10 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã®åæå
+ *  プロセッサ依存の初期化
  */
 extern void	prc_initialize( void );
 
 /*
- *  ãã­ã»ããµä¾å­ã®çµäºæå¦ç
+ *  プロセッサ依存の終了時処理
  */
 extern void	prc_terminate( void );
@@ -783,5 +679,5 @@
 #ifndef OMIT_DEFAULT_INT_HANDLER
 /*
- *  æªç»é²ã®å²è¾¼ã¿ãçºçããå ´åã«å¼ã³åºããã
+ *  未登録の割込みが発生した場合に呼び出される
  */
 void default_int_handler( void );
@@ -790,5 +686,5 @@
 #ifndef OMIT_DEFAULT_EXC_HANDLER
 /*
- *  æªç»é²ã®ä¾å¤ãçºçããå ´åã«å¼ã³åºããã
+ *  未登録の例外が発生した場合に呼び出される
  */
 void default_exc_handler( void );
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_offset.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_offset.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_offset.trb	(revision 389)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 #
-#		ãªãã»ãããã¡ã¤ã«çæç¨Rubyãã³ãã¬ã¼ãï¼ARMç¨ï¼
+#		オフセットファイル生成用Rubyテンプレート（ARM用）
 #
 #  $Id$
@@ -7,10 +7,10 @@
 
 #
-#  ã¿ã¼ã²ããéä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット非依存部のインクルード
 #
 IncludeTrb("kernel/genoffset.trb")
 
 #
-#  ãã£ã¼ã«ãã®ãªãã»ããã®å®ç¾©ã®çæ
+#  フィールドのオフセットの定義の生成
 #
 GenerateDefine("TCB_p_tinib", $offsetof_TCB_p_tinib)
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_sil.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_sil.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_sil.h	(revision 389)
@@ -5,47 +5,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,5 +38,5 @@
 
 /*
- *		sil.hã®ãã­ã»ããµä¾å­é¨ï¼RX630ç¨ï¼
+ *		sil.hのプロセッサ依存部（RX630用）
  */
 
@@ -65,6 +50,5 @@
 
 /*
- *  å
-¨å²è¾¼ã¿ç¦æ­¢
+ *  全割込み禁止
  */
 Inline uint32_t
@@ -81,6 +65,5 @@
 
 /*
- *  å
-¨å²è¾¼ã¿è¨±å¯
+ *  全割込み許可
  */
 Inline void
@@ -94,7 +77,5 @@
 
 /*
- *  å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-ã®å¶å¾¡
+ *  全割込みロック状態の制御
  */
 #define SIL_PRE_LOC		uint32_t TOPPERS_i_psw;
@@ -104,8 +85,8 @@
 
 /*
- *  ã¨ã³ãã£ã¢ã³ã®åè»¢
+ *  エンディアンの反転
  *
- *  æ¬éçºç°å¢ã§ã¯ã¨ã³ãã£ã¢ã³å¤æå½ä»¤ãå­å¨ãããã,
- *  ã¢ã¼ã­ãã¯ãã£ä¾å­é¨ã«ã¦ãã¯ã­ãä¸æ¸ããã.
+ *  本開発環境ではエンディアン変換命令が存在するため,
+ *  アーキテクチャ依存部にてマクロを上書きする.
  */
 #define TOPPERS_SIL_REV_ENDIAN_UINT16( data )	\
@@ -116,6 +97,5 @@
 
 /*
- *  å¾®å°æéå¾
-ã¡
+ *  微少時間待ち
  */
 extern void sil_dly_nse( ulong_t dlytim ) throw();
@@ -125,17 +105,17 @@
 
 /*
- *  ãã­ã»ããµã®ã¨ã³ãã£ã¢ã³
- */
-#define SIL_ENDIAN_LITTLE			/* ãªãã«ã¨ã³ãã£ã¢ã³ */
+ *  プロセッサのエンディアン
+ */
+#define SIL_ENDIAN_LITTLE			/* リトルエンディアン */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  ã¡ã¢ãªç©ºéã¢ã¯ã»ã¹é¢æ°
+ *  メモリ空間アクセス関数
  */
 #define TOPPERS_OMIT_SIL_ACCESS
 
 /*
- *  8ãããåä½ã®èª­åºãï¼æ¸è¾¼ã¿
+ *  8ビット単位の読出し／書込み
  */
 #ifdef UINT8_MAX
@@ -159,5 +139,5 @@
 
 /*
- *  16ãããåä½ã®èª­åºãï¼æ¸è¾¼ã¿
+ *  16ビット単位の読出し／書込み
  */
 
@@ -177,5 +157,5 @@
 }
 
-#ifdef SIL_ENDIAN_BIG			/* ããã°ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#ifdef SIL_ENDIAN_BIG			/* ビッグエンディアンプロセッサ */
 
 #define	sil_reh_bem(mem)		sil_reh_mem(mem)
@@ -204,5 +184,5 @@
 #endif /* TOPPERS_OMIT_SIL_WRH_LEM */
 #else /* SIL_ENDIAN_BIG */
-#ifdef SIL_ENDIAN_LITTLE		/* ãªãã«ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#ifdef SIL_ENDIAN_LITTLE		/* リトルエンディアンプロセッサ */
 
 #define	sil_reh_lem(mem)		sil_reh_mem(mem)
@@ -238,5 +218,5 @@
 
 /*
- *  32ãããåä½ã®èª­åºãï¼æ¸è¾¼ã¿
+ *  32ビット単位の読出し／書込み
  */
 
@@ -256,5 +236,5 @@
 }
 
-#ifdef SIL_ENDIAN_BIG			/* ããã°ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#ifdef SIL_ENDIAN_BIG			/* ビッグエンディアンプロセッサ */
 
 #define	sil_rew_bem(mem)		sil_rew_mem(mem)
@@ -282,5 +262,5 @@
 
 #endif /* TOPPERS_OMIT_SIL_WRW_LEM */
-#else /* SIL_ENDIAN_BIG */		/* ãªãã«ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#else /* SIL_ENDIAN_BIG */		/* リトルエンディアンプロセッサ */
 
 #define	sil_rew_lem(mem)		sil_rew_mem(mem)
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_stddef.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_stddef.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_stddef.h	(revision 389)
@@ -5,47 +5,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,9 +38,9 @@
 
 /*
- *		t_stddef.hã®ãã­ã»ããµä¾å­é¨ï¼RX630ç¨ï¼
+ *		t_stddef.hのプロセッサ依存部（RX630用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_stddef.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯
- *  ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã
- *  ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼
+ *  このインクルードファイルは，target_stddef.h（または，そこからインク
+ *  ルードされるファイル）のみからインクルードされる．他のファイルから
+ *  直接インクルードしてはならない．
  */
 
@@ -64,7 +49,7 @@
 
 /*
- *  ã¿ã¼ã²ãããè­å¥ããããã®ãã¯ã­ã®å®ç¾©
+ *  ターゲットを識別するためのマクロの定義
  */
-#define TOPPERS_RX630				/* ãã­ã»ããµç¥ç§° */
+#define TOPPERS_RX630				/* プロセッサ略称 */
 
 #endif /* TOPPERS_PRC_STDDEF_H */
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_support.S
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_support.S	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_support.S	(revision 389)
@@ -12,47 +12,32 @@
 ;   Copyright (C) 2017      by Cores Co., Ltd. Japan
 ;  
-;   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-;   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-;   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-;   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-;       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-;       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-;   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-;       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-;       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-;       ã¨ï¼
-;     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-;         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-;         å ±åãããã¨ï¼
-;   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-;       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-;       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-;       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-;       å
-è²¬ãããã¨ï¼
+;   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+;   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+;   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+;   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+;       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+;       スコード中に含まれていること．
+;   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+;       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+;       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+;       の無保証規定を掲載すること．
+;   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+;       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+;       と．
+;     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+;         作権表示，この利用条件および下記の無保証規定を掲載すること．
+;     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+;         報告すること．
+;   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+;       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+;       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+;       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+;       免責すること．
 ;  
-;   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-;   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-;   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-;   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-;   ã®è²¬ä»»ãè² ããªãï¼
+;   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+;   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+;   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+;   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+;   の責任を負わない．
 ;  
 ;  @(#) $Id$
@@ -60,83 +45,59 @@
 
 ;
-;  ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã« ã¢ã»ã³ããªè¨èªé¨ï¼RX630ç¨ï¼
+;  プロセッサ依存モジュール アセンブリ言語部（RX630用）
 ;
 #define TOPPERS_MACRO_ONLY
-#define UINT_C(val)			(val)		/* uint_tåã®å®æ°ãä½ããã¯ã­ */
-#define ULONG_C(val)		(val)		/* ulong_tåã®å®æ°ãä½ããã¯ã­ */
-#define CAST(type, val)		(val)		/* åã­ã£ã¹ããè¡ããã¯ã­ */
+#define UINT_C(val)			(val)		/* uint_t型の定数を作るマクロ */
+#define ULONG_C(val)		(val)		/* ulong_t型の定数を作るマクロ */
+#define CAST(type, val)		(val)		/* 型キャストを行うマクロ */
 #include "kernel_impl.h"
 
 ;
-;  ãã£ã¹ãããã£ããã³å²è¾¼ã¿(CPUä¾å¤)åºå
-¥ãå£ã®ã«ã¼ã«:
-;	åä½ã¢ã¼ããä»¥ä¸ã®ããã«å®ç¾©ãã.
-;		ãã£ã¹ãããã£ã¢ã¼ã:
-;			CPUã­ãã¯ç¶æ
-, å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-,
-;			ã¿ã¹ã¯ã³ã³ãã­ã¹ã(intnest = 0), ã¿ã¹ã¯ã¹ã¿ãã¯
-;		å²è¾¼ã¿(CPUä¾å¤)å¦çã¢ã¼ã
-;			å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-(PSWã¬ã¸ã¹ã¿Iããã = 0),
-;			å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ã§ãªãç¶æ
-(IPL != 0)
-;			å²è¾¼ã¿ã³ã³ãã­ã¹ã(intnest != 0), å²è¾¼ã¿ã¹ã¿ãã¯
-;
-;	ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿ã®ãµãã¼ãæç¡ã¨, CPUã­ãã¯ç¶æ
-, å²è¾¼ã¿åªå
-åº¦
-;	ãã¹ã¯å
-¨è§£é¤ç¶æ
-ã®é¢ä¿ã¯ä»¥ä¸ã®éãã§ãã.
-;		ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿æªãµãã¼ãæ:
-;			CPUã­ãã¯ç¶æ
-(PSWã¬ã¸ã¹ã¿Iããã = 0)
-;			å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-(IPL = 0)
-;		ã«ã¼ãã«ç®¡çå¤å²è¾¼ã¿ãµãã¼ãæ:
-;			CPUã­ãã¯ç¶æ
-
-;				(PSWã¬ã¸ã¹ã¿Iããã = 0, IPL = IPL_LOCK, lock_flag = true)
-;			å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-(saved_ipl = 0)
-;
-;	åæ§é ä½ãã¤ã³ã¿ãä»¥ä¸ã®ããã«åã¬ã¸ã¹ã¿ã«ã¢ãµã¤ã³ãã.
-;		r15 = p_runtsk	ãã ããã£ã¹ãããã£ã®ååºå£ã§ã¯ç¡å¹
-;		r14 = *p_runtsk	dispatcher ã®ä¸­ã§ã¯ p_runtsk ç¢ºå®æã«ååå¾ãã
-;	åå
-¥ãå£ããæåã«å¤æ°ã¢ã¯ã»ã¹ããã¨ãã«ä¸è¨ã¬ã¸ã¹ã¿ã«ä¿å­ãã.
-;
-;	æ§é ä½ã¢ã©ã¤ã¡ã³ãã¸ã®å¯¾å¿
-;		æ§é ä½ã¢ã©ã¤ã¡ã³ãã4Byte(ã¢ã³ããã¯)ã®å ´å:
-;			ä¸è¬çãªã¬ã¸ã¹ã¿ç¸å¯¾ã¢ãã¬ãã·ã³ã°ãå¯è½
-;				ä¾:	mov.l	#__kernel_p_runtsk, r15
+;  ディスパッチャおよび割込み(CPU例外)出入り口のルール:
+;	動作モードを以下のように定義する.
+;		ディスパッチャモード:
+;			CPUロック状態, 割込み優先度マスク全解除状態,
+;			タスクコンテキスト(intnest = 0), タスクスタック
+;		割込み(CPU例外)処理モード
+;			全割込みロック状態(PSWレジスタIビット = 0),
+;			割込み優先度マスク全解除でない状態(IPL != 0)
+;			割込みコンテキスト(intnest != 0), 割込みスタック
+;
+;	カーネル管理外割込みのサポート有無と, CPUロック状態, 割込み優先度
+;	マスク全解除状態の関係は以下の通りである.
+;		カーネル管理外割込み未サポート時:
+;			CPUロック状態(PSWレジスタIビット = 0)
+;			割込み優先度マスク全解除状態(IPL = 0)
+;		カーネル管理外割込みサポート時:
+;			CPUロック状態
+;				(PSWレジスタIビット = 0, IPL = IPL_LOCK, lock_flag = true)
+;			割込み優先度マスク全解除状態(saved_ipl = 0)
+;
+;	各構造体ポインタを以下のように各レジスタにアサインする.
+;		r15 = p_runtsk	ただしディスパッチャの各出口では無効
+;		r14 = *p_runtsk	dispatcher の中では p_runtsk 確定時に再取得する
+;	各入り口から最初に変数アクセスするときに上記レジスタに保存する.
+;
+;	構造体アライメントへの対応
+;		構造体アライメントが4Byte(アンパック)の場合:
+;			一般的なレジスタ相対アドレッシングが可能
+;				例:	mov.l	#__kernel_p_runtsk, r15
 ;					mov.l  	r0, TCB_sp[r15]
-;		æ§é ä½ã¢ã©ã¤ã¡ã³ãã4Byteã§ã¯ãªã(ããã¯)ã®å ´å:
-;			mov.lã®ããã«ã­ã³ã°ãµã¤ãºæå®ã®å ´åãç¸å¯¾å¤ã¯4ã®åæ°ã®ã¿æå¹
-;			ãã®ãã, ä¸åº¦å¯¾è±¡ã¢ãã¬ã¹ãæ±ãã¦ããã¢ã¯ã»ã¹ããå¿
-è¦ããã
-;				ä¾:	mov.l	#__kernel_p_runtsk, r15
+;		構造体アライメントが4Byteではない(パック)の場合:
+;			mov.lのようにロングサイズ指定の場合、相対値は4の倍数のみ有効
+;			このため, 一度対象アドレスを求めてからアクセスする必要がある
+;				例:	mov.l	#__kernel_p_runtsk, r15
 ;					add		#TCB_sp, r15, r5
 ;					mov.l  	r0, [r5]
-;		åãªãã»ããå¤ãå¤æ­ã, æ¡ä»¶ã¢ã»ã³ãã«ã«ããã³ã¼ããåãæ¿ãã
-;
-
-;
-;  æ§é ä½ã¢ã¯ã»ã¹ã®ãªãã»ããå®ç¾©
+;		各オフセット値を判断し, 条件アセンブルによりコードを切り替える
+;
+
+;
+;  構造体アクセスのオフセット定義
 ;
 #include "offset.h"
 
 ;
-;  åç¨®EQUå®ç¾©(Hãã¡ã¤ã«ã®#defineå®ç¾©)
+;  各種EQU定義(Hファイルの#define定義)
 ;
 #include "target_kernel_impl.h"
@@ -194,5 +155,5 @@
 
 ;
-;  TCB_sp ã¸ã®æ¸è¾¼ã¿ãã¯ã­
+;  TCB_sp への書込みマクロ
 ;
 .macro	st_TCB_sp	src, tcb, tmp
@@ -206,5 +167,5 @@
 
 ;
-;  TCB_sp ããã®èª­åºããã¯ã­
+;  TCB_sp からの読出しマクロ
 ;
 .macro	ld_TCB_sp	dst, tcb, tmp
@@ -218,5 +179,5 @@
 
 ;
-;  TCB_pc ã¸ã®æ¸è¾¼ã¿ãã¯ã­
+;  TCB_pc への書込みマクロ
 ;
 .macro	st_TCB_pc	src, tcb, tmp
@@ -230,5 +191,5 @@
 
 ;
-;  TCB_pc ããã®èª­åºããã¯ã­
+;  TCB_pc からの読出しマクロ
 ;
 .macro	ld_TCB_pc	dst, tcb, tmp
@@ -242,5 +203,5 @@
 
 ;
-;  TCB_texptn ããã®èª­åºããã¯ã­
+;  TCB_texptn からの読出しマクロ
 ;
 .macro	ld_TCB_texptn	dst, tcb, tmp
@@ -254,5 +215,5 @@
 
 ;
-;  TCB_p_tinib ããã®èª­åºããã¯ã­
+;  TCB_p_tinib からの読出しマクロ
 ;
 .macro	ld_TCB_p_tinib	dst, tcb, tmp
@@ -266,5 +227,5 @@
 
 ;
-;  TINIB_exinf ããã®èª­åºããã¯ã­
+;  TINIB_exinf からの読出しマクロ
 ;
 .macro	ld_TINIB_exinf	dst, tinib, tmp
@@ -278,5 +239,5 @@
 
 ;
-;  TINIB_task ããã®èª­åºããã¯ã­
+;  TINIB_task からの読出しマクロ
 ;
 .macro	ld_TINIB_task	dst, tinib, tmp
@@ -293,53 +254,46 @@
 
 ;
-;  APIããã®ã¿ã¹ã¯ãã£ã¹ãããã£å
-¥å£
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»ãã£ã¹ãããã£ã¢ã¼ã(ãã¡ã¤ã«ãããåç
-§)
-;
-;  ããã§ã¯, ã³ã³ãã­ã¹ãã®éé¿ã¨, å®è¡åéçªå°ã®è¨­å®ããã.
+;  APIからのタスクディスパッチャ入口
+;
+;  呼び出し条件:
+;	・ディスパッチャモード(ファイルヘッダ参照)
+;
+;  ここでは, コンテキストの退避と, 実行再開番地の設定をする.
 ;
 __kernel_dispatch:
 #ifdef TOPPERS_SUPPORT_OVRHDR /* (6-5-3-1) */
-	mov.l	#255, r1					; r1ã«ããã¼å²è¾¼ã¿çªå·
+	mov.l	#255, r1					; r1にダミー割込み番号
 	bsr		__kernel_ovrtimer_stop
 #endif /* TOPPERS_SUPPORT_OVRHDR */
-	pushm	r6-r13						; éã¹ã¯ã©ããã¬ã¸ã¹ã¿ä¿å­
+	pushm	r6-r13						; 非スクラッチレジスタ保存
 	mov.l	#__kernel_p_runtsk, r15
 	mov.l	[r15], r14
-	st_TCB_sp	r0, r14, r5				; ã¹ã¿ãã¯ãã¤ã³ã¿ãTCBã«ä¿å­
-	st_TCB_pc	#dispatch_r, r14, r5	; å®è¡åéçªå°ãTCBã«ä¿å­
+	st_TCB_sp	r0, r14, r5				; スタックポインタをTCBに保存
+	st_TCB_pc	#dispatch_r, r14, r5	; 実行再開番地をTCBに保存
 	bra		dispatcher
 
 ;
-;  APIã¸ã®ã¿ã¹ã¯ãã£ã¹ãããã£åºå£
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»ãã£ã¹ãããã£ã¢ã¼ã(ãã¡ã¤ã«ãããåç
-§)
-;
-;  ããã§ã¯, ã¿ã¹ã¯ä¾å¤ãã³ãã©å¼åºãã¨, ã³ã³ãã­ã¹ãã®å¾©å¸°ããã.
+;  APIへのタスクディスパッチャ出口
+;
+;  呼び出し条件:
+;	・ディスパッチャモード(ファイルヘッダ参照)
+;
+;  ここでは, タスク例外ハンドラ呼出しと, コンテキストの復帰をする.
 ;
 dispatch_r:
 dispatch_r_rts:
-	popm 	r6-r13						; éã¹ã¯ã©ããã¬ã¸ã¹ã¿å¾©å¸°
+	popm 	r6-r13						; 非スクラッチレジスタ復帰
 #ifdef TOPPERS_SUPPORT_OVRHDR /* (6-5-3-2) */
 	bsr		__kernel_ovrtimer_start
 #endif /* TOPPERS_SUPPORT_OVRHDR */
-	rts  	                        	; dispatch å¼ã³åºãå
-ã¸æ»ã.
-
-;
-;  ã¿ã¹ã¯èµ·åå¦ç(ã¿ã¹ã¯å
-é ­ã¸ã®ã¿ã¹ã¯ãã£ã¹ãããã£åºå£)
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»ãã£ã¹ãããã£ã¢ã¼ã(ãã¡ã¤ã«ãããåç
-§)
-;
-;  ããã§ã¯, CPUã­ãã¯è§£é¤ç¶æ
-ã«ã, ã¿ã¹ã¯ãèµ·åãã.
+	rts  	                        	; dispatch 呼び出し元へ戻る.
+
+;
+;  タスク起動処理(タスク先頭へのタスクディスパッチャ出口)
+;
+;  呼び出し条件:
+;	・ディスパッチャモード(ファイルヘッダ参照)
+;
+;  ここでは, CPUロック解除状態にし, タスクを起動する.
 ;
 __kernel_start_r:
@@ -350,67 +304,47 @@
 #endif /* TOPPERS_SUPPORT_OVRHDR */
 	mov.l 	#_ext_tsk, r5
-	push.l	r5							; æ»ãçªå°ãã¹ã¿ãã¯ã«ç©ã
+	push.l	r5							; 戻り番地をスタックに積む
 	ld_TCB_p_tinib	r5, r14, r4
-	ld_TINIB_exinf	r1, r5, r4			; æ¡å¼µæ
-å ±ãç¬¬ä¸å¼æ°ã«è¨­å®
-	ld_TINIB_task	r5, r5, r4			; ã¿ã¹ã¯ã®èµ·åçªå°ãåå¾
+	ld_TINIB_exinf	r1, r5, r4			; 拡張情報を第一引数に設定
+	ld_TINIB_task	r5, r5, r4			; タスクの起動番地を取得
 .if	TIPM_LOCK == -15
-	setpsw	i							; å²è¾¼ã¿è¨±å¯(CPUã­ãã¯è§£é¤ç¶æ
-)
+	setpsw	i							; 割込み許可(CPUロック解除状態)
 .else
-	mov.l	#__kernel_lock_flag, r4		; CPUã­ãã¯è§£é¤ç¶æ
-ã¸
-	mov.l	#0, [r4]					; ããã«æ¥ãã¨ãã¯å¿
-ã saved_ipl ã®
-	mvtc	#00010000H, psw				; å¤ã¯ 0 ã®ãã, ç´å¤ãè¨­å®ãã.
-								; å
-¨å²è¾¼ã¿ã­ãã¯è§£é¤ç¶æ
-( I = 1 )
-								; å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-( IPL = 0 )
+	mov.l	#__kernel_lock_flag, r4		; CPUロック解除状態へ
+	mov.l	#0, [r4]					; ここに来るときは必ず saved_ipl の
+	mvtc	#00010000H, psw				; 値は 0 のため, 直値を設定する.
+								; 全割込みロック解除状態( I = 1 )
+								; 割込み優先度マスク全解除状態( IPL = 0 )
 .endif
 	jmp		r5
 
 ;
-;  ã«ã¼ãã«èµ·åããã®ã¿ã¹ã¯ãã£ã¹ãããã£å
-¥å£
-;
-;  ãã®ã«ã¼ãã³ã¯ï¼ã«ã¼ãã«èµ·åæã«ï¼ãã¹ã¦ã®å²è¾¼ã¿ãç¦æ­¢ããç¶æ
-
-; ï¼å²è¾¼ã¿ã­ãã¯ç¶æ
-ã¨åç­ï¼ã§å¼ã³åºãããï¼ã¾ãï¼å²è¾¼ã¿ã¢ã¼ãï¼é
-;  ã¿ã¹ã¯ã³ã³ãã­ã¹ãã¨åç­ï¼ã§å¼ã³åºããããã¨ãæ³å®ãã¦ããï¼
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»å²è¾¼ã¿(CPUä¾å¤)å¦çã¢ã¼ã(ãã¡ã¤ã«ãããåç
-§)
-;
-;  ããã§ã¯, ãã£ã¹ãããã£ã¢ã¼ãã«å¤æ´ãã.
+;  カーネル起動からのタスクディスパッチャ入口
+;
+;  このルーチンは，カーネル起動時に，すべての割込みを禁止した状態
+; （割込みロック状態と同等）で呼び出される．また，割込みモード（非
+;  タスクコンテキストと同等）で呼び出されることを想定している．
+;
+;  呼び出し条件:
+;	・割込み(CPU例外)処理モード(ファイルヘッダ参照)
+;
+;  ここでは, ディスパッチャモードに変更する.
 ;
 __kernel_start_dispatch:
 	mov.l	#__kernel_intnest, r5
-	mov.w	#0, [r5]					; ã¿ã¹ã¯ã³ã³ãã­ã¹ãã«åæã
+	mov.w	#0, [r5]					; タスクコンテキストに切換え
 #if	TIPM_LOCK != -15
-	mvtc	#(IPL_LOCK | 00010000H), psw	; å
-¨å²è¾¼ã¿ã­ãã¯è§£é¤ç¶æ
-
-										; å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ã§ãªãç¶æ
-
-#endif
-
-;
-; ã¿ã¹ã¯çµäº(ç¾å¨ã®ã³ã³ãã­ã¹ããæ¨ã¦ã)ããã®ã¿ã¹ã¯ãã£ã¹ãããã£å
-¥å£
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»ãã£ã¹ãããã£ã¢ã¼ã(ãã¡ã¤ã«ãããåç
-§)
-;
-;  ããã§ã¯, ä½ããããã¨ã¯ãªã.
-;  ãªã, p_runtsk ã®ã¢ãã¬ã¹åå¾ã ãã¯è¡ãªã.
+	mvtc	#(IPL_LOCK | 00010000H), psw	; 全割込みロック解除状態
+										; 割込み優先度マスク全解除でない状態
+#endif
+
+;
+; タスク終了(現在のコンテキストを捨てる)からのタスクディスパッチャ入口
+;
+;  呼び出し条件:
+;	・ディスパッチャモード(ファイルヘッダ参照)
+;
+;  ここでは, 何もすることはない.
+;  なお, p_runtsk のアドレス取得だけは行なう.
 ;
 __exit_and_dispatch:
@@ -420,71 +354,62 @@
 .endif
 ;
-; ãã£ã¹ãããã£æ¬ä½
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»ãã¹ã¦ã®ã¿ã¹ã¯ã®ã³ã³ãã­ã¹ãã¯ä¿å­ããã¦ãã.
-;
-;  dispatcher å¼åºæã®ã¹ã¿ãã¯:
-;	ã»__kernel_dispatch ããããå ´å			: ã¿ã¹ã¯ã¹ã¿ãã¯
-;	ã»exit_and_dispatch ããããå ´å: 
-;		exit_task ããããå ´å					: ã¿ã¹ã¯ã¹ã¿ãã¯
-;		ã«ã¼ãã«èµ·åæ(__kernel_start_dispatch)	: å²è¾¼ã¿ã¹ã¿ãã¯
-;	ã»ret_int ããããå ´å						: ã¿ã¹ã¯ã¹ã¿ãã¯
-;	ã»dispatcher_idle_loop ããããå ´å			: å²è¾¼ã¿ã¹ã¿ãã¯
+; ディスパッチャ本体
+;
+;  呼び出し条件:
+;	・すべてのタスクのコンテキストは保存されている.
+;
+;  dispatcher 呼出時のスタック:
+;	・__kernel_dispatch からきた場合			: タスクスタック
+;	・exit_and_dispatch からきた場合: 
+;		exit_task からきた場合					: タスクスタック
+;		カーネル起動時(__kernel_start_dispatch)	: 割込みスタック
+;	・ret_int からきた場合						: タスクスタック
+;	・dispatcher_idle_loop からきた場合			: 割込みスタック
 ;
 dispatcher:
 .if	LOG_DSP_ENTER == 1
 	push.l	r15
-	mov.l	r14, r1						; å¼æ°(ãã£ã¹ãããå
-TCB)ãè¨­å®
+	mov.l	r14, r1						; 引数(ディスパッチ元TCB)を設定
 	bsr		__kernel_log_dsp_enter
 	pop		r15
 .endif
 	mov.l	#__kernel_p_schedtsk, r5     
-	mov.l	[r5], [r15]					; p_schedtsk ã p_runtsk ã«
+	mov.l	[r5], [r15]					; p_schedtsk を p_runtsk に
 	mov.l	[r15], r14
 	cmp		#0, r14
-	bz		dispatcher_pre_idle			; schedtsk ããªããã°ã¢ã¤ãã«ã«ã¼ãã¸
-	ld_TCB_sp	r0, r14, r5				; ã¿ã¹ã¯ã¹ã¿ãã¯ãã¤ã³ã¿ãå¾©å¸°
+	bz		dispatcher_pre_idle			; schedtsk がなければアイドルループへ
+	ld_TCB_sp	r0, r14, r5				; タスクスタックポインタを復帰
 .if	LOG_DSP_LEAVE == 1
 	push.l	r14
-	mov.l	r14, r1						; å¼æ°(ãã£ã¹ãããå
-TCB)ãè¨­å®
+	mov.l	r14, r1						; 引数(ディスパッチ先TCB)を設定
 	bsr		__kernel_log_dsp_leave
 	pop		r14
 .endif
 	ld_TCB_pc	r5, r14, r4
-	jmp		r5					; å®è¡åéçªå°ã¸ã¸ã£ã³ã
-
-;
-;  schdedtskãNULLã®å ´åã¯ã¢ã¤ãã«ã«ã¼ãã«å
-¥ã
-;  ã¢ã¤ãã«ã«ã¼ãã¯å²è¾¼ã¿å¦çã¢ã¼ãã§åä½ããã
-;
-;  ããã§å²è¾¼ã¿ã¢ã¼ãã«åãæããã®ã¯ï¼ããã§çºçããå²è¾¼ã¿å¦çã«
-;  ã©ã®ã¹ã¿ãã¯ãä½¿ããã¨ããåé¡ã®è§£æ±ºã¨ï¼å²è¾¼ã¿ãã³ãã©å
-ã§ã®ã¿
-;  ã¹ã¯ãã£ã¹ãããã®é²æ­¢ã¨ãã2ã¤ã®æå³ãããï¼
+	jmp		r5					; 実行再開番地へジャンプ
+
+;
+;  schdedtskがNULLの場合はアイドルループに入る
+;  アイドルループは割込み処理モードで動作させる
+;
+;  ここで割込みモードに切り換えるのは，ここで発生する割込み処理に
+;  どのスタックを使うかという問題の解決と，割込みハンドラ内でのタ
+;  スクディスパッチの防止という2つの意味がある．
 ;
 dispatcher_pre_idle:
 	mov.l	#__kernel_istkpt,r5
-	mov.l	[r5], r0					; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ã
+	mov.l	[r5], r0					; 割込み用のスタックへ切替え
 	mov.l	#__kernel_intnest, r5
-	mov.w	#1, [r5]					; éã¿ã¹ã¯ã³ã³ãã­ã¹ãã«åæã
+	mov.w	#1, [r5]					; 非タスクコンテキストに切換え
 #if	TIPM_LOCK != -15
-	mov.l	#__kernel_lock_flag, r5		; CPUã­ãã¯è§£é¤ç¶æ
-ã¸
+	mov.l	#__kernel_lock_flag, r5		; CPUロック解除状態へ
 	mov.l	#0, [r5]
-	mvtc	#0, psw						; åªå
-åº¦0ã®å²è¾¼ã¿å¦çä¸­ãå½è£
-
+	mvtc	#0, psw						; 優先度0の割込み処理中を偽装
 #endif
 
 dispatcher_idle_loop:
-	setpsw	i							; å
-¨å²è¾¼ã¿è¨±å¯
+	setpsw	i							; 全割込み許可
 	wait
-	clrpsw	i							; å
-¨å²è¾¼ã¿ç¦æ­¢
+	clrpsw	i							; 全割込み禁止
 
 	mov.l	#__kernel_p_schedtsk, r4
@@ -492,44 +417,36 @@
 	mov.l	#__kernel_p_runtsk, r5
 	mov.l	[r5], r5					; p_runtsk -> r5
-	cmp		r4, r5						; p_schedtsk ã¨ p_runtsk ãåãã§ãã£ã¹ãããè¦æ±ç¡ããªã
-	beq		dispatcher_idle_loop		; ã¢ã¤ãã«ã«ã¼ããç¹°ãè¿ã
-	mov.l	#0, [r5]					; reqflgãtrueãªãfalseã«ãã
+	cmp		r4, r5						; p_schedtsk と p_runtsk が同じでディスパッチ要求無しなら
+	beq		dispatcher_idle_loop		; アイドルループを繰り返す
+	mov.l	#0, [r5]					; reqflgがtrueならfalseにする
 	mov.l	#__kernel_intnest, r5
-	mov.w	#0, [r5]					; ã¿ã¹ã¯ã³ã³ãã­ã¹ãã«åæã
+	mov.w	#0, [r5]					; タスクコンテキストに切換え
 #if	TIPM_LOCK != -15
-	mov.l	#__kernel_lock_flag, r5		; CPUã­ãã¯ç¶æ
-ã¸
+	mov.l	#__kernel_lock_flag, r5		; CPUロック状態へ
 	mov.l	#1, [r5]
 	mov.l	#__kernel_saved_ipl, r5
 	mov.l	#0, [r5]
-	mvtc	#(IPL_LOCK | PSW_I_MASK), psw	; å
-¨å²è¾¼ã¿ã­ãã¯è§£é¤ç¶æ
-
-										; å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ã§ãªãç¶æ
-
-#endif
-	bra		dispatcher					; dispatcher ã¸æ»ã
-
-
-;
-; ã«ã¼ãã«ã®çµäºå¦çã®å¼åºã
-;
-; ã¢ã¼ãã¨ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã«åãæ¿ãï¼
+	mvtc	#(IPL_LOCK | PSW_I_MASK), psw	; 全割込みロック解除状態
+										; 割込み優先度マスク全解除でない状態
+#endif
+	bra		dispatcher					; dispatcher へ戻る
+
+
+;
+; カーネルの終了処理の呼出し
+;
+; モードとスタックを非タスクコンテキスト用に切り替え．
 ;
 	.global	__kernel_call_exit_kernel
 __kernel_call_exit_kernel:
 #if	TIPM_LOCK != -15
-	clrpsw	i							; å
-¨å²è¾¼ã¿ç¦æ­¢
-	mov.l	#__kernel_lock_flag, r5		; CPUã­ãã¯è§£é¤ç¶æ
-ã¸
+	clrpsw	i							; 全割込み禁止
+	mov.l	#__kernel_lock_flag, r5		; CPUロック解除状態へ
 	mov.l	#0, [r5]
 #endif
 	mov.l	#__kernel_istkpt, r5
-	mov.l	[r5], r0					; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ã
+	mov.l	[r5], r0					; 割込み用のスタックへ切替え
 	mov.l	#__kernel_intnest, r5
-	mov.w	#1, [r5]					; éã¿ã¹ã¯ã³ã³ãã­ã¹ãã«åæã
+	mov.w	#1, [r5]					; 非タスクコンテキストに切換え
 	bsr		__kernel_exit_kernel
 	bra		__kernel_call_exit_kernel
@@ -537,27 +454,19 @@
 
 ;
-;  å²è¾¼ã¿(CPUä¾å¤)ããã®ã¿ã¹ã¯ãã£ã¹ãããã£å
-¥å£
-;
-;	å¼åºãæ¡ä»¶:
-;	ã»å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-(PSWã¬ã¸ã¹ã¿Iããã = 0)
-;	ã»å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ã§ãªãç¶æ
-(IPL != 0)
-;	ã»ã¿ã¹ã¯ã³ã³ãã­ã¹ã(intnest=0)
-;	ã»ä½¿ç¨ã¹ã¿ãã¯ã¯ã¿ã¹ã¯ã¹ã¿ãã¯
-;	ã»reqflg = true
-;
-;  ããã§ã¯, ãã£ã¹ãããã£ã¢ã¼ãã«å¤æ´ã, reqflgãOFFã«ãã¦ãã, 
-;  é
-å»¶ãã£ã¹ãããã®æç¡ãå¤æ­ãã.
-;
-
-;
-;  ret_intå
-é ­ã§ã¹ã¿ãã¯ã«ç©ã¾ãã¦ããPSWã¬ã¸ã¹ã¿ã¸ã®ãªãã»ãã
+;  割込み(CPU例外)からのタスクディスパッチャ入口
+;
+;	呼出し条件:
+;	・全割込みロック状態(PSWレジスタIビット = 0)
+;	・割込み優先度マスク全解除でない状態(IPL != 0)
+;	・タスクコンテキスト(intnest=0)
+;	・使用スタックはタスクスタック
+;	・reqflg = true
+;
+;  ここでは, ディスパッチャモードに変更し, reqflgをOFFにしてから, 
+;  遅延ディスパッチの有無を判断する.
+;
+
+;
+;  ret_int先頭でスタックに積まれているPSWレジスタへのオフセット
 ;  ACC + FPSW + R14--R15 + R1--R5 + PC
 ;
@@ -566,26 +475,17 @@
 ret_int:
 .if	TIPM_LOCK == -15
-	mov.l	RET_INT_GET_PSW_OFFSET[r0], r5	; å²è¾¼ã¿/CPUä¾å¤çºçåã®IPLå¤åå¾
+	mov.l	RET_INT_GET_PSW_OFFSET[r0], r5	; 割込み/CPU例外発生前のIPL値取得
 	and		#PSW_IPL_MASK, r5
-	mvtc	r5, psw						; å
-¨å²è¾¼ã¿ã­ãã¯(CPUã­ãã¯)ç¶æ
-
-										; å²è¾¼ã¿/CPUä¾å¤çºçåã®å²è¾¼ã¿åªå
-åº¦
+	mvtc	r5, psw						; 全割込みロック(CPUロック)状態
+										; 割込み/CPU例外発生前の割込み優先度
 .else
-	mov.l	#__kernel_lock_flag, r5		; CPUã­ãã¯ç¶æ
-ã¸
+	mov.l	#__kernel_lock_flag, r5		; CPUロック状態へ
 	mov.l	#1, [r5]
-	mov.l	RET_INT_GET_PSW_OFFSET[r0], r5	; å²è¾¼ã¿/CPUä¾å¤çºçåã®IPLå¤åå¾
+	mov.l	RET_INT_GET_PSW_OFFSET[r0], r5	; 割込み/CPU例外発生前のIPL値取得
 	and		#PSW_IPL_MASK, r5
 	mov.l	#__kernel_saved_ipl, r4
 	mov.l	r5, [r4]
-	mvtc	#(IPL_LOCK | PSW_I_MASK), psw	; å
-¨å²è¾¼ã¿ã­ãã¯è§£é¤ç¶æ
-
-										; å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ã§ãªãç¶æ
-
+	mvtc	#(IPL_LOCK | PSW_I_MASK), psw	; 全割込みロック解除状態
+										; 割込み優先度マスク全解除でない状態
 .endif
 	mov.l	#__kernel_p_runtsk, r15     
@@ -593,25 +493,23 @@
 	mov.l	#__kernel_p_schedtsk, r5
 	mov.l	[r5], r5
-	cmp		r5, r14						; p_schedtsk ã¨ p_runtsk ãåããªã
-	beq  	ret_int_r_call_tex			; ret_int_r_call_tex ã¸
-	pushm	r6-r13						; éã¹ã¯ã©ããã¬ã¸ã¹ã¿ä¿å­
-	st_TCB_sp	r0, r14, r5				; ã¹ã¿ãã¯ãã¤ã³ã¿ãTCBã«ä¿å­
-	st_TCB_pc	#ret_int_r, r14, r5		; å®è¡åéçªå°ãTCBã«ä¿å­
+	cmp		r5, r14						; p_schedtsk と p_runtsk が同じなら
+	beq  	ret_int_r_call_tex			; ret_int_r_call_tex へ
+	pushm	r6-r13						; 非スクラッチレジスタ保存
+	st_TCB_sp	r0, r14, r5				; スタックポインタをTCBに保存
+	st_TCB_pc	#ret_int_r, r14, r5		; 実行再開番地をTCBに保存
 	bra		dispatcher
 
 ;
-;  å²è¾¼ã¿(CPUä¾å¤)ã¸ã®ã¿ã¹ã¯ãã£ã¹ãããã£åºå£
-;
-;  å¼ã³åºãæ¡ä»¶:
-;	ã»ãã£ã¹ãããã£ã¢ã¼ã(ãã¡ã¤ã«ãããåç
-§)
-;
-;  ããã§ã¯, ã¿ã¹ã¯ä¾å¤ãã³ãã©å¼åºãã¨, å²è¾¼ã¿(CPUä¾å¤)å¦çã¢ã¼ãã¸ã®
-;  å¤æ´ã¨, ã³ã³ãã­ã¹ãã®å¾©å¸°ãè¡ã, å²è¾¼ã¿(CUPä¾å¤)çºçå
-ã¸æ»ã.
-;
-__kernel_break_wait:					;ã¿ã¹ã¯ã¢ãã¿ç¨ã©ãã«
+;  割込み(CPU例外)へのタスクディスパッチャ出口
+;
+;  呼び出し条件:
+;	・ディスパッチャモード(ファイルヘッダ参照)
+;
+;  ここでは, タスク例外ハンドラ呼出しと, 割込み(CPU例外)処理モードへの
+;  変更と, コンテキストの復帰を行い, 割込み(CUP例外)発生元へ戻る.
+;
+__kernel_break_wait:					;タスクモニタ用ラベル
 ret_int_r:
-	popm 	r6-r13						; éã¹ã¯ã©ããã¬ã¸ã¹ã¿å¾©å¸°
+	popm 	r6-r13						; 非スクラッチレジスタ復帰
 ret_int_r_call_tex:
 #ifdef TOPPERS_SUPPORT_OVRHDR /* 6.6.1 & 6.7.1 */
@@ -622,41 +520,37 @@
 ret_int_r_rte:
 #if	TIPM_LOCK != -15
-	clrpsw	i							; å
-¨å²è¾¼ã¿ç¦æ­¢
-	mov.l	#__kernel_lock_flag, r5		; CPUã­ãã¯è§£é¤ç¶æ
-ã¸
+	clrpsw	i							; 全割込み禁止
+	mov.l	#__kernel_lock_flag, r5		; CPUロック解除状態へ
 	mov.l	#0, [r5]
 #endif
-	popm	r4-r5						; ã¢ã­ã¥ã ã¬ã¼ã¿å¾©å¸°
-	mvtaclo	r5							; ACCæä¸ä½16bitã¯0ã§å¾©å¸°
+	popm	r4-r5						; アキュムレータ復帰
+	mvtaclo	r5							; ACC最下位16bitは0で復帰
 	mvtachi	r4
-	popc	fpsw						; FPUã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿å¾©å¸°
-	popm	r14-r15						; ã¬ã¸ã¹ã¿å¾©å¸°
+	popc	fpsw						; FPUステータスレジスタ復帰
+	popm	r14-r15						; レジスタ復帰
 	popm	r1-r5
-	rte									; å²è¾¼ã¿åã®å¦çã«æ»ã
-
-
-;
-;  å²è¾¼ã¿ã®åºå
-¥å£å¦ç(ã¢ã»ã³ããªè¨èªè¨è¿°é¨å)
-;
-;  å¼åºãæ¡ä»¶:
-;  ã»å²è¾¼ã¿çºçæã®H/Wå¦çã«ãã, PSWã¬ã¸ã¹ã¿ã®Iããã=0, IPLã¯åä»ã
-;    ãå²è¾¼ã¿ã®IPL.
-;  ã»ã¹ã¿ãã¯ã¯å¤éå²ãè¾¼ã¿ãªãå²è¾¼ã¿ã¹ã¿ãã¯, ããã§ãªããã°
-;    ã¿ã¹ã¯ã¹ã¿ãã¯
-;  ã»å²è¾¼ã¿çºçæã®H/Wå¦çã«ãã,ã¹ã¿ãã¯ã«å²è¾¼ã¿ããã®å¾©å¸°PCã¨PSWã
-;    ä¿å­ããã¦ãã.
-;  ã»ãã¯ã¿ãã¼ãã«ã«ç»é²ãããåå¥ã®å
-¥ãå£å¦çã«ãã, ã¹ã¿ãã¯ã«
-;    ã¹ã¯ã©ããã¬ã¸ã¹ã¿(R1-R5)ãä¿å­ããã¦ãã.
-;
-;  å¼æ°:
-;  ã»r1:å²è¾¼ã¿è¦å çªå·
-;  ã»r2:å²è¾¼ã¿ãã³ãã©ã®ã¢ãã¬ã¹
-;
-;  ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ä¸ã«ã©ã®ããã«ä¿å­ããã¦ããããä»¥ä¸ã«ç¤ºã.
-;  ãã®å³ã§ã¯ä¸ãä½ä½, ä¸ãé«ä½ã®ã¢ãã¬ã¹ã§, ã¹ã¿ãã¯ã¯ä¸ãã
-;  ä¸æ¹åã«åãã£ã¦ç©ã¿ä¸ãããããã®ã¨ãã.
+	rte									; 割込み前の処理に戻る
+
+
+;
+;  割込みの出入口処理(アセンブリ言語記述部分)
+;
+;  呼出し条件:
+;  ・割込み発生時のH/W処理により, PSWレジスタのIビット=0, IPLは受付け
+;    た割込みのIPL.
+;  ・スタックは多重割り込みなら割込みスタック, そうでなければ
+;    タスクスタック
+;  ・割込み発生時のH/W処理により,スタックに割込みからの復帰PCとPSWが
+;    保存されている.
+;  ・ベクタテーブルに登録された個別の入り口処理により, スタックに
+;    スクラッチレジスタ(R1-R5)が保存されている.
+;
+;  引数:
+;  ・r1:割込み要因番号
+;  ・r2:割込みハンドラのアドレス
+;
+;  レジスタがスタック上にどのように保存されているかを以下に示す.
+;  この図では上が低位, 下が高位のアドレスで, スタックは下から
+;  上方向に向かって積み上げられるものとする.
 ;
 ;	-------------------------
@@ -686,81 +580,75 @@
 ;	-------------------------(SP + 44)
 ;
-;  ããã§ã¯, å²è¾¼ã¿å¦çã¢ã¼ãã«å¤æ´ãã¦ãã³ãã©ãå®è¡ãã.
-;
-;  ãã³ãã©ãããªã¿ã¼ã³ããå¾ã¯, å¤éå²è¾¼ã¿ã§ãªã, ãã¤ reqflg ã
-;  TRUE ã«ãªã£ãæã«ï¼ret_int ã¸åå²(é
-å»¶ãã£ã¹ããã)ããï¼
-;
-;  å¤éå²è¾¼ã¿ãã©ããã¯å²è¾¼ã¿ãã¹ãã«ã¦ã³ã¿ã®å¤ã§å¤å®ãã.
-;  intnest != 0 ãªãã°å¤éå²è¾¼ã¿ã§ããã¨å¤å®ãã.
-;
-;  reqflg ã¯CPUã­ãã¯ç¶æ
-ã§ãã§ãã¯ãã. ããã§ãªãã¨ï¼
-;  reqflg ãã§ãã¯å¾ã«èµ·åãããå²è¾¼ã¿ãã³ãã©å
-ã§
-;  ãã£ã¹ããããè¦æ±ãããå ´åã«ï¼ãã£ã¹ããããããªã.
+;  ここでは, 割込み処理モードに変更してハンドラを実行する.
+;
+;  ハンドラからリターンした後は, 多重割込みでなく, かつ reqflg が
+;  TRUE になった時に，ret_int へ分岐(遅延ディスパッチ)する．
+;
+;  多重割込みかどうかは割込みネストカウンタの値で判定する.
+;  intnest != 0 ならば多重割込みであると判定する.
+;
+;  reqflg はCPUロック状態でチェックする. そうでないと，
+;  reqflg チェック後に起動された割込みハンドラ内で
+;  ディスパッチが要求された場合に，ディスパッチされない.
 ;
 _kernel_interrupt:
-	pushm	r14-r15						; ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãéé¿
-	pushc	fpsw						; FPUã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿éé¿
+	pushm	r14-r15						; スクラッチレジスタを退避
+	pushc	fpsw						; FPUステータスレジスタ退避
 	mvfacmi	r5
-	shll	#16, r5						; ACCæä¸ä½16bitã¯0ã¨ãã
+	shll	#16, r5						; ACC最下位16bitは0とする
 	mvfachi	r4
-	pushm	r4-r5						; ã¢ã­ã¥ã ã¬ã¼ã¿éé¿
+	pushm	r4-r5						; アキュムレータ退避
 	mov.l	#__kernel_intnest, r5
 	mov.w	[r5], r4
-	add		#1, r4						; ãã¹ãåæ°ãã¤ã³ã¯ãªã¡ã³ã
+	add		#1, r4						; ネスト回数をインクリメント
 	mov.w	r4, [r5]
-	cmp		#1, r4						; å¤éå²ãè¾¼ã¿ãã©ãã
-	bnz		interrupt_from_int			; å ç®åã0ã§ãªããã°å¤éå²è¾¼ã¿
-						; åæ®µã®å²è¾¼ã¿
+	cmp		#1, r4						; 多重割り込みかどうか
+	bnz		interrupt_from_int			; 加算前が0でなければ多重割込み
+						; 初段の割込み
 #ifdef TOPPERS_SUPPORT_OVRHDR /* 6.6.1 */
 	pushm	r1-r5
-	bsr		__kernel_ovrtimer_stop		; r1ã«å²è¾¼ã¿çªå·
+	bsr		__kernel_ovrtimer_stop		; r1に割込み番号
 	popm	r1-r5
 #endif /* TOPPERS_SUPPORT_OVRHDR */
-	mov.l	r0, r3						; ã¹ã¿ãã¯ãã¤ã³ã¿ãåãåºã
-	mov.l	#__kernel_istkpt, r5		; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ãã
+	mov.l	r0, r3						; スタックポインタを取り出し
+	mov.l	#__kernel_istkpt, r5		; 割込み用のスタックへ切替える
 	mov.l	[r5], r0
-	push.l	r3							; ã¿ã¹ã¯ã¹ã¿ãã¯ãä¿æ
-interrupt_from_int:		; å¤éå²è¾¼ã¿
-	setpsw	i							; å²è¾¼ã¿è¨±å¯(CPUã­ãã¯è§£é¤ç¶æ
-)
+	push.l	r3							; タスクスタックを保持
+interrupt_from_int:		; 多重割込み
+	setpsw	i							; 割込み許可(CPUロック解除状態)
 
 .if	LOG_INH_LEAVE == 1
-	push.l	r1							; ã­ã°ãã¬ã¼ã¹ã®å¼æ°ãä¿æ
+	push.l	r1							; ログトレースの引数を保持
 .endif
 
 .if	LOG_INH_ENTER == 1
 	push.l	r2
-	bsr		__kernel_log_inh_enter		; ã­ã°ãã¬ã¼ã¹é¢æ°ã®å¼åºã
-							; å¼æ°ã®å²è¾¼ã¿è¦å çªå·ã¯æ¢ã«r1ã«å
-¥ã£ã¦ãã
+	bsr		__kernel_log_inh_enter		; ログトレース関数の呼出し
+							; 引数の割込み要因番号は既にr1に入っている
 	pop		r2
 .endif
 
-	jsr  	r2							; Cã«ã¼ãã³å¼ã³åºã
+	jsr  	r2							; Cルーチン呼び出し
 
 .if	LOG_INH_LEAVE == 1
-	pop		r1							; å¼æ°ã«å²è¾¼ã¿è¦å çªå·ãè¨­å®
-	bsr		__kernel_log_inh_leave		; ã­ã°ãã¬ã¼ã¹é¢æ°ã®å¼åºã
+	pop		r1							; 引数に割込み要因番号を設定
+	bsr		__kernel_log_inh_leave		; ログトレース関数の呼出し
 .endif
 
-	clrpsw	i							; å²è¾¼ã¿ç¦æ­¢(CPUã­ãã¯ç¶æ
-)
+	clrpsw	i							; 割込み禁止(CPUロック状態)
 	mov.l	#__kernel_intnest, r5
 	mov.w	[r5], r4
-	sub		#1, r4						; ãã¹ãåæ°ããã¯ãªã¡ã³ã
+	sub		#1, r4						; ネスト回数をデクリメント
 	mov.w	r4, [r5]
-	cmp		#0, r4						; å¤éå²ãè¾¼ã¿ãã©ãã
-	bnz		interrupt_return			; å¤éå²ãè¾¼ã¿ãªããªã¿ã¼ã³
-	; åæ®µã®å²è¾¼ã¿
-	pop		r0							; ã¿ã¹ã¯ã®ã¹ã¿ãã¯ã«æ»ã
+	cmp		#0, r4						; 多重割り込みかどうか
+	bnz		interrupt_return			; 多重割り込みならリターン
+	; 初段の割込み
+	pop		r0							; タスクのスタックに戻す
 	mov.l	#__kernel_p_schedtsk, r4
 	mov.l	[r4], r4					; p_schedtsk -> r4
 	mov.l	#__kernel_p_runtsk, r5
 	mov.l	[r5], r5					; p_runtsk -> r5
-	cmp		r4, r5						; p_schedtsk ã¨ p_runtsk ãç°ãªããã£ã¹ãããè¦æ±æããªã
-	bne		ret_int						; ret_int ã¸ã¸ã£ã³ã
+	cmp		r4, r5						; p_schedtsk と p_runtsk が異なりディスパッチ要求有りなら
+	bne		ret_int						; ret_int へジャンプ
 #ifdef TOPPERS_SUPPORT_OVRHDR /* 6.6.1 */
 	mov.l	#__kernel_p_runtsk, r5
@@ -771,42 +659,37 @@
 #endif /* TOPPERS_SUPPORT_OVRHDR */
 interrupt_return:
-	popm	r4-r5						; ã¢ã­ã¥ã ã¬ã¼ã¿å¾©å¸°
-	mvtaclo	r5							; ACCæä¸ä½16bitã¯0ã§å¾©å¸°
+	popm	r4-r5						; アキュムレータ復帰
+	mvtaclo	r5							; ACC最下位16bitは0で復帰
 	mvtachi	r4
-	popc	fpsw						; FPUã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿å¾©å¸°
-	popm	r14-r15						; ã¬ã¸ã¹ã¿å¾©å¸°
+	popc	fpsw						; FPUステータスレジスタ復帰
+	popm	r14-r15						; レジスタ復帰
 	popm	r1-r5
-	rte									; å²è¾¼ã¿åã®å¦çã«æ»ã
-
-
-;
-;  CPUä¾å¤ã®åºå
-¥å£å¦ç(ã¢ã»ã³ããªè¨èªè¨è¿°é¨å)
-;
-;  å¼åºãæ¡ä»¶:
-;  ã»CPUä¾å¤çºçæã®H/Wå¦çã«ãã, PSWã¬ã¸ã¹ã¿ã®Iããã=0, IPL=0.
-;  ã»ã¹ã¿ãã¯ã¯å¤éå²ãè¾¼ã¿ãªãå²è¾¼ã¿ã¹ã¿ãã¯, ããã§ãªããã°
-;    ã¿ã¹ã¯ã¹ã¿ãã¯
-;  ã»CPUä¾å¤çºçæã®H/Wå¦çã«ãã,ã¹ã¿ãã¯ã«CPUä¾å¤ããã®å¾©å¸°PCã¨
-;    PSWãä¿å­ããã¦ãã.
-;  ã»ãã¯ã¿ãã¼ãã«ã«ç»é²ãããåå¥ã®å
-¥ãå£å¦çã«ãã, ã¹ã¿ãã¯ã«
-;    ã¹ã¯ã©ããã¬ã¸ã¹ã¿(R1-R5)ãä¿å­ããã¦ãã.
-;
-;  å¼æ°:
-;  ã»r1:CPUä¾å¤è¦å çªå·
-;  ã»r2:CPUä¾å¤ãã³ãã©ã®ã¢ãã¬ã¹
-;
-;  ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ä¸ã«ã©ã®ããã«ä¿å­ããã¦ããããä»¥ä¸ã«ç¤ºã.
-;  ãã®å³ã§ã¯ä¸ãä½ä½, ä¸ãé«ä½ã®ã¢ãã¬ã¹ã§, ã¹ã¿ãã¯ã¯ä¸ãã
-;  ä¸æ¹åã«åãã£ã¦ç©ã¿ä¸ãããããã®ã¨ãã.
-;  ãªã, CPUä¾å¤è¦å çªå·ã¨R6-R13ã¯CPUä¾å¤ãã³ãã©å
-ã§æ
-å ±ãåå¾
-;  ããç®çã§éé¿ãã¦ãã, åºå£å¦çã§ã¯ä¿å­å
-å®¹ãç ´æ£ããã°ãã.
+	rte									; 割込み前の処理に戻る
+
+
+;
+;  CPU例外の出入口処理(アセンブリ言語記述部分)
+;
+;  呼出し条件:
+;  ・CPU例外発生時のH/W処理により, PSWレジスタのIビット=0, IPL=0.
+;  ・スタックは多重割り込みなら割込みスタック, そうでなければ
+;    タスクスタック
+;  ・CPU例外発生時のH/W処理により,スタックにCPU例外からの復帰PCと
+;    PSWが保存されている.
+;  ・ベクタテーブルに登録された個別の入り口処理により, スタックに
+;    スクラッチレジスタ(R1-R5)が保存されている.
+;
+;  引数:
+;  ・r1:CPU例外要因番号
+;  ・r2:CPU例外ハンドラのアドレス
+;
+;  レジスタがスタック上にどのように保存されているかを以下に示す.
+;  この図では上が低位, 下が高位のアドレスで, スタックは下から
+;  上方向に向かって積み上げられるものとする.
+;  なお, CPU例外要因番号とR6-R13はCPU例外ハンドラ内で情報を取得
+;  する目的で退避しており, 出口処理では保存内容を破棄すればよい.
 ;
 ;	-------------------------
-;	|    CPUä¾å¤è¦å çªå·    | <----- p_excinf
+;	|    CPU例外要因番号    | <----- p_excinf
 ;	------------------------- (intptr_t)(p_excinf + 0)
 ;	|       R6(4byte)       |
@@ -851,30 +734,25 @@
 ;	------------------------- (intptr_t)(p_excinf + 80)
 ;
-;  ããã§ã¯, å²è¾¼ã¿å¦çã¢ã¼ãã«å¤æ´ãã¦ãã³ãã©ãå®è¡ãã.
-;  CPUä¾å¤ãã³ãã©ã«æ¸¡ãVPåã®å¤æ° p_excinf ã¨ãã¦ISPã®å¤æ¸¡ãï¼
-;
-;  ãã³ãã©ãããªã¿ã¼ã³ããå¾ã¯, å¤éå²è¾¼ã¿ã§ãªã, ãã¤ reqflg ã
-;  TRUE ã«ãªã£ãæã«ï¼ret_int ã¸åå²(é
-å»¶ãã£ã¹ããã)ããï¼
-;
-;  å¤éå²è¾¼ã¿ãã©ããã¯å²è¾¼ã¿ãã¹ãã«ã¦ã³ã¿ã®å¤ã§å¤å®ãã.
-;  intnest != 0 ãªãã°å¤éå²è¾¼ã¿ã§ããã¨å¤å®ãã.
-;
-;  reqflg ã¯CPUã­ãã¯ç¶æ
-ã§ãã§ãã¯ãã. ããã§ãªãã¨ï¼
-;  reqflg ãã§ãã¯å¾ã«èµ·åãããå²è¾¼ã¿ãã³ãã©å
-ã§
-;  ãã£ã¹ããããè¦æ±ãããå ´åã«ï¼ãã£ã¹ããããããªã.
-;
-;
-;  CPUä¾å¤å
-¥å£å¦ç
-;
-;  ããã§ã¯, å²è¾¼ã¿å¦çã¢ã¼ãã«å¤æ´ãã¦ãã³ãã©ãå®è¡ãã.
-;
-
-;
-;  CPUä¾å¤ãã³ãã©å¼åºãå¾ã«ä¸è¦ã¨ãªãã¹ã¿ãã¯æ
-å ±ã®ãµã¤ãº
+;  ここでは, 割込み処理モードに変更してハンドラを実行する.
+;  CPU例外ハンドラに渡すVP型の変数 p_excinf としてISPの値渡す．
+;
+;  ハンドラからリターンした後は, 多重割込みでなく, かつ reqflg が
+;  TRUE になった時に，ret_int へ分岐(遅延ディスパッチ)する．
+;
+;  多重割込みかどうかは割込みネストカウンタの値で判定する.
+;  intnest != 0 ならば多重割込みであると判定する.
+;
+;  reqflg はCPUロック状態でチェックする. そうでないと，
+;  reqflg チェック後に起動された割込みハンドラ内で
+;  ディスパッチが要求された場合に，ディスパッチされない.
+;
+;
+;  CPU例外入口処理
+;
+;  ここでは, 割込み処理モードに変更してハンドラを実行する.
+;
+
+;
+;  CPU例外ハンドラ呼出し後に不要となるスタック情報のサイズ
 ;  EXCNO + R6--R13
 ;
@@ -882,89 +760,82 @@
 
 _kernel_exception:
-	pushm	r14-r15						; ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãéé¿
+	pushm	r14-r15						; スクラッチレジスタを退避
 	pushc	fpsw
 	mvfacmi	r5
-	shll	#16, r5						; ACCæä¸ä½16bitã¯0ã¨ãã
+	shll	#16, r5						; ACC最下位16bitは0とする
 	mvfachi	r4
-	pushm	r4-r5						; ã¢ã­ã¥ã ã¬ã¼ã¿éé¿
-	pushm	r6-r13						; éã¹ã¯ã©ããã¬ã¸ã¹ã¿ä¿å­
-	push.l	r1							; CPUä¾å¤è¦å çªå·ãä¿æ
-	mov.l	r0, r3						; ã¹ã¿ãã¯ãã¤ã³ã¿ãåãåºã
+	pushm	r4-r5						; アキュムレータ退避
+	pushm	r6-r13						; 非スクラッチレジスタ保存
+	push.l	r1							; CPU例外要因番号を保持
+	mov.l	r0, r3						; スタックポインタを取り出し
 	mov.l	EXC_GET_PSW_OFFSET[r3], r5
 	and		#PSW_I_MASK, r5
-	bz		exception_nonkernel			; å
-¨å²è¾¼ã¿ç¦æ­¢(CPUã­ãã¯)ç¶æ
-ãªãç®¡çå¤
+	bz		exception_nonkernel			; 全割込み禁止(CPUロック)状態なら管理外
 #if	TIPM_LOCK != -15
 	mov.l	EXC_GET_PSW_OFFSET[r3], r5
 	and		#PSW_IPL_MASK, r5
 	cmp		#IPL_LOCK, r5
-	bgt	exception_nonkernel			; IPLãCPUã­ãã¯ã¬ãã«ä»¥ä¸ãªãç®¡çå¤
+	bgt	exception_nonkernel			; IPLがCPUロックレベル以上なら管理外
 #endif
 	mov.l	#__kernel_intnest, r5
 	mov.w	[r5], r4
-	add		#1, r4						; ãã¹ãåæ°ãã¤ã³ã¯ãªã¡ã³ã
+	add		#1, r4						; ネスト回数をインクリメント
 	mov.w	r4, [r5]
-	cmp		#1, r4						; å¤éå²ãè¾¼ã¿ãã©ãã
-	bnz		exception_from_int			; å ç®åã0ã§ãªããã°å¤éå²è¾¼ã¿
-						; åæ®µã®å²è¾¼ã¿
+	cmp		#1, r4						; 多重割り込みかどうか
+	bnz		exception_from_int			; 加算前が0でなければ多重割込み
+						; 初段の割込み
 #ifdef TOPPERS_SUPPORT_OVRHDR /* 6.7.1 */
 	pushm	r1-r5
-	mov.l	#255, r1					; r1ã«ããã¼å²è¾¼ã¿çªå·
+	mov.l	#255, r1					; r1にダミー割込み番号
 	bsr		__kernel_ovrtimer_stop
 	popm	r1-r5
 #endif /* TOPPERS_SUPPORT_OVRHDR */
-	mov.l	#__kernel_istkpt, r5		; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ãã
+	mov.l	#__kernel_istkpt, r5		; 割込み用のスタックへ切替える
 	mov.l	[r5], r0
-	push.l	r3							; ã¿ã¹ã¯ã¹ã¿ãã¯ãä¿æ
-exception_from_int:		; å¤éå²è¾¼ã¿
+	push.l	r3							; タスクスタックを保持
+exception_from_int:		; 多重割込み
 	mov.l	EXC_GET_PSW_OFFSET[r3], r5
-	mvtc	r5, psw						; CPUä¾å¤çºçåã®ç¶æ
-ã«æ»ã
+	mvtc	r5, psw						; CPU例外発生前の状態に戻す
 #if	LOG_EXC_LEAVE == 1
-	push.l	r1							; ã­ã°ãã¬ã¼ã¹ã®å¼æ°ãä¿æ
+	push.l	r1							; ログトレースの引数を保持
 #endif
 
 #if	LOG_EXC_ENTER == 1
 	pushm	r2-r3
-	bsr		__kernel_log_exc_enter		; ã­ã°ãã¬ã¼ã¹é¢æ°ã®å¼åºã
-							; å¼æ°ã®å²è¾¼ã¿è¦å çªå·ã¯æ¢ã«r1ã«å
-¥ã£ã¦ãã
+	bsr		__kernel_log_exc_enter		; ログトレース関数の呼出し
+							; 引数の割込み要因番号は既にr1に入っている
 	popm	r2-r3
 #endif
 
-	mov.l	r3, r1						; å¼æ°ã®p_excinfãè¨­å®
-	jsr  	r2							; Cã«ã¼ãã³å¼ã³åºã
+	mov.l	r3, r1						; 引数のp_excinfを設定
+	jsr  	r2							; Cルーチン呼び出し
 
 .if	LOG_EXC_LEAVE == 1
-	pop		r1							; å¼æ°ã«å²è¾¼ã¿è¦å çªå·ãè¨­å®
-	bsr		__kernel_log_exc_leave		; ã­ã°ãã¬ã¼ã¹é¢æ°ã®å¼åºã
+	pop		r1							; 引数に割込み要因番号を設定
+	bsr		__kernel_log_exc_leave		; ログトレース関数の呼出し
 .endif
 
-	clrpsw	i							; ããããã¯å¿
-ãå²è¾¼ã¿ç¦æ­¢
+	clrpsw	i							; ここからは必ず割込み禁止
 	mov.l	#__kernel_intnest, r5
 	mov.w	[r5], r4
-	sub		#1, r4						; ãã¹ãåæ°ããã¯ãªã¡ã³ã
+	sub		#1, r4						; ネスト回数をデクリメント
 	mov.w	r4, [r5]
-	cmp		#0, r4						; å¤éå²ãè¾¼ã¿ãã©ãã
-	bnz		exception_return			; å¤éå²ãè¾¼ã¿ãªããªã¿ã¼ã³
-	; åæ®µã®å²è¾¼ã¿
-	pop		r0							; ã¿ã¹ã¯ã®ã¹ã¿ãã¯ã«æ»ã
+	cmp		#0, r4						; 多重割り込みかどうか
+	bnz		exception_return			; 多重割り込みならリターン
+	; 初段の割込み
+	pop		r0							; タスクのスタックに戻す
 	mov.l	#__kernel_p_schedtsk, r4
 	mov.l	[r4], r4					; p_schedtsk -> r4
 	mov.l	#__kernel_p_runtsk, r5
 	mov.l	[r5], r5					; p_runtsk -> r5
-	cmp		r4, r5						; p_schedtsk ã¨ p_runtsk ãåãã§ãã£ã¹ãããè¦æ±ç¡ãã
+	cmp		r4, r5						; p_schedtsk と p_runtsk が同じでディスパッチ要求無しか
 #ifndef TOPPERS_SUPPORT_OVRHDR /* 6.7.1 */
-	beq		exception_return			; ãªããã°ãªã¿ã¼ã³
-	add		#EXCINF_REG_SIZE, r0		; CPUä¾å¤æ
-å ±ã®ç ´æ£
-	bra		ret_int						; ããã° ret_int ã¸ã¸ã£ã³ã
+	beq		exception_return			; なければリターン
+	add		#EXCINF_REG_SIZE, r0		; CPU例外情報の破棄
+	bra		ret_int						; あれば ret_int へジャンプ
 #else /* TOPPERS_SUPPORT_OVRHDR */
-	beq		exception_return_ovr		; ãªããã°ãªã¿ã¼ã³
-	add		#EXCINF_REG_SIZE, r0		; CPUä¾å¤æ
-å ±ã®ç ´æ£
-	bra		ret_int						; ããã° ret_int ã¸ã¸ã£ã³ã
+	beq		exception_return_ovr		; なければリターン
+	add		#EXCINF_REG_SIZE, r0		; CPU例外情報の破棄
+	bra		ret_int						; あれば ret_int へジャンプ
 exception_return_ovr:
 	mov.l	#__kernel_p_runtsk, r5
@@ -979,46 +850,42 @@
 	mov.l	#__kernel_intnest, r5
 	mov.w	[r5], r4
-	add		#1, r4						; ãã¹ãåæ°ãã¤ã³ã¯ãªã¡ã³ã
+	add		#1, r4						; ネスト回数をインクリメント
 	mov.w	r4, [r5]
-	cmp		#1, r4						; å¤éå²ãè¾¼ã¿ãã©ãã
-	bnz		exception_from_nonkernelint	; å ç®åã0ã§ãªããã°å¤éå²è¾¼ã¿
-						; åæ®µã®å²è¾¼ã¿
-	mov.l	#__kernel_istkpt, r5		; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ãã
+	cmp		#1, r4						; 多重割り込みかどうか
+	bnz		exception_from_nonkernelint	; 加算前が0でなければ多重割込み
+						; 初段の割込み
+	mov.l	#__kernel_istkpt, r5		; 割込み用のスタックへ切替える
 	mov.l	[r5], r0
-	push.l	r3							; ã¿ã¹ã¯ã¹ã¿ãã¯ãä¿æ
-exception_from_nonkernelint:	; å¤éå²è¾¼ã¿
+	push.l	r3							; タスクスタックを保持
+exception_from_nonkernelint:	; 多重割込み
 	mov.l	EXC_GET_PSW_OFFSET[r3], r5
-	mvtc	r5, psw						; CPUä¾å¤çºçåã®ç¶æ
-ã«æ»ã
-
-	mov.l	r3, r1						; å¼æ°ã®p_excinfãè¨­å®
-	jsr  	r2							; Cã«ã¼ãã³å¼ã³åºã
-
-	clrpsw	i							; ããããã¯å¿
-ãå²è¾¼ã¿ç¦æ­¢
+	mvtc	r5, psw						; CPU例外発生前の状態に戻す
+
+	mov.l	r3, r1						; 引数のp_excinfを設定
+	jsr  	r2							; Cルーチン呼び出し
+
+	clrpsw	i							; ここからは必ず割込み禁止
 	mov.l	#__kernel_intnest, r5
 	mov.w	[r5], r4
-	sub		#1, r4						; ãã¹ãåæ°ããã¯ãªã¡ã³ã
+	sub		#1, r4						; ネスト回数をデクリメント
 	mov.w	r4, [r5]
-	cmp		#0, r4						; å¤éå²ãè¾¼ã¿ãã©ãã
-	bnz		exception_return			; å¤éå²ãè¾¼ã¿ãªããªã¿ã¼ã³
-	; åæ®µã®å²è¾¼ã¿
-	pop		r0							; ã¿ã¹ã¯ã®ã¹ã¿ãã¯ã«æ»ã
+	cmp		#0, r4						; 多重割り込みかどうか
+	bnz		exception_return			; 多重割り込みならリターン
+	; 初段の割込み
+	pop		r0							; タスクのスタックに戻す
 
 exception_return:
-	add		#EXCINF_REG_SIZE, r0		; CPUä¾å¤æ
-å ±ã®ç ´æ£
-	popm	r4-r5						; ã¢ã­ã¥ã ã¬ã¼ã¿å¾©å¸°
-	mvtaclo	r5							; ACCæä¸ä½16bitã¯0ã§å¾©å¸°
+	add		#EXCINF_REG_SIZE, r0		; CPU例外情報の破棄
+	popm	r4-r5						; アキュムレータ復帰
+	mvtaclo	r5							; ACC最下位16bitは0で復帰
 	mvtachi	r4
-	popc	fpsw						; FPUã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿å¾©å¸°
-	popm	r14-r15						; ã¬ã¸ã¹ã¿å¾©å¸°
+	popc	fpsw						; FPUステータスレジスタ復帰
+	popm	r14-r15						; レジスタ復帰
 	popm	r1-r5
-	rte									; å²è¾¼ã¿åã®å¦çã«æ»ã
-
-
-;
-;  å¾®å°æéå¾
-ã¡
+	rte									; 割込み前の処理に戻る
+
+
+;
+;  微少時間待ち
 ;
 _sil_dly_nse:
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_syssvc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_syssvc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_syssvc.h	(revision 389)
@@ -7,47 +7,32 @@
  *  Copyright (C) 2013      by Mitsuhiro Matsuura
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ãã¹ããã­ã°ã©ã ã®ã¿ã¼ã²ããä¾å­å®ç¾©ï¼RX630ç¨ï¼
+ *		テストプログラムのターゲット依存定義（RX630用）
  */
 
@@ -62,6 +47,6 @@
 
 /*
- *  èµ·åã¡ãã»ã¼ã¸ã«ã¿ã¼ã²ããä¾å­é¨ã®èä½æ¨©è¡¨ç¤ºã
- *  è¿½å ããããã®ãã¯ã­ï¼
+ *  起動メッセージにターゲット依存部の著作権表示を
+ *  追加するためのマクロ．
  */
 #define PRC_COPYRIGHT										\
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_test.S
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_test.S	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_test.S	(revision 389)
@@ -6,47 +6,32 @@
 ;*  Copyright (C) 2010 by Witz Corporation, JAPAN
 ;* 
-;*  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-;*  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-;*  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-;*  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-;*      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-;*      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-;*  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-;*      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-;*      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-;*      ã¨ï¼
-;*    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-;*        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-;*        å ±åãããã¨ï¼
-;*  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-;*      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-;*      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-;*      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-;*      å
-è²¬ãããã¨ï¼
+;*  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+;*  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+;*  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+;*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+;*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+;*      スコード中に含まれていること．
+;*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+;*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+;*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+;*      の無保証規定を掲載すること．
+;*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+;*      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+;*      と．
+;*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+;*        作権表示，この利用条件および下記の無保証規定を掲載すること．
+;*    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+;*        報告すること．
+;*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+;*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+;*      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+;*      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+;*      免責すること．
 ;* 
-;*  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-;*  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-;*  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-;*  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-;*  ã®è²¬ä»»ãè² ããªãï¼
+;*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+;*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+;*  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+;*  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+;*  の責任を負わない．
 ;* 
 ;*  @(#) $Id$
@@ -59,8 +44,8 @@
 _trigger_cpu_exception:
 	;
-	;  CPUä¾å¤ã®çºç
+	;  CPU例外の発生
 	;
-	;  ã¼ã­å²ãç®ãè¡ããã¨ã§, æµ®åå°æ°ç¹ä¾å¤ã
-	;  çºçããã.
+	;  ゼロ割り算を行うことで, 浮動小数点例外を
+	;  発生させる.
 	;
 	mvtc	#00001000H, fpsw
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_test.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_test.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/prc_test.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *		ãã¹ããã­ã°ã©ã ã®ã¿ã¼ã²ããä¾å­å®ç¾©ï¼RX630ç¨ï¼
+ *		テストプログラムのターゲット依存定義（RX630用）
  */
 
@@ -60,5 +45,5 @@
 #define TOPPERS_PRC_TEST_H
 
-#define CPUEXC1					25		/* æµ®åå°æ°ç¹ä¾å¤ */
+#define CPUEXC1					25		/* 浮動小数点例外 */
 #define RAISE_CPU_EXCEPTION		trigger_cpu_exception()
 
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630.h	(revision 389)
@@ -7,47 +7,32 @@
  *  Copyright (C) 2013      by Mitsuhiro Matsuura
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *  RX630ã«ä¾å­ããå®ç¾©
+ *  RX630に依存する定義
  */
 #ifndef TOPPERS_RX630_H
@@ -63,16 +48,16 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©çªå·ã®å®ç¾©(åºå®ãã¯ã¿ãã¼ãã«)
+ *  CPU例外ハンドラ番号の定義(固定ベクタテーブル)
  *
- *  çªå·ã®ç¯å²ã¯0 - 31
- */
-#define INT_PRIVILEGED_INSTRUNCTION		20		/* ç¹æ¨©å½ä»¤ä¾å¤ */
-#define INT_UNDEF_INSTRUNCTION			23		/* æªå®ç¾©å½ä»¤ä¾å¤ */
-#define INT_FLOATINGPOINT_INSTRUCTION	25		/* æµ®åå°æ°ç¹ä¾å¤ */
-#define INT_NMI							30		/* ãã³ãã¹ã«ãã«å²ãè¾¼ã¿ */
-#define INT_RESET						31		/* ãªã»ãã */
-
-/*
- *  å²è¾¼ã¿çªå·ã®å®ç¾©(å¯å¤ãã¯ã¿ãã¼ãã«)
+ *  番号の範囲は0 - 31
+ */
+#define INT_PRIVILEGED_INSTRUNCTION		20		/* 特権命令例外 */
+#define INT_UNDEF_INSTRUNCTION			23		/* 未定義命令例外 */
+#define INT_FLOATINGPOINT_INSTRUCTION	25		/* 浮動小数点例外 */
+#define INT_NMI							30		/* ノンマスカブル割り込み */
+#define INT_RESET						31		/* リセット */
+
+/*
+ *  割込み番号の定義(可変ベクタテーブル)
  */
 #define INT_BUSERR			16
@@ -263,6 +248,5 @@
 
 /*
- *  åã¢ã¸ã¥ã¼ã«ã®ã¬ã¸ã¹ã¿åã³è¨­å®ãããæ
-å ±
+ *  各モジュールのレジスタ及び設定ビット情報
  */
 
@@ -270,5 +254,5 @@
 
 /*
- * ã¢ã¸ã¥ã¼ã«ã¹ãããã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿Aï¼MSTPCRAï¼
+ * モジュールストップコントロールレジスタA（MSTPCRA）
  */
 #define SYSTEM_MSTPCRA_ADDR			( ( volatile uint32_t __evenaccess * )0x00080010 )
@@ -308,5 +292,5 @@
 
 /*
- * ã¢ã¸ã¥ã¼ã«ã¹ãããã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿Bï¼MSTPCRBï¼
+ * モジュールストップコントロールレジスタB（MSTPCRB）
  */
 #define SYSTEM_MSTPCRB_ADDR			( ( volatile uint32_t __evenaccess * )0x00080014 )
@@ -345,5 +329,5 @@
 
 /*
- * ã¢ã¸ã¥ã¼ã«ã¹ãããã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿Cï¼MSTPCRCï¼
+ * モジュールストップコントロールレジスタC（MSTPCRC）
  */
 #define SYSTEM_MSTPCRC_ADDR			( ( volatile uint32_t __evenaccess * )0x00080018 )
@@ -382,5 +366,5 @@
 
 /*
- * ã¯ã­ãã¯çºçåè·¯
+ * クロック発生回路
  */
 #define SYSTEM_SCKCR_ADDR			( ( volatile uint32_t __evenaccess * )0x00080020 )
@@ -402,10 +386,10 @@
 
 /*
- * ãã­ãã¯ãã¬ã¸ã¹ã¿
+ * プロテクトレジスタ
  */
 #define SYSTEM_PRCR_ADDR		( ( volatile uint16_t __evenaccess * )0x000803FE )
 
 /*
- * å²ãè¾¼ã¿è¦æ±ã¬ã¸ã¹ã¿
+ * 割り込み要求レジスタ
  */
 #define ICU_IR000_ADDR			( ( volatile uint8_t __evenaccess * )0x00087000 )
@@ -668,6 +652,5 @@
 
 /*
- * å²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿
+ * 割り込み要求先設定レジスタ
  */
 #define ICU_ISELR000_ADDR		( ( volatile uint8_t __evenaccess * )0x00087100 )
@@ -930,5 +913,5 @@
 
 /*
- * å²ãè¾¼ã¿è¦æ±è¨±å¯ã¬ã¸ã¹ã¿
+ * 割り込み要求許可レジスタ
  */
 #define ICU_IER02_ADDR			( ( volatile uint8_t __evenaccess * )0x00087202 )
@@ -971,5 +954,5 @@
 
 /* 
- * å²ãè¾¼ã¿è¦å ãã©ã¤ãªãªãã£ã¬ã¸ã¹ã¿i(i=0ï½253)ã®è¨­å®
+ * 割り込み要因プライオリティレジスタi(i=0～253)の設定
  */
 #define ICU_IPR000_ADDR			( ( volatile uint8_t __evenaccess * )0x00087300 )
@@ -1233,5 +1216,5 @@
 
 /*
- *  IRQã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿
+ *  IRQコントロールレジスタ
  */
 #define ICU_IRQ0_ADDR			( ( volatile uint8_t __evenaccess * )0x00087500 )
@@ -1255,6 +1238,5 @@
 
 /*
- *  åãã£ã³ãã«ã®ã¬ã¸ã¹ã¿åã³è¨­å®ãããæ
-å ±
+ *  各チャンネルのレジスタ及び設定ビット情報
  */
 #define CMT_CMSTR0_ADDR			( ( volatile uint16_t __evenaccess * )0x00088000 )
@@ -1413,6 +1395,5 @@
 
 /*
- *  I/Oãã¼ãã®ã¬ã¸ã¹ã¿åã³è¨­å®ãããæ
-å ±
+ *  I/Oポートのレジスタ及び設定ビット情報
  */
 #define PORT0_PDR_ADDR			( ( volatile uint8_t __evenaccess * )0x0008C000 )
@@ -1603,6 +1584,5 @@
 
 /*
- *  ãã«ããã¡ã³ã¯ã·ã§ã³ãã³ã³ã³ãã­ã¼ã©ã®ã¬ã¸ã¹ã¿æ
-å ±
+ *  マルチファンクションピンコントローラのレジスタ情報
  */
 #define MPC_PFUSB0_ADDR			( ( volatile uint8_t __evenaccess * )0x0008C114 )
@@ -1743,5 +1723,5 @@
 
 /*
- * ãªã¢ã«ã¿ã¤ã ã¯ã­ãã¯
+ * リアルタイムクロック
  */
 #define RTC_R64CNT_ADDR			( ( volatile uint8_t __evenaccess * )0x0008C400 )
@@ -1755,5 +1735,5 @@
 
 /*
- * 12 ãããA/D ã³ã³ãã¼ã¿
+ * 12 ビットA/D コンバータ
  */
 #define S12AD_ADCSR_ADDR		( ( volatile uint8_t __evenaccess * )0x00089000 )
@@ -2020,10 +2000,10 @@
 
 /*
- *  UARTé¢é£ã®å®ç¾©
+ *  UART関連の定義
  *
- *  pdicã®rx600/rx630_uart.cã§ä½¿ç¨ããï¼
- */
-/*
- *  ã·ãªã¢ã«I/Oã®åæ°
+ *  pdicのrx600/rx630_uart.cで使用する．
+ */
+/*
+ *  シリアルI/Oの個数
  */
 #define TNUM_SIOP	( 2 )
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630_kernel_impl.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630_kernel_impl.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630_kernel_impl.c	(revision 389)
@@ -7,47 +7,32 @@
  *  Copyright (C) 2013 by Mitsuhiro Matsuura
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
+ *		プロセッサ依存モジュール（RX630用）
  */
 
@@ -62,39 +47,39 @@
 
 /*
- *  å²è¾¼ã¿è¦å ãã©ã¤ãªãªãã£ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ãã¼ãã«
+ *  割込み要因プライオリティレジスタアドレステーブル
  */
 volatile uint8_t __evenaccess * const ipr_reg_addr[ INHNO_MAX ] = {
-	NULL,							/* No.0  äºç´ */
-	NULL,							/* No.1  äºç´ */
-	NULL,							/* No.2  äºç´ */
-	NULL,							/* No.3  äºç´ */
-	NULL,							/* No.4  äºç´ */
-	NULL,							/* No.5  äºç´ */
-	NULL,							/* No.6  äºç´ */
-	NULL,							/* No.7  äºç´ */
-	NULL,							/* No.8  äºç´ */
-	NULL,							/* No.9  äºç´ */
-	NULL,							/* No.10  äºç´ */
-	NULL,							/* No.11  äºç´ */
-	NULL,							/* No.12  äºç´ */
-	NULL,							/* No.13  äºç´ */
-	NULL,							/* No.14  äºç´ */
-	NULL,							/* No.15  äºç´ */
-	ICU_IPR000_ADDR,				/* No.16  ãã¹ã¨ã©ã¼ BUSERR */
-	NULL,							/* No.17  äºç´ */
-	NULL,							/* No.18  äºç´ */
-	NULL,							/* No.19  äºç´ */
-	NULL,							/* No.20  äºç´ */
+	NULL,							/* No.0  予約 */
+	NULL,							/* No.1  予約 */
+	NULL,							/* No.2  予約 */
+	NULL,							/* No.3  予約 */
+	NULL,							/* No.4  予約 */
+	NULL,							/* No.5  予約 */
+	NULL,							/* No.6  予約 */
+	NULL,							/* No.7  予約 */
+	NULL,							/* No.8  予約 */
+	NULL,							/* No.9  予約 */
+	NULL,							/* No.10  予約 */
+	NULL,							/* No.11  予約 */
+	NULL,							/* No.12  予約 */
+	NULL,							/* No.13  予約 */
+	NULL,							/* No.14  予約 */
+	NULL,							/* No.15  予約 */
+	ICU_IPR000_ADDR,				/* No.16  バスエラー BUSERR */
+	NULL,							/* No.17  予約 */
+	NULL,							/* No.18  予約 */
+	NULL,							/* No.19  予約 */
+	NULL,							/* No.20  予約 */
 	ICU_IPR001_ADDR,				/* No.21  FCU FIFERR */
-	NULL,							/* No.22  äºç´ */
+	NULL,							/* No.22  予約 */
 	ICU_IPR002_ADDR,				/* No.23  FCU FRDYI */
-	NULL,							/* No.24  äºç´ */
-	NULL,							/* No.25  äºç´ */
-	NULL,							/* No.26  äºç´ */
+	NULL,							/* No.24  予約 */
+	NULL,							/* No.25  予約 */
+	NULL,							/* No.26  予約 */
 	ICU_IPR003_ADDR,				/* No.27  SWINT */
-	ICU_IPR004_ADDR,				/* No.28  CMTã¦ããã0 CMT0 */
-	ICU_IPR005_ADDR,				/* No.29  CMTã¦ããã0 CMT1 */
-	ICU_IPR006_ADDR,				/* No.30  CMTã¦ããã1 CMT2 */
-	ICU_IPR007_ADDR,				/* No.31  CMTã¦ããã1 CMT3 */
+	ICU_IPR004_ADDR,				/* No.28  CMTユニット0 CMT0 */
+	ICU_IPR005_ADDR,				/* No.29  CMTユニット0 CMT1 */
+	ICU_IPR006_ADDR,				/* No.30  CMTユニット1 CMT2 */
+	ICU_IPR007_ADDR,				/* No.31  CMTユニット1 CMT3 */
 	ICU_IPR032_ADDR,				/* No.32  ETHER */
 	ICU_IPR033_ADDR,				/* No.33  USB0 D0FIFO0 */
@@ -125,50 +110,50 @@
 	ICU_IPR056_ADDR, 				/* No.58  CAN RXM2 */
 	ICU_IPR056_ADDR, 				/* No.59  CAN TXM2 */
-	NULL,							/* No.60  äºç´ */
-	NULL,							/* No.61  äºç´ */
+	NULL,							/* No.60  予約 */
+	NULL,							/* No.61  予約 */
 	ICU_IPR062_ADDR,			 	/* No.62  RTC PRD */
-	NULL,							/* No.63  äºç´ */
-	ICU_IPR064_ADDR,				/* No.64  å¤é¨ç«¯å­ IRQ0 */
-	ICU_IPR065_ADDR,				/* No.65  å¤é¨ç«¯å­ IRQ1 */
-	ICU_IPR066_ADDR,				/* No.66  å¤é¨ç«¯å­ IRQ2 */
-	ICU_IPR067_ADDR,				/* No.67  å¤é¨ç«¯å­ IRQ3 */
-	ICU_IPR068_ADDR,				/* No.68  å¤é¨ç«¯å­ IRQ4 */
-	ICU_IPR069_ADDR,				/* No.69  å¤é¨ç«¯å­ IRQ5 */
-	ICU_IPR070_ADDR,				/* No.70  å¤é¨ç«¯å­ IRQ6 */
-	ICU_IPR071_ADDR,				/* No.71  å¤é¨ç«¯å­ IRQ7 */
-	ICU_IPR072_ADDR,				/* No.72  å¤é¨ç«¯å­ IRQ8 */
-	ICU_IPR073_ADDR,				/* No.73  å¤é¨ç«¯å­ IRQ9 */
-	ICU_IPR074_ADDR,				/* No.74  å¤é¨ç«¯å­ IRQ10 */
-	ICU_IPR075_ADDR,				/* No.75  å¤é¨ç«¯å­ IRQ11 */
-	ICU_IPR076_ADDR,				/* No.76  å¤é¨ç«¯å­ IRQ12 */
-	ICU_IPR077_ADDR,				/* No.77  å¤é¨ç«¯å­ IRQ13 */
-	ICU_IPR078_ADDR,				/* No.78  å¤é¨ç«¯å­ IRQ14 */
-	ICU_IPR079_ADDR,				/* No.79  å¤é¨ç«¯å­ IRQ15 */
-	NULL,							/* No.80  äºç´ */
-	NULL,							/* No.81  äºç´ */
-	NULL,							/* No.82  äºç´ */
-	NULL,							/* No.83  äºç´ */
-	NULL,							/* No.84  äºç´ */
-	NULL,							/* No.85  äºç´ */
-	NULL,							/* No.86  äºç´ */
-	NULL,							/* No.87  äºç´ */
-	NULL,							/* No.88  äºç´ */
-	NULL,							/* No.89  äºç´ */
+	NULL,							/* No.63  予約 */
+	ICU_IPR064_ADDR,				/* No.64  外部端子 IRQ0 */
+	ICU_IPR065_ADDR,				/* No.65  外部端子 IRQ1 */
+	ICU_IPR066_ADDR,				/* No.66  外部端子 IRQ2 */
+	ICU_IPR067_ADDR,				/* No.67  外部端子 IRQ3 */
+	ICU_IPR068_ADDR,				/* No.68  外部端子 IRQ4 */
+	ICU_IPR069_ADDR,				/* No.69  外部端子 IRQ5 */
+	ICU_IPR070_ADDR,				/* No.70  外部端子 IRQ6 */
+	ICU_IPR071_ADDR,				/* No.71  外部端子 IRQ7 */
+	ICU_IPR072_ADDR,				/* No.72  外部端子 IRQ8 */
+	ICU_IPR073_ADDR,				/* No.73  外部端子 IRQ9 */
+	ICU_IPR074_ADDR,				/* No.74  外部端子 IRQ10 */
+	ICU_IPR075_ADDR,				/* No.75  外部端子 IRQ11 */
+	ICU_IPR076_ADDR,				/* No.76  外部端子 IRQ12 */
+	ICU_IPR077_ADDR,				/* No.77  外部端子 IRQ13 */
+	ICU_IPR078_ADDR,				/* No.78  外部端子 IRQ14 */
+	ICU_IPR079_ADDR,				/* No.79  外部端子 IRQ15 */
+	NULL,							/* No.80  予約 */
+	NULL,							/* No.81  予約 */
+	NULL,							/* No.82  予約 */
+	NULL,							/* No.83  予約 */
+	NULL,							/* No.84  予約 */
+	NULL,							/* No.85  予約 */
+	NULL,							/* No.86  予約 */
+	NULL,							/* No.87  予約 */
+	NULL,							/* No.88  予約 */
+	NULL,							/* No.89  予約 */
 	ICU_IPR090_ADDR, 				/* No.90  USBR0 */
 	ICU_IPR091_ADDR, 				/* No.91  USBR1 */
 	ICU_IPR092_ADDR,				/* No.92  RTC ALM */
 	ICU_IPR093_ADDR,				/* No.93  RTC PRD */
-	NULL,							/* No.94  äºç´ */
-	NULL,							/* No.95  äºç´ */
-	NULL,							/* No.96  äºç´ */
-	NULL,							/* No.97  äºç´ */
+	NULL,							/* No.94  予約 */
+	NULL,							/* No.95  予約 */
+	NULL,							/* No.96  予約 */
+	NULL,							/* No.97  予約 */
 	ICU_IPR098_ADDR,				/* No.98  AD ADI0 */
-	NULL,							/* No.99  äºç´ */
-	NULL,							/* No.100  äºç´ */
-	NULL,							/* No.101  äºç´ */
+	NULL,							/* No.99  予約 */
+	NULL,							/* No.100  予約 */
+	NULL,							/* No.101  予約 */
 	ICU_IPR102_ADDR,				/* No.102 S12AD S12ADIO */
-	NULL,							/* No.103  äºç´ */
-	NULL,							/* No.104  äºç´ */
-	NULL,							/* No.105  äºç´ */
+	NULL,							/* No.103  予約 */
+	NULL,							/* No.104  予約 */
+	NULL,							/* No.105  予約 */
 	ICU_IPR106_ADDR,				/* No.106 ICU GROUP0 */
 	ICU_IPR107_ADDR,				/* No.107 ICU GROUP1 */
@@ -178,13 +163,13 @@
 	ICU_IPR111_ADDR,				/* No.111 ICU GROUP5 */
 	ICU_IPR112_ADDR,				/* No.112 ICU GROUP6 */
-	NULL,							/* No.113  äºç´ */
+	NULL,							/* No.113  予約 */
 	ICU_IPR114_ADDR,				/* No.114 ICU GROUP12 */
-	NULL,							/* No.115  äºç´ */
-	NULL,							/* No.116  äºç´ */
-	NULL,							/* No.117  äºç´ */
-	NULL,							/* No.118  äºç´ */
-	NULL,							/* No.119  äºç´ */
-	NULL,							/* No.120  äºç´ */
-	NULL,							/* No.121  äºç´ */
+	NULL,							/* No.115  予約 */
+	NULL,							/* No.116  予約 */
+	NULL,							/* No.117  予約 */
+	NULL,							/* No.118  予約 */
+	NULL,							/* No.119  予約 */
+	NULL,							/* No.120  予約 */
+	NULL,							/* No.121  予約 */
 	ICU_IPR122_ADDR,				/* No.122 SCI12 SCIX0 */
 	ICU_IPR123_ADDR,				/* No.123 SCI12 SCIX1 */
@@ -233,6 +218,6 @@
 	ICU_IPR167_ADDR,				/* No.166 POE OEI1 */
 	ICU_IPR167_ADDR,				/* No.167 POE OEI2 */
-	NULL,							/* No.168  äºç´ */
-	NULL,							/* No.169  äºç´ */
+	NULL,							/* No.168  予約 */
+	NULL,							/* No.169  予約 */
 	ICU_IPR170_ADDR,				/* No.170 TMR0 CMIA0 */
 	ICU_IPR170_ADDR,				/* No.171 TMR0 CMIB0 */
@@ -269,14 +254,14 @@
 	ICU_IPR202_ADDR,				/* No.202 EXDMAC EXDMACI0 */
 	ICU_IPR203_ADDR,				/* No.203 EXDMAC EXDMACI1 */
-	NULL,							/* No.204  äºç´ */
-	NULL,							/* No.205  äºç´ */
-	NULL,							/* No.206  äºç´ */
-	NULL,							/* No.207  äºç´ */
-	NULL,							/* No.208  äºç´ */
-	NULL,							/* No.209  äºç´ */
-	NULL,							/* No.210  äºç´ */
-	NULL,							/* No.211  äºç´ */
-	NULL,							/* No.212  äºç´ */
-	NULL,							/* No.213  äºç´ */
+	NULL,							/* No.204  予約 */
+	NULL,							/* No.205  予約 */
+	NULL,							/* No.206  予約 */
+	NULL,							/* No.207  予約 */
+	NULL,							/* No.208  予約 */
+	NULL,							/* No.209  予約 */
+	NULL,							/* No.210  予約 */
+	NULL,							/* No.211  予約 */
+	NULL,							/* No.212  予約 */
+	NULL,							/* No.213  予約 */
 	ICU_IPR214_ADDR,				/* No.214 SCI0 RXI0 */
 	ICU_IPR214_ADDR,				/* No.215 SCI0 TXI0 */
@@ -319,45 +304,45 @@
 	ICU_IPR250_ADDR,				/* No.252 SCI12 TEI12 */
 	ICU_IPR253_ADDR,				/* No.253 IEB IEBINT */
-	NULL,							/* No.254  äºç´ */
-	NULL,							/* No.255  äºç´ */
+	NULL,							/* No.254  予約 */
+	NULL,							/* No.255  予約 */
 };
 
 
 /*
- *  å²è¾¼ã¿è¦æ±è¨±å¯ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ãã¼ãã«
+ *  割込み要求許可レジスタアドレステーブル
  */
 const IER_INFO ier_reg_addr[ INHNO_MAX ] = {
-	{ NULL, INVALID_OFFSET },			/* No.0   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.1   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.2   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.3   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.4   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.5   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.6   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.7   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.8   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.9   äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.10  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.11  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.12  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.13  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.14  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.15  äºç´ */
-	{ ICU_IER02_ADDR, ICU_IEN0_BIT },	/* No.16  ãã¹ã¨ã©ã¼ BUSERR */
-	{ NULL, INVALID_OFFSET },			/* No.17  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.18  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.19  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.20  äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.0   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.1   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.2   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.3   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.4   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.5   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.6   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.7   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.8   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.9   予約 */
+	{ NULL, INVALID_OFFSET },			/* No.10  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.11  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.12  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.13  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.14  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.15  予約 */
+	{ ICU_IER02_ADDR, ICU_IEN0_BIT },	/* No.16  バスエラー BUSERR */
+	{ NULL, INVALID_OFFSET },			/* No.17  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.18  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.19  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.20  予約 */
 	{ ICU_IER02_ADDR, ICU_IEN5_BIT },	/* No.21  FCU FIFERR */
-	{ NULL, INVALID_OFFSET },			/* No.22  äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.22  予約 */
 	{ ICU_IER02_ADDR, ICU_IEN7_BIT },	/* No.23  FCU FRDYI */
-	{ NULL, INVALID_OFFSET },			/* No.24  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.25  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.26  äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.24  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.25  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.26  予約 */
 	{ ICU_IER03_ADDR, ICU_IEN3_BIT },	/* No.27  SWINT */
-	{ ICU_IER03_ADDR, ICU_IEN4_BIT },	/* No.28  CMTã¦ããã0 CMT0 */
-	{ ICU_IER03_ADDR, ICU_IEN5_BIT },	/* No.29  CMTã¦ããã0 CMT1 */
-	{ ICU_IER03_ADDR, ICU_IEN6_BIT },	/* No.30  CMTã¦ããã1 CMT2 */
-	{ ICU_IER03_ADDR, ICU_IEN7_BIT },	/* No.31  CMTã¦ããã1 CMT3 */
+	{ ICU_IER03_ADDR, ICU_IEN4_BIT },	/* No.28  CMTユニット0 CMT0 */
+	{ ICU_IER03_ADDR, ICU_IEN5_BIT },	/* No.29  CMTユニット0 CMT1 */
+	{ ICU_IER03_ADDR, ICU_IEN6_BIT },	/* No.30  CMTユニット1 CMT2 */
+	{ ICU_IER03_ADDR, ICU_IEN7_BIT },	/* No.31  CMTユニット1 CMT3 */
 	{ ICU_IER04_ADDR, ICU_IEN0_BIT },	/* No.32  ETHER */
 	{ ICU_IER04_ADDR, ICU_IEN1_BIT },	/* No.33  USB0 D0FIFO0 */
@@ -388,50 +373,50 @@
 	{ ICU_IER07_ADDR, ICU_IEN2_BIT },	/* No.58  CAN2 RXM2 */
 	{ ICU_IER07_ADDR, ICU_IEN3_BIT },	/* No.59  CAN2 TXM2 */
-	{ NULL, INVALID_OFFSET },			/* No.60  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.61  äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.60  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.61  予約 */
 	{ ICU_IER07_ADDR, ICU_IEN6_BIT },	/* No.62  RTC PRD */
-	{ NULL, INVALID_OFFSET },			/* No.63  äºç´ */
-	{ ICU_IER08_ADDR, ICU_IEN0_BIT },	/* No.64  å¤é¨ç«¯å­ IRQ0 */
-	{ ICU_IER08_ADDR, ICU_IEN1_BIT },	/* No.65  å¤é¨ç«¯å­ IRQ1 */
-	{ ICU_IER08_ADDR, ICU_IEN2_BIT },	/* No.66  å¤é¨ç«¯å­ IRQ2 */
-	{ ICU_IER08_ADDR, ICU_IEN3_BIT },	/* No.67  å¤é¨ç«¯å­ IRQ3 */
-	{ ICU_IER08_ADDR, ICU_IEN4_BIT },	/* No.68  å¤é¨ç«¯å­ IRQ4 */
-	{ ICU_IER08_ADDR, ICU_IEN5_BIT },	/* No.69  å¤é¨ç«¯å­ IRQ5 */
-	{ ICU_IER08_ADDR, ICU_IEN6_BIT },	/* No.70  å¤é¨ç«¯å­ IRQ6 */
-	{ ICU_IER08_ADDR, ICU_IEN7_BIT },	/* No.71  å¤é¨ç«¯å­ IRQ7 */
-	{ ICU_IER09_ADDR, ICU_IEN0_BIT },	/* No.72  å¤é¨ç«¯å­ IRQ8 */
-	{ ICU_IER09_ADDR, ICU_IEN1_BIT },	/* No.73  å¤é¨ç«¯å­ IRQ9 */
-	{ ICU_IER09_ADDR, ICU_IEN2_BIT },	/* No.74  å¤é¨ç«¯å­ IRQ10 */
-	{ ICU_IER09_ADDR, ICU_IEN3_BIT },	/* No.75  å¤é¨ç«¯å­ IRQ11 */
-	{ ICU_IER09_ADDR, ICU_IEN4_BIT },	/* No.76  å¤é¨ç«¯å­ IRQ12 */
-	{ ICU_IER09_ADDR, ICU_IEN5_BIT },	/* No.77  å¤é¨ç«¯å­ IRQ13 */
-	{ ICU_IER09_ADDR, ICU_IEN6_BIT },	/* No.78  å¤é¨ç«¯å­ IRQ14 */
-	{ ICU_IER09_ADDR, ICU_IEN7_BIT },	/* No.79  å¤é¨ç«¯å­ IRQ15 */
-	{ NULL, INVALID_OFFSET },			/* No.80  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.81  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.82  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.83  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.84  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.85  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.86  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.87  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.88  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.89  äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.63  予約 */
+	{ ICU_IER08_ADDR, ICU_IEN0_BIT },	/* No.64  外部端子 IRQ0 */
+	{ ICU_IER08_ADDR, ICU_IEN1_BIT },	/* No.65  外部端子 IRQ1 */
+	{ ICU_IER08_ADDR, ICU_IEN2_BIT },	/* No.66  外部端子 IRQ2 */
+	{ ICU_IER08_ADDR, ICU_IEN3_BIT },	/* No.67  外部端子 IRQ3 */
+	{ ICU_IER08_ADDR, ICU_IEN4_BIT },	/* No.68  外部端子 IRQ4 */
+	{ ICU_IER08_ADDR, ICU_IEN5_BIT },	/* No.69  外部端子 IRQ5 */
+	{ ICU_IER08_ADDR, ICU_IEN6_BIT },	/* No.70  外部端子 IRQ6 */
+	{ ICU_IER08_ADDR, ICU_IEN7_BIT },	/* No.71  外部端子 IRQ7 */
+	{ ICU_IER09_ADDR, ICU_IEN0_BIT },	/* No.72  外部端子 IRQ8 */
+	{ ICU_IER09_ADDR, ICU_IEN1_BIT },	/* No.73  外部端子 IRQ9 */
+	{ ICU_IER09_ADDR, ICU_IEN2_BIT },	/* No.74  外部端子 IRQ10 */
+	{ ICU_IER09_ADDR, ICU_IEN3_BIT },	/* No.75  外部端子 IRQ11 */
+	{ ICU_IER09_ADDR, ICU_IEN4_BIT },	/* No.76  外部端子 IRQ12 */
+	{ ICU_IER09_ADDR, ICU_IEN5_BIT },	/* No.77  外部端子 IRQ13 */
+	{ ICU_IER09_ADDR, ICU_IEN6_BIT },	/* No.78  外部端子 IRQ14 */
+	{ ICU_IER09_ADDR, ICU_IEN7_BIT },	/* No.79  外部端子 IRQ15 */
+	{ NULL, INVALID_OFFSET },			/* No.80  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.81  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.82  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.83  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.84  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.85  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.86  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.87  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.88  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.89  予約 */
 	{ ICU_IER0B_ADDR, ICU_IEN2_BIT },	/* No.90  USBR0 */
 	{ ICU_IER0B_ADDR, ICU_IEN3_BIT },	/* No.91  USBR1 */
 	{ ICU_IER0B_ADDR, ICU_IEN4_BIT },	/* No.92  RTC ALM */
 	{ ICU_IER0B_ADDR, ICU_IEN5_BIT },	/* No.92  RTC PRD */
-	{ NULL, INVALID_OFFSET },			/* No.94  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.95  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.96  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.97  äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.94  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.95  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.96  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.97  予約 */
 	{ ICU_IER0C_ADDR, ICU_IEN2_BIT },	/* No.98  AD0 ADI0 */
-	{ NULL, INVALID_OFFSET },			/* No.99  äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.100 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.101 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.99  予約 */
+	{ NULL, INVALID_OFFSET },			/* No.100 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.101 予約 */
 	{ ICU_IER0C_ADDR, ICU_IEN6_BIT },	/* No.102 S12AD S12ADI00 */
-	{ NULL, INVALID_OFFSET },			/* No.103 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.104 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.105 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.103 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.104 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.105 予約 */
 	{ ICU_IER0D_ADDR, ICU_IEN2_BIT },	/* No.106 ICU GROUP0 */
 	{ ICU_IER0D_ADDR, ICU_IEN3_BIT },	/* No.107 ICU GROUP1 */
@@ -441,13 +426,13 @@
 	{ ICU_IER0D_ADDR, ICU_IEN7_BIT },	/* No.111 ICU GROUP5 */
 	{ ICU_IER0E_ADDR, ICU_IEN0_BIT },	/* No.112 ICU GROUP6 */
-	{ NULL, INVALID_OFFSET },			/* No.113 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.113 予約 */
 	{ ICU_IER0E_ADDR, ICU_IEN1_BIT },	/* No.114 ICU GROUP12 */
-	{ NULL, INVALID_OFFSET },			/* No.115 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.116 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.117 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.118 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.119 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.120 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.121 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.115 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.116 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.117 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.118 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.119 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.120 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.121 予約 */
 	{ ICU_IER0F_ADDR, ICU_IEN2_BIT },	/* No.122 SCI12 SCIX0 */
 	{ ICU_IER0F_ADDR, ICU_IEN3_BIT },	/* No.123 SCI12 SCIX1 */
@@ -496,6 +481,6 @@
 	{ ICU_IER14_ADDR, ICU_IEN6_BIT },	/* No.166 POE OEI1 */
 	{ ICU_IER14_ADDR, ICU_IEN7_BIT },	/* No.167 POE OEI2 */
-	{ NULL, INVALID_OFFSET },			/* No.168 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.169 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.168 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.169 予約 */
 	{ ICU_IER15_ADDR, ICU_IEN2_BIT },	/* No.170 TMR0 CMIA0 */
 	{ ICU_IER15_ADDR, ICU_IEN3_BIT },	/* No.171 TMR0 CMIB0 */
@@ -532,14 +517,14 @@
 	{ ICU_IER19_ADDR, ICU_IEN2_BIT },	/* No.202 EXDMAC EXDMAC0I */
 	{ ICU_IER19_ADDR, ICU_IEN3_BIT },	/* No.203 EXDMAC EXDMAC1I */
-	{ NULL, INVALID_OFFSET },			/* No.204 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.205 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.206 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.207 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.208 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.209 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.210 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.211 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.212 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.213 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.204 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.205 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.206 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.207 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.208 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.209 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.210 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.211 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.212 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.213 予約 */
 	{ ICU_IER1A_ADDR, ICU_IEN6_BIT },	/* No.214 SCI0 RXI0 */
 	{ ICU_IER1A_ADDR, ICU_IEN7_BIT },	/* No.215 SCI0 TXI0 */
@@ -582,11 +567,11 @@
 	{ ICU_IER1F_ADDR, ICU_IEN4_BIT },	/* No.252 SCI12 TEI12 */
 	{ ICU_IER1F_ADDR, ICU_IEN5_BIT },	/* No.253 IEB IEBINT */
-	{ NULL, INVALID_OFFSET },			/* No.254 äºç´ */
-	{ NULL, INVALID_OFFSET },			/* No.255 äºç´ */
+	{ NULL, INVALID_OFFSET },			/* No.254 予約 */
+	{ NULL, INVALID_OFFSET },			/* No.255 予約 */
 };
 
 
 /*
- *  IRQã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ãã¼ãã«
+ *  IRQコントロールレジスタアドレステーブル
  */
 volatile uint8_t __evenaccess * const irqcr_reg_addr[ IRQ_MAX ] = {
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630_kernel_impl.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630_kernel_impl.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/rx630_kernel_impl.h	(revision 389)
@@ -7,47 +7,32 @@
  *  Copyright (C) 2013      by Mitsuhiro Matsuura
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,9 +40,9 @@
 
 /*
- *		ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
+ *		プロセッサ依存モジュール（RX630用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_kernel_impl.hï¼ã¾ãã¯ï¼ããããã¤ã³ã¯
- *  ã«ã¼ãããããã¡ã¤ã«ï¼ã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡ã¤ã«ãã
- *  ç´æ¥ã¤ã³ã¯ã«ã¼ããã¦ã¯ãªããªãï¼
+ *  このインクルードファイルは，target_kernel_impl.h（または，そこからインク
+ *  ルードされるファイル）のみからインクルードされる．他のファイルから
+ *  直接インクルードしてはならない．
  */
 
@@ -68,5 +53,5 @@
 
 /*
- *  å²è¾¼ã¿è¦å æ°
+ *  割込み要因数
  */
 #define	INHNO_MAX	UINT_C( 256 )
@@ -75,5 +60,5 @@
 
 /*
- *  å²è¾¼ã¿å¶å¾¡ç¨åå®ç¾©
+ *  割込み制御用型定義
  */
 typedef struct ier_info {
@@ -85,5 +70,5 @@
 
 /*
- *  å²è¾¼ã¿å¶å¾¡ç¨å®ç¾©
+ *  割込み制御用定義
  */
 #define	INVALID_OFFSET				( 0xFFU )
@@ -98,14 +83,14 @@
 
 /*
- *  å²è¾¼ã¿å¶å¾¡ç¨ãã¼ãã«
+ *  割込み制御用テーブル
  */
 
-/* å²è¾¼ã¿è¦å ãã©ã¤ãªãªãã£ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ */
+/* 割込み要因プライオリティレジスタアドレス */
 extern volatile uint8_t __evenaccess * const ipr_reg_addr[];
-/* å²è¾¼ã¿è¦æ±è¨±å¯ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ */
+/* 割込み要求許可レジスタアドレス */
 extern const IER_INFO ier_reg_addr[];
-/* å²è¾¼ã¿è¦æ±ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ */
+/* 割込み要求レジスタアドレス */
 extern volatile uint8_t __evenaccess * const ir_reg_addr[];
-/* IRQã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ */
+/* IRQコントロールレジスタアドレス */
 extern volatile uint8_t __evenaccess * const irqcr_reg_addr[];
 
@@ -113,5 +98,5 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
+ *  プロセッサ依存モジュール（RX630用）
  */
 #include "prc_kernel_impl.h"
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/scif.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/scif.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/scif.h	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  $Id$
@@ -58,6 +43,5 @@
 
 /*
- *		FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ã«é¢ããå®ç¾©
+ *		FIFO内蔵シリアルコミュニケーションインタフェースに関する定義
  */
 
@@ -66,5 +50,5 @@
 
 /*
- *  SCIã¬ã¸ã¹ã¿ã®ãã¼ã¹çªå°ã®å®ç¾©
+ *  SCIレジスタのベース番地の定義
  */
 #define SCI0_BASE	((uint32_t)(SCI0_SMR_ADDR))
@@ -80,11 +64,11 @@
 #define SCI10_BASE	((uint32_t)(SCI10_SMR_ADDR))
 #define SCI11_BASE	((uint32_t)(SCI11_SMR_ADDR))
-/* SCI12ã¯ä¸è¨ã®SCI_NUMãä½¿ç¨ã§ããªã */
+/* SCI12は下記のSCI_NUMが使用できない */
 
-/* ã¢ã¸ã¥ã¼ã«ã¹ãããã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿B bit */
+/* モジュールストップコントロールレジスタB bit */
 #define SCI_NUM(base)	(((intptr_t)base - SCI0_BASE) / 0x20)
 #define SCI_MSTPCRB_BIT(base)	(1 << (31 - SCI_NUM(base)))
 
-/* æå®å¯è½ãªã¯ã­ãã¯ã½ã¼ã¹ */
+/* 指定可能なクロックソース */
 #define CLK_F1	UINT_C(0x00)
 #define CLK_F4	UINT_C(0x01)
@@ -92,5 +76,5 @@
 #define CLK_F64	UINT_C(0x03)
 
-/* ã·ãªã¢ã«ã¢ã¼ãã¬ã¸ã¹ã¿ï¼SMRï¼ */
+/* シリアルモードレジスタ（SMR） */
 #define CKS			UINT_C(0x03)
 #define MP			UINT_C(0x04)
@@ -103,5 +87,5 @@
 #define ASYNC_8BIT	UINT_C(0x40)
 
-/* ã·ãªã¢ã«ã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿ï¼SCRï¼ */
+/* シリアルコントロールレジスタ（SCR） */
 #define CKE			UINT_C(0x03)
 #define TEIE		UINT_C(0x04)
@@ -111,5 +95,5 @@
 #define TIE			UINT_C(0x80)
 
-/* ã·ãªã¢ã«ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼SSRï¼ */
+/* シリアルステータスレジスタ（SSR） */
 #define TEND		UINT_C(0x04)
 #define PER			UINT_C(0x08)
@@ -117,5 +101,5 @@
 #define ORER		UINT_C(0x20)
 
-/* ã¹ãã¼ãã«ã¼ãã¢ã¼ãã¬ã¸ã¹ã¿ï¼SCMRï¼ */
+/* スマートカードモードレジスタ（SCMR） */
 #define SMIF		UINT_C(0x01)
 #define SINV		UINT_C(0x04)
@@ -123,18 +107,18 @@
 #define BCP2		UINT_C(0x80)
 
-/* ã·ãªã¢ã«æ¡å¼µã¢ã¼ãã¬ã¸ã¹ã¿ï¼SEMRï¼ */
+/* シリアル拡張モードレジスタ（SEMR） */
 #define ACS0		UINT_C(0x01)
 #define ABCS		UINT_C(0x10)
 #define NFEN		UINT_C(0x20)
 
-/* I2C ã¢ã¼ãã¬ã¸ã¹ã¿1ï¼SIMR1ï¼ */
+/* I2C モードレジスタ1（SIMR1） */
 #define IICM		UINT_C(0x01)
 
-/* I2C ã¢ã¼ãã¬ã¸ã¹ã¿2ï¼SIMR2ï¼ */
+/* I2C モードレジスタ2（SIMR2） */
 #define IICINTM		UINT_C(0x01)
 #define IICCSC		UINT_C(0x02)
 #define IICACKT		UINT_C(0x20)
 
-/* I2C ã¢ã¼ãã¬ã¸ã¹ã¿3ï¼SIMR2ï¼ */
+/* I2C モードレジスタ3（SIMR2） */
 #define IICSTAREQ	UINT_C(0x01)
 #define IICRSTAREQ	UINT_C(0x02)
@@ -142,8 +126,8 @@
 #define IICSTIF		UINT_C(0x08)
 
-/* I2C ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼SISRï¼ */
+/* I2C ステータスレジスタ（SISR） */
 #define IICACKR		UINT_C(0x01)
 
-/* SPI ã¢ã¼ãã¬ã¸ã¹ã¿ï¼SPMRï¼ */
+/* SPI モードレジスタ（SPMR） */
 #define SSE			UINT_C(0x01)
 #define CTSE		UINT_C(0x02)
@@ -156,5 +140,5 @@
 
 /*
- *  SCIã¬ã¸ã¹ã¿ã®çªå°ã®å®ç¾©
+ *  SCIレジスタの番地の定義
  */
 #define SCI_SMR(base)		((uint8_t *)((intptr_t)base + 0x00U))
@@ -176,8 +160,8 @@
 
 /*
- *  ã³ã¼ã«ããã¯ã«ã¼ãã³ã®è­å¥çªå·
+ *  コールバックルーチンの識別番号
  */
-#define SIO_RDY_SND    (1U)        /* éä¿¡å¯è½ã³ã¼ã«ããã¯ */
-#define SIO_RDY_RCV    (2U)        /* åä¿¡éç¥ã³ã¼ã«ããã¯ */
+#define SIO_RDY_SND    (1U)        /* 送信可能コールバック */
+#define SIO_RDY_RCV    (2U)        /* 受信通知コールバック */
 
 #endif /* TOPPERS_MACRO_ONLY */
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/sectrx.inc
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/sectrx.inc	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/sectrx.inc	(revision 389)
@@ -6,47 +6,32 @@
 ;*  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
 ;* 
-;*  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-;*  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-;*  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-;*  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-;*      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-;*      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-;*  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-;*      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-;*      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-;*      ã¨ï¼
-;*    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-;*        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-;*        å ±åãããã¨ï¼
-;*  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-;*      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-;*      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-;*      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-;*      å
-è²¬ãããã¨ï¼
+;*  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+;*  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+;*  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+;*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+;*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+;*      スコード中に含まれていること．
+;*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+;*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+;*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+;*      の無保証規定を掲載すること．
+;*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+;*      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+;*      と．
+;*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+;*        作権表示，この利用条件および下記の無保証規定を掲載すること．
+;*    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+;*        報告すること．
+;*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+;*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+;*      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+;*      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+;*      免責すること．
 ;* 
-;*  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-;*  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-;*  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-;*  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-;*  ã®è²¬ä»»ãè² ããªãï¼
+;*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+;*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+;*  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+;*  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+;*  の責任を負わない．
 ;* 
 ;*  @(#) $Id$
@@ -54,16 +39,16 @@
 
 ;
-;  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã»ã¯ã·ã§ã³å®ç¾©ãã¡ã¤ã«(ã¹ã¿ã¼ã¿ã¼ã­ããç¨)
+;  ターゲットシステム依存セクション定義ファイル(スターターキット用)
 ;
 
 ;
-;  ã»ã¯ã·ã§ã³ã®å®ç¾©
+;  セクションの定義
 ;
-;  ã»ã¯ã·ã§ã³ã®ã¢ãã¬ã¹å®ç¾©ã¯HEWä¸ã®æé©åãªã³ã«ã®
-;  ãªãã·ã§ã³ã«ã¦å®æ½ãã.
+;  セクションのアドレス定義はHEW上の最適化リンカの
+;  オプションにて実施する.
 ;
 
 	;
-	;  åæå¤æããã¼ã¿é åã®ã»ã¯ã·ã§ã³
+	;  初期値有りデータ領域のセクション
 	;
 	;  00000000h - 00020000h
@@ -75,5 +60,5 @@
 
 	;
-	;  åæå¤ç¡ããã¼ã¿é åã®ã»ã¯ã·ã§ã³
+	;  初期値無しデータ領域のセクション
 	;
 	;  00000000h - 00020000h
@@ -88,11 +73,11 @@
 
 	;
-	;  ã«ã¼ãã«ã¹ã¿ãã¯é åã®ã»ã¯ã·ã§ã³
+	;  カーネルスタック領域のセクション
 	;
 	;  00000000h - 00020000h
 	;
-	;  ä»¥ä¸.blkbå½ä»¤ã§ç¢ºä¿ãã¦ããã«ã¼ãã«ã¹ã¿ãã¯é åã®ãµã¤ãºã
-	;  å¤æ´ããå ´åã¯, target_kernel_impl.hã®DEFAULT_ISTKSZã®å¤ã, åã
-	;  å¤ã«å¤æ´ãããã¨.
+	;  以下.blkb命令で確保しているカーネルスタック領域のサイズを
+	;  変更する場合は, target_kernel_impl.hのDEFAULT_ISTKSZの値を, 同じ
+	;  値に変更すること.
 	;
 ;	.section	SI, DATA, ALIGN = 4
@@ -104,5 +89,5 @@
 
 	;
-	;  å®æ°é åã®ã»ã¯ã·ã§ã³
+	;  定数領域のセクション
 	;
 	;  00100000h - 00107FFFh
@@ -113,5 +98,5 @@
 
 	;
-	;  åæå¤æããã¼ã¿é åã®åæå¤
+	;  初期値有りデータ領域の初期値
 	;
 	;  00100000h - 00107FFFh
@@ -122,5 +107,5 @@
 
 	;
-	;  å¯å¤ãã¯ã¿ãã¼ãã«é åã®ã»ã¯ã·ã§ã³
+	;  可変ベクタテーブル領域のセクション
 	;
 	;  00100000h - 00107FFFh
@@ -131,5 +116,5 @@
 
 	;
-	;  ãã­ã°ã©ã é åã®ã»ã¯ã·ã§ã³
+	;  プログラム領域のセクション
 	;
 	;  FFE80000h - FFFFFF7Fh
@@ -138,5 +123,5 @@
 
 	;
-	;  åºå®ãã¯ã¿ãã¼ãã«é åã®ã»ã¯ã·ã§ã³
+	;  固定ベクタテーブル領域のセクション
 	;
 	;  FFFFFF80h - FFFFFFFFh
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/start.S
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/start.S	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/start.S	(revision 389)
@@ -10,47 +10,32 @@
 ;*  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
 ;* 
-;*  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-;*  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-;*  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-;*  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-;*      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-;*      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-;*  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-;*      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-;*      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-;*      ã¨ï¼
-;*    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-;*        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-;*        å ±åãããã¨ï¼
-;*  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-;*      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-;*      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-;*      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-;*      å
-è²¬ãããã¨ï¼
+;*  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+;*  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+;*  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+;*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+;*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+;*      スコード中に含まれていること．
+;*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+;*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+;*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+;*      の無保証規定を掲載すること．
+;*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+;*      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+;*      と．
+;*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+;*        作権表示，この利用条件および下記の無保証規定を掲載すること．
+;*    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+;*        報告すること．
+;*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+;*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+;*      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+;*      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+;*      免責すること．
 ;* 
-;*  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-;*  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-;*  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-;*  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-;*  ã®è²¬ä»»ãè² ããªãï¼
+;*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+;*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+;*  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+;*  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+;*  の責任を負わない．
 ;* 
 ;*  @(#) $Id$
@@ -58,20 +43,20 @@
 
 #define TOPPERS_MACRO_ONLY
-#define UINT_C(val)			(val)		/* uint_tåã®å®æ°ãä½ããã¯ã­ */
-#define ULONG_C(val)		(val)		/* ulong_tåã®å®æ°ãä½ããã¯ã­ */
-#define CAST(type, val)		(val)		/* åã­ã£ã¹ããè¡ããã¯ã­ */
+#define UINT_C(val)			(val)		/* uint_t型の定数を作るマクロ */
+#define ULONG_C(val)		(val)		/* ulong_t型の定数を作るマクロ */
+#define CAST(type, val)		(val)		/* 型キャストを行うマクロ */
 #include "kernel_impl.h"
 #include "sectrx.inc"
 
 	;
-	;  ã¡ã¢ãªãããã®å®ç¾©(ã¿ã¼ã²ããä¾å­é¨)
+	;  メモリマップの定義(ターゲット依存部)
 	;
 
-.equ	DFLRE,				007FC440H		; DFLREã¬ã¸ã¹ã¿
+.equ	DFLRE,				007FC440H		; DFLREレジスタ
 
 .equ	DB_BLOCK_ENABLE,	02D0FH
 
 ;
-;  åæåã«ã¼ãã³
+;  初期化ルーチン
 ;
 	.section	P, CODE
@@ -86,18 +71,14 @@
 _start:
 	;
-	;  é»æºæå
-¥å¾ã¯ã¬ãã«0, å
-¨å²è¾¼ã¿ç¦æ­¢ç¶æ
-ã§ãã.
-	;  ã«ã¼ãã«ã§ã¯é«éå²è¾¼ã¿ãä½¿ç¨ããªããããBPC, BPSWåã³FINTV
-	;  ã®åæåã¯è¡ããªã.
+	;  電源投入後はレベル0, 全割込み禁止状態である.
+	;  カーネルでは高速割込みを使用しないため、BPC, BPSW及びFINTV
+	;  の初期化は行わない.
 	;
 
 	;
-	;  å
-èµROMï¼ãã¼ã¿ãã©ãã·ã¥ï¼é åã®è¨­å®
+	;  内蔵ROM（データフラッシュ）領域の設定
 	;
-	;  ãªã»ããå¾, ãã¼ã¿ãã©ãã·ã¥é åã¯èª­ã¿åºãç¦æ­¢ã¨ãªã£ã¦ãã
-	;  ãã, èª­ã¿åºãè¨±å¯ã«è¨­å®ãã.
+	;  リセット後, データフラッシュ領域は読み出し禁止となっている
+	;  ため, 読み出し許可に設定する.
 	;
 	mov.l	#DFLRE, r5
@@ -105,21 +86,21 @@
 	
 	;
-	;  ã¹ã¿ãã¯ãã¤ã³ã¿ã®è¨­å®
+	;  スタックポインタの設定
 	;
-	;  ã¦ã¼ã¶ã«ã¦éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã¹ã¿ãã¯é åãç¨æããå ´å,
-	;  ã¦ã¼ã¶é åãè¨­å®ãã.
-	;  kernel_cfg.cã«ã¦"_kernel_istkpt"ã®å¤ãæ±ºå®ãã.
+	;  ユーザにて非タスクコンテキスト用スタック領域を用意した場合,
+	;  ユーザ領域を設定する.
+	;  kernel_cfg.cにて"_kernel_istkpt"の値を決定する.
 	;
 	mov.l	#__kernel_istkpt, r5
-	mov.l	[r5], r0			; éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã¹ã¿ãã¯é åãè¨­å®
+	mov.l	[r5], r0			; 非タスクコンテキスト用スタック領域を設定
 
 	;
-	;  å¯å¤ãã¯ã¿ãã¼ãã«ã®è¨­å®
+	;  可変ベクタテーブルの設定
 	;
-	; mvtc	#VVECTOR_TOP, intb	; ãã¯ã¿ãã¼ãã«ã®è¨­å®
-	mvtc	#_vvector_table, intb	; ãã¯ã¿ãã¼ãã«ã®è¨­å®
+	; mvtc	#VVECTOR_TOP, intb	; ベクタテーブルの設定
+	mvtc	#_vvector_table, intb	; ベクタテーブルの設定
 
 	;
-	;  ãã¼ãã¦ã§ã¢åºæã®åæåã«ã¼ãã³ã®å¼åºã
+	;  ハードウェア固有の初期化ルーチンの呼出し
 	;
 	mov.l	#_hardware_init_hook, r5
@@ -129,11 +110,10 @@
 
 	;
-	;  åæå¤ããå¤æ°é åã®åæå
+	;  初期値あり変数領域の初期化
 	;
 init_D:
 	mov.l	#(_edata - _data), r3
 	cmp		#0, r3
-	beq.b	clear_B						; ãµã¤ãº0ãªãåæåå¿
-è¦ãªã
+	beq.b	clear_B						; サイズ0なら初期化必要なし
 	mov.l	#(_data), r1
 	mov.l	#(_mdata), r2
@@ -141,5 +121,5 @@
 
 	;
-	;  åæå¤ãªãå¤æ°é åã®åæå
+	;  初期値なし変数領域の初期化
 	;
 clear_B:
@@ -150,9 +130,8 @@
 
 	;
-	;  software_init_hook ãå¼åºãï¼0 ã§ãªãå ´åï¼
+	;  software_init_hook を呼出し（0 でない場合）
 	;
-	;  ã½ããã¦ã§ã¢ç°å¢ï¼ç¹ã«ã©ã¤ãã©ãªï¼ã«ä¾å­ãã¦å¿
-è¦ãªåæåå¦ç
-	;  ãããå ´åã¯ï¼software_init_hook ã¨ããé¢æ°ãç¨æããã°ãã.
+	;  ソフトウェア環境（特にライブラリ）に依存して必要な初期化処理
+	;  がある場合は，software_init_hook という関数を用意すればよい.
 	;
 	mov.l	#_software_init_hook, r5
@@ -162,5 +141,5 @@
 
 	;
-	;  ã«ã¼ãã«ã¹ã¿ã¼ã
+	;  カーネルスタート
 	;
 kernel_link:
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.c	(revision 389)
@@ -8,47 +8,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,6 +41,5 @@
 
 /*
- *		FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©ã¤ã
+ *		FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
  */
 
@@ -66,9 +50,9 @@
 
 /*
- *  ããªããã£ããªéä¿¡ï¼åä¿¡é¢æ°
- */
-
-/*
- *  åä¿¡ãããã¡ã«æå­ããããï¼
+ *  プリミティブな送信／受信関数
+ */
+
+/*
+ *  受信バッファに文字があるか？
  */
 Inline bool_t
@@ -76,9 +60,9 @@
 {
 	/*
-	 *  åä¿¡ãã©ã°ãONã®ã¨ãã®ã¿åä¿¡ãããã¡ããæå­ãåå¾ãã.
-	 *  ããã¯, ãã¼ãªã³ã°åä¿¡ã«å¯¾å¿ããããã§ãã.
-	 *  ããã, RX600ã·ãªã¼ãºã§ã¯åä¿¡ãã©ã°ããªããã¨, ã·ã¹ãã ãµã¼ãã¹
-	 *  ã§ã¯åä¿¡å²è¾¼ã¿ã®ä¸­ãããããã¼ã¿ãåä¿¡ãã«æ¥ãªããã¨ãã, å¸¸ã«
-	 *  åä¿¡ãããã¡ããæå­ãåå¾ãã.
+	 *  受信フラグがONのときのみ受信バッファから文字を取得する.
+	 *  これは, ポーリング受信に対応するためである.
+	 *  しかし, RX600シリーズでは受信フラグがないこと, システムサービス
+	 *  では受信割込みの中からしかデータを受信しに来ないことから, 常に
+	 *  受信バッファから文字を取得する.
 	 */
 	return true;
@@ -86,5 +70,5 @@
 
 /*
- *  éä¿¡ãããã¡ã«ç©ºãããããï¼
+ *  送信バッファに空きがあるか？
  */
 Inline bool_t
@@ -98,5 +82,5 @@
 
 /*
- *  éä¿¡ããæå­ã®æ¸è¾¼ã¿
+ *  送信する文字の書込み
  */
 Inline void
@@ -107,5 +91,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã®ãªã¼ãã³
+ *  シリアルI/Oポートのオープン
  */
 void
@@ -118,5 +102,5 @@
 	if (VAR_initialized) {
 		/*
-		 *  æ¢ã«åæåãã¦ããå ´åã¯ãäºéã«åæåããªãï¼
+		 *  既に初期化している場合は、二重に初期化しない．
 		 */
 		return;
@@ -139,42 +123,40 @@
 
 	/*
-	 *  SCIãã©ã¤ãã®åæåã«ã¼ãã³
-	 */
-
-	/*
-	 *  å²ãè¾¼ã¿è¦æ±å
-ã¬ã¸ã¹ã¿ã®è¨­å®(ISELRi)
+	 *  SCIドライバの初期化ルーチン
+	 */
+
+	/*
+	 *  割り込み要求先レジスタの設定(ISELRi)
 	 *
-	 *  ãªã»ããå¤ã¨åãå¤ãè¨­å®ãããã¨ã«ãªããã,
-	 *  å¦çã¯çç¥ãã.
-	 */
-
-	/*
-	 *  ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 *  リセット値と同じ値を設定することになるため,
+	 *  処理は省略する.
+	 */
+
+	/*
+	 *  モジュールストップ機能の設定
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRB_ADDR,
 		sil_rew_mem(SYSTEM_MSTPCRB_ADDR) & ~SCI_MSTPCRB_BIT(ATTR_baseAddress));
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* 書込み禁止 */
+
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(ATTR_baseAddress), 0x00U);
 
-	/* ã¯ã­ãã¯é¸æããã(SMR.CKS[1:0]ããããè¨­å®) */
+	/* クロック選択ビット(SMR.CKS[1:0]ビットを設定) */
 	sil_wrb_mem(SCI_SMR(ATTR_baseAddress),
 		(sil_reb_mem(SCI_SMR(ATTR_baseAddress)) & ~0x03) | clk);
 
-	/* SMRã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããè¨­å®) */
+	/* SMRに送信／ 受信フォーマットを設定) */
 	sil_wrb_mem(SCI_SMR(ATTR_baseAddress),
 			sil_reb_mem(SCI_SMR(ATTR_baseAddress)) & (~SCI_SMR_FLG_ENABLE));
 
-	/* ãããã¬ã¼ããè¨­å® */
+	/* ビットレートを設定 */
 	sil_wrb_mem(SCI_BRR(ATTR_baseAddress), brr);
 
-	/* ãããæé(åºæ¬ã¯ã­ãã¯16ãµã¤ã¯ã«ã®æéã1ãããæéã¨ãªã) */
+	/* ビット期間(基本クロック16サイクルの期間が1ビット期間となる) */
 	for(i = 0; i < 16; i++) { }
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(ATTR_baseAddress),
 			(sil_reb_mem(SCI_SCR(ATTR_baseAddress)) | SCI_SCR_FLG_ENABLE));
@@ -184,5 +166,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã®ã¯ã­ã¼ãº
+ *  シリアルI/Oポートのクローズ
  */
 void
@@ -192,5 +174,5 @@
 
 	/*
-	 *  UARTåæ­¢
+	 *  UART停止
 	 */
 	sil_wrb_mem(SCI_SCR(ATTR_baseAddress), 0x00U);
@@ -198,5 +180,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã¸ã®æå­éä¿¡
+ *  シリアルI/Oポートへの文字送信
  */
 bool_t
@@ -213,5 +195,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãããã®æå­åä¿¡
+ *  シリアルI/Oポートからの文字受信
  */
 int_t
@@ -222,5 +204,5 @@
 	int_t c = -1;
 
-	/* ãªã¼ãã©ã³ã¨ã©ã¼ãã§ãã¯ */ /* ZZZ */
+	/* オーバランエラーチェック */ /* ZZZ */
 	reg = sil_reb_mem(SCI_SSR(ATTR_baseAddress));
 	while((reg & SCI_SSR_ORER_BIT) != 0) {
@@ -230,9 +212,9 @@
 
 	/*
-	 *  åä¿¡ãã©ã°ãONã®ã¨ãã®ã¿åä¿¡ãããã¡ããæå­ãåå¾ãã.
-	 *  ããã¯, ãã¼ãªã³ã°åä¿¡ã«å¯¾å¿ããããã§ãã.
-	 *  ããã, RX600ã·ãªã¼ãºã§ã¯åä¿¡ãã©ã°ããªããã¨, ã·ã¹ãã ãµã¼ãã¹
-	 *  ã§ã¯åä¿¡å²è¾¼ã¿ã®ä¸­ãããããã¼ã¿ãåä¿¡ãã«æ¥ãªããã¨ãã, å¸¸ã«
-	 *  åä¿¡ãããã¡ããæå­ãåå¾ãã.
+	 *  受信フラグがONのときのみ受信バッファから文字を取得する.
+	 *  これは, ポーリング受信に対応するためである.
+	 *  しかし, RX600シリーズでは受信フラグがないこと, システムサービス
+	 *  では受信割込みの中からしかデータを受信しに来ないことから, 常に
+	 *  受信バッファから文字を取得する.
 	 */
 	c = (int)(sil_reb_mem(SCI_RDR(ATTR_baseAddress)));
@@ -242,5 +224,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  シリアルI/Oポートからのコールバックの許可
  */
 void
@@ -265,5 +247,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  シリアルI/Oポートからのコールバックの禁止
  */
 void
@@ -288,5 +270,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã«å¯¾ããåä¿¡å²è¾¼ã¿å¦ç
+ *  シリアルI/Oポートに対する受信割込み処理
  */
 void
@@ -297,5 +279,5 @@
 	if (scif_getready(p_cellcb)) {
 		/*
-		 *  åä¿¡éç¥ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãï¼
+		 *  受信通知コールバックルーチンを呼び出す．
 		 */
 		ciSIOCBR_readyReceive();
@@ -304,5 +286,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã«å¯¾ããéä¿¡å²è¾¼ã¿å¦ç
+ *  シリアルI/Oポートに対する送信割込み処理
  */
 void
@@ -313,5 +295,5 @@
 	if (scif_putready(p_cellcb)) {
 		/*
-		 *  éä¿¡å¯è½ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãï¼
+		 *  送信可能コールバックルーチンを呼び出す．
 		 */
 		ciSIOCBR_readySend();
Index: azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/rx630_gcc/tSCIF.cdl	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,20 +41,17 @@
 
 /*
- *		FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©
- *		ã¤ãã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドラ
+ *		イバのコンポーネント記述
  */
 
 /*
- *  FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ã«é¢ããå®ç¾©ã®ã¤ã³
- *  ãã¼ã
+ *  FIFO内蔵シリアルコミュニケーションインタフェースに関する定義のイン
+ *  ポート
  */
 import_C("scif.h");
 
 /*
- *  FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©ã¤ã
- *  ã®ã»ã«ã¿ã¤ã
+ *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
+ *  のセルタイプ
  */
 celltype tSCIF {
@@ -81,9 +63,9 @@
 
 	attr {
-		uintptr_t	baseAddress;	/* SCIFã¬ã¸ã¹ã¿ã®ãã¼ã¹ã¢ãã¬ã¹ */
-		uint32_t	baudRate;		/* ãã¼ã¬ã¼ãã®è¨­å®å¤ */
+		uintptr_t	baseAddress;	/* SCIFレジスタのベースアドレス */
+		uint32_t	baudRate;		/* ボーレートの設定値 */
 	};
 	var {
-		bool_t		initialized = false;	/* åæåæ¸ã¿ */
+		bool_t		initialized = false;	/* 初期化済み */
 	};
 };
Index: azure_iot_hub/trunk/asp3_dcre/arch/tracelog/tTraceLog.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/tracelog/tTraceLog.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/tracelog/tTraceLog.c	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		ãã¬ã¼ã¹ã­ã°æ©è½
+ *		トレースログ機能
  */
 
@@ -68,9 +53,9 @@
 
 /*
- *  ãã¬ã¼ã¹æå»ã®åãåºã
+ *  トレース時刻の取り出し
  *
- *  ããã©ã«ãã§ã¯ï¼ã­ã°æå»ã¨ãã¦ï¼é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ãç¨ãã¦
- *  ããï¼ã¿ã¼ã²ããä¾å­ã§å¤æ´ããå ´åã«ã¯ï¼SYSLOG_GET_LOGTIMã«ï¼ã­ã°æ
- *  å»ãåãåºããã¯ã­ãå®ç¾©ããï¼
+ *  デフォルトでは，ログ時刻として，高分解能タイマのカウント値を用いて
+ *  いる．ターゲット依存で変更する場合には，SYSLOG_GET_LOGTIMに，ログ時
+ *  刻を取り出すマクロを定義する．
  */
 #ifndef SYSLOG_GET_LOGTIM
@@ -80,5 +65,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®éå§
+ *  トレースログの開始
  */
 ER
@@ -96,5 +81,5 @@
 
 /* 
- *  ãã¬ã¼ã¹ã­ã°ã®æ¸è¾¼ã¿
+ *  トレースログの書込み
  */
 ER
@@ -107,10 +92,10 @@
 
 		/*
-		 *  ãã¬ã¼ã¹æå»ã®è¨­å®
+		 *  トレース時刻の設定
 		 */
 		SYSLOG_GET_LOGTIM(&(((SYSLOG *) p_trace)->logtim));
 
 		/*
-		 *  ãã¬ã¼ã¹ãããã¡ã«è¨é²
+		 *  トレースバッファに記録
 		 */
 		VAR_logBuffer[VAR_tail] = *p_trace;
@@ -136,5 +121,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®èª­åºã
+ *  トレースログの読出し
  */
 ER
@@ -147,5 +132,5 @@
 
 	/*
-	 *  ãã¬ã¼ã¹ã­ã°ãããã¡ããã®ååºã
+	 *  トレースログバッファからの取出し
 	 */
 	if (VAR_count > 0U) {
@@ -167,6 +152,6 @@
 
 /*
- *  ã¢ã»ã³ããªè¨èªã§è¨è¿°ãããã³ã¼ããããã¬ã¼ã¹ã­ã°ãåºåããããã®é¢
- *  æ°
+ *  アセンブリ言語で記述されるコードからトレースログを出力するための関
+ *  数
  */
 
@@ -208,6 +193,5 @@
 
 /* 
- *  ã«ã¼ãã«æ
-å ±ã®ååºã
+ *  カーネル情報の取出し
  */
 static intptr_t
@@ -257,5 +241,5 @@
 
 /* 
- *  ãã¬ã¼ã¹ã­ã°ã®è¡¨ç¤º
+ *  トレースログの表示
  */
 static void
@@ -321,5 +305,5 @@
 
 /*
- *  ä½ã¬ãã«åºåã®å¼åºãé¢æ°
+ *  低レベル出力の呼出し関数
  */
 static void
@@ -330,5 +314,5 @@
 
 /* 
- *  ãã¬ã¼ã¹ã­ã°ã®ãã³ã
+ *  トレースログのダンプ
  */
 void
@@ -343,5 +327,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®ãã³ãï¼åãå£é¢æ°ï¼
+ *  トレースログのダンプ（受け口関数）
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/arch/tracelog/tTraceLog.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/tracelog/tTraceLog.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/tracelog/tTraceLog.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,33 +42,33 @@
 
 /*
- *		ãã¬ã¼ã¹ã­ã°æ©è½ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		トレースログ機能のコンポーネント記述ファイル
  */
 
 /*
- *  ãã¬ã¼ã¹ã­ã°åºåã«é¢ããå®ç¾©
+ *  トレースログ出力に関する定義
  */
 import_C("arch/tracelog/trace_log.h");
 
 /*
- *  ãã¬ã¼ã¹ã­ã°æ©è½ã®ã·ã°ããã£
+ *  トレースログ機能のシグニチャ
  */
 signature sTraceLog {
 	/*
-	 *  ãã¬ã¼ã¹ã­ã°ã®éå§
+	 *  トレースログの開始
 	 */
 	ER		start([in] MODE mode);
 
 	/*
-	 *  ãã¬ã¼ã¹ã­ã°ã®æ¸è¾¼ã¿
+	 *  トレースログの書込み
 	 */
 	ER		write([in] const TRACE *p_trace);
 
 	/*
-	 *  ãã¬ã¼ã¹ã­ã°ã®èª­åºã
+	 *  トレースログの読出し
 	 */
 	ER		read([out] TRACE *p_trace);
 
 	/*
-	 *  ãã¬ã¼ã¹ã­ã°ã®ãã³ã
+	 *  トレースログのダンプ
 	 */
 	void	dump(void);
@@ -91,24 +76,23 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°æ©è½ã®ã»ã«ã¿ã¤ã
+ *  トレースログ機能のセルタイプ
  */
 [singleton, active]
 celltype tTraceLog {
 	entry	sTraceLog		eTraceLog;
-	entry	sRoutineBody	eDump;		/* çµäºå¦çã«ã¼ãã³ã¨ã®æ¥ç¶ */
-	call	sPutLog			cPutLog;	/* ä½ã¬ãã«åºåã¨ã®æ¥ç¶ */
+	entry	sRoutineBody	eDump;		/* 終了処理ルーチンとの接続 */
+	call	sPutLog			cPutLog;	/* 低レベル出力との接続 */
 
 	attr {
-		uint_t	logBufferSize;			/* ã­ã°ãããã¡ãµã¤ãº */
+		uint_t	logBufferSize;			/* ログバッファサイズ */
 		MODE	initialMode = C_EXP("TRACE_STOP");
-										/* åæåå¾ã®ã¢ã¼ã */
+										/* 初期化後のモード */
 	};
 	var {
-		[size_is(logBufferSize)] TRACE	*logBuffer;	/* ã­ã°ãããã¡ */
-		uint_t	count = 0;				/* ã­ã°ãããã¡ä¸­ã®ã­ã°ã®æ° */
-		uint_t	head = 0;				/* å
-é ­ã®ã­ã°ã®æ ¼ç´ä½ç½® */
-		uint_t	tail = 0;				/* æ¬¡ã®ã­ã°ã®æ ¼ç´ä½ç½® */
-		MODE	mode = initialMode;		/* ãã¬ã¼ã¹ã¢ã¼ã */
+		[size_is(logBufferSize)] TRACE	*logBuffer;	/* ログバッファ */
+		uint_t	count = 0;				/* ログバッファ中のログの数 */
+		uint_t	head = 0;				/* 先頭のログの格納位置 */
+		uint_t	tail = 0;				/* 次のログの格納位置 */
+		MODE	mode = initialMode;		/* トレースモード */
 	};
 };
Index: azure_iot_hub/trunk/asp3_dcre/arch/tracelog/trace_log.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/arch/tracelog/trace_log.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/arch/tracelog/trace_log.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,10 +41,10 @@
 
 /*
- *		ãã¬ã¼ã¹ã­ã°ã«é¢ããè¨­å®
- *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼target_kernel_impl.hããã³
- *  target_syssvc.hã®ã¿ããã¤ã³ã¯ã«ã¼ããããï¼ã¾ãï¼ãã¬ã¼ã¹ã­ã°æ©è½ã®
- *  åæåãè¨é²ã®éå§ï¼åæ­¢ï¼ãã¬ã¼ã¹ã­ã°ã®ãã³ããè¡ããã­ã°ã©ã ãã
- *  ã¤ã³ã¯ã«ã¼ããããã¨ãæ³å®ãã¦ããï¼
+ *		トレースログに関する設定
+ *
+ *  このインクルードファイルは，target_kernel_impl.hおよび
+ *  target_syssvc.hのみからインクルードされる．また，トレースログ機能の
+ *  初期化や記録の開始／停止，トレースログのダンプを行うプログラムから
+ *  インクルードすることを想定している．
  */
 
@@ -68,8 +53,7 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®ãã¼ã¿æ§é 
- *
- *  ã·ã¹ãã ã­ã°æ©è½ã®ã­ã°æ
-å ±ã®ãã¼ã¿æ§é ã¨åããã®ãç¨ããï¼
+ *  トレースログのデータ構造
+ *
+ *  システムログ機能のログ情報のデータ構造と同じものを用いる．
  */
 #ifndef TOPPERS_MACRO_ONLY
@@ -81,19 +65,19 @@
 
 /*
- *  ãã¬ã¼ã¹ã¢ã¼ãã®å®ç¾©
- */
-#define TRACE_STOP			UINT_C(0x00)	/* ãã¬ã¼ã¹åæ­¢ */
-#define TRACE_RINGBUF		UINT_C(0x01)	/* ãªã³ã°ãããã¡ã¢ã¼ã */
-#define TRACE_AUTOSTOP		UINT_C(0x02)	/* èªååæ­¢ã¢ã¼ã */
-#define TRACE_CLEAR			UINT_C(0x04)	/* ãã¬ã¼ã¹ã­ã°ã®ã¯ãªã¢ */
+ *  トレースモードの定義
+ */
+#define TRACE_STOP			UINT_C(0x00)	/* トレース停止 */
+#define TRACE_RINGBUF		UINT_C(0x01)	/* リングバッファモード */
+#define TRACE_AUTOSTOP		UINT_C(0x02)	/* 自動停止モード */
+#define TRACE_CLEAR			UINT_C(0x04)	/* トレースログのクリア */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  TECSã§è¨è¿°ããããã¹ããã­ã°ã©ã ç¨ã®ãµã¼ãã¹ãç´æ¥å¼ã³åºãããã®å®ç¾©
- *
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSã§è¨è¿°ããããã¬ã¼ã¹ã­ã°
- *  æ©è½ãå¼ã³åºãããã«ã¯ï¼ã¢ããã¿ãç¨ããã®ãæ­£å½ãªæ¹æ³ã§ãããï¼ã
- *  ã¬ã¼ã¹ã­ã°æ©è½ãã·ã³ã°ã«ãã³ã§ãããã¨ãå©ç¨ãã¦ç´æ¥å¼ã³åºãï¼
+ *  TECSで記述されたテストプログラム用のサービスを直接呼び出すための定義
+ *
+ *  C言語で記述されたアプリケーションから，TECSで記述されたトレースログ
+ *  機能を呼び出すためには，アダプタを用いるのが正当な方法であるが，ト
+ *  レースログ機能がシングルトンであることを利用して直接呼び出す．
  */
 extern ER	tTraceLog_eTraceLog_start(MODE mode);
@@ -103,12 +87,12 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®éå§
- *
- *  ãã¬ã¼ã¹ã­ã°ã®è¨é²ãéå§ï¼åæ­¢ããï¼å¼æ°ã«ããæ¬¡ã®åä½ãè¡ãï¼
- *
- *  TRACE_STOPï¼ãã¬ã¼ã¹ãåæ­¢ï¼
- *  TRACE_RINGBUFï¼ãªã³ã°ãããã¡ã¢ã¼ãã§ãã¬ã¼ã¹ãéå§ï¼
- *  TRACE_AUTOSTOPï¼èªååæ­¢ã¢ã¼ãã§ãã¬ã¼ã¹ãéå§ï¼
- *  TRACE_CLEARï¼ãã¬ã¼ã¹ã­ã°ãã¯ãªã¢ï¼
+ *  トレースログの開始
+ *
+ *  トレースログの記録を開始／停止する．引数により次の動作を行う．
+ *
+ *  TRACE_STOP：トレースを停止．
+ *  TRACE_RINGBUF：リングバッファモードでトレースを開始．
+ *  TRACE_AUTOSTOP：自動停止モードでトレースを開始．
+ *  TRACE_CLEAR：トレースログをクリア．
  */
 Inline ER
@@ -119,5 +103,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®æ¸è¾¼ã¿
+ *  トレースログの書込み
  */
 Inline ER
@@ -128,5 +112,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã®èª­åºã
+ *  トレースログの読出し
  */
 Inline ER
@@ -137,5 +121,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãåºåããããã®ã©ã¤ãã©ãªé¢æ°
+ *  トレースログを出力するためのライブラリ関数
  */
 
@@ -183,5 +167,5 @@
 														
 /*
- *  ãã¬ã¼ã¹ã­ã°ãåºåããããã®ãã¯ã­
+ *  トレースログを出力するためのマクロ
  */
 
@@ -200,11 +184,10 @@
 
 /* 
- *  ãã¬ã¼ã¹ã­ã°ã®ãã³ã
- *
- *  ãã¬ã¼ã¹ã­ã°ããã³ãããï¼çµäºå¦çã«ã¼ãã³ã¨ãã¦ç»é²ãããã¨ãæ³å®
- *  ãã¦ããï¼å¼æ°ã¨ãã¦ï¼ãã³ãå
-ã¨ãªãæå­åºåé¢æ°ã¸ã®ãã¤ã³ã¿ãæ¸¡ãï¼
- *  ã¿ã¼ã²ããä¾å­ã®ä½ã¬ãã«æå­åºåãå©ç¨ããå ´åã«ã¯ï¼target_putcãæ¸¡
- *  ãï¼
+ *  トレースログのダンプ
+ *
+ *  トレースログをダンプする．終了処理ルーチンとして登録することも想定
+ *  している．引数として，ダンプ先となる文字出力関数へのポインタを渡す．
+ *  ターゲット依存の低レベル文字出力を利用する場合には，target_putcを渡
+ *  す．
  */
 Inline void
@@ -217,5 +200,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°æ¹æ³ã®è¨­å®
+ *  トレースログ方法の設定
  */
 #define LOG_TSKSTAT(p_tcb)		trace_2(LOG_TYPE_TSKSTAT, p_tcb, p_tcb->tstat)
Index: azure_iot_hub/trunk/asp3_dcre/cfg/GenFile.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/cfg/GenFile.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/cfg/GenFile.rb	(revision 389)
@@ -8,47 +8,32 @@
 #  Copyright (C) 2016 by APTJ Co., Ltd., JAPAN
 #
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 #
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 #
 #  $Id$
@@ -56,12 +41,11 @@
 
 #
-#		ãã¡ã¤ã«ä½æã¯ã©ã¹
+#		ファイル作成クラス
 #
 
 #
-# ãã¡ã¤ã«ã«æ¸ããã¨ããå
-å®¹ãå¤æ°ã«èç©ãï¼ãã­ã°ã©ã ã®çµäºæï¼output
-# ã¡ã½ãããå¼ã°ããæï¼ã«ãã¡ã¤ã«ã«åºåããï¼æ¢ã«ãã¡ã¤ã«ãå­å¨ãï¼å·®
-# åããªãå ´åã¯åºåããªãï¼ã¿ã¤ã ã¹ã¿ã³ããæ´æ°ããªãï¼ï¼
+# ファイルに書こうとした内容を変数に蓄積し，プログラムの終了時（output
+# メソッドが呼ばれた時）にファイルに出力する．既にファイルが存在し，差
+# 分がない場合は出力しない（タイムスタンプを更新しない）．
 #
 class GenFile
@@ -75,20 +59,20 @@
   end
 
-  # ãã¡ã¤ã«ãã¼ã¿ã®æ«å°¾ã«æå­åãè¿½å ãã
+  # ファイルデータの末尾に文字列を追加する
   def append(code = "")
     @@fileDataHash[@selfFileName] << code
   end
 
-  # ãã¡ã¤ã«ãã¼ã¿ã«1è¡è¿½å ãã
+  # ファイルデータに1行追加する
   def add(code = "")
     @@fileDataHash[@selfFileName] << code << "\n"
   end
 
-  # ãã¡ã¤ã«ãã¼ã¿ã«1è¡è¿½å ãã(æ¹è¡2å)
+  # ファイルデータに1行追加する(改行2回)
   def add2(code = "")
     add(code + "\n")
   end
 
-  # ã³ã¡ã³ãããããè¿½å ãã
+  # コメントヘッダを追加する
   def comment_header(comment)
     add("/*")
@@ -99,15 +83,14 @@
   end
 
-  # ãã¡ã¤ã«ãã¼ã¿ãè¡¨ç¤ºãã
+  # ファイルデータを表示する
   def print()
     puts(@@fileDataHash[@selfFileName])
   end
 
-  # å
-¨ãã¡ã¤ã«ãåºåãã
+  # 全ファイルを出力する
   def self.output()
     @@fileDataHash.each do |fileName, fileData|
-      # æ¢ã«ãã¡ã¤ã«ãå­å¨ãï¼å·®åããªãå ´åã¯åºåããªã
-      #ï¼ã¿ã¤ã ã¹ã¿ã³ããæ´æ°ããªãï¼
+      # 既にファイルが存在し，差分がない場合は出力しない
+      #（タイムスタンプを更新しない）
       if File.exist?(fileName)
         if fileData == File.read(fileName)
Index: azure_iot_hub/trunk/asp3_dcre/cfg/MANIFEST
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/cfg/MANIFEST	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/cfg/MANIFEST	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/cfg/SRecord.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/cfg/SRecord.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/cfg/SRecord.rb	(revision 389)
@@ -7,47 +7,32 @@
 #  Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
 #
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 #
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 #
 #  $Id$
@@ -55,15 +40,14 @@
 
 #
-#		Sã¬ã³ã¼ããã¡ã¤ã«å¦çã¯ã©ã¹
+#		Sレコードファイル処理クラス
 #
 
 #
-# Sã¬ã³ã¼ããã¡ã¤ã«ãå¤æ°ã«èª­ã¿è¾¼ã¿ï¼è¦æ±ãããçªå°ã®ãã¼ã¿ãè¿ãï¼
+# Sレコードファイルを変数に読み込み，要求された番地のデータを返す．
 #
-# @sRecDataã¯ï¼å
-é ­çªå°ãã­ã¼ã¨ãï¼ããããã®ãã¼ã¿ï¼ãã­ãµãã³ãå½¢å¼ï¼
-# ãå¤ã¨ãã­ãã¯ãæ ¼ç´ãããããã·ã¥ã§ããï¼é£ç¶ãããã­ãã¯ã¯ï¼1ã¤ã®ã
-# ã­ãã¯ã«ã¾ã¨ãã¦æ ¼ç´ãããã®ã¨ããï¼ããããªãã¨ï¼ãã¼ã¿ã®ååºãããµã¼
-# ããé¢åã«ãªãï¼ï¼
+# @sRecDataは，先頭番地をキーとし，そこからのデータ（ヘキサダンプ形式）
+# を値とブロックが格納されたハッシュである．連続するブロックは，1つのブ
+# ロックにまとめて格納するものとする（そうしないと，データの取出しやサー
+# チが面倒になる）．
 #
 class SRecord
@@ -74,32 +58,32 @@
       prevData = ""
       file.each do |line|
-        # ãã¼ã¿ã¬ã³ã¼ãã«ããåå²
+        # データレコードにより分岐
         case line.slice(0, 2)
         when "S1"
-          # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[2byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼
+          # データ長（アドレス分[2byte]+チェックサム分1byteを減算）
           length = line.slice(2, 2).hex - 2 - 1
 
-          # ã¢ãã¬ã¹ï¼4æå­=2byteï¼
+          # アドレス（4文字=2byte）
           address = line.slice(4, 4).hex
 
-          # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æå­åã§åã£ã¦ããï¼
+          # データ（この時点では文字列で取っておく）
           data = line.slice(8, length * 2)
         when "S2"
-          # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[3byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼
+          # データ長（アドレス分[3byte]+チェックサム分1byteを減算）
           length = line.slice(2, 2).hex - 3 - 1
 
-          # ã¢ãã¬ã¹ï¼6æå­=3byteï¼
+          # アドレス（6文字=3byte）
           address = line.slice(4, 6).hex
 
-          # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æå­åã§åã£ã¦ããï¼
+          # データ（この時点では文字列で取っておく）
           data = line.slice(10, length * 2)
         when "S3"
-          # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[4byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼
+          # データ長（アドレス分[4byte]+チェックサム分1byteを減算）
           length = line.slice(2, 2).hex - 4 - 1
 
-          # ã¢ãã¬ã¹ï¼8æå­=4byteï¼
+          # アドレス（8文字=4byte）
           address = line.slice(4, 8).hex
 
-          # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æå­åã§åã£ã¦ããï¼
+          # データ（この時点では文字列で取っておく）
           data = line.slice(12, length * 2)
         else
@@ -108,5 +92,5 @@
 
         if !address.nil?
-          # ãã¼ã¿ãæ ¼ç´ãã
+          # データを格納する
           if address == prevAddress + prevData.size / 2
             prevData << data
@@ -122,5 +106,5 @@
   end
 
-  # ãã¼ã¿åå¾
+  # データ取得
   def get_data(address, size)
     endAddress = address + size
@@ -134,5 +118,5 @@
   end
 
-  # ãã¼ã¿æ¸è¾¼ã¿
+  # データ書込み
   def set_data(address, data)
     endAddress = address + data.size / 2
@@ -141,15 +125,13 @@
 
       if nEndBlock < address || endAddress < block
-        # éãªãããªã
+        # 重なりがない
       elsif address < block
-        # æ°è¦ãã¼ã¿ã®æ¹ãå
-é ­çªå°ãå°ãã
-        # ããã§ã¯ endAddress >= block ãæç«ãã¦ãã
+        # 新規データの方が先頭番地が小さい
+        # ここでは endAddress >= block が成立している
         offset = (endAddress - block) * 2
         data << blockData[offset..-1]
         @sRecData.delete(block)
       else
-        # ç»é²æ¸ã¿ãã¼ã¿ã®æ¹ãå
-é ­çªå°ãå°ãããåã
+        # 登録済みデータの方が先頭番地が小さいか同じ
         offset = (address - block) * 2
         address = block
@@ -162,5 +144,5 @@
   end
 
-  # å¤ã¨ãã¦ã®ãã¼ã¿åå¾
+  # 値としてのデータ取得
   def get_value(address, size, signed)
     targetData = get_data(address, size)
@@ -169,7 +151,7 @@
     else
       if $endianLittle
-        # ãªãã«ã¨ã³ãã£ã¢ã³ã®å ´åï¼ãã¤ããªã¼ãã¼ãéã«ãã
+        # リトルエンディアンの場合，バイトオーダーを逆にする
         reverseData = ""
-        # å¾ããã2æå­ãã¤æãåºãï¼ä¸¦ã³æ¿ãã
+        # 後ろから2文字ずつ抜き出し，並び替える
         while targetData.size > 0
           reverseData << targetData[-2, 2]
@@ -181,5 +163,5 @@
       end
 
-      # è² ã®æ°ã®å¦ç
+      # 負の数の処理
       if signed && (returnData & (1 << (size * 8 - 1))) != 0
         returnData -= (1 << (size * 8))
Index: azure_iot_hub/trunk/asp3_dcre/cfg/cfg.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/cfg/cfg.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/cfg/cfg.rb	(revision 389)
@@ -8,47 +8,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 #
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
-#
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
+#
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 #
 #  $Id$
@@ -68,11 +53,10 @@
 
 #
-#  å®æ°å®ç¾©
-#
-# å
-±é
+#  定数定義
+#
+# 共通
 VERSION = "1.2.2"
 
-# cfg1_outé¢ä¿
+# cfg1_out関係
 CFG1_PREFIX        = "TOPPERS_cfg_"
 CFG1_MAGIC_NUM     = "TOPPERS_magic_number"
@@ -85,19 +69,19 @@
 CFG1_OUT_TARGET_H  = "target_cfg1_out.h"
 
-# cfg2_outé¢ä¿
+# cfg2_out関係
 CFG2_OUT_DB        = "cfg2_out.db"
 
-# cfg3_outé¢ä¿
+# cfg3_out関係
 CFG3_OUT_DB        = "cfg3_out.db"
 
 #
-#  ã¨ã©ã¼çºçæç¡ãã©ã°
+#  エラー発生有無フラグ
 #
 $errorFlag = false
 
 #
-#  ã¨ã©ã¼ï¼è­¦åè¡¨ç¤ºé¢æ°
-#
-# ä¸è¬çãªã¨ã©ã¼è¡¨ç¤ºï¼å¦çãä¸­æ­ï¼
+#  エラー／警告表示関数
+#
+# 一般的なエラー表示（処理を中断）
 def error_exit(message, location = "")
   location += " " if location != ""
@@ -105,5 +89,5 @@
 end
 
-# ä¸è¬çãªã¨ã©ã¼è¡¨ç¤ºï¼å¦çãç¶ç¶ï¼
+# 一般的なエラー表示（処理を継続）
 def error(message, location = "")
   location += " " if location != ""
@@ -112,5 +96,5 @@
 end
 
-# ä¸è¬çãªè­¦åè¡¨ç¤º
+# 一般的な警告表示
 def warning(message, location = "")
   location += " " if location != ""
@@ -118,5 +102,5 @@
 end
 
-# ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ§æè§£ææã®ã¨ã©ã¼
+# システムコンフィギュレーションファイルの構文解析時のエラー
 $noParseError = 0
 def parse_error(cfgFile, message)
@@ -127,5 +111,5 @@
 end
 
-# ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ§æè§£ææã®è­¦å
+# システムコンフィギュレーションファイルの構文解析時の警告
 def parse_warning(cfgFile, message)
   warning(message, "#{cfgFile.getFileName()}:#{cfgFile.getLineNo}:")
@@ -133,12 +117,12 @@
 
 #
-#  éçAPIå¦çæã®ã¨ã©ã¼ï¼è­¦åè¡¨ç¤ºé¢æ°
-#
-# éçAPIå¦çæã®ã¨ã©ã¼ï¼è­¦åãç­ãè¨è¿°ã§ããããã«ï¼ã¡ãã»ã¼ã¸ä¸­ã®%ã¾
-# ãã¯%%ã§å§ã¾ãè¨è¿°ãä»¥ä¸ã®ããã«å±éããï¼
-#	%label â #{params[:label]}
-#	%%label â label `#{params[:label]}'
-#
-# ã¨ã©ã¼ï¼è­¦åã¡ãã»ã¼ã¸ã®å±é
+#  静的API処理時のエラー／警告表示関数
+#
+# 静的API処理時のエラー／警告を短く記述できるように，メッセージ中の%ま
+# たは%%で始まる記述を以下のように展開する．
+#	%label → #{params[:label]}
+#	%%label → label `#{params[:label]}'
+#
+# エラー／警告メッセージの展開
 def expand_message(message, params)
   result = message.dup
@@ -156,5 +140,5 @@
 end
 
-# éçAPIå¦çæã®ã¨ã©ã¼
+# 静的API処理時のエラー
 def error_api(params, message)
   error(expand_message(message, params), \
@@ -162,5 +146,5 @@
 end
 
-# éçAPIå¦çæã®è­¦å
+# 静的API処理時の警告
 def warning_api(params, message)
   warning(expand_message(message, params), \
@@ -168,15 +152,15 @@
 end
 
-# éçAPIå¦çæã®ã¨ã©ã¼ï¼ã¨ã©ã¼ã³ã¼ãä»ãï¼
+# 静的API処理時のエラー（エラーコード付き）
 def error_ercd(errorCode, params, message)
   error_api(params, "#{errorCode}: #{message}")
 end
 
-# éçAPIå¦çæã®è­¦åï¼ã¨ã©ã¼ã³ã¼ãä»ãï¼
+# 静的API処理時の警告（エラーコード付き）
 def warning_ercd(errorCode, params, message)
   warning_api(params, "#{errorCode}: #{message}")
 end
 
-# ãã©ã¡ã¼ã¿ã®ã¨ã©ã¼
+# パラメータのエラー
 def error_wrong(errorCode, params, symbol, wrong)
   error_ercd(errorCode, params, "%%#{symbol} is #{wrong} in %apiname")
@@ -193,5 +177,5 @@
 end
 
-# ãã©ã¡ã¼ã¿ä¸æ­£ã®ã¨ã©ã¼
+# パラメータ不正のエラー
 def error_illegal(errorCode, params, symbol)
   error_ercd(errorCode, params, "illegal %%#{symbol} in %apiname")
@@ -209,9 +193,9 @@
 
 #
-#  Stringã¯ã©ã¹ã®æ¡å¼µï¼äºéå¼ç¨ç¬¦ã§å²ã¾ããæå­åã®ä½æï¼å±éï¼
+#  Stringクラスの拡張（二重引用符で囲まれた文字列の作成／展開）
 #
 class String
   #
-  #  äºéå¼ç¨ç¬¦ã§å²ã¾ããæå­åã®ä½æ
+  #  二重引用符で囲まれた文字列の作成
   #
   def quote
@@ -249,5 +233,5 @@
 
   #
-  #  äºéå¼ç¨ç¬¦ã§å²ã¾ããæå­åã®å±é
+  #  二重引用符で囲まれた文字列の展開
   #
   def unquote
@@ -299,5 +283,5 @@
 
 #
-#  NumStrã¯ã©ã¹ï¼æ°å¤ã«æå­åãä»å ãããã®ï¼ã®å®ç¾©
+#  NumStrクラス（数値に文字列を付加したもの）の定義
 #
 class NumStr
@@ -307,6 +291,5 @@
   end
 
-  # æ°å¤æ
-å ±ãè¿ã
+  # 数値情報を返す
   def val
     return @val
@@ -314,6 +297,5 @@
   alias_method :to_i, :val
 
-  # æå­åæ
-å ±ãè¿ã
+  # 文字列情報を返す
   def str
     return @str
@@ -321,6 +303,5 @@
   alias_method :to_s, :str
 
-  # æ¯è¼ã¯æ°å¤æ
-å ±ã§è¡ã
+  # 比較は数値情報で行う
   def ==(other)
     @val == other
@@ -333,16 +314,15 @@
   end
 
-  # ããã·ã¥ã®ã­ã¼ã¨ãã¦ä½¿ãæã®æ¯è¼ãæ°å¤æ
-å ±ã§è¡ã
+  # ハッシュのキーとして使う時の比較も数値情報で行う
   def eql?(other)
     @val == other.val
   end
 
-  # ããã·ã¥å¤ã®å®ç¾©ãä¸æ¸ããã
+  # ハッシュ値の定義も上書きする
   def hash
     return @val.hash
   end
 
-  # æ°å¤ã¯ã©ã¹ã¨æ¼ç®ã§ããããã«ãã
+  # 数値クラスと演算できるようにする
   def coerce(other)
     if other.kind_of?(Numeric)
@@ -353,15 +333,15 @@
   end
 
-  # äºéå¼ç¨ç¬¦ã§å²ã¾ããæå­åã®ä½æ
+  # 二重引用符で囲まれた文字列の作成
   def quote
     str.quote
   end
 
-  # äºéå¼ç¨ç¬¦ã§å²ã¾ããæå­åã®å±é
+  # 二重引用符で囲まれた文字列の展開
   def unquote
     str.unquote
   end
 
-  # ppæã®è¡¨ç¤º
+  # pp時の表示
   def pretty_print(q)
     q.text("[#{@val}(=0x#{@val.to_s(16)}),")
@@ -370,5 +350,5 @@
   end
 
-  # æªå®ç¾©ã®ã¡ã½ããã¯@valã«éã
+  # 未定義のメソッドは@valに送る
   def method_missing(*method)
     @val.send(*method)
@@ -377,8 +357,8 @@
 
 #
-#  ã·ã³ãã«ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿
-#
-#  ä»¥ä¸ã®ã¡ã½ããã¯ï¼GNUã®nmãçæããã·ã³ãã«ãã¡ã¤ã«ã«å¯¾å¿ãã¦ããï¼
-#  å¥ã®ãã¼ã«ã«å¯¾å¿ããå ´åã«ã¯ï¼ãã®ã¡ã½ãããæ¸ãæããã°ããï¼
+#  シンボルファイルの読み込み
+#
+#  以下のメソッドは，GNUのnmが生成するシンボルファイルに対応している．
+#  別のツールに対応する場合には，このメソッドを書き換えればよい．
 #
 def ReadSymbolFile(symbolFileName)
@@ -391,8 +371,8 @@
   symbolAddress = {}
   symbolFile.each do |line|
-    # ã¹ãã¼ã¹åºåãã§åè§£
+    # スペース区切りで分解
     fields = line.split(/\s+/)
 
-    # 3åã«ãªã£ã¦ããªãè¡ã¯é¤å¤
+    # 3列になっていない行は除外
     if fields.size == 3
       symbolAddress[fields[2]] = fields[0].hex
@@ -404,5 +384,5 @@
 
 #
-#  å¤åå¾ã·ã³ãã«ãã°ã­ã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã
+#  値取得シンボルをグローバル変数として定義する
 #
 def DefineSymbolValue
@@ -415,19 +395,19 @@
 
 #
-#  ã¤ã³ã¯ã«ã¼ããã¹ãããã¡ã¤ã«ãæ¢ã
+#  インクルードパスからファイルを探す
 #
 def SearchFilePath(fileName)
   if File.exist?(fileName)
-    # æå®ãããã¡ã¤ã«ãã¹ã«å­å¨ãã
+    # 指定したファイルパスに存在する
     return fileName
   elsif /^\./ =~ fileName
-    # ç¸å¯¾ãã¹ãæå®ãã¦ãã¦è¦ã¤ãããªãã£ãå ´åï¼å­å¨ããªããã®ã¨ãã
-    #ï¼æå³ããªããã¡ã¤ã«ãå¯¾è±¡ã¨ãªããã¨ãé²æ­¢ï¼
+    # 相対パスを指定していて見つからなかった場合，存在しないものとする
+    #（意図しないファイルが対象となることを防止）
     return nil
   else
-    # åã¤ã³ã¯ã«ã¼ããã¹ãããã¡ã¤ã«å­å¨ãã§ãã¯
+    # 各インクルードパスからファイル存在チェック
     $includeDirectories.each do |includeDirectory|
       path = includeDirectory + "/" + fileName
-      # è¦ã¤ãã£ããç¸å¯¾ãã¹ãè¿ã
+      # 見つかったら相対パスを返す
       if File.exist?(path)
         return path
@@ -439,5 +419,5 @@
 
 #
-#  æå®ããçæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãæ¤ç´¢ãã¦loadãã
+#  指定した生成スクリプト（trbファイル）を検索してloadする
 #
 def IncludeTrb(fileName)
@@ -451,10 +431,9 @@
 
 #
-#  ãã¹3ã®å¦ç
+#  パス3の処理
 #
 def Pass3
   #
-  #  ãã¹2ããå¼ãæ¸¡ãããæ
-å ±ããã¡ã¤ã«ããèª­ã¿è¾¼ã
+  #  パス2から引き渡される情報をファイルから読み込む
   #
   db = PStore.new(CFG2_OUT_DB)
@@ -472,10 +451,10 @@
 
   #
-  #  å¤åå¾ã·ã³ãã«ãã°ã­ã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã
+  #  値取得シンボルをグローバル変数として定義する
   #
   DefineSymbolValue()
 
   #
-  #  çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã
+  #  生成スクリプト（trbファイル）を実行する
   #
   $trbFileNames.each do |trbFileName|
@@ -484,6 +463,5 @@
 
   #
-  #  ãã¹4ã«å¼ãæ¸¡ãæ
-å ±ããã¡ã¤ã«ã«çæ
+  #  パス4に引き渡す情報をファイルに生成
   #
   if $omitOutputDb.nil?
@@ -503,10 +481,9 @@
 
 #
-#  ãã¹4ã®å¦ç
+#  パス4の処理
 #
 def Pass4
   #
-  #  ãã¹3ããå¼ãæ¸¡ãããæ
-å ±ããã¡ã¤ã«ããèª­ã¿è¾¼ã
+  #  パス3から引き渡される情報をファイルから読み込む
   #
   db = PStore.new(CFG3_OUT_DB)
@@ -523,10 +500,10 @@
 
   #
-  #  å¤åå¾ã·ã³ãã«ãã°ã­ã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã
+  #  値取得シンボルをグローバル変数として定義する
   #
   DefineSymbolValue()
 
   #
-  #  çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã
+  #  生成スクリプト（trbファイル）を実行する
   #
   $trbFileNames.each do |trbFileName|
@@ -536,5 +513,5 @@
 
 #
-#  çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼åãã®é¢æ°
+#  生成スクリプト（trbファイル）向けの関数
 #
 def SYMBOL(symbol)
@@ -570,5 +547,5 @@
 
 #
-#  ã°ã­ã¼ãã«å¤æ°ã®åæå
+#  グローバル変数の初期化
 #
 $kernel = nil
@@ -585,5 +562,5 @@
 
 #
-#  ãªãã·ã§ã³ã®å¦ç
+#  オプションの処理
 #
 OptionParser.new(banner="Usage: cfg.rb [options] CONFIG-FILE", 40) do |opt|
@@ -639,9 +616,8 @@
 
 #
-#  ãªãã·ã§ã³ã®ãã§ãã¯
+#  オプションのチェック
 #
 if $pass.nil?
-  # ãã¹ã®æå®ã¯å¿
-é 
+  # パスの指定は必須
   abort("`--pass' option is mandatory")
 elsif /^[1234]$/ !~ $pass
@@ -649,12 +625,10 @@
 end
 
-# ãã¹1ã§ã¯ï¼éçAPIãã¼ãã«ã¯å¿
-é 
+# パス1では，静的APIテーブルは必須
 if ($pass == "1" && $apiTableFileNames.empty?)
   abort("`--api-table' option must be specified in pass 1")
 end
 
-# ãã¹1ä»¥å¤ã§ã¯ï¼çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå¿
-é 
+# パス1以外では，生成スクリプト（trbファイル）が必須
 if ($pass != "1" && $trbFileNames.empty?)
   abort("`--trb-file' must be specified except in pass 1")
@@ -662,5 +636,5 @@
 
 #
-#  ã«ã¼ãã«ãªãã·ã§ã³ã®å¦ç
+#  カーネルオプションの処理
 #
 case $kernel
@@ -672,6 +646,5 @@
 
 #
-#  IDçªå·å
-¥åãã¡ã¤ã«ã®åãè¾¼ã¿
+#  ID番号入力ファイルの取り込み
 #
 $inputObjid = {}
@@ -692,5 +665,5 @@
 
 #
-#  æå®ãããã·ã³ãã«ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿
+#  指定されたシンボルファイルの読み込み
 #
 if !$romSymbolFileName.nil?
@@ -703,5 +676,5 @@
 
 #
-#  æå®ãããSã¬ã³ã¼ããã¡ã¤ã«ã®èª­ã¿è¾¼ã¿
+#  指定されたSレコードファイルの読み込み
 #
 if !$romImageFileName.nil?
@@ -714,5 +687,5 @@
 
 #
-#  ãã¹ã«å¾ã£ã¦åå¦çãå®è¡
+#  パスに従って各処理を実行
 #
 case $pass
@@ -731,10 +704,10 @@
 end
 
-# ã¨ã©ã¼çºçæã¯abortãã
+# エラー発生時はabortする
 if $errorFlag
   if ($0 == __FILE__)
     abort()
   else
-    # simplecovå¯¾å¿
+    # simplecov対応
     raise()
   end
@@ -742,10 +715,10 @@
 
 #
-#  ä½æãããã¹ã¦ã®ãã¡ã¤ã«ãåºåãã
+#  作成したすべてのファイルを出力する
 #
 GenFile.output
 
 # 
-#  ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®çæ
+#  タイムスタンプファイルの生成
 # 
 if !$timeStampFileName.nil?
Index: azure_iot_hub/trunk/asp3_dcre/cfg/pass1.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/cfg/pass1.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/cfg/pass1.rb	(revision 389)
@@ -7,47 +7,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 #
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
-#
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
+#
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 #
 #  $Id$
@@ -55,9 +40,9 @@
 
 #
-#		ãã¹1ã®å¦ç
-#
-
-#
-#  å¤åå¾ã·ã³ãã«ãã¼ãã«ã¸ã®åºå®ç»é²
+#		パス1の処理
+#
+
+#
+#  値取得シンボルテーブルへの固定登録
 #
 $symbolValueTable = {
@@ -80,5 +65,5 @@
 
 #
-#  éçAPIãã¼ãã«ã¸ã®åºå®ç»é²
+#  静的APIテーブルへの固定登録
 #
 $apiDefinition = { "INCLUDE" =>
@@ -86,5 +71,5 @@
 
 #
-#  éçAPIãã¼ãã«ã®èª­ã¿è¾¼ã¿
+#  静的APIテーブルの読み込み
 #
 def ReadApiTableFile
@@ -102,9 +87,9 @@
     apiFile = File.open(apiTableFileName)
     apiFile.each do |line|
-      next if /^#/ =~ line			# ã³ã¡ã³ããã¹ã­ãã
-
-      fields = line.split(/\s+/)	# ãã£ã¼ã«ãã«åè§£
-
-      apiName = fields.shift		# APIåã®åãåºã
+      next if /^#/ =~ line			# コメントをスキップ
+
+      fields = line.split(/\s+/)	# フィールドに分解
+
+      apiName = fields.shift		# API名の取り出し
       if /^(.+)\[(.+)\]$/ =~ apiName
         apiName = $1
@@ -127,17 +112,16 @@
 
           case prefix
-          when "#"					# ãªãã¸ã§ã¯ãè­å¥åï¼å®ç¾©ï¼
+          when "#"					# オブジェクト識別名（定義）
             apiParam[:ID_DEF] = true
-          when "%"					# ãªãã¸ã§ã¯ãè­å¥åï¼åç
-§ï¼
+          when "%"					# オブジェクト識別名（参照）
             apiParam[:ID_REF] = true
-          when "."					# ç¬¦å·ç¡ãæ´æ°å®æ°å¼ãã©ã¡ã¼ã¿
+          when "."					# 符号無し整数定数式パラメータ
             apiParam[:EXPTYPE] = "unsigned_t"
-          when "+"					# ç¬¦å·ä»ãæ´æ°å®æ°å¼ãã©ã¡ã¼ã¿
+          when "+"					# 符号付き整数定数式パラメータ
             apiParam[:EXPTYPE] = "signed_t"
             apiParam[:SIGNED] = true
-          when "&"					# ä¸è¬æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿
+          when "&"					# 一般整数定数式パラメータ
             # do nothing
-          when "$"					# æå­åå®æ°å¼ãã©ã¡ã¼ã¿
+          when "$"					# 文字列定数式パラメータ
             apiParam[:STRING] = true
           else
@@ -146,9 +130,9 @@
 
           case postfix
-          when "*"					# ã­ã¼ãæ±ºãããã©ã¡ã¼ã¿
+          when "*"					# キーを決めるパラメータ
             apiDef[:KEYPAR] = name
-          when "?"					# ãªãã·ã§ã³ãã©ã¡ã¼ã¿
+          when "?"					# オプションパラメータ
             apiParam[:OPTIONAL] = true
-          when "\.\.\."				# ãªã¹ããã©ã¡ã¼ã¿
+          when "\.\.\."				# リストパラメータ
             apiParam[:LIST] = true
           end
@@ -175,5 +159,5 @@
 
 #
-#  å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èª­ã¿è¾¼ã¿
+#  値取得シンボルテーブルの読み込み
 #
 def ReadSymvalTable
@@ -187,5 +171,5 @@
 						{ skip_blanks: true, skip_lines: /^#/ })
     symvalCsv.each do |record|
-      # å¤æ°å
+      # 変数名
       if record[0].nil?
         error_exit("invalid variable name in " \
@@ -196,5 +180,5 @@
       variable = record[0]
 
-      # å¼
+      # 式
       if record[1].nil? || record[1].empty?
         symbol[:EXPR] = variable
@@ -203,22 +187,22 @@
       end
 
-      # å¼ã®å
+      # 式の型
       if !record[2].nil? && !record[2].empty?
         case record[2]
-        when /^[bB]/				# çå½å¤
+        when /^[bB]/				# 真偽値
           symbol[:BOOL] = true
-        when /^[uU]/				# ç¬¦å·ç¡ãæ´æ°å¤
-          # ä½ãè¨­å®ããªã
-        else						# ç¬¦å·ä»ãæ´æ°å¤
+        when /^[uU]/				# 符号無し整数値
+          # 何も設定しない
+        else						# 符号付き整数値
           symbol[:SIGNED] = true
         end
       end
 
-      # ã³ã³ãã¤ã«æ¡ä»¶
+      # コンパイル条件
       if !record[3].nil? && !record[3].empty?
         symbol[:CONDITION] = record[3]
       end
 
-      # æ¡ä»¶ãæç«ããªãæã®å¼
+      # 条件が成立しない時の式
       if !record[4].nil? && !record[4].empty?
         symbol[:ELSE_EXPR] = record[4]
@@ -232,5 +216,5 @@
 
 #
-#  ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããã®èª­ã¿è¾¼ã¿ã¯ã©ã¹
+#  システムコンフィギュレーションファイルからの読み込みクラス
 #
 class ConfigFile
@@ -254,5 +238,5 @@
     return(nil) if line.nil?
 
-	line.encode!("UTF-16BE", "UTF-8",	# ä¸æ­£ãªãã¤ãåãé¤å¤ãã
+	line.encode!("UTF-16BE", "UTF-8",	# 不正なバイト列を除外する
 					:invalid => :replace,
 					:undef => :replace,
@@ -263,6 +247,6 @@
     if @withinComment
       case line
-      when /\*\//						# Cè¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãçµäº
-        line.sub!(/^.*?\*\//, "")		# æåã®*/ã«ãããããã */
+      when /\*\//						# C言語スタイルのコメント終了
+        line.sub!(/^.*?\*\//, "")		# 最初の*/にマッチさせる */
         @withinComment = false
       else
@@ -271,8 +255,8 @@
     end
     if !@withinComment
-      line.gsub!(/\/\*.*?\*\//, "")		# Cè¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãã®é¤å»
-										# æåã®*/ã«ãããããã */
+      line.gsub!(/\/\*.*?\*\//, "")		# C言語スタイルのコメントの除去
+										# 最初の*/にマッチさせる */
       case line
-      when /^\s*#/						# ããªãã­ã»ããµãã£ã¬ã¯ãã£ã
+      when /^\s*#/						# プリプロセッサディレクティブ
         if withinApi
           parse_error(self, \
@@ -280,8 +264,8 @@
           line = ""
         end
-      when /\/\*/						# Cè¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãéå§
+      when /\/\*/						# C言語スタイルのコメント開始
         line.sub!(/\/\*.*$/, "")
         @withinComment = true
-      when /\/\//						# C++è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ã
+      when /\/\//						# C++言語スタイルのコメント
         line.sub!(/\/\/.*$/, "")
       end
@@ -300,5 +284,5 @@
 
 #
-#  ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ãã¼ãµã¼ã¯ã©ã¹
+#  システムコンフィギュレーションファイルのパーサークラス
 #
 class CfgParser
@@ -310,9 +294,9 @@
   def initialize
     @line = ""
-    @skipComma = false						# æ¬¡ã,ã§ããã°èª­ã¿é£ã°ã
-  end
-
-  #
-  #  æå­åæ«ã¾ã§èª­ã
+    @skipComma = false						# 次が,であれば読み飛ばす
+  end
+
+  #
+  #  文字列末まで読む
   #
   def parseString(cfgFile)
@@ -320,15 +304,15 @@
     begin
       case @line
-      when /^([^"]*\\\\)(.*)$/				# \\ã¾ã§èª­ã
+      when /^([^"]*\\\\)(.*)$/				# \\まで読む
         string += $1
         @line = $2
-      when /^([^"]*\\\")(.*)$/				# \"ã¾ã§èª­ã
+      when /^([^"]*\\\")(.*)$/				# \"まで読む
         string += $1
         @line = $2
-      when /^([^"]*\")(.*)$/				# "ã¾ã§èª­ã
+      when /^([^"]*\")(.*)$/				# "まで読む
         string += $1
         @line = $2
         return(string)
-      else									# è¡æ«ã¾ã§èª­ã
+      else									# 行末まで読む
         string += @line + "\n"
         @line = cfgFile.getNextLine(true)
@@ -340,5 +324,5 @@
 
   #
-  #  æå­æ«ã¾ã§èª­ã
+  #  文字末まで読む
   #
   def parseChar(cfgFile)
@@ -346,15 +330,15 @@
     begin
       case @line
-      when /^([^']*\\\\)(.*)$/				# \\ã¾ã§èª­ã
+      when /^([^']*\\\\)(.*)$/				# \\まで読む
         string += $1
         @line = $2
-      when /^([^']*\\\')(.*)$/				# \'ã¾ã§èª­ã
+      when /^([^']*\\\')(.*)$/				# \'まで読む
         string += $1
         @line = $2
-      when /^([^']*\')(.*)$/				# 'ã¾ã§èª­ã
+      when /^([^']*\')(.*)$/				# 'まで読む
         string += $1
         @line = $2
         return(string)
-      else									# è¡æ«ã¾ã§èª­ã
+      else									# 行末まで読む
         string += @line + "\n"
         @line = cfgFile.getNextLine(true)
@@ -366,22 +350,21 @@
 
   #
-  #  æ¹è¡ã¨ç©ºç½æå­ãèª­ã¿é£ã°ã
+  #  改行と空白文字を読み飛ばす
   #
   def skipSpace(cfgFile, withinApi)
     loop do
-      return if @line.nil?						# ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³
-      @line.lstrip!								# å
-é ­ã®ç©ºç½ãåé¤
-      return if @line != ""						# ç©ºè¡ã§ãªããã°ãªã¿ã¼ã³
-      @line = cfgFile.getNextLine(withinApi)	# æ¬¡ã®è¡ãèª­ã
-    end
-  end
-
-  #
-  #  æ¬¡ã®æå­ã¾ã§èª­ã¿é£ã°ã
+      return if @line.nil?						# ファイル末であればリターン
+      @line.lstrip!								# 先頭の空白を削除
+      return if @line != ""						# 空行でなければリターン
+      @line = cfgFile.getNextLine(withinApi)	# 次の行を読む
+    end
+  end
+
+  #
+  #  次の文字まで読み飛ばす
   #
   def skipToToken(cfgFile, withinApi=true)
     skipSpace(cfgFile, withinApi)
-    if @line.nil?							# ãã¡ã¤ã«æ«ã§ããã°ã¨ã©ã¼çµäº
+    if @line.nil?							# ファイル末であればエラー終了
       error_exit("unexpexced end-of-file")
     end
@@ -389,18 +372,17 @@
 
   #
-  #  ãã©ã¡ã¼ã¿ã1ã¤èª­ã
-  #
-  # @lineã®å
-é ­ãããã©ã¡ã¼ã¿ã1ã¤èª­ãã§ï¼ãããæå­åã§è¿ãï¼èª­ãã ã
-  # ã©ã¡ã¼ã¿ã¯ï¼@lineããã¯åé¤ããï¼ãã©ã¡ã¼ã¿ã®éä¸­ã§è¡æ«ã«éããæã¯ï¼
-  # cfgFileããæ¬¡ã®è¡ãåãåºãï¼ãã¡ã¤ã«æ«ã«éããæã¯ï¼nilãè¿ãï¼
+  #  パラメータを1つ読む
+  #
+  # @lineの先頭からパラメータを1つ読んで，それを文字列で返す．読んだパ
+  # ラメータは，@lineからは削除する．パラメータの途中で行末に達した時は，
+  # cfgFileから次の行を取り出す．ファイル末に達した時は，nilを返す．
   #
   def parseParam(cfgFile)
-    param = ""								# èª­ãã æå­å
-    parenLevel = 0							# æ¬å¼§ã®ãã¹ãã¬ãã«
+    param = ""								# 読んだ文字列
+    parenLevel = 0							# 括弧のネストレベル
     skipComma = @skipComma
     @skipComma = false
 
-    skipToToken(cfgFile)					# æ¬¡ã®æå­ã¾ã§èª­ã¿é£ã°ã
+    skipToToken(cfgFile)					# 次の文字まで読み飛ばす
     begin
       if parenLevel == 0
@@ -410,5 +392,5 @@
           if param == "" && skipComma
             skipComma = false
-            return(parseParam(cfgFile))		# åå¸°å¼ã³åºã
+            return(parseParam(cfgFile))		# 再帰呼び出し
           else
             return(param.strip)
@@ -425,5 +407,5 @@
           @line = $2
           parenLevel += 1
-        when /^(\s*([)}]))(.*)$/			# }ã)
+        when /^(\s*([)}]))(.*)$/			# }か)
           if param != ""
             return(param.strip)
@@ -439,14 +421,13 @@
           @line = $2
           param += $1 + parseChar(cfgFile)
-        when /^(\s*[^,{}()"'\s]+)(.*)$/		# ãã®ä»ã®æå­å
+        when /^(\s*[^,{}()"'\s]+)(.*)$/		# その他の文字列
           param += $1
           @line = $2
-        else								# è¡æ«
+        else								# 行末
           param += " "
           @line = cfgFile.getNextLine(true)
         end
       else
-        # æ¬å¼§å
-ã®å¦ç
+        # 括弧内の処理
         case @line
         when /^(\s*\()(.*)$/				# "("
@@ -464,8 +445,8 @@
           @line = $2
           param += $1 + parseChar(cfgFile)
-        when /^(\s*[^()"'\s]+)(.*)$/		# ãã®ä»ã®æå­å
+        when /^(\s*[^()"'\s]+)(.*)$/		# その他の文字列
           param += $1
           @line = $2
-        else								# è¡æ«
+        else								# 行末
           param += " "
           @line = cfgFile.getNextLine(true)
@@ -499,10 +480,10 @@
 
   def parseApi(cfgFile, apiName)
-    # éçAPIã®èª­ã¿è¾¼ã¿
+    # 静的APIの読み込み
     staticApi = {}
     tooFewParams = false
     skipUntilBrace = 0
 
-    skipToToken(cfgFile)					# æ¬¡ã®æå­ã¾ã§èª­ã¿é£ã°ã
+    skipToToken(cfgFile)					# 次の文字まで読み飛ばす
     if (/^\((.*)$/ =~ @line)
       @line = $1
@@ -515,8 +496,8 @@
 
       apiDef[:PARAM].each do |apiParam|
-        return(staticApi) if param.nil?		# ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³
+        return(staticApi) if param.nil?		# ファイル末であればリターン
 
         if skipUntilBrace > 0
-          # APIå®ç¾©ã}ã¾ã§ã¹ã­ããä¸­
+          # API定義を}までスキップ中
           if apiParam.has_key?(:BRACE)
             case apiParam[:BRACE]
@@ -540,18 +521,18 @@
             staticApi[apiParam[:NAME]].push(getParam(apiParam, param, cfgFile))
             param = parseParam(cfgFile)
-            break if param.nil?				# ãã¡ã¤ã«æ«ã®å ´å
+            break if param.nil?				# ファイル末の場合
           end
         elsif apiParam.has_key?(:OPTBRACE)
           if param == apiParam[:BRACE]
             param = parseParam(cfgFile)
-            break if param.nil?				# ãã¡ã¤ã«æ«ã®å ´å
+            break if param.nil?				# ファイル末の場合
           else
             if param == ""
               param = parseParam(cfgFile)
-              break if param.nil?			# ãã¡ã¤ã«æ«ã®å ´å
+              break if param.nil?			# ファイル末の場合
             elsif /^([})])$/ !~ param
               parse_error(cfgFile, "`{...}' expected before #{param}")
             end
-            skipUntilBrace += 1          	# APIå®ç¾©ã}ã¾ã§ã¹ã­ãã
+            skipUntilBrace += 1          	# API定義を}までスキップ
           end
         elsif !apiParam.has_key?(:BRACE)
@@ -568,5 +549,5 @@
         else
           parse_error(cfgFile, "`#{apiParam[:BRACE]}' expected before #{param}")
-          # )ããã¡ã¤ã«æ«ã¾ã§èª­ã¿é£ã°ã
+          # )かファイル末まで読み飛ばす
           loop do
             param = parseParam(cfgFile)
@@ -577,10 +558,9 @@
       end
 
-      # æå¾
-ããããã©ã¡ã¼ã¿ããã¹ã¦èª­ãã å¾ã®å¦ç
+      # 期待されるパラメータをすべて読んだ後の処理
       if param != ")"
         begin
           param = parseParam(cfgFile)
-          return(staticApi) if param.nil?	# ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³
+          return(staticApi) if param.nil?	# ファイル末であればリターン
         end while param != ")"
         parse_error(cfgFile, "too many parameters before `)'")
@@ -594,6 +574,6 @@
 
   def parseOpenBrace(cfgFile)
-    # {ã®èª­ã¿è¾¼ã¿
-    skipToToken(cfgFile)					# æ¬¡ã®æå­ã¾ã§èª­ã¿é£ã°ã
+    # {の読み込み
+    skipToToken(cfgFile)					# 次の文字まで読み飛ばす
     if (/^\{(.*)$/ =~ @line)
       @line = $1
@@ -609,19 +589,18 @@
       cfgFile = cfgFiles.last
 
-      skipSpace(cfgFile, false)				# æ¹è¡ã¨ç©ºç½æå­ãèª­ã¿é£ã°ã
+      skipSpace(cfgFile, false)				# 改行と空白文字を読み飛ばす
       if @line.nil?
-        # ãã¡ã¤ã«æ«ã®å¦ç
+        # ファイル末の処理
         cfgFiles.pop.close
         if cfgFiles.empty?
-          break								# ãã¼ã¹å¦ççµäº
+          break								# パース処理終了
         else
-          @line = ""						# å
-ã®ãã¡ã¤ã«ã«æ»ã£ã¦ç¶ãã
+          @line = ""						# 元のファイルに戻って続ける
         end
       elsif /^;(.*)$/ =~ @line
-        # ;ã¯èª­ã¿é£ã°ã
+        # ;は読み飛ばす
         @line = $1
       elsif /^#/ =~ @line
-        # ããªãã­ã»ããµãã£ã¬ã¯ãã£ããèª­ã
+        # プリプロセッサディレクティブを読む
         case @line
         when /^#include\b(.*)$/
@@ -662,6 +641,5 @@
             if !$domainId.has_key?(domid)
               if $inputObjid.has_key?(domid)
-                # IDçªå·å
-¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å
+                # ID番号入力ファイルに定義されていた場合
                 $domainId[domid] = $inputObjid[domid]
                 if $domainId[domid] > 32
@@ -690,10 +668,10 @@
         else
           if $apiDefinition.has_key?(apiName)
-            # éçAPIã1ã¤èª­ã
+            # 静的APIを1つ読む
             staticApi = parseApi(cfgFile, apiName)
             if staticApi.empty?
-              # ãã¡ã¤ã«æ«ãææ³ã¨ã©ã¼
+              # ファイル末か文法エラー
             elsif (staticApi[:APINAME] == "INCLUDE")
-              # INCLUDEã®å¦ç
+              # INCLUDEの処理
               includeFilePath = SearchFilePath(staticApi[:file])
               if includeFilePath.nil?
@@ -704,5 +682,5 @@
               end
             else
-              # éçAPIã®å¦ç
+              # 静的APIの処理
               if !@@currentDomain.nil?
                 staticApi[:DOMAIN] = @@currentDomain
@@ -721,5 +699,5 @@
         end
       elsif (/^\}(.*)$/ =~ @line)
-        # }ã®å¦ç
+        # }の処理
         if @@nestDC.size > 0
           case @@nestDC.pop
@@ -742,9 +720,9 @@
 
 #
-#  cfg1_out.cã®çæ
+#  cfg1_out.cの生成
 #
 module Cfg1OutC
   #
-  #  éçAPIã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå
+  #  静的APIのファイル名と行番号の出力
   #
   def self.OutLineNumber(cfgInfo)
@@ -753,5 +731,5 @@
 
   #
-  #  ã¯ã©ã¹è¨è¿°ã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå
+  #  クラス記述のファイル名と行番号の出力
   #
   def self.OutClassLineNumber(cfgInfo)
@@ -760,5 +738,5 @@
 
   #
-  #  ãã©ã¡ã¼ã¿ã«é¢ããå®ç¾©ã®åºå
+  #  パラメータに関する定義の出力
   #
   def self.OutParamDef(param, index, apiParam, cfgInfo)
@@ -774,5 +752,5 @@
 
   #
-  #  cfg1_out.cã®çæï¼ã¡ã¤ã³ã®å¦çï¼
+  #  cfg1_out.cの生成（メインの処理）
   #
   def self.Generate
@@ -785,5 +763,5 @@
 EOS
 
-    # ã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«
+    # インクルードヘッダファイル
     $includeFiles.each do |file|
       @cfg1Out.add("#include #{file}")
@@ -813,5 +791,5 @@
 EOS
 
-    # å¤åå¾ã·ã³ãã«ã®å¦ç
+    # 値取得シンボルの処理
     $symbolValueTable.each do |symbolName, symbolData|
       if symbolData.has_key?(:BOOL) || symbolData.has_key?(:SIGNED)
@@ -836,5 +814,5 @@
     @cfg1Out.add
 
-    # ãã¡ã¤ã³IDã®å®ç¾©ã®çæ
+    # ドメインIDの定義の生成
     $domainId.each do |domainName, domainVal|
       if domainVal > 0
@@ -844,5 +822,5 @@
     @cfg1Out.add
 
-    # éçAPIï¼ããªãã­ã»ããµãã£ã¬ã¯ãã£ãã®å¦ç
+    # 静的API／プリプロセッサディレクティブの処理
     $cfgFileInfo.each do |cfgInfo|
       if cfgInfo.has_key?(:DIRECTIVE)
@@ -857,5 +835,5 @@
           next unless apiParam.has_key?(:NAME)
           paramName = apiParam[:NAME]
-          next unless cfgInfo.has_key?(paramName)	# ãã©ã¡ã¼ã¿ããªãå ´å
+          next unless cfgInfo.has_key?(paramName)	# パラメータがない場合
           paramData = cfgInfo[paramName]
 
@@ -869,5 +847,5 @@
         end
         if cfgInfo.has_key?(:CLASS)
-          # ã¯ã©ã¹IDã®åå¾ã®ããã®å¦ç
+          # クラスIDの取得のための処理
           OutClassLineNumber(cfgInfo)
           @cfg1Out.add("const signed_t #{CFG1_PREFIX}valueof_CLASS_" \
@@ -881,24 +859,24 @@
 
 #
-#  ãã¹1ã®å¦ç
+#  パス1の処理
 #
 def Pass1
   # 
-  #  ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®
+  #  タイムスタンプファイルの指定
   # 
   $timeStampFileName = CFG1_OUT_TIMESTAMP
 
   #
-  #  éçAPIãã¼ãã«ã®èª­ã¿è¾¼ã¿
+  #  静的APIテーブルの読み込み
   #
   ReadApiTableFile()
 
   #
-  #  å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èª­ã¿è¾¼ã¿
+  #  値取得シンボルテーブルの読み込み
   #
   ReadSymvalTable()
 
   #
-  #  ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿
+  #  システムコンフィギュレーションファイルの読み込み
   #
   $cfgFileInfo = []
@@ -909,8 +887,8 @@
     CfgParser.new.parseFile(configFileName)
   end
-  abort if $errorFlag					# ã¨ã©ã¼çºçæã¯abortãã
-
-  #
-  #  ãã¡ã¤ã³IDã®å²å½ã¦å¦ç
+  abort if $errorFlag					# エラー発生時はabortする
+
+  #
+  #  ドメインIDの割当て処理
   #
   nextDomainId = 1
@@ -929,10 +907,10 @@
 
   #
-  #  cfg1_out.cã®çæ
+  #  cfg1_out.cの生成
   #
   Cfg1OutC::Generate()
 
   #
-  #  ä¾å­é¢ä¿ã®åºå
+  #  依存関係の出力
   #
   if !$dependencyFileName.nil?
@@ -959,6 +937,5 @@
 
   #
-  #  ãã¹2ã«å¼ãæ¸¡ãæ
-å ±ããã¡ã¤ã«ã«çæ
+  #  パス2に引き渡す情報をファイルに生成
   #
   if $omitOutputDb.nil?
Index: azure_iot_hub/trunk/asp3_dcre/cfg/pass2.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/cfg/pass2.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/cfg/pass2.rb	(revision 389)
@@ -7,47 +7,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 #
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
-#
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
+#
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 #
 #  $Id$
@@ -55,13 +40,13 @@
 
 #
-#		ãã¹2ã®å¦ç
-#
-
-#
-#  ãã¹1ã®çæç©ã®èª­ã¿è¾¼ã¿
+#		パス2の処理
+#
+
+#
+#  パス1の生成物の読み込み
 #
 module Cfg1Out
   #
-  #  Sã¬ã³ã¼ããã¡ã¤ã«ããã·ã³ãã«ã®å¤ãåãåºã
+  #  Sレコードファイルからシンボルの値を取り出す
   #
   def self.GetSymbolValue(symbol, size, signed)
@@ -74,11 +59,11 @@
 
   #
-  #  ãã¹1ã®çæç©ã®èª­ã¿è¾¼ã¿ï¼ã¡ã¤ã³ã®å¦çï¼
+  #  パス1の生成物の読み込み（メインの処理）
   #
   def self.Read
-    # cfg1_out.symsã®èª­ã¿è¾¼ã¿
+    # cfg1_out.symsの読み込み
     @symbolAddress = ReadSymbolFile(CFG1_OUT_SYMS)
 
-    # cfg1_out.srecã®èª­ã¿è¾¼ã¿
+    # cfg1_out.srecの読み込み
     begin
       @cfg1SRec = SRecord.new(CFG1_OUT_SREC)
@@ -87,5 +72,5 @@
     end
 
-    # ãã¸ãã¯ãã³ãã¼ã®åå¾
+    # マジックナンバーの取得
     if @symbolAddress.has_key?(CFG1_MAGIC_NUM)
       $asmLabel = ""
@@ -108,8 +93,8 @@
     end
 
-    # åºå®åºåããå¤æ°ã®åå¾
+    # 固定出力した変数の取得
     $sizeOfSigned = GetSymbolValue($asmLabel + CFG1_SIZEOF_SIGNED, 4, false)
 
-    # å¤åå¾ã·ã³ãã«ã®åå¾
+    # 値取得シンボルの取得
     $symbolValueTable.each do |symbolName, symbolData|
       symbol = $cfg1_prefix + symbolName
@@ -117,5 +102,5 @@
         value = GetSymbolValue(symbol, $sizeOfSigned, true)
         if !value.nil?
-          # Cè¨èªã®çå½å¤ãRubyã®çå½å¤ã«å¤æãã¦åãè¾¼ã
+          # C言語の真偽値をRubyの真偽値に変換して取り込む
           symbolData[:VALUE] = (value != 0)
         end
@@ -130,5 +115,5 @@
 
     #
-    #  ããã·ã¥ã®åæå
+    #  ハッシュの初期化
     #
     $cfgData = {}
@@ -148,5 +133,5 @@
 
     #
-    #  ãã¡ã¤ã³çæãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´
+    #  ドメイン生成データをコンフィギュレーションデータ（$cfgData）に格納
     #
     $cfgData[:CRE_DOM] = {}
@@ -160,11 +145,10 @@
 
   #
-  #  ãã©ã¡ã¼ã¿ã®å¤ãåãåºã
+  #  パラメータの値を取り出す
   #
   def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo)
-    if apiParam.has_key?(:ID_DEF)				# ãªãã¸ã§ã¯ãè­å¥åï¼å®ç¾©ï¼
+    if apiParam.has_key?(:ID_DEF)				# オブジェクト識別名（定義）
       value = @objidValues[paramName][param]
-    elsif apiParam.has_key?(:ID_REF)			# ãªãã¸ã§ã¯ãè­å¥åï¼åç
-§ï¼
+    elsif apiParam.has_key?(:ID_REF)			# オブジェクト識別名（参照）
       if @objidValues[paramName].has_key?(param)
         value = @objidValues[paramName][param]
@@ -176,5 +160,5 @@
         value = nil
       end
-    elsif apiParam.has_key?(:EXPTYPE)			# æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿
+    elsif apiParam.has_key?(:EXPTYPE)			# 整数定数式パラメータ
       if apiIndex.nil?
         if param.is_a?(NumStr)
@@ -188,5 +172,5 @@
 									apiParam.has_key?(:SIGNED))
       end
-    else										# ä¸è¬å®æ°å¼ï¼æå­åãã©ã¡ã¼ã¿
+    else										# 一般定数式／文字列パラメータ
       return(param)
     end
@@ -195,40 +179,39 @@
 
   #
-  #  æå®ãããã§ã¼ãºã®ããã®ãã¹1ã®çæç©ã®èª­ã¿è¾¼ã¿
+  #  指定したフェーズのためのパス1の生成物の読み込み
   #
   def self.ReadPhase(phase)
     #
-    #  ãªãã¸ã§ã¯ãIDã®å²å½ã¦
-    #
-    # å²ãå½ã¦ããªãã¸ã§ã¯ãIDã¯ï¼@objidValuesã«ä¿æããï¼@objidValuesã¯ï¼
-    # 2éã®ããã·ã¥ï¼ããã·ã¥ã®ããã·ã¥ï¼ã§ããï¼
-    #
-    # å
-·ä½çã«ã¯ï¼@objidValuesã¯ï¼ãªãã¸ã§ã¯ãIDã®ãã©ã¡ã¼ã¿åï¼ä¾ãã°ï¼ã»
-    # ããã©IDã§ããã°"semid"ï¼ãããä¿æããå¤æ°åã¯ï¼objidParamNameã¨ã
-    # ãï¼ãã­ã¼ã¨ãï¼ãã®ãªãã¸ã§ã¯ãIDã®å²å½ã¦è¡¨ï¼ãããä¿æããå¤æ°å
-    # ã¯ï¼objidListã¨ããï¼ãå¤ã¨ããããã·ã¥ã§ããï¼ãªãã¸ã§ã¯ãIDã®å²å½
-    # ã¦è¡¨ã¯ï¼ãªãã¸ã§ã¯ãåï¼ãããä¿æããå¤æ°åã¯ï¼objNameã¨ããï¼ãã­ã¼
-    # ã¨ãï¼ãã®IDçªå·ï¼ãããä¿æããå¤æ°åã¯ï¼objidNumberã¨ããï¼ãå¤ã¨
-    # ããããã·ã¥ã§ããï¼
-    #
-    # ä¾ãã°ï¼ã»ããã©SEM1ã®IDçªå·ã1ã®å ´åã«ã¯ï¼æ¬¡ã®ããã«è¨­å®ãããï¼
+    #  オブジェクトIDの割当て
+    #
+    # 割り当てたオブジェクトIDは，@objidValuesに保持する．@objidValuesは，
+    # 2重のハッシュ（ハッシュのハッシュ）である．
+    #
+    # 具体的には，@objidValuesは，オブジェクトIDのパラメータ名（例えば，セ
+    # マフォIDであれば"semid"．これを保持する変数名は，objidParamNameとす
+    # る）をキーとし，そのオブジェクトIDの割当て表（これを保持する変数名
+    # は，objidListとする）を値とするハッシュである．オブジェクトIDの割当
+    # て表は，オブジェクト名（これを保持する変数名は，objNameとする）をキー
+    # とし，そのID番号（これを保持する変数名は，objidNumberとする）を値と
+    # するハッシュである．
+    #
+    # 例えば，セマフォSEM1のID番号が1の場合には，次のように設定される．
     #   @objidValues["semid"]["SEM1"] == 1
     #
 
-    # IDçªå·å²ãå½ã¦ã®åå¦ç
+    # ID番号割り当ての前処理
     objidParamNameList = []
     $cfgFileInfo.each do |cfgInfo|
-      # ããªãã­ã»ããµãã£ã¬ã¯ãã£ãã¯èª­ã¿é£ã°ã
+      # プリプロセッサディレクティブは読み飛ばす
       next if cfgInfo.has_key?(:DIRECTIVE)
 
       apiDef = $apiDefinition[cfgInfo[:APINAME]]
-      # ç°ãªããã§ã¼ãºã®éçAPIã¯èª­ã¿é£ã°ã
+      # 異なるフェーズの静的APIは読み飛ばす
       next if apiDef[:PHASE] != phase
 
       apiIndex = cfgInfo[:INDEX]
       if !apiIndex.nil?
-        # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãå­å¨ããªããã°èª­ã¿é£
-        # ã°ãï¼ifdefç­ã§æ¶ããéçAPIï¼
+        # シンボルファイルに静的APIのインデックスが存在しなければ読み飛
+        # ばす（ifdef等で消えた静的API）
         symbol = "#{$cfg1_prefix}static_api_#{apiIndex}"
         next unless @symbolAddress.has_key?(symbol)
@@ -240,6 +223,5 @@
           objName = cfgInfo[objidParamName]
           if $inputObjid.has_key?(objName)
-            # IDçªå·å
-¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å
+            # ID番号入力ファイルに定義されていた場合
             @objidValues[objidParamName][objName] = $inputObjid[objName]
           else
@@ -251,21 +233,20 @@
     end
 
-    # IDçªå·ã®å²å½ã¦å¦ç
+    # ID番号の割当て処理
     objidParamNameList.each do |objidParamName|
       objidList = @objidValues[objidParamName]
 
-      # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãï¼ä½¿ç¨ãããã®ããæ¶ãã¦ããï¼
+      # 未使用のID番号のリスト（使用したものから消していく）
       unusedObjidList = (1.upto(objidList.keys.size)).to_a
 
-      # å²ãå½ã¦æ¸ã¿ã®IDçªå·ã®å¦ç
+      # 割り当て済みのID番号の処理
       objidList.each do |objName, objidNumber|
         if $inputObjid.has_key?(objName)
           objidIndex = unusedObjidList.index($inputObjid[objName])
           if objidIndex.nil?
-            # IDçªå·å
-¥åãã¡ã¤ã«ã§æå®ãããå¤ãä¸æ­£
+            # ID番号入力ファイルで指定された値が不正
             error_exit("value of `#{objName}' in ID input file is illegal")
           else
-            # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãããåé¤
+            # 未使用のID番号のリストから削除
             unusedObjidList.delete_at(objidIndex)
           end
@@ -273,8 +254,8 @@
       end
 
-      # IDçªå·ã®å²å½ã¦
+      # ID番号の割当て
       objidList.each do |objName, objidNumber|
         if objidList[objName].nil?
-          # ä»¥ä¸ã§ï¼@objidValuesãæ¸ãæãã¦ãã
+          # 以下で，@objidValuesを書き換えている
           objidList[objName] = unusedObjidList.shift
         end
@@ -283,12 +264,12 @@
 
     #
-    #  éçAPIãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´
+    #  静的APIデータをコンフィギュレーションデータ（$cfgData）に格納
     #
     $cfgFileInfo.each do |cfgInfo|
-      # ããªãã­ã»ããµãã£ã¬ã¯ãã£ãã¯èª­ã¿é£ã°ã
+      # プリプロセッサディレクティブは読み飛ばす
       next if cfgInfo.has_key?(:DIRECTIVE)
 
       apiDef = $apiDefinition[cfgInfo[:APINAME]]
-      # ç°ãªããã§ã¼ãºã®éçAPIã¯èª­ã¿é£ã°ã
+      # 異なるフェーズの静的APIは読み飛ばす
       next if apiDef[:PHASE] != phase
 
@@ -296,16 +277,16 @@
       apiIndex = cfgInfo[:INDEX]
       if !apiIndex.nil?
-        # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãå­å¨ããªããã°èª­ã¿é£
-        # ã°ãï¼ifdefç­ã§æ¶ããéçAPIï¼
+        # シンボルファイルに静的APIのインデックスが存在しなければ読み飛
+        # ばす（ifdef等で消えた静的API）
         symbol = "#{$cfg1_prefix}static_api_#{apiIndex}"
         next unless @symbolAddress.has_key?(symbol)
       end
 
-      # ãã©ã¡ã¼ã¿ã®å¤ãããã·ã¥å½¢å¼ã«æ ¼ç´
+      # パラメータの値をハッシュ形式に格納
       params = {}
       apiDef[:PARAM].each do |apiParam|
         next unless apiParam.has_key?(:NAME)
         paramName = apiParam[:NAME]
-        next unless cfgInfo.has_key?(paramName)		# ãã©ã¡ã¼ã¿ããªãå ´å
+        next unless cfgInfo.has_key?(paramName)		# パラメータがない場合
         paramData = cfgInfo[paramName]
 
@@ -322,5 +303,5 @@
       end
 
-      # ãã¡ã¤ã³IDãè¿½å 
+      # ドメインIDを追加
       if cfgInfo.has_key?(:DOMAIN)
         domainName = cfgInfo[:DOMAIN]
@@ -328,5 +309,5 @@
       end
 
-      # ã¯ã©ã¹IDãè¿½å 
+      # クラスIDを追加
       if cfgInfo.has_key?(:CLASS)
         if apiIndex.nil?
@@ -339,15 +320,15 @@
       end
 
-      # APIåï¼ãã¡ã¤ã«åï¼è¡çªå·ãè¿½å 
+      # API名，ファイル名，行番号を追加
       params[:apiname] = cfgInfo[:APINAME]
       params[:_file_] = cfgInfo[:_FILE_]
       params[:_line_] = cfgInfo[:_LINE_]
 
-      # ç»é²ã­ã¼ãæ±ºå®ãã
+      # 登録キーを決定する
       if apiDef.has_key?(:KEYPAR)
         keyParam = params[apiDef[:KEYPAR].to_sym]
         key = keyParam.val
         if $cfgData[apiSym].has_key?(key)
-          # ç»é²ã­ã¼ã®éè¤
+          # 登録キーの重複
           error("E_OBJ: #{apiDef[:KEYPAR]} `#{keyParam}' " \
 								"is duplicated in #{cfgInfo[:APINAME]}",
@@ -362,5 +343,5 @@
 
   #
-  #  IDçªå·åºåãã¡ã¤ã«ã®çæ
+  #  ID番号出力ファイルの生成
   #
   def self.OutputId(fileName)
@@ -375,10 +356,9 @@
 
 #
-#  ãã¹2ã®å¦ç
+#  パス2の処理
 #
 def Pass2
   #
-  #  ãã¹1ããå¼ãæ¸¡ãããæ
-å ±ããã¡ã¤ã«ããèª­ã¿è¾¼ã
+  #  パス1から引き渡される情報をファイルから読み込む
   #
   db = PStore.new(CFG1_OUT_DB)
@@ -393,16 +373,16 @@
 
   #
-  #  ãã¹1ã®çæç©ãèª­ã¿è¾¼ã
+  #  パス1の生成物を読み込む
   #
   Cfg1Out.Read()
-  abort if $errorFlag					# ã¨ã©ã¼çºçæã¯abortãã
-
-  #
-  #  å¤åå¾ã·ã³ãã«ãã°ã­ã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã
+  abort if $errorFlag					# エラー発生時はabortする
+
+  #
+  #  値取得シンボルをグローバル変数として定義する
   #
   DefineSymbolValue()
 
   #
-  #  çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã
+  #  生成スクリプト（trbファイル）を実行する
   #
   $trbFileNames.each do |trbFileName|
@@ -415,5 +395,5 @@
 
   #
-  #  IDçªå·åºåãã¡ã¤ã«ã®çæ
+  #  ID番号出力ファイルの生成
   #
   if !$idOutputFileName.nil?
@@ -422,6 +402,5 @@
 
   #
-  #  ãã¹3ã«å¼ãæ¸¡ãæ
-å ±ããã¡ã¤ã«ã«çæ
+  #  パス3に引き渡す情報をファイルに生成
   #
   if $omitOutputDb.nil?
Index: azure_iot_hub/trunk/asp3_dcre/configure.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/configure.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/configure.rb	(revision 389)
@@ -10,47 +10,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
-# 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
+# 
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -61,79 +46,74 @@
 require "shell"
 
-#  ãªãã·ã§ã³ã®å®ç¾©
-#
-#  -T <target>			ã¿ã¼ã²ããåï¼å¿
-é ï¼
-#  -a <appldirs>		ã¢ããªã±ã¼ã·ã§ã³ã®ãã£ã¬ã¯ããªåï¼è¤æ°æå®å¯ï¼ã
-#						ãã©ã«ãã¯sampleãã£ã¬ã¯ããªï¼
-#  -A <applname>		ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã åï¼ããã©ã«ãã¯sample1ï¼
-#  -t					ã¡ã¤ã³ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ããªã³ã¯å¯¾è±¡ã«å«ããªã
-#  -c <cfgfile>			ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ï¼.cfgãã¡ã¤
-#						ã«åï¼å
-#  -C <cdlflle>			ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«ï¼.cdlãã¡ã¤ã«ï¼å
-#  -U <applobjs>		ä»ã®ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ãã¡ã¤ã«
-#						ï¼.oãã¡ã¤ã«åã§æå®ï¼è¤æ°æå®å¯ï¼
-#  -S <syssvcobjs>		ã·ã¹ãã ãµã¼ãã¹ã®ãã­ã°ã©ã ãã¡ã¤ã«
-#						ï¼.oãã¡ã¤ã«åã§æå®ï¼è¤æ°æå®å¯ï¼
-#  -L <kernel_lib>		ã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ã®ãã£ã¬ã¯ããªå
-#						ï¼çç¥ããå ´åï¼ã«ã¼ãã«ã©ã¤ãã©ãªãmakeããï¼
-#  -f					ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãããã©ããã®æå®
-#  -D <srcdir>			ã«ã¼ãã«ã½ã¼ã¹ã®ç½®ããã¦ãããã£ã¬ã¯ããª
-#  -l <srclang>			ãã­ã°ã©ãã³ã°è¨èªï¼ç¾æç¹ã§ã¯cã¨c++ã®ã¿ãµãã¼ãï¼
-#  -m <tempmakefile>	Makefileã®ãã³ãã¬ã¼ãã®ãã¡ã¤ã«åã®æå®ï¼ããã©ã«
-#						ãã¯sampleãã£ã¬ã¯ããªã®Makefileï¼
-#  -d <depdir>			ä¾å­é¢ä¿ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªåï¼ããã©ã«ãã¯depsï¼
-#  -w					TECSãä½¿ç¨ããªã
-#  -r					ãã¬ã¼ã¹ã­ã°è¨é²ã®ãµã³ãã«ã³ã¼ããä½¿ç¨ãããã©ãã
-#						ã®æå®
-#  -V <devtooldir>		éçºãã¼ã«ï¼ã³ã³ãã¤ã©ç­ï¼ã®ç½®ããã¦ãããã£ã¬ã¯ããª
-#  -R <ruby>			rubyã®ãã¹åï¼æç¤ºçã«æå®ããå ´åï¼
-#  -g <cfg>				ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ï¼cfgï¼ã®ãã¹å
-#  -G <tecsgen>			TECSã¸ã§ãã¬ã¼ã¿ï¼tecsgenï¼ã®ãã¹å
-#  -o <options>			ã³ã³ãã¤ã«ãªãã·ã§ã³ï¼COPTSã«è¿½å ï¼
-#  -O <options>			ã·ã³ãã«å®ç¾©ãªãã·ã§ã³ï¼CDEFSã«è¿½å ï¼
-#  -k <options>			ãªã³ã«ãªãã·ã§ã³ï¼LDFLAGSç­ã«è¿½å ï¼
-#  -e <tinetdir>		TINET ã®ã½ã¼ã¹ã®ç½®ããã¦ãããã£ã¬ã¯ããª
-#  -i <net_if>			ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ï¼TINETãæå¹ã®å ´åã¯å¿
-é ï¼
-#						etherãpppãloop ã®ä½ãããæå®ããã
-#  -v <net_dev>			ã¤ã¼ãµãããã»ãã£ãã¤ã¹ãã©ã¤ã
-#  						ï¼ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã« ether ãæå®ããå ´åã¯å¿
-é ï¼
-#  -n <net_proto>		ãããã¯ã¼ã¯å±¤ãã­ãã³ã«ï¼TINETãæå¹ã®å ´åã¯å¿
-é ï¼
-#						inet6ãinet4ãinet6/inet4ãinet6mãinet6m/inet4 ã®ä½ãããæå®ããã
-#  -s <trans_proto>		ãã©ã³ã¹ãã¼ãå±¤ãã­ãã³ã«ï¼TINETãæå¹ã®å ´åã¯å¿
-é ï¼
-#						tcpãudpãtcp/udp ã®ä½ãããæå®ããã
-
-#  ä½¿ç¨ä¾(1)
+#  オプションの定義
+#
+#  -T <target>			ターゲット名（必須）
+#  -a <appldirs>		アプリケーションのディレクトリ名（複数指定可．デ
+#						フォルトはsampleディレクトリ）
+#  -A <applname>		アプリケーションプログラム名（デフォルトはsample1）
+#  -t					メインのオブジェクトファイルをリンク対象に含めない
+#  -c <cfgfile>			システムコンフィギュレーションファイル（.cfgファイ
+#						ル名）名
+#  -C <cdlflle>			コンポーネント記述ファイル（.cdlファイル）名
+#  -U <applobjs>		他のアプリケーションプログラムファイル
+#						（.oファイル名で指定．複数指定可）
+#  -S <syssvcobjs>		システムサービスのプログラムファイル
+#						（.oファイル名で指定．複数指定可）
+#  -L <kernel_lib>		カーネルライブラリ（libkernel.a）のディレクトリ名
+#						（省略した場合，カーネルライブラリもmakeする）
+#  -f					カーネルを関数単位でコンパイルするかどうかの指定
+#  -D <srcdir>			カーネルソースの置かれているディレクトリ
+#  -l <srclang>			プログラミング言語（現時点ではcとc++のみサポート）
+#  -m <tempmakefile>	Makefileのテンプレートのファイル名の指定（デフォル
+#						トはsampleディレクトリのMakefile）
+#  -d <depdir>			依存関係ファイルのディレクトリ名（デフォルトはdeps）
+#  -w					TECSを使用しない
+#  -r					トレースログ記録のサンプルコードを使用するかどうか
+#						の指定
+#  -V <devtooldir>		開発ツール（コンパイラ等）の置かれているディレクトリ
+#  -R <ruby>			rubyのパス名（明示的に指定する場合）
+#  -g <cfg>				コンフィギュレータ（cfg）のパス名
+#  -G <tecsgen>			TECSジェネレータ（tecsgen）のパス名
+#  -o <options>			コンパイルオプション（COPTSに追加）
+#  -O <options>			シンボル定義オプション（CDEFSに追加）
+#  -k <options>			リンカオプション（LDFLAGS等に追加）
+#  -e <tinetdir>		TINET のソースの置かれているディレクトリ
+#  -i <net_if>			ネットワークインタフェース（TINETが有効の場合は必須）
+#						ether、ppp、loop の何れかを指定する。
+#  -v <net_dev>			イーサネット・ディバイスドライバ
+#  						（ネットワークインタフェースに ether を指定した場合は必須）
+#  -n <net_proto>		ネットワーク層プロトコル（TINETが有効の場合は必須）
+#						inet6、inet4、inet6/inet4、inet6m、inet6m/inet4 の何れかを指定する。
+#  -s <trans_proto>		トランスポート層プロトコル（TINETが有効の場合は必須）
+#						tcp、udp、tcp/udp の何れかを指定する。
+
+#  使用例(1)
 #
 #  % ../configure.rb -T ct11mpcore_gcc -O "-DTOPPERS_USE_QEMU" \
 #					-A perf1 -a ../test -S "test_svc.o histogram.o"
 #
-#  ä½¿ç¨ä¾(2)
+#  使用例(2)
 #
 #  % ../configure.rb -T macosx_gcc -L .
-#	ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã¯ï¼sample1ã«ãªãï¼
-#
-#  ä½¿ç¨ä¾(3)
+#	アプリケーションプログラムは，sample1になる．
+#
+#  使用例(3)
 #
 #  % ../configure.rb -T ct11mpcore_gcc -O "-DTOPPERS_USE_QEMU" -A tSample2 -t
-#	ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã¯ï¼TECSçã®ãµã³ãã«ãã­ã°ã©ã ã«ãªãï¼
-#
-#  ä½¿ç¨ä¾(4)
+#	アプリケーションプログラムは，TECS版のサンプルプログラムになる．
+#
+#  使用例(4)
 #
 #  % ../configure.rb -T ct11mpcore_gcc PRC_NUM=4
-#	PRC_NUMã4ã«å®ç¾©ããï¼
-#
-#  ä½¿ç¨ä¾(5)
+#	PRC_NUMを4に定義する．
+#
+#  使用例(5)
 #
 #  % ../configure.rb -T gr_sakura_gcc -A sample1n \
 #					-e tinet -i ether -v if_rx62n -n inet4 -s tcp -U sample1.o
-#	TINETãæå¹ã«ããï¼
-
-#
-#  å¤æ°ã®åæå
+#	TINETを有効にする．
+
+#
+#  変数の初期化
 #
 $target = nil
@@ -154,5 +134,5 @@
 
 #
-#  ãªãã·ã§ã³ã®å¦ç
+#  オプションの処理
 #
 OptionParser.new(nil, 22) do |opt|
@@ -245,5 +225,5 @@
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®æ¡å¼µå­ãè¿ã
+#  オブジェクトファイル名の拡張子を返す
 #
 def GetObjectExtension
@@ -256,5 +236,5 @@
 
 #
-#  å¤æ°ã®ããã©ã«ãå¤
+#  変数のデフォルト値
 #
 if $appldirs.empty?
@@ -268,5 +248,5 @@
 $cdlfile ||= $applname + ".cdl"
 if $srcdir.nil?
-  # ã½ã¼ã¹ãã£ã¬ã¯ããªåãåãåºã
+  # ソースディレクトリ名を取り出す
   if /(.*)\/configure/ =~ $0
     $srcdir = $1
@@ -285,5 +265,5 @@
 
 #
-#  -Tãªãã·ã§ã³ã¨ã¿ã¼ã²ããä¾å­é¨ãã£ã¬ã¯ããªã®ç¢ºèª
+#  -Tオプションとターゲット依存部ディレクトリの確認
 #
 if $target.nil?
@@ -304,5 +284,5 @@
 
 #
-#  å¤æ°ãã¼ãã«ã®ä½æ
+#  変数テーブルの作成
 #
 $vartable = Hash.new("")
@@ -348,5 +328,5 @@
 
 #
-#  ãã¡ã¤ã«ãå¤æãã
+#  ファイルを変換する
 #
 def convert(inFileName, outFileName)
@@ -375,10 +355,10 @@
 
 #
-#  Makefileã®çæ
+#  Makefileの生成
 #
 convert($tempmakefile, "Makefile")
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®ä½æ
+#  依存関係ファイルのディレクトリの作成
 #
 if !File.directory?($depdir)
Index: azure_iot_hub/trunk/asp3_dcre/gdic/adafruit_ssd1306/Makefile.config
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/gdic/adafruit_ssd1306/Makefile.config	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/gdic/adafruit_ssd1306/Makefile.config	(revision 389)
@@ -10,44 +10,30 @@
 #   Copyright (C) 2015-2017 by TOPPERS PROJECT Educational Working Group.
 #
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
-#   ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
-#   è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
-#   ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
-#   å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+#   によって公表されている GNU General Public License の Version 2 に記
+#   述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+#   を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+#   利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 #
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
-#   å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
-#   æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+#   含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+#   接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 #
 #  @(#) $Id$
@@ -55,14 +41,14 @@
 
 #
-#  Makefile ã®ãã­ã»ããµä¾å­ (adafruit ssd1306:OLEDç¨)
+#  Makefile のプロセッサ依存 (adafruit ssd1306:OLED用)
 #
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES := $(INCLUDES) -I$(SRCDIR)/gdic/adafruit_ssd1306
 
 #
-#  ADAFRUIT SSD1306 LCD DRIVER(GDIC)ã«é¢ããå®ç¾©
+#  ADAFRUIT SSD1306 LCD DRIVER(GDIC)に関する定義
 #
 SYSSVC_DIRS := $(SYSSVC_DIRS):$(SRCDIR)/gdic/adafruit_ssd1306
Index: azure_iot_hub/trunk/asp3_dcre/gdic/adafruit_ssd1306/adafruit_ssd1306.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/gdic/adafruit_ssd1306/adafruit_ssd1306.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/gdic/adafruit_ssd1306/adafruit_ssd1306.h	(revision 389)
@@ -122,7 +122,6 @@
 typedef struct
 {
-	uint16_t                _width;		/* å¹
-ãã¯ã»ã«æ° */
-	uint16_t				_height;	/* é«ããã¯ã»ã«æ° */
+	uint16_t                _width;		/* 幅ピクセル数 */
+	uint16_t				_height;	/* 高さピクセル数 */
 	int16_t cursor_x, cursor_y;
 	uint16_t textcolor, textbgcolor;
Index: azure_iot_hub/trunk/asp3_dcre/include/itron.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/itron.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/itron.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,18 +41,14 @@
 
 /*
- *		ITRONä»æ§å
-±éè¦å®ã®ãã¼ã¿åã»å®æ°ã»ãã¯ã­
+ *		ITRON仕様共通規定のデータ型・定数・マクロ
  *
- *  ãã®ããããã¡ã¤ã«ã¯ï¼ITRONä»æ§å
-±éè¦å®ã®ãã¼ã¿åã»å®æ°ã»ãã¯ã­ã®ä¸­
- *  ã§ï¼TOPPERSå
-±éããããã¡ã¤ã«ã«å«ã¾ããªããã®ã®å®ç¾©ãå«ãï¼ITRONä»
- *  æ§ã¨ã®äºææ§ãå¿
-è¦ã¨ããã¢ããªã±ã¼ã·ã§ã³ãã¤ã³ã¯ã«ã¼ããããã¨ãæ³
- *  å®ãã¦ããï¼
+ *  このヘッダファイルは，ITRON仕様共通規定のデータ型・定数・マクロの中
+ *  で，TOPPERS共通ヘッダファイルに含まれないものの定義を含む．ITRON仕
+ *  様との互換性を必要とするアプリケーションがインクルードすることを想
+ *  定している．
  *
- *  ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ
- *  ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ããï¼ããã«ããï¼ãã¯ã­å®ç¾©ä»¥å¤ã
- *  é¤ãããã«ãªã£ã¦ããï¼
+ *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
+ *  は，TOPPERS_MACRO_ONLYを定義しておく．これにより，マクロ定義以外を
+ *  除くようになっている．
  */
 
@@ -80,81 +61,73 @@
 
 /*
- *  TOPPERSå
-±éããããã¡ã¤ã«
+ *  TOPPERS共通ヘッダファイル
  */
 #include <t_stddef.h>
 
 /*
- *  ITRONä»æ§å
-±éãã¼ã¿å
+ *  ITRON仕様共通データ型
  */
 #ifndef TOPPERS_MACRO_ONLY
 
 #ifdef INT8_MAX
-typedef	int8_t			B;			/* ç¬¦å·ä»ã8ãããæ´æ° */
+typedef	int8_t			B;			/* 符号付き8ビット整数 */
 #endif /* INT8_MAX */
 
 #ifdef UINT8_MAX
-typedef	uint8_t			UB;			/* ç¬¦å·ç¡ã8ãããæ´æ° */
-typedef	uint8_t			VB;			/* åãå®ã¾ããªã8ãããã®å¤ */
+typedef	uint8_t			UB;			/* 符号無し8ビット整数 */
+typedef	uint8_t			VB;			/* 型が定まらない8ビットの値 */
 #endif /* UINT8_MAX */
 
-typedef	int16_t			H;			/* ç¬¦å·ä»ã16ãããæ´æ° */
-typedef	uint16_t		UH;			/* ç¬¦å·ç¡ã16ãããæ´æ° */
-typedef	uint16_t		VH;			/* åãå®ã¾ããªã16ãããã®å¤ */
+typedef	int16_t			H;			/* 符号付き16ビット整数 */
+typedef	uint16_t		UH;			/* 符号無し16ビット整数 */
+typedef	uint16_t		VH;			/* 型が定まらない16ビットの値 */
 
-typedef	int32_t			W;			/* ç¬¦å·ä»ã32ãããæ´æ° */
-typedef	uint32_t		UW;			/* ç¬¦å·ç¡ã32ãããæ´æ° */
-typedef	uint32_t		VW;			/* åãå®ã¾ããªã32ãããã®å¤ */
+typedef	int32_t			W;			/* 符号付き32ビット整数 */
+typedef	uint32_t		UW;			/* 符号無し32ビット整数 */
+typedef	uint32_t		VW;			/* 型が定まらない32ビットの値 */
 
 #ifdef INT64_MAX
-typedef	int64_t			D;			/* ç¬¦å·ä»ã64ãããæ´æ° */
+typedef	int64_t			D;			/* 符号付き64ビット整数 */
 #endif /* INT64_MAX */
 
 #ifdef UINT64_MAX
-typedef	uint64_t		UD;			/* ç¬¦å·ç¡ã64ãããæ´æ° */
-typedef	uint64_t		VD;			/* åãå®ã¾ããªã64ãããã®å¤ */
+typedef	uint64_t		UD;			/* 符号無し64ビット整数 */
+typedef	uint64_t		VD;			/* 型が定まらない64ビットの値 */
 #endif /* UINT64_MAX */
 
-typedef	void			*VP;		/* åãå®ã¾ããªããã®ã¸ã®ãã¤ã³ã¿ */
+typedef	void			*VP;		/* 型が定まらないものへのポインタ */
 
-typedef int_t			INT;		/* èªç¶ãªãµã¤ãºã®ç¬¦å·ä»ãæ´æ° */
-typedef uint_t			UINT;		/* èªç¶ãªãµã¤ãºã®ç¬¦å·ç¡ãæ´æ° */
+typedef int_t			INT;		/* 自然なサイズの符号付き整数 */
+typedef uint_t			UINT;		/* 自然なサイズの符号無し整数 */
 
-typedef bool_t			BOOL;		/* çå½å¤ */
+typedef bool_t			BOOL;		/* 真偽値 */
 
-typedef size_t			SIZE;		/* ã¡ã¢ãªé åã®ãµã¤ãºãè¡¨ãç¬¦å·ç¡ãæ´æ°*/
-typedef	intptr_t		VP_INT;		/* ãã¤ã³ã¿ã¾ãã¯ç¬¦å·ä»ãæ´æ° */
+typedef size_t			SIZE;		/* メモリ領域のサイズを表す符号無し整数*/
+typedef	intptr_t		VP_INT;		/* ポインタまたは符号付き整数 */
 
 #endif /* TOPPERS_MACRO_ONLY */
 
 /*
- *  ITRONä»æ§å
-±éå®æ°
+ *  ITRON仕様共通定数
  */
-#define	TRUE		true			/* ç */
-#define	FALSE		false			/* å½ */
+#define	TRUE		true			/* 真 */
+#define	FALSE		false			/* 偽 */
 
 /*
- *  å¼·å¶å¾
-ã¡ç¶æ
-ããã®å¼·å¶åé
+ *  強制待ち状態からの強制再開
  */
 #define frsm_tsk(tskid)		rsm_tsk(tskid)
 
 /*
- *  ãªãã¸ã§ã¯ãå±æ§ã®å®ç¾©
+ *  オブジェクト属性の定義
  */
-#define TA_HLNG			UINT_C(0x00)	/* é«ç´è¨èªç¨ã¤ã³ã¿ãã§ã¼ã¹ */
-#define TA_TFIFO		UINT_C(0x00)	/* ã¿ã¹ã¯ã®å¾
-ã¡è¡åãFIFOé ã« */
-#define TA_WSGL			UINT_C(0x00)	/* å¾
-ã¡ã¿ã¹ã¯ã¯1ã¤ã®ã¿ */
+#define TA_HLNG			UINT_C(0x00)	/* 高級言語用インタフェース */
+#define TA_TFIFO		UINT_C(0x00)	/* タスクの待ち行列をFIFO順に */
+#define TA_WSGL			UINT_C(0x00)	/* 待ちタスクは1つのみ */
 
 /*
- *  ãã¹ãåæ°ã®æå¤§å¤
+ *  ネスト回数の最大値
  */
-#define TMAX_SUSCNT		UINT_C(1)		/* å¼·å¶å¾
-ã¡è¦æ±ãã¹ãæ°ã®æå¤§å¤ */
+#define TMAX_SUSCNT		UINT_C(1)		/* 強制待ち要求ネスト数の最大値 */
 
 #ifdef __cplusplus
Index: azure_iot_hub/trunk/asp3_dcre/include/kernel.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/kernel.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/kernel.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,13 +42,12 @@
 
 /*
- *		TOPPERS/ASPã«ã¼ãã« æ¨æºããããã¡ã¤ã«
+ *		TOPPERS/ASPカーネル 標準ヘッダファイル
  *
- *  TOPPERS/ASPã«ã¼ãã«ããµãã¼ããããµã¼ãã¹ã³ã¼ã«ã®å®£è¨ã¨ï¼å¿
-è¦ãªãã¼
- *  ã¿åï¼å®æ°ï¼ãã¯ã­ã®å®ç¾©ãå«ãããããã¡ã¤ã«ï¼
+ *  TOPPERS/ASPカーネルがサポートするサービスコールの宣言と，必要なデー
+ *  タ型，定数，マクロの定義を含むヘッダファイル．
  *
- *  ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ
- *  ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ããï¼ããã«ããï¼ãã¯ã­å®ç¾©ä»¥å¤ã
- *  é¤ãããã«ãªã£ã¦ããï¼
+ *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
+ *  は，TOPPERS_MACRO_ONLYを定義しておく．これにより，マクロ定義以外を
+ *  除くようになっている．
  */
 
@@ -76,55 +60,54 @@
 
 /*
- *	TOPPERSå
-±éã®ãã¼ã¿åã»å®æ°ã»ãã¯ã­
+ *	TOPPERS共通のデータ型・定数・マクロ
  */
 #include <t_stddef.h>
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨
+ *  ターゲット依存部
  */
 #include "target_kernel.h"
 
 /*
- *  ãµãã¼ãããæ©è½
+ *  サポートする機能
  */
 #ifdef TOPPERS_TARGET_SUPPORT_DIS_INT
-#define TOPPERS_SUPPORT_DIS_INT			/* dis_intããµãã¼ãããã¦ãã */
+#define TOPPERS_SUPPORT_DIS_INT			/* dis_intがサポートされている */
 #endif /* TOPPERS_TARGET_SUPPORT_DIS_INT */
 
 #ifdef TOPPERS_TARGET_SUPPORT_ENA_INT
-#define TOPPERS_SUPPORT_ENA_INT			/* ena_intããµãã¼ãããã¦ãã */
+#define TOPPERS_SUPPORT_ENA_INT			/* ena_intがサポートされている */
 #endif /* TOPPERS_TARGET_SUPPORT_ENA_INT */
 
 #ifdef TOPPERS_TARGET_SUPPORT_CLR_INT
-#define TOPPERS_SUPPORT_CLR_INT			/* clr_intããµãã¼ãããã¦ãã */
+#define TOPPERS_SUPPORT_CLR_INT			/* clr_intがサポートされている */
 #endif /* TOPPERS_TARGET_SUPPORT_CLR_INT */
 
 #ifdef TOPPERS_TARGET_SUPPORT_RAS_INT
-#define TOPPERS_SUPPORT_RAS_INT			/* ras_intããµãã¼ãããã¦ãã */
+#define TOPPERS_SUPPORT_RAS_INT			/* ras_intがサポートされている */
 #endif /* TOPPERS_TARGET_SUPPORT_RAS_INT */
 
 #ifdef TOPPERS_TARGET_SUPPORT_PRB_INT
-#define TOPPERS_SUPPORT_PRB_INT			/* prb_intããµãã¼ãããã¦ãã */
+#define TOPPERS_SUPPORT_PRB_INT			/* prb_intがサポートされている */
 #endif /* TOPPERS_TARGET_SUPPORT_PRB_INT */
 
-#define TOPPERS_SUPPORT_DYNAMIC_CRE		/* åççææ©è½æ¡å¼µ */
+#define TOPPERS_SUPPORT_DYNAMIC_CRE		/* 動的生成機能拡張 */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  ãã¼ã¿åã®å®ç¾©
- */
-
-/*
- *  ããããã¿ã¼ã³ããªãã¸ã§ã¯ãçªå·ã®åå®ç¾©
- */
-typedef	uint_t		FLGPTN;		/* ã¤ãã³ããã©ã°ã®ããããã¿ã¼ã³ */
-typedef	uint_t		INTNO;		/* å²è¾¼ã¿çªå· */
-typedef	uint_t		INHNO;		/* å²è¾¼ã¿ãã³ãã©çªå· */
-typedef	uint_t		EXCNO;		/* CPUä¾å¤ãã³ãã©çªå· */
-
-/*
- *  å¦çåä½ã®åå®ç¾©
+ *  データ型の定義
+ */
+
+/*
+ *  ビットパターンやオブジェクト番号の型定義
+ */
+typedef	uint_t		FLGPTN;		/* イベントフラグのビットパターン */
+typedef	uint_t		INTNO;		/* 割込み番号 */
+typedef	uint_t		INHNO;		/* 割込みハンドラ番号 */
+typedef	uint_t		EXCNO;		/* CPU例外ハンドラ番号 */
+
+/*
+ *  処理単位の型定義
  */
 typedef void	(*TASK)(intptr_t exinf);
@@ -137,65 +120,62 @@
 
 /*
- *  ã¡ã¢ãªé åç¢ºä¿ã®ããã®åå®ç¾©
+ *  メモリ領域確保のための型定義
  */
 #ifndef TOPPERS_STK_T
 #define TOPPERS_STK_T	intptr_t
 #endif /* TOPPERS_STK_T */
-typedef	TOPPERS_STK_T	STK_T;	/* ã¹ã¿ãã¯é åãç¢ºä¿ããããã®å */
+typedef	TOPPERS_STK_T	STK_T;	/* スタック領域を確保するための型 */
 
 #ifndef TOPPERS_MPF_T
 #define TOPPERS_MPF_T	intptr_t
 #endif /* TOPPERS_MPF_T */
-typedef	TOPPERS_MPF_T	MPF_T;	/* åºå®é·ã¡ã¢ãªãã¼ã«é åãç¢ºä¿ããããã®å */
-
-/*
- *  ã¿ã¤ã ã¤ãã³ãã®éç¥æ¹æ³ã®ãã±ããå½¢å¼ã®å®ç¾©
- */
-typedef struct {
-	intptr_t	exinf;		/* ã¿ã¤ã ã¤ãã³ããã³ãã©ã®æ¡å¼µæ
-å ± */
-	TMEHDR		tmehdr;		/* ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å
-é ­çªå° */
+typedef	TOPPERS_MPF_T	MPF_T;	/* 固定長メモリプール領域を確保するための型 */
+
+/*
+ *  タイムイベントの通知方法のパケット形式の定義
+ */
+typedef struct {
+	intptr_t	exinf;		/* タイムイベントハンドラの拡張情報 */
+	TMEHDR		tmehdr;		/* タイムイベントハンドラの先頭番地 */
 } T_NFY_HDR;
 
 typedef struct {
-	intptr_t	*p_var;		/* å¤æ°ã®çªå° */
-	intptr_t	value;		/* è¨­å®ããå¤ */
+	intptr_t	*p_var;		/* 変数の番地 */
+	intptr_t	value;		/* 設定する値 */
 } T_NFY_VAR;
 
 typedef struct {
-	intptr_t	*p_var;		/* å¤æ°ã®çªå° */
+	intptr_t	*p_var;		/* 変数の番地 */
 } T_NFY_IVAR;
 
 typedef struct {
-	ID			tskid;		/* ã¿ã¹ã¯ID */
+	ID			tskid;		/* タスクID */
 } T_NFY_TSK;
 
 typedef struct {
-	ID			semid;		/* ã»ããã©ID */
+	ID			semid;		/* セマフォID */
 } T_NFY_SEM;
 
 typedef struct {
-	ID			flgid;		/* ã¤ãã³ããã©ã°ID */
-	FLGPTN		flgptn;		/* ã»ããããããããã¿ã¼ã³ */
+	ID			flgid;		/* イベントフラグID */
+	FLGPTN		flgptn;		/* セットするビットパターン */
 } T_NFY_FLG;
 
 typedef struct {
-	ID			dtqid;		/* ãã¼ã¿ã­ã¥ã¼ID */
-	intptr_t	data;		/* éä¿¡ããå¤ */
+	ID			dtqid;		/* データキューID */
+	intptr_t	data;		/* 送信する値 */
 } T_NFY_DTQ;
 
 typedef struct {
-	intptr_t	*p_var;		/* å¤æ°ã®çªå° */
+	intptr_t	*p_var;		/* 変数の番地 */
 } T_ENFY_VAR;
 
 typedef struct {
-	ID			dtqid;		/* ãã¼ã¿ã­ã¥ã¼ID */
+	ID			dtqid;		/* データキューID */
 } T_ENFY_DTQ;
 
 typedef struct {
-	MODE	nfymode;			/* éç¥å¦çã¢ã¼ã */
-	union {						/* ã¿ã¤ã ã¤ãã³ãã®éç¥ã«é¢ããä»éæ
-å ± */
+	MODE	nfymode;			/* 通知処理モード */
+	union {						/* タイムイベントの通知に関する付随情報 */
 		T_NFY_HDR	handler;
 		T_NFY_VAR	setvar;		
@@ -207,6 +187,5 @@
 		T_NFY_DTQ	snddtq;
 	} nfy;
-	union {						/* ã¨ã©ã¼ã®éç¥ã«é¢ããä»éæ
-å ± */
+	union {						/* エラーの通知に関する付随情報 */
 		T_ENFY_VAR	setvar;
 		T_NFY_IVAR	incvar;		
@@ -220,184 +199,139 @@
 
 /*
- *  ãã±ããå½¢å¼ã®å®ç¾©
+ *  パケット形式の定義
  */
 typedef struct t_ctsk {
-	ATR			tskatr;		/* ã¿ã¹ã¯å±æ§ */
-	intptr_t	exinf;		/* ã¿ã¹ã¯ã®æ¡å¼µæ
-å ± */
-	TASK		task;		/* ã¿ã¹ã¯ã®ã¡ã¤ã³ã«ã¼ãã³ã®å
-é ­çªå° */
-	PRI			itskpri;	/* ã¿ã¹ã¯ã®èµ·åæåªå
-åº¦ */
-	size_t		stksz;		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®ãµã¤ãº */
-	STK_T 		*stk;		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®å
-é ­çªå° */
+	ATR			tskatr;		/* タスク属性 */
+	intptr_t	exinf;		/* タスクの拡張情報 */
+	TASK		task;		/* タスクのメインルーチンの先頭番地 */
+	PRI			itskpri;	/* タスクの起動時優先度 */
+	size_t		stksz;		/* タスクのスタック領域のサイズ */
+	STK_T 		*stk;		/* タスクのスタック領域の先頭番地 */
 } T_CTSK;
 
 typedef struct t_rtsk {
-	STAT	tskstat;	/* ã¿ã¹ã¯ç¶æ
- */
-	PRI		tskpri;		/* ã¿ã¹ã¯ã®ç¾å¨åªå
-åº¦ */
-	PRI		tskbpri;	/* ã¿ã¹ã¯ã®ãã¼ã¹åªå
-åº¦ */
-	STAT	tskwait;	/* å¾
-ã¡è¦å  */
-	ID		wobjid;		/* å¾
-ã¡å¯¾è±¡ã®ãªãã¸ã§ã¯ãã®ID */
-	TMO		lefttmo;	/* ã¿ã¤ã ã¢ã¦ãããã¾ã§ã®æé */
-	uint_t	actcnt;		/* èµ·åè¦æ±ã­ã¥ã¼ã¤ã³ã°æ° */
-	uint_t	wupcnt;		/* èµ·åºè¦æ±ã­ã¥ã¼ã¤ã³ã°æ° */
-	bool_t	raster;		/* ã¿ã¹ã¯çµäºè¦æ±ç¶æ
- */
-	bool_t	dister;		/* ã¿ã¹ã¯çµäºç¦æ­¢ç¶æ
- */
+	STAT	tskstat;	/* タスク状態 */
+	PRI		tskpri;		/* タスクの現在優先度 */
+	PRI		tskbpri;	/* タスクのベース優先度 */
+	STAT	tskwait;	/* 待ち要因 */
+	ID		wobjid;		/* 待ち対象のオブジェクトのID */
+	TMO		lefttmo;	/* タイムアウトするまでの時間 */
+	uint_t	actcnt;		/* 起動要求キューイング数 */
+	uint_t	wupcnt;		/* 起床要求キューイング数 */
+	bool_t	raster;		/* タスク終了要求状態 */
+	bool_t	dister;		/* タスク終了禁止状態 */
 } T_RTSK;
 
 typedef struct t_csem {
-	ATR		sematr;		/* ã»ããã©å±æ§ */
-	uint_t	isemcnt;	/* ã»ããã©ã®åæè³æºæ° */
-	uint_t	maxsem;		/* ã»ããã©ã®æå¤§è³æºæ° */
+	ATR		sematr;		/* セマフォ属性 */
+	uint_t	isemcnt;	/* セマフォの初期資源数 */
+	uint_t	maxsem;		/* セマフォの最大資源数 */
 } T_CSEM;
 
 typedef struct t_rsem {
-	ID		wtskid;		/* ã»ããã©ã®å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯ã®IDçªå· */
-	uint_t	semcnt;		/* ã»ããã©ã®ç¾å¨ã®è³æºæ° */
+	ID		wtskid;		/* セマフォの待ち行列の先頭のタスクのID番号 */
+	uint_t	semcnt;		/* セマフォの現在の資源数 */
 } T_RSEM;
 
 typedef struct t_cflg {
-	ATR		flgatr;		/* ã¤ãã³ããã©ã°å±æ§ */
-	FLGPTN	iflgptn;	/* ã¤ãã³ããã©ã°ã®åæããããã¿ã¼ã³ */
+	ATR		flgatr;		/* イベントフラグ属性 */
+	FLGPTN	iflgptn;	/* イベントフラグの初期ビットパターン */
 } T_CFLG;
 
 typedef struct t_rflg {
-	ID		wtskid;		/* ã¤ãã³ããã©ã°ã®å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯ã®IDçªå· */
-	FLGPTN	flgptn;		/* ã¤ãã³ããã©ã°ã®ç¾å¨ã®ããããã¿ã¼ã³ */
+	ID		wtskid;		/* イベントフラグの待ち行列の先頭のタスクのID番号 */
+	FLGPTN	flgptn;		/* イベントフラグの現在のビットパターン */
 } T_RFLG;
 
 typedef struct t_cdtq {
-	ATR		dtqatr;		/* ãã¼ã¿ã­ã¥ã¼å±æ§ */
-	uint_t	dtqcnt;		/* ãã¼ã¿ã­ã¥ã¼ç®¡çé åã«æ ¼ç´ã§ãããã¼ã¿æ° */
-	void 	*dtqmb;		/* ãã¼ã¿ã­ã¥ã¼ç®¡çé åã®å
-é ­çªå° */
+	ATR		dtqatr;		/* データキュー属性 */
+	uint_t	dtqcnt;		/* データキュー管理領域に格納できるデータ数 */
+	void 	*dtqmb;		/* データキュー管理領域の先頭番地 */
 } T_CDTQ;
 
 typedef struct t_rdtq {
-	ID		stskid;		/* ãã¼ã¿ã­ã¥ã¼ã®éä¿¡å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯ã®IDçªå· */
-	ID		rtskid;		/* ãã¼ã¿ã­ã¥ã¼ã®åä¿¡å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯ã®IDçªå· */
-	uint_t	sdtqcnt;	/* ãã¼ã¿ã­ã¥ã¼ç®¡çé åã«æ ¼ç´ããã¦ãããã¼ã¿ã®æ° */
+	ID		stskid;		/* データキューの送信待ち行列の先頭のタスクのID番号 */
+	ID		rtskid;		/* データキューの受信待ち行列の先頭のタスクのID番号 */
+	uint_t	sdtqcnt;	/* データキュー管理領域に格納されているデータの数 */
 } T_RDTQ;
 
 typedef struct t_cpdq {
-	ATR		pdqatr;		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼å±æ§ */
-	uint_t	pdqcnt;		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åã«æ ¼ç´ã§ãããã¼ã¿æ° */
-	PRI		maxdpri;	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã«éä¿¡ã§ãããã¼ã¿åªå
-åº¦ã®æ
-						   å¤§å¤ */
-	void 	*pdqmb;		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åã®å
-é ­çªå° */
+	ATR		pdqatr;		/* 優先度データキュー属性 */
+	uint_t	pdqcnt;		/* 優先度データキュー管理領域に格納できるデータ数 */
+	PRI		maxdpri;	/* 優先度データキューに送信できるデータ優先度の最
+						   大値 */
+	void 	*pdqmb;		/* 優先度データキュー管理領域の先頭番地 */
 } T_CPDQ;
 
 typedef struct t_rpdq {
-	ID		stskid;		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®éä¿¡å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯
-						   ã®IDçªå· */
-	ID		rtskid;		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®åä¿¡å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯
-						   ã®IDçªå· */
-	uint_t	spdqcnt;	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åã«æ ¼ç´ããã¦ãããã¼
-						   ã¿ã®æ° */
+	ID		stskid;		/* 優先度データキューの送信待ち行列の先頭のタスク
+						   のID番号 */
+	ID		rtskid;		/* 優先度データキューの受信待ち行列の先頭のタスク
+						   のID番号 */
+	uint_t	spdqcnt;	/* 優先度データキュー管理領域に格納されているデー
+						   タの数 */
 } T_RPDQ;
 
 typedef struct t_cmtx {
-	ATR		mtxatr;		/* ãã¥ã¼ããã¯ã¹å±æ§ */
-	PRI		ceilpri;	/* ãã¥ã¼ããã¯ã¹ã®ä¸éåªå
-åº¦ */
+	ATR		mtxatr;		/* ミューテックス属性 */
+	PRI		ceilpri;	/* ミューテックスの上限優先度 */
 } T_CMTX;
 
 typedef struct t_rmtx {
-	ID		htskid;		/* ãã¥ã¼ããã¯ã¹ãã­ãã¯ãã¦ããã¿ã¹ã¯ã®IDçªå· */
-	ID		wtskid;		/* ãã¥ã¼ããã¯ã¹ã®å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯ã®IDçªå· */
+	ID		htskid;		/* ミューテックスをロックしているタスクのID番号 */
+	ID		wtskid;		/* ミューテックスの待ち行列の先頭のタスクのID番号 */
 } T_RMTX;
 
 typedef struct t_cmpf {
-	ATR		mpfatr;		/* åºå®é·ã¡ã¢ãªãã¼ã«å±æ§ */
-	uint_t	blkcnt;		/* ç²å¾ã§ããåºå®é·ã¡ã¢ãªãã­ãã¯ã®æ° */
-	uint_t	blksz;		/* åºå®é·ã¡ã¢ãªãã­ãã¯ã®ãµã¤ãº */
-	MPF_T 	*mpf;		/* åºå®é·ã¡ã¢ãªãã¼ã«é åã®å
-é ­çªå° */
-	void 	*mpfmb;		/* åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé åã®å
-é ­çªå° */
+	ATR		mpfatr;		/* 固定長メモリプール属性 */
+	uint_t	blkcnt;		/* 獲得できる固定長メモリブロックの数 */
+	uint_t	blksz;		/* 固定長メモリブロックのサイズ */
+	MPF_T 	*mpf;		/* 固定長メモリプール領域の先頭番地 */
+	void 	*mpfmb;		/* 固定長メモリプール管理領域の先頭番地 */
 } T_CMPF;
 
 typedef struct t_rmpf {
-	ID		wtskid;		/* åºå®é·ã¡ã¢ãªãã¼ã«ã®å¾
-ã¡è¡åã®å
-é ­ã®ã¿ã¹ã¯ã®
-						   IDçªå· */
-	uint_t	fblkcnt;	/* åºå®é·ã¡ã¢ãªãã¼ã«é åã®ç©ºãã¡ã¢ãªé åã«å²ã
-						   ä»ãããã¨ãã§ããåºå®é·ã¡ã¢ãªãã­ãã¯ã®æ° */
+	ID		wtskid;		/* 固定長メモリプールの待ち行列の先頭のタスクの
+						   ID番号 */
+	uint_t	fblkcnt;	/* 固定長メモリプール領域の空きメモリ領域に割り
+						   付けることができる固定長メモリブロックの数 */
 } T_RMPF;
 
 typedef struct t_ccyc {
-	ATR			cycatr;		/* å¨æéç¥å±æ§ */
-	T_NFYINFO	nfyinfo;	/* å¨æéç¥ã®éç¥æ¹æ³ */
-	RELTIM		cyctim;		/* å¨æéç¥ã®éç¥å¨æ */
-	RELTIM		cycphs;		/* å¨æéç¥ã®éç¥ä½ç¸ */
+	ATR			cycatr;		/* 周期通知属性 */
+	T_NFYINFO	nfyinfo;	/* 周期通知の通知方法 */
+	RELTIM		cyctim;		/* 周期通知の通知周期 */
+	RELTIM		cycphs;		/* 周期通知の通知位相 */
 } T_CCYC;
 
 typedef struct t_rcyc {
-	STAT	cycstat;	/* å¨æéç¥ã®åä½ç¶æ
- */
-	RELTIM	lefttim;	/* æ¬¡åéç¥æå»ã¾ã§ã®ç¸å¯¾æé */
+	STAT	cycstat;	/* 周期通知の動作状態 */
+	RELTIM	lefttim;	/* 次回通知時刻までの相対時間 */
 } T_RCYC;
 
 typedef struct t_calm {
-	ATR			almatr;		/* ã¢ã©ã¼ã éç¥å±æ§ */
-	T_NFYINFO	nfyinfo;	/* ã¢ã©ã¼ã éç¥ã®éç¥æ¹æ³ */
+	ATR			almatr;		/* アラーム通知属性 */
+	T_NFYINFO	nfyinfo;	/* アラーム通知の通知方法 */
 } T_CALM;
 
 typedef struct t_ralm {
-	STAT	almstat;	/* ã¢ã©ã¼ã éç¥ã®åä½ç¶æ
- */
-	RELTIM	lefttim;	/* éç¥æå»ã¾ã§ã®ç¸å¯¾æé */
+	STAT	almstat;	/* アラーム通知の動作状態 */
+	RELTIM	lefttim;	/* 通知時刻までの相対時間 */
 } T_RALM;
 
 typedef struct t_cisr {
-	ATR			isratr;		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å±æ§ */
-	intptr_t	exinf;		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ¡å¼µæ
-å ± */
-	INTNO		intno;		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãç»é²ããå²è¾¼ã¿çªå· */
-	ISR			isr;		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å
-é ­çªå° */
-	PRI			isrpri;		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åªå
-åº¦ */
+	ATR			isratr;		/* 割込みサービスルーチン属性 */
+	intptr_t	exinf;		/* 割込みサービスルーチンの拡張情報 */
+	INTNO		intno;		/* 割込みサービスルーチンを登録する割込み番号 */
+	ISR			isr;		/* 割込みサービスルーチンの先頭番地 */
+	PRI			isrpri;		/* 割込みサービスルーチン優先度 */
 } T_CISR;
 
 /*
- *  ãµã¼ãã¹ã³ã¼ã«ã®å®£è¨
- */
-
-/*
- *  ã¿ã¹ã¯ç®¡çæ©è½
+ *  サービスコールの宣言
+ */
+
+/*
+ *  タスク管理機能
  */
 extern ER_ID	acre_tsk(const T_CTSK *pk_ctsk) throw();
@@ -412,5 +346,5 @@
 
 /*
- *  ã¿ã¹ã¯ä»å±åææ©è½
+ *  タスク付属同期機能
  */
 extern ER		slp_tsk(void) throw();
@@ -424,5 +358,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºæ©è½
+ *  タスク終了機能
  */
 extern ER		ext_tsk(void) throw();
@@ -434,5 +368,5 @@
 
 /*
- *  åæã»éä¿¡æ©è½
+ *  同期・通信機能
  */
 extern ER_ID	acre_sem(const T_CSEM *pk_csem) throw();
@@ -493,5 +427,5 @@
 
 /*
- *  ã¡ã¢ãªãã¼ã«ç®¡çæ©è½
+ *  メモリプール管理機能
  */
 extern ER_ID	acre_mpf(const T_CMPF *pk_cmpf) throw();
@@ -505,5 +439,5 @@
 
 /*
- *  æéç®¡çæ©è½
+ *  時間管理機能
  */
 extern ER		set_tim(SYSTIM systim) throw();
@@ -525,6 +459,5 @@
 
 /*
- *  ã·ã¹ãã ç¶æ
-ç®¡çæ©è½
+ *  システム状態管理機能
  */
 extern ER		rot_rdq(PRI tskpri) throw();
@@ -544,5 +477,5 @@
 
 /*
- *  å²è¾¼ã¿ç®¡çæ©è½
+ *  割込み管理機能
  */
 extern ER_ID	acre_isr(const T_CISR *pk_cisr) throw();
@@ -557,5 +490,5 @@
 
 /*
- *  CPUä¾å¤ç®¡çæ©è½
+ *  CPU例外管理機能
  */
 extern bool_t	xsns_dpn(void *p_excinf) throw();
@@ -564,5 +497,5 @@
 
 /*
- *  éã¿ã¹ã¯ã³ã³ãã­ã¹ãããå¼ã³åºãããµã¼ãã¹ã³ã¼ã«
+ *  非タスクコンテキストから呼び出せるサービスコール
  */
 #define iact_tsk(tskid)						act_tsk(tskid)
@@ -596,176 +529,133 @@
 
 /*
- *  ãªãã¸ã§ã¯ãå±æ§ã®å®ç¾©
- */
-#define TA_ACT			UINT_C(0x01)	/* ã¿ã¹ã¯ãèµ·åãããç¶æ
-ã§çæ */
-#define TA_NOACTQUE		UINT_C(0x02)	/* èµ·åè¦æ±ãã­ã¥ã¼ã¤ã³ã°ããªã */
-
-#define TA_TPRI			UINT_C(0x01)	/* ã¿ã¹ã¯ã®å¾
-ã¡è¡åãåªå
-åº¦é ã« */
-
-#define TA_WMUL			UINT_C(0x02)	/* è¤æ°ã®å¾
-ã¡ã¿ã¹ã¯ */
-#define TA_CLR			UINT_C(0x04)	/* ã¤ãã³ããã©ã°ã®ã¯ãªã¢æå® */
-
-#define TA_CEILING		UINT_C(0x03)	/* åªå
-åº¦ä¸éãã­ãã³ã« */
-
-#define TA_STA			UINT_C(0x02)	/* å¨æéç¥ãåä½ç¶æ
-ã§çæ */
-
-#define TA_NONKERNEL	UINT_C(0x02)	/* ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ */
-
-#define TA_ENAINT		UINT_C(0x01)	/* å²è¾¼ã¿è¦æ±ç¦æ­¢ãã©ã°ãã¯ãªã¢ */
-#define TA_EDGE			UINT_C(0x02)	/* ã¨ãã¸ããªã¬ */
-
-/*
- *  ãµã¼ãã¹ã³ã¼ã«ã®åä½ã¢ã¼ãã®å®ç¾©
- */
-#define TWF_ORW			UINT_C(0x01)	/* ã¤ãã³ããã©ã°ã®ORå¾
-ã¡ */
-#define TWF_ANDW		UINT_C(0x02)	/* ã¤ãã³ããã©ã°ã®ANDå¾
-ã¡ */
-
-/*
- *  éç¥å¦çã¢ã¼ãã®å®ç¾©
- */
-#define TNFY_HANDLER	UINT_C(0x00)		/* ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å¼åºã */
-#define TNFY_SETVAR		UINT_C(0x01)		/* å¤æ°ã®è¨­å® */
-#define TNFY_INCVAR		UINT_C(0x02)		/* å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã */
-#define TNFY_ACTTSK		UINT_C(0x03)		/* ã¿ã¹ã¯ã®èµ·å */
-#define TNFY_WUPTSK		UINT_C(0x04)		/* ã¿ã¹ã¯ã®èµ·åº */
-#define TNFY_SIGSEM		UINT_C(0x05)		/* ã»ããã©ã®è³æºã®è¿å´ */
-#define TNFY_SETFLG		UINT_C(0x06)		/* ã¤ãã³ããã©ã°ã®ã»ãã */
-#define TNFY_SNDDTQ		UINT_C(0x07)		/* ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ */
-
-#define TENFY_SETVAR	UINT_C(0x10)		/* å¤æ°ã®è¨­å® */
-#define TENFY_INCVAR	UINT_C(0x20)		/* å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã */
-#define TENFY_ACTTSK	UINT_C(0x30)		/* ã¿ã¹ã¯ã®èµ·å */
-#define TENFY_WUPTSK	UINT_C(0x40)		/* ã¿ã¹ã¯ã®èµ·åº */
-#define TENFY_SIGSEM	UINT_C(0x50)		/* ã»ããã©ã®è¿å´ */
-#define TENFY_SETFLG	UINT_C(0x60)		/* ã¤ãã³ããã©ã°ã®ã»ãã */
-#define TENFY_SNDDTQ	UINT_C(0x70)		/* ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ */
-
-/*
- *  ãªãã¸ã§ã¯ãã®ç¶æ
-ã®å®ç¾©
- */
-#define TTS_RUN			UINT_C(0x01)	/* å®è¡ç¶æ
- */
-#define TTS_RDY			UINT_C(0x02)	/* å®è¡å¯è½ç¶æ
- */
-#define TTS_WAI			UINT_C(0x04)	/* å¾
-ã¡ç¶æ
- */
-#define TTS_SUS			UINT_C(0x08)	/* å¼·å¶å¾
-ã¡ç¶æ
- */
-#define TTS_WAS			UINT_C(0x0c)	/* äºéå¾
-ã¡ç¶æ
- */
-#define TTS_DMT			UINT_C(0x10)	/* ä¼æ­¢ç¶æ
- */
-
-#define TTW_SLP			UINT_C(0x0001)	/* èµ·åºå¾
-ã¡ */
-#define TTW_DLY			UINT_C(0x0002)	/* æéçµéå¾
-ã¡ */
-#define TTW_SEM			UINT_C(0x0004)	/* ã»ããã©ã®è³æºç²å¾å¾
-ã¡ */
-#define TTW_FLG			UINT_C(0x0008)	/* ã¤ãã³ããã©ã°å¾
-ã¡ */
-#define TTW_SDTQ		UINT_C(0x0010)	/* ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡å¾
-ã¡ */
-#define TTW_RDTQ		UINT_C(0x0020)	/* ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡å¾
-ã¡ */
-#define TTW_SPDQ		UINT_C(0x0100)	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡å¾
-ã¡ */
-#define TTW_RPDQ		UINT_C(0x0200)	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡å¾
-ã¡ */
-#define TTW_MTX			UINT_C(0x0080)	/* ãã¥ã¼ããã¯ã¹ã®ã­ãã¯å¾
-ã¡ç¶æ
- */
-#define TTW_MPF			UINT_C(0x2000)	/* åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾å¾
-ã¡ */
-
-#define TCYC_STP		UINT_C(0x01)	/* å¨æéç¥ãåä½ãã¦ããªã */
-#define TCYC_STA		UINT_C(0x02)	/* å¨æéç¥ãåä½ãã¦ãã */
-
-#define TALM_STP		UINT_C(0x01)	/* ã¢ã©ã¼ã éç¥ãåä½ãã¦ããªã */
-#define TALM_STA		UINT_C(0x02)	/* ã¢ã©ã¼ã éç¥ãåä½ãã¦ãã */
-
-/*
- *  ãã®ä»ã®å®æ°ã®å®ç¾©
- */
-#define TSK_SELF		0			/* èªã¿ã¹ã¯æå® */
-#define TSK_NONE		0			/* è©²å½ããã¿ã¹ã¯ããªã */
-
-#define TPRI_SELF		0			/* èªã¿ã¹ã¯ã®ãã¼ã¹åªå
-åº¦ */
-#define TPRI_INI		0			/* ã¿ã¹ã¯ã®èµ·åæåªå
-åº¦ */
-
-#define TIPM_ENAALL		0			/* å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ */
-
-/*
- *  æ§æå®æ°ã¨ãã¯ã­
- */
-
-/*
- *  åªå
-åº¦ã®ç¯å²
- */
-#define TMIN_TPRI		1			/* ã¿ã¹ã¯åªå
-åº¦ã®æå°å¤ï¼æé«å¤ï¼*/
-#define TMAX_TPRI		16			/* ã¿ã¹ã¯åªå
-åº¦ã®æå¤§å¤ï¼æä½å¤ï¼*/
-#define TMIN_DPRI		1			/* ãã¼ã¿åªå
-åº¦ã®æå°å¤ï¼æé«å¤ï¼*/
-#define TMAX_DPRI		16			/* ãã¼ã¿åªå
-åº¦ã®æå¤§å¤ï¼æä½å¤ï¼*/
-#define TMIN_ISRPRI		1			/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åªå
-åº¦ã®æå°å¤ */
-#define TMAX_ISRPRI		16			/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åªå
-åº¦ã®æå¤§å¤ */
-
-/*
- *  ãã¼ã¸ã§ã³æ
-å ±
- */
-#define TKERNEL_MAKER	UINT_C(0x0118)	/* ã«ã¼ãã«ã®ã¡ã¼ã«ã¼ã³ã¼ã */
-#define TKERNEL_PRID	UINT_C(0x0007)	/* ã«ã¼ãã«ã®è­å¥çªå· */
-#define TKERNEL_SPVER	UINT_C(0xf631)	/* ã«ã¼ãã«ä»æ§ã®ãã¼ã¸ã§ã³çªå· */
-#define TKERNEL_PRVER	UINT_C(0x3020)	/* ã«ã¼ãã«ã®ãã¼ã¸ã§ã³çªå· */
-
-/*
- *  ã­ã¥ã¼ã¤ã³ã°åæ°ã®æå¤§å¤
- */
-#define TMAX_ACTCNT		UINT_C(1)		/* èµ·åè¦æ±ã­ã¥ã¼ã¤ã³ã°æ°ã®æå¤§å¤ */
-#define TMAX_WUPCNT		UINT_C(1)		/* èµ·åºè¦æ±ã­ã¥ã¼ã¤ã³ã°æ°ã®æå¤§å¤ */
-
-/*
- *  ããããã¿ã¼ã³ã®ãããæ°
- */
-#ifndef TBIT_FLGPTN					/* ã¤ãã³ããã©ã°ã®ãããæ° */
+ *  オブジェクト属性の定義
+ */
+#define TA_ACT			UINT_C(0x01)	/* タスクを起動された状態で生成 */
+#define TA_NOACTQUE		UINT_C(0x02)	/* 起動要求をキューイングしない */
+
+#define TA_TPRI			UINT_C(0x01)	/* タスクの待ち行列を優先度順に */
+
+#define TA_WMUL			UINT_C(0x02)	/* 複数の待ちタスク */
+#define TA_CLR			UINT_C(0x04)	/* イベントフラグのクリア指定 */
+
+#define TA_CEILING		UINT_C(0x03)	/* 優先度上限プロトコル */
+
+#define TA_STA			UINT_C(0x02)	/* 周期通知を動作状態で生成 */
+
+#define TA_NONKERNEL	UINT_C(0x02)	/* カーネル管理外の割込み */
+
+#define TA_ENAINT		UINT_C(0x01)	/* 割込み要求禁止フラグをクリア */
+#define TA_EDGE			UINT_C(0x02)	/* エッジトリガ */
+
+/*
+ *  サービスコールの動作モードの定義
+ */
+#define TWF_ORW			UINT_C(0x01)	/* イベントフラグのOR待ち */
+#define TWF_ANDW		UINT_C(0x02)	/* イベントフラグのAND待ち */
+
+/*
+ *  通知処理モードの定義
+ */
+#define TNFY_HANDLER	UINT_C(0x00)		/* タイムイベントハンドラの呼出し */
+#define TNFY_SETVAR		UINT_C(0x01)		/* 変数の設定 */
+#define TNFY_INCVAR		UINT_C(0x02)		/* 変数のインクリメント */
+#define TNFY_ACTTSK		UINT_C(0x03)		/* タスクの起動 */
+#define TNFY_WUPTSK		UINT_C(0x04)		/* タスクの起床 */
+#define TNFY_SIGSEM		UINT_C(0x05)		/* セマフォの資源の返却 */
+#define TNFY_SETFLG		UINT_C(0x06)		/* イベントフラグのセット */
+#define TNFY_SNDDTQ		UINT_C(0x07)		/* データキューへの送信 */
+
+#define TENFY_SETVAR	UINT_C(0x10)		/* 変数の設定 */
+#define TENFY_INCVAR	UINT_C(0x20)		/* 変数のインクリメント */
+#define TENFY_ACTTSK	UINT_C(0x30)		/* タスクの起動 */
+#define TENFY_WUPTSK	UINT_C(0x40)		/* タスクの起床 */
+#define TENFY_SIGSEM	UINT_C(0x50)		/* セマフォの返却 */
+#define TENFY_SETFLG	UINT_C(0x60)		/* イベントフラグのセット */
+#define TENFY_SNDDTQ	UINT_C(0x70)		/* データキューへの送信 */
+
+/*
+ *  オブジェクトの状態の定義
+ */
+#define TTS_RUN			UINT_C(0x01)	/* 実行状態 */
+#define TTS_RDY			UINT_C(0x02)	/* 実行可能状態 */
+#define TTS_WAI			UINT_C(0x04)	/* 待ち状態 */
+#define TTS_SUS			UINT_C(0x08)	/* 強制待ち状態 */
+#define TTS_WAS			UINT_C(0x0c)	/* 二重待ち状態 */
+#define TTS_DMT			UINT_C(0x10)	/* 休止状態 */
+
+#define TTW_SLP			UINT_C(0x0001)	/* 起床待ち */
+#define TTW_DLY			UINT_C(0x0002)	/* 時間経過待ち */
+#define TTW_SEM			UINT_C(0x0004)	/* セマフォの資源獲得待ち */
+#define TTW_FLG			UINT_C(0x0008)	/* イベントフラグ待ち */
+#define TTW_SDTQ		UINT_C(0x0010)	/* データキューへの送信待ち */
+#define TTW_RDTQ		UINT_C(0x0020)	/* データキューからの受信待ち */
+#define TTW_SPDQ		UINT_C(0x0100)	/* 優先度データキューへの送信待ち */
+#define TTW_RPDQ		UINT_C(0x0200)	/* 優先度データキューからの受信待ち */
+#define TTW_MTX			UINT_C(0x0080)	/* ミューテックスのロック待ち状態 */
+#define TTW_MPF			UINT_C(0x2000)	/* 固定長メモリブロックの獲得待ち */
+
+#define TCYC_STP		UINT_C(0x01)	/* 周期通知が動作していない */
+#define TCYC_STA		UINT_C(0x02)	/* 周期通知が動作している */
+
+#define TALM_STP		UINT_C(0x01)	/* アラーム通知が動作していない */
+#define TALM_STA		UINT_C(0x02)	/* アラーム通知が動作している */
+
+/*
+ *  その他の定数の定義
+ */
+#define TSK_SELF		0			/* 自タスク指定 */
+#define TSK_NONE		0			/* 該当するタスクがない */
+
+#define TPRI_SELF		0			/* 自タスクのベース優先度 */
+#define TPRI_INI		0			/* タスクの起動時優先度 */
+
+#define TIPM_ENAALL		0			/* 割込み優先度マスク全解除 */
+
+/*
+ *  構成定数とマクロ
+ */
+
+/*
+ *  優先度の範囲
+ */
+#define TMIN_TPRI		1			/* タスク優先度の最小値（最高値）*/
+#define TMAX_TPRI		16			/* タスク優先度の最大値（最低値）*/
+#define TMIN_DPRI		1			/* データ優先度の最小値（最高値）*/
+#define TMAX_DPRI		16			/* データ優先度の最大値（最低値）*/
+#define TMIN_ISRPRI		1			/* 割込みサービスルーチン優先度の最小値 */
+#define TMAX_ISRPRI		16			/* 割込みサービスルーチン優先度の最大値 */
+
+/*
+ *  バージョン情報
+ */
+#define TKERNEL_MAKER	UINT_C(0x0118)	/* カーネルのメーカーコード */
+#define TKERNEL_PRID	UINT_C(0x0007)	/* カーネルの識別番号 */
+#define TKERNEL_SPVER	UINT_C(0xf631)	/* カーネル仕様のバージョン番号 */
+#define TKERNEL_PRVER	UINT_C(0x3020)	/* カーネルのバージョン番号 */
+
+/*
+ *  キューイング回数の最大値
+ */
+#define TMAX_ACTCNT		UINT_C(1)		/* 起動要求キューイング数の最大値 */
+#define TMAX_WUPCNT		UINT_C(1)		/* 起床要求キューイング数の最大値 */
+
+/*
+ *  ビットパターンのビット数
+ */
+#ifndef TBIT_FLGPTN					/* イベントフラグのビット数 */
 #define TBIT_FLGPTN		(sizeof(FLGPTN) * CHAR_BIT)
 #endif /* TBIT_FLGPTN */
 
 /*
- *  ã·ã¹ãã æå»ã®èª¿æ´ã§ããç¯å²ï¼åä½ï¼Î¼ç§ï¼
- */
-#define TMIN_ADJTIM		-1000000		/* ã·ã¹ãã æå»ã®æå°èª¿æ´æé */
-#define TMAX_ADJTIM		1000000			/* ã·ã¹ãã æå»ã®æå¤§èª¿æ´æé */
-
-/*
- *  ã¡ã¢ãªé åç¢ºä¿ã®ããã®ãã¯ã­
+ *  システム時刻の調整できる範囲（単位：μ秒）
+ */
+#define TMIN_ADJTIM		-1000000		/* システム時刻の最小調整時間 */
+#define TMAX_ADJTIM		1000000			/* システム時刻の最大調整時間 */
+
+/*
+ *  メモリ領域確保のためのマクロ
  *
- *  ä»¥ä¸ã®TOPPERS_COUNT_SZã¨TOPPERS_ROUND_SZã®å®ç¾©ã¯ï¼unitã2ã®å·¾ä¹ã§ã
- *  ããã¨ãä»®å®ãã¦ããï¼
+ *  以下のTOPPERS_COUNT_SZとTOPPERS_ROUND_SZの定義は，unitが2の巾乗であ
+ *  ることを仮定している．
  */
 #ifndef TOPPERS_COUNT_SZ
@@ -794,7 +684,7 @@
 
 /*
- *  ãã®ä»ã®æ§æå®æ°
- */
-#define TMAX_MAXSEM		UINT_MAX	/* ã»ããã©ã®æå¤§è³æºæ°ã®æå¤§å¤ */
+ *  その他の構成定数
+ */
+#define TMAX_MAXSEM		UINT_MAX	/* セマフォの最大資源数の最大値 */
 
 #ifdef __cplusplus
Index: azure_iot_hub/trunk/asp3_dcre/include/log_output.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/log_output.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/log_output.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã®ãã©ã¼ãããåºå
+ *		システムログのフォーマット出力
  */
 
@@ -70,8 +55,8 @@
 
 /*
- *  æå­åæ´å½¢åºå
+ *  文字列整形出力
  *
- *  formatã§æå®ããããã©ã¼ãããè¨è¿°ã¨p_argsã§æå®ãããå¼æ°åããä½
- *  æããã¡ãã»ã¼ã¸ãï¼1æå­åºåé¢æ°putcãç¨ãã¦åºåããï¼
+ *  formatで指定されるフォーマット記述とp_argsで指定される引数列から作
+ *  成したメッセージを，1文字出力関数putcを用いて出力する．
  */
 extern void	syslog_printf(const char *format, const intptr_t *p_args,
@@ -79,20 +64,16 @@
 
 /*
- *  ã­ã°æ
-å ±ã®åºå
+ *  ログ情報の出力
  *
- *  p_syslogã§æå®ãããã­ã°æ
-å ±ãæå­åã«æ´å½¢ãï¼1æå­åºåé¢æ°putcãç¨
- *  ãã¦åºåããï¼
+ *  p_syslogで指定されるログ情報を文字列に整形し，1文字出力関数putcを用
+ *  いて出力する．
  */
 extern void	syslog_print(const SYSLOG *p_syslog, void (*putc)(char)) throw();
 
 /*
- *  ã­ã°æ
-å ±åªå¤±ã¡ãã»ã¼ã¸æå­å
+ *  ログ情報喪失メッセージ文字列
  *
- *  lostlogåã®ã­ã°æ
-å ±ãå¤±ãããæ¨ã®ã¡ãã»ã¼ã¸ãï¼1æå­åºåé¢æ°putcã
- *  ç¨ãã¦åºåããï¼
+ *  lostlog個のログ情報が失われた旨のメッセージを，1文字出力関数putcを
+ *  用いて出力する．
  */
 extern void	syslog_lostmsg(uint_t lostlog, void (*putc)(char)) throw();
Index: azure_iot_hub/trunk/asp3_dcre/include/queue.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/queue.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/queue.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,15 +41,12 @@
 
 /*
- *		ã­ã¥ã¼æä½ã©ã¤ãã©ãª
+ *		キュー操作ライブラリ
  *
- *  ãã®ã­ã¥ã¼æä½ã©ã¤ãã©ãªã§ã¯ï¼ã­ã¥ã¼ããããå«ããªã³ã°æ§é ã®ããã«
- *  ãªã³ã¯ã­ã¥ã¼ãæ±ãï¼å
-·ä½çã«ã¯ï¼ã­ã¥ã¼ãããã®æ¬¡ã¨ã³ããªã¯ã­ã¥ã¼ã®
- *  å
-é ­ã®ã¨ã³ããªï¼åã¨ã³ããªã¯ã­ã¥ã¼ã®æ«å°¾ã®ã¨ã³ããªã¨ããï¼ã¾ãï¼ã­
- *  ã¥ã¼ã®å
-é ­ã®ã¨ã³ããªã®åã¨ã³ããªã¨ï¼ã­ã¥ã¼ã®æ«å°¾ã®ã¨ã³ããªã®æ¬¡ã¨ã³
- *  ããªã¯ï¼ã­ã¥ã¼ãããã¨ããï¼ç©ºã®ã­ã¥ã¼ã¯ï¼æ¬¡ã¨ã³ããªï¼åã¨ã³ããªã¨
- *  ãèªåèªèº«ãæãã­ã¥ã¼ãããã§ããããï¼
+ *  このキュー操作ライブラリでは，キューヘッダを含むリング構造のダブル
+ *  リンクキューを扱う．具体的には，キューヘッダの次エントリはキューの
+ *  先頭のエントリ，前エントリはキューの末尾のエントリとする．また，キ
+ *  ューの先頭のエントリの前エントリと，キューの末尾のエントリの次エン
+ *  トリは，キューヘッダとする．空のキューは，次エントリ，前エントリと
+ *  も自分自身を指すキューヘッダであらわす．
  */
 
@@ -80,15 +62,15 @@
 
 /*
- *  ã­ã¥ã¼ã®ãã¼ã¿æ§é ã®å®ç¾©
+ *  キューのデータ構造の定義
  */
 typedef struct queue {
-	struct queue *p_next;		/* æ¬¡ã¨ã³ããªã¸ã®ãã¤ã³ã¿ */
-	struct queue *p_prev;		/* åã¨ã³ããªã¸ã®ãã¤ã³ã¿ */
+	struct queue *p_next;		/* 次エントリへのポインタ */
+	struct queue *p_prev;		/* 前エントリへのポインタ */
 } QUEUE;
 
 /*
- *  ã­ã¥ã¼ã®åæå
+ *  キューの初期化
  *
- *  p_queueã«ã¯ã­ã¥ã¼ããããæå®ããï¼
+ *  p_queueにはキューヘッダを指定する．
  */
 Inline void
@@ -100,11 +82,8 @@
 
 /*
- *  ã­ã¥ã¼ã®åã¨ã³ããªã¸ã®æ¿å
-¥
+ *  キューの前エントリへの挿入
  *
- *  p_queueã®åã«p_entryãæ¿å
-¥ããï¼p_queueã«ã­ã¥ã¼ããããæå®ããå ´
- *  åã«ã¯ï¼ã­ã¥ã¼ã®æ«å°¾ã«p_entryãæ¿å
-¥ãããã¨ã«ãªãï¼
+ *  p_queueの前にp_entryを挿入する．p_queueにキューヘッダを指定した場
+ *  合には，キューの末尾にp_entryを挿入することになる．
  */
 Inline void
@@ -118,12 +97,8 @@
 
 /*
- *  ã­ã¥ã¼ã®æ¬¡ã¨ã³ããªã¸ã®æ¿å
-¥
+ *  キューの次エントリへの挿入
  *
- *  p_queueã®æ¬¡ã«p_entryãæ¿å
-¥ããï¼p_queueã«ã­ã¥ã¼ããããæå®ããå ´
- *  åã«ã¯ï¼ã­ã¥ã¼ã®å
-é ­ã«p_entryãæ¿å
-¥ãããã¨ã«ãªãï¼
+ *  p_queueの次にp_entryを挿入する．p_queueにキューヘッダを指定した場
+ *  合には，キューの先頭にp_entryを挿入することになる．
  */
 Inline void
@@ -137,7 +112,7 @@
 
 /*
- *  ã¨ã³ããªã®åé¤
+ *  エントリの削除
  *
- *  p_entryãã­ã¥ã¼ããåé¤ããï¼
+ *  p_entryをキューから削除する．
  */
 Inline void
@@ -149,11 +124,10 @@
 
 /*
- *  ã­ã¥ã¼ã®æ¬¡ã¨ã³ããªã®ååºã
+ *  キューの次エントリの取出し
  *
- *  p_queueã®æ¬¡ã¨ã³ããªãã­ã¥ã¼ããåé¤ãï¼åé¤ããã¨ã³ããªãè¿ãï¼
- *  p_queueã«ã­ã¥ã¼ããããæå®ããå ´åã«ã¯ï¼ã­ã¥ã¼ã®å
-é ­ã®ã¨ã³ããªã
- *  åãåºããã¨ã«ãªãï¼p_queueã«ç©ºã®ã­ã¥ã¼ãæå®ãã¦å¼ã³åºãã¦ã¯ãªã
- *  ãªãï¼
+ *  p_queueの次エントリをキューから削除し，削除したエントリを返す．
+ *  p_queueにキューヘッダを指定した場合には，キューの先頭のエントリを
+ *  取り出すことになる．p_queueに空のキューを指定して呼び出してはなら
+ *  ない．
  */
 Inline QUEUE *
@@ -170,7 +144,7 @@
 
 /*
- *  ã­ã¥ã¼ãç©ºãã©ããã®ãã§ãã¯
+ *  キューが空かどうかのチェック
  *
- *  p_queueã«ã¯ã­ã¥ã¼ããããæå®ããï¼
+ *  p_queueにはキューヘッダを指定する．
  */
 Inline bool_t
Index: azure_iot_hub/trunk/asp3_dcre/include/sil.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/sil.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/sil.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,12 +41,12 @@
 
 /*
- *		ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤
+ *		システムインタフェースレイヤ
  *
- *  ã·ã¹ãã ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ã¤ã®ãµã¼ãã¹ã³ã¼ã«ã®å®ç¾©ã»å®£è¨ã¨ãã¯ã­ãª
- *  ã©ã®å®ç¾©ãå«ãããããã¡ã¤ã«ï¼
+ *  システムインタフェースレイヤのサービスコールの定義・宣言とマクロな
+ *  どの定義を含むヘッダファイル．
  *
- *  ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ
- *  ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ãããã¨ã§ï¼ãã¯ã­å®ç¾©ä»¥å¤ã®è¨è¿°ã
- *  é¤ããã¨ãã§ããï¼
+ *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
+ *  は，TOPPERS_MACRO_ONLYを定義しておくことで，マクロ定義以外の記述を
+ *  除くことができる．
  */
 
@@ -74,11 +59,10 @@
 
 /*
- *	TOPPERSå
-±éã®ãã¼ã¿åã»å®æ°ã»ãã¯ã­
+ *	TOPPERS共通のデータ型・定数・マクロ
  */
 #include <t_stddef.h>
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨
+ *  ターゲット依存部
  */
 #include "target_sil.h"
@@ -87,20 +71,17 @@
 
 /*
- *  å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-ã®å¶å¾¡
+ *  全割込みロック状態の制御
  *
- *  SIL_PRE_LOCï¼SIL_LOC_INT()ï¼SIL_UNL_INT()ã¯ï¼ã¿ã¼ã²ããä¾å­é¨ã§ç¨
- *  æããï¼ããã©ã«ãã®å®ç¾©ã¯ç¨æãã¦ããªãï¼
- */
-
-/*
- *  å¾®å°æéå¾
-ã¡
+ *  SIL_PRE_LOC，SIL_LOC_INT()，SIL_UNL_INT()は，ターゲット依存部で用
+ *  意する．デフォルトの定義は用意していない．
+ */
+
+/*
+ *  微少時間待ち
  */
 extern void	sil_dly_nse(ulong_t dlytim) throw();
 
 /*
- *  ã¨ã³ãã£ã¢ã³ã®åè»¢
+ *  エンディアンの反転
  */
 #ifndef TOPPERS_SIL_REV_ENDIAN_UINT16
@@ -116,10 +97,10 @@
 
 /*
- *  ã¡ã¢ãªç©ºéã¢ã¯ã»ã¹é¢æ°
+ *  メモリ空間アクセス関数
  */
 #ifndef TOPPERS_OMIT_SIL_ACCESS
 
 /*
- *  8ãããåä½ã®èª­åºãï¼æ¸è¾¼ã¿
+ *  8ビット単位の読出し／書込み
  */
 #ifdef UINT8_MAX
@@ -143,5 +124,5 @@
 
 /*
- *  16ãããåä½ã®èª­åºãï¼æ¸è¾¼ã¿
+ *  16ビット単位の読出し／書込み
  */
 
@@ -161,5 +142,5 @@
 }
 
-#ifdef SIL_ENDIAN_BIG			/* ããã°ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#ifdef SIL_ENDIAN_BIG			/* ビッグエンディアンプロセッサ */
 
 #define	sil_reh_bem(mem)		sil_reh_mem(mem)
@@ -188,5 +169,5 @@
 #endif /* TOPPERS_OMIT_SIL_WRH_LEM */
 #else /* SIL_ENDIAN_BIG */
-#ifdef SIL_ENDIAN_LITTLE		/* ãªãã«ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#ifdef SIL_ENDIAN_LITTLE		/* リトルエンディアンプロセッサ */
 
 #define	sil_reh_lem(mem)		sil_reh_mem(mem)
@@ -222,5 +203,5 @@
 
 /*
- *  32ãããåä½ã®èª­åºãï¼æ¸è¾¼ã¿
+ *  32ビット単位の読出し／書込み
  */
 
@@ -240,5 +221,5 @@
 }
 
-#ifdef SIL_ENDIAN_BIG			/* ããã°ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#ifdef SIL_ENDIAN_BIG			/* ビッグエンディアンプロセッサ */
 
 #define	sil_rew_bem(mem)		sil_rew_mem(mem)
@@ -266,5 +247,5 @@
 
 #endif /* TOPPERS_OMIT_SIL_WRW_LEM */
-#else /* SIL_ENDIAN_BIG */		/* ãªãã«ã¨ã³ãã£ã¢ã³ãã­ã»ããµ */
+#else /* SIL_ENDIAN_BIG */		/* リトルエンディアンプロセッサ */
 
 #define	sil_rew_lem(mem)		sil_rew_mem(mem)
Index: azure_iot_hub/trunk/asp3_dcre/include/t_stddef.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/t_stddef.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/t_stddef.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,17 +41,14 @@
 
 /*
- *		TOPPERSå
-±éããããã¡ã¤ã«
- *
- *  TOPPERSé¢é£ã®ãã¹ã¦ã®ã½ã¼ã¹ãã¡ã¤ã«ã§ã¤ã³ã¯ã«ã¼ããã¹ãããããã¡ã¤
- *  ã«ï¼åç¨®ã®ã«ã¼ãã«ãã½ããã¦ã§ã¢é¨åã§å
-±éã«ç¨ãããã¨ãæ³å®ãã¦ã
- *  ãï¼TOPPERSã®åç¨®ã®ã«ã¼ãã«ãã½ããã¦ã§ã¢é¨åã§å
-±éã«ç¨ãããã¼ã¿åï¼
- *  å®æ°ï¼ãã¯ã­ã®å®ç¾©ãªã©ãå«ãï¼
- *
- *  ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ
- *  ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ããï¼ããã«ããï¼ãã¯ã­å®ç¾©ä»¥å¤ã
- *  é¤ãããã«ãªã£ã¦ããï¼
+ *		TOPPERS共通ヘッダファイル
+ *
+ *  TOPPERS関連のすべてのソースファイルでインクルードすべきヘッダファイ
+ *  ル．各種のカーネルやソフトウェア部品で共通に用いることを想定してい
+ *  る．TOPPERSの各種のカーネルやソフトウェア部品で共通に用いるデータ型，
+ *  定数，マクロの定義などを含む．
+ *
+ *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
+ *  は，TOPPERS_MACRO_ONLYを定義しておく．これにより，マクロ定義以外を
+ *  除くようになっている．
  */
 
@@ -79,10 +61,10 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨
+ *  ターゲット依存部
  */
 #include "target_stddef.h"
 
 /*
- *  Cè¨èª/EC++ã§throw()ã«å¯¾å¦ããããã®å®ç¾©
+ *  C言語/EC++でthrow()に対処するための定義
  */
 #if !defined(__cplusplus) || defined(__embedded_cplusplus)
@@ -93,8 +75,8 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®ãã¼ã¿åã®ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  ターゲット依存のデータ型のマクロのデフォルト定義
  */
 #ifndef TOPPERS_bool
-#define TOPPERS_bool	int				/* ãã¼ã«å */
+#define TOPPERS_bool	int				/* ブール型 */
 #endif /* TOPPERS_bool */
 
@@ -102,53 +84,49 @@
 struct TOPPERS_dummy_t { int TOPPERS_dummy_field; };
 typedef	void			(*TOPPERS_fp_t)(struct TOPPERS_dummy_t);
-#define TOPPERS_fp		TOPPERS_fp_t	/* ãã­ã°ã©ã ã®èµ·åçªå° */
+#define TOPPERS_fp		TOPPERS_fp_t	/* プログラムの起動番地 */
 #endif /* TOPPERS_fp */
 
 /*
- *  å
-±éãã¼ã¿å
- */
-typedef TOPPERS_bool	bool_t;		/* çå½å¤ */
-
-typedef signed int		int_t;		/* èªç¶ãªãµã¤ãºã®ç¬¦å·ä»ãæ´æ° */
-typedef unsigned int	uint_t;		/* èªç¶ãªãµã¤ãºã®ç¬¦å·ç¡ãæ´æ° */
-
-typedef signed long		long_t;		/* é·ãã®ãµã¤ãºã®ç¬¦å·ä»ãæ´æ° */
-typedef unsigned long	ulong_t;	/* é·ãã®ãµã¤ãºã®ç¬¦å·ç¡ãæ´æ° */
-
-typedef int_t			FN;			/* æ©è½ã³ã¼ã */
-typedef	int_t			ER;			/* ã¨ã©ã¼ã³ã¼ã */
-typedef	int_t			ID;			/* ãªãã¸ã§ã¯ãã®IDçªå· */
-typedef	uint_t			ATR;		/* ãªãã¸ã§ã¯ãã®å±æ§ */
-typedef	uint_t			STAT;		/* ãªãã¸ã§ã¯ãã®ç¶æ
- */
-typedef	uint_t			MODE;		/* ãµã¼ãã¹ã³ã¼ã«ã®åä½ã¢ã¼ã */
-typedef	int_t			PRI;		/* åªå
-åº¦ */
-typedef	uint32_t		TMO;		/* ã¿ã¤ã ã¢ã¦ãæå® */
-typedef	uint32_t		RELTIM;		/* ç¸å¯¾æéï¼»NGKI0550ï¼½*/
+ *  共通データ型
+ */
+typedef TOPPERS_bool	bool_t;		/* 真偽値 */
+
+typedef signed int		int_t;		/* 自然なサイズの符号付き整数 */
+typedef unsigned int	uint_t;		/* 自然なサイズの符号無し整数 */
+
+typedef signed long		long_t;		/* 長めのサイズの符号付き整数 */
+typedef unsigned long	ulong_t;	/* 長めのサイズの符号無し整数 */
+
+typedef int_t			FN;			/* 機能コード */
+typedef	int_t			ER;			/* エラーコード */
+typedef	int_t			ID;			/* オブジェクトのID番号 */
+typedef	uint_t			ATR;		/* オブジェクトの属性 */
+typedef	uint_t			STAT;		/* オブジェクトの状態 */
+typedef	uint_t			MODE;		/* サービスコールの動作モード */
+typedef	int_t			PRI;		/* 優先度 */
+typedef	uint32_t		TMO;		/* タイムアウト指定 */
+typedef	uint32_t		RELTIM;		/* 相対時間［NGKI0550］*/
 #ifdef UINT64_MAX
-typedef	uint64_t		SYSTIM;		/* ã·ã¹ãã æå»ï¼»NGKI0548ï¼½*/
+typedef	uint64_t		SYSTIM;		/* システム時刻［NGKI0548］*/
 #else /* UINT64_MAX */
-typedef	uint32_t		SYSTIM;		/* ã·ã¹ãã æå»ï¼»NGKI0548ï¼½*/
+typedef	uint32_t		SYSTIM;		/* システム時刻［NGKI0548］*/
 #endif /* UINT64_MAX */
-typedef	uint32_t		PRCTIM;		/* ãã­ã»ããµæéï¼»NGKI0573ï¼½*/
-typedef	uint32_t		HRTCNT;		/* é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ */
-
-typedef	TOPPERS_fp		FP;			/* ãã­ã°ã©ã ã®èµ·åçªå° */
-
-typedef	int_t			ER_BOOL;	/* ã¨ã©ã¼ã³ã¼ãã¾ãã¯çå½å¤ */
-typedef	int_t			ER_ID;		/* ã¨ã©ã¼ã³ã¼ãã¾ãã¯IDçªå· */
-typedef	int_t			ER_UINT;	/* ã¨ã©ã¼ã³ã¼ãã¾ãã¯ç¬¦å·ç¡ãæ´æ° */
-
-typedef uintptr_t		MB_T;		/* ç®¡çé åãç¢ºä¿ããããã®ãã¼ã¿å */
-
-typedef	uint32_t		ACPTN;		/* ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³ */
-typedef	struct acvct {				/* ã¢ã¯ã»ã¹è¨±å¯ãã¯ã¿ */
-	ACPTN		acptn1;				/* éå¸¸æä½1ã®ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³ */
-	ACPTN		acptn2;				/* éå¸¸æä½2ã®ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³ */
-	ACPTN		acptn3;				/* ç®¡çæä½ã®ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³ */
-	ACPTN		acptn4;				/* åç
-§æä½ã®ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³ */
+typedef	uint32_t		PRCTIM;		/* プロセッサ時間［NGKI0573］*/
+typedef	uint32_t		HRTCNT;		/* 高分解能タイマのカウント値 */
+
+typedef	TOPPERS_fp		FP;			/* プログラムの起動番地 */
+
+typedef	int_t			ER_BOOL;	/* エラーコードまたは真偽値 */
+typedef	int_t			ER_ID;		/* エラーコードまたはID番号 */
+typedef	int_t			ER_UINT;	/* エラーコードまたは符号無し整数 */
+
+typedef uintptr_t		MB_T;		/* 管理領域を確保するためのデータ型 */
+
+typedef	uint32_t		ACPTN;		/* アクセス許可パターン */
+typedef	struct acvct {				/* アクセス許可ベクタ */
+	ACPTN		acptn1;				/* 通常操作1のアクセス許可パターン */
+	ACPTN		acptn2;				/* 通常操作2のアクセス許可パターン */
+	ACPTN		acptn3;				/* 管理操作のアクセス許可パターン */
+	ACPTN		acptn4;				/* 参照操作のアクセス許可パターン */
 } ACVCT;
 
@@ -156,91 +134,82 @@
 
 /*
- *  æ´æ°å®æ°ãä½ããã¯ã­
+ *  整数定数を作るマクロ
  */
 #ifndef UINT_C
-#define UINT_C(val)		(val ## U)		/* uint_tåã®å®æ°ãä½ããã¯ã­ */
+#define UINT_C(val)		(val ## U)		/* uint_t型の定数を作るマクロ */
 #endif /* UINT_C */
 
 #ifndef ULONG_C
-#define ULONG_C(val)	(val ## UL)		/* ulong_tåã®å®æ°ãä½ããã¯ã­ */
+#define ULONG_C(val)	(val ## UL)		/* ulong_t型の定数を作るマクロ */
 #endif /* ULONG_C */
 
 /*
- *  ä¸è¬å®æ°
+ *  一般定数
  */
 #ifndef NULL
-#define NULL		0			/* ç¡å¹ãã¤ã³ã¿ */
+#define NULL		0			/* 無効ポインタ */
 #endif /* NULL */
 
 #ifndef true
-#define true		1			/* ç */
+#define true		1			/* 真 */
 #endif /* true */
 
 #ifndef false
-#define false		0			/* å½ */
+#define false		0			/* 偽 */
 #endif /* false */
 
-#define E_OK		0			/* æ­£å¸¸çµäº */
-
-/*
- *  ã¡ã¤ã³ã¨ã©ã¼ã³ã¼ã
- */
-#define E_SYS		(-5)		/* ã·ã¹ãã ã¨ã©ã¼ */
-#define E_NOSPT		(-9)		/* æªãµãã¼ãæ©è½ */
-#define E_RSFN		(-10)		/* äºç´æ©è½ã³ã¼ã */
-#define E_RSATR		(-11)		/* äºç´å±æ§ */
-#define E_PAR		(-17)		/* ãã©ã¡ã¼ã¿ã¨ã©ã¼ */
-#define E_ID		(-18)		/* ä¸æ­£IDçªå· */
-#define E_CTX		(-25)		/* ã³ã³ãã­ã¹ãã¨ã©ã¼ */
-#define E_MACV		(-26)		/* ã¡ã¢ãªã¢ã¯ã»ã¹éå */
-#define E_OACV		(-27)		/* ãªãã¸ã§ã¯ãã¢ã¯ã»ã¹éå */
-#define E_ILUSE		(-28)		/* ãµã¼ãã¹ã³ã¼ã«ä¸æ­£ä½¿ç¨ */
-#define E_NOMEM		(-33)		/* ã¡ã¢ãªä¸è¶³ */
-#define E_NOID		(-34)		/* IDçªå·ä¸è¶³ */
-#define E_NORES		(-35)		/* è³æºä¸è¶³ */
-#define E_OBJ		(-41)		/* ãªãã¸ã§ã¯ãç¶æ
-ã¨ã©ã¼ */
-#define E_NOEXS		(-42)		/* ãªãã¸ã§ã¯ãæªçæ */
-#define E_QOVR		(-43)		/* ã­ã¥ã¼ã¤ã³ã°ãªã¼ãã¼ãã­ã¼ */
-#define E_RLWAI		(-49)		/* å¾
-ã¡ç¶æ
-ã®å¼·å¶è§£é¤ */
-#define E_TMOUT		(-50)		/* ãã¼ãªã³ã°å¤±æã¾ãã¯ã¿ã¤ã ã¢ã¦ã */
-#define E_DLT		(-51)		/* å¾
-ã¡ãªãã¸ã§ã¯ãã®åé¤ */
-#define E_CLS		(-52)		/* å¾
-ã¡ãªãã¸ã§ã¯ãã®ç¶æ
-å¤å */
-#define E_RASTER	(-53)		/* ã¿ã¹ã¯ã®çµäºè¦æ± */
-#define E_WBLK		(-57)		/* ãã³ãã­ãã­ã³ã°åä»ã */
-#define E_BOVR		(-58)		/* ãããã¡ãªã¼ãã¼ãã­ã¼ */
-#define E_COMM		(-65)		/* éä¿¡ã¨ã©ã¼ */
-
-/*
- *  ãªãã¸ã§ã¯ãå±æ§
- */
-#define TA_NULL		UINT_C(0)	/* ãªãã¸ã§ã¯ãå±æ§ãæå®ããªã */
-
-/*
- *  ã¿ã¤ã ã¢ã¦ãæå®
- */
-#define TMO_POL		UINT_C(0)			/* ãã¼ãªã³ã° */
-#define TMO_FEVR	(UINT32_MAX)		/* æ°¸ä¹
-å¾
-ã¡ */
-#define TMO_NBLK	(UINT32_MAX - 1)	/* ãã³ãã­ãã­ã³ã° */
-
-/*
- *  ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³
- */
-#define TACP_KERNEL	UINT_C(0)		/* ã«ã¼ãã«ãã¡ã¤ã³ã ãã«ã¢ã¯ã»ã¹ãè¨±å¯ */
-#define TACP_SHARED	(~UINT_C(0))	/* ãã¹ã¦ã®ãã¡ã¤ã³ããã¢ã¯ã»ã¹ãè¨±å¯ */
-
-/*
- *  åã«é¢ããæ
-å ±ãåãåºãããã®ãã¯ã­
- *
- *  ä»¥ä¸ã®ALIGN_TYPEã®å®ç¾©ã¯ï¼ã¢ã©ã¤ã³ã¡ã³ãã®åä½ã2ã®å·¾ä¹ã§ãããã¨ã
- *  ä»®å®ãã¦ããï¼
+#define E_OK		0			/* 正常終了 */
+
+/*
+ *  メインエラーコード
+ */
+#define E_SYS		(-5)		/* システムエラー */
+#define E_NOSPT		(-9)		/* 未サポート機能 */
+#define E_RSFN		(-10)		/* 予約機能コード */
+#define E_RSATR		(-11)		/* 予約属性 */
+#define E_PAR		(-17)		/* パラメータエラー */
+#define E_ID		(-18)		/* 不正ID番号 */
+#define E_CTX		(-25)		/* コンテキストエラー */
+#define E_MACV		(-26)		/* メモリアクセス違反 */
+#define E_OACV		(-27)		/* オブジェクトアクセス違反 */
+#define E_ILUSE		(-28)		/* サービスコール不正使用 */
+#define E_NOMEM		(-33)		/* メモリ不足 */
+#define E_NOID		(-34)		/* ID番号不足 */
+#define E_NORES		(-35)		/* 資源不足 */
+#define E_OBJ		(-41)		/* オブジェクト状態エラー */
+#define E_NOEXS		(-42)		/* オブジェクト未生成 */
+#define E_QOVR		(-43)		/* キューイングオーバーフロー */
+#define E_RLWAI		(-49)		/* 待ち状態の強制解除 */
+#define E_TMOUT		(-50)		/* ポーリング失敗またはタイムアウト */
+#define E_DLT		(-51)		/* 待ちオブジェクトの削除 */
+#define E_CLS		(-52)		/* 待ちオブジェクトの状態変化 */
+#define E_RASTER	(-53)		/* タスクの終了要求 */
+#define E_WBLK		(-57)		/* ノンブロッキング受付け */
+#define E_BOVR		(-58)		/* バッファオーバーフロー */
+#define E_COMM		(-65)		/* 通信エラー */
+
+/*
+ *  オブジェクト属性
+ */
+#define TA_NULL		UINT_C(0)	/* オブジェクト属性を指定しない */
+
+/*
+ *  タイムアウト指定
+ */
+#define TMO_POL		UINT_C(0)			/* ポーリング */
+#define TMO_FEVR	(UINT32_MAX)		/* 永久待ち */
+#define TMO_NBLK	(UINT32_MAX - 1)	/* ノンブロッキング */
+
+/*
+ *  アクセス許可パターン
+ */
+#define TACP_KERNEL	UINT_C(0)		/* カーネルドメインだけにアクセスを許可 */
+#define TACP_SHARED	(~UINT_C(0))	/* すべてのドメインからアクセスを許可 */
+
+/*
+ *  型に関する情報を取り出すためのマクロ
+ *
+ *  以下のALIGN_TYPEの定義は，アラインメントの単位が2の巾乗であることを
+ *  仮定している．
  */
 #ifndef offsetof
@@ -253,5 +222,5 @@
 #endif /* alignof */
 
-#ifndef ALIGN_TYPE				/* ã¢ã©ã¤ã³ã¡ã³ãã®ãã§ãã¯ */
+#ifndef ALIGN_TYPE				/* アラインメントのチェック */
 #define ALIGN_TYPE(addr, type) \
 						((((uintptr_t)(addr)) & (alignof(type) - 1)) == 0U)
@@ -259,5 +228,5 @@
 
 /*
- *  assertãã¯ã­
+ *  assertマクロ
  */
 #undef assert
@@ -274,12 +243,12 @@
 
 /*
- *  ã¨ã©ã¼ã³ã¼ãçæã»åè§£ãã¯ã­
- *
- *  ä»¥ä¸ã®ãã¯ã­å®ç¾©ã¯ï¼ç¬¦å·ä»ãæ´æ°ã2ã®è£æ°ã§è¡¨ç¾ããã¦ããï¼å³ã·ãã
- *  æ¼ç®å­ï¼>>ï¼ãç®è¡ã·ããããããã¨ãä»®å®ãã¦ããï¼ããã§ãªãéçºç°
- *  å¢ã§ã¯ï¼target_stddef.hã§ãããã®å®ç¾©ãä¸æ¸ãããªããã°ãªããªãï¼
- *
- *  MERCDãã¯ã­ã®å®ç¾©ã¯ï¼ã¡ã¤ã³ã¨ã©ã¼ã³ã¼ããè² ã§ãããã¨ãä»®å®ãã¦ããï¼
- *  ããã§ãªãå ´åï¼2ã¤ã®å®ç¾©ãä¸è´ããªããªãï¼
+ *  エラーコード生成・分解マクロ
+ *
+ *  以下のマクロ定義は，符号付き整数が2の補数で表現されており，右シフト
+ *  演算子（>>）が算術シフトされることを仮定している．そうでない開発環
+ *  境では，target_stddef.hでこれらの定義を上書きしなければならない．
+ *
+ *  MERCDマクロの定義は，メインエラーコードが負であることを仮定している．
+ *  そうでない場合，2つの定義が一致しなくなる．
  */
 #ifndef ERCD
@@ -301,12 +270,12 @@
 
 /*
- *  ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³çæãã¯ã­
- */
-#define TACP(domid)		(1U << ((domid) - 1))	/* domidã ãã«ã¢ã¯ã»ã¹ãè¨±å¯ */
-
-/*
- *  ç¸å¯¾æéï¼RELTIMï¼ã«æå®ã§ããæå¤§å¤ï¼»NGKI0551ï¼½
- */
-#define TMAX_RELTIM		4000000000U				/* 66å40ç§ã¾ã§æå®å¯ */
+ *  アクセス許可パターン生成マクロ
+ */
+#define TACP(domid)		(1U << ((domid) - 1))	/* domidだけにアクセスを許可 */
+
+/*
+ *  相対時間（RELTIM）に指定できる最大値［NGKI0551］
+ */
+#define TMAX_RELTIM		4000000000U				/* 66分40秒まで指定可 */
 
 #endif /* TOPPERS_T_STDDEF_H */
Index: azure_iot_hub/trunk/asp3_dcre/include/t_stdlib.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/t_stdlib.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/t_stdlib.h	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		åºæ¬çãªã©ã¤ãã©ãªé¢æ°
+ *		基本的なライブラリ関数
  */
 
@@ -69,16 +54,16 @@
 
 /*
- *  ã¨ã©ã¼ã¡ãã»ã¼ã¸æå­åãè¿ãé¢æ°
+ *  エラーメッセージ文字列を返す関数
  *
- *  ercdã§æå®ãããã¨ã©ã¼ã³ã¼ãã®ã¡ã¤ã³ã¨ã©ã¼ã³ã¼ãã®åç§°ï¼E_PARï¼
- *  E_OBJãªã©ï¼ã®æå­åãè¿ãé¢æ°ï¼
+ *  ercdで指定されたエラーコードのメインエラーコードの名称（E_PAR，
+ *  E_OBJなど）の文字列を返す関数．
  */
 extern const char	*itron_strerror(ER ercd) throw();
 
 /*
- *  ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®ã­ã°åºå
+ *  エラーメッセージのログ出力
  *
- *  ãµã¼ãã¹ã³ã¼ã«ãã¨ã©ã¼ãè¿ããå ´åã«ï¼ãã®ãã¡ã¤ã«åï¼è¡çªå·ï¼ã¡ã¤
- *  ã³ã¨ã©ã¼ã³ã¼ãç­ãè¡¨ç¤ºããããã®é¢æ°ï¼
+ *  サービスコールがエラーを返した場合に，そのファイル名，行番号，メイ
+ *  ンエラーコード等を表示するための関数．
  */
 extern void		t_perror(uint_t prio, const char *file, int_t line,
Index: azure_iot_hub/trunk/asp3_dcre/include/t_syslog.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/include/t_syslog.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/include/t_syslog.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,28 +42,20 @@
 
 /*
- *		ã·ã¹ãã ã­ã°åºåãè¡ãããã®å®ç¾©
- *
- *  ã·ã¹ãã ã­ã°ãµã¼ãã¹ã¯ï¼ã·ã¹ãã ã®ã­ã°æ
-å ±ãåºåããããã®ãµã¼ãã¹
- *  ã§ããï¼ã«ã¼ãã«ããã®ã­ã°æ
-å ±ã®åºåã«ãç¨ããããï¼å
-é¨ã§å¾
-ã¡ç¶æ
-
- *  ã«ã¯ãããã¨ã¯ãªãï¼
- *
- *  ã­ã°æ
-å ±ã¯ï¼ã«ã¼ãã«å
-ã®ã­ã°ãããã¡ã«æ¸ãè¾¼ããï¼ä½ã¬ãã«ã®æå­åº
- *  åé¢æ°ãç¨ãã¦åºåããï¼ã©ã¡ããä½¿ããã¯ï¼æ¡å¼µãµã¼ãã¹ã³ã¼ã«ã§åã
- *  æãããã¨ãã§ããï¼
- *
- *  ã­ã°ãããã¡é åããªã¼ããã­ã¼ããå ´åã«ã¯ï¼å¤ãã­ã°æ
-å ±ãæ¶ãã¦ä¸
- *  æ¸ãããï¼
- *
- *  ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ
- *  ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ãããã¨ã§ï¼ãã¯ã­å®ç¾©ä»¥å¤ã®è¨è¿°ã
- *  é¤ããã¨ãã§ããï¼
+ *		システムログ出力を行うための定義
+ *
+ *  システムログサービスは，システムのログ情報を出力するためのサービス
+ *  である．カーネルからのログ情報の出力にも用いるため，内部で待ち状態
+ *  にはいることはない．
+ *
+ *  ログ情報は，カーネル内のログバッファに書き込むか，低レベルの文字出
+ *  力関数を用いて出力する．どちらを使うかは，拡張サービスコールで切り
+ *  換えることができる．
+ *
+ *  ログバッファ領域がオーバフローした場合には，古いログ情報を消して上
+ *  書きする．
+ *
+ *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
+ *  は，TOPPERS_MACRO_ONLYを定義しておくことで，マクロ定義以外の記述を
+ *  除くことができる．
  */
 
@@ -93,66 +70,59 @@
 
 /*
- *  ã­ã°æ
-å ±ã®ç¨®å¥ã®å®ç¾©
- */
-#define LOG_TYPE_COMMENT	UINT_C(0x01)	/* ã³ã¡ã³ã */
-#define LOG_TYPE_ASSERT		UINT_C(0x02)	/* ã¢ãµã¼ã·ã§ã³ã®å¤±æ */
-
-#define LOG_TYPE_INH		UINT_C(0x11)	/* å²è¾¼ã¿ãã³ãã© */
-#define LOG_TYPE_ISR		UINT_C(0x12)	/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ */
-#define LOG_TYPE_CYC		UINT_C(0x13)	/* å¨æãã³ãã© */
-#define LOG_TYPE_ALM		UINT_C(0x14)	/* ã¢ã©ã¼ã ãã³ãã© */
-#define LOG_TYPE_OVR		UINT_C(0x15)	/* ãªã¼ãã©ã³ãã³ãã© */
-#define LOG_TYPE_EXC		UINT_C(0x16)	/* CPUä¾å¤ãã³ãã© */
-#define LOG_TYPE_TSKSTAT	UINT_C(0x21)	/* ã¿ã¹ã¯ç¶æ
-å¤å */
-#define LOG_TYPE_DSP		UINT_C(0x31)	/* ãã£ã¹ãããã£ */
-#define LOG_TYPE_SVC		UINT_C(0x41)	/* ãµã¼ãã¹ã³ã¼ã« */
-
-#define LOG_ENTER			UINT_C(0x00)	/* å
-¥å£ï¼éå§ */
-#define LOG_LEAVE			UINT_C(0x80)	/* åºå£ï¼çµäº */
-
-/*
- *  ã­ã°æ
-å ±ã®éè¦åº¦ã®å®ç¾©
- */
-#define LOG_EMERG			UINT_C(0)		/* ã·ã£ãããã¦ã³ã«å¤ããã¨ã©ã¼ */
+ *  ログ情報の種別の定義
+ */
+#define LOG_TYPE_COMMENT	UINT_C(0x01)	/* コメント */
+#define LOG_TYPE_ASSERT		UINT_C(0x02)	/* アサーションの失敗 */
+
+#define LOG_TYPE_INH		UINT_C(0x11)	/* 割込みハンドラ */
+#define LOG_TYPE_ISR		UINT_C(0x12)	/* 割込みサービスルーチン */
+#define LOG_TYPE_CYC		UINT_C(0x13)	/* 周期ハンドラ */
+#define LOG_TYPE_ALM		UINT_C(0x14)	/* アラームハンドラ */
+#define LOG_TYPE_OVR		UINT_C(0x15)	/* オーバランハンドラ */
+#define LOG_TYPE_EXC		UINT_C(0x16)	/* CPU例外ハンドラ */
+#define LOG_TYPE_TSKSTAT	UINT_C(0x21)	/* タスク状態変化 */
+#define LOG_TYPE_DSP		UINT_C(0x31)	/* ディスパッチャ */
+#define LOG_TYPE_SVC		UINT_C(0x41)	/* サービスコール */
+
+#define LOG_ENTER			UINT_C(0x00)	/* 入口／開始 */
+#define LOG_LEAVE			UINT_C(0x80)	/* 出口／終了 */
+
+/*
+ *  ログ情報の重要度の定義
+ */
+#define LOG_EMERG			UINT_C(0)		/* シャットダウンに値するエラー */
 #define LOG_ALERT			UINT_C(1)
 #define LOG_CRIT			UINT_C(2)
-#define LOG_ERROR			UINT_C(3)		/* ã·ã¹ãã ã¨ã©ã¼ */
-#define LOG_WARNING			UINT_C(4)		/* è­¦åã¡ãã»ã¼ã¸ */
+#define LOG_ERROR			UINT_C(3)		/* システムエラー */
+#define LOG_WARNING			UINT_C(4)		/* 警告メッセージ */
 #define LOG_NOTICE			UINT_C(5)
 #define LOG_INFO			UINT_C(6)
-#define LOG_DEBUG			UINT_C(7)		/* ãããã°ç¨ã¡ãã»ã¼ã¸ */
+#define LOG_DEBUG			UINT_C(7)		/* デバッグ用メッセージ */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  ã­ã°æ
-å ±ã®ãã¼ã¿æ§é 
+ *  ログ情報のデータ構造
  */
 
 #ifndef LOGTIM
-#define LOGTIM		HRTCNT			/* ã­ã°æå»ã®ãã¼ã¿å */
+#define LOGTIM		HRTCNT			/* ログ時刻のデータ型 */
 #endif /* LOGTIM */
 
-#define TNUM_LOGPAR		6			/* ã­ã°ãã©ã¡ã¼ã¿ã®æ° */
+#define TNUM_LOGPAR		6			/* ログパラメータの数 */
 
 #ifndef LOGPAR
-#define LOGPAR		intptr_t		/* ã­ã°ãã©ã¡ã¼ã¿ã®ãã¼ã¿å */
+#define LOGPAR		intptr_t		/* ログパラメータのデータ型 */
 #define ULOGPAR		uintptr_t
 #endif /* LOGPAR */
 
 typedef struct {
-	uint_t	logtype;				/* ã­ã°æ
-å ±ã®ç¨®å¥ */
-	LOGTIM	logtim;					/* ã­ã°æå» */
-	LOGPAR	logpar[TNUM_LOGPAR];	/* ã­ã°ãã©ã¡ã¼ã¿ */
+	uint_t	logtype;				/* ログ情報の種別 */
+	LOGTIM	logtim;					/* ログ時刻 */
+	LOGPAR	logpar[TNUM_LOGPAR];	/* ログパラメータ */
 } SYSLOG;
 
 /*
- *  ã­ã°æ
-å ±ã®éè¦åº¦ã®ãããããããä½ãããã®ãã¯ã­
+ *  ログ情報の重要度のビットマップを作るためのマクロ
  */
 #define LOG_MASK(prio)		(1U << (prio))
@@ -160,11 +130,11 @@
 
 /*
- *  ãã±ããå½¢å¼ã®å®ç¾©
+ *  パケット形式の定義
  */
 typedef struct t_syslog_rlog {
-	uint_t	count;		/* ã­ã°ãããã¡ä¸­ã®ã­ã°ã®æ° */
-	uint_t	lost;		/* å¤±ãããã­ã°ã®æ° */
-	uint_t	logmask;	/* ã­ã°ãããã¡ã«è¨é²ãã¹ãéè¦åº¦ */
-	uint_t	lowmask;	/* ä½ã¬ãã«åºåãã¹ãéè¦åº¦ */
+	uint_t	count;		/* ログバッファ中のログの数 */
+	uint_t	lost;		/* 失われたログの数 */
+	uint_t	logmask;	/* ログバッファに記録すべき重要度 */
+	uint_t	lowmask;	/* 低レベル出力すべき重要度 */
 } T_SYSLOG_RLOG;
 
@@ -172,8 +142,7 @@
 
 /*
- *  ã­ã°æ
-å ±ãåºåããããã®ã©ã¤ãã©ãªé¢æ°
- *
- *  TECSã§è¨è¿°ãããã·ã¹ãã ã­ã°æ©è½ãç´æ¥å¼ã³åºãï¼
+ *  ログ情報を出力するためのライブラリ関数
+ *
+ *  TECSで記述されたシステムログ機能を直接呼び出す．
  */
 
@@ -268,6 +237,5 @@
 
 /*
- *  ã­ã°æ
-å ±ï¼ã³ã¡ã³ãï¼ãåºåããããã®ã©ã¤ãã©ãªé¢æ°ï¼vasyslog.cï¼
+ *  ログ情報（コメント）を出力するためのライブラリ関数（vasyslog.c）
  */
 extern void	syslog(uint_t prio, const char *format, ...) throw();
@@ -276,5 +244,5 @@
 
 /*
- *  ã·ã¹ãã ã­ã°åºåãææ­¢ããå ´å
+ *  システムログ出力を抑止する場合
  */
 
@@ -325,11 +293,9 @@
 
 /*
- *  ã­ã°æ
-å ±ï¼ã³ã¡ã³ãï¼ãåºåããããã®ãã¯ã­
- *
- *  formatããã³å¾ç¶ã®å¼æ°ããä½æããã¡ãã»ã¼ã¸ãï¼éå¤§åº¦prioã§ã­ã°æ
-
- *  å ±ã¨ãã¦åºåããããã®ãã¯ã­ï¼arg1ï½argnã¯LOGPARåã«ã­ã£ã¹ãããã
- *  ãï¼LOGPARåã«åå¤æã§ããä»»æã®åã§ããï¼
+ *  ログ情報（コメント）を出力するためのマクロ
+ *
+ *  formatおよび後続の引数から作成したメッセージを，重大度prioでログ情
+ *  報として出力するためのマクロ．arg1～argnはLOGPAR型にキャストするた
+ *  め，LOGPAR型に型変換できる任意の型でよい．
  */
 
@@ -360,6 +326,5 @@
 
 /*
- *  ã­ã°æ
-å ±ï¼ã¢ãµã¼ã·ã§ã³ã®å¤±æï¼ãåºåããããã®ãã¯ã­
+ *  ログ情報（アサーションの失敗）を出力するためのマクロ
  */
 #ifndef TOPPERS_assert_fail
Index: azure_iot_hub/trunk/asp3_dcre/kernel/Makefile.kernel
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/Makefile.kernel	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/Makefile.kernel	(revision 389)
@@ -9,47 +9,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -57,10 +42,10 @@
 
 #
-#		ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾©
+#		カーネルのファイル構成の定義
 #
 
 #
-#  1ã¤ã®ã½ã¼ã¹ãã¡ã¤ã«ããè¤æ°ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãçæããããã«ä½
-#  æãããã½ã¼ã¹ãã¡ã¤ã«ã®ãªã¹ã
+#  1つのソースファイルから複数のオブジェクトファイルを生成するように作
+#  成されたソースファイルのリスト
 #
 KERNEL_FCSRCS = startup.c task.c taskhook.c wait.c time_event.c \
@@ -71,5 +56,5 @@
 
 #
-#  åã½ã¼ã¹ãã¡ã¤ã«ããçæããããªãã¸ã§ã¯ããã¡ã¤ã«ã®ãªã¹ã
+#  各ソースファイルから生成されるオブジェクトファイルのリスト
 #
 startup = sta_ker.o ext_ker.o kermem.o
@@ -133,5 +118,5 @@
 
 #
-#  çæããããªãã¸ã§ã¯ããã¡ã¤ã«ã®ä¾å­é¢ä¿ã®å®ç¾©
+#  生成されるオブジェクトファイルの依存関係の定義
 #
 $(startup) $(startup:.o=.s): startup.c
Index: azure_iot_hub/trunk/asp3_dcre/kernel/alarm.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/alarm.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/alarm.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¢ã©ã¼ã éç¥æ©è½
+ *		アラーム通知機能
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ALM_ENTER
@@ -116,5 +101,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®æ°
+ *  アラーム通知の数
  */
 #define tnum_alm	((uint_t)(tmax_almid - TMIN_ALMID + 1))
@@ -122,5 +107,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥IDããã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  アラーム通知IDからアラーム通知管理ブロックを取り出すためのマクロ
  */
 #define INDEX_ALM(almid)	((uint_t)((almid) - TMIN_ALMID))
@@ -130,14 +115,13 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªãã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないアラーム通知管理ブロックのリスト
  *
- *  ã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯ã®å
-é ­ã«ã¯ã­ã¥ã¼ã«ã¤ãªãããã®é åããªãã
- *  ãï¼ã¿ã¤ã ã¤ãã³ããã­ãã¯ï¼tmevtbï¼ã®é åãç¨ããï¼
+ *  アラーム通知管理ブロックの先頭にはキューにつなぐための領域がないた
+ *  め，タイムイベントブロック（tmevtb）の領域を用いる．
  */
 QUEUE	free_almcb;
 
 /*
- *  ã¢ã©ã¼ã éç¥æ©è½ã®åæå
+ *  アラーム通知機能の初期化
  */
 void
@@ -170,5 +154,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®çæ
+ *  アラーム通知の生成
  */
 #ifdef TOPPERS_acre_alm
@@ -228,5 +212,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åé¤
+ *  アラーム通知の削除
  */
 #ifdef TOPPERS_del_alm
@@ -272,5 +256,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åä½éå§
+ *  アラーム通知の動作開始
  */
 #ifdef TOPPERS_sta_alm
@@ -312,5 +296,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åä½åæ­¢
+ *  アラーム通知の動作停止
  */
 #ifdef TOPPERS_stp_alm
@@ -348,7 +332,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®ç¶æ
-åç
-§
+ *  アラーム通知の状態参照
  */
 #ifdef TOPPERS_ref_alm
@@ -389,5 +371,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥èµ·åã«ã¼ãã³
+ *  アラーム通知起動ルーチン
  */
 #ifdef TOPPERS_almcal
@@ -397,12 +379,10 @@
 {
 	/*
-	 *  ã¢ã©ã¼ã éç¥ãåæ­¢ç¶æ
-ã«ããï¼
+	 *  アラーム通知を停止状態にする．
 	 */
 	p_almcb->almsta = false;
 
 	/*
-	 *  éç¥ãã³ãã©ãï¼CPUã­ãã¯è§£é¤ç¶æ
-ã§å¼ã³åºãï¼
+	 *  通知ハンドラを，CPUロック解除状態で呼び出す．
 	 */
 	unlock_cpu();
Index: azure_iot_hub/trunk/asp3_dcre/kernel/alarm.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/alarm.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/alarm.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¢ã©ã¼ã éç¥æ©è½
+ *		アラーム通知機能
  */
 
@@ -68,30 +53,28 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥åæåãã­ãã¯
+ *  アラーム通知初期化ブロック
  */
 typedef struct alarm_handler_initialization_block {
-	ATR			almatr;			/* ã¢ã©ã¼ã éç¥å±æ§ */
-	intptr_t	exinf;			/* éç¥ãã³ãã©ã®æ¡å¼µæ
-å ± */
-	NFYHDR		nfyhdr;			/* éç¥ãã³ãã©ã®èµ·åçªå° */
+	ATR			almatr;			/* アラーム通知属性 */
+	intptr_t	exinf;			/* 通知ハンドラの拡張情報 */
+	NFYHDR		nfyhdr;			/* 通知ハンドラの起動番地 */
 } ALMINIB;
 
 /*
- *  ã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯
+ *  アラーム通知管理ブロック
  */
 typedef struct alarm_handler_control_block {
-	const ALMINIB *p_alminib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	bool_t		almsta;			/* ã¢ã©ã¼ã éç¥ã®åä½ç¶æ
- */
-	TMEVTB		tmevtb;			/* ã¿ã¤ã ã¤ãã³ããã­ãã¯ */
+	const ALMINIB *p_alminib;	/* 初期化ブロックへのポインタ */
+	bool_t		almsta;			/* アラーム通知の動作状態 */
+	TMEVTB		tmevtb;			/* タイムイベントブロック */
 } ALMCB;
 
 /*
- *  ä½¿ç¨ãã¦ããªãã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないアラーム通知管理ブロックのリスト
  */
 extern QUEUE	free_almcb;
 
 /*
- *  ã¢ã©ã¼ã éç¥IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  アラーム通知IDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_almid;
@@ -99,5 +82,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  アラーム通知初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const ALMINIB	alminib_table[];
@@ -105,25 +88,25 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®éç¥æ¹æ³ã®æ ¼ç´ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  アラーム通知の通知方法の格納エリア（kernel_cfg.c）
  */
 extern T_NFYINFO	aalm_nfyinfo_table[];
 
 /*
- *  ã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  アラーム通知管理ブロックのエリア（kernel_cfg.c）
  */
 extern ALMCB	almcb_table[];
 
 /*
- *  ã¢ã©ã¼ã éç¥ç®¡çãã­ãã¯ããã¢ã©ã¼ã éç¥IDãåãåºãããã®ãã¯ã­
+ *  アラーム通知管理ブロックからアラーム通知IDを取り出すためのマクロ
  */
 #define	ALMID(p_almcb)	((ID)(((p_almcb) - almcb_table) + TMIN_ALMID))
 
 /*
- *  ã¢ã©ã¼ã éç¥æ©è½ã®åæå
+ *  アラーム通知機能の初期化
  */
 extern void	initialize_alarm(void);
 
 /*
- *  ã¢ã©ã¼ã éç¥èµ·åã«ã¼ãã³
+ *  アラーム通知起動ルーチン
  */
 extern void	call_alarm(ALMCB *p_almcb);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/alarm.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/alarm.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/alarm.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		ã¢ã©ã¼ã éç¥æ©è½ã®çæã¹ã¯ãªãã
+#		アラーム通知機能の生成スクリプト
 #
 
@@ -67,12 +52,11 @@
 
   def prepare(key, params)
-    # almatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2491ï¼½
-    #ï¼TA_STAä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # almatrが無効の場合（E_RSATR）［NGKI2491］
+    #（TA_STA以外のビットがセットされている場合）
     if (params[:almatr] & ~($TA_STA)) != 0
       error_illegal_id("E_RSATR", params, :almatr, :almid)
     end
 
-    # éç¥æ
-å ±ã®å¦ç
+    # 通知情報の処理
     params[:nfyhdr] = generateNotifyHandler(key, params, :almid)
   end
@@ -85,6 +69,5 @@
 
 #
-#  ã¢ã©ã¼ã éç¥ã«é¢ããæ
-å ±ã®çæ
+#  アラーム通知に関する情報の生成
 #
 $kernelCfgC.comment_header("Alarm Notification Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/allfunc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/allfunc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/allfunc.h	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ãã¹ã¦ã®é¢æ°ãã³ã³ãã¤ã«ããããã®å®ç¾©
+ *		すべての関数をコンパイルするための定義
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/kernel/check.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/check.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/check.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¨ã©ã¼ãã§ãã¯ç¨ãã¯ã­
+ *		エラーチェック用マクロ
  */
 
@@ -66,5 +51,5 @@
 
 /*
- *  ãªãã¸ã§ã¯ãIDã®ç¯å²ã®å¤å®
+ *  オブジェクトIDの範囲の判定
  */
 #define VALID_TSKID(tskid)	(TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
@@ -80,5 +65,5 @@
 
 /*
- *  ãªãã¸ã§ã¯ãçªå·ã®ç¯å²ã®å¤å®
+ *  オブジェクト番号の範囲の判定
  */
 #ifndef VALID_INTNO_DISINT
@@ -91,6 +76,5 @@
 
 /*
- *  åªå
-åº¦ã®ç¯å²ã®å¤å®
+ *  優先度の範囲の判定
  */
 #define VALID_TPRI(tpri)	(TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
@@ -107,10 +91,10 @@
 
 /*
- *  ç¸å¯¾æéã®ç¯å²ã®å¤å®
+ *  相対時間の範囲の判定
  */
 #define VALID_RELTIM(reltim)	((reltim) <= TMAX_RELTIM)
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãæå®å¤ã®ç¯å²ã®å¤å®
+ *  タイムアウト指定値の範囲の判定
  */
 #define VALID_TMOUT(tmout)	((tmout) <= TMAX_RELTIM || (tmout) == TMO_FEVR \
@@ -118,5 +102,5 @@
 
 /*
- *  ã¢ã©ã¤ã³ãã¦ãããã®å¤å®
+ *  アラインしているかの判定
  */
 #define ALIGNED(val, align)		((((uintptr_t)(val)) & ((align) - 1U)) == 0U)
@@ -159,5 +143,5 @@
 
 /*
- *  NULLã§ãªããã¨ã®å¤å®
+ *  NULLでないことの判定
  */
 #ifdef CHECK_INTPTR_NONNULL
@@ -174,5 +158,5 @@
 
 /*
- *  å¼åºãã³ã³ãã­ã¹ãã®ãã§ãã¯ï¼E_CTXï¼
+ *  呼出しコンテキストのチェック（E_CTX）
  */
 #define CHECK_TSKCTX() do {									\
@@ -184,6 +168,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®ãã§ãã¯ï¼E_CTXï¼
+ *  CPUロック状態のチェック（E_CTX）
  */
 #define CHECK_UNL() do {									\
@@ -195,6 +178,5 @@
 
 /*
- *  å¼åºãã³ã³ãã­ã¹ãã¨CPUã­ãã¯ç¶æ
-ã®ãã§ãã¯ï¼E_CTXï¼
+ *  呼出しコンテキストとCPUロック状態のチェック（E_CTX）
  */
 #define CHECK_TSKCTX_UNL() do {								\
@@ -206,6 +188,5 @@
 
 /*
- *  ãã£ã¹ãããä¿çç¶æ
-ã§ãªããã®ãã§ãã¯ï¼E_CTXï¼
+ *  ディスパッチ保留状態でないかのチェック（E_CTX）
  */
 #define CHECK_DISPATCH() do {								\
@@ -217,5 +198,5 @@
 
 /*
- *  ãã®ä»ã®ã³ã³ãã­ã¹ãã¨ã©ã¼ã®ãã§ãã¯ï¼E_CTXï¼
+ *  その他のコンテキストエラーのチェック（E_CTX）
  */
 #define CHECK_CTX(exp) do {									\
@@ -227,5 +208,5 @@
 
 /*
- *  ãªãã¸ã§ã¯ãIDã®ãã§ãã¯ï¼E_IDï¼
+ *  オブジェクトIDのチェック（E_ID）
  */
 #define CHECK_ID(exp) do {									\
@@ -237,5 +218,5 @@
 
 /*
- *  äºç´å±æ§ã¨ã©ã¼ã®ãã§ãã¯ï¼E_RSATRï¼
+ *  予約属性エラーのチェック（E_RSATR）
  */
 #define CHECK_RSATR(atr, valid_atr) do {					\
@@ -247,5 +228,5 @@
 
 /*
- *  ãã©ã¡ã¼ã¿ã¨ã©ã¼ã®ãã§ãã¯ï¼E_PARï¼
+ *  パラメータエラーのチェック（E_PAR）
  */
 #define CHECK_PAR(exp) do {									\
@@ -257,5 +238,5 @@
 
 /*
- *  ä¸æ­£ä½¿ç¨ã¨ã©ã¼ã®ãã§ãã¯ï¼E_ILUSEï¼
+ *  不正使用エラーのチェック（E_ILUSE）
  */
 #define CHECK_ILUSE(exp) do {								\
@@ -267,6 +248,5 @@
 
 /*
- *  éçãªãªãã¸ã§ã¯ãç¶æ
-ã¨ã©ã¼ã®ãã§ãã¯ï¼E_OBJï¼
+ *  静的なオブジェクト状態エラーのチェック（E_OBJ）
  */
 #define CHECK_OBJ(exp) do {									\
Index: azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		å¨æéç¥æ©è½
+ *		周期通知機能
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_CYC_ENTER
@@ -116,5 +101,5 @@
 
 /*
- *  å¨æéç¥ã®æ°
+ *  周期通知の数
  */
 #define tnum_cyc	((uint_t)(tmax_cycid - TMIN_CYCID + 1))
@@ -122,5 +107,5 @@
 
 /*
- *  å¨æéç¥IDããå¨æéç¥ç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  周期通知IDから周期通知管理ブロックを取り出すためのマクロ
  */
 #define INDEX_CYC(cycid)	((uint_t)((cycid) - TMIN_CYCID))
@@ -130,14 +115,13 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªãå¨æéç¥ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない周期通知管理ブロックのリスト
  *
- *  å¨æéç¥ç®¡çãã­ãã¯ã®å
-é ­ã«ã¯ã­ã¥ã¼ã«ã¤ãªãããã®é åããªãããï¼
- *  ã¿ã¤ã ã¤ãã³ããã­ãã¯ï¼tmevtbï¼ã®é åãç¨ããï¼
+ *  周期通知管理ブロックの先頭にはキューにつなぐための領域がないため，
+ *  タイムイベントブロック（tmevtb）の領域を用いる．
  */
 QUEUE	free_cyccb;
 
 /*
- *  å¨æéç¥æ©è½ã®åæå
+ *  周期通知機能の初期化
  */
 void
@@ -155,6 +139,6 @@
 		if ((p_cyccb->p_cycinib->cycatr & TA_STA) != 0U) {
 			/*
-			 *  ååã®èµ·åã®ããã®ã¿ã¤ã ã¤ãã³ããç»é²ããï¼»ASPD1035ï¼½
-			 *  ï¼»ASPD1062ï¼½ï¼
+			 *  初回の起動のためのタイムイベントを登録する［ASPD1035］
+			 *  ［ASPD1062］．
 			 */
 			p_cyccb->cycsta = true;
@@ -181,5 +165,5 @@
 
 /*
- *  å¨æéç¥ã®çæ
+ *  周期通知の生成
  */
 #ifdef TOPPERS_acre_cyc
@@ -254,5 +238,5 @@
 
 /*
- *  å¨æéç¥ã®åé¤
+ *  周期通知の削除
  */
 #ifdef TOPPERS_del_cyc
@@ -298,5 +282,5 @@
 
 /*
- *  å¨æéç¥ã®åä½éå§
+ *  周期通知の動作開始
  */
 #ifdef TOPPERS_sta_cyc
@@ -325,5 +309,5 @@
 		}
 		/*
-		 *  ååã®èµ·åã®ããã®ã¿ã¤ã ã¤ãã³ããç»é²ããï¼»ASPD1036ï¼½ï¼
+		 *  初回の起動のためのタイムイベントを登録する［ASPD1036］．
 		 */
 		tmevtb_enqueue(&(p_cyccb->tmevtb), p_cyccb->p_cycinib->cycphs);
@@ -340,5 +324,5 @@
 
 /*
- *  å¨æéç¥ã®åä½åæ­¢
+ *  周期通知の動作停止
  */
 #ifdef TOPPERS_stp_cyc
@@ -376,7 +360,5 @@
 
 /*
- *  å¨æéç¥ã®ç¶æ
-åç
-§
+ *  周期通知の状態参照
  */
 #ifdef TOPPERS_ref_cyc
@@ -417,5 +399,5 @@
 
 /*
- *  å¨æéç¥èµ·åã«ã¼ãã³
+ *  周期通知起動ルーチン
  */
 #ifdef TOPPERS_cyccal
@@ -425,12 +407,11 @@
 {
 	/*
-	 *  æ¬¡åã®èµ·åã®ããã®ã¿ã¤ã ã¤ãã³ããç»é²ããï¼»ASPD1037ï¼½ï¼
+	 *  次回の起動のためのタイムイベントを登録する［ASPD1037］．
 	 */
-	p_cyccb->tmevtb.evttim += p_cyccb->p_cycinib->cyctim;	/*ï¼»ASPD1038ï¼½*/
+	p_cyccb->tmevtb.evttim += p_cyccb->p_cycinib->cyctim;	/*［ASPD1038］*/
 	tmevtb_register(&(p_cyccb->tmevtb));
 
 	/*
-	 *  éç¥ãã³ãã©ãï¼CPUã­ãã¯è§£é¤ç¶æ
-ã§å¼ã³åºãï¼
+	 *  通知ハンドラを，CPUロック解除状態で呼び出す．
 	 */
 	unlock_cpu();
Index: azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		å¨æéç¥æ©è½
+ *		周期通知機能
  */
 
@@ -68,35 +53,33 @@
 
 /*
- *  å¨æéç¥åæåãã­ãã¯
+ *  周期通知初期化ブロック
  */
 typedef struct cyclic_handler_initialization_block {
-	ATR			cycatr;			/* å¨æéç¥å±æ§ */
-	intptr_t	exinf;			/* éç¥ãã³ãã©ã®æ¡å¼µæ
-å ± */
-	NFYHDR		nfyhdr;			/* éç¥ãã³ãã©ã®èµ·åçªå° */
-	RELTIM		cyctim;			/* å¨æéç¥ã®èµ·åå¨æ */
-	RELTIM		cycphs;			/* å¨æéç¥ã®èµ·åä½ç¸ */
+	ATR			cycatr;			/* 周期通知属性 */
+	intptr_t	exinf;			/* 通知ハンドラの拡張情報 */
+	NFYHDR		nfyhdr;			/* 通知ハンドラの起動番地 */
+	RELTIM		cyctim;			/* 周期通知の起動周期 */
+	RELTIM		cycphs;			/* 周期通知の起動位相 */
 } CYCINIB;
 
 /*
- *  å¨æéç¥ç®¡çãã­ãã¯
+ *  周期通知管理ブロック
  *
- *	æ¬¡ã«å¨æéç¥ãèµ·åããæå»ã¯ï¼ã¿ã¤ã ã¤ãã³ããã­ãã¯ï¼tmevtbï¼ä¸­ã®
- *	ã¿ã¤ã ã¤ãã³ãã®çºçæå»ï¼evttimï¼ã§ä¿æããï¼
+ *	次に周期通知を起動する時刻は，タイムイベントブロック（tmevtb）中の
+ *	タイムイベントの発生時刻（evttim）で保持する．
  */
 typedef struct cyclic_handler_control_block {
-	const CYCINIB *p_cycinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	bool_t		cycsta;			/* å¨æéç¥ã®åä½ç¶æ
- */
-	TMEVTB		tmevtb;			/* ã¿ã¤ã ã¤ãã³ããã­ãã¯ */
+	const CYCINIB *p_cycinib;	/* 初期化ブロックへのポインタ */
+	bool_t		cycsta;			/* 周期通知の動作状態 */
+	TMEVTB		tmevtb;			/* タイムイベントブロック */
 } CYCCB;
 
 /*
- *  ä½¿ç¨ãã¦ããªãå¨æéç¥ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない周期通知管理ブロックのリスト
  */
 extern QUEUE	free_cyccb;
 
 /*
- *  å¨æéç¥IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  周期通知IDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_cycid;
@@ -104,5 +87,5 @@
 
 /*
- *  å¨æéç¥åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  周期通知初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const CYCINIB	cycinib_table[];
@@ -110,25 +93,25 @@
 
 /*
- *  å¨æéç¥ã®éç¥æ¹æ³ã®æ ¼ç´ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  周期通知の通知方法の格納エリア（kernel_cfg.c）
  */
 extern T_NFYINFO	acyc_nfyinfo_table[];
 
 /*
- *  å¨æéç¥ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  周期通知管理ブロックのエリア（kernel_cfg.c）
  */
 extern CYCCB	cyccb_table[];
 
 /*
- *  å¨æéç¥ç®¡çãã­ãã¯ããå¨æéç¥IDãåãåºãããã®ãã¯ã­
+ *  周期通知管理ブロックから周期通知IDを取り出すためのマクロ
  */
 #define	CYCID(p_cyccb)	((ID)(((p_cyccb) - cyccb_table) + TMIN_CYCID))
 
 /*
- *  å¨æéç¥æ©è½ã®åæå
+ *  周期通知機能の初期化
  */
 extern void	initialize_cyclic(void);
 
 /*
- *  å¨æéç¥èµ·åã«ã¼ãã³
+ *  周期通知起動ルーチン
  */
 extern void	call_cyclic(CYCCB *p_cyccb);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/cyclic.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		å¨æéç¥æ©è½ã®çæã¹ã¯ãªãã
+#		周期通知機能の生成スクリプト
 #
 
@@ -67,22 +52,21 @@
 
   def prepare(key, params)
-    # cycatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2383ï¼½
-    #ï¼TA_STAä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # cycatrが無効の場合（E_RSATR）［NGKI2383］
+    #（TA_STA以外のビットがセットされている場合）
     if (params[:cycatr] & ~($TA_STA)) != 0
       error_illegal_id("E_RSATR", params, :cycatr, :cycid)
     end
 
-    # (0 < cyctim && cyctim <= TMAX_RELTIM)ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI2397ï¼½
+    # (0 < cyctim && cyctim <= TMAX_RELTIM)でない場合（E_PAR）［NGKI2397］
     if !(0 < params[:cyctim] && params[:cyctim] <= $TMAX_RELTIM)
       error_illegal_id("E_PAR", params, :cyctim, :cycid)
     end
 
-    # (0 <= cycphs && cycphs <= TMAX_RELTIM)ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI2399ï¼½
+    # (0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合（E_PAR）［NGKI2399］
     if !(0 <= params[:cycphs] && params[:cycphs] <= $TMAX_RELTIM)
       error_illegal_id("E_PAR", params, :cycphs, :cycid)
     end
 
-    # éç¥æ
-å ±ã®å¦ç
+    # 通知情報の処理
     params[:nfyhdr] = generateNotifyHandler(key, params, :cycid)
   end
@@ -95,6 +79,5 @@
 
 #
-#  å¨æéç¥ã«é¢ããæ
-å ±ã®çæ
+#  周期通知に関する情報の生成
 #
 $kernelCfgC.comment_header("Cyclic Notification Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ãã¼ã¿ã­ã¥ã¼æ©è½
+ *		データキュー機能
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_DTQ_ENTER
@@ -158,5 +143,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®æ°
+ *  データキューの数
  */
 #define tnum_dtq	((uint_t)(tmax_dtqid - TMIN_DTQID + 1))
@@ -164,5 +149,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼IDãããã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  データキューIDからデータキュー管理ブロックを取り出すためのマクロ
  */
 #define INDEX_DTQ(dtqid)	((uint_t)((dtqid) - TMIN_DTQID))
@@ -172,10 +157,10 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªããã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないデータキュー管理ブロックのリスト
  */
 QUEUE	free_dtqcb;
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼æ©è½ã®åæå
+ *  データキュー機能の初期化
  */
 void
@@ -208,5 +193,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´
+ *  データキュー管理領域へのデータの格納
  */
 #ifdef TOPPERS_dtqenq
@@ -226,5 +211,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®å¼·å¶æ ¼ç´
+ *  データキュー管理領域へのデータの強制格納
  */
 #ifdef TOPPERS_dtqfenq
@@ -249,5 +234,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã
+ *  データキュー管理領域からのデータの取出し
  */
 #ifdef TOPPERS_dtqdeq
@@ -267,5 +252,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®ãã¼ã¿éä¿¡
+ *  データキューへのデータ送信
  */
 #ifdef TOPPERS_dtqsnd
@@ -294,5 +279,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®ãã¼ã¿å¼·å¶éä¿¡
+ *  データキューへのデータ強制送信
  */
 #ifdef TOPPERS_dtqfsnd
@@ -316,5 +301,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®ãã¼ã¿åä¿¡
+ *  データキューからのデータ受信
  */
 #ifdef TOPPERS_dtqrcv
@@ -350,5 +335,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®çæ
+ *  データキューの生成
  */
 #ifdef TOPPERS_acre_dtq
@@ -410,5 +395,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®åé¤
+ *  データキューの削除
  */
 #ifdef TOPPERS_del_dtq
@@ -457,5 +442,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡
+ *  データキューへの送信
  */
 #ifdef TOPPERS_snd_dtq
@@ -503,5 +488,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  データキューへの送信（ポーリング）
  */
 #ifdef TOPPERS_psnd_dtq
@@ -546,5 +531,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  データキューへの送信（タイムアウトあり）
  */
 #ifdef TOPPERS_tsnd_dtq
@@ -598,5 +583,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®å¼·å¶éä¿¡
+ *  データキューへの強制送信
  */
 #ifdef TOPPERS_fsnd_dtq
@@ -642,5 +627,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡
+ *  データキューからの受信
  */
 #ifdef TOPPERS_rcv_dtq
@@ -693,5 +678,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  データキューからの受信（ポーリング）
  */
 #ifdef TOPPERS_prcv_dtq
@@ -731,5 +716,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  データキューからの受信（タイムアウトあり）
  */
 #ifdef TOPPERS_trcv_dtq
@@ -787,5 +772,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®ååæå
+ *  データキューの再初期化
  */
 #ifdef TOPPERS_ini_dtq
@@ -827,7 +812,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®ç¶æ
-åç
-§
+ *  データキューの状態参照
  */
 #ifdef TOPPERS_ref_dtq
Index: azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ãã¼ã¿ã­ã¥ã¼æ©è½
+ *		データキュー機能
  */
 
@@ -68,84 +53,65 @@
 
 /*
- *  ãã¼ã¿ç®¡çãã­ãã¯
+ *  データ管理ブロック
  */
 typedef struct data_management_block {
-	intptr_t	data;			/* ãã¼ã¿æ¬ä½ */
+	intptr_t	data;			/* データ本体 */
 } DTQMB;
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼åæåãã­ãã¯
+ *  データキュー初期化ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
- *  ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの初期化ブロックの共通部分
+ *  （WOBJINIB）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初のフィールドが共通になっている．
  */
 typedef struct dataqueue_initialization_block {
-	ATR			dtqatr;			/* ãã¼ã¿ã­ã¥ã¼å±æ§ */
-	uint_t		dtqcnt;			/* ãã¼ã¿ã­ã¥ã¼ã®å®¹é */
-	DTQMB		*p_dtqmb;		/* ãã¼ã¿ã­ã¥ã¼ç®¡çé åã®å
-é ­çªå° */
+	ATR			dtqatr;			/* データキュー属性 */
+	uint_t		dtqcnt;			/* データキューの容量 */
+	DTQMB		*p_dtqmb;		/* データキュー管理領域の先頭番地 */
 } DTQINIB;
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯
+ *  データキュー管理ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼
- *  ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã®
- *  ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）
+ *  を拡張（オブジェクト指向言語の継承に相当）したもので，最初の2つの
+ *  フィールドが共通になっている．
  */
 typedef struct dataqueue_control_block {
-	QUEUE		swait_queue;	/* ãã¼ã¿ã­ã¥ã¼éä¿¡å¾
-ã¡ã­ã¥ã¼ */
-	const DTQINIB *p_dtqinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	QUEUE		rwait_queue;	/* ãã¼ã¿ã­ã¥ã¼åä¿¡å¾
-ã¡ã­ã¥ã¼ */
-	uint_t		count;			/* ãã¼ã¿ã­ã¥ã¼ä¸­ã®ãã¼ã¿ã®æ° */
-	uint_t		head;			/* æåã®ãã¼ã¿ã®æ ¼ç´å ´æ */
-	uint_t		tail;			/* æå¾ã®ãã¼ã¿ã®æ ¼ç´å ´æã®æ¬¡ */
+	QUEUE		swait_queue;	/* データキュー送信待ちキュー */
+	const DTQINIB *p_dtqinib;	/* 初期化ブロックへのポインタ */
+	QUEUE		rwait_queue;	/* データキュー受信待ちキュー */
+	uint_t		count;			/* データキュー中のデータの数 */
+	uint_t		head;			/* 最初のデータの格納場所 */
+	uint_t		tail;			/* 最後のデータの格納場所の次 */
 } DTQCB;
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼å¾
-ã¡æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  データキュー待ち情報ブロックの定義
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *  ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®2ã¤ã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *  （WINFO_WOBJ）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初の2つのフィールドが共通になっている．
  */
 typedef struct dataqueue_send_waiting_information {
-	WINFO		winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	DTQCB		*p_dtqcb;		/* å¾
-ã£ã¦ãããã¼ã¿ã­ã¥ã¼ã®ç®¡çãã­ãã¯ */
-	intptr_t	data;			/* éä¿¡ãã¼ã¿ */
+	WINFO		winfo;			/* 標準の待ち情報ブロック */
+	DTQCB		*p_dtqcb;		/* 待っているデータキューの管理ブロック */
+	intptr_t	data;			/* 送信データ */
 } WINFO_SDTQ;
 
 typedef struct dataqueue_receive_waiting_information {
-	WINFO		winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	DTQCB		*p_dtqcb;		/* å¾
-ã£ã¦ãããã¼ã¿ã­ã¥ã¼ã®ç®¡çãã­ãã¯ */
-	intptr_t	data;			/* åä¿¡ãã¼ã¿ */
+	WINFO		winfo;			/* 標準の待ち情報ブロック */
+	DTQCB		*p_dtqcb;		/* 待っているデータキューの管理ブロック */
+	intptr_t	data;			/* 受信データ */
 } WINFO_RDTQ;
 
 /*
- *  ä½¿ç¨ãã¦ããªããã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないデータキュー管理ブロックのリスト
  */
 extern QUEUE	free_dtqcb;
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  データキューIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_dtqid;
@@ -153,5 +119,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  データキュー初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const DTQINIB	dtqinib_table[];
@@ -159,45 +125,45 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  データキュー管理ブロックのエリア（kernel_cfg.c）
  */
 extern DTQCB	dtqcb_table[];
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ãããã¼ã¿ã­ã¥ã¼IDãåãåºãããã®ãã¯ã­
+ *  データキュー管理ブロックからデータキューIDを取り出すためのマクロ
  */
 #define	DTQID(p_dtqcb)	((ID)(((p_dtqcb) - dtqcb_table) + TMIN_DTQID))
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼æ©è½ã®åæå
+ *  データキュー機能の初期化
  */
 extern void	initialize_dataqueue(void);
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´
+ *  データキュー管理領域へのデータの格納
  */
 extern void	enqueue_data(DTQCB *p_dtqcb, intptr_t data);
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®å¼·å¶æ ¼ç´
+ *  データキュー管理領域へのデータの強制格納
  */
 extern void	force_enqueue_data(DTQCB *p_dtqcb, intptr_t data);
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã
+ *  データキュー管理領域からのデータの取出し
  */
 extern void	dequeue_data(DTQCB *p_dtqcb, intptr_t *p_data);
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®ãã¼ã¿éä¿¡
+ *  データキューへのデータ送信
  */
 extern bool_t	send_data(DTQCB *p_dtqcb, intptr_t data);
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®ãã¼ã¿å¼·å¶éä¿¡
+ *  データキューへのデータ強制送信
  */
 extern void	force_send_data(DTQCB *p_dtqcb, intptr_t data);
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®ãã¼ã¿åä¿¡
+ *  データキューからのデータ受信
  */
 extern bool_t	receive_data(DTQCB *p_dtqcb, intptr_t *p_data);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/dataqueue.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		ãã¼ã¿ã­ã¥ã¼æ©è½ã®çæã¹ã¯ãªãã
+#		データキュー機能の生成スクリプト
 #
 
@@ -66,19 +51,19 @@
 
   def prepare(key, params)
-    # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨­å®
+    # パラメータが省略された時のデフォルト値の設定
     params[:dtqmb] ||= "NULL"
 
-    # dtqatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1669ï¼½
-    #ï¼TA_TPRIä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # dtqatrが無効の場合（E_RSATR）［NGKI1669］
+    #（TA_TPRI以外のビットがセットされている場合）
     if (params[:dtqatr] & ~($TA_TPRI)) != 0
       error_illegal_id("E_RSATR", params, :dtqatr, :dtqid)
     end
 
-    # dtqmbãNULLã§ãªãå ´åï¼E_NOSPTï¼ï¼»ASPS0132ï¼½
+    # dtqmbがNULLでない場合（E_NOSPT）［ASPS0132］
     if params[:dtqmb] != "NULL"
       error_illegal_id("E_NOSPT", params, :dtqmb, :dtqid)
     end
 
-    # ãã¼ã¿ã­ã¥ã¼ç®¡çé å
+    # データキュー管理領域
     if params[:dtqcnt] > 0
       dtqmbName = "_kernel_dtqmb_#{params[:dtqid]}"
@@ -97,6 +82,5 @@
 
 #
-#  ãã¼ã¿ã­ã¥ã¼ã«é¢ããæ
-å ±ã®çæ
+#  データキューに関する情報の生成
 #
 $kernelCfgC.comment_header("Dataqueue Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¤ãã³ããã©ã°æ©è½
+ *		イベントフラグ機能
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_FLG_ENTER
@@ -142,5 +127,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®æ°
+ *  イベントフラグの数
  */
 #define tnum_flg	((uint_t)(tmax_flgid - TMIN_FLGID + 1))
@@ -148,5 +133,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°IDããã¤ãã³ããã©ã°ç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  イベントフラグIDからイベントフラグ管理ブロックを取り出すためのマクロ
  */
 #define INDEX_FLG(flgid)	((uint_t)((flgid) - TMIN_FLGID))
@@ -156,10 +141,10 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªãã¤ãã³ããã©ã°ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないイベントフラグ管理ブロックのリスト
  */
 QUEUE	free_flgcb;
 
 /*
- *  ã¤ãã³ããã©ã°æ©è½ã®åæå
+ *  イベントフラグ機能の初期化
  */
 void
@@ -189,6 +174,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡è§£é¤æ¡ä»¶ã®ãã§ãã¯
+ *  イベントフラグ待ち解除条件のチェック
  */
 #ifdef TOPPERS_flgcnd
@@ -211,11 +195,9 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®çæ
+ *  イベントフラグの生成
  *
- *  pk_cflg->iflgptnã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç
-§ããªãããï¼
- *  ã­ã¼ã«ã«å¤æ°ã«ã³ãã¼ããå¿
-è¦ããªãï¼éä¸­ã§æ¸ãæãã£ã¦ãæ¯éããª
- *  ãï¼ï¼
+ *  pk_cflg->iflgptnは，エラーチェックをせず，一度しか参照しないため，
+ *  ローカル変数にコピーする必要がない（途中で書き換わっても支障がな
+ *  い）．
  */
 #ifdef TOPPERS_acre_flg
@@ -260,5 +242,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®åé¤
+ *  イベントフラグの削除
  */
 #ifdef TOPPERS_del_flg
@@ -303,5 +285,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ã»ãã
+ *  イベントフラグのセット
  */
 #ifdef TOPPERS_set_flg
@@ -361,5 +343,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ã¯ãªã¢
+ *  イベントフラグのクリア
  */
 #ifdef TOPPERS_clr_flg
@@ -394,6 +376,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡
+ *  イベントフラグ待ち
  */
 #ifdef TOPPERS_wai_flg
@@ -448,6 +429,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡ï¼ãã¼ãªã³ã°ï¼
+ *  イベントフラグ待ち（ポーリング）
  */
 #ifdef TOPPERS_pol_flg
@@ -490,6 +470,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  イベントフラグ待ち（タイムアウトあり）
  */
 #ifdef TOPPERS_twai_flg
@@ -550,5 +529,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ååæå
+ *  イベントフラグの再初期化
  */
 #ifdef TOPPERS_ini_flg
@@ -587,7 +566,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ç¶æ
-åç
-§
+ *  イベントフラグの状態参照
  */
 #ifdef TOPPERS_ref_flg
Index: azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¤ãã³ããã©ã°æ©è½
+ *		イベントフラグ機能
  */
 
@@ -68,76 +53,52 @@
 
 /*
- *  ã¤ãã³ããã©ã°åæåãã­ãã¯
+ *  イベントフラグ初期化ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
- *  ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの初期化ブロックの共通部分
+ *  （WOBJINIB）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初のフィールドが共通になっている．
  */
 typedef struct eventflag_initialization_block {
-	ATR			flgatr;			/* ã¤ãã³ããã©ã°å±æ§ */
-	FLGPTN		iflgptn;		/* ã¤ãã³ããã©ã°ã®ããããã¿ã¼ã³ã®åæå¤ */
+	ATR			flgatr;			/* イベントフラグ属性 */
+	FLGPTN		iflgptn;		/* イベントフラグのビットパターンの初期値 */
 } FLGINIB;
 
 /*
- *  ã¤ãã³ããã©ã°ç®¡çãã­ãã¯
+ *  イベントフラグ管理ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼
- *  ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã®
- *  ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）
+ *  を拡張（オブジェクト指向言語の継承に相当）したもので，最初の2つの
+ *  フィールドが共通になっている．
  */
 typedef struct eventflag_control_block {
-	QUEUE		wait_queue;		/* ã¤ãã³ããã©ã°å¾
-ã¡ã­ã¥ã¼ */
-	const FLGINIB *p_flginib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	FLGPTN		flgptn;			/* ã¤ãã³ããã©ã°ç¾å¨ãã¿ã¼ã³ */
+	QUEUE		wait_queue;		/* イベントフラグ待ちキュー */
+	const FLGINIB *p_flginib;	/* 初期化ブロックへのポインタ */
+	FLGPTN		flgptn;			/* イベントフラグ現在パターン */
 } FLGCB;
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  イベントフラグ待ち情報ブロックの定義
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *  ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®2ã¤ã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *  （WINFO_WOBJ）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初の2つのフィールドが共通になっている．
  *
- *  waiptnã«ã¯ï¼å¾
-ã¡ç¶æ
-ã®éã¯å¾
-ã¡ãã¿ã¼ã³ãï¼å¾
-ã¡è§£é¤ãããå¾ã¯å¾
-ã¡è§£
- *  é¤æã®ãã¿ã¼ã³ãå
-¥ããï¼1ã¤ã®ãã£ã¼ã«ãã2ã¤ã®ç®çã«å
-¼ç¨ãã¦ããï¼ï¼
+ *  waiptnには，待ち状態の間は待ちパターンを，待ち解除された後は待ち解
+ *  除時のパターンを入れる（1つのフィールドを2つの目的に兼用している）．
  */
 typedef struct eventflag_waiting_information {
-	WINFO		winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	FLGCB		*p_flgcb;		/* å¾
-ã£ã¦ããã¤ãã³ããã©ã°ã®ç®¡çãã­ãã¯ */
-	FLGPTN		waiptn;			/* å¾
-ã¡ãã¿ã¼ã³ï¼å¾
-ã¡è§£é¤æã®ãã¿ã¼ã³ */
-	MODE		wfmode;			/* å¾
-ã¡ã¢ã¼ã */
+	WINFO		winfo;			/* 標準の待ち情報ブロック */
+	FLGCB		*p_flgcb;		/* 待っているイベントフラグの管理ブロック */
+	FLGPTN		waiptn;			/* 待ちパターン／待ち解除時のパターン */
+	MODE		wfmode;			/* 待ちモード */
 } WINFO_FLG;
 
 /*
- *  ä½¿ç¨ãã¦ããªãã¤ãã³ããã©ã°ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないイベントフラグ管理ブロックのリスト
  */
 extern QUEUE	free_flgcb;
 
 /*
- *  ã¤ãã³ããã©ã°IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  イベントフラグIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_flgid;
@@ -145,5 +106,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  イベントフラグ初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const FLGINIB	flginib_table[];
@@ -151,21 +112,20 @@
 
 /*
- *  ã¤ãã³ããã©ã°ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  イベントフラグ管理ブロックのエリア（kernel_cfg.c）
  */
 extern FLGCB	flgcb_table[];
 
 /*
- *  ã¤ãã³ããã©ã°ç®¡çãã­ãã¯ããã¤ãã³ããã©ã°IDãåãåºãããã®ãã¯ã­
+ *  イベントフラグ管理ブロックからイベントフラグIDを取り出すためのマクロ
  */
 #define	FLGID(p_flgcb)	((ID)(((p_flgcb) - flgcb_table) + TMIN_FLGID))
 
 /*
- *  ã¤ãã³ããã©ã°æ©è½ã®åæå
+ *  イベントフラグ機能の初期化
  */
 extern void	initialize_eventflag(void);
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡è§£é¤æ¡ä»¶ã®ãã§ãã¯
+ *  イベントフラグ待ち解除条件のチェック
  */
 extern bool_t	check_flg_cond(FLGCB *p_flgcb, FLGPTN waiptn,
Index: azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/eventflag.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		ã¤ãã³ããã©ã°æ©è½ã®çæã¹ã¯ãªãã
+#		イベントフラグ機能の生成スクリプト
 #
 
@@ -66,11 +51,11 @@
 
   def prepare(key, params)
-    # flgatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1562ï¼½
-    #ï¼TA_TPRIï¼TA_WMULï¼TA_CLRä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # flgatrが無効の場合（E_RSATR）［NGKI1562］
+    #（TA_TPRI，TA_WMUL，TA_CLR以外のビットがセットされている場合）
     if (params[:flgatr] & ~($TA_TPRI|$TA_WMUL|$TA_CLR)) != 0
       error_illegal_id("E_RSATR", params, :flgatr, :flgid)
     end
 
-    # iflgptnãFLGPTNã«æ ¼ç´ã§ããªãå ´åï¼E_PARï¼ï¼»NGKI3275ï¼½
+    # iflgptnがFLGPTNに格納できない場合（E_PAR）［NGKI3275］
     if (params[:iflgptn] & ~((1 << $TBIT_FLGPTN) - 1)) != 0
       error_wrong_id("E_PAR", params, :iflgptn, :flgid, "too large")
@@ -84,6 +69,5 @@
 
 #
-#  ã¤ãã³ããã©ã°ã«é¢ããæ
-å ±ã®çæ
+#  イベントフラグに関する情報の生成
 #
 $kernelCfgC.comment_header("Eventflag Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/exception.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/exception.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/exception.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		CPUä¾å¤ç®¡çæ©è½
+ *		CPU例外管理機能
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_XSNS_DPN_ENTER
@@ -76,5 +61,5 @@
 
 /* 
- *  CPUä¾å¤ãã³ãã©ç®¡çæ©è½ã®åæå
+ *  CPU例外ハンドラ管理機能の初期化
  */
 #ifdef TOPPERS_excini
@@ -97,16 +82,12 @@
 
 /*
- *  CPUä¾å¤ã®çºçããã³ã³ãã­ã¹ãã®åç
-§
+ *  CPU例外の発生したコンテキストの参照
  */
 
 /*
- *  CPUä¾å¤çºçæã®ãã£ã¹ãããä¿çç¶æ
-ã®åç
-§
+ *  CPU例外発生時のディスパッチ保留状態の参照
  *
- *  CPUä¾å¤ãã³ãã©ä¸­ã§enadspãå¤åãããã¨ã¯ãªãããï¼CPUä¾å¤ãçºçã
- *  ãæã®enadspãä¿å­ãã¦ããå¿
-è¦ã¯ãªãï¼
+ *  CPU例外ハンドラ中でenadspが変化することはないため，CPU例外が発生し
+ *  た時のenadspを保存しておく必要はない．
  */
 #ifdef TOPPERS_xsns_dpn
Index: azure_iot_hub/trunk/asp3_dcre/kernel/exception.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/exception.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/exception.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		CPUä¾å¤ç®¡çæ©è½
+ *		CPU例外管理機能
  */
 
@@ -68,20 +53,19 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©åæåãã­ãã¯
+ *  CPU例外ハンドラ初期化ブロック
  */
 typedef struct cpu_exception_handler_initialization_block {
-	EXCNO		excno;			/* CPUä¾å¤ãã³ãã©çªå· */
-	ATR			excatr;			/* CPUä¾å¤ãã³ãã©å±æ§ */
-	FP			exc_entry;		/* CPUä¾å¤ãã³ãã©ã®åºå
-¥å£å¦çã®çªå° */
+	EXCNO		excno;			/* CPU例外ハンドラ番号 */
+	ATR			excatr;			/* CPU例外ハンドラ属性 */
+	FP			exc_entry;		/* CPU例外ハンドラの出入口処理の番地 */
 } EXCINIB;
 
 /*
- *  å®ç¾©ããCPUä¾å¤ãã³ãã©çªå·ã®æ°ï¼kernel_cfg.cï¼
+ *  定義するCPU例外ハンドラ番号の数（kernel_cfg.c）
  */
 extern const uint_t	tnum_def_excno;
 
 /*
- *  CPUä¾å¤ãã³ãã©åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  CPU例外ハンドラ初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const EXCINIB	excinib_table[];
@@ -90,5 +74,5 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©ç®¡çæ©è½ã®åæå
+ *  CPU例外ハンドラ管理機能の初期化
  */
 extern void	initialize_exception(void);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/exception.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/exception.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/exception.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,23 +42,23 @@
 
 #
-#		CPUä¾å¤ç®¡çæ©è½ã®çæã¹ã¯ãªãã
+#		CPU例外管理機能の生成スクリプト
 #
 
 #
-#  kernel_cfg.cã®çæ
+#  kernel_cfg.cの生成
 #
 $kernelCfgC.comment_header("CPU Exception Management Functions")
 
 #
-#  CPUä¾å¤ãã³ãã©ã«é¢ããã¨ã©ã¼ãã§ãã¯
+#  CPU例外ハンドラに関するエラーチェック
 #
 $cfgData[:DEF_EXC].each do |key, params|
-  # excnoãCPUä¾å¤ãã³ãã©çªå·ã¨ãã¦æ­£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3134ï¼½
+  # excnoがCPU例外ハンドラ番号として正しくない場合（E_PAR）［NGKI3134］
   if $EXCNO_VALID.index(params[:excno]).nil?
     error_illegal("E_PAR", params, :excno)
   end
 
-  # excatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3131ï¼½
-  #ï¼TARGET_EXCATRä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+  # excatrが無効の場合（E_RSATR）［NGKI3131］
+  #（TARGET_EXCATR以外のビットがセットされている場合）
   if (params[:excatr] & ~($TARGET_EXCATR)) != 0
     error_illegal_sym("E_RSATR", params, :excatr, :excno)
@@ -82,10 +67,9 @@
 
 #
-#  CPUä¾å¤ãã³ãã©ã®ããã®æ¨æºçãªåæåæ
-å ±ã®çæ
+#  CPU例外ハンドラのための標準的な初期化情報の生成
 #
 if !$OMIT_INITIALIZE_EXCEPTION
   #
-  #  å®ç¾©ããCPUä¾å¤ãã³ãã©ã®æ°
+  #  定義するCPU例外ハンドラの数
   #
   $kernelCfgC.add(<<EOS)
@@ -96,5 +80,5 @@
   if $cfgData[:DEF_EXC].size != 0
     #
-    #  CPUä¾å¤ãã³ãã©ã®ã¨ã³ããª
+    #  CPU例外ハンドラのエントリ
     #
     $cfgData[:DEF_EXC].each do |key, params|
@@ -105,5 +89,5 @@
 
     #
-    #  CPUä¾å¤ãã³ãã©åæåãã­ãã¯
+    #  CPU例外ハンドラ初期化ブロック
     #
     $kernelCfgC.add("const EXCINIB _kernel_excinib_table[TNUM_DEF_EXCNO] = {")
@@ -122,5 +106,5 @@
 
 #
-#  CPUä¾å¤ç®¡çæ©è½åæåé¢æ°ã®è¿½å 
+#  CPU例外管理機能初期化関数の追加
 #
 $initializeFunctions.push("_kernel_initialize_exception();")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/genoffset.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/genoffset.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/genoffset.trb	(revision 389)
@@ -8,47 +8,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 #  
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -56,15 +41,14 @@
 
 #
-#		ãªãã»ãããã¡ã¤ã«çæç¨ã®çæã¹ã¯ãªãã
+#		オフセットファイル生成用の生成スクリプト
 #
 
 # 
-#  ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®
+#  タイムスタンプファイルの指定
 # 
 $timeStampFileName = "offset.timestamp"
 
 # 
-#  offset.hã®å
-é ­é¨åã®çæ
+#  offset.hの先頭部分の生成
 # 
 $offsetH = GenFile.new("offset.h")
@@ -72,5 +56,5 @@
 
 # 
-#  #defineãã£ã¬ã¯ãã£ãã®çæ
+#  #defineディレクティブの生成
 # 
 def GenerateDefine(symbol, value)
@@ -79,5 +63,5 @@
 
 # 
-#  ãããã®ãµã¼ã
+#  ビットのサーチ
 # 
 def SearchBit(val)
@@ -91,5 +75,5 @@
 
 # 
-#  ããããã£ã¼ã«ãã®ãªãã»ããã¨ãããä½ç½®ã®å®ç¾©ã®çæ
+#  ビットフィールドのオフセットとビット位置の定義の生成
 # 
 def GenerateDefineBit(label, structSize, outputSize)
@@ -138,6 +122,5 @@
 
 # 
-#  ãã¤ãé
-ç½®ã®ãã§ãã¯
+#  バイト配置のチェック
 # 
 def magicCheck(size, check)
Index: azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		å²è¾¼ã¿ç®¡çæ©è½
+ *		割込み管理機能
  */
 
@@ -66,5 +51,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ISR_ENTER
@@ -149,5 +134,5 @@
 
 /*
- *  å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å®
+ *  割込み番号の範囲の判定
  */
 #ifndef VALID_INTNO_DISINT
@@ -172,6 +157,5 @@
 
 /*
- *  å²è¾¼ã¿åªå
-åº¦ã®ç¯å²ã®å¤å®
+ *  割込み優先度の範囲の判定
  */
 #ifndef VALID_INTPRI_CHGIPM
@@ -181,5 +165,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ°
+ *  割込みサービスルーチンの数
  */
 #define tnum_isr	((uint_t)(tmax_isrid - TMIN_ISRID + 1))
@@ -187,6 +171,6 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãã­ãã¯ãå
- *  ãåºãããã®ãã¯ã­
+ *  割込みサービスルーチンIDから割込みサービスルーチン管理ブロックを取
+ *  り出すためのマクロ
  */
 #define INDEX_ISR(isrid)	((uint_t)((isrid) - TMIN_ISRID))
@@ -194,5 +178,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã­ã¥ã¼ã¸ã®ç»é²
+ *  割込みサービスルーチンキューへの登録
  */
 Inline void
@@ -214,10 +198,10 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない割込みサービスルーチン管理ブロックのリスト
  */
 QUEUE	free_isrcb;
 
 /* 
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³æ©è½ã®åæå
+ *  割込みサービスルーチン機能の初期化
  */
 void
@@ -250,5 +234,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å¼åºã
+ *  割込みサービスルーチンの呼出し
  */
 #ifdef TOPPERS_isrcal
@@ -268,6 +252,5 @@
 
 		if (p_queue->p_next != p_isr_queue) {
-			/* ISRã®å¼åºãåã®ç¶æ
-ã«æ»ã */
+			/* ISRの呼出し前の状態に戻す */
 			if (sense_lock()) {
 				unlock_cpu();
@@ -280,5 +263,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ã®æ¤ç´¢
+ *  割込みサービスルーチン呼出しキューの検索
  */
 Inline QUEUE *
@@ -311,10 +294,8 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®çæ
+ *  割込みサービスルーチンの生成
  *
- *  pk_cisr->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç
-§ããªãããï¼ã­ã¼
- *  ã«ã«å¤æ°ã«ã³ãã¼ããå¿
-è¦ããªãï¼éä¸­ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼
+ *  pk_cisr->exinfは，エラーチェックをせず，一度しか参照しないため，ロー
+ *  カル変数にコピーする必要がない（途中で書き換わっても支障がない）．
  */
 #ifdef TOPPERS_acre_isr
@@ -374,5 +355,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®åé¤
+ *  割込みサービスルーチンの削除
  */
 #ifdef TOPPERS_del_isr
@@ -414,5 +395,5 @@
 
 /* 
- *  å²è¾¼ã¿ç®¡çæ©è½ã®åæå
+ *  割込み管理機能の初期化
  */
 #ifdef TOPPERS_intini
@@ -440,8 +421,8 @@
 
 /*
- *  å²è¾¼ã¿ã®ç¦æ­¢ï¼»NGKI3555ï¼½
+ *  割込みの禁止［NGKI3555］
  */
 #ifdef TOPPERS_dis_int
-#ifdef TOPPERS_SUPPORT_DIS_INT					/*ï¼»NGKI3093ï¼½*/
+#ifdef TOPPERS_SUPPORT_DIS_INT					/*［NGKI3093］*/
 
 ER
@@ -452,5 +433,5 @@
 
 	LOG_DIS_INT_ENTER(intno);
-	CHECK_PAR(VALID_INTNO_DISINT(intno));		/*ï¼»NGKI3083ï¼½ï¼»NGKI3087ï¼½*/
+	CHECK_PAR(VALID_INTNO_DISINT(intno));		/*［NGKI3083］［NGKI3087］*/
 
 	locked = sense_lock();
@@ -459,9 +440,9 @@
 	}
 	if (check_intno_cfg(intno)) {
-		disable_int(intno);						/*ï¼»NGKI3086ï¼½*/
+		disable_int(intno);						/*［NGKI3086］*/
 		ercd = E_OK;
 	}
 	else {
-		ercd = E_OBJ;							/*ï¼»NGKI3085ï¼½*/
+		ercd = E_OBJ;							/*［NGKI3085］*/
 	}
 	if (!locked) {
@@ -478,8 +459,8 @@
 
 /*
- *  å²è¾¼ã¿ã®è¨±å¯ï¼»NGKI3556ï¼½
+ *  割込みの許可［NGKI3556］
  */
 #ifdef TOPPERS_ena_int
-#ifdef TOPPERS_SUPPORT_ENA_INT					/*ï¼»NGKI3106ï¼½*/
+#ifdef TOPPERS_SUPPORT_ENA_INT					/*［NGKI3106］*/
 
 ER
@@ -490,5 +471,5 @@
 
 	LOG_ENA_INT_ENTER(intno);
-	CHECK_PAR(VALID_INTNO_DISINT(intno));		/*ï¼»NGKI3096ï¼½ï¼»NGKI3100ï¼½*/
+	CHECK_PAR(VALID_INTNO_DISINT(intno));		/*［NGKI3096］［NGKI3100］*/
 
 	locked = sense_lock();
@@ -497,9 +478,9 @@
 	}
 	if (check_intno_cfg(intno)) {
-		enable_int(intno);						/*ï¼»NGKI3099ï¼½*/
+		enable_int(intno);						/*［NGKI3099］*/
 		ercd = E_OK;
 	}
 	else {
-		ercd = E_OBJ;							/*ï¼»NGKI3098ï¼½*/
+		ercd = E_OBJ;							/*［NGKI3098］*/
 	}
 	if (!locked) {
@@ -516,8 +497,8 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ï¼»NGKI3920ï¼½
+ *  割込み要求のクリア［NGKI3920］
  */
 #ifdef TOPPERS_clr_int
-#ifdef TOPPERS_SUPPORT_CLR_INT					/*ï¼»NGKI3927ï¼½*/
+#ifdef TOPPERS_SUPPORT_CLR_INT					/*［NGKI3927］*/
 
 ER
@@ -528,5 +509,5 @@
 
 	LOG_CLR_INT_ENTER(intno);
-	CHECK_PAR(VALID_INTNO_CLRINT(intno));		/*ï¼»NGKI3921ï¼½ï¼»NGKI3930ï¼½*/
+	CHECK_PAR(VALID_INTNO_CLRINT(intno));		/*［NGKI3921］［NGKI3930］*/
 
 	locked = sense_lock();
@@ -535,9 +516,9 @@
 	}
 	if (check_intno_cfg(intno) && check_intno_clear(intno)) {
-		clear_int(intno);						/*ï¼»NGKI3924ï¼½*/
+		clear_int(intno);						/*［NGKI3924］*/
 		ercd = E_OK;
 	}
 	else {
-		ercd = E_OBJ;							/*ï¼»NGKI3923ï¼½ï¼»NGKI3929ï¼½*/
+		ercd = E_OBJ;							/*［NGKI3923］［NGKI3929］*/
 	}
 	if (!locked) {
@@ -554,8 +535,8 @@
 
 /*
- *  å²è¾¼ã¿ã®è¦æ±ï¼»NGKI3932ï¼½
+ *  割込みの要求［NGKI3932］
  */
 #ifdef TOPPERS_ras_int
-#ifdef TOPPERS_SUPPORT_RAS_INT					/*ï¼»NGKI3939ï¼½*/
+#ifdef TOPPERS_SUPPORT_RAS_INT					/*［NGKI3939］*/
 
 ER
@@ -566,5 +547,5 @@
 
 	LOG_RAS_INT_ENTER(intno);
-	CHECK_PAR(VALID_INTNO_RASINT(intno));		/*ï¼»NGKI3933ï¼½ï¼»NGKI3942ï¼½*/
+	CHECK_PAR(VALID_INTNO_RASINT(intno));		/*［NGKI3933］［NGKI3942］*/
 
 	locked = sense_lock();
@@ -573,9 +554,9 @@
 	}
 	if (check_intno_cfg(intno) && check_intno_raise(intno)) {
-		raise_int(intno);						/*ï¼»NGKI3936ï¼½*/
+		raise_int(intno);						/*［NGKI3936］*/
 		ercd = E_OK;
 	}
 	else {
-		ercd = E_OBJ;							/*ï¼»NGKI3935ï¼½ï¼»NGKI3941ï¼½*/
+		ercd = E_OBJ;							/*［NGKI3935］［NGKI3941］*/
 	}
 	if (!locked) {
@@ -592,8 +573,8 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã®ãã§ãã¯ï¼»NGKI3944ï¼½
+ *  割込み要求のチェック［NGKI3944］
  */
 #ifdef TOPPERS_prb_int
-#ifdef TOPPERS_SUPPORT_PRB_INT					/*ï¼»NGKI3951ï¼½*/
+#ifdef TOPPERS_SUPPORT_PRB_INT					/*［NGKI3951］*/
 
 ER_BOOL
@@ -604,5 +585,5 @@
 
 	LOG_PRB_INT_ENTER(intno);
-	CHECK_PAR(VALID_INTNO_PRBINT(intno));		/*ï¼»NGKI3945ï¼½ï¼»NGKI3952ï¼½*/
+	CHECK_PAR(VALID_INTNO_PRBINT(intno));		/*［NGKI3945］［NGKI3952］*/
 
 	locked = sense_lock();
@@ -611,8 +592,8 @@
 	}
 	if (check_intno_cfg(intno)) {
-		ercd = (ER_BOOL) probe_int(intno);		/*ï¼»NGKI3948ï¼½*/
-	}
-	else {
-		ercd = E_OBJ;							/*ï¼»NGKI3947ï¼½*/
+		ercd = (ER_BOOL) probe_int(intno);		/*［NGKI3948］*/
+	}
+	else {
+		ercd = E_OBJ;							/*［NGKI3947］*/
 	}
 	if (!locked) {
@@ -629,6 +610,5 @@
 
 /*
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®å¤æ´ï¼»NGKI3107ï¼½
+ *  割込み優先度マスクの変更［NGKI3107］
  */
 #ifdef TOPPERS_chg_ipm
@@ -640,9 +620,9 @@
 
 	LOG_CHG_IPM_ENTER(intpri);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3108ï¼½ï¼»NGKI3109ï¼½*/
-	CHECK_PAR(VALID_INTPRI_CHGIPM(intpri));		/*ï¼»NGKI3113ï¼½ï¼»NGKI3114ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3108］［NGKI3109］*/
+	CHECK_PAR(VALID_INTPRI_CHGIPM(intpri));		/*［NGKI3113］［NGKI3114］*/
 
 	lock_cpu();
-	t_set_ipm(intpri);							/*ï¼»NGKI3111ï¼½*/
+	t_set_ipm(intpri);							/*［NGKI3111］*/
 	if (intpri == TIPM_ENAALL && enadsp) {
 		dspflg = true;
@@ -674,7 +654,5 @@
 
 /*
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®åç
-§ï¼»NGKI3115ï¼½
+ *  割込み優先度マスクの参照［NGKI3115］
  */
 #ifdef TOPPERS_get_ipm
@@ -686,8 +664,8 @@
 
 	LOG_GET_IPM_ENTER(p_intpri);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3116ï¼½ï¼»NGKI3117ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3116］［NGKI3117］*/
 
 	lock_cpu();
-	*p_intpri = t_get_ipm();					/*ï¼»NGKI3120ï¼½*/
+	*p_intpri = t_get_ipm();					/*［NGKI3120］*/
 	ercd = E_OK;
 	unlock_cpu();
Index: azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		å²è¾¼ã¿ç®¡çæ©è½
+ *		割込み管理機能
  */
 
@@ -67,56 +52,52 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åæåãã­ãã¯
+ *  割込みサービスルーチン初期化ブロック
  */
 typedef struct isr_initialization_block {
-	ATR			isratr;			/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å±æ§ */
-	intptr_t	exinf;			/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ¡å¼µæ
-å ± */
-	QUEUE		*p_isr_queue;	/* ç»é²å
-å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ */
-	ISR			isr;			/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å
-é ­çªå° */
-	PRI			isrpri;			/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åªå
-åº¦ */
+	ATR			isratr;			/* 割込みサービスルーチン属性 */
+	intptr_t	exinf;			/* 割込みサービスルーチンの拡張情報 */
+	QUEUE		*p_isr_queue;	/* 登録先割込みサービスルーチン呼出しキュー */
+	ISR			isr;			/* 割込みサービスルーチンの先頭番地 */
+	PRI			isrpri;			/* 割込みサービスルーチン優先度 */
 } ISRINIB;
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãã­ãã¯
+ *  割込みサービスルーチン管理ブロック
  */
 typedef struct isr_control_block {
-	QUEUE		isr_queue;		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ */
-	const ISRINIB *p_isrinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
+	QUEUE		isr_queue;		/* 割込みサービスルーチン呼出しキュー */
+	const ISRINIB *p_isrinib;	/* 初期化ブロックへのポインタ */
 } ISRCB;
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ãæ¤ç´¢ããããã®ãã¼ã¿æ§é 
+ *  割込みサービスルーチン呼出しキューを検索するためのデータ構造
  */
 typedef struct {
-	INTNO		intno;			/* å²è¾¼ã¿çªå· */
-	QUEUE		*p_isr_queue;	/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ */
+	INTNO		intno;			/* 割込み番号 */
+	QUEUE		*p_isr_queue;	/* 割込みサービスルーチン呼出しキュー */
 } ISR_ENTRY;
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ã®ã¨ã³ããªæ°ï¼kernel_cfg.cï¼
+ *  割込みサービスルーチン呼出しキューのエントリ数（kernel_cfg.c）
  */
 extern const uint_t tnum_isr_queue;
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ãªã¹ãï¼kernel_cfg.cï¼
+ *  割込みサービスルーチン呼出しキューリスト（kernel_cfg.c）
  */
 extern const ISR_ENTRY isr_queue_list[];
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºãã­ã¥ã¼ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  割込みサービスルーチン呼出しキューのエリア（kernel_cfg.c）
  */
 extern QUEUE isr_queue_table[];
 
 /*
- *  ä½¿ç¨ãã¦ããªãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない割込みサービスルーチン管理ブロックのリスト
  */
 extern QUEUE	free_isrcb;
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  割込みサービスルーチンIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_isrid;
@@ -124,5 +105,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  割込みサービスルーチン初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const ISRINIB	isrinib_table[];
@@ -130,26 +111,26 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³çæé åºãã¼ãã«ï¼kernel_cfg.cï¼
+ *  割込みサービスルーチン生成順序テーブル（kernel_cfg.c）
  */
 extern const ID	isrorder_table[];
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  割込みサービスルーチン管理ブロックのエリア（kernel_cfg.c）
  */
 extern ISRCB	isrcb_table[];
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãã­ãã¯ããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDãå
- *  ãåºãããã®ãã¯ã­
+ *  割込みサービスルーチン管理ブロックから割込みサービスルーチンIDを取
+ *  り出すためのマクロ
  */
 #define	ISRID(p_isrcb)	((ID)(((p_isrcb) - isrcb_table) + TMIN_ISRID))
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³æ©è½ã®åæå
+ *  割込みサービスルーチン機能の初期化
  */
 extern void initialize_isr(void);
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å¼åºã
+ *  割込みサービスルーチンの呼出し
  */
 extern void call_isr(QUEUE *p_isr_queue);
@@ -158,20 +139,19 @@
 
 /*
- *  å²è¾¼ã¿ãã³ãã©åæåãã­ãã¯
+ *  割込みハンドラ初期化ブロック
  */
 typedef struct interrupt_handler_initialization_block {
-	INHNO		inhno;			/* å²è¾¼ã¿ãã³ãã©çªå· */
-	ATR			inhatr;			/* å²è¾¼ã¿ãã³ãã©å±æ§ */
-	FP			int_entry;		/* å²è¾¼ã¿ãã³ãã©ã®åºå
-¥å£å¦çã®çªå° */
+	INHNO		inhno;			/* 割込みハンドラ番号 */
+	ATR			inhatr;			/* 割込みハンドラ属性 */
+	FP			int_entry;		/* 割込みハンドラの出入口処理の番地 */
 } INHINIB;
 
 /*
- *  å®ç¾©ããå²è¾¼ã¿ãã³ãã©çªå·ã®æ°ï¼kernel_cfg.cï¼
+ *  定義する割込みハンドラ番号の数（kernel_cfg.c）
  */
 extern const uint_t	tnum_def_inhno;
 
 /*
- *  å²è¾¼ã¿ãã³ãã©åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  割込みハンドラ初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const INHINIB	inhinib_table[];
@@ -182,20 +162,19 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãã­ãã¯
+ *  割込み要求ライン初期化ブロック
  */
 typedef struct interrupt_request_initialization_block {
-	INTNO		intno;			/* å²è¾¼ã¿çªå· */
-	ATR			intatr;			/* å²è¾¼ã¿å±æ§ */
-	PRI			intpri;			/* å²è¾¼ã¿åªå
-åº¦ */
+	INTNO		intno;			/* 割込み番号 */
+	ATR			intatr;			/* 割込み属性 */
+	PRI			intpri;			/* 割込み優先度 */
 } INTINIB;
 
 /*
- *  è¨­å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°ï¼kernel_cfg.cï¼
+ *  設定する割込み要求ラインの数（kernel_cfg.c）
  */
 extern const uint_t	tnum_cfg_intno;
 
 /*
- *  å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  割込み要求ライン初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const INTINIB	intinib_table[];
@@ -204,5 +183,5 @@
 
 /*
- *  å²è¾¼ã¿ç®¡çæ©è½ã®åæå
+ *  割込み管理機能の初期化
  */
 extern void	initialize_interrupt(void);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/interrupt.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
-# 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+# 
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,15 +42,15 @@
 
 #
-#		å²è¾¼ã¿ç®¡çæ©è½ã®çæã¹ã¯ãªãã
-#
-
-#
-#  kernel_cfg.cã®çæ
+#		割込み管理機能の生成スクリプト
+#
+
+#
+#  kernel_cfg.cの生成
 #
 $kernelCfgC.comment_header("Interrupt Management Functions")
 
 #
-#  CRE_ISRã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå·ã¨ããã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã©çªå·ã®ã
-#  ãã©ã«ãå®ç¾©
+#  CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号のデ
+#  フォルト定義
 #
 if $INTNO_CREISR_VALID.nil?
@@ -77,6 +62,5 @@
 
 #
-#  CFG_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿åªå
-åº¦ã®ããã©ã«ãå®ç¾©
+#  CFG_INTで使用できる割込み優先度のデフォルト定義
 # 
 if $INTPRI_CFGINT_VALID.nil?
@@ -85,5 +69,5 @@
 
 #
-#  å²è¾¼ã¿çªå·ã¨å²è¾¼ã¿ãã³ãã©çªå·ã®å¤æãã¼ãã«ã®ä½æ
+#  割込み番号と割込みハンドラ番号の変換テーブルの作成
 #
 if $INTNO_CREISR_VALID.length != $INHNO_CREISR_VALID.length
@@ -101,27 +85,26 @@
 
 #
-#  å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«é¢ããã¨ã©ã¼ãã§ãã¯
+#  割込み要求ラインに関するエラーチェック
 #
 $cfgData[:CFG_INT].each do |key, params|
-  #	intnoãå²è¾¼ã¿çªå·ã¨ãã¦æ­£ãããªãå ´åï¼E_PARï¼ï¼»NGKI2972ï¼½
+  #	intnoが割込み番号として正しくない場合（E_PAR）［NGKI2972］
   if $INTNO_VALID.index(params[:intno]).nil?
     error_illegal("E_PAR", params, :intno)
   end
 
-  #	intatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2969ï¼½
-  #ï¼TA_ENAINTï¼TA_EDGEï¼TARGET_INTATRä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+  #	intatrが無効の場合（E_RSATR）［NGKI2969］
+  #（TA_ENAINT，TA_EDGE，TARGET_INTATR以外のビットがセットされている場合）
   if (params[:intatr] & ~($TA_ENAINT|$TA_EDGE|$TARGET_INTATR)) != 0
     error_illegal_sym("E_RSATR", params, :intatr, :intno)
   end
 
-  #	intpriãCFG_INTã«å¯¾ããå²è¾¼ã¿åªå
-åº¦ã¨ãã¦æ­£ãããªãå ´åï¼E_PARï¼
-  #	ï¼»NGKI2973ï¼½
+  #	intpriがCFG_INTに対する割込み優先度として正しくない場合（E_PAR）
+  #	［NGKI2973］
   if $INTPRI_CFGINT_VALID.index(params[:intpri]).nil?
     error_illegal_sym("E_OBJ", params, :intpri, :intno)
   end
 
-  # ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIã
-  #	ããå°ããå¤ãæå®ãããªãã£ãå ´åï¼E_OBJï¼ï¼»NGKI2983ï¼½
+  # カーネル管理外に固定されているintnoに対して，intpriにTMIN_INTPRIよ
+  #	りも小さい値が指定されなかった場合（E_OBJ）［NGKI2983］
   if !$INTNO_FIX_NONKERNEL.nil?
     if !$INTNO_FIX_NONKERNEL.index(params[:intno]).nil?
@@ -133,6 +116,6 @@
   end
 
-  #	ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIãã
-  #	ãå°ããå¤ãæå®ãããå ´åï¼E_OBJï¼ï¼»NGKI2984ï¼½
+  #	カーネル管理に固定されているintnoに対して，intpriにTMIN_INTPRIより
+  #	も小さい値が指定された場合（E_OBJ）［NGKI2984］
   if !$INTNO_FIX_KERNEL.nil?
     if !$INTNO_FIX_KERNEL.index(params[:intno]).nil?
@@ -146,20 +129,20 @@
 
 #
-#  å²è¾¼ã¿ãã³ãã©ã«é¢ããã¨ã©ã¼ãã§ãã¯
+#  割込みハンドラに関するエラーチェック
 #
 $cfgData[:DEF_INH].each do |key, params|
-  # inhnoãå²è¾¼ã¿ãã³ãã©çªå·ã¨ãã¦æ­£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3055ï¼½
+  # inhnoが割込みハンドラ番号として正しくない場合（E_PAR）［NGKI3055］
   if $INHNO_VALID.index(params[:inhno]).nil?
     error_illegal("E_PAR", params, :inhno)
   end
 
-  # inhatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3052ï¼½
-  #ï¼TARGET_INHATRä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+  # inhatrが無効の場合（E_RSATR）［NGKI3052］
+  #（TARGET_INHATR以外のビットがセットされている場合）
   if (params[:inhatr] & ~($TARGET_INHATR)) != 0
     error_illegal_sym("E_RSATR", params, :inhatr, :inhno)
   end
 
-  #	ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELã
-  #	æå®ããã¦ããªãå ´åï¼E_RSATRï¼ï¼»NGKI3067ï¼½
+  #	カーネル管理外に固定されているinhnoに対して，inhatrにTA_NONKERNELが
+  #	指定されていない場合（E_RSATR）［NGKI3067］
   if !$INHNO_FIX_NONKERNEL.nil?
     if !$INHNO_FIX_NONKERNEL.index(params[:inhno]).nil?
@@ -171,6 +154,6 @@
   end
 
-  #	ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELãæ
-  #	å®ããã¦ããå ´åï¼E_RSATRï¼ï¼»NGKI3068ï¼½
+  #	カーネル管理に固定されているinhnoに対して，inhatrにTA_NONKERNELが指
+  #	定されている場合（E_RSATR）［NGKI3068］
   if !$INHNO_FIX_KERNEL.nil?
     if !$INHNO_FIX_KERNEL.index(params[:inhno]).nil?
@@ -185,5 +168,5 @@
     intnoVal = $toIntnoVal[params[:inhno].val]
 
-    # inhnoã«å¯¾å¿ããintnoã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼ï¼»NGKI3062ï¼½
+    # inhnoに対応するintnoに対するCFG_INTがない場合（E_OBJ）［NGKI3062］
     if !$cfgData[:CFG_INT].has_key?(intnoVal)
       error_ercd("E_OBJ", params, "intno `#{intnoVal}' corresponding to " \
@@ -192,8 +175,7 @@
       intnoParams = $cfgData[:CFG_INT][intnoVal]
       if (params[:inhatr] & $TA_NONKERNEL) == 0
-        # inhatrã«TA_NONKERNELãæå®ããã¦ãããï¼inhnoã«å¯¾å¿ããintno
-        # ã«å¯¾ãã¦CFG_INTã§è¨­å®ãããå²è¾¼ã¿åªå
-åº¦ãTMIN_INTPRIãããå°
-        # ããå ´åï¼E_OBJï¼ï¼»NGKI3065ï¼½
+        # inhatrにTA_NONKERNELが指定されておらず，inhnoに対応するintno
+        # に対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小
+        # さい場合（E_OBJ）［NGKI3065］
         if intnoParams[:intpri] < $TMIN_INTPRI
           error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \
@@ -201,8 +183,7 @@
         end
       else
-        # inhatrã«TA_NONKERNELãæå®ããã¦ããï¼inhnoã«å¯¾å¿ããintnoã«
-        # å¯¾ãã¦CFG_INTã§è¨­å®ãããå²è¾¼ã¿åªå
-åº¦ãTMIN_INTPRIä»¥ä¸ã§ãã
-        # å ´åï¼E_OBJï¼ï¼»NGKI3066ï¼½
+        # inhatrにTA_NONKERNELが指定されており，inhnoに対応するintnoに
+        # 対してCFG_INTで設定された割込み優先度がTMIN_INTPRI以上である
+        # 場合（E_OBJ）［NGKI3066］
         if intnoParams[:intpri] >= $TMIN_INTPRI
           error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \
@@ -215,21 +196,21 @@
 
 #
-#  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼ã«é¢ããã¨ã©ã¼ãã§ãã¯
+#  割込みサービスルーチン（ISR）に関するエラーチェック
 #
 $cfgData[:CRE_ISR].sort.each do |key, params|
-  #	isratrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2998ï¼½
-  #ï¼TARGET_ISRATRä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+  #	isratrが無効の場合（E_RSATR）［NGKI2998］
+  #（TARGET_ISRATR以外のビットがセットされている場合）
   if (params[:isratr] & ~($TARGET_ISRATR)) != 0
     error_illegal("E_RSATR", params, "isratr")
   end
 
-  #	intnoãCRE_ISRã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æ­£ãããªãå ´åï¼E_PARï¼
-  #	ï¼»NGKI3003ï¼½
+  #	intnoがCRE_ISRに対する割込み番号として正しくない場合（E_PAR）
+  #	［NGKI3003］
   if $INTNO_CREISR_VALID.index(params[:intno]).nil?
     error_illegal("E_PAR", params, "intno")
   end
 
-  #	(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)ã§ãªãå ´åï¼E_PARï¼
-  #	ï¼»NGKI3005ï¼½
+  #	(TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合（E_PAR）
+  #	［NGKI3005］
   if !($TMIN_ISRPRI <= params[:isrpri] && params[:isrpri] <= $TMAX_ISRPRI)
     error_illegal("E_PAR", params, "isrpri")
@@ -238,5 +219,5 @@
 
 $INTNO_CREISR_VALID.each do |intnoVal|
-  # å²è¾¼ã¿çªå·intnoã«å¯¾ãã¦ç»é²ãããISRã®ãªã¹ãã®ä½æ
+  # 割込み番号intnoに対して登録されたISRのリストの作成
   isrParamsList = []
   $cfgData[:CRE_ISR].sort.each do |key, params|
@@ -246,9 +227,9 @@
   end
 
-  #	å²è¾¼ã¿çªå·intnoã«å¯¾ãã¦ç»é²ãããISRãå­å¨ããå ´å
+  #	割込み番号intnoに対して登録されたISRが存在する場合
   if isrParamsList.size > 0
     inhnoVal = $toInhnoVal[intnoVal]
 
-    # intnoã«å¯¾å¿ããinhnoã«å¯¾ãã¦DEF_INHãããå ´åï¼E_OBJï¼ï¼»NGKI3013ï¼½
+    # intnoに対応するinhnoに対してDEF_INHがある場合（E_OBJ）［NGKI3013］
     if $cfgData[:DEF_INH].has_key?(inhnoVal)
       inhnoParams = $cfgData[:DEF_INH][inhnoVal]
@@ -257,5 +238,5 @@
     end
 
-    # intnoã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼ï¼»NGKI3012ï¼½
+    # intnoに対するCFG_INTがない場合（E_OBJ）［NGKI3012］
     if !$cfgData[:CFG_INT].has_key?(intnoVal)
       error_ercd("E_OBJ", isrParamsList[0], "%%intno in %apiname " \
@@ -264,7 +245,6 @@
       intnoParams = $cfgData[:CFG_INT][intnoVal]
 
-      #	intnoã«å¯¾ãã¦CFG_INTã§è¨­å®ãããå²è¾¼ã¿åªå
-åº¦ãTMIN_INTPRIããã
-      #	å°ããå ´åï¼E_OBJï¼ï¼»NGKI3014ï¼½
+      #	intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも
+      #	小さい場合（E_OBJ）［NGKI3014］
       if intnoParams[:intpri] < $TMIN_INTPRI
         error_ercd("E_OBJ", isrParamsList[0],
@@ -277,5 +257,5 @@
 
 #
-#  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼ç®¡çã®ãã¼ã¿æ§é 
+#  割込みサービスルーチン（ISR）管理のデータ構造
 #
 intnoIsrList = []
@@ -313,10 +293,10 @@
 
 #
-#  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼å¼åºãã®ããã®å²è¾¼ã¿ãã³ãã©
+#  割込みサービスルーチン（ISR）呼出しのための割込みハンドラ
 #
 intnoIsrList.each do |intnoVal|
   inhnoVal = $toInhnoVal[intnoVal]
 
-  # æ¬¡ã®DEF_INHã«ç¸å½ãããã¼ã¿ãçæ
+  # 次のDEF_INHに相当するデータを生成
   # DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } );
   $cfgData[:DEF_INH][inhnoVal] = {
@@ -326,5 +306,5 @@
   }
 
-  # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç¨ã®å²è¾¼ã¿ãã³ãã©
+  # 割込みサービスルーチン用の割込みハンドラ
   $kernelCfgC.add("void")
   $kernelCfgC.add("_kernel_inthdr_#{intnoVal}(void)")
@@ -335,6 +315,5 @@
 
 #
-#  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ããä¸è¬çãªæ
-å ±ã®çæ
+#  割込みサービスルーチンに関する一般的な情報の生成
 #
 class IsrObject < KernelObject
@@ -344,5 +323,5 @@
 
   def prepare(key, params)
-    # ã¨ã©ã¼ãã§ãã¯ã¯å®æ½æ¸ã¿ãªã®ã§ï¼ããã§ã®å¦çã¯ä¸è¦
+    # エラーチェックは実施済みなので，ここでの処理は不要
   end
 
@@ -355,5 +334,5 @@
 IsrObject.new.generate()
 
-# å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³çæé åºãã¼ãã«ã®çæ
+# 割込みサービスルーチン生成順序テーブルの生成
 if $cfgData[:CRE_ISR].size != 0
   $kernelCfgC.add("const ID _kernel_isrorder_table[TNUM_SISRID] = { ")
@@ -371,10 +350,9 @@
 
 #
-#  å²è¾¼ã¿ãã³ãã©ã®ããã®æ¨æºçãªåæåæ
-å ±ã®çæ
+#  割込みハンドラのための標準的な初期化情報の生成
 #
 if !$OMIT_INITIALIZE_INTERRUPT || $USE_INHINIB_TABLE
   #
-  #  å®ç¾©ããå²è¾¼ã¿ãã³ãã©ã®æ°
+  #  定義する割込みハンドラの数
   #
   $kernelCfgC.add(<<EOS)
@@ -385,5 +363,5 @@
   if $cfgData[:DEF_INH].size != 0
     #
-    #  å²è¾¼ã¿ãã³ãã©ã®ã¨ã³ããª
+    #  割込みハンドラのエントリ
     #
     $cfgData[:DEF_INH].each do |key, params|
@@ -396,5 +374,5 @@
 
     #
-    #  å²è¾¼ã¿ãã³ãã©åæåãã­ãã¯
+    #  割込みハンドラ初期化ブロック
     #
     $kernelCfgC.add("const INHINIB _kernel_inhinib_table[TNUM_DEF_INHNO] = {")
@@ -418,10 +396,9 @@
 
 #
-#  å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®ããã®æ¨æºçãªåæåæ
-å ±ã®çæ
+#  割込み要求ラインのための標準的な初期化情報の生成
 #
 if !$OMIT_INITIALIZE_INTERRUPT || $USE_INTINIB_TABLE
   #
-  #  è¨­å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°
+  #  設定する割込み要求ラインの数
   #
   $kernelCfgC.add(<<EOS)
@@ -431,5 +408,5 @@
 
   #
-  #  å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãã­ãã¯
+  #  割込み要求ライン初期化ブロック
   #
   if $cfgData[:CFG_INT].size != 0
@@ -449,5 +426,5 @@
 
 #
-#  å²è¾¼ã¿ç®¡çæ©è½åæåé¢æ°ã®è¿½å 
+#  割込み管理機能初期化関数の追加
 #
 $initializeFunctions.push("_kernel_initialize_interrupt();")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/kernel.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/kernel.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/kernel.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,15 +42,14 @@
 
 #
-#		ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®çæã¹ã¯ãªãã
-#
-
-#
-#  ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®
+#		コンフィギュレータのパス2の生成スクリプト
+#
+
+#
+#  タイムスタンプファイルの指定
 #
 $timeStampFileName = "kernel_cfg.timestamp"
 
 #
-#  kernel_cfg.hã®å
-é ­é¨åã®çæ
+#  kernel_cfg.hの先頭部分の生成
 #
 $kernelCfgH = GenFile.new("kernel_cfg.h")
@@ -77,6 +61,5 @@
 
 #
-#  kernel_cfg.cã®å
-é ­é¨åã®çæ
+#  kernel_cfg.cの先頭部分の生成
 #
 $kernelCfgC = GenFile.new("kernel_cfg.c")
@@ -92,5 +75,5 @@
 
 #
-#  ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼
+#  インクルードディレクティブ（#include）
 #
 $kernelCfgC.comment_header("Include Directives")
@@ -101,12 +84,11 @@
 
 #
-#  ã¹ã¿ãã¯é åã®ç¢ºä¿é¢æ°
-#
-#  ã¹ã¿ãã¯é åã®å®ç¾©åã¨ï¼ã¹ã¿ãã¯é åã®ãµã¤ãºè¨è¿°ãé
-åã§è¿ãï¼
+#  スタック領域の確保関数
+#
+#  スタック領域の定義分と，スタック領域のサイズ記述を配列で返す．
 #
 unless defined? AllocStack()
   def AllocStack(stack, size, section)
-    # å¤§ããæ¹ã«ä¸¸ãããµã¤ãºã§ç¢ºä¿ããï¼»NGKI1050ï¼½ï¼»NGKI3220ï¼½
+    # 大きい方に丸めたサイズで確保する［NGKI1050］［NGKI3220］
     $kernelCfgC.add("/*static*/ STK_T __attribute__((section(\"#{section}\"),aligned(16))) #{stack}[COUNT_STK_T(#{size})];")
     return("ROUND_STK_T(#{size})")
@@ -115,6 +97,5 @@
 
 #
-#  ã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããæ
-å ±ã®çæï¼ä»®æ³ã¯ã©ã¹ï¼
+#  カーネルオブジェクトに関する情報の生成（仮想クラス）
 #
 class KernelObject
@@ -131,5 +112,5 @@
 
   def generate()
-    # AID_@OBJã®å¦ç
+    # AID_@OBJの処理
     numAutoObjid = 0
     $cfgData["AID_#{@OBJ}".to_sym].each do |key, params|
@@ -138,8 +119,8 @@
     numObjid = $cfgData[@api].size + numAutoObjid
 
-    # kernel_cfg.hã®çæ
+    # kernel_cfg.hの生成
     $kernelCfgH.add("#define TNUM_#{@OBJ}ID\t#{numObjid}")
 
-    # ãªãã¸ã§ã¯ãã®IDçªå·ã®ãã¯ã­å®ç¾©ã®çæ
+    # オブジェクトのID番号のマクロ定義の生成
     $cfgData[@api].sort.each do |key, params|
       $kernelCfgH.add("#define #{params[@objid]}\t#{params[@objid].val}")
@@ -147,5 +128,5 @@
     $kernelCfgH.add()
 
-    # ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°
+    # オブジェクトのID番号を保持する変数
     if $USE_EXTERNAL_ID
       $cfgData[@api].sort.each do |key, params|
@@ -156,8 +137,8 @@
     end
 
-    # éçã«çæããããªãã¸ã§ã¯ãã®æ°
+    # 静的に生成されたオブジェクトの数
     $kernelCfgC.add("#define TNUM_S#{@OBJ}ID\t#{$cfgData[@api].size}")
 
-    # ãªãã¸ã§ã¯ãIDçªå·ã®æå¤§å¤
+    # オブジェクトID番号の最大値
     $kernelCfgC.add("const ID _kernel_tmax_#{@obj}id" \
 							" = (TMIN_#{@OBJ}ID + TNUM_#{@OBJ}ID - 1);")
@@ -165,19 +146,17 @@
 							" = (TMIN_#{@OBJ}ID + TNUM_S#{@OBJ}ID - 1);")
 
-    # ãã¼ã¿æ§é 
+    # データ構造
     if $cfgData[@api].size > 0
-      # äºåæºåï¼ã¨ã©ã¼ãã§ãã¯ï¼ã¡ã¢ãªé åã®çæï¼
+      # 事前準備（エラーチェック，メモリ領域の生成）
       $cfgData[@api].sort.each do |key, params|
         prepare(key, params)
       end
 
-      # ãªãã¸ã§ã¯ãå
-¨ä½ã«å¯¾ãã¦å¿
-è¦ãªã¡ã¢ãªé åã®çæï¼ãªãã·ã§ã³ï¼
+      # オブジェクト全体に対して必要なメモリ領域の生成（オプション）
       if respond_to?(:generateData)
         generateData()
       end
 
-      # ãªãã¸ã§ã¯ãåæåãã­ãã¯ã®çæ
+      # オブジェクト初期化ブロックの生成
       $kernelCfgC.add("const #{@OBJ_S}INIB _kernel_#{@obj_s}inib_table" \
 													"[TNUM_S#{@OBJ}ID] = {")
@@ -193,5 +172,5 @@
     end
 
-    # åççæãªãã¸ã§ã¯ãç¨ã®ãªãã¸ã§ã¯ãåæåãã­ãã¯
+    # 動的生成オブジェクト用のオブジェクト初期化ブロック
     @inibList.each do |type, array|
       if numAutoObjid > 0
@@ -203,9 +182,9 @@
 
     if numObjid > 0
-      # ãªãã¸ã§ã¯ãç®¡çãã­ãã¯ã®çæ
+      # オブジェクト管理ブロックの生成
       $kernelCfgC.add2("#{@OBJ_S}CB _kernel_#{@obj_s}cb_table" \
 													"[TNUM_#{@OBJ}ID];")
 
-      # ãªãã¸ã§ã¯ãåæåé¢æ°ã®è¿½å 
+      # オブジェクト初期化関数の追加
       $initializeFunctions.push("_kernel_initialize_#{@object}();")
     else
@@ -217,8 +196,8 @@
 
 #
-#  éç¥ãã³ãã©ã®çæé¢æ°
+#  通知ハンドラの生成関数
 #
 def generateNotifyHandler(key, params, objid)
-  # ãã©ã¡ã¼ã¿ãå¤æ°ã«æ ¼ç´
+  # パラメータを変数に格納
   nfymode = params[:nfymode]
   nfymode1 = nfymode & 0x0f
@@ -227,14 +206,14 @@
   par2 = params[:par2]
 
-  # éç¥å¦çã®ãã©ã¡ã¼ã¿æ°ã«ããè£æ­£å¦ç
+  # 通知処理のパラメータ数による補正処理
   if nfymode == $TNFY_HANDLER || nfymode1 == $TNFY_SETVAR \
 								|| nfymode1 == $TNFY_SETFLG \
 								|| nfymode1 == $TNFY_SNDDTQ
-    # éç¥å¦çã®ãã©ã¡ã¼ã¿ã2ã¤ã®å ´å
+    # 通知処理のパラメータが2つの場合
 	numpar = 2
 	epar1 = params[:par3]
 	epar2 = params[:par4]
   else
-    # éç¥å¦çã®ãã©ã¡ã¼ã¿ã1ã¤ã®å ´å
+    # 通知処理のパラメータが1つの場合
     numpar = 1
     epar1 = params[:par2]
@@ -242,25 +221,24 @@
   end
 
-  # ãã©ã¡ã¼ã¿æ°ã®ãã§ãã¯
+  # パラメータ数のチェック
   if (numpar == 2 && par2.nil?) || (nfymode2 != 0 && epar1.nil?) \
 								|| (nfymode2 == $TENFY_SETFLG && epar2.nil?)
-    # ãã©ã¡ã¼ã¿ãè¶³ããªãå ´å
+    # パラメータが足りない場合
     error_api(params, "too few parameters for nfymode `#{nfymode}' " \
 											"in %apiname of %#{objid}")
   elsif (nfymode2 == 0 && !epar1.nil?) \
 					|| (nfymode2 != $TENFY_SETFLG && !epar2.nil?)
-    # ãã©ã¡ã¼ã¿ãå¤ãããå ´å
+    # パラメータが多すぎる場合
     error_api(params, "too many parameters for nfymode `#{nfymode}' " \
 											"in %apiname of %#{objid}")
   elsif nfymode == $TNFY_HANDLER
-    # ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å¼åºã
+    # タイムイベントハンドラの呼出し
     funcname = "(NFYHDR)(#{par2})"
   else
-    # éç¥ãã³ãã©ã®é¢æ°å
+    # 通知ハンドラの関数名
     funcname = "_kernel_nfyhdr_#{params[objid]}"
 
-    # ã¨ã©ã¼éç¥ã®ããã®å¤æ°ã®ã¢ãã¬ã¹ã¨ãªãã¸ã§ã¯ãIDãæ ¼ç´ãã
-    # å¤æ°ã®çæï¼ã¨ã©ã¼ãã§ãã¯ã®ããã«å¿
-è¦ï¼
+    # エラー通知のための変数のアドレスとオブジェクトIDを格納する
+    # 変数の生成（エラーチェックのために必要）
     if nfymode2 == $TENFY_SETVAR || nfymode2 == $TENFY_INCVAR
       $kernelCfgC.add2("intptr_t *const #{funcname}_p_evar =" \
@@ -276,6 +254,5 @@
     end
 
-    # é¢æ°ã®å
-é ­é¨åã®çæ
+    # 関数の先頭部分の生成
     $kernelCfgC.add("static void")
     $kernelCfgC.add("#{funcname}(intptr_t exinf)")
@@ -283,35 +260,35 @@
 
     if nfymode2 == 0
-      # ã¨ã©ã¼éç¥ããªãå ´å
+      # エラー通知がない場合
       errorCode = "(void) "
     else
-      # ã¨ã©ã¼éç¥ãããå ´å
+      # エラー通知がある場合
       $kernelCfgC.add2("\tER\tercd;")
       errorCode = "ercd = "
     end
 
-    # ã¤ãã³ãéç¥å¦çã®å¦ç
+    # イベント通知処理の処理
     if nfymode1 == $TNFY_SETVAR && nfymode2 == 0
-      # å¤æ°ã®è¨­å®
+      # 変数の設定
       $kernelCfgC.add("\t*((intptr_t *) exinf) = (#{par2});")
     elsif nfymode1 == $TNFY_INCVAR && nfymode2 == 0
-      # å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã
+      # 変数のインクリメント
       $kernelCfgC.add("\t(void) loc_cpu();")
       $kernelCfgC.add("\t*((intptr_t *) exinf) += 1;")
       $kernelCfgC.add("\t(void) unl_cpu();")
     elsif nfymode1 == $TNFY_ACTTSK
-      # ã¿ã¹ã¯ã®èµ·å
+      # タスクの起動
       $kernelCfgC.add("\t#{errorCode}act_tsk((ID) exinf);")
     elsif nfymode1 == $TNFY_WUPTSK
-      # ã¿ã¹ã¯ã®èµ·åº
+      # タスクの起床
       $kernelCfgC.add("\t#{errorCode}wup_tsk((ID) exinf);")
     elsif nfymode1 == $TNFY_SIGSEM
-      # ã»ããã©ã®è¿å´
+      # セマフォの返却
       $kernelCfgC.add("\t#{errorCode}sig_sem((ID) exinf);")
     elsif nfymode1 == $TNFY_SETFLG
-      # ã¤ãã³ããã©ã°ã®ã»ãã
+      # イベントフラグのセット
       $kernelCfgC.add("\t#{errorCode}set_flg(((ID) exinf), #{par2});")
     elsif nfymode1 == $TNFY_SNDDTQ
-      # ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡
+      # データキューへの送信
       $kernelCfgC.add("\t#{errorCode}psnd_dtq(((ID) exinf), #{par2});")
     else
@@ -320,30 +297,30 @@
 			
     if nfymode2 != 0
-      # ã¨ã©ã¼éç¥å¦çã®å¦ç
+      # エラー通知処理の処理
       $kernelCfgC.add("\tif (ercd != E_OK) {")
 
 
       if nfymode2 == $TENFY_SETVAR
-        # å¤æ°ã®è¨­å®
+        # 変数の設定
         $kernelCfgC.add("\t\t*#{funcname}_p_evar = (intptr_t) ercd;")
       elsif nfymode2 == $TENFY_INCVAR
-        # å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã
+        # 変数のインクリメント
         $kernelCfgC.add("\t\t(void) loc_cpu();")
         $kernelCfgC.add("\t\t*#{funcname}_p_evar += 1;")
         $kernelCfgC.add("\t\t(void) unl_cpu();")
       elsif nfymode2 == $TENFY_ACTTSK
-        # ã¿ã¹ã¯ã®èµ·å
+        # タスクの起動
         $kernelCfgC.add("\t\t(void) act_tsk(#{funcname}_etskid);")
       elsif nfymode2 == $TENFY_WUPTSK
-        # ã¿ã¹ã¯ã®èµ·åº
+        # タスクの起床
         $kernelCfgC.add("\t\t(void) wup_tsk(#{funcname}_etskid);")
       elsif nfymode2 == $TENFY_SIGSEM
-        # ã»ããã©ã®è¿å´
+        # セマフォの返却
         $kernelCfgC.add("\t\t(void) sig_sem(#{funcname}_esemid);")
       elsif nfymode2 == $TENFY_SETFLG
-        # ã¤ãã³ããã©ã°ã®ã»ãã
+        # イベントフラグのセット
         $kernelCfgC.add("\t\t(void) set_flg(#{funcname}_eflgid, #{epar2});")
       elsif nfymode2 == $TENFY_SNDDTQ
-        # ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡
+        # データキューへの送信
         $kernelCfgC.add("\t\t(void) psnd_dtq(#{funcname}_edtqid," \
 													" (intptr_t) ercd);")
@@ -354,5 +331,5 @@
     end
 
-    # é¢æ°ã®æ«å°¾é¨åã®çæ
+    # 関数の末尾部分の生成
     $kernelCfgC.add2("}")
   end
@@ -361,5 +338,5 @@
 
 #
-#  åæ©è½ã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³
+#  各機能モジュールのコンフィギュレーション
 #
 $initializeFunctions = []
@@ -377,12 +354,12 @@
 
 #
-#  éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯é å
+#  非タスクコンテキスト用のスタック領域
 #
 $kernelCfgC.comment_header("Stack Area for Non-task Context")
 
 if $cfgData[:DEF_ICS].size == 0
-  # DEF_ICSããªãå ´åã®ããã©ã«ãå¤ã®è¨­å®
+  # DEF_ICSがない場合のデフォルト値の設定
   if $DEFAULT_ISTK.nil?
-    # ã¹ã¿ãã¯é åã®èªåå²ä»ã
+    # スタック領域の自動割付け
     istksz = AllocStack("_kernel_istack", "DEFAULT_ISTKSZ", "SI")
     istk = "_kernel_istack"
@@ -392,17 +369,17 @@
   end
 else
-  # éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼ï¼»NGKI3216ï¼½
+  # 静的API「DEF_ICS」が複数ある（E_OBJ）［NGKI3216］
   if $cfgData[:DEF_ICS].size > 1
     error("E_OBJ: too many DEF_ICS")
   end
 
-  # DEF_ICSãããå ´åã®å¦ç
+  # DEF_ICSがある場合の処理
   params = $cfgData[:DEF_ICS][1]
 
-  # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨­å®
+  # パラメータが省略された時のデフォルト値の設定
   params[:istk] ||= "NULL"
 
-  # istkszãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼
-  # ãããå°ããå ´åï¼E_PARï¼ï¼»NGKI3254ï¼½
+  # istkszがターゲット定義の最小値（TARGET_MIN_ISTKSZ，未定義の場合は1）
+  # よりも小さい場合（E_PAR）［NGKI3254］
   if params[:istksz] < $TARGET_MIN_ISTKSZ
     error_wrong("E_PAR", params, :istksz, "too small")
@@ -410,9 +387,9 @@
 
   if params[:istk] == "NULL"
-    # ã¹ã¿ãã¯é åã®èªåå²ä»ã
+    # スタック領域の自動割付け
     istksz = AllocStack("_kernel_istack", params[:istksz], "SI")
     istk = "_kernel_istack"
   else
-    # istkszãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ­£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3222ï¼½
+    # istkszがスタック領域のサイズとして正しくない場合（E_PAR）［NGKI3222］
     if (params[:istksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0
       error_wrong("E_PAR", params, :istksz, "not aligned")
@@ -434,25 +411,25 @@
 
 #
-#  ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé å
+#  カーネルが割り付けるメモリ領域
 #
 $kernelCfgC.comment_header("Memory Area Allocated by Kernel")
 
 if $cfgData[:DEF_KMM].size == 0
-  # DEF_KMMããªãå ´åã®ããã©ã«ãå¤ã®è¨­å®
+  # DEF_KMMがない場合のデフォルト値の設定
   kmmsz = "0"
   kmm = "NULL"
 else
-  # éçAPIãDEF_KMMããè¤æ°ããï¼E_OBJï¼
+  # 静的API「DEF_KMM」が複数ある（E_OBJ）
   if ($cfgData[:DEF_KMM].size > 1)
     error("E_OBJ: too many DEF_KMM")
   end
 
-  # DEF_KMMãããå ´åã®å¦ç
+  # DEF_KMMがある場合の処理
   params = $cfgData[:DEF_KMM][1]
 
-  # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨­å®
+  # パラメータが省略された時のデフォルト値の設定
   params[:kmm] ||= "NULL"
 
-  # kmmszã0ã®å ´åï¼E_PARï¼
+  # kmmszが0の場合（E_PAR）
   if params[:kmmsz] == 0
     error_wrong("E_PAR", params, :kmmsz, "zero")
@@ -460,5 +437,5 @@
 
   if params[:kmm] == "NULL"
-    # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®èªåå²ä»ã
+    # カーネルが割り付けるメモリ領域の自動割付け
     $kernelCfgC.add("static MB_T _kernel_memory" \
 					"[TOPPERS_COUNT_SZ(#{params[:kmmsz]}, sizeof(MB_T))];")
@@ -466,6 +443,6 @@
     kmm = "_kernel_memory"
   else
-    # kmmszãã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºã¨ãã¦æ­£ãããªãå ´å
-    # ï¼E_PARï¼
+    # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合
+    # （E_PAR）
     if (params[:kmmsz] & ($CHECK_MB_ALIGN - 1)) != 0
       error_wrong("E_PAR", params, :kmmsz, "not aligned")
@@ -483,5 +460,5 @@
 
 #
-#  ã¿ã¤ã ã¤ãã³ãç®¡ç
+#  タイムイベント管理
 #
 $kernelCfgC.comment_header("Time Event Management")
@@ -491,5 +468,5 @@
 
 #
-#  åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°
+#  各モジュールの初期化関数
 #
 $kernelCfgC.comment_header("Module Initialization Function")
@@ -505,12 +482,12 @@
 
 #
-#  åæåã«ã¼ãã³æ©è½
+#  初期化ルーチン機能
 #
 $kernelCfgC.comment_header("Initialization Routine")
 
-# ã¨ã©ã¼ãã§ãã¯
+# エラーチェック
 $cfgData[:ATT_INI].each do |key, params|
-  # iniatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3241ï¼½
-  #ï¼TA_NULLã§ãªãå ´åï¼
+  # iniatrが無効の場合（E_RSATR）［NGKI3241］
+  #（TA_NULLでない場合）
   if (params[:iniatr] != $TA_NULL)
     error_illegal_sym("E_RSATR", params, :iniatr, :inirtn)
@@ -518,5 +495,5 @@
 end
 
-# åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ
+# 初期化ルーチンの実行関数の生成
 $kernelCfgC.append(<<EOS)
 void
@@ -531,12 +508,12 @@
 
 #
-#  çµäºå¦çã«ã¼ãã³æ©è½
+#  終了処理ルーチン機能
 #
 $kernelCfgC.comment_header("Termination Routine")
 
-# ã¨ã©ã¼ãã§ãã¯
+# エラーチェック
 $cfgData[:ATT_TER].each do |key, params|
-  # teratrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3248ï¼½
-  #ï¼TA_NULLã§ãªãå ´åï¼
+  # teratrが無効の場合（E_RSATR）［NGKI3248］
+  #（TA_NULLでない場合）
   if (params[:teratr] != $TA_NULL)
     error_illegal_sym("E_RSATR", params, :teratr, :terrtn)
@@ -544,5 +521,5 @@
 end
 
-# çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ
+# 終了処理ルーチンの実行関数の生成
 $kernelCfgC.append(<<EOS)
 void
@@ -557,5 +534,5 @@
 
 #
-#  kernel_cfg.hã®æ«å°¾é¨åã®çæ
+#  kernel_cfg.hの末尾部分の生成
 #
 $kernelCfgH.append(<<EOS)
Index: azure_iot_hub/trunk/asp3_dcre/kernel/kernel_check.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/kernel_check.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/kernel_check.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 #  
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,14 +42,14 @@
 
 #
-#		ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®çæã¹ã¯ãªãã
-#
-
-# 
-#  ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®
+#		コンフィギュレータのパス3の生成スクリプト
+#
+
+# 
+#  タイムスタンプファイルの指定
 # 
 $timeStampFileName = "check.timestamp"
 
 #
-#  ãã¼ã¿ã»ã¯ã·ã§ã³ã®LMAããVMAã¸ã®ã³ãã¼
+#  データセクションのLMAからVMAへのコピー
 #
 if !$lmaList.nil?
@@ -86,6 +71,5 @@
 
 #
-#  éç¥æ
-å ±ã®ãã§ãã¯é¢æ°
+#  通知情報のチェック関数
 #
 $tmax_tskid = $TMIN_TSKID + $cfgData[:CRE_TSK].size - 1
@@ -95,5 +79,5 @@
 
 def checkNotifyHandler(key, params, objid, exinf, nfyhdr)
-  # ãã©ã¡ã¼ã¿ãå¤æ°ã«æ ¼ç´
+  # パラメータを変数に格納
   nfymode = params[:nfymode]
   nfymode1 = nfymode & 0x0f
@@ -103,18 +87,17 @@
   funcname = "_kernel_nfyhdr_#{params[objid]}"
 
-  # éç¥å¦çã®ãã©ã¡ã¼ã¿æ°ã«ããè£æ­£å¦ç
+  # 通知処理のパラメータ数による補正処理
   if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_SETFLG \
 								|| nfymode1 == $TNFY_SNDDTQ
-    # éç¥å¦çã®ãã©ã¡ã¼ã¿ã2ã¤ã®å ´å
+    # 通知処理のパラメータが2つの場合
     epar1 = params[:par3]
     epar2 = params[:par4]
   else
-    # éç¥å¦çã®ãã©ã¡ã¼ã¿ã1ã¤ã®å ´å
+    # 通知処理のパラメータが1つの場合
     epar1 = params[:par2]
     epar2 = params[:par3]
   end
 
-  #	ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å
-é ­çªå°ã®ãã§ãã¯ï¼»NGKI3693ï¼½
+  #	タイムイベントハンドラの先頭番地のチェック［NGKI3693］
   if nfymode == $TNFY_HANDLER
     tmehdr = nfyhdr
@@ -129,12 +112,12 @@
   end
 
-  #	ã¤ãã³ãéç¥å¦çã®å¤æ°ã®çªå°ã¨ãªãã¸ã§ã¯ãIDã®ãã§ãã¯
+  #	イベント通知処理の変数の番地とオブジェクトIDのチェック
   if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_INCVAR
-    # å¤æ°ã®è¨­å®ï¼ã¤ã³ã¯ãªã¡ã³ãã«ããã¿ã¤ã ã¤ãã³ãã®éç¥
+    # 変数の設定／インクリメントによるタイムイベントの通知
 	p_var = exinf
     params1 = params.dup
     params1[:p_var] = par1
 
-    # å¤æ°ã®çªå°ã®ãã§ãã¯ï¼»NGKI3699ï¼½ï¼»NGKI3897ï¼½
+    # 変数の番地のチェック［NGKI3699］［NGKI3897］
     if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0
       error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned")
@@ -144,40 +127,40 @@
     end
   elsif (nfymode1 == $TNFY_ACTTSK || nfymode1 == $TNFY_WUPTSK)
-    # ã¿ã¹ã¯ã®èµ·åï¼èµ·åºã«ããã¿ã¤ã ã¤ãã³ãã®éç¥
+    # タスクの起動／起床によるタイムイベントの通知
     tskid = exinf
     params1 = params.dup
     params1[:tskid] = par1
 
-    # ã¿ã¹ã¯IDã®ãã§ãã¯ï¼»NGKI3704ï¼½
+    # タスクIDのチェック［NGKI3704］
     if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid)
       error_illegal_id("E_ID", params1, :tskid, objid)
     end
   elsif nfymode1 == $TNFY_SIGSEM
-    # ã»ããã©ã®è³æºã®è¿å´ã«ããã¿ã¤ã ã¤ãã³ãã®éç¥
+    # セマフォの資源の返却によるタイムイベントの通知
     semid = exinf
     params1 = params.dup
     params1[:semid] = par1
 
-    # ã»ããã©IDã®ãã§ãã¯ï¼»NGKI3707ï¼½
+    # セマフォIDのチェック［NGKI3707］
     if !($TMIN_SEMID <= semid && semid <= $tmax_semid)
       error_illegal_id("E_ID", params1, :semid, objid)
     end
   elsif nfymode1 == $TNFY_SETFLG
-    # ã¤ãã³ããã©ã°ã®ã»ããã«ããã¿ã¤ã ã¤ãã³ãã®éç¥
+    # イベントフラグのセットによるタイムイベントの通知
     flgid = exinf
     params1 = params.dup
     params1[:flgid] = par1
 
-    # ã¤ãã³ããã©ã°IDã®ãã§ãã¯ï¼»NGKI3710ï¼½
+    # イベントフラグIDのチェック［NGKI3710］
     if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid)
       error_illegal_id("E_ID", params1, :flgid, objid)
     end
   elsif nfymode1 == $TNFY_SNDDTQ
-    # ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ã«ããã¿ã¤ã ã¤ãã³ãã®éç¥
+    # データキューへの送信によるタイムイベントの通知
     dtqid = exinf
     params1 = params.dup
     params1[:dtqid] = par1
 
-    # ãã¼ã¿ã­ã¥ã¼IDã®ãã§ãã¯ï¼»NGKI3713ï¼½
+    # データキューIDのチェック［NGKI3713］
     if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid)
       error_illegal_id("E_ID", params1, :dtqid, objid)
@@ -185,12 +168,12 @@
   end
 
-  # ã¨ã©ã¼éç¥å¦çã®å¤æ°ã®çªå°ã¨ãªãã¸ã§ã¯ãIDã®ãã§ãã¯
+  # エラー通知処理の変数の番地とオブジェクトIDのチェック
   if (nfymode2 == $TENFY_SETVAR || nfymode2 == $TENFY_INCVAR)
-    # å¤æ°ã®è¨­å®ï¼ã¤ã³ã¯ãªã¡ã³ãã«ããã¨ã©ã¼ã®éç¥
+    # 変数の設定／インクリメントによるエラーの通知
     p_var = PEEK(SYMBOL(funcname + "_p_evar"), $sizeof_intptr_t)
     params1 = params.dup
     params1[:p_var] = epar1
 
-    # å¤æ°ã®çªå°ã®ãã§ãã¯ï¼»NGKI3701ï¼½ï¼»NGKI3897ï¼½
+    # 変数の番地のチェック［NGKI3701］［NGKI3897］
     if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0
       error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned")
@@ -200,40 +183,40 @@
     end
   elsif nfymode2 == $TENFY_ACTTSK || nfymode2 == $TENFY_WUPTSK
-    # ã¿ã¹ã¯ã®èµ·åï¼èµ·åºã«ããã¨ã©ã¼ã®éç¥
+    # タスクの起動／起床によるエラーの通知
     tskid = PEEK(SYMBOL(funcname + "_etskid"), $sizeof_ID)
     params1 = params.dup
     params1[:tskid] = epar1
 
-    # ã¿ã¹ã¯IDã®ãã§ãã¯ï¼»NGKI3704ï¼½
+    # タスクIDのチェック［NGKI3704］
     if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid)
       error_illegal_id("E_ID", params1, :tskid, objid)
     end
   elsif nfymode2 == $TENFY_SIGSEM
-    # ã»ããã©ã®è³æºã®è¿å´ã«ããã¨ã©ã¼ã®éç¥
+    # セマフォの資源の返却によるエラーの通知
 	semid = PEEK(SYMBOL(funcname + "_esemid"), $sizeof_ID)
     params1 = params.dup
     params1[:semid] = epar1
 
-    # ã»ããã©IDã®ãã§ãã¯ï¼»NGKI3707ï¼½
+    # セマフォIDのチェック［NGKI3707］
     if !($TMIN_SEMID <= semid && semid <= $tmax_semid)
       error_illegal_id("E_ID", params1, :semid, objid)
     end
   elsif nfymode2 == $TENFY_SETFLG
-    # ã¤ãã³ããã©ã°ã®ã»ããã«ããã¨ã©ã¼ã®éç¥
+    # イベントフラグのセットによるエラーの通知
     flgid = PEEK(SYMBOL(funcname + "_eflgid"), $sizeof_ID)
     params1 = params.dup
     params1[:flgid] = epar1
 
-    # ã¤ãã³ããã©ã°IDã®ãã§ãã¯ï¼»NGKI3710ï¼½
+    # イベントフラグIDのチェック［NGKI3710］
     if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid)
       error_illegal_id("E_ID", params1, :flgid, objid)
     end
   elsif nfymode2 == $TENFY_SNDDTQ
-    # ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ã«ããã¨ã©ã¼ã®éç¥
+    # データキューへの送信によるエラーの通知
     dtqid = PEEK(SYMBOL(funcname + "_edtqid"), $sizeof_ID)
     params1 = params.dup
     params1[:dtqid] = epar1
 
-    # ãã¼ã¿ã­ã¥ã¼IDã®ãã§ãã¯ï¼»NGKI3715ï¼½
+    # データキューIDのチェック［NGKI3715］
     if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid)
       error_illegal_id("E_ID", params1, :dtqid, objid)
@@ -243,5 +226,5 @@
 
 # 
-#  ã¿ã¹ã¯ã«é¢ãããã§ãã¯
+#  タスクに関するチェック
 # 
 tinib = SYMBOL("_kernel_tinib_table")
@@ -249,6 +232,5 @@
   task = PEEK(tinib + $offsetof_TINIB_task, $sizeof_TASK)
 
-  # ã¿ã¹ã¯ã®å
-é ­çªå°ã®ãã§ãã¯ï¼»NGKI1033ï¼½
+  # タスクの先頭番地のチェック［NGKI1033］
   if (task & ($CHECK_FUNC_ALIGN - 1)) != 0
     error_wrong_id("E_PAR", params, :task, :tskid, "not aligned")
@@ -258,6 +240,5 @@
   end
 
-  # ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®å
-é ­çªå°ã®ãã§ãã¯ï¼»NGKI1056ï¼½
+  # タスクのスタック領域の先頭番地のチェック［NGKI1056］
   if $USE_TSKINICTXB
     stk = GetStackTskinictxb(key, params, tinib)
@@ -276,5 +257,5 @@
 
 # 
-#  åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ãããã§ãã¯
+#  固定長メモリプールに関するチェック
 # 
 mpfinib = SYMBOL("_kernel_mpfinib_table")
@@ -282,6 +263,5 @@
   mpf = PEEK(mpfinib + $offsetof_MPFINIB_mpf, $sizeof_void_ptr)
 
-  # åºå®é·ã¡ã¢ãªãã¼ã«é åã®å
-é ­çªå°ã®ãã§ãã¯ï¼»NGKI2249ï¼½
+  # 固定長メモリプール領域の先頭番地のチェック［NGKI2249］
   if (mpf & ($CHECK_MPF_ALIGN - 1)) != 0
     error_wrong_id("E_PAR", params, :mpf, :mpfid, "not aligned")
@@ -295,5 +275,5 @@
 
 # 
-#  å¨æéç¥ã«é¢ãããã§ãã¯
+#  周期通知に関するチェック
 # 
 cycinib = SYMBOL("_kernel_cycinib_table")
@@ -302,6 +282,5 @@
   nfyhdr = PEEK(cycinib + $offsetof_CYCINIB_nfyhdr, $sizeof_NFYHDR)
 
-  #	éç¥æ
-å ±ã®ãã§ãã¯
+  #	通知情報のチェック
   checkNotifyHandler(key, params, :cycid, exinf, nfyhdr)
 
@@ -310,5 +289,5 @@
 
 # 
-#  ã¢ã©ã¼ã éç¥ã«é¢ãããã§ãã¯
+#  アラーム通知に関するチェック
 # 
 alminib = SYMBOL("_kernel_alminib_table")
@@ -317,6 +296,5 @@
   nfyhdr = PEEK(alminib + $offsetof_ALMINIB_nfyhdr, $sizeof_NFYHDR)
 
-  #	éç¥æ
-å ±ã®ãã§ãã¯
+  #	通知情報のチェック
   checkNotifyHandler(key, params, :almid, exinf, nfyhdr)
 
@@ -325,5 +303,5 @@
 
 #
-#  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ãããã§ãã¯
+#  割込みサービスルーチンに関するチェック
 #
 isrinib = SYMBOL("_kernel_isrinib_table")
@@ -331,6 +309,5 @@
   isr = PEEK(isrinib + $offsetof_ISRINIB_isr, $sizeof_ISR)
 
-  # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å
-é ­çªå°ã®ãã§ãã¯ï¼»NGKI3004ï¼½
+  # 割込みサービスルーチンの先頭番地のチェック［NGKI3004］
   if (isr & ($CHECK_FUNC_ALIGN - 1)) != 0
     error_wrong_id("E_PAR", params, :isr, :isrid, "not aligned")
@@ -344,5 +321,5 @@
 
 # 
-#  éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ãããã§ãã¯
+#  非タスクコンテキスト用のスタック領域に関するチェック
 # 
 istkAddr = SYMBOL("_kernel_istk")
@@ -350,6 +327,5 @@
   istk = PEEK(istkAddr, $sizeof_void_ptr)
 
-  # éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯é åã®å
-é ­çªå°ã®ãã§ãã¯ï¼»NGKI3222ï¼½
+  # 非タスクコンテキスト用のスタック領域の先頭番地のチェック［NGKI3222］
   if (istk & ($CHECK_STACK_ALIGN - 1)) != 0
     error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "not aligned")
@@ -361,5 +337,5 @@
 
 # 
-#  ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã«é¢ãããã§ãã¯
+#  カーネルが割り付けるメモリ領域に関するチェック
 # 
 kmmAddr = SYMBOL("_kernel_kmm")
@@ -367,6 +343,5 @@
   kmm = PEEK(kmmAddr, $sizeof_void_ptr)
 
-  # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å
-é ­çªå°ã®ãã§ãã¯
+  # カーネルが割り付けるメモリ領域の先頭番地のチェック
   if (kmm & ($CHECK_MB_ALIGN - 1)) != 0
     error_wrong("E_PAR", $cfgData[:DEF_KMM][1], :kmm, "not aligned")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/kernel_impl.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/kernel_impl.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/kernel_impl.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,14 +42,12 @@
 
 /*
- *		TOPPERS/ASPã«ã¼ãã«å
-é¨åãæ¨æºããããã¡ã¤ã«
- *
- *  ãã®ããããã¡ã¤ã«ã¯ï¼ã«ã¼ãã«ãæ§æãããã­ã°ã©ã ã®ã½ã¼ã¹ãã¡ã¤ã«
- *  ã§å¿
-ãã¤ã³ã¯ã«ã¼ãããã¹ãæ¨æºããããã¡ã¤ã«ã§ããï¼
- *
- *  ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ
- *  ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ããï¼ããã«ããï¼ãã¯ã­å®ç¾©ä»¥å¤ã
- *  é¤ãããã«ãªã£ã¦ããï¼
+ *		TOPPERS/ASPカーネル内部向け標準ヘッダファイル
+ *
+ *  このヘッダファイルは，カーネルを構成するプログラムのソースファイル
+ *  で必ずインクルードするべき標準ヘッダファイルである．
+ *
+ *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
+ *  は，TOPPERS_MACRO_ONLYを定義しておく．これにより，マクロ定義以外を
+ *  除くようになっている．
  */
 
@@ -73,28 +56,25 @@
 
 /*
- *  ã«ã¼ãã«ã®å
-é¨è­å¥åã®ãªãã¼ã 
+ *  カーネルの内部識別名のリネーム
  */
 #include "kernel_rename.h"
 
 /*
- *  ã¢ããªã±ã¼ã·ã§ã³ã¨å
-±éã®ããããã¡ã¤ã«
+ *  アプリケーションと共通のヘッダファイル
  */
 #include <kernel.h>
 
 /*
- *  ã·ã¹ãã ã­ã°æ©è½ã®ããã®å®ç¾©
+ *  システムログ機能のための定義
  */
 #include <t_syslog.h>
 
 /*
- *  ã¿ã¼ã²ããä¾å­æ
-å ±ã®å®ç¾©
+ *  ターゲット依存情報の定義
  */
 #include "target_kernel_impl.h"
 
 /*
- *  ãã¹ã¦ã®é¢æ°ãã³ã³ãã¤ã«ããããã®å®ç¾©
+ *  すべての関数をコンパイルするための定義
  */
 #ifdef ALLFUNC
@@ -103,12 +83,11 @@
 
 /*
- *  ããããã£ã¼ã«ãã§ã®ç¬¦å·ç¡ãæ´æ°å
- *
- *  8ãããä»¥ä¸ã®å¹
-ã®ããããã£ã¼ã«ãã§ï¼ç¬¦å·ç¡ãæ´æ°å¤ãä¿æãããå ´å
- *  ã«ç¨ããã¹ããã¼ã¿åï¼ANSI Cã§ã¯ï¼ããããã£ã¼ã«ãã®ãã¼ã¿åã«ã¯
- *  intã¨unsigned intããè¨±ãããªãããï¼ããã©ã«ãã®å®ç¾©ã¯unsigned
- *  intã¨ãã¦ãããï¼ã¿ã¼ã²ããããã³ãã¼ã«ä¾å­ã§ï¼unsigned charã¾ãã¯
- *  unsigned shortã«å®ç¾©ããæ¹ãå¹çãè¯ãå ´åãããï¼
+ *  ビットフィールドでの符号無し整数型
+ *
+ *  8ビット以下の幅のビットフィールドで，符号無し整数値を保持したい場合
+ *  に用いるべきデータ型．ANSI Cでは，ビットフィールドのデータ型には
+ *  intとunsigned intしか許されないため，デフォルトの定義はunsigned
+ *  intとしているが，ターゲットおよびツール依存で，unsigned charまたは
+ *  unsigned shortに定義した方が効率が良い場合がある．
  */
 #ifndef BIT_FIELD_UINT
@@ -117,10 +96,9 @@
 
 /*
- *  ããããã£ã¼ã«ãã§ã®ãã¼ã«å
- *
- *  1ãããå¹
-ã®ããããã£ã¼ã«ãã§ï¼ãã¼ã«å¤ãä¿æãããå ´åã«ç¨ããã¹ã
- *  ãã¼ã¿åï¼ããã©ã«ãã§ã¯BIT_FIELD_UINTã¨åä¸ã«å®ç¾©ãã¦ãããï¼ãã¼
- *  ã«å¤ãä¿æãããã¨ãæç¤ºããããã«å¥ã®åç§°ã¨ãã¦ããï¼
+ *  ビットフィールドでのブール型
+ *
+ *  1ビット幅のビットフィールドで，ブール値を保持したい場合に用いるべき
+ *  データ型．デフォルトではBIT_FIELD_UINTと同一に定義しているが，ブー
+ *  ル値を保持することを明示するために別の名称としている．
  */
 #ifndef BIT_FIELD_BOOL
@@ -129,21 +107,19 @@
 
 /*
- *  ãªãã¸ã§ã¯ãIDã®æå°å¤ã®å®ç¾©
- */
-#define TMIN_TSKID		1		/* ã¿ã¹ã¯IDã®æå°å¤ */
-#define TMIN_SEMID		1		/* ã»ããã©IDã®æå°å¤ */
-#define TMIN_FLGID		1		/* ãã©ã°IDã®æå°å¤ */
-#define TMIN_DTQID		1		/* ãã¼ã¿ã­ã¥ã¼IDã®æå°å¤ */
-#define TMIN_PDQID		1		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼IDã®æå°å¤ */
-#define TMIN_MTXID		1		/* ãã¥ã¼ããã¯ã¹IDã®æå°å¤ */
-#define TMIN_MPFID		1		/* åºå®é·ã¡ã¢ãªãã¼ã«IDã®æå°å¤ */
-#define TMIN_CYCID		1		/* å¨æéç¥IDã®æå°å¤ */
-#define TMIN_ALMID		1		/* ã¢ã©ã¼ã éç¥IDã®æå°å¤ */
-#define TMIN_ISRID		1		/* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDã®æå°å¤ */
-
-/*
- *  åªå
-åº¦ã®æ®µéæ°ã®å®ç¾©
+ *  オブジェクトIDの最小値の定義
+ */
+#define TMIN_TSKID		1		/* タスクIDの最小値 */
+#define TMIN_SEMID		1		/* セマフォIDの最小値 */
+#define TMIN_FLGID		1		/* フラグIDの最小値 */
+#define TMIN_DTQID		1		/* データキューIDの最小値 */
+#define TMIN_PDQID		1		/* 優先度データキューIDの最小値 */
+#define TMIN_MTXID		1		/* ミューテックスIDの最小値 */
+#define TMIN_MPFID		1		/* 固定長メモリプールIDの最小値 */
+#define TMIN_CYCID		1		/* 周期通知IDの最小値 */
+#define TMIN_ALMID		1		/* アラーム通知IDの最小値 */
+#define TMIN_ISRID		1		/* 割込みサービスルーチンIDの最小値 */
+
+/*
+ *  優先度の段階数の定義
  */
 #define TNUM_TPRI		(TMAX_TPRI - TMIN_TPRI + 1)
@@ -152,88 +128,83 @@
 
 /*
- *  ã«ã¼ãã«å
-é¨ã§ä½¿ç¨ããå±æ§ã®å®ç¾©
- */
-#define TA_NOEXS		((ATR)(-1))			/* æªç»é²ç¶æ
- */
+ *  カーネル内部で使用する属性の定義
+ */
+#define TA_NOEXS		((ATR)(-1))			/* 未登録状態 */
 
 #ifndef TA_MEMALLOC
-#define TA_MEMALLOC		UINT_C(0x8000)		/* ã¡ã¢ãªé åãã«ã¼ãã«ã§ç¢ºä¿ */
+#define TA_MEMALLOC		UINT_C(0x8000)		/* メモリ領域をカーネルで確保 */
 #endif /* TA_MEMALLOC */
 #ifndef TA_MBALLOC
-#define TA_MBALLOC		UINT_C(0x4000)		/* ç®¡çé åãã«ã¼ãã«ã§ç¢ºä¿ */
+#define TA_MBALLOC		UINT_C(0x4000)		/* 管理領域をカーネルで確保 */
 #endif /* TA_MBALLOC */
 
 /*
- *  ã¿ã¼ã²ããå®ç¾©ã®ã¨ã©ã¼ãã§ãã¯ãã¯ã­ã®ããã©ã«ãå¤ã®å®ç¾©
+ *  ターゲット定義のエラーチェックマクロのデフォルト値の定義
  */
 #ifndef TARGET_TSKATR
-#define TARGET_TSKATR		0U		/* ã¿ã¼ã²ããå®ç¾©ã®ã¿ã¹ã¯å±æ§ */
+#define TARGET_TSKATR		0U		/* ターゲット定義のタスク属性 */
 #endif /* TARGET_TSKATR */
 
 #ifndef TARGET_ISRATR
-#define TARGET_ISRATR		0U		/* ã¿ã¼ã²ããå®ç¾©ã®ISRå±æ§ */
+#define TARGET_ISRATR		0U		/* ターゲット定義のISR属性 */
 #endif /* TARGET_ISRATR */
 
 /*
- *  ããããã¡ã¤ã«ãæããªãã¢ã¸ã¥ã¼ã«ã®é¢æ°ã»å¤æ°ã®å®£è¨
+ *  ヘッダファイルを持たないモジュールの関数・変数の宣言
  */
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  TECSã®åæåï¼init_tecs.cï¼
+ *  TECSの初期化（init_tecs.c）
  */
 extern void initialize_tecs(void);
 
 /*
- *  åã¢ã¸ã¥ã¼ã«ã®åæåï¼kernel_cfg.cï¼
+ *  各モジュールの初期化（kernel_cfg.c）
  */
 extern void	initialize_object(void);
 
 /*
- *  åæåã«ã¼ãã³ã®å®è¡ï¼kernel_cfg.cï¼
+ *  初期化ルーチンの実行（kernel_cfg.c）
  */
 extern void	call_inirtn(void);
 
 /*
- *  çµäºå¦çã«ã¼ãã³ã®å®è¡ï¼kernel_cfg.cï¼
+ *  終了処理ルーチンの実行（kernel_cfg.c）
  */
 extern void	call_terrtn(void);
 
 /*
- *  éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯é åï¼kernel_cfg.cï¼
- */
-extern const size_t	istksz;		/* ã¹ã¿ãã¯é åã®ãµã¤ãºï¼ä¸¸ããå¤ï¼ */
-extern STK_T *const	istk;		/* ã¹ã¿ãã¯é åã®å
-é ­çªå° */
+ *  非タスクコンテキスト用のスタック領域（kernel_cfg.c）
+ */
+extern const size_t	istksz;		/* スタック領域のサイズ（丸めた値） */
+extern STK_T *const	istk;		/* スタック領域の先頭番地 */
 #ifdef TOPPERS_ISTKPT
-extern STK_T *const	istkpt;		/* ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå¤ */
+extern STK_T *const	istkpt;		/* スタックポインタの初期値 */
 #endif /* TOPPERS_ISTKPT */
 
 /*
- *  ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åï¼kernel_cfg.cï¼
- */
-extern const size_t	kmmsz;		/* ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãº */
-extern MB_T *const	kmm;		/* ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å
-é ­çªå° */
-
-/*
- *  ã«ã¼ãã«åä½ç¶æ
-ãã©ã°ï¼startup.cï¼
+ *  カーネルが割り付けるメモリ領域（kernel_cfg.c）
+ */
+extern const size_t	kmmsz;		/* カーネルが割り付けるメモリ領域のサイズ */
+extern MB_T *const	kmm;		/* カーネルが割り付けるメモリ領域の先頭番地 */
+
+/*
+ *  カーネル動作状態フラグ（startup.c）
  */
 extern bool_t	kerflg;
 
 /*
- *  ã«ã¼ãã«ã®èµ·åï¼startup.cï¼
+ *  カーネルの起動（startup.c）
  */
 extern void	sta_ker(void);
 
 /*
- *  ã«ã¼ãã«ã®çµäºå¦çï¼startup.cï¼
+ *  カーネルの終了処理（startup.c）
  */
 extern void	exit_kernel(void);
 
 /*
- *  ã«ã¼ãã«ã®å²ãä»ããã¡ã¢ãªé åã®ç®¡çï¼startup.cï¼
+ *  カーネルの割り付けるメモリ領域の管理（startup.c）
  */
 extern void initialize_kmm(void);
@@ -242,15 +213,15 @@
 
 /*
- *  éç¥ãã³ãã©ã®åå®ç¾©
+ *  通知ハンドラの型定義
  */
 typedef void	(*NFYHDR)(intptr_t exinf);
 
 /*
- *  éç¥æ¹æ³ã®ã¨ã©ã¼ãã§ãã¯
+ *  通知方法のエラーチェック
  */
 extern ER check_nfyinfo(const T_NFYINFO *p_nfyinfo);
 
 /*
- *  éç¥ãã³ãã©
+ *  通知ハンドラ
  */
 extern void notify_handler(intptr_t exinf);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/kernel_int.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/kernel_int.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/kernel_int.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		kernel_cfg.cï¼ããã³cfg1_out.cï¼ç¨ããããã¡ã¤ã«
+ *		kernel_cfg.c（およびcfg1_out.c）用ヘッダファイル
  */
 
@@ -64,10 +49,10 @@
 
 /*
- *  ã«ã¼ãã«æ¨æºããããã¡ã¤ã«
+ *  カーネル標準ヘッダファイル
  */
 #include "kernel_impl.h"
 
 /*
- *  ã«ã¼ãã«ã®åããããã¡ã¤ã«
+ *  カーネルの各ヘッダファイル
  */
 #include "task.h"
@@ -85,13 +70,10 @@
 
 /*
- *  ãªãã¼ã ããã·ã³ãã«ãå
-ã«æ»ãããã®ããããã¡ã¤ã«
+ *  リネームしたシンボルを元に戻すためのヘッダファイル
  */
 #include "kernel_unrename.h"
 
 /*
- *  å
-å®¹ãç©ºã®é
-åãçæããããã®ãã¯ã­
+ *  内容が空の配列を生成するためのマクロ
  */
 #ifndef TOPPERS_EMPTY_LABEL
Index: azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		åºå®é·ã¡ã¢ãªãã¼ã«æ©è½
+ *		固定長メモリプール機能
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_MPF_ENTER
@@ -134,5 +119,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®æ°
+ *  固定長メモリプールの数
  */
 #define tnum_mpf	((uint_t)(tmax_mpfid - TMIN_MPFID + 1))
@@ -140,6 +125,6 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«IDããåºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãã­ãã¯ãåãåºãã
- *  ãã®ãã¯ã­
+ *  固定長メモリプールIDから固定長メモリプール管理ブロックを取り出すた
+ *  めのマクロ
  */
 #define INDEX_MPF(mpfid)	((uint_t)((mpfid) - TMIN_MPFID))
@@ -147,18 +132,18 @@
 
 /*
- *  ç¹æ®ãªã¤ã³ããã¯ã¹å¤ã®å®ç¾©
- */
-#define INDEX_NULL		(~0U)		/* ç©ºããã­ãã¯ãªã¹ãã®æå¾ */
-#define INDEX_ALLOC		(~1U)		/* å²å½ã¦æ¸ã¿ã®ãã­ãã¯ */
+ *  特殊なインデックス値の定義
+ */
+#define INDEX_NULL		(~0U)		/* 空きブロックリストの最後 */
+#define INDEX_ALLOC		(~1U)		/* 割当て済みのブロック */
 
 #ifdef TOPPERS_mpfini
 
 /*
- *  ä½¿ç¨ãã¦ããªãåºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない固定長メモリプール管理ブロックのリスト
  */
 QUEUE	free_mpfcb;
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ã®åæå
+ *  固定長メモリプール機能の初期化
  */
 void
@@ -190,5 +175,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ãããã­ãã¯ãç²å¾
+ *  固定長メモリプールからブロックを獲得
  */
 #ifdef TOPPERS_mpfget
@@ -216,5 +201,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®çæ
+ *  固定長メモリプールの生成
  */
 #ifdef TOPPERS_acre_mpf
@@ -301,5 +286,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®åé¤
+ *  固定長メモリプールの削除
  */
 #ifdef TOPPERS_del_mpf
@@ -350,5 +335,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾
+ *  固定長メモリブロックの獲得
  */
 #ifdef TOPPERS_get_mpf
@@ -396,5 +381,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾ï¼ãã¼ãªã³ã°ï¼
+ *  固定長メモリブロックの獲得（ポーリング）
  */
 #ifdef TOPPERS_pget_mpf
@@ -432,5 +417,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  固定長メモリブロックの獲得（タイムアウトあり）
  */
 #ifdef TOPPERS_tget_mpf
@@ -484,5 +469,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®è¿å´
+ *  固定長メモリブロックの返却
  */
 #ifdef TOPPERS_rel_mpf
@@ -542,5 +527,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®ååæå
+ *  固定長メモリプールの再初期化
  */
 #ifdef TOPPERS_ini_mpf
@@ -581,7 +566,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®ç¶æ
-åç
-§
+ *  固定長メモリプールの状態参照
  */
 #ifdef TOPPERS_ref_mpf
Index: azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		åºå®é·ã¡ã¢ãªãã¼ã«æ©è½
+ *		固定長メモリプール機能
  */
 
@@ -68,81 +53,64 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ç®¡çãã­ãã¯
+ *  固定長メモリブロック管理ブロック
  *
- *  nextãã£ã¼ã«ãã«ã¯ï¼ã¡ã¢ãªãã­ãã¯ãå²å½ã¦æ¸ã¿ã®å ´åã¯INDEX_ALLOCãï¼
- *  æªå²å½ã¦ã®å ´åã¯æ¬¡ã®æªå²å½ã¦ãã­ãã¯ã®ã¤ã³ããã¯ã¹çªå·ãæ ¼ç´ããï¼
- *  æå¾ã®æªå²å½ã¦ãã­ãã¯ã®å ´åã«ã¯ï¼INDEX_NULLãæ ¼ç´ããï¼
+ *  nextフィールドには，メモリブロックが割当て済みの場合はINDEX_ALLOCを，
+ *  未割当ての場合は次の未割当てブロックのインデックス番号を格納する．
+ *  最後の未割当てブロックの場合には，INDEX_NULLを格納する．
  */
 typedef struct fixed_memoryblock_management_block {
-	uint_t		next;			/* æ¬¡ã®æªå²å½ã¦ãã­ãã¯ */
+	uint_t		next;			/* 次の未割当てブロック */
 } MPFMB;
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«åæåãã­ãã¯
+ *  固定長メモリプール初期化ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
- *  ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの初期化ブロックの共通部分
+ *  （WOBJINIB）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初のフィールドが共通になっている．
  */
 typedef struct fixed_memorypool_initialization_block {
-	ATR			mpfatr;			/* åºå®é·ã¡ã¢ãªãã¼ã«å±æ§ */
-	uint_t		blkcnt;			/* ã¡ã¢ãªãã­ãã¯æ° */
-	uint_t		blksz;			/* ã¡ã¢ãªãã­ãã¯ã®ãµã¤ãºï¼ä¸¸ããå¤ï¼ */
-	void		*mpf;			/* åºå®é·ã¡ã¢ãªãã¼ã«é åã®å
-é ­çªå° */
-	MPFMB		*p_mpfmb;		/* åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé åã®å
-é ­çªå° */
+	ATR			mpfatr;			/* 固定長メモリプール属性 */
+	uint_t		blkcnt;			/* メモリブロック数 */
+	uint_t		blksz;			/* メモリブロックのサイズ（丸めた値） */
+	void		*mpf;			/* 固定長メモリプール領域の先頭番地 */
+	MPFMB		*p_mpfmb;		/* 固定長メモリプール管理領域の先頭番地 */
 } MPFINIB;
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãã­ãã¯
+ *  固定長メモリプール管理ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼
- *  ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã®
- *  ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）
+ *  を拡張（オブジェクト指向言語の継承に相当）したもので，最初の2つの
+ *  フィールドが共通になっている．
  */
 typedef struct fixed_memorypool_control_block {
-	QUEUE		wait_queue;		/* åºå®é·ã¡ã¢ãªãã¼ã«å¾
-ã¡ã­ã¥ã¼ */
-	const MPFINIB *p_mpfinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	uint_t		fblkcnt;		/* æªå²å½ã¦ãã­ãã¯æ° */
-	uint_t		unused;			/* æªä½¿ç¨ãã­ãã¯ã®å
-é ­ */
-	uint_t		freelist;		/* æªå²å½ã¦ãã­ãã¯ã®ãªã¹ã */
+	QUEUE		wait_queue;		/* 固定長メモリプール待ちキュー */
+	const MPFINIB *p_mpfinib;	/* 初期化ブロックへのポインタ */
+	uint_t		fblkcnt;		/* 未割当てブロック数 */
+	uint_t		unused;			/* 未使用ブロックの先頭 */
+	uint_t		freelist;		/* 未割当てブロックのリスト */
 } MPFCB;
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«å¾
-ã¡æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  固定長メモリプール待ち情報ブロックの定義
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *  ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®2ã¤ã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *  （WINFO_WOBJ）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初の2つのフィールドが共通になっている．
  */
 typedef struct fixed_memorypool_waiting_information {
-	WINFO		winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	MPFCB		*p_mpfcb;		/* å¾
-ã£ã¦ããåºå®é·ã¡ã¢ãªãã¼ã«ã®ç®¡çãã­ãã¯*/
-	void		*blk;			/* ç²å¾ããã¡ã¢ãªãã­ãã¯ */
+	WINFO		winfo;			/* 標準の待ち情報ブロック */
+	MPFCB		*p_mpfcb;		/* 待っている固定長メモリプールの管理ブロック*/
+	void		*blk;			/* 獲得したメモリブロック */
 } WINFO_MPF;
 
 /*
- *  ä½¿ç¨ãã¦ããªãåºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない固定長メモリプール管理ブロックのリスト
  */
 extern QUEUE	free_mpfcb;
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  固定長メモリプールIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_mpfid;
@@ -150,5 +118,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  固定長メモリプール初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const MPFINIB	mpfinib_table[];
@@ -156,21 +124,21 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  固定長メモリプール管理ブロックのエリア（kernel_cfg.c）
  */
 extern MPFCB	mpfcb_table[];
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãã­ãã¯ããåºå®é·ã¡ã¢ãªãã¼ã«IDãåãåºãã
- *  ãã®ãã¯ã­
+ *  固定長メモリプール管理ブロックから固定長メモリプールIDを取り出すた
+ *  めのマクロ
  */
 #define	MPFID(p_mpfcb)	((ID)(((p_mpfcb) - mpfcb_table) + TMIN_MPFID))
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ã®åæå
+ *  固定長メモリプール機能の初期化
  */
 extern void	initialize_mempfix(void);
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ãããã­ãã¯ãç²å¾
+ *  固定長メモリプールからブロックを獲得
  */
 extern void	get_mpf_block(MPFCB *p_mpfcb, void **p_blk);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/mempfix.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ã®çæã¹ã¯ãªãã
+#		固定長メモリプール機能の生成スクリプト
 #
 
@@ -66,25 +51,25 @@
 
   def prepare(key, params)
-    # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨­å®
+    # パラメータが省略された時のデフォルト値の設定
     params[:mpf] ||= "NULL"
     params[:mpfmb] ||= "NULL"
 
-    # mpfatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2225ï¼½
-    #ï¼TA_TPRIä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # mpfatrが無効の場合（E_RSATR）［NGKI2225］
+    #（TA_TPRI以外のビットがセットされている場合）
     if (params[:mpfatr] & ~($TA_TPRI)) != 0
       error_illegal_id("E_RSATR", params, :mpfatr, :mpfid)
     end
 
-    # blkcntã0ã®å ´åï¼E_PARï¼ï¼»NGKI2229ï¼½
+    # blkcntが0の場合（E_PAR）［NGKI2229］
     if params[:blkcnt] == 0
       error_illegal_id("E_PAR", params, :blkcnt, :mpfid)
     end
 
-    # blkszã0ã®å ´åï¼E_PARï¼ï¼»NGKI2230ï¼½
+    # blkszが0の場合（E_PAR）［NGKI2230］
     if params[:blksz] == 0
       error_illegal_id("E_PAR", params, :blksz, :mpfid)
     end
 
-    # åºå®é·ã¡ã¢ãªãã¼ã«é å
+    # 固定長メモリプール領域
     if params[:mpf] == "NULL"
       mpfName = "_kernel_mpf_#{params[:mpfid]}"
@@ -96,10 +81,10 @@
     end
 
-    # mpfmbãNULLã§ãªãå ´åï¼E_NOSPTï¼ï¼»ASPS0166ï¼½
+    # mpfmbがNULLでない場合（E_NOSPT）［ASPS0166］
     if params[:mpfmb] != "NULL"
       error_illegal_id("E_NOSPT", params, :mpfmb, :mpfid)
     end
 
-    # åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé å
+    # 固定長メモリプール管理領域
     mpfmbName = "_kernel_mpfmb_#{params[:mpfid]}"
     $kernelCfgC.add("static MPFMB #{mpfmbName}[#{params[:blkcnt]}];")
@@ -115,6 +100,5 @@
 
 #
-#  åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ããæ
-å ±ã®çæ
+#  固定長メモリプールに関する情報の生成
 #
 $kernelCfgC.comment_header("Fixed-sized Memorypool Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/mutex.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/mutex.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/mutex.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ãã¥ã¼ããã¯ã¹æ©è½
+ *		ミューテックス機能
  */
 
@@ -66,5 +51,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_MTX_ENTER
@@ -133,5 +118,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®æ°
+ *  ミューテックスの数
  */
 #define tnum_mtx	((uint_t)(tmax_mtxid - TMIN_MTXID + 1))
@@ -139,5 +124,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹IDãããã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  ミューテックスIDからミューテックス管理ブロックを取り出すためのマクロ
  */
 #define INDEX_MTX(mtxid)	((uint_t)((mtxid) - TMIN_MTXID))
@@ -145,5 +130,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ãã­ãã³ã«ãå¤æ­ãããã¯ã­
+ *  ミューテックスのプロトコルを判断するマクロ
  */
 #define MTXPROTO_MASK			0x03U
@@ -154,10 +139,10 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªããã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないミューテックス管理ブロックのリスト
  */
 QUEUE	free_mtxcb;
 
 /* 
- *  ãã¥ã¼ããã¯ã¹æ©è½ã®åæå
+ *  ミューテックス機能の初期化
  */
 void
@@ -191,6 +176,5 @@
 
 /* 
- *  ä¸éåªå
-åº¦éåã®ãã§ãã¯
+ *  上限優先度違反のチェック
  */
 #ifdef TOPPERS_mtxchk
@@ -202,8 +186,6 @@
 
 	/*
-	 *  ã¿ã¹ã¯ãã­ãã¯ãã¦ããåªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ã®ä¸­ã§ï¼ä¸éåªå
-
-	 *  åº¦ãbpriorityãããä½ããã®ãããã°ï¼falseãè¿ãï¼
+	 *  タスクがロックしている優先度上限ミューテックスの中で，上限優先
+	 *  度がbpriorityよりも低いものがあれば，falseを返す．
 	 */
 	p_mtxcb = p_tcb->p_lastmtx;
@@ -216,9 +198,6 @@
 
 	/*
-	 *  ã¿ã¹ã¯ãåªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ã®ã­ãã¯ãå¾
-ã£ã¦ããå ´åã«ï¼ã
-	 *  ã®ä¸éåªå
-åº¦ãbpriorityãããä½ãããã°ï¼falseãè¿ãï¼
+	 *  タスクが優先度上限ミューテックスのロックを待っている場合に，そ
+	 *  の上限優先度がbpriorityよりも低くければ，falseを返す．
 	 */
 	if (TSTAT_WAIT_MTX(p_tcb->tstat)) {
@@ -230,5 +209,5 @@
 
 	/*
-	 *  ãããã®æ¡ä»¶ã«ãå½ã¦ã¯ã¾ããªããã°trueãè¿ãï¼
+	 *  いずれの条件にも当てはまらなければtrueを返す．
 	 */
 	return(true);
@@ -238,6 +217,5 @@
 
 /* 
- *  åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ãã­ãã¯ãã¦ãããã®ãã§ãã¯
+ *  優先度上限ミューテックスをロックしているかのチェック
  */
 #ifdef TOPPERS_mtxscan
@@ -261,9 +239,7 @@
 
 /* 
- *  ã¿ã¹ã¯ã®ç¾å¨åªå
-åº¦ã®è¨ç®
+ *  タスクの現在優先度の計算
  *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã®ç¾å¨åªå
-åº¦ï¼ã«è¨­å®ãã¹ãå¤ï¼ãè¨ç®ããï¼
+ *  p_tcbで指定されるタスクの現在優先度（に設定すべき値）を計算する．
  */
 Inline uint_t
@@ -285,6 +261,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ãè§£æ¾ããå ´åã®ç¾å¨åªå
-åº¦å¤æ´å¦ç
+ *  ミューテックスを解放した場合の現在優先度変更処理
  */
 #ifdef TOPPERS_mtxdrop
@@ -307,5 +282,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯
+ *  ミューテックスのロック
  */
 #ifdef TOPPERS_mtxacq
@@ -326,5 +301,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯è§£é¤
+ *  ミューテックスのロック解除
  */
 #ifdef TOPPERS_mtxrel
@@ -340,8 +315,6 @@
 	else {
 		/*
-		 *  ãã¥ã¼ããã¯ã¹å¾
-ã¡ã­ã¥ã¼ã®å
-é ­ã¿ã¹ã¯ï¼p_tcbï¼ã«ï¼ãã¥ã¼ãã
-		 *  ã¯ã¹ãã­ãã¯ãããï¼
+		 *  ミューテックス待ちキューの先頭タスク（p_tcb）に，ミューテッ
+		 *  クスをロックさせる．
 		 */
 		p_tcb = (TCB *) queue_delete_next(&(p_mtxcb->wait_queue));
@@ -364,5 +337,5 @@
 
 /*
- *  ã¿ã¹ã¯ãã­ãã¯ãã¦ãããã¹ã¦ã®ãã¥ã¼ããã¯ã¹ã®ã­ãã¯è§£é¤
+ *  タスクがロックしているすべてのミューテックスのロック解除
  */
 #ifdef TOPPERS_mtxrela
@@ -382,5 +355,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®çæï¼»NGKI2022ï¼½
+ *  ミューテックスの生成［NGKI2022］
  */
 #ifdef TOPPERS_acre_mtx
@@ -396,5 +369,5 @@
 
 	LOG_ACRE_MTX_ENTER(pk_cmtx);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI2023ï¼½ï¼»NGKI2024ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI2023］［NGKI2024］*/
 
 	mtxatr = pk_cmtx->mtxatr;
@@ -402,13 +375,13 @@
 
 	if (mtxatr == TA_CEILING) {
-		CHECK_PAR(VALID_TPRI(ceilpri));			/*ï¼»NGKI2037ï¼½*/
-	}
-	else {
-		CHECK_RSATR(mtxatr, TA_TPRI);			/*ï¼»NGKI2025ï¼½*/
+		CHECK_PAR(VALID_TPRI(ceilpri));			/*［NGKI2037］*/
+	}
+	else {
+		CHECK_RSATR(mtxatr, TA_TPRI);			/*［NGKI2025］*/
 	}
 
 	lock_cpu();
 	if (tnum_mtx == 0 || queue_empty(&free_mtxcb)) {
-		ercd = E_NOID;							/*ï¼»NGKI2031ï¼½*/
+		ercd = E_NOID;							/*［NGKI2031］*/
 	}
 	else {
@@ -419,5 +392,5 @@
 
 		queue_initialize(&(p_mtxcb->wait_queue));
-		p_mtxcb->p_loctsk = NULL;				/*ï¼»NGKI2033ï¼½*/
+		p_mtxcb->p_loctsk = NULL;				/*［NGKI2033］*/
 		ercd = MTXID(p_mtxcb);
 	}
@@ -432,5 +405,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®åé¤ï¼»NGKI2056ï¼½
+ *  ミューテックスの削除［NGKI2056］
  */
 #ifdef TOPPERS_del_mtx
@@ -445,25 +418,23 @@
 
 	LOG_DEL_MTX_ENTER(mtxid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI2057ï¼½ï¼»NGKI2058ï¼½*/
-	CHECK_ID(VALID_MTXID(mtxid));				/*ï¼»NGKI2059ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI2057］［NGKI2058］*/
+	CHECK_ID(VALID_MTXID(mtxid));				/*［NGKI2059］*/
 	p_mtxcb = get_mtxcb(mtxid);
 
 	lock_cpu();
 	if (p_mtxcb->p_mtxinib->mtxatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI2060ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI2060］*/
 	}
 	else if (mtxid <= tmax_smtxid) {
-		ercd = E_OBJ;							/*ï¼»NGKI2062ï¼½*/
-	}
-	else {
-		init_wait_queue(&(p_mtxcb->wait_queue));	/*ï¼»NGKI2065ï¼½*/
+		ercd = E_OBJ;							/*［NGKI2062］*/
+	}
+	else {
+		init_wait_queue(&(p_mtxcb->wait_queue));	/*［NGKI2065］*/
 		p_loctsk = p_mtxcb->p_loctsk;
 		if (p_loctsk != NULL) {
 			/*
-			 *  p_loctskãã­ãã¯ãã¦ãããã¥ã¼ããã¯ã¹ã®ãªã¹ãããå¯¾è±¡
-			 *  ãã¥ã¼ã¯ã¹ãåé¤ãï¼å¿
-è¦ãªå ´åã«ã¯p_loctskã®ç¾å¨åªå
-åº¦
-			 *  ãå¤æ´ããï¼»NGKI2064ï¼½ï¼
+			 *  p_loctskがロックしているミューテックスのリストから対象
+			 *  ミュークスを削除し，必要な場合にはp_loctskの現在優先度
+			 *  を変更する［NGKI2064］．
 			 */
 			pp_prevmtx = &(p_loctsk->p_lastmtx);
@@ -478,5 +449,5 @@
 		}
 		p_mtxinib = (MTXINIB *)(p_mtxcb->p_mtxinib);
-		p_mtxinib->mtxatr = TA_NOEXS;						/*ï¼»NGKI2063ï¼½*/
+		p_mtxinib->mtxatr = TA_NOEXS;						/*［NGKI2063］*/
 		queue_insert_prev(&free_mtxcb, &(p_mtxcb->wait_queue));
 		if (p_runtsk != p_schedtsk) {
@@ -495,5 +466,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯
+ *  ミューテックスのロック
  */
 #ifdef TOPPERS_loc_mtx
@@ -525,9 +496,6 @@
 		mutex_acquire(p_runtsk, p_mtxcb);
 		/*
-		 *  åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ãã­ãã¯ããå ´åï¼p_runtskã®åªå
-åº¦
-		 *  ãä¸ããå¯è½æ§ããããï¼ãã£ã¹ããããå¿
-è¦ã«ãªããã¨ã¯ãªãï¼
+		 *  優先度上限ミューテックスをロックした場合，p_runtskの優先度
+		 *  が上がる可能性があるが，ディスパッチが必要になることはない．
 		 */
 		assert(p_runtsk == p_schedtsk);
@@ -553,5 +521,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯ï¼ãã¼ãªã³ã°ï¼
+ *  ミューテックスのロック（ポーリング）
  */
 #ifdef TOPPERS_ploc_mtx
@@ -579,9 +547,6 @@
 		mutex_acquire(p_runtsk, p_mtxcb);
 		/*
-		 *  åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ãã­ãã¯ããå ´åï¼p_runtskã®åªå
-åº¦
-		 *  ãä¸ããå¯è½æ§ããããï¼ãã£ã¹ããããå¿
-è¦ã«ãªããã¨ã¯ãªãï¼
+		 *  優先度上限ミューテックスをロックした場合，p_runtskの優先度
+		 *  が上がる可能性があるが，ディスパッチが必要になることはない．
 		 */
 		assert(p_runtsk == p_schedtsk);
@@ -604,5 +569,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  ミューテックスのロック（タイムアウトあり）
  */
 #ifdef TOPPERS_tloc_mtx
@@ -636,9 +601,6 @@
 		mutex_acquire(p_runtsk, p_mtxcb);
 		/*
-		 *  åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ãã­ãã¯ããå ´åï¼p_runtskã®åªå
-åº¦
-		 *  ãä¸ããå¯è½æ§ããããï¼ãã£ã¹ããããå¿
-è¦ã«ãªããã¨ã¯ãªãï¼
+		 *  優先度上限ミューテックスをロックした場合，p_runtskの優先度
+		 *  が上がる可能性があるが，ディスパッチが必要になることはない．
 		 */
 		assert(p_runtsk == p_schedtsk);
@@ -668,5 +630,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯è§£é¤
+ *  ミューテックスのロック解除
  */
 #ifdef TOPPERS_unl_mtx
@@ -709,5 +671,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ååæå
+ *  ミューテックスの再初期化
  */
 #ifdef TOPPERS_ini_mtx
@@ -759,7 +721,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ç¶æ
-åç
-§
+ *  ミューテックスの状態参照
  */
 #ifdef TOPPERS_ref_mtx
Index: azure_iot_hub/trunk/asp3_dcre/kernel/mutex.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/mutex.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/mutex.h	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ãã¥ã¼ããã¯ã¹æ©è½
+ *		ミューテックス機能
  */
 
@@ -66,64 +51,48 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹åæåãã­ãã¯
+ *  ミューテックス初期化ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
- *  ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの初期化ブロックの共通部分
+ *  （WOBJINIB）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初のフィールドが共通になっている．
  */
 typedef struct mutex_initialization_block {
-	ATR			mtxatr;			/* ãã¥ã¼ããã¯ã¹å±æ§ */
-	uint_t		ceilpri;		/* ãã¥ã¼ããã¯ã¹ã®ä¸éåªå
-åº¦ï¼å
-é¨è¡¨ç¾ï¼*/
+	ATR			mtxatr;			/* ミューテックス属性 */
+	uint_t		ceilpri;		/* ミューテックスの上限優先度（内部表現）*/
 } MTXINIB;
 
 /*
- *  ãã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯
+ *  ミューテックス管理ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼
- *  ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã®
- *  ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）
+ *  を拡張（オブジェクト指向言語の継承に相当）したもので，最初の2つの
+ *  フィールドが共通になっている．
  */
 struct mutex_control_block {
-	QUEUE		wait_queue;		/* ãã¥ã¼ããã¯ã¹å¾
-ã¡ã­ã¥ã¼ */
-	const MTXINIB *p_mtxinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	TCB			*p_loctsk;		/* ãã¥ã¼ããã¯ã¹ãã­ãã¯ãã¦ããã¿ã¹ã¯ */
-	MTXCB		*p_prevmtx;		/* ãã®åã«ã­ãã¯ãããã¥ã¼ããã¯ã¹ */
+	QUEUE		wait_queue;		/* ミューテックス待ちキュー */
+	const MTXINIB *p_mtxinib;	/* 初期化ブロックへのポインタ */
+	TCB			*p_loctsk;		/* ミューテックスをロックしているタスク */
+	MTXCB		*p_prevmtx;		/* この前にロックしたミューテックス */
 };
 
 /*
- *  ãã¥ã¼ããã¯ã¹å¾
-ã¡æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  ミューテックス待ち情報ブロックの定義
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *  ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  ãã¹ã¦ã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *  （WINFO_WOBJ）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  すべてのフィールドが共通になっている．
  */
 typedef struct mutex_waiting_information {
-	WINFO	winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	MTXCB	*p_mtxcb;		/* å¾
-ã£ã¦ãããã¥ã¼ããã¯ã¹ã®ç®¡çãã­ãã¯ */
+	WINFO	winfo;			/* 標準の待ち情報ブロック */
+	MTXCB	*p_mtxcb;		/* 待っているミューテックスの管理ブロック */
 } WINFO_MTX;
 
 /*
- *  ä½¿ç¨ãã¦ããªããã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないミューテックス管理ブロックのリスト
  */
 extern QUEUE	free_mtxcb;
 
 /*
- *  ãã¥ã¼ããã¯ã¹IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  ミューテックスIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_mtxid;
@@ -131,5 +100,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  ミューテックス初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const MTXINIB	mtxinib_table[];
@@ -137,91 +106,73 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  ミューテックス管理ブロックのエリア（kernel_cfg.c）
  */
 extern MTXCB	mtxcb_table[];
 
 /*
- *  ãã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯ãããã¥ã¼ããã¯ã¹IDãåãåºãããã®ãã¯ã­
+ *  ミューテックス管理ブロックからミューテックスIDを取り出すためのマクロ
  */
 #define	MTXID(p_mtxcb)	((ID)(((p_mtxcb) - mtxcb_table) + TMIN_MTXID))
 
 /*
- *  ãã¥ã¼ããã¯ã¹æ©è½ã®åæå
+ *  ミューテックス機能の初期化
  */
 extern void	initialize_mutex(void);
 
 /*
- *  ä¸éåªå
-åº¦éåã®ãã§ãã¯
+ *  上限優先度違反のチェック
  *
- *  chg_priã®ä¸­ã§ä¸éåªå
-åº¦éåã®ãã§ãã¯ãè¡ãããã«ç¨ããé¢æ°ã§ããï¼
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãã­ãã¯ãã¦ããåªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ã¨ï¼
- *  ã­ãã¯ãå¾
-ã£ã¦ããåªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ã®ä¸­ã§ï¼ä¸éåªå
-åº¦ã
- *  bpriorityãããä½ããã®ãããã°falseãï¼ããã§ãªããã°trueãè¿ãï¼
+ *  chg_priの中で上限優先度違反のチェックを行うために用いる関数であり，
+ *  p_tcbで指定されるタスクがロックしている優先度上限ミューテックスと，
+ *  ロックを待っている優先度上限ミューテックスの中で，上限優先度が
+ *  bpriorityよりも低いものがあればfalseを，そうでなければtrueを返す．
  */
 extern bool_t	mutex_check_ceilpri(TCB *p_tcb, uint_t bpriority);
 
 /* 
- *  åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ãã­ãã¯ãã¦ãããã®ãã§ãã¯
+ *  優先度上限ミューテックスをロックしているかのチェック
  *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãåªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ãã­ãã¯ãã¦ããã°
- *  trueï¼ããã§ãªããã°falseãè¿ãï¼
+ *  p_tcbで指定されるタスクが優先度上限ミューテックスをロックしていれば
+ *  true，そうでなければfalseを返す．
  */
 extern bool_t	mutex_scan_ceilmtx(TCB *p_tcb);
 
 /*
- *  ãã¥ã¼ããã¯ã¹ãã­ãã¯è§£é¤ããå ´åã®ç¾å¨åªå
-åº¦å¤æ´å¦ç
+ *  ミューテックスをロック解除した場合の現在優先度変更処理
  *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãï¼p_mtxcbã§æå®ããããã¥ã¼ããã¯ã¹ãã­ã
- *  ã¯è§£é¤ããéã®ç¾å¨åªå
-åº¦å¤æ´å¦çãè¡ãï¼
+ *  p_tcbで指定されるタスクが，p_mtxcbで指定されるミューテックスをロッ
+ *  ク解除した際の現在優先度変更処理を行う．
  */
 extern void	mutex_drop_priority(TCB *p_tcb, MTXCB *p_mtxcb);
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯
+ *  ミューテックスのロック
  *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã«ï¼p_mtxcbã§æå®ããããã¥ã¼ããã¯ã¹ãã­ã
- *  ã¯ãããï¼
+ *  p_tcbで指定されるタスクに，p_mtxcbで指定されるミューテックスをロッ
+ *  クさせる．
  */
 extern void	mutex_acquire(TCB *p_tcb, MTXCB *p_mtxcb);
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯è§£é¤
+ *  ミューテックスのロック解除
  *
- *  p_mtxcbã§æå®ããããã¥ã¼ããã¯ã¹ãã­ãã¯è§£é¤ããï¼ã­ãã¯è§£é¤ãã
- *  ãã¥ã¼ããã¯ã¹ã«ï¼ã­ãã¯å¾
-ã¡ç¶æ
-ã®ã¿ã¹ã¯ãããå ´åã«ã¯ï¼ãã®ã¿ã¹ã¯
- *  ã«ãã¥ã¼ããã¯ã¹ãã­ãã¯ãããï¼
+ *  p_mtxcbで指定されるミューテックスをロック解除する．ロック解除した
+ *  ミューテックスに，ロック待ち状態のタスクがある場合には，そのタスク
+ *  にミューテックスをロックさせる．
  */
 extern void	mutex_release(MTXCB *p_mtxcb);
 
 /*
- *  ã¿ã¹ã¯ãã­ãã¯ãã¦ãããã¹ã¦ã®ãã¥ã¼ããã¯ã¹ã®ã­ãã¯è§£é¤
+ *  タスクがロックしているすべてのミューテックスのロック解除
  *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã«ï¼ãããã­ãã¯ãã¦ãããã¹ã¦ã®ãã¥ã¼ããã¯
- *  ã¹ãã­ãã¯è§£é¤ãããï¼ã­ãã¯è§£é¤ãããã¥ã¼ããã¯ã¹ã«ï¼ã­ãã¯å¾
-ã¡ç¶
- *  æ
-ã®ã¿ã¹ã¯ãããå ´åã«ã¯ï¼ãã®ã¿ã¹ã¯ã«ãã¥ã¼ããã¯ã¹ãã­ãã¯ãããï¼
+ *  p_tcbで指定されるタスクに，それがロックしているすべてのミューテック
+ *  スをロック解除させる．ロック解除したミューテックスに，ロック待ち状
+ *  態のタスクがある場合には，そのタスクにミューテックスをロックさせる．
  *
- *  ãã®é¢æ°ã¯ï¼ã¿ã¹ã¯ã®çµäºæã«ä½¿ããããã®ã§ããããï¼p_tcbã§æå®ãã
- *  ãã¿ã¹ã¯ã®åªå
-åº¦ãå¤æ´ããå¦çã¯è¡ããªãï¼ãã ãï¼ãã®é¢æ°ã®ä¸­ã§ä»
- *  ã®ã¿ã¹ã¯ã®åªå
-åº¦ãå¤åãï¼å®è¡ãã¹ãã¿ã¹ã¯ãå¤ãããã¨ãããï¼ãã®
- *  ããï¼ãã®é¢æ°ããæ»ã£ãå¾ã«ï¼ãã£ã¹ããããå¿
-è¦ãå¤å¥ãã¦ï¼å¿
-è¦ãª
- *  å ´åã«ã¯ãã£ã¹ããããè¡ããªããã°ãªããªãï¼
+ *  この関数は，タスクの終了時に使われるものであるため，p_tcbで指定され
+ *  るタスクの優先度を変更する処理は行わない．ただし，この関数の中で他
+ *  のタスクの優先度が変化し，実行すべきタスクが変わることがある．その
+ *  ため，この関数から戻った後に，ディスパッチが必要か判別して，必要な
+ *  場合にはディスパッチを行わなければならない．
  */
 extern void	mutex_release_all(TCB *p_tcb);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/mutex.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/mutex.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/mutex.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		ãã¥ã¼ããã¯ã¹æ©è½ã®çæã¹ã¯ãªãã
+#		ミューテックス機能の生成スクリプト
 #
 
@@ -66,6 +51,6 @@
 
   def prepare(key, params)
-    # mtxatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2025ï¼½
-    # ï¼TA_NULLï¼TA_TPRIï¼TA_CEILINGã®ãããã§ããªãå ´åï¼
+    # mtxatrが無効の場合（E_RSATR）［NGKI2025］
+    # （TA_NULL，TA_TPRI，TA_CEILINGのいずれでもない場合）
     if !(params[:mtxatr] == $TA_NULL || params[:mtxatr] == $TA_TPRI \
 										|| params[:mtxatr] == $TA_CEILING)
@@ -74,19 +59,17 @@
 
     if params[:mtxatr] == $TA_CEILING
-      # åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ã®å ´å
-      # ceilpriãæªæå®ã®å ´åã¯ã¨ã©ã¼ã¨ãã
+      # 優先度上限ミューテックスの場合
+      # ceilpriが未指定の場合はエラーとする
       if params[:ceilpri].nil?
         error_api(params, "ceilpri must be specified in %apiname of %mtxid")
 
-      # (TMIN_TPRI <= ceilpri && ceilpri <= TMAX_TPRI)ã§ãªãå ´åï¼E_PARï¼
-      # ï¼»NGKI2037ï¼½
+      # (TMIN_TPRI <= ceilpri && ceilpri <= TMAX_TPRI)でない場合（E_PAR）
+      # ［NGKI2037］
       elsif !($TMIN_TPRI <= params[:ceilpri] && params[:ceilpri] <= $TMAX_TPRI)
         error_illegal_id("E_PAR", params, :ceilpri, :mtxid)
       end
     else
-      # åªå
-åº¦ä¸éãã¥ã¼ããã¯ã¹ã§ãªãå ´å
-      # ceilpriãæå®ããã¦ããå ´åã¯è­¦åã¡ãã»ã¼ã¸ãåºã
+      # 優先度上限ミューテックスでない場合
+      # ceilpriが指定されている場合は警告メッセージを出す
       if !params[:ceilpri].nil?
         warning_api(params, "%%ceilpri is ignored in %apiname of %mtxid")
@@ -102,6 +85,5 @@
 
 #
-#  ãã¥ã¼ããã¯ã¹ã«é¢ããæ
-å ±ã®çæ
+#  ミューテックスに関する情報の生成
 #
 $kernelCfgC.comment_header("Mutex Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,6 +42,5 @@
 
 /*
- *		åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æ©è½
+ *		優先度データキュー機能
  */
 
@@ -68,5 +52,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_PDQ_ENTER
@@ -151,6 +135,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®æ°
+ *  優先度データキューの数
  */
 #define tnum_pdq	((uint_t)(tmax_pdqid - TMIN_PDQID + 1))
@@ -158,8 +141,6 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼IDããåªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ãåãåºãã
- *  ãã®ãã¯ã­
+ *  優先度データキューIDから優先度データキュー管理ブロックを取り出すた
+ *  めのマクロ
  */
 #define INDEX_PDQ(pdqid)	((uint_t)((pdqid) - TMIN_PDQID))
@@ -169,12 +150,10 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªãåªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない優先度データキュー管理ブロックのリスト
  */
 QUEUE	free_pdqcb;
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æ©è½ã®åæå
+ *  優先度データキュー機能の初期化
  */
 void
@@ -208,6 +187,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´
+ *  優先度データキュー管理領域へのデータの格納
  */
 #ifdef TOPPERS_pdqenq
@@ -246,6 +224,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã
+ *  優先度データキュー管理領域からのデータの取出し
  */
 #ifdef TOPPERS_pdqdeq
@@ -270,6 +247,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®ãã¼ã¿éä¿¡
+ *  優先度データキューへのデータ送信
  */
 #ifdef TOPPERS_pdqsnd
@@ -299,6 +275,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®ãã¼ã¿åä¿¡
+ *  優先度データキューからのデータ受信
  */
 #ifdef TOPPERS_pdqrcv
@@ -337,6 +312,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®çæ
+ *  優先度データキューの生成
  */
 #ifdef TOPPERS_acre_pdq
@@ -403,6 +377,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®åé¤
+ *  優先度データキューの削除
  */
 #ifdef TOPPERS_del_pdq
@@ -451,6 +424,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡
+ *  優先度データキューへの送信
  */
 #ifdef TOPPERS_snd_pdq
@@ -503,6 +475,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  優先度データキューへの送信（ポーリング）
  */
 #ifdef TOPPERS_psnd_pdq
@@ -551,6 +522,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  優先度データキューへの送信（タイムアウトあり）
  */
 #ifdef TOPPERS_tsnd_pdq
@@ -609,6 +579,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡
+ *  優先度データキューからの受信
  */
 #ifdef TOPPERS_rcv_pdq
@@ -662,6 +631,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  優先度データキューからの受信（ポーリング）
  */
 #ifdef TOPPERS_prcv_pdq
@@ -701,6 +669,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  優先度データキューからの受信（タイムアウトあり）
  */
 #ifdef TOPPERS_trcv_pdq
@@ -759,6 +726,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ååæå
+ *  優先度データキューの再初期化
  */
 #ifdef TOPPERS_ini_pdq
@@ -801,8 +767,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ç¶æ
-åç
-§
+ *  優先度データキューの状態参照
  */
 #ifdef TOPPERS_ref_pdq
Index: azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,6 +42,5 @@
 
 /*
- *		åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æ©è½
+ *		優先度データキュー機能
  */
 
@@ -69,111 +53,73 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ç®¡çãã­ãã¯
+ *  優先度データ管理ブロック
  */
 typedef struct pridata_management_block PDQMB;
 
 struct pridata_management_block {
-	PDQMB		*p_next;		/* æ¬¡ã®ãã¼ã¿ */
-	intptr_t	data;			/* ãã¼ã¿æ¬ä½ */
-	PRI			datapri;		/* ãã¼ã¿åªå
-åº¦ */
+	PDQMB		*p_next;		/* 次のデータ */
+	intptr_t	data;			/* データ本体 */
+	PRI			datapri;		/* データ優先度 */
 };
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼åæåãã­ãã¯
+ *  優先度データキュー初期化ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
- *  ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの初期化ブロックの共通部分
+ *  （WOBJINIB）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初のフィールドが共通になっている．
  */
 typedef struct pridataq_initialization_block {
-	ATR			pdqatr;			/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼å±æ§ */
-	uint_t		pdqcnt;			/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®å®¹é */
-	PRI			maxdpri;		/* ãã¼ã¿åªå
-åº¦ã®æå¤§å¤ */
-	PDQMB		*p_pdqmb;		/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åã®å
-é ­çªå° */
+	ATR			pdqatr;			/* 優先度データキュー属性 */
+	uint_t		pdqcnt;			/* 優先度データキューの容量 */
+	PRI			maxdpri;		/* データ優先度の最大値 */
+	PDQMB		*p_pdqmb;		/* 優先度データキュー管理領域の先頭番地 */
 } PDQINIB;
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯
+ *  優先度データキュー管理ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼
- *  ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã®
- *  ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）
+ *  を拡張（オブジェクト指向言語の継承に相当）したもので，最初の2つの
+ *  フィールドが共通になっている．
  */
 typedef struct pridataq_control_block {
-	QUEUE		swait_queue;	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼éä¿¡å¾
-ã¡ã­ã¥ã¼ */
-	const PDQINIB *p_pdqinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	QUEUE		rwait_queue;	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼åä¿¡å¾
-ã¡ã­ã¥ã¼ */
-	uint_t		count;			/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ä¸­ã®ãã¼ã¿ã®æ° */
-	PDQMB		*p_head;		/* æåã®ãã¼ã¿ */
-	uint_t		unused;			/* æªä½¿ç¨ãã¼ã¿ç®¡çãã­ãã¯ã®å
-é ­ */
-	PDQMB		*p_freelist;	/* æªå²å½ã¦ãã¼ã¿ç®¡çãã­ãã¯ã®ãªã¹ã */
+	QUEUE		swait_queue;	/* 優先度データキュー送信待ちキュー */
+	const PDQINIB *p_pdqinib;	/* 初期化ブロックへのポインタ */
+	QUEUE		rwait_queue;	/* 優先度データキュー受信待ちキュー */
+	uint_t		count;			/* 優先度データキュー中のデータの数 */
+	PDQMB		*p_head;		/* 最初のデータ */
+	uint_t		unused;			/* 未使用データ管理ブロックの先頭 */
+	PDQMB		*p_freelist;	/* 未割当てデータ管理ブロックのリスト */
 } PDQCB;
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼å¾
-ã¡æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  優先度データキュー待ち情報ブロックの定義
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *  ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®2ã¤ã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *  （WINFO_WOBJ）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初の2つのフィールドが共通になっている．
  */
 typedef struct pridataq_send_waiting_information {
-	WINFO		winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	PDQCB		*p_pdqcb;		/* å¾
-ã£ã¦ããåªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ç®¡çãã­ãã¯*/
-	intptr_t	data;			/* éä¿¡ãã¼ã¿ */
-	PRI			datapri;		/* ãã¼ã¿åªå
-åº¦ */
+	WINFO		winfo;			/* 標準の待ち情報ブロック */
+	PDQCB		*p_pdqcb;		/* 待っている優先度データキューの管理ブロック*/
+	intptr_t	data;			/* 送信データ */
+	PRI			datapri;		/* データ優先度 */
 } WINFO_SPDQ;
 
 typedef struct pridataq_receive_waiting_information {
-	WINFO		winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	PDQCB		*p_pdqcb;		/* å¾
-ã£ã¦ããåªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ç®¡çãã­ãã¯*/
-	intptr_t	data;			/* åä¿¡ãã¼ã¿ */
-	PRI			datapri;		/* ãã¼ã¿åªå
-åº¦ */
+	WINFO		winfo;			/* 標準の待ち情報ブロック */
+	PDQCB		*p_pdqcb;		/* 待っている優先度データキューの管理ブロック*/
+	intptr_t	data;			/* 受信データ */
+	PRI			datapri;		/* データ優先度 */
 } WINFO_RPDQ;
 
 /*
- *  ä½¿ç¨ãã¦ããªãåªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していない優先度データキュー管理ブロックのリスト
  */
 extern QUEUE	free_pdqcb;
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  優先度データキューIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_pdqid;
@@ -181,6 +127,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  優先度データキュー初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const PDQINIB	pdqinib_table[];
@@ -188,44 +133,36 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  優先度データキュー管理ブロックのエリア（kernel_cfg.c）
  */
 extern PDQCB	pdqcb_table[];
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çãã­ãã¯ããåªå
-åº¦ãã¼ã¿ã­ã¥ã¼IDãåãåºãã
- *  ãã®ãã¯ã­
+ *  優先度データキュー管理ブロックから優先度データキューIDを取り出すた
+ *  めのマクロ
  */
 #define	PDQID(p_pdqcb)	((ID)(((p_pdqcb) - pdqcb_table) + TMIN_PDQID))
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æ©è½ã®åæå
+ *  優先度データキュー機能の初期化
  */
 extern void	initialize_pridataq(void);
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´
+ *  優先度データキュー管理領域へのデータの格納
  */
 extern void	enqueue_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri);
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã
+ *  優先度データキュー管理領域からのデータの取出し
  */
 extern void	dequeue_pridata(PDQCB *p_pdqcb, intptr_t *p_data, PRI *p_datapri);
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®ãã¼ã¿éä¿¡
+ *  優先度データキューへのデータ送信
  */
 extern bool_t	send_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri);
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®ãã¼ã¿åä¿¡
+ *  優先度データキューからのデータ受信
  */
 extern bool_t	receive_pridata(PDQCB *p_pdqcb, intptr_t *p_data,
Index: azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/pridataq.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,6 +42,5 @@
 
 #
-#		åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æ©è½ã®çæã¹ã¯ãªãã
+#		優先度データキュー機能の生成スクリプト
 #
 
@@ -67,26 +51,25 @@
 
   def prepare(key, params)
-    # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨­å®
+    # パラメータが省略された時のデフォルト値の設定
     params[:pdqmb] ||= "NULL"
 
-    # pdqatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1804ï¼½
-    #ï¼TA_TPRIä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # pdqatrが無効の場合（E_RSATR）［NGKI1804］
+    #（TA_TPRI以外のビットがセットされている場合）
     if (params[:pdqatr] & ~($TA_TPRI)) != 0
       error_illegal_id("E_RSATR", params, :pdqatr, :pdqid)
     end
 
-    # (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)ã§ãªãå ´åï¼E_PARï¼
-    # ï¼»NGKI1819ï¼½
+    # (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合（E_PAR）
+    # ［NGKI1819］
     if !($TMIN_DPRI <= params[:maxdpri] && params[:maxdpri] <= $TMAX_DPRI)
       error_illegal_id("E_PAR", params, :maxdpri, :pdqid)
     end
 
-    # pdqmbãNULLã§ãªãå ´åï¼E_NOSPTï¼ï¼»ASPS0142ï¼½
+    # pdqmbがNULLでない場合（E_NOSPT）［ASPS0142］
     if params[:pdqmb] != "NULL"
       error_illegal_id("E_NOSPT", params, :pdqmb, :pdqid)
     end
 
-    # åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ç®¡çé å
+    # 優先度データキュー管理領域
     if params[:pdqcnt] > 0
       pdqmbName = "_kernel_pdqmb_#{params[:pdqid]}"
@@ -105,7 +88,5 @@
 
 #
-#  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã«é¢ããæ
-å ±ã®çæ
+#  優先度データキューに関する情報の生成
 #
 $kernelCfgC.comment_header("Priority Dataqueue Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã»ããã©æ©è½
+ *		セマフォ機能
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_SEM_ENTER
@@ -134,5 +119,5 @@
 
 /*
- *  ã»ããã©ã®æ°
+ *  セマフォの数
  */
 #define tnum_sem	((uint_t)(tmax_semid - TMIN_SEMID + 1))
@@ -140,5 +125,5 @@
 
 /*
- *  ã»ããã©IDããã»ããã©ç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  セマフォIDからセマフォ管理ブロックを取り出すためのマクロ
  */
 #define INDEX_SEM(semid)	((uint_t)((semid) - TMIN_SEMID))
@@ -148,10 +133,10 @@
 
 /*
- *  ä½¿ç¨ãã¦ããªãã»ããã©ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないセマフォ管理ブロックのリスト
  */
 QUEUE	free_semcb;
 
 /* 
- *  ã»ããã©æ©è½ã®åæå
+ *  セマフォ機能の初期化
  */
 void
@@ -181,5 +166,5 @@
 
 /*
- *  ã»ããã©ã®çæ
+ *  セマフォの生成
  */
 #ifdef TOPPERS_acre_sem
@@ -230,5 +215,5 @@
 
 /*
- *  ã»ããã©ã®åé¤
+ *  セマフォの削除
  */
 #ifdef TOPPERS_del_sem
@@ -273,5 +258,5 @@
 
 /*
- *  ã»ããã©è³æºã®è¿å´
+ *  セマフォ資源の返却
  */
 #ifdef TOPPERS_sig_sem
@@ -323,5 +308,5 @@
 
 /*
- *  ã»ããã©è³æºã®ç²å¾
+ *  セマフォ資源の獲得
  */
 #ifdef TOPPERS_wai_sem
@@ -366,5 +351,5 @@
 
 /*
- *  ã»ããã©è³æºã®ç²å¾ï¼ãã¼ãªã³ã°ï¼
+ *  セマフォ資源の獲得（ポーリング）
  */
 #ifdef TOPPERS_pol_sem
@@ -402,5 +387,5 @@
 
 /*
- *  ã»ããã©è³æºã®ç²å¾ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  セマフォ資源の獲得（タイムアウトあり）
  */
 #ifdef TOPPERS_twai_sem
@@ -451,5 +436,5 @@
 
 /*
- *  ã»ããã©ã®ååæå
+ *  セマフォの再初期化
  */
 #ifdef TOPPERS_ini_sem
@@ -488,7 +473,5 @@
 
 /*
- *  ã»ããã©ã®ç¶æ
-åç
-§
+ *  セマフォの状態参照
  */
 #ifdef TOPPERS_ref_sem
Index: azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã»ããã©æ©è½
+ *		セマフォ機能
  */
 
@@ -68,62 +53,48 @@
 
 /*
- *  ã»ããã©åæåãã­ãã¯
+ *  セマフォ初期化ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
- *  ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  æåã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの初期化ブロックの共通部分
+ *  （WOBJINIB）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  最初のフィールドが共通になっている．
  */
 typedef struct semaphore_initialization_block {
-	ATR			sematr;			/* ã»ããã©å±æ§ */
-	uint_t		isemcnt;		/* ã»ããã©ã®è³æºæ°ã®åæå¤ */
-	uint_t		maxsem;			/* ã»ããã©ã®æå¤§è³æºæ° */
+	ATR			sematr;			/* セマフォ属性 */
+	uint_t		isemcnt;		/* セマフォの資源数の初期値 */
+	uint_t		maxsem;			/* セマフォの最大資源数 */
 } SEMINIB;
 
 /*
- *  ã»ããã©ç®¡çãã­ãã¯
+ *  セマフォ管理ブロック
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼
- *  ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã®
- *  ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）
+ *  を拡張（オブジェクト指向言語の継承に相当）したもので，最初の2つの
+ *  フィールドが共通になっている．
  */
 typedef struct semaphore_control_block {
-	QUEUE		wait_queue;		/* ã»ããã©å¾
-ã¡ã­ã¥ã¼ */
-	const SEMINIB *p_seminib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	uint_t		semcnt;			/* ã»ããã©ç¾å¨ã«ã¦ã³ãå¤ */
+	QUEUE		wait_queue;		/* セマフォ待ちキュー */
+	const SEMINIB *p_seminib;	/* 初期化ブロックへのポインタ */
+	uint_t		semcnt;			/* セマフォ現在カウント値 */
 } SEMCB;
 
 /*
- *  ã»ããã©å¾
-ã¡æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  セマフォ待ち情報ブロックの定義
  *
- *  ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *  ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼
- *  ãã¹ã¦ã®ãã£ã¼ã«ããå
-±éã«ãªã£ã¦ããï¼
+ *  この構造体は，同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *  （WINFO_WOBJ）を拡張（オブジェクト指向言語の継承に相当）したもので，
+ *  すべてのフィールドが共通になっている．
  */
 typedef struct semaphore_waiting_information {
-	WINFO	winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	SEMCB	*p_semcb;		/* å¾
-ã£ã¦ããã»ããã©ã®ç®¡çãã­ãã¯ */
+	WINFO	winfo;			/* 標準の待ち情報ブロック */
+	SEMCB	*p_semcb;		/* 待っているセマフォの管理ブロック */
 } WINFO_SEM;
 
 /*
- *  ä½¿ç¨ãã¦ããªãã»ããã©ç®¡çãã­ãã¯ã®ãªã¹ã
+ *  使用していないセマフォ管理ブロックのリスト
  */
 extern QUEUE	free_semcb;
 
 /*
- *  ã»ããã©IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  セマフォIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_semid;
@@ -131,5 +102,5 @@
 
 /*
- *  ã»ããã©åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  セマフォ初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const SEMINIB	seminib_table[];
@@ -137,15 +108,15 @@
 
 /*
- *  ã»ããã©ç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  セマフォ管理ブロックのエリア（kernel_cfg.c）
  */
 extern SEMCB	semcb_table[];
 
 /*
- *  ã»ããã©ç®¡çãã­ãã¯ããã»ããã©IDãåãåºãããã®ãã¯ã­
+ *  セマフォ管理ブロックからセマフォIDを取り出すためのマクロ
  */
 #define	SEMID(p_semcb)	((ID)(((p_semcb) - semcb_table) + TMIN_SEMID))
 
 /*
- *  ã»ããã©æ©è½ã®åæå
+ *  セマフォ機能の初期化
  */
 extern void	initialize_semaphore(void);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/semaphore.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		ã»ããã©æ©è½ã®çæã¹ã¯ãªãã
+#		セマフォ機能の生成スクリプト
 #
 
@@ -66,16 +51,16 @@
 
   def prepare(key, params)
-    # sematrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1456ï¼½
-    #ï¼TA_TPRIä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # sematrが無効の場合（E_RSATR）［NGKI1456］
+    #（TA_TPRI以外のビットがセットされている場合）
     if (params[:sematr] & ~($TA_TPRI)) != 0
       error_illegal_id("E_RSATR", params, :sematr, :semid)
     end
 
-    # (1 <= maxsem && maxsem <= TMAX_MAXSEM)ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI1468ï¼½
+    # (1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合（E_PAR）［NGKI1468］
     if !(1 <= params[:maxsem] && params[:maxsem] <= $TMAX_MAXSEM)
       error_illegal_id("E_PAR", params, :maxsem, :semid)
     end
 
-    # (0 <= isemcnt && isemcnt <= maxsem)ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI1466ï¼½
+    # (0 <= isemcnt && isemcnt <= maxsem)でない場合（E_PAR）［NGKI1466］
     if !(0 <= params[:isemcnt] && params[:isemcnt] <= params[:maxsem])
       error_wrong_id("E_PAR", params, :isemcnt, :semid, "too large")
@@ -89,6 +74,5 @@
 
 #
-#  ã»ããã©ã«é¢ããæ
-å ±ã®çæ
+#  セマフォに関する情報の生成
 #
 $kernelCfgC.comment_header("Semaphore Functions")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/startup.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/startup.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/startup.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã«ã¼ãã«ã®åæåã¨çµäºå¦ç
+ *		カーネルの初期化と終了処理
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_KER_ENTER
@@ -86,15 +71,13 @@
 
 /*
- *  ã«ã¼ãã«åä½ç¶æ
-ãã©ã°
+ *  カーネル動作状態フラグ
  *
- *  ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ï¼falseï¼ï¼0ï¼ã«åæåããããã¨ãæå¾
-ãã¦
- *  ããï¼
+ *  スタートアップルーチンで，false（＝0）に初期化されることを期待して
+ *  いる．
  */
 bool_t	kerflg = false;
 
 /*
- *  ã«ã¼ãã«ã®èµ·å
+ *  カーネルの起動
  */
 void
@@ -102,5 +85,5 @@
 {
 	/*
-	 *  TECSã®åæå
+	 *  TECSの初期化
 	 */
 #ifndef TOPPERS_OMIT_TECS
@@ -109,33 +92,31 @@
 
 	/*
-	 *  ã¿ã¼ã²ããä¾å­ã®åæå
+	 *  ターゲット依存の初期化
 	 */
 	target_initialize();
 
 	/*
-	 *  åã¢ã¸ã¥ã¼ã«ã®åæå
+	 *  各モジュールの初期化
 	 *
-	 *  ã¿ã¤ã ã¤ãã³ãç®¡çã¢ã¸ã¥ã¼ã«ã¯ä»ã®ã¢ã¸ã¥ã¼ã«ããå
-ã«åæå
-	 *  ããå¿
-è¦ãããï¼
+	 *  タイムイベント管理モジュールは他のモジュールより先に初期化
+	 *  する必要がある．
 	 */
 	initialize_kmm();
-	initialize_tmevt();								/*ï¼»ASPD1061ï¼½*/
+	initialize_tmevt();								/*［ASPD1061］*/
 	initialize_object();
 
 	/*
-	 *  åæåã«ã¼ãã³ã®å®è¡
+	 *  初期化ルーチンの実行
 	 */ 
 	call_inirtn();
 
 	/*
-	 *  é«åè§£è½ã¿ã¤ãã®è¨­å®
-	 */
-	current_hrtcnt = target_hrt_get_current();		/*ï¼»ASPD1063ï¼½*/
-	set_hrt_event();								/*ï¼»ASPD1064ï¼½*/
-
-	/*
-	 *  ã«ã¼ãã«åä½ã®éå§
+	 *  高分解能タイマの設定
+	 */
+	current_hrtcnt = target_hrt_get_current();		/*［ASPD1063］*/
+	set_hrt_event();								/*［ASPD1064］*/
+
+	/*
+	 *  カーネル動作の開始
 	 */
 	kerflg = true;
@@ -148,5 +129,5 @@
 
 /*
- *  ã«ã¼ãã«ã®çµäº
+ *  カーネルの終了
  */
 #ifdef TOPPERS_ext_ker
@@ -160,11 +141,10 @@
 
 	/*
-	 *  å²è¾¼ã¿ã­ãã¯ç¶æ
-ã«ç§»è¡
+	 *  割込みロック状態に移行
 	 */
 	SIL_LOC_INT();
 
 	/*
-	 *  ã«ã¼ãã«åä½ã®çµäº
+	 *  カーネル動作の終了
 	 */
 	LOG_KER_LEAVE();
@@ -172,12 +152,12 @@
 
 	/*
-	 *  ã«ã¼ãã«ã®çµäºå¦çã®å¼åºã
+	 *  カーネルの終了処理の呼出し
 	 *
-	 *  éã¿ã¹ã¯ã³ã³ãã­ã¹ãã«åãæãã¦ï¼exit_kernelãå¼ã³åºãï¼
+	 *  非タスクコンテキストに切り換えて，exit_kernelを呼び出す．
 	 */
 	call_exit_kernel();
 
 	/*
-	 *  ã³ã³ãã¤ã©ã®è­¦åå¯¾ç­ï¼ããã¸æ¥ããã¨ã¯ãªãã¯ãï¼
+	 *  コンパイラの警告対策（ここへ来ることはないはず）
 	 */
 	SIL_UNL_INT();
@@ -187,5 +167,5 @@
 
 /*
- *  ã«ã¼ãã«ã®çµäºå¦ç
+ *  カーネルの終了処理
  */
 void
@@ -193,10 +173,10 @@
 {
 	/*
-	 *  çµäºå¦çã«ã¼ãã³ã®å®è¡
+	 *  終了処理ルーチンの実行
 	 */
 	call_terrtn();
 
 	/*
-	 *  ã¿ã¼ã²ããä¾å­ã®çµäºå¦ç
+	 *  ターゲット依存の終了処理
 	 */
 	target_exit();
@@ -207,9 +187,8 @@
 
 /*
- *  ã«ã¼ãã«ã®å²ãä»ããã¡ã¢ãªé åã®ç®¡ç
+ *  カーネルの割り付けるメモリ領域の管理
  *
- *  ã¡ã¢ãªé åãå
-é ­ããé ã«å²ãå½ã¦ï¼è§£æ¾ãããã¡ã¢ãªé åãåå©ç¨ããª
- *  ãã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ï¼
+ *  メモリ領域を先頭から順に割り当て，解放されたメモリ領域を再利用しな
+ *  いメモリ管理モジュール．
  */
 #ifdef TOPPERS_kermem
Index: azure_iot_hub/trunk/asp3_dcre/kernel/sys_manage.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/sys_manage.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/sys_manage.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,6 +42,5 @@
 
 /*
- *		ã·ã¹ãã ç¶æ
-ç®¡çæ©è½
+ *		システム状態管理機能
  */
 
@@ -66,5 +50,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ROT_RDQ_ENTER
@@ -173,6 +157,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®åªå
-é ä½ã®åè»¢ï¼»NGKI3548ï¼½
+ *  タスクの優先順位の回転［NGKI3548］
  */
 #ifdef TOPPERS_rot_rdq
@@ -185,10 +168,10 @@
 
 	LOG_ROT_RDQ_ENTER(tskpri);
-	CHECK_UNL();								/*ï¼»NGKI2684ï¼½*/
+	CHECK_UNL();								/*［NGKI2684］*/
 	if (tskpri == TPRI_SELF && !sense_context()) {
-		pri = p_runtsk->bpriority;				/*ï¼»NGKI2689ï¼½*/
+		pri = p_runtsk->bpriority;				/*［NGKI2689］*/
 	}
 	else {
-		CHECK_PAR(VALID_TPRI(tskpri));			/*ï¼»NGKI2685ï¼½*/
+		CHECK_PAR(VALID_TPRI(tskpri));			/*［NGKI2685］*/
 		pri = INT_PRIORITY(tskpri);
 	}
@@ -215,7 +198,5 @@
 
 /*
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯IDã®åç
-§ï¼»NGKI3550ï¼½
+ *  実行状態のタスクIDの参照［NGKI3550］
  */
 #ifdef TOPPERS_get_tid
@@ -227,5 +208,5 @@
 
 	LOG_GET_TID_ENTER(p_tskid);
-	CHECK_UNL();								/*ï¼»NGKI2707ï¼½*/
+	CHECK_UNL();								/*［NGKI2707］*/
 
 	lock_cpu();
@@ -242,6 +223,5 @@
 
 /*
- *  å®è¡ã§ããã¿ã¹ã¯ã®æ°ã®åç
-§ï¼»NGKI3623ï¼½
+ *  実行できるタスクの数の参照［NGKI3623］
  */
 #ifdef TOPPERS_get_lod
@@ -255,10 +235,10 @@
 
 	LOG_GET_LOD_ENTER(p_tskid, p_load);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3624ï¼½ï¼»NGKI3625ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3624］［NGKI3625］*/
 	if (tskpri == TPRI_SELF) {
-		pri = p_runtsk->bpriority;				/*ï¼»NGKI3631ï¼½*/
+		pri = p_runtsk->bpriority;				/*［NGKI3631］*/
 	}
 	else {
-		CHECK_PAR(VALID_TPRI(tskpri));			/*ï¼»NGKI3626ï¼½*/
+		CHECK_PAR(VALID_TPRI(tskpri));			/*［NGKI3626］*/
 		pri = INT_PRIORITY(tskpri);
 	}
@@ -283,7 +263,5 @@
 
 /*
- *  æå®ããåªå
-é ä½ã®ã¿ã¹ã¯IDã®åç
-§ï¼»NGKI3641ï¼½
+ *  指定した優先順位のタスクIDの参照［NGKI3641］
  */
 #ifdef TOPPERS_get_nth
@@ -298,10 +276,10 @@
 
 	LOG_GET_NTH_ENTER(p_tskid, nth, p_tskid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3642ï¼½ï¼»NGKI3643ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3642］［NGKI3643］*/
 	if (tskpri == TPRI_SELF) {
-		pri = p_runtsk->bpriority;				/*ï¼»NGKI3650ï¼½*/
+		pri = p_runtsk->bpriority;				/*［NGKI3650］*/
 	}
 	else {
-		CHECK_PAR(VALID_TPRI(tskpri));			/*ï¼»NGKI3644ï¼½*/
+		CHECK_PAR(VALID_TPRI(tskpri));			/*［NGKI3644］*/
 		pri = INT_PRIORITY(tskpri);
 	}
@@ -330,6 +308,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã¸ã®é·ç§»ï¼»NGKI3538ï¼½
+ *  CPUロック状態への遷移［NGKI3538］
  */
 #ifdef TOPPERS_loc_cpu
@@ -342,6 +319,6 @@
 	LOG_LOC_CPU_ENTER();
 
-	if (!sense_lock()) {						/*ï¼»NGKI2731ï¼½*/
-		lock_cpu();								/*ï¼»NGKI2730ï¼½*/
+	if (!sense_lock()) {						/*［NGKI2731］*/
+		lock_cpu();								/*［NGKI2730］*/
 	}
 	ercd = E_OK;
@@ -354,13 +331,9 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®è§£é¤ï¼»NGKI3539ï¼½
+ *  CPUロック状態の解除［NGKI3539］
  *
- *  CPUã­ãã¯ä¸­ã¯ï¼ãã£ã¹ããããå¿
-è¦ã¨ãªããµã¼ãã¹ã³ã¼ã«ãå¼ã³åºãã
- *  ã¨ã¯ã§ããªãããï¼CPUã­ãã¯ç¶æ
-ã®è§£é¤æã«ãã£ã¹ãããã£ãèµ·åãã
- *  å¿
-è¦ã¯ãªãï¼
+ *  CPUロック中は，ディスパッチが必要となるサービスコールを呼び出すこ
+ *  とはできないため，CPUロック状態の解除時にディスパッチャを起動する
+ *  必要はない．
  */
 #ifdef TOPPERS_unl_cpu
@@ -373,6 +346,6 @@
 	LOG_UNL_CPU_ENTER();
 
-	if (sense_lock()) {							/*ï¼»NGKI2738ï¼½*/
-		unlock_cpu();							/*ï¼»NGKI2737ï¼½*/
+	if (sense_lock()) {							/*［NGKI2738］*/
+		unlock_cpu();							/*［NGKI2737］*/
 	}
 	ercd = E_OK;
@@ -385,5 +358,5 @@
 
 /*
- *  ãã£ã¹ãããã®ç¦æ­¢ï¼»NGKI2740ï¼½
+ *  ディスパッチの禁止［NGKI2740］
  */
 #ifdef TOPPERS_dis_dsp
@@ -395,5 +368,5 @@
 
 	LOG_DIS_DSP_ENTER();
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI2741ï¼½ï¼»NGKI2742ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI2741］［NGKI2742］*/
 
 	lock_cpu();
@@ -411,5 +384,5 @@
 
 /*
- *  ãã£ã¹ãããã®è¨±å¯ï¼»NGKI2746ï¼½
+ *  ディスパッチの許可［NGKI2746］
  */
 #ifdef TOPPERS_ena_dsp
@@ -421,5 +394,5 @@
 
 	LOG_ENA_DSP_ENTER();
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI2747ï¼½ï¼»NGKI2748ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI2747］［NGKI2748］*/
 
 	lock_cpu();
@@ -453,6 +426,5 @@
 
 /*
- *  ã³ã³ãã­ã¹ãã®åç
-§ï¼»NGKI2752ï¼½
+ *  コンテキストの参照［NGKI2752］
  */
 #ifdef TOPPERS_sns_ctx
@@ -472,7 +444,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®åç
-§ï¼»NGKI2754ï¼½
+ *  CPUロック状態の参照［NGKI2754］
  */
 #ifdef TOPPERS_sns_loc
@@ -492,7 +462,5 @@
 
 /*
- *  ãã£ã¹ãããç¦æ­¢ç¶æ
-ã®åç
-§ï¼»NGKI2756ï¼½
+ *  ディスパッチ禁止状態の参照［NGKI2756］
  */
 #ifdef TOPPERS_sns_dsp
@@ -512,7 +480,5 @@
 
 /*
- *  ãã£ã¹ãããä¿çç¶æ
-ã®åç
-§ï¼»NGKI2758ï¼½
+ *  ディスパッチ保留状態の参照［NGKI2758］
  */
 #ifdef TOPPERS_sns_dpn
@@ -532,7 +498,5 @@
 
 /*
- *  ã«ã¼ãã«éåä½ç¶æ
-ã®åç
-§ï¼»NGKI2760ï¼½
+ *  カーネル非動作状態の参照［NGKI2760］
  */
 #ifdef TOPPERS_sns_ker
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«
+ *		タスク管理モジュール
  */
 
@@ -68,43 +53,40 @@
 
 /*
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯
+ *  実行状態のタスク
  */
 TCB		*p_runtsk;
 
 /*
- *  å®è¡ãã¹ãã¿ã¹ã¯
+ *  実行すべきタスク
  */
 TCB		*p_schedtsk;
 
 /*
- *  ãã£ã¹ãããè¨±å¯ç¶æ
-
+ *  ディスパッチ許可状態
  */
 bool_t	enadsp;
 
 /*
- *  ã¿ã¹ã¯ãã£ã¹ãããå¯è½ç¶æ
-
+ *  タスクディスパッチ可能状態
  */
 bool_t	dspflg;
 
 /*
- *  ã¬ãã£ã­ã¥ã¼
+ *  レディキュー
  */
 QUEUE	ready_queue[TNUM_TPRI];
 
 /*
- *  ã¬ãã£ã­ã¥ã¼ãµã¼ãã®ããã®ãããããã
+ *  レディキューサーチのためのビットマップ
  */
 uint16_t	ready_primap;
 
 /*
- *  ä½¿ç¨ãã¦ããªãTCBã®ãªã¹ã
+ *  使用していないTCBのリスト
  */
 QUEUE	free_tcb;
 
 /*
- *  ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®åæå
+ *  タスク管理モジュールの初期化
  */
 void
@@ -148,23 +130,20 @@
 
 /*
- *  ãããããããµã¼ãé¢æ°
- *
- *  bitmapå
-ã®1ã®ãããã®å
-ï¼æãä¸ä½ï¼å³ï¼ã®ãã®ããµã¼ããï¼ãã®ãã
- *  ãçªå·ãè¿ãï¼ãããçªå·ã¯ï¼æä¸ä½ãããã0ã¨ããï¼bitmapã«0ãæå®
- *  ãã¦ã¯ãªããªãï¼ãã®é¢æ°ã§ã¯ï¼bitmapã16ãããã§ãããã¨ãä»®å®ãï¼
- *  uint16_tåã¨ãã¦ããï¼
- *
- *  ããããµã¼ãå½ä»¤ãæã¤ãã­ã»ããµã§ã¯ï¼ããããµã¼ãå½ä»¤ãä½¿ãããã«
- *  æ¸ãç´ããæ¹ãå¹çãè¯ãå ´åãããï¼ãã®ãããªå ´åã«ã¯ï¼ã¿ã¼ã²ãã
- *  ä¾å­é¨ã§ããããµã¼ãå½ä»¤ãä½¿ã£ãbitmap_searchãå®ç¾©ãï¼
- *  OMIT_BITMAP_SEARCHããã¯ã­å®ç¾©ããã°ããï¼ã¾ãï¼ããããµã¼ãå½ä»¤ã®
- *  ãµã¼ãæ¹åãéãªã©ã®çç±ã§åªå
-åº¦ã¨ãããã¨ã®å¯¾å¿ãå¤æ´ãããå ´åã«
- *  ã¯ï¼PRIMAP_BITããã¯ã­å®ç¾©ããã°ããï¼
- *
- *  ã¾ãï¼ã©ã¤ãã©ãªã«ffsããããªãï¼æ¬¡ã®ããã«å®ç¾©ãã¦ã©ã¤ãã©ãªé¢æ°ã
- *  ä½¿ã£ãæ¹ãå¹çãè¯ãå¯è½æ§ãããï¼
+ *  ビットマップサーチ関数
+ *
+ *  bitmap内の1のビットの内，最も下位（右）のものをサーチし，そのビッ
+ *  ト番号を返す．ビット番号は，最下位ビットを0とする．bitmapに0を指定
+ *  してはならない．この関数では，bitmapが16ビットであることを仮定し，
+ *  uint16_t型としている．
+ *
+ *  ビットサーチ命令を持つプロセッサでは，ビットサーチ命令を使うように
+ *  書き直した方が効率が良い場合がある．このような場合には，ターゲット
+ *  依存部でビットサーチ命令を使ったbitmap_searchを定義し，
+ *  OMIT_BITMAP_SEARCHをマクロ定義すればよい．また，ビットサーチ命令の
+ *  サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に
+ *  は，PRIMAP_BITをマクロ定義すればよい．
+ *
+ *  また，ライブラリにffsがあるなら，次のように定義してライブラリ関数を
+ *  使った方が効率が良い可能性もある．
  *		#define	bitmap_search(bitmap) (ffs(bitmap) - 1)
  */
@@ -198,6 +177,5 @@
 
 /*
- *  åªå
-åº¦ãããããããç©ºãã®ãã§ãã¯
+ *  優先度ビットマップが空かのチェック
  */
 Inline bool_t
@@ -208,6 +186,5 @@
 
 /*
- *  åªå
-åº¦ããããããã®ãµã¼ã
+ *  優先度ビットマップのサーチ
  */
 Inline uint_t
@@ -218,6 +195,5 @@
 
 /*
- *  åªå
-åº¦ããããããã®ã»ãã
+ *  優先度ビットマップのセット
  */
 Inline void
@@ -228,6 +204,5 @@
 
 /*
- *  åªå
-åº¦ããããããã®ã¯ãªã¢
+ *  優先度ビットマップのクリア
  */
 Inline void
@@ -238,6 +213,5 @@
 
 /*
- *  æé«åªå
-é ä½ã¿ã¹ã¯ã®ãµã¼ã
+ *  最高優先順位タスクのサーチ
  */
 #ifdef TOPPERS_tsksched
@@ -255,11 +229,8 @@
 
 /*
- *  å®è¡ã§ããç¶æ
-ã¸ã®é·ç§»
- *
- *  å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ã§ããã¿ã¹ã¯ããªãã£ãå ´åã¨ï¼
- *  p_tcbã®åªå
-åº¦ãå®è¡ãã¹ãã¿ã¹ã¯ã®åªå
-åº¦ãããé«ãå ´åã§ããï¼
+ *  実行できる状態への遷移
+ *
+ *  実行すべきタスクを更新するのは，実行できるタスクがなかった場合と，
+ *  p_tcbの優先度が実行すべきタスクの優先度よりも高い場合である．
  */
 #ifdef TOPPERS_tskrun
@@ -283,14 +254,10 @@
 
 /*
- *  å®è¡ã§ããç¶æ
-ããä»ã®ç¶æ
-ã¸ã®é·ç§»
- *
- *  å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ãå ´å
- *  ã§ããï¼p_tcbã¨åãåªå
-åº¦ã®ã¿ã¹ã¯ãä»ã«ããå ´åã¯ï¼p_tcbã®æ¬¡ã®ã¿ã¹
- *  ã¯ãå®è¡ãã¹ãã¿ã¹ã¯ã«ãªãï¼ããã§ãªãå ´åã¯ï¼ã¬ãã£ã­ã¥ã¼ããµã¼ã
- *  ããå¿
-è¦ãããï¼
+ *  実行できる状態から他の状態への遷移
+ *
+ *  実行すべきタスクを更新するのは，p_tcbが実行すべきタスクであった場合
+ *  である．p_tcbと同じ優先度のタスクが他にある場合は，p_tcbの次のタス
+ *  クが実行すべきタスクになる．そうでない場合は，レディキューをサーチ
+ *  する必要がある．
  */
 #ifdef TOPPERS_tsknrun
@@ -321,6 +288,5 @@
 
 /*
- *  ä¼æ­¢ç¶æ
-ã¸ã®é·ç§»
+ *  休止状態への遷移
  */
 #ifdef TOPPERS_tskdmt
@@ -341,7 +307,5 @@
 
 /*
- *  ä¼æ­¢ç¶æ
-ããå®è¡ã§ããç¶æ
-ã¸ã®é·ç§»
+ *  休止状態から実行できる状態への遷移
  */
 #ifdef TOPPERS_tskact
@@ -359,24 +323,14 @@
 
 /*
- *  ã¿ã¹ã¯ã®åªå
-åº¦ã®å¤æ´
- *
- *  ã¿ã¹ã¯ãå®è¡ã§ããç¶æ
-ã®å ´åã«ã¯ï¼ã¬ãã£ã­ã¥ã¼ã®ä¸­ã§ã®ä½ç½®ãå¤æ´ã
- *  ãï¼ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã®ä¸­ã§å¾
-ã¡ç¶æ
-ã«ãªã£ã¦ããå ´åã«ã¯ï¼å¾
-
- *  ã¡ã­ã¥ã¼ã®ä¸­ã§ã®ä½ç½®ãå¤æ´ããï¼
- *
- *  å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼(1) p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ã¦ï¼
- *  ãã®åªå
-åº¦ãä¸ããå ´åï¼(2) p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ã¯ãªãï¼å¤æ´å¾
- *  ã®åªå
-åº¦ãå®è¡ãã¹ãã¿ã¹ã¯ã®åªå
-åº¦ãããé«ãå ´åã§ããï¼(1)ã®å ´åã«
- *  ã¯ï¼ã¬ãã£ã­ã¥ã¼ããµã¼ãããå¿
-è¦ãããï¼
+ *  タスクの優先度の変更
+ *
+ *  タスクが実行できる状態の場合には，レディキューの中での位置を変更す
+ *  る．オブジェクトの待ちキューの中で待ち状態になっている場合には，待
+ *  ちキューの中での位置を変更する．
+ *
+ *  実行すべきタスクを更新するのは，(1) p_tcbが実行すべきタスクであって，
+ *  その優先度を下げた場合，(2) p_tcbが実行すべきタスクではなく，変更後
+ *  の優先度が実行すべきタスクの優先度よりも高い場合である．(1)の場合に
+ *  は，レディキューをサーチする必要がある．
  */
 #ifdef TOPPERS_tskpri
@@ -392,6 +346,5 @@
 	if (TSTAT_RUNNABLE(p_tcb->tstat)) {
 		/*
-		 *  ã¿ã¹ã¯ãå®è¡ã§ããç¶æ
-ã®å ´å
+		 *  タスクが実行できる状態の場合
 		 */
 		queue_delete(&(p_tcb->task_queue));
@@ -424,8 +377,6 @@
 		if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) {
 			/*
-			 *  ã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨
-			 *  åï¼WOBJCBï¼ã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªããã¦ããå ´å
+			 *  タスクが，同期・通信オブジェクトの管理ブロックの共通部
+			 *  分（WOBJCB）の待ちキューにつながれている場合
 			 */
 			wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb,
@@ -438,8 +389,8 @@
 
 /*
- *  ã¬ãã£ã­ã¥ã¼ã®åè»¢
- *
- *  å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãã¿ã¹ã¯ã­ã¥ã¼ã®æ«
- *  å°¾ã«ç§»åããå ´åã§ããï¼
+ *  レディキューの回転
+ *
+ *  実行すべきタスクを更新するのは，実行すべきタスクがタスクキューの末
+ *  尾に移動した場合である．
  */
 #ifdef TOPPERS_tskrot
@@ -464,5 +415,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®çµäºå¦ç
+ *  タスクの終了処理
  */
 #ifdef TOPPERS_tskterm
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«
+ *		タスク管理モジュール
  */
 
@@ -68,5 +53,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_TSKSTAT
@@ -75,7 +60,5 @@
 
 /*
- *  ã¿ã¹ã¯åªå
-åº¦ã®å
-é¨è¡¨ç¾ã»å¤é¨è¡¨ç¾å¤æãã¯ã­
+ *  タスク優先度の内部表現・外部表現変換マクロ
  */
 #define INT_PRIORITY(x)		((uint_t)((x) - TMIN_TPRI))
@@ -83,96 +66,43 @@
 
 /*
- *  ã¿ã¹ã¯ç¶æ
-ã®å
-é¨è¡¨ç¾
- *
- *  TCBä¸­ã®ã¿ã¹ã¯ç¶æ
-ã®ãã£ã¼ã«ãã§ã¯ï¼ã¿ã¹ã¯ã®ç¶æ
-ã¨ï¼ã¿ã¹ã¯ãå¾
-ã¡ç¶æ
-
- *  ã®æã®å¾
-ã¡è¦å ãè¡¨ãï¼ãã ãï¼å®è¡ç¶æ
-ï¼RUNNINGï¼ã¨å®è¡å¯è½ç¶æ
-
- *  ï¼READYï¼ã¯åºå¥ããï¼ä¸¡ç¶æ
-ããããã¦å®è¡ã§ããç¶æ
-ï¼RUNNABLEï¼ã¨ã
- *  ã¦ç®¡çããï¼äºéå¾
-ã¡ç¶æ
-ã¯ï¼(TS_WAITING_??? | TS_SUSPENDED)ã§è¡¨ãï¼
- *
- *  ã¿ã¹ã¯ãå¾
-ã¡ç¶æ
-ï¼äºéå¾
-ã¡ç¶æ
-ãå«ãï¼ã®æã¯ï¼TS_WAITING_???ã§å¾
-ã¡
- *  è¦å ãè¡¨ãï¼å¾
-ã¡è¦å ï¼5ãããã§è¡¨ç¾ãããï¼ã®ä¸ä½2ãããã§ï¼åæã»
- *  éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªãã£ã¦ãããã©ãããè¡¨ãï¼åæã»
- *  éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªãããªããã®ã¯ä¸ä½2ãããã00ï¼å
- *  æã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼ã®å¾
-ã¡ã­ã¥ã¼
- *  ã«ã¤ãªãããã®ã¯10ã¾ãã¯11ï¼ããä»¥å¤ã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªãããã®ã¯01
- *  ã¨ããï¼
- */
-#define TS_DORMANT		0x00U			/* ä¼æ­¢ç¶æ
- */
-#define TS_RUNNABLE		0x01U			/* å®è¡ã§ããç¶æ
- */
-#define TS_SUSPENDED	0x02U			/* å¼·å¶å¾
-ã¡ç¶æ
- */
-
-#define TS_WAITING_SLP	(0x01U << 2)	/* èµ·åºå¾
-ã¡ */
-#define TS_WAITING_DLY	(0x02U << 2)	/* æéçµéå¾
-ã¡ */
-#define TS_WAITING_RDTQ	(0x08U << 2)	/* ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡å¾
-ã¡ */
-#define TS_WAITING_RPDQ	(0x09U << 2)	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡å¾
-ã¡ */
-#define TS_WAITING_SEM	(0x10U << 2)	/* ã»ããã©è³æºã®ç²å¾å¾
-ã¡ */
-#define TS_WAITING_FLG	(0x11U << 2)	/* ã¤ãã³ããã©ã°å¾
-ã¡ */
-#define TS_WAITING_SDTQ	(0x12U << 2)	/* ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡å¾
-ã¡ */
-#define TS_WAITING_SPDQ	(0x13U << 2)	/* åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡å¾
-ã¡ */
-#define TS_WAITING_MTX	(0x14U << 2)	/* ãã¥ã¼ããã¯ã¹ã®ã­ãã¯å¾
-ã¡ */
-#define TS_WAITING_MPF	(0x15U << 2)	/* åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾å¾
-ã¡ */
-
-#define TS_WAITING_MASK	(0x1fU << 2)	/* å¾
-ã¡ç¶æ
-ã®å¤å¥ç¨ãã¹ã¯ */
-
-/*
- *  ã¿ã¹ã¯ç¶æ
-å¤å¥ãã¯ã­
- *
- *  TSTAT_DORMANTã¯ã¿ã¹ã¯ãä¼æ­¢ç¶æ
-ã§ãããã©ãããï¼TSTAT_RUNNABLEã¯
- *  ã¿ã¹ã¯ãå®è¡ã§ããç¶æ
-ã§ãããã©ãããå¤å¥ããï¼TSTAT_WAITINGã¯å¾
-
- *  ã¡ç¶æ
-ã¨äºéå¾
-ã¡ç¶æ
-ã®ããããã§ãããã©ãããï¼TSTAT_SUSPENDEDã¯
- *  å¼·å¶å¾
-ã¡ç¶æ
-ã¨äºéå¾
-ã¡ç¶æ
-ã®ããããã§ãããã©ãããå¤å¥ããï¼
+ *  タスク状態の内部表現
+ *
+ *  TCB中のタスク状態のフィールドでは，タスクの状態と，タスクが待ち状態
+ *  の時の待ち要因を表す．ただし，実行状態（RUNNING）と実行可能状態
+ *  （READY）は区別せず，両状態をあわせて実行できる状態（RUNNABLE）とし
+ *  て管理する．二重待ち状態は，(TS_WAITING_??? | TS_SUSPENDED)で表す．
+ *
+ *  タスクが待ち状態（二重待ち状態を含む）の時は，TS_WAITING_???で待ち
+ *  要因を表す．待ち要因（5ビットで表現される）の上位2ビットで，同期・
+ *  通信オブジェクトの待ちキューにつながっているかどうかを表す．同期・
+ *  通信オブジェクトの待ちキューにつながらないものは上位2ビットを00，同
+ *  期・通信オブジェクトの管理ブロックの共通部分（WOBJCB）の待ちキュー
+ *  につながるものは10または11，それ以外の待ちキューにつながるものは01
+ *  とする．
+ */
+#define TS_DORMANT		0x00U			/* 休止状態 */
+#define TS_RUNNABLE		0x01U			/* 実行できる状態 */
+#define TS_SUSPENDED	0x02U			/* 強制待ち状態 */
+
+#define TS_WAITING_SLP	(0x01U << 2)	/* 起床待ち */
+#define TS_WAITING_DLY	(0x02U << 2)	/* 時間経過待ち */
+#define TS_WAITING_RDTQ	(0x08U << 2)	/* データキューからの受信待ち */
+#define TS_WAITING_RPDQ	(0x09U << 2)	/* 優先度データキューからの受信待ち */
+#define TS_WAITING_SEM	(0x10U << 2)	/* セマフォ資源の獲得待ち */
+#define TS_WAITING_FLG	(0x11U << 2)	/* イベントフラグ待ち */
+#define TS_WAITING_SDTQ	(0x12U << 2)	/* データキューへの送信待ち */
+#define TS_WAITING_SPDQ	(0x13U << 2)	/* 優先度データキューへの送信待ち */
+#define TS_WAITING_MTX	(0x14U << 2)	/* ミューテックスのロック待ち */
+#define TS_WAITING_MPF	(0x15U << 2)	/* 固定長メモリブロックの獲得待ち */
+
+#define TS_WAITING_MASK	(0x1fU << 2)	/* 待ち状態の判別用マスク */
+
+/*
+ *  タスク状態判別マクロ
+ *
+ *  TSTAT_DORMANTはタスクが休止状態であるかどうかを，TSTAT_RUNNABLEは
+ *  タスクが実行できる状態であるかどうかを判別する．TSTAT_WAITINGは待
+ *  ち状態と二重待ち状態のいずれかであるかどうかを，TSTAT_SUSPENDEDは
+ *  強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する．
  */
 #define TSTAT_DORMANT(tstat)	((tstat) == TS_DORMANT)
@@ -182,21 +112,14 @@
 
 /*
- *  ã¿ã¹ã¯å¾
-ã¡è¦å å¤å¥ãã¯ã­
- *
- *  TSTAT_WAIT_SLPã¯ã¿ã¹ã¯ãèµ·åºå¾
-ã¡ã§ãããã©ãããï¼TSTAT_WAIT_MTXã¯
- *  ã¿ã¹ã¯ããã¥ã¼ããã¯ã¹å¾
-ã¡ã§ãããã©ãããå¤å¥ããï¼
- *
- *  ã¾ãï¼TSTAT_WAIT_WOBJ ã¯ã¿ã¹ã¯ãåæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡
- *  ã§ãããï¼è¨ãæããã¨ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªã
- *  ãã¦ãããï¼ã©ãããï¼TSTAT_WAIT_WOBJCBã¯ã¿ã¹ã¯ãåæã»éä¿¡ãªãã¸ã§
- *  ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åï¼WOBJCBï¼ã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªããã¦ãã
- *  ãã©ãããå¤å¥ããï¼
+ *  タスク待ち要因判別マクロ
+ *
+ *  TSTAT_WAIT_SLPはタスクが起床待ちであるかどうかを，TSTAT_WAIT_MTXは
+ *  タスクがミューテックス待ちであるかどうかを判別する．
+ *
+ *  また，TSTAT_WAIT_WOBJ はタスクが同期・通信オブジェクトに対する待ち
+ *  であるか（言い換えると，同期・通信オブジェクトの待ちキューにつなが
+ *  れているか）どうかを，TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェ
+ *  クトの管理ブロックの共通部分（WOBJCB）の待ちキューにつながれている
+ *  かどうかを判別する．
  */
 #define TSTAT_WAIT_SLP(tstat)	(((tstat) & ~TS_SUSPENDED) == TS_WAITING_SLP)
@@ -207,319 +130,201 @@
 
 /*
- *  å¾
-ã¡æ
-å ±ãã­ãã¯ï¼WINFOï¼ã®å®ç¾©
- *
- *  ã¿ã¹ã¯ãå¾
-ã¡ç¶æ
-ã®éã¯ï¼TCBããã³ãã®p_winfoã§æãããWINFOãæ¬¡ã®
- *  ããã«è¨­å®ããªããã°ãªããªãï¼
- *
- *  (a) TCBã®ã¿ã¹ã¯ç¶æ
-ãå¾
-ã¡ç¶æ
-ï¼TS_WAITING_???ï¼ã«ããï¼
- *
- *  (b) ã¿ã¤ã ã¢ã¦ããç£è¦ããããã«ï¼ã¿ã¤ã ã¤ãã³ããã­ãã¯ãç»é²ããï¼
- *  ç»é²ããã¿ã¤ã ã¤ãã³ããã­ãã¯ã¯ï¼å¾
-ã¡ã«å
-¥ããµã¼ãã¹ã³ã¼ã«å¦çé¢æ°
- *  ã®ã­ã¼ã«ã«å¤æ°ã¨ãã¦ç¢ºä¿ãï¼ããã¸ã®ãã¤ã³ã¿ãWINFOã®p_tmevtbã«è¨
- *  æ¶ããï¼ã¿ã¤ã ã¢ã¦ãã®ç£è¦ãå¿
-è¦ãªãå ´åï¼æ°¸ä¹
-å¾
-ã¡ã®å ´åï¼ã«ã¯ï¼
- *  p_tmevtbãNULLã«ããï¼
- *
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡ç¶æ
-ã®å ´åã«ã¯ï¼æ¨æºã®WINFOã«
- *  p_wobjcbãã£ã¼ã«ããè¿½å ããæ§é ä½ï¼WINFO_WOBJï¼wait.hã§å®ç¾©ï¼ã«ï¼
- *  å¾
-ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã«ä¾å­ãã¦è¨æ¶ãããã¨ãå¿
-è¦ãªæ
-å ±
- *  ã®ããã®ãã£ã¼ã«ããè¿½å ããæ§é ä½ï¼WINFO_???ï¼ãå®ç¾©ãï¼WINFOã®ä»£
- *  ããã«ç¨ããï¼ã¾ãï¼ä»¥ä¸ã®(c)ï½(e)ã®è¨­å®ãè¡ãå¿
-è¦ãããï¼åæã»é
- *  ä¿¡ãªãã¸ã§ã¯ãã«é¢ä¿ããªãå¾
-ã¡ï¼èµ·åºå¾
-ã¡ï¼æéçµéå¾
-ã¡ï¼ã®å ´åã«ã¯ï¼
- *  ãããã¯å¿
-è¦ãªãï¼
- *
- *  (c) TCBãå¾
-ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªãï¼å¾
-
- *  ã¡ã­ã¥ã¼ã«ã¤ãªãããã«ï¼task_queueãä½¿ãï¼
- *
- *  (d) å¾
-ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã¸ã®ãã¤ã³ã¿ãï¼
- *  WINFO_WOBJã®p_wobjcbã«è¨æ¶ããï¼
- *
- *  (e) å¾
-ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã«ä¾å­ãã¦è¨æ¶ãããã¨ãå¿
-è¦ãª
- *  æ
-å ±ãããå ´åã«ã¯ï¼WINFO_???å
-ã®ãã£ã¼ã«ãã«è¨æ¶ããï¼
- *
- *  å¾
-ã¡ç¶æ
-ãè§£é¤ããéã«ã¯ï¼å¾
-ã¡è§£é¤ããã¿ã¹ã¯ã«å¯¾ããè¿å¤ãWINFOã®
- *  wercdã«è¨­å®ããï¼wercdãå¿
-è¦ãªã®ã¯å¾
-ã¡è§£é¤ä»¥éã§ããã®ã«å¯¾ãã¦ï¼
- *  p_tmevtbã¯å¾
-ã¡è§£é¤å¾ã¯å¿
-è¦ãªãããï¼ã¡ã¢ãªç¯ç´ã®ããã«å
-±ç¨ä½ãä½¿ã£
- *  ã¦ããï¼ãã®ããï¼wercdã¸ã¨ã©ã¼ã³ã¼ããè¨­å®ããã®ã¯ï¼ã¿ã¤ã ã¤ãã³ã
- *  ãã­ãã¯ãç»é²è§£é¤ããå¾ã«ããªããã°ãªããªãï¼
+ *  待ち情報ブロック（WINFO）の定義
+ *
+ *  タスクが待ち状態の間は，TCBおよびそのp_winfoで指されるWINFOを次の
+ *  ように設定しなければならない．
+ *
+ *  (a) TCBのタスク状態を待ち状態（TS_WAITING_???）にする．
+ *
+ *  (b) タイムアウトを監視するために，タイムイベントブロックを登録する．
+ *  登録するタイムイベントブロックは，待ちに入るサービスコール処理関数
+ *  のローカル変数として確保し，それへのポインタをWINFOのp_tmevtbに記
+ *  憶する．タイムアウトの監視が必要ない場合（永久待ちの場合）には，
+ *  p_tmevtbをNULLにする．
+ *
+ *  同期・通信オブジェクトに対する待ち状態の場合には，標準のWINFOに
+ *  p_wobjcbフィールドを追加した構造体（WINFO_WOBJ，wait.hで定義）に，
+ *  待ち対象の同期・通信オブジェクトに依存して記憶することが必要な情報
+ *  のためのフィールドを追加した構造体（WINFO_???）を定義し，WINFOの代
+ *  わりに用いる．また，以下の(c)～(e)の設定を行う必要がある．同期・通
+ *  信オブジェクトに関係しない待ち（起床待ち，時間経過待ち）の場合には，
+ *  これらは必要ない．
+ *
+ *  (c) TCBを待ち対象の同期・通信オブジェクトの待ちキューにつなぐ．待
+ *  ちキューにつなぐために，task_queueを使う．
+ *
+ *  (d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを，
+ *  WINFO_WOBJのp_wobjcbに記憶する．
+ *
+ *  (e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な
+ *  情報がある場合には，WINFO_???内のフィールドに記憶する．
+ *
+ *  待ち状態を解除する際には，待ち解除したタスクに対する返値をWINFOの
+ *  wercdに設定する．wercdが必要なのは待ち解除以降であるのに対して，
+ *  p_tmevtbは待ち解除後は必要ないため，メモリ節約のために共用体を使っ
+ *  ている．そのため，wercdへエラーコードを設定するのは，タイムイベント
+ *  ブロックを登録解除した後にしなければならない．
  */
 typedef union waiting_information {
-	ER		wercd;			/* å¾
-ã¡è§£é¤æã®ã¨ã©ã¼ã³ã¼ã */
-	TMEVTB	*p_tmevtb;		/* å¾
-ã¡ç¶æ
-ç¨ã®ã¿ã¤ã ã¤ãã³ããã­ãã¯ */
+	ER		wercd;			/* 待ち解除時のエラーコード */
+	TMEVTB	*p_tmevtb;		/* 待ち状態用のタイムイベントブロック */
 } WINFO;
 
 /*
- *  ãã¥ã¼ããã¯ã¹ç®¡çãã­ãã¯ã®åã®åæ¹åç
-§
+ *  ミューテックス管理ブロックの型の前方参照
  */
 typedef struct mutex_control_block MTXCB;
 
 /*
- *  ã¿ã¹ã¯åæåãã­ãã¯
- *
- *  ã¿ã¹ã¯ã«é¢ããæ
-å ±ãï¼å¤ãå¤ãããªãããã«ROMã«ç½®ããé¨åï¼ã¿ã¹ã¯
- *  åæåãã­ãã¯ï¼ã¨ï¼å¤ãå¤åããããã«RAMã«ç½®ããªããã°ãªããªãé¨
- *  åï¼ã¿ã¹ã¯ç®¡çãã­ãã¯ï¼TCBï¼ã«åé¢ãï¼TCBå
-ã«å¯¾å¿ããã¿ã¹ã¯åæå
- *  ãã­ãã¯ãæããã¤ã³ã¿ãå
-¥ããï¼ã¿ã¹ã¯åæåãã­ãã¯å
-ã«å¯¾å¿ãã
- *  TCBãæããã¤ã³ã¿ãå
-¥ããæ¹æ³ã®æ¹ãï¼RAMã®ç¯ç´ã®è¦³ç¹ããã¯æã¾ãã
- *  ãï¼å®è¡å¹çãæªããªãããã«æ¡ç¨ãã¦ããªãï¼ä»ã®ãªãã¸ã§ã¯ãã«ã¤ã
- *  ã¦ãåæ§ã«æ±ãï¼
- *
- *  ã¿ã¹ã¯åæåãã­ãã¯ã«ã¯ï¼DEF_TEXã§å®ç¾©ãããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ã
- *  ã³ã«é¢ããæ
-å ±ãå«ãï¼
+ *  タスク初期化ブロック
+ *
+ *  タスクに関する情報を，値が変わらないためにROMに置ける部分（タスク
+ *  初期化ブロック）と，値が変化するためにRAMに置かなければならない部
+ *  分（タスク管理ブロック，TCB）に分離し，TCB内に対応するタスク初期化
+ *  ブロックを指すポインタを入れる．タスク初期化ブロック内に対応する
+ *  TCBを指すポインタを入れる方法の方が，RAMの節約の観点からは望ましい
+ *  が，実行効率が悪くなるために採用していない．他のオブジェクトについ
+ *  ても同様に扱う．
+ *
+ *  タスク初期化ブロックには，DEF_TEXで定義されるタスク例外処理ルーチ
+ *  ンに関する情報も含む．
  */
 typedef struct task_initialization_block {
-	ATR			tskatr;			/* ã¿ã¹ã¯å±æ§ */
-	intptr_t	exinf;			/* ã¿ã¹ã¯ã®æ¡å¼µæ
-å ± */
-	TASK		task;			/* ã¿ã¹ã¯ã®èµ·åçªå° */
-	uint_t		ipriority;		/* ã¿ã¹ã¯ã®èµ·åæåªå
-åº¦ï¼å
-é¨è¡¨ç¾ï¼ */
+	ATR			tskatr;			/* タスク属性 */
+	intptr_t	exinf;			/* タスクの拡張情報 */
+	TASK		task;			/* タスクの起動番地 */
+	uint_t		ipriority;		/* タスクの起動時優先度（内部表現） */
 
 #ifdef USE_TSKINICTXB
-	TSKINICTXB	tskinictxb;		/* ã¿ã¹ã¯åæåã³ã³ãã­ã¹ããã­ãã¯ */
+	TSKINICTXB	tskinictxb;		/* タスク初期化コンテキストブロック */
 #else /* USE_TSKINICTXB */
-	size_t		stksz;			/* ã¹ã¿ãã¯é åã®ãµã¤ãºï¼ä¸¸ããå¤ï¼ */
-	void		*stk;			/* ã¹ã¿ãã¯é åã®å
-é ­çªå° */
+	size_t		stksz;			/* スタック領域のサイズ（丸めた値） */
+	void		*stk;			/* スタック領域の先頭番地 */
 #endif /* USE_TSKINICTXB */
 } TINIB;
 
 /*
- *  ã¿ã¹ã¯ç®¡çãã­ãã¯ï¼TCBï¼
- *
- *  ASPã«ã¼ãã«ã§ã¯ï¼ã¿ã¹ã¯ã®èµ·åè¦æ±ã­ã¥ã¼ã¤ã³ã°æ°ã®æå¤§å¤ï¼TMAX_ACTCNTï¼
- *  ã¨èµ·åºè¦æ±ã­ã¥ã¼ã¤ã³ã°æ°ã®æå¤§å¤ï¼TMAX_WUPCNTï¼ã¯1ã«åºå®ããã¦ãã
- *  ããï¼ã­ã¥ã¼ã¤ã³ã°ããã¦ãããã©ããã®çå½å¤ã§è¡¨ç¾ãããã¨ãã§ããï¼
- *  ã¾ãï¼å¼·å¶å¾
-ã¡è¦æ±ãã¹ãæ°ã®æå¤§å¤ï¼TMAX_SUSCNTï¼ã1ã«åºå®ããã¦ã
- *  ãã®ã§ï¼å¼·å¶å¾
-ã¡è¦æ±ãã¹ãæ°ï¼suscntï¼ã¯å¿
-è¦ãªãï¼
- *
- *  TCBã®ããã¤ãã®ãã£ã¼ã«ãã¯ï¼ç¹å®ã®ã¿ã¹ã¯ç¶æ
-ã§ã®ã¿æå¹ãªå¤ãä¿æãï¼
- *  ããä»¥å¤ã®å ´åã¯å¤ãä¿è¨¼ãããªãï¼ãã£ã¦ï¼åç
-§ãã¦ã¯ãªããªãï¼ï¼å
- *  ãã£ã¼ã«ããæå¹ãªå¤ãä¿æããæ¡ä»¶ã¯æ¬¡ã®éãï¼
- *
- *  ã»åæåå¾ã¯å¸¸ã«æå¹ï¼
- *  		p_tinibï¼tstatï¼actque
- *  ã»ä¼æ­¢ç¶æ
-ä»¥å¤ã§æå¹ï¼ä¼æ­¢ç¶æ
-ã§ã¯åæå¤ã«ãªã£ã¦ããï¼ï¼
- *  		bpriorityï¼priorityï¼wupqueï¼rasterï¼enaterï¼p_lastmtx
- *  ã»å¾
-ã¡ç¶æ
-ï¼äºéå¾
-ã¡ç¶æ
-ãå«ãï¼ã§æå¹ï¼
+ *  タスク管理ブロック（TCB）
+ *
+ *  ASPカーネルでは，タスクの起動要求キューイング数の最大値（TMAX_ACTCNT）
+ *  と起床要求キューイング数の最大値（TMAX_WUPCNT）は1に固定されている
+ *  ため，キューイングされているかどうかの真偽値で表現することができる．
+ *  また，強制待ち要求ネスト数の最大値（TMAX_SUSCNT）が1に固定されてい
+ *  るので，強制待ち要求ネスト数（suscnt）は必要ない．
+ *
+ *  TCBのいくつかのフィールドは，特定のタスク状態でのみ有効な値を保持し，
+ *  それ以外の場合は値が保証されない（よって，参照してはならない）．各
+ *  フィールドが有効な値を保持する条件は次の通り．
+ *
+ *  ・初期化後は常に有効：
+ *  		p_tinib，tstat，actque
+ *  ・休止状態以外で有効（休止状態では初期値になっている）：
+ *  		bpriority，priority，wupque，raster，enater，p_lastmtx
+ *  ・待ち状態（二重待ち状態を含む）で有効：
  *  		p_winfo
- *  ã»å®è¡ã§ããç¶æ
-ã¨åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡ç¶æ
-ã§æå¹ï¼
+ *  ・実行できる状態と同期・通信オブジェクトに対する待ち状態で有効：
  *  		task_queue
- *  ã»å®è¡å¯è½ç¶æ
-ï¼å¾
-ã¡ç¶æ
-ï¼å¼·å¶å¾
-ã¡ç¶æ
-ï¼äºéå¾
-ã¡ç¶æ
-ã§æå¹ï¼
+ *  ・実行可能状態，待ち状態，強制待ち状態，二重待ち状態で有効：
  *  		tskctxb
  */
 typedef struct task_control_block {
-	QUEUE			task_queue;		/* ã¿ã¹ã¯ã­ã¥ã¼ */
-	const TINIB		*p_tinib;		/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
+	QUEUE			task_queue;		/* タスクキュー */
+	const TINIB		*p_tinib;		/* 初期化ブロックへのポインタ */
 
 #ifdef UINT8_MAX
-	uint8_t			tstat;			/* ã¿ã¹ã¯ç¶æ
-ï¼å
-é¨è¡¨ç¾ï¼*/
-	uint8_t			bpriority;		/* ãã¼ã¹åªå
-åº¦ï¼å
-é¨è¡¨ç¾ï¼*/
-	uint8_t			priority;		/* ç¾å¨ã®åªå
-åº¦ï¼å
-é¨è¡¨ç¾ï¼*/
+	uint8_t			tstat;			/* タスク状態（内部表現）*/
+	uint8_t			bpriority;		/* ベース優先度（内部表現）*/
+	uint8_t			priority;		/* 現在の優先度（内部表現）*/
 #else /* UINT8_MAX */
-	BIT_FIELD_UINT	tstat : 8;		/* ã¿ã¹ã¯ç¶æ
-ï¼å
-é¨è¡¨ç¾ï¼*/
-	BIT_FIELD_UINT	bpriority : 8;	/* ãã¼ã¹åªå
-åº¦ï¼å
-é¨è¡¨ç¾ï¼*/
-	BIT_FIELD_UINT	priority : 8	/* ç¾å¨ã®åªå
-åº¦ï¼å
-é¨è¡¨ç¾ï¼*/;
+	BIT_FIELD_UINT	tstat : 8;		/* タスク状態（内部表現）*/
+	BIT_FIELD_UINT	bpriority : 8;	/* ベース優先度（内部表現）*/
+	BIT_FIELD_UINT	priority : 8	/* 現在の優先度（内部表現）*/;
 #endif /* UINT8_MAX */
-	BIT_FIELD_BOOL	actque : 1;		/* èµ·åè¦æ±ã­ã¥ã¼ã¤ã³ã° */
-	BIT_FIELD_BOOL	wupque : 1;		/* èµ·åºè¦æ±ã­ã¥ã¼ã¤ã³ã° */
-	BIT_FIELD_BOOL	raster : 1;		/* ã¿ã¹ã¯çµäºè¦æ±ç¶æ
- */
-	BIT_FIELD_BOOL	enater : 1;		/* ã¿ã¹ã¯çµäºè¨±å¯ç¶æ
- */
-
-	WINFO			*p_winfo;		/* å¾
-ã¡æ
-å ±ãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
-	MTXCB			*p_lastmtx;		/* æå¾ã«ã­ãã¯ãããã¥ã¼ããã¯ã¹ */
-	TSKCTXB			tskctxb;		/* ã¿ã¹ã¯ã³ã³ãã­ã¹ããã­ãã¯ */
+	BIT_FIELD_BOOL	actque : 1;		/* 起動要求キューイング */
+	BIT_FIELD_BOOL	wupque : 1;		/* 起床要求キューイング */
+	BIT_FIELD_BOOL	raster : 1;		/* タスク終了要求状態 */
+	BIT_FIELD_BOOL	enater : 1;		/* タスク終了許可状態 */
+
+	WINFO			*p_winfo;		/* 待ち情報ブロックへのポインタ */
+	MTXCB			*p_lastmtx;		/* 最後にロックしたミューテックス */
+	TSKCTXB			tskctxb;		/* タスクコンテキストブロック */
 } TCB;
 
 /*
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯
- *
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯ï¼ï¼ãã­ã»ããµãã³ã³ãã­ã¹ããæã£ã¦ããã¿ã¹ã¯ï¼ã®
- *  TCBãæããã¤ã³ã¿ï¼å®è¡ç¶æ
-ã®ã¿ã¹ã¯ããªãå ´åã¯NULLã«ããï¼
- *
- *  ãµã¼ãã¹ã³ã¼ã«ã®å¦çä¸­ã§ï¼èªã¿ã¹ã¯ï¼ãµã¼ãã¹ã³ã¼ã«ãå¼ã³åºããã¿ã¹
- *  ã¯ï¼ã«é¢ããæ
-å ±ãåç
-§ããå ´åã¯p_runtskãä½¿ãï¼p_runtskãæ¸ãæã
- *  ãã®ã¯ï¼ãã£ã¹ãããã£ï¼ã¨åæåå¦çï¼ã®ã¿ã§ããï¼
+ *  実行状態のタスク
+ *
+ *  実行状態のタスク（＝プロセッサがコンテキストを持っているタスク）の
+ *  TCBを指すポインタ．実行状態のタスクがない場合はNULLにする．
+ *
+ *  サービスコールの処理中で，自タスク（サービスコールを呼び出したタス
+ *  ク）に関する情報を参照する場合はp_runtskを使う．p_runtskを書き換え
+ *  るのは，ディスパッチャ（と初期化処理）のみである．
  */
 extern TCB	*p_runtsk;
 
 /*
- *  å®è¡ãã¹ãã¿ã¹ã¯
- *
- *  å®è¡ãã¹ãã¿ã¹ã¯ã®TCBãæããã¤ã³ã¿ï¼å®è¡ã§ããã¿ã¹ã¯ããªãå ´åã¯
- *  NULLã«ããï¼
- *
- *  p_runtskã¯ï¼éå¸¸ã¯p_schedtskã¨ä¸è´ãã¦ãããï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ã
- *  å®è¡ä¸­ã¯ï¼ä¸è´ãã¦ããã¨ã¯éããªãï¼å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ã§ãªã
- *  ç¶æ
-ã®éã¨ãã£ã¹ãããç¦æ­¢ç¶æ
-ã®éï¼ããªãã¡ï¼dspflgãfalseã§ããéï¼
- *  ã¯ï¼p_schedtskãæ´æ°ããªãï¼
+ *  実行すべきタスク
+ *
+ *  実行すべきタスクのTCBを指すポインタ．実行できるタスクがない場合は
+ *  NULLにする．
+ *
+ *  p_runtskは，通常はp_schedtskと一致しているが，非タスクコンテキスト
+ *  実行中は，一致しているとは限らない．割込み優先度マスク全解除でない
+ *  状態の間とディスパッチ禁止状態の間（すなわち，dspflgがfalseである間）
+ *  は，p_schedtskを更新しない．
  */
 extern TCB	*p_schedtsk;
 
 /*
- *  ãã£ã¹ãããè¨±å¯ç¶æ
-
- *
- *  ãã£ã¹ãããè¨±å¯ç¶æ
-ã§ãããã¨ãç¤ºããã©ã°ï¼
+ *  ディスパッチ許可状態
+ *
+ *  ディスパッチ許可状態であることを示すフラグ．
  */
 extern bool_t	enadsp;
 
 /*
- *  ã¿ã¹ã¯ãã£ã¹ãããå¯è½ç¶æ
-
- *
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯å
-¨è§£é¤ç¶æ
-ã§ããï¼ãã£ã¹ãããè¨±å¯ç¶æ
-ã§ããï¼ãã£
- *  ã¹ãããç¦æ­¢ç¶æ
-ã§ãªãï¼ãã¨ãç¤ºããã©ã°ï¼ãã£ã¹ãããä¿çç¶æ
-ã§ãª
- *  ããã¨ã¯ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãå®è¡ä¸­ã§ï¼CPUã­ãã¯ç¶æ
-ã§ãªãï¼dspflgã
- *  trueã§ãããã¨ã§å¤å¥ãããã¨ãã§ããï¼
+ *  タスクディスパッチ可能状態
+ *
+ *  割込み優先度マスク全解除状態であり，ディスパッチ許可状態である（ディ
+ *  スパッチ禁止状態でない）ことを示すフラグ．ディスパッチ保留状態でな
+ *  いことは，タスクコンテキスト実行中で，CPUロック状態でなく，dspflgが
+ *  trueであることで判別することができる．
  */
 extern bool_t	dspflg;
 
 /*
- *  ã¬ãã£ã­ã¥ã¼
- *
- *  ã¬ãã£ã­ã¥ã¼ã¯ï¼å®è¡ã§ããç¶æ
-ã®ã¿ã¹ã¯ãç®¡çããããã®ã­ã¥ã¼ã§ããï¼
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯ãç®¡çãã¦ããããï¼ã¬ãã£ï¼å®è¡å¯è½ï¼ã­ã¥ã¼ã¨ãã
- *  åç§°ã¯æ­£ç¢ºã§ã¯ãªããï¼ã¬ãã£ã­ã¥ã¼ã¨ããåç§°ãå®çãã¦ããããï¼ã
- *  ã®åç§°ã§å¼ã¶ãã¨ã«ããï¼
- *
- *  ã¬ãã£ã­ã¥ã¼ã¯ï¼åªå
-åº¦ãã¨ã®ã¿ã¹ã¯ã­ã¥ã¼ã§æ§æããã¦ããï¼ã¿ã¹ã¯ã®
- *  TCBã¯ï¼è©²å½ããåªå
-åº¦ã®ã­ã¥ã¼ã«ç»é²ãããï¼
+ *  レディキュー
+ *
+ *  レディキューは，実行できる状態のタスクを管理するためのキューである．
+ *  実行状態のタスクも管理しているため，レディ（実行可能）キューという
+ *  名称は正確ではないが，レディキューという名称が定着しているため，こ
+ *  の名称で呼ぶことにする．
+ *
+ *  レディキューは，優先度ごとのタスクキューで構成されている．タスクの
+ *  TCBは，該当する優先度のキューに登録される．
  */
 extern QUEUE	ready_queue[TNUM_TPRI];
 
 /*
- *  ã¬ãã£ã­ã¥ã¼ãµã¼ãã®ããã®ãããããã
- *
- *  ã¬ãã£ã­ã¥ã¼ã®ãµã¼ããå¹çããè¡ãããã«ï¼åªå
-åº¦ãã¨ã®ã¿ã¹ã¯ã­ã¥ã¼
- *  ã«ã¿ã¹ã¯ãå
-¥ã£ã¦ãããã©ãããç¤ºããããããããç¨æãã¦ããï¼ãã
- *  ãããããä½¿ããã¨ã§ï¼ã¡ã¢ãªã¢ã¯ã»ã¹ã®åæ°ãæ¸ãããã¨ãã§ãããï¼
- *  ãããæä½å½ä»¤ãå
-
-å®ãã¦ããªããã­ã»ããµã§ï¼åªå
-åº¦ã®æ®µéæ°ãå°ãªã
- *  å ´åã«ã¯ï¼ããããããæä½ã®ãªã¼ãã¼ãããã®ããã«ï¼éã«å¹çãè½ã¡
- *  ãå¯è½æ§ãããï¼
- *
- *  åªå
-åº¦ã16æ®µéã§ãããã¨ãä»®å®ãã¦ããããï¼uint16_tåã¨ãã¦ããï¼
+ *  レディキューサーチのためのビットマップ
+ *
+ *  レディキューのサーチを効率よく行うために，優先度ごとのタスクキュー
+ *  にタスクが入っているかどうかを示すビットマップを用意している．ビッ
+ *  トマップを使うことで，メモリアクセスの回数を減らすことができるが，
+ *  ビット操作命令が充実していないプロセッサで，優先度の段階数が少ない
+ *  場合には，ビットマップ操作のオーバーヘッドのために，逆に効率が落ち
+ *  る可能性もある．
+ *
+ *  優先度が16段階であることを仮定しているため，uint16_t型としている．
  */
 extern uint16_t	ready_primap;
 
 /*
- *  ä½¿ç¨ãã¦ããªãTCBã®ãªã¹ã
+ *  使用していないTCBのリスト
  */
 extern QUEUE	free_tcb;
 
 /*
- *  ã¿ã¹ã¯IDã®æå¤§å¤ï¼kernel_cfg.cï¼
+ *  タスクIDの最大値（kernel_cfg.c）
  */
 extern const ID	tmax_tskid;
@@ -527,5 +332,5 @@
 
 /*
- *  ã¿ã¹ã¯åæåãã­ãã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  タスク初期化ブロックのエリア（kernel_cfg.c）
  */
 extern const TINIB	tinib_table[];
@@ -533,15 +338,15 @@
 
 /*
- *  ã¿ã¹ã¯çæé åºãã¼ãã«ï¼kernel_cfg.cï¼
+ *  タスク生成順序テーブル（kernel_cfg.c）
  */
 extern const ID	torder_table[];
 
 /*
- *  TCBã®ã¨ãªã¢ï¼kernel_cfg.cï¼
+ *  TCBのエリア（kernel_cfg.c）
  */
 extern TCB	tcb_table[];
 
 /*
- *  ã¿ã¹ã¯ã®æ°
+ *  タスクの数
  */
 #define tnum_tsk	((uint_t)(tmax_tskid - TMIN_TSKID + 1))
@@ -549,5 +354,5 @@
 
 /*
- *  ã¿ã¹ã¯IDããTCBãåãåºãããã®ãã¯ã­
+ *  タスクIDからTCBを取り出すためのマクロ
  */
 #define INDEX_TSK(tskid)	((uint_t)((tskid) - TMIN_TSKID))
@@ -555,103 +360,79 @@
 
 /*
- *  TCBããã¿ã¹ã¯IDãåãåºãããã®ãã¯ã­
+ *  TCBからタスクIDを取り出すためのマクロ
  */
 #define	TSKID(p_tcb)	((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
 
 /*
- *  ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®åæå
+ *  タスク管理モジュールの初期化
  */
 extern void	initialize_task(void);
 
 /*
- *  æé«åªå
-é ä½ã¿ã¹ã¯ã®ãµã¼ã
- *
- *  ã¬ãã£ã­ã¥ã¼ä¸­ã®æé«åªå
-é ä½ã®ã¿ã¹ã¯ããµã¼ããï¼ãã®TCBã¸ã®ãã¤ã³ã¿
- *  ãè¿ãï¼ã¬ãã£ã­ã¥ã¼ãç©ºã®å ´åã«ã¯ï¼ãã®é¢æ°ãå¼ã³åºãã¦ã¯ãªããªãï¼
+ *  最高優先順位タスクのサーチ
+ *
+ *  レディキュー中の最高優先順位のタスクをサーチし，そのTCBへのポインタ
+ *  を返す．レディキューが空の場合には，この関数を呼び出してはならない．
  */
 extern TCB	*search_schedtsk(void);
 
 /*
- *  å®è¡ã§ããç¶æ
-ã¸ã®é·ç§»
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãã¬ãã£ã­ã¥ã¼ã«æ¿å
-¥ããï¼ã¬ãã£ã­ã¥ã¼ã«æ¿å
-¥
- *  ããã¿ã¹ã¯ã®åªå
-åº¦ãï¼å®è¡ãã¹ãã¿ã¹ã¯ã®åªå
-åº¦ãããé«ãå ´åã¯ï¼å®
- *  è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããï¼
+ *  実行できる状態への遷移
+ *
+ *  p_tcbで指定されるタスクをレディキューに挿入する．レディキューに挿入
+ *  したタスクの優先度が，実行すべきタスクの優先度よりも高い場合は，実
+ *  行すべきタスクを更新する．
  */
 extern void	make_runnable(TCB *p_tcb);
 
 /*
- *  å®è¡ã§ããç¶æ
-ããä»ã®ç¶æ
-ã¸ã®é·ç§»
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãã¬ãã£ã­ã¥ã¼ããåé¤ããï¼p_tcbã§æå®ãã
- *  ã¿ã¹ã¯ãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ãå ´åã«ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ã
- *  ãï¼
+ *  実行できる状態から他の状態への遷移
+ *
+ *  p_tcbで指定されるタスクをレディキューから削除する．p_tcbで指定した
+ *  タスクが実行すべきタスクであった場合には，実行すべきタスクを更新す
+ *  る．
  */
 extern void	make_non_runnable(TCB *p_tcb);
 
 /*
- *  ä¼æ­¢ç¶æ
-ã¸ã®é·ç§»
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã®ç¶æ
-ãä¼æ­¢ç¶æ
-ã¨ããï¼ã¾ãï¼ã¿ã¹ã¯ã®èµ·å
- *  æã«åæåãã¹ãå¤æ°ã®åæåã¨ï¼ã¿ã¹ã¯èµ·åã®ããã®ã³ã³ãã­ã¹ããè¨­
- *  å®ããï¼
+ *  休止状態への遷移
+ *
+ *  p_tcbで指定されるタスクの状態を休止状態とする．また，タスクの起動
+ *  時に初期化すべき変数の初期化と，タスク起動のためのコンテキストを設
+ *  定する．
  */
 extern void	make_dormant(TCB *p_tcb);
 
 /*
- *  ä¼æ­¢ç¶æ
-ããå®è¡ã§ããç¶æ
-ã¸ã®é·ç§»
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã®ç¶æ
-ãä¼æ­¢ç¶æ
-ããå®è¡ã§ããç¶æ
-ã¨ããï¼
+ *  休止状態から実行できる状態への遷移
+ *
+ *  p_tcbで指定されるタスクの状態を休止状態から実行できる状態とする．
  */
 extern void	make_active(TCB *p_tcb);
 
 /*
- *  ã¿ã¹ã¯ã®åªå
-åº¦ã®å¤æ´
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã®åªå
-åº¦ãnewpriï¼å
-é¨è¡¨ç¾ï¼ã«å¤æ´ããï¼ã¾ãï¼
- *  å¿
-è¦ãªå ´åã«ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããï¼
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã®åªå
-é ä½ã¯ï¼åªå
-åº¦ãåãã¿ã¹ã¯ã®ä¸­ã§ï¼
- *  mtxmodeãfalseã®æã¯æä½ï¼mtxmodeãtrueã®æã¯æé«ã¨ããï¼
+ *  タスクの優先度の変更
+ *
+ *  p_tcbで指定されるタスクの優先度をnewpri（内部表現）に変更する．また，
+ *  必要な場合には，実行すべきタスクを更新する．
+ *
+ *  p_tcbで指定されるタスクの優先順位は，優先度が同じタスクの中で，
+ *  mtxmodeがfalseの時は最低，mtxmodeがtrueの時は最高とする．
  */
 extern void	change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode);
 
 /*
- *  ã¬ãã£ã­ã¥ã¼ã®åè»¢
- *
- *  ã¬ãã£ã­ã¥ã¼ä¸­ã®ï¼p_queueã§æå®ãããã¿ã¹ã¯ã­ã¥ã¼ãåè»¢ãããï¼ã¾ãï¼
- *  å¿
-è¦ãªå ´åã«ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããï¼
+ *  レディキューの回転
+ *
+ *  レディキュー中の，p_queueで指定されるタスクキューを回転させる．また，
+ *  必要な場合には，実行すべきタスクを更新する．
  */
 extern void	rotate_ready_queue(QUEUE *p_queue);
 
 /*
- *  ã¿ã¹ã¯ã®çµäºå¦ç
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãçµäºãããå¦çãè¡ãï¼ã¿ã¹ã¯ã®èµ·åè¦æ±ã­ã¥ã¼
- *  ã¤ã³ã°æ°ã0ã§ãªãå ´åã«ã¯ï¼ååº¦èµ·åããããã®å¦çãè¡ãï¼
+ *  タスクの終了処理
+ *
+ *  p_tcbで指定されるタスクを終了させる処理を行う．タスクの起動要求キュー
+ *  イング数が0でない場合には，再度起動するための処理を行う．
  */
 extern void	task_terminate(TCB *p_tcb);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task.trb	(revision 389)
@@ -9,47 +9,32 @@
 #               Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   $Id$
@@ -57,5 +42,5 @@
 
 #
-#		ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®çæã¹ã¯ãªãã
+#		タスク管理モジュールの生成スクリプト
 #
 
@@ -66,32 +51,32 @@
 
   def prepare(key, params)
-    # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨­å®
+    # パラメータが省略された時のデフォルト値の設定
     params[:stk] ||= "NULL"
 
-    # tskatrãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1028ï¼½
-    #ï¼TA_ACTï¼TA_NOACTQUEï¼TARGET_TSKATRä»¥å¤ã®ããããã»ããããã¦ããå ´åï¼
+    # tskatrが無効の場合（E_RSATR）［NGKI1028］
+    #（TA_ACT，TA_NOACTQUE，TARGET_TSKATR以外のビットがセットされている場合）
     if (params[:tskatr] & ~($TA_ACT|$TA_NOACTQUE|$TARGET_TSKATR)) != 0
       error_illegal_id("E_RSATR", params, :tskatr, :tskid)
     end
 
-    # (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)ã§ãªãå ´åï¼»NGKI1034ï¼½
+    # (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合［NGKI1034］
     if !($TMIN_TPRI <= params[:itskpri] && params[:itskpri] <= $TMAX_TPRI)
       error_illegal_id("E_PAR", params, :itskpri, :tskid)
     end
 
-    # stkszãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_STKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼
-    # ãããå°ããå ´åï¼»NGKI1042ï¼½
+    # stkszがターゲット定義の最小値（TARGET_MIN_STKSZ，未定義の場合は1）
+    # よりも小さい場合［NGKI1042］
     if params[:stksz] < $TARGET_MIN_STKSZ
       error_wrong_id("E_PAR", params, :stksz, :tskid, "too small")
     end
 
-    # ã¹ã¿ãã¯é åã®è¨­å®ï¼»NGKI1041ï¼½
+    # スタック領域の設定［NGKI1041］
     if params[:stk] == "NULL"
-      # ã¹ã¿ãã¯é åã®çæï¼»NGKI1049ï¼½
+      # スタック領域の生成［NGKI1049］
       stkName = "_kernel_stack_#{params[:tskid]}"
       params[:tinib_stksz] = AllocStack(stkName, params[:stksz], "SU")
       params[:tinib_stk] = stkName
     else
-      # stkszãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ­£ãããªãå ´åï¼»NGKI1056ï¼½
+      # stkszがスタック領域のサイズとして正しくない場合［NGKI1056］
       if (params[:stksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0
         error_wrong_id("E_PAR", params, :stksz, :tskid, "not aligned")
@@ -116,6 +101,5 @@
 
 #
-#  ã¿ã¹ã¯ç®¡çã«é¢ããæ
-å ±ã®çæ
+#  タスク管理に関する情報の生成
 #
 $kernelCfgC.comment_header("Task Management Functions")
@@ -125,5 +109,5 @@
 TaskObject.new.generate()
 
-# ã¿ã¹ã¯çæé åºãã¼ãã«ã®çæ
+# タスク生成順序テーブルの生成
 $kernelCfgC.add("const ID _kernel_torder_table[TNUM_STSKID] = { ")
 $kernelCfgC.append("\t")
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task_manage.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task_manage.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task_manage.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¹ã¯ç®¡çæ©è½
+ *		タスク管理機能
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_ACRE_TSK_ENTER
@@ -134,15 +119,13 @@
 
 /*
- *  ã¿ã¹ã¯ã®çæ
+ *  タスクの生成
  *
- *  pk_ctsk->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç
-§ããªãããï¼ã­ã¼
- *  ã«ã«å¤æ°ã«ã³ãã¼ããå¿
-è¦ããªãï¼éä¸­ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼
+ *  pk_ctsk->exinfは，エラーチェックをせず，一度しか参照しないため，ロー
+ *  カル変数にコピーする必要がない（途中で書き換わっても支障がない）．
  */
 #ifdef TOPPERS_acre_tsk
 
 #ifndef TARGET_MIN_STKSZ
-#define TARGET_MIN_STKSZ	1U		/* æªå®ç¾©ã®å ´åã¯0ã§ãªããã¨ããã§ãã¯ */
+#define TARGET_MIN_STKSZ	1U		/* 未定義の場合は0でないことをチェック */
 #endif /* TARGET_MIN_STKSZ */
 
@@ -226,5 +209,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®åé¤ï¼»NGKI1100ï¼½
+ *  タスクの削除［NGKI1100］
  */
 #ifdef TOPPERS_del_tsk
@@ -238,14 +221,14 @@
 
 	LOG_DEL_TSK_ENTER(tskid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1101ï¼½ï¼»NGKI1102ï¼½*/
-	CHECK_ID(VALID_TSKID(tskid));				/*ï¼»NGKI1103ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1101］［NGKI1102］*/
+	CHECK_ID(VALID_TSKID(tskid));				/*［NGKI1103］*/
 	p_tcb = get_tcb(tskid);
 
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1104ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1104］*/
 	}
 	else if (tskid <= tmax_stskid || !TSTAT_DORMANT(p_tcb->tstat)) {
-		ercd = E_OBJ;							/*ï¼»NGKI1106ï¼½ï¼»NGKI1107ï¼½*/
+		ercd = E_OBJ;							/*［NGKI1106］［NGKI1107］*/
 	}
 	else {
@@ -254,9 +237,9 @@
 		term_tskinictxb(&(p_tinib->tskinictxb));
 #else /* USE_TSKINICTXB */
-		if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) {	/*ï¼»NGKI1109ï¼½*/
+		if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) {	/*［NGKI1109］*/
 			kernel_free(p_tinib->stk);
 		}
 #endif /* USE_TSKINICTXB */
-		p_tinib->tskatr = TA_NOEXS;				/*ï¼»NGKI1108ï¼½*/
+		p_tinib->tskatr = TA_NOEXS;				/*［NGKI1108］*/
 		queue_insert_prev(&free_tcb, &(p_tcb->task_queue));
 		ercd = E_OK;
@@ -272,5 +255,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®èµ·åï¼»NGKI3529ï¼½
+ *  タスクの起動［NGKI3529］
  */
 #ifdef TOPPERS_act_tsk
@@ -283,10 +266,10 @@
 
 	LOG_ACT_TSK_ENTER(tskid);
-	CHECK_UNL();								/*ï¼»NGKI1114ï¼½*/
+	CHECK_UNL();								/*［NGKI1114］*/
 	if (tskid == TSK_SELF && !sense_context()) {
-		p_tcb = p_runtsk;						/*ï¼»NGKI1121ï¼½*/
-	}
-	else {
-		CHECK_ID(VALID_TSKID(tskid));			/*ï¼»NGKI1115ï¼½*/
+		p_tcb = p_runtsk;						/*［NGKI1121］*/
+	}
+	else {
+		CHECK_ID(VALID_TSKID(tskid));			/*［NGKI1115］*/
 		p_tcb = get_tcb(tskid);
 	}
@@ -294,8 +277,8 @@
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1116ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1116］*/
 	}
 	else if (TSTAT_DORMANT(p_tcb->tstat)) {
-		make_active(p_tcb);						/*ï¼»NGKI1118ï¼½*/
+		make_active(p_tcb);						/*［NGKI1118］*/
 		if (p_runtsk != p_schedtsk) {
 			if (!sense_context()) {
@@ -309,8 +292,8 @@
 	}
 	else if ((p_tcb->p_tinib->tskatr & TA_NOACTQUE) != 0U || p_tcb->actque) {
-		ercd = E_QOVR;			   				/*ï¼»NGKI3528ï¼½*/
-	}
-	else {
-		p_tcb->actque = true;					/*ï¼»NGKI3527ï¼½*/
+		ercd = E_QOVR;			   				/*［NGKI3528］*/
+	}
+	else {
+		p_tcb->actque = true;					/*［NGKI3527］*/
 		ercd = E_OK;
 	}
@@ -325,5 +308,5 @@
 
 /*
- *  ã¿ã¹ã¯èµ·åè¦æ±ã®ã­ã£ã³ã»ã«ï¼»NGKI1138ï¼½
+ *  タスク起動要求のキャンセル［NGKI1138］
  */
 #ifdef TOPPERS_can_act
@@ -336,10 +319,10 @@
 
 	LOG_CAN_ACT_ENTER(tskid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1139ï¼½ï¼»NGKI1140ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1139］［NGKI1140］*/
 	if (tskid == TSK_SELF) {
-		p_tcb = p_runtsk;						/*ï¼»NGKI1146ï¼½*/
-	}
-	else {
-		CHECK_ID(VALID_TSKID(tskid));			/*ï¼»NGKI1141ï¼½*/
+		p_tcb = p_runtsk;						/*［NGKI1146］*/
+	}
+	else {
+		CHECK_ID(VALID_TSKID(tskid));			/*［NGKI1141］*/
 		p_tcb = get_tcb(tskid);
 	}
@@ -347,9 +330,9 @@
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1142ï¼½*/
-	}
-	else {
-		ercd = p_tcb->actque ? 1 : 0;			/*ï¼»NGKI1144ï¼½*/
-		p_tcb->actque = false;					/*ï¼»NGKI1144ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1142］*/
+	}
+	else {
+		ercd = p_tcb->actque ? 1 : 0;			/*［NGKI1144］*/
+		p_tcb->actque = false;					/*［NGKI1144］*/
 	}
 	unlock_cpu();
@@ -363,7 +346,5 @@
 
 /*
- *  ã¿ã¹ã¯ç¶æ
-ã®åç
-§ï¼»NGKI3613ï¼½
+ *  タスク状態の参照［NGKI3613］
  */
 #ifdef TOPPERS_get_tst
@@ -377,10 +358,10 @@
 
 	LOG_GET_TST_ENTER(tskid, p_tskstat);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3614ï¼½ï¼»NGKI3615ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3614］［NGKI3615］*/
 	if (tskid == TSK_SELF) {
-		p_tcb = p_runtsk;						/*ï¼»NGKI3621ï¼½*/
-	}
-	else {
-		CHECK_ID(VALID_TSKID(tskid));			/*ï¼»NGKI3616ï¼½*/
+		p_tcb = p_runtsk;						/*［NGKI3621］*/
+	}
+	else {
+		CHECK_ID(VALID_TSKID(tskid));			/*［NGKI3616］*/
 		p_tcb = get_tcb(tskid);
 	}
@@ -389,8 +370,8 @@
 	tstat = p_tcb->tstat;
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI3617ï¼½*/
-	}
-	else {
-		if (TSTAT_DORMANT(tstat)) {				/*ï¼»NGKI3620ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI3617］*/
+	}
+	else {
+		if (TSTAT_DORMANT(tstat)) {				/*［NGKI3620］*/
 			*p_tskstat = TTS_DMT;
 		}
@@ -424,6 +405,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®ãã¼ã¹åªå
-åº¦ã®å¤æ´ï¼»NGKI1183ï¼½
+ *  タスクのベース優先度の変更［NGKI1183］
  */
 #ifdef TOPPERS_chg_pri
@@ -437,17 +417,17 @@
 
 	LOG_CHG_PRI_ENTER(tskid, tskpri);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1184ï¼½ï¼»NGKI1185ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1184］［NGKI1185］*/
 	if (tskid == TSK_SELF) {
-		p_tcb = p_runtsk;						/*ï¼»NGKI1198ï¼½*/
-	}
-	else {
-		CHECK_ID(VALID_TSKID(tskid));			/*ï¼»NGKI1187ï¼½*/
+		p_tcb = p_runtsk;						/*［NGKI1198］*/
+	}
+	else {
+		CHECK_ID(VALID_TSKID(tskid));			/*［NGKI1187］*/
 		p_tcb = get_tcb(tskid);
 	}
 	if (tskpri == TPRI_INI) {
-		newbpri = p_tcb->p_tinib->ipriority;	/*ï¼»NGKI1199ï¼½*/
-	}
-	else {
-		CHECK_PAR(VALID_TPRI(tskpri));			/*ï¼»NGKI1188ï¼½*/
+		newbpri = p_tcb->p_tinib->ipriority;	/*［NGKI1199］*/
+	}
+	else {
+		CHECK_PAR(VALID_TPRI(tskpri));			/*［NGKI1188］*/
 		newbpri = INT_PRIORITY(tskpri);
 	}
@@ -455,20 +435,20 @@
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1189ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1189］*/
 	}
 	else if (TSTAT_DORMANT(p_tcb->tstat)) {
-		ercd = E_OBJ;							/*ï¼»NGKI1191ï¼½*/
+		ercd = E_OBJ;							/*［NGKI1191］*/
 	}
 	else if ((p_tcb->p_lastmtx != NULL || TSTAT_WAIT_MTX(p_tcb->tstat))
 						&& !((*mtxhook_check_ceilpri)(p_tcb, newbpri))) {
-		ercd = E_ILUSE;							/*ï¼»NGKI1201ï¼½*/
-	}
-	else {
-		p_tcb->bpriority = newbpri;				/*ï¼»NGKI1192ï¼½*/
+		ercd = E_ILUSE;							/*［NGKI1201］*/
+	}
+	else {
+		p_tcb->bpriority = newbpri;				/*［NGKI1192］*/
 		if (p_tcb->p_lastmtx == NULL || !((*mtxhook_scan_ceilmtx)(p_tcb))) {
-			change_priority(p_tcb, newbpri, false);		/*ï¼»NGKI1193ï¼½*/
+			change_priority(p_tcb, newbpri, false);		/*［NGKI1193］*/
 			if (p_runtsk != p_schedtsk) {
 				dispatch();
-			}									/*ï¼»NGKI1197ï¼½*/
+			}									/*［NGKI1197］*/
 		}
 		ercd = E_OK;
@@ -484,7 +464,5 @@
 
 /*
- *  ã¿ã¹ã¯åªå
-åº¦ã®åç
-§ï¼»NGKI1202ï¼½
+ *  タスク優先度の参照［NGKI1202］
  */
 #ifdef TOPPERS_get_pri
@@ -497,10 +475,10 @@
 
 	LOG_GET_PRI_ENTER(tskid, p_tskpri);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1203ï¼½ï¼»NGKI1204ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1203］［NGKI1204］*/
 	if (tskid == TSK_SELF) {
-		p_tcb = p_runtsk;						/*ï¼»NGKI1211ï¼½*/
-	}
-	else {
-		CHECK_ID(VALID_TSKID(tskid));			/*ï¼»NGKI1205ï¼½*/
+		p_tcb = p_runtsk;						/*［NGKI1211］*/
+	}
+	else {
+		CHECK_ID(VALID_TSKID(tskid));			/*［NGKI1205］*/
 		p_tcb = get_tcb(tskid);
 	}
@@ -508,11 +486,11 @@
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1206ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1206］*/
 	}
 	else if (TSTAT_DORMANT(p_tcb->tstat)) {
-		ercd = E_OBJ;							/*ï¼»NGKI1209ï¼½*/
-	}
-	else {
-		*p_tskpri = EXT_TSKPRI(p_tcb->priority);	/*ï¼»NGKI1210ï¼½*/
+		ercd = E_OBJ;							/*［NGKI1209］*/
+	}
+	else {
+		*p_tskpri = EXT_TSKPRI(p_tcb->priority);	/*［NGKI1210］*/
 		ercd = E_OK;
 	}
@@ -527,7 +505,5 @@
 
 /*
- *  èªã¿ã¹ã¯ã®æ¡å¼µæ
-å ±ã®åç
-§ï¼»NGKI1212ï¼½
+ *  自タスクの拡張情報の参照［NGKI1212］
  */
 #ifdef TOPPERS_get_inf
@@ -539,8 +515,8 @@
 
 	LOG_GET_INF_ENTER(p_exinf);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1213ï¼½ï¼»NGKI1214ï¼½*/
-
-	lock_cpu();
-	*p_exinf = p_runtsk->p_tinib->exinf;		/*ï¼»NGKI1216ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1213］［NGKI1214］*/
+
+	lock_cpu();
+	*p_exinf = p_runtsk->p_tinib->exinf;		/*［NGKI1216］*/
 	ercd = E_OK;
 	unlock_cpu();
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task_refer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task_refer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task_refer.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,7 +40,5 @@
 
 /*
- *		ã¿ã¹ã¯ã®ç¶æ
-åç
-§æ©è½
+ *		タスクの状態参照機能
  */
 
@@ -73,5 +56,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_REF_TSK_ENTER
@@ -84,7 +67,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®ç¶æ
-åç
-§
+ *  タスクの状態参照
  */
 #ifdef TOPPERS_ref_tsk
@@ -115,6 +96,5 @@
 		if (TSTAT_DORMANT(tstat)) {
 			/*
-	 		 *  å¯¾è±¡ã¿ã¹ã¯ãä¼æ­¢ç¶æ
-ã®å ´å
+	 		 *  対象タスクが休止状態の場合
 			 */
 			pk_rtsk->tskstat = TTS_DMT;
@@ -122,6 +102,5 @@
 		else {
 			/*
-	 		 *  ã¿ã¹ã¯ç¶æ
-ã®ååºã
+	 		 *  タスク状態の取出し
 			 */
 			if (TSTAT_SUSPENDED(tstat)) {
@@ -144,7 +123,5 @@
 
 			/*
-	 		 *  ç¾å¨åªå
-åº¦ã¨ãã¼ã¹åªå
-åº¦ã®ååºã
+	 		 *  現在優先度とベース優先度の取出し
 			 */
 			pk_rtsk->tskpri = EXT_TSKPRI(p_tcb->priority);
@@ -153,7 +130,5 @@
 			if (TSTAT_WAITING(tstat)) {
 				/*
-		 		 *  å¾
-ã¡è¦å ã¨å¾
-ã¡å¯¾è±¡ã®ãªãã¸ã§ã¯ãã®IDã®ååºã
+		 		 *  待ち要因と待ち対象のオブジェクトのIDの取出し
 				 */
 				switch (tstat) {
@@ -207,5 +182,5 @@
 
 				/*
-		 		 *  ã¿ã¤ã ã¢ã¦ãããã¾ã§ã®æéã®ååºã
+		 		 *  タイムアウトするまでの時間の取出し
 				 */
 				if (p_tcb->p_winfo->p_tmevtb != NULL) {
@@ -219,17 +194,15 @@
 
 			/*
-	 		 *  èµ·åºè¦æ±ã­ã¥ã¼ã¤ã³ã°æ°ã®ååºã
+	 		 *  起床要求キューイング数の取出し
 			 */
 			pk_rtsk->wupcnt = p_tcb->wupque ? 1U : 0U;
 
 			/*
-			 *  ã¿ã¹ã¯çµäºè¦æ±ç¶æ
-ã®ååºã
+			 *  タスク終了要求状態の取出し
 			 */
 			pk_rtsk->raster = p_tcb->raster;
 
 			/*
-			 *  ã¿ã¹ã¯çµäºç¦æ­¢ç¶æ
-ã®ååºã
+			 *  タスク終了禁止状態の取出し
 			 */
 			pk_rtsk->dister = !(p_tcb->enater);
@@ -237,5 +210,5 @@
 
 		/*
-		 *  èµ·åè¦æ±ã­ã¥ã¼ã¤ã³ã°æ°ã®ååºã
+		 *  起動要求キューイング数の取出し
 		 */
 		pk_rtsk->actcnt = p_tcb->actque ? 1U : 0U;
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task_sync.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task_sync.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task_sync.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¹ã¯ä»å±åææ©è½
+ *		タスク付属同期機能
  */
 
@@ -66,5 +51,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_SLP_TSK_ENTER
@@ -133,6 +118,5 @@
 
 /*
- *  èµ·åºå¾
-ã¡
+ *  起床待ち
  */
 #ifdef TOPPERS_slp_tsk
@@ -172,6 +156,5 @@
 
 /*
- *  èµ·åºå¾
-ã¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  起床待ち（タイムアウトあり）
  */
 #ifdef TOPPERS_tslp_tsk
@@ -216,5 +199,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®èµ·åº
+ *  タスクの起床
  */
 #ifdef TOPPERS_wup_tsk
@@ -272,5 +255,5 @@
 
 /*
- *  ã¿ã¹ã¯èµ·åºè¦æ±ã®ã­ã£ã³ã»ã«
+ *  タスク起床要求のキャンセル
  */
 #ifdef TOPPERS_can_wup
@@ -313,7 +296,5 @@
 
 /*
- *  å¾
-ã¡ç¶æ
-ã®å¼·å¶è§£é¤
+ *  待ち状態の強制解除
  */
 #ifdef TOPPERS_rel_wai
@@ -362,7 +343,5 @@
 
 /*
- *  å¼·å¶å¾
-ã¡ç¶æ
-ã¸ã®ç§»è¡ï¼»NGKI1298ï¼½
+ *  強制待ち状態への移行［NGKI1298］
  */
 #ifdef TOPPERS_sus_tsk
@@ -375,32 +354,29 @@
 
 	LOG_SUS_TSK_ENTER(tskid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1299ï¼½ï¼»NGKI1300ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1299］［NGKI1300］*/
 	if (tskid == TSK_SELF) {
-		p_tcb = p_runtsk;						/*ï¼»NGKI1310ï¼½*/
-	}
-	else {
-		CHECK_ID(VALID_TSKID(tskid));			/*ï¼»NGKI1302ï¼½*/
+		p_tcb = p_runtsk;						/*［NGKI1310］*/
+	}
+	else {
+		CHECK_ID(VALID_TSKID(tskid));			/*［NGKI1302］*/
 		p_tcb = get_tcb(tskid);
 	}
 
 	lock_cpu();
-	if (p_tcb == p_runtsk && !dspflg) {			/*ï¼»NGKI1311ï¼½ï¼»NGKI3604ï¼½*/
+	if (p_tcb == p_runtsk && !dspflg) {			/*［NGKI1311］［NGKI3604］*/
 		ercd = E_CTX;
 	}
 	else if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1303ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1303］*/
 	}
 	else if (TSTAT_DORMANT(p_tcb->tstat)) {
-		ercd = E_OBJ;							/*ï¼»NGKI1305ï¼½*/
+		ercd = E_OBJ;							/*［NGKI1305］*/
 	}
 	else if (p_tcb->raster) {
-		ercd = E_RASTER;						/*ï¼»NGKI3605ï¼½*/
+		ercd = E_RASTER;						/*［NGKI3605］*/
 	}
 	else if (TSTAT_RUNNABLE(p_tcb->tstat)) {
 		/*
-		 *  å®è¡ã§ããç¶æ
-ããå¼·å¶å¾
-ã¡ç¶æ
-ã¸ã®é·ç§»ï¼»NGKI1307ï¼½
+		 *  実行できる状態から強制待ち状態への遷移［NGKI1307］
 		 */
 		p_tcb->tstat = TS_SUSPENDED;
@@ -413,13 +389,9 @@
 	}
 	else if (TSTAT_SUSPENDED(p_tcb->tstat)) {
-		ercd = E_QOVR;							/*ï¼»NGKI1306ï¼½*/
+		ercd = E_QOVR;							/*［NGKI1306］*/
 	}
 	else {
 		/*
-		 *  å¾
-ã¡ç¶æ
-ããäºéå¾
-ã¡ç¶æ
-ã¸ã®é·ç§»ï¼»NGKI1308ï¼½
+		 *  待ち状態から二重待ち状態への遷移［NGKI1308］
 		 */
 		p_tcb->tstat |= TS_SUSPENDED;
@@ -437,7 +409,5 @@
 
 /*
- *  å¼·å¶å¾
-ã¡ç¶æ
-ããã®åé
+ *  強制待ち状態からの再開
  */
 #ifdef TOPPERS_rsm_tsk
@@ -463,8 +433,5 @@
 	else if (!TSTAT_WAITING(p_tcb->tstat)) {
 		/*
-		 *  å¼·å¶å¾
-ã¡ç¶æ
-ããå®è¡ã§ããç¶æ
-ã¸ã®é·ç§»
+		 *  強制待ち状態から実行できる状態への遷移
 		 */
 		p_tcb->tstat = TS_RUNNABLE;
@@ -478,9 +445,5 @@
 	else {
 		/*
-		 *  äºéå¾
-ã¡ç¶æ
-ããå¾
-ã¡ç¶æ
-ã¸ã®é·ç§»
+		 *  二重待ち状態から待ち状態への遷移
 		 */
 		p_tcb->tstat &= ~TS_SUSPENDED;
@@ -498,6 +461,5 @@
 
 /*
- *  èªã¿ã¹ã¯ã®é
-å»¶
+ *  自タスクの遅延
  */
 #ifdef TOPPERS_dly_tsk
Index: azure_iot_hub/trunk/asp3_dcre/kernel/task_term.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/task_term.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/task_term.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¹ã¯çµäºæ©è½
+ *		タスク終了機能
  */
 
@@ -66,5 +51,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_EXT_TSK_ENTER
@@ -117,5 +102,5 @@
 
 /*
- *  èªã¿ã¹ã¯ã®çµäºï¼»NGKI1162ï¼½
+ *  自タスクの終了［NGKI1162］
  */
 #ifdef TOPPERS_ext_tsk
@@ -128,14 +113,11 @@
 
 	LOG_EXT_TSK_ENTER();
-	CHECK_TSKCTX();							/*ï¼»NGKI1164ï¼½*/
+	CHECK_TSKCTX();							/*［NGKI1164］*/
 
 	if (sense_lock()) {
 		/*
-		 *  CPUã­ãã¯ç¶æ
-ã§ext_tskãå¼ã°ããå ´åã¯ï¼CPUã­ãã¯ãè§£é¤ã
-		 *  ã¦ããã¿ã¹ã¯ãçµäºããï¼å®è£
-ä¸ã¯ï¼ãµã¼ãã¹ã³ã¼ã«å
-ã§ã®CPU
-		 *  ã­ãã¯ãçç¥ããã°ããã ãï¼ï¼»NGKI1168ï¼½
+		 *  CPUロック状態でext_tskが呼ばれた場合は，CPUロックを解除し
+		 *  てからタスクを終了する．実装上は，サービスコール内でのCPU
+		 *  ロックを省略すればよいだけ．［NGKI1168］
 		 */
 	}
@@ -148,8 +130,6 @@
 		if (!enadsp) {
 			/*
-			 *  ãã£ã¹ãããç¦æ­¢ç¶æ
-ã§ext_tskãå¼ã°ããå ´åã¯ï¼ãã£ã¹ãã
-			 *  ãè¨±å¯ç¶æ
-ã«ãã¦ããã¿ã¹ã¯ãçµäºããï¼ï¼»NGKI1168ï¼½
+			 *  ディスパッチ禁止状態でext_tskが呼ばれた場合は，ディスパッ
+			 *  チ許可状態にしてからタスクを終了する．［NGKI1168］
 			 */
 			enadsp = true;
@@ -157,9 +137,7 @@
 		if (intpri != TIPM_ENAALL) {
 			/*
-			 *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ï¼IPMï¼ãTIPM_ENAALLä»¥å¤ã®ç¶æ
-ã§
-			 *  ext_tskãå¼ã°ããå ´åã¯ï¼IPMãTIPM_ENAALLã«ãã¦ããã¿ã¹
-			 *  ã¯ãçµäºããï¼ï¼»NGKI1168ï¼½
+			 *  割込み優先度マスク（IPM）がTIPM_ENAALL以外の状態で
+			 *  ext_tskが呼ばれた場合は，IPMをTIPM_ENAALLにしてからタス
+			 *  クを終了する．［NGKI1168］
 			 */
 			t_set_ipm(TIPM_ENAALL);
@@ -169,7 +147,7 @@
 	}
 
-	task_terminate(p_runtsk);				/* ï¼»NGKI3449ï¼½*/
-	exit_and_dispatch();					/* ï¼»NGKI1169ï¼½*/
-	ercd = E_SYS;							/* ï¼»NGKI1163ï¼½*/
+	task_terminate(p_runtsk);				/* ［NGKI3449］*/
+	exit_and_dispatch();					/* ［NGKI1169］*/
+	ercd = E_SYS;							/* ［NGKI1163］*/
 
   error_exit:
@@ -181,5 +159,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®çµäºè¦æ±ï¼»NGKI3469ï¼½
+ *  タスクの終了要求［NGKI3469］
  */
 #ifdef TOPPERS_ras_ter
@@ -192,18 +170,18 @@
 
 	LOG_RAS_TER_ENTER(tskid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3470ï¼½ï¼»NGKI3471ï¼½*/
-	CHECK_ID(VALID_TSKID(tskid));				/*ï¼»NGKI3472ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3470］［NGKI3471］*/
+	CHECK_ID(VALID_TSKID(tskid));				/*［NGKI3472］*/
 	p_tcb = get_tcb(tskid);
-	CHECK_ILUSE(p_tcb != p_runtsk);				/*ï¼»NGKI3475ï¼½*/
+	CHECK_ILUSE(p_tcb != p_runtsk);				/*［NGKI3475］*/
 
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI3473ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI3473］*/
 	}
 	else if (TSTAT_DORMANT(p_tcb->tstat)) {
-		ercd = E_OBJ;							/*ï¼»NGKI3476ï¼½*/
+		ercd = E_OBJ;							/*［NGKI3476］*/
 	}
 	else if (p_tcb->enater) {
-		task_terminate(p_tcb);					/*ï¼»NGKI3477ï¼½*/
+		task_terminate(p_tcb);					/*［NGKI3477］*/
 		if (p_runtsk != p_schedtsk) {
 			dispatch();
@@ -212,12 +190,12 @@
 	}
 	else {
-		p_tcb->raster = true;					/*ï¼»NGKI3478ï¼½*/
+		p_tcb->raster = true;					/*［NGKI3478］*/
 		if (!TSTAT_RUNNABLE(p_tcb->tstat)) {
 			if (TSTAT_WAITING(p_tcb->tstat)) {
-				wait_dequeue_wobj(p_tcb);		/*ï¼»NGKI3479ï¼½*/
+				wait_dequeue_wobj(p_tcb);		/*［NGKI3479］*/
 				wait_dequeue_tmevtb(p_tcb);
-				p_tcb->p_winfo->wercd = E_RASTER;	/*ï¼»NGKI3480ï¼½*/
+				p_tcb->p_winfo->wercd = E_RASTER;	/*［NGKI3480］*/
 			}
-			p_tcb->tstat = TS_RUNNABLE;			/*ï¼»NGKI3606ï¼½*/
+			p_tcb->tstat = TS_RUNNABLE;			/*［NGKI3606］*/
 			LOG_TSKSTAT(p_tcb);
 			make_runnable(p_tcb);
@@ -238,5 +216,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºã®ç¦æ­¢ï¼»NGKI3482ï¼½
+ *  タスク終了の禁止［NGKI3482］
  */
 #ifdef TOPPERS_dis_ter
@@ -248,8 +226,8 @@
 
 	LOG_DIS_TER_ENTER();
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3483ï¼½ï¼»NGKI3484ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3483］［NGKI3484］*/
 
 	lock_cpu();
-	p_runtsk->enater = false;					/*ï¼»NGKI3486ï¼½*/
+	p_runtsk->enater = false;					/*［NGKI3486］*/
 	ercd = E_OK;
 	unlock_cpu();
@@ -263,5 +241,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºã®è¨±å¯ï¼»NGKI3487ï¼½
+ *  タスク終了の許可［NGKI3487］
  */
 #ifdef TOPPERS_ena_ter
@@ -273,5 +251,5 @@
 
 	LOG_ENA_TER_ENTER();
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3488ï¼½ï¼»NGKI3489ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3488］［NGKI3489］*/
 
 	lock_cpu();
@@ -282,5 +260,5 @@
 	}
 	else {
-		p_runtsk->enater = true;				/*ï¼»NGKI3491ï¼½*/
+		p_runtsk->enater = true;				/*［NGKI3491］*/
 		ercd = E_OK;
 	}
@@ -295,7 +273,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºç¦æ­¢ç¶æ
-ã®åç
-§ï¼»NGKI3494ï¼½
+ *  タスク終了禁止状態の参照［NGKI3494］
  */
 #ifdef TOPPERS_sns_ter
@@ -308,9 +284,9 @@
 	LOG_SNS_TER_ENTER();
 	/*
-	 *  enaterãå¤æ´ã§ããã®ã¯èªã¿ã¹ã¯ã®ã¿ã§ããããï¼æä»å¶å¾¡ããã«èª­
-	 *  ãã§ãåé¡ãªãï¼
+	 *  enaterを変更できるのは自タスクのみであるため，排他制御せずに読
+	 *  んでも問題ない．
 	 */
 	state = (p_runtsk != NULL && p_runtsk->enater) ? false : true;
-												/*ï¼»NGKI3495ï¼½ï¼»NGKI3496ï¼½*/
+												/*［NGKI3495］［NGKI3496］*/
 	LOG_SNS_TER_LEAVE(state);
 	return(state);
@@ -320,5 +296,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®å¼·å¶çµäºï¼»NGKI1170ï¼½
+ *  タスクの強制終了［NGKI1170］
  */
 #ifdef TOPPERS_ter_tsk
@@ -331,18 +307,18 @@
 
 	LOG_TER_TSK_ENTER(tskid);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI1171ï¼½ï¼»NGKI1172ï¼½*/
-	CHECK_ID(VALID_TSKID(tskid));				/*ï¼»NGKI1173ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI1171］［NGKI1172］*/
+	CHECK_ID(VALID_TSKID(tskid));				/*［NGKI1173］*/
 	p_tcb = get_tcb(tskid);
-	CHECK_ILUSE(p_tcb != p_runtsk);				/*ï¼»NGKI1176ï¼½*/
+	CHECK_ILUSE(p_tcb != p_runtsk);				/*［NGKI1176］*/
 
 	lock_cpu();
 	if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
-		ercd = E_NOEXS;							/*ï¼»NGKI1174ï¼½*/
+		ercd = E_NOEXS;							/*［NGKI1174］*/
 	}
 	else if (TSTAT_DORMANT(p_tcb->tstat)) {
-		ercd = E_OBJ;							/*ï¼»NGKI1177ï¼½*/
+		ercd = E_OBJ;							/*［NGKI1177］*/
 	}
 	else {
-		task_terminate(p_tcb);					/*ï¼»NGKI3450ï¼½*/
+		task_terminate(p_tcb);					/*［NGKI3450］*/
 		if (p_runtsk != p_schedtsk) {
 			dispatch();
Index: azure_iot_hub/trunk/asp3_dcre/kernel/taskhook.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/taskhook.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/taskhook.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *  ã¿ã¹ã¯ç®¡çã«é¢é£ããããã¯ã«ã¼ãã³
+ *  タスク管理に関連するフックルーチン
  */
 
@@ -63,5 +48,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹æ©è½ã®ããã®ããã¯ã«ã¼ãã³
+ *  ミューテックス機能のためのフックルーチン
  */
 #ifdef TOPPERS_mtxhook
Index: azure_iot_hub/trunk/asp3_dcre/kernel/taskhook.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/taskhook.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/taskhook.h	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *  ã¿ã¹ã¯ç®¡çã«é¢é£ããããã¯ã«ã¼ãã³
+ *  タスク管理に関連するフックルーチン
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹æ©è½ã®ããã®ããã¯ã«ã¼ãã³
+ *  ミューテックス機能のためのフックルーチン
  */
 extern bool_t	(*mtxhook_check_ceilpri)(TCB *p_tcb, uint_t bpriority);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/time_event.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/time_event.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/time_event.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¤ã ã¤ãã³ãç®¡çã¢ã¸ã¥ã¼ã«
+ *		タイムイベント管理モジュール
  */
 
@@ -64,5 +49,5 @@
 
 /*
- *  TSTEP_HRTCNTã®ç¯å²ãã§ãã¯
+ *  TSTEP_HRTCNTの範囲チェック
  */
 #if TSTEP_HRTCNT > 4000U
@@ -71,5 +56,5 @@
 
 /*
- *  HRTCNT_BOUNDã®ç¯å²ãã§ãã¯
+ *  HRTCNT_BOUNDの範囲チェック
  */
 #if HRTCNT_BOUND >= 4294000000U
@@ -84,30 +69,27 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãæä½ãã¯ã­
+ *  タイムイベントヒープ操作マクロ
  */
 #define PARENT(p_tmevtn)	(tmevt_heap + (((p_tmevtn) - tmevt_heap) >> 1))
-													/* è¦ªãã¼ããæ±ãã */
+													/* 親ノードを求める */
 #define LCHILD(p_tmevtn)	(tmevt_heap + (((p_tmevtn) - tmevt_heap) << 1))
-													/* å·¦ã®å­ãã¼ããæ±ãã */
-/*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãä¸­ã®å
-é ­ã®ãã¼ã
+													/* 左の子ノードを求める */
+/*
+ *  タイムイベントヒープ中の先頭のノード
  */
 #define p_top_tmevtn	(&(tmevt_heap[1]))
 #define top_evttim		(tmevt_heap[1].p_tmevtb->evttim)
-										/* å
-é ­ã®ã¿ã¤ã ã¤ãã³ãã®çºçæå» */
-/*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãä¸­ã®æå¾ã®ãã¼ã
+										/* 先頭のタイムイベントの発生時刻 */
+/*
+ *  タイムイベントヒープ中の最後のノード
  */
 #define p_last_tmevtn	(tmevt_heap[0].p_last)
 
 /*
- *  ã¤ãã³ãæå»ã®åå¾é¢ä¿ã®å¤å®ï¼»ASPD1009ï¼½
+ *  イベント時刻の前後関係の判定［ASPD1009］
  *
- *  ã¤ãã³ãæå»ã¯ï¼boundary_evttimããã®ç¸å¯¾å¤ã§æ¯è¼ããï¼ããªãã¡ï¼
- *  boundary_evttimãæãæ©ãæå»ï¼boundary_evttim-1ãæãé
-ãæå»ã¨ã¿
- *  ãªãã¦æ¯è¼ããï¼
+ *  イベント時刻は，boundary_evttimからの相対値で比較する．すなわち，
+ *  boundary_evttimを最も早い時刻，boundary_evttim-1が最も遅い時刻とみ
+ *  なして比較する．
  */
 #define EVTTIM_ADVANCE(t)	((t) - boundary_evttim)
@@ -118,45 +100,45 @@
 
 /*
- *  å¢çã¤ãã³ãæå»ï¼»ASPD1008ï¼½
+ *  境界イベント時刻［ASPD1008］
  */
 EVTTIM	boundary_evttim;
 
 /*
- *  æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®ã¤ãã³ãæå»ï¼»ASPD1012ï¼½
+ *  最後に現在時刻を算出した時点でのイベント時刻［ASPD1012］
  */
 EVTTIM	current_evttim;
 
 /*
- *  æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ï¼»ASPD1012ï¼½
+ *  最後に現在時刻を算出した時点での高分解能タイマのカウント値［ASPD1012］
  */
 HRTCNT	current_hrtcnt;
 
 /*
- *  æãé²ãã§ããæã®ã¤ãã³ãæå»ï¼»ASPD1041ï¼½
+ *  最も進んでいた時のイベント時刻［ASPD1041］
  */
 EVTTIM	monotonic_evttim;
 
 /*
- *  ã·ã¹ãã æå»ã®ãªãã»ããï¼»ASPD1043ï¼½
+ *  システム時刻のオフセット［ASPD1043］
  */
 SYSTIM	systim_offset;
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®å¦çä¸­ã§ãããã¨ãç¤ºããã©ã°ï¼»ASPD1032ï¼½
+ *  高分解能タイマ割込みの処理中であることを示すフラグ［ASPD1032］
  */
 bool_t	in_signal_time;
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãç®¡çã¢ã¸ã¥ã¼ã«ã®åæåï¼»ASPD1061ï¼½
+ *  タイムイベント管理モジュールの初期化［ASPD1061］
  */
 void
 initialize_tmevt(void)
 {
-	current_evttim = 0U;							/*ï¼»ASPD1047ï¼½*/
+	current_evttim = 0U;							/*［ASPD1047］*/
 	boundary_evttim = current_evttim - BOUNDARY_MARGIN;
-													/*ï¼»ASPD1048ï¼½*/
-	monotonic_evttim = 0U;							/*ï¼»ASPD1046ï¼½*/
-	systim_offset = 0U;								/*ï¼»ASPD1044ï¼½*/
-	in_signal_time = false;							/*ï¼»ASPD1033ï¼½*/
+													/*［ASPD1048］*/
+	monotonic_evttim = 0U;							/*［ASPD1046］*/
+	systim_offset = 0U;								/*［ASPD1044］*/
+	in_signal_time = false;							/*［ASPD1033］*/
 	p_last_tmevtn = tmevt_heap;
 }
@@ -165,12 +147,9 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãã®æ¿å
-¥ä½ç½®ãä¸åãã«æ¢ç´¢
+ *  タイムイベントの挿入位置を上向きに探索
  *
- *  æå»evttimã«çºçããã¿ã¤ã ã¤ãã³ããæ¿å
-¥ãããã¼ããç©ºããããã«ï¼
- *  ãã¼ãã®ä¸ã«åãã£ã¦ç©ºãã¼ããç§»åãããï¼ç§»ååã®ç©ºãã¼ãã®ä½ç½®ã
- *  p_tmevtnã«æ¸¡ãã¨ï¼ç§»åå¾ã®ç©ºãã¼ãã®ä½ç½®ï¼ããªãã¡æ¿å
-¥ä½ç½®ï¼ãè¿ãï¼
+ *  時刻evttimに発生するタイムイベントを挿入するノードを空けるために，
+ *  ヒープの上に向かって空ノードを移動させる．移動前の空ノードの位置を
+ *  p_tmevtnに渡すと，移動後の空ノードの位置（すなわち挿入位置）を返す．
  */
 #ifdef TOPPERS_tmeup
@@ -183,7 +162,6 @@
 	while (p_tmevtn > p_top_tmevtn) {
 		/*
-		 *  è¦ªãã¼ãã®ã¤ãã³ãçºçæå»ã®æ¹ãæ©ãï¼ã¾ãã¯åãï¼ãªãã°ï¼
-		 *  p_tmevtnãæ¿å
-¥ä½ç½®ãªã®ã§ã«ã¼ããæããï¼
+		 *  親ノードのイベント発生時刻の方が早い（または同じ）ならば，
+		 *  p_tmevtnが挿入位置なのでループを抜ける．
 		 */
 		p_parent = PARENT(p_tmevtn);
@@ -193,5 +171,5 @@
 
 		/*
-		 *  è¦ªãã¼ããp_tmevtnã®ä½ç½®ã«ç§»åãããï¼
+		 *  親ノードをp_tmevtnの位置に移動させる．
 		 */
 		*p_tmevtn = *p_parent;
@@ -199,5 +177,5 @@
 
 		/*
-		 *  p_tmevtnãè¦ªãã¼ãã®ä½ç½®ã«æ´æ°ï¼
+		 *  p_tmevtnを親ノードの位置に更新．
 		 */
 		p_tmevtn = p_parent;
@@ -209,12 +187,9 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãã®æ¿å
-¥ä½ç½®ãä¸åãã«æ¢ç´¢
+ *  タイムイベントの挿入位置を下向きに探索
  *
- *  æå»evttimã«çºçããã¿ã¤ã ã¤ãã³ããæ¿å
-¥ãããã¼ããç©ºããããã«ï¼
- *  ãã¼ãã®ä¸ã«åãã£ã¦ç©ºãã¼ããç§»åãããï¼ç§»ååã®ç©ºãã¼ãã®ä½ç½®ã
- *  p_tmevtnã«æ¸¡ãã¨ï¼ç§»åå¾ã®ç©ºãã¼ãã®ä½ç½®ï¼ããªãã¡æ¿å
-¥ä½ç½®ï¼ãè¿ãï¼
+ *  時刻evttimに発生するタイムイベントを挿入するノードを空けるために，
+ *  ヒープの下に向かって空ノードを移動させる．移動前の空ノードの位置を
+ *  p_tmevtnに渡すと，移動後の空ノードの位置（すなわち挿入位置）を返す．
  */
 #ifdef TOPPERS_tmedown
@@ -227,7 +202,7 @@
 	while ((p_child = LCHILD(p_tmevtn)) <= p_last_tmevtn) {
 		/*
-		 *  å·¦å³ã®å­ãã¼ãã®ã¤ãã³ãçºçæå»ãæ¯è¼ãï¼æ©ãæ¹ã®å­ãã¼ã
-		 *  ã®ä½ç½®ãp_childã«è¨­å®ããï¼ä»¥ä¸ã®å­ãã¼ãã¯ï¼ããã§é¸ã°ãã
-		 *  æ¹ã®å­ãã¼ãã®ãã¨ï¼
+		 *  左右の子ノードのイベント発生時刻を比較し，早い方の子ノード
+		 *  の位置をp_childに設定する．以下の子ノードは，ここで選ばれた
+		 *  方の子ノードのこと．
 		 */
 		if (p_child + 1 <= p_last_tmevtn
@@ -238,8 +213,6 @@
 
 		/*
-		 *  å­ãã¼ãã®ã¤ãã³ãçºçæå»ã®æ¹ãé
-ãï¼ã¾ãã¯åãï¼ãªãã°ï¼
-		 *  p_tmevtnãæ¿å
-¥ä½ç½®ãªã®ã§ã«ã¼ããæããï¼
+		 *  子ノードのイベント発生時刻の方が遅い（または同じ）ならば，
+		 *  p_tmevtnが挿入位置なのでループを抜ける．
 		 */
 		if (EVTTIM_LE(evttim, p_child->p_tmevtb->evttim)) {
@@ -248,5 +221,5 @@
 
 		/*
-		 *  å­ãã¼ããp_tmevtnã®ä½ç½®ã«ç§»åãããï¼
+		 *  子ノードをp_tmevtnの位置に移動させる．
 		 */
 		*p_tmevtn = *p_child;
@@ -254,5 +227,5 @@
 
 		/*
-		 *  p_tmevtnãå­ãã¼ãã®ä½ç½®ã«æ´æ°ï¼
+		 *  p_tmevtnを子ノードの位置に更新．
 		 */
 		p_tmevtn = p_child;
@@ -264,8 +237,8 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãã¸ã®è¿½å 
+ *  タイムイベントヒープへの追加
  *
- *  p_tmevtbã§æå®ããã¿ã¤ã ã¤ãã³ããã­ãã¯ãï¼ã¿ã¤ã ã¤ãã³ããã¼ãã«
- *  è¿½å ããï¼
+ *  p_tmevtbで指定したタイムイベントブロックを，タイムイベントヒープに
+ *  追加する．
  */
 Inline void
@@ -275,12 +248,10 @@
 
 	/*
-	 *  p_last_tmevtnãã¤ã³ã¯ãªã¡ã³ããï¼ããããä¸ã«æ¿å
-¥ä½ç½®ãæ¢ãï¼
+	 *  p_last_tmevtnをインクリメントし，そこから上に挿入位置を探す．
 	 */
 	p_tmevtn = tmevt_up(++p_last_tmevtn, p_tmevtb->evttim);
 
 	/*
-	 *  ã¿ã¤ã ã¤ãã³ããp_tmevtnã®ä½ç½®ã«æ¿å
-¥ããï¼
+	 *  タイムイベントをp_tmevtnの位置に挿入する．
 	 */ 
 	p_tmevtn->p_tmevtb = p_tmevtb;
@@ -289,5 +260,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãããã®åé¤
+ *  タイムイベントヒープからの削除
  */
 Inline void
@@ -299,5 +270,5 @@
 
 	/*
-	 *  åé¤ã«ããã¿ã¤ã ã¤ãã³ããã¼ããç©ºã«ãªãå ´åã¯ä½ãããªãï¼
+	 *  削除によりタイムイベントヒープが空になる場合は何もしない．
 	 */
 	if (--p_last_tmevtn < p_top_tmevtn) {
@@ -306,17 +277,13 @@
 
 	/*
-	 *  åé¤ãããã¼ãã®ä½ç½®ã«æå¾ã®ãã¼ãï¼p_last_tmevtn + 1 ã®ä½ç½®ã®
-	 *  ãã¼ãï¼ãæ¿å
-¥ãï¼ãããé©åãªä½ç½®ã¸ç§»åãããï¼å®éã«ã¯ï¼æå¾
-	 *  ã®ãã¼ããå®éã«æ¿å
-¥ããã®ã§ã¯ãªãï¼åé¤ãããã¼ãã®ä½ç½®ãç©ºãã¼
-	 *  ãã«ãªãã®ã§ï¼æå¾ã®ãã¼ããæ¿å
-¥ãã¹ãä½ç½®ã¸åãã¦ç©ºãã¼ããç§»
-	 *  åãããï¼
+	 *  削除したノードの位置に最後のノード（p_last_tmevtn + 1 の位置の
+	 *  ノード）を挿入し，それを適切な位置へ移動させる．実際には，最後
+	 *  のノードを実際に挿入するのではなく，削除したノードの位置が空ノー
+	 *  ドになるので，最後のノードを挿入すべき位置へ向けて空ノードを移
+	 *  動させる．
 	 *
-	 *  æå¾ã®ãã¼ãã®ã¤ãã³ãçºçæå»ãï¼åé¤ãããã¼ãã®è¦ªãã¼ãã®ã¤
-	 *  ãã³ãçºçæå»ããåã®å ´åã«ã¯ï¼ä¸ã«åãã£ã¦æ¿å
-¥ä½ç½®ãæ¢ãï¼ã
-	 *  ãã§ãªãå ´åã«ã¯ï¼ä¸ã«åãã£ã¦æ¢ãï¼
+	 *  最後のノードのイベント発生時刻が，削除したノードの親ノードのイ
+	 *  ベント発生時刻より前の場合には，上に向かって挿入位置を探す．そ
+	 *  うでない場合には，下に向かって探す．
 	 */
 	event_evttim = (p_last_tmevtn + 1)->p_tmevtb->evttim;
@@ -325,5 +292,5 @@
 						(p_parent = PARENT(p_tmevtn))->p_tmevtb->evttim)) {
 		/*
-		 *  è¦ªãã¼ããp_tmevtnã®ä½ç½®ã«ç§»åãããï¼
+		 *  親ノードをp_tmevtnの位置に移動させる．
 		 */
 		*p_tmevtn = *p_parent;
@@ -331,6 +298,5 @@
 
 		/*
-		 *  åé¤ãããã¼ãã®è¦ªãã¼ãããä¸ã«åãã£ã¦æ¿å
-¥ä½ç½®ãæ¢ãï¼
+		 *  削除したノードの親ノードから上に向かって挿入位置を探す．
 		 */
 		p_tmevtn = tmevt_up(p_parent, event_evttim);
@@ -338,6 +304,5 @@
 	else {
 		/*
-		 *  åé¤ãããã¼ãããä¸ã«åãã£ã¦æ¿å
-¥ä½ç½®ãæ¢ãï¼
+		 *  削除したノードから下に向かって挿入位置を探す．
 		 */
 		p_tmevtn = tmevt_down(p_tmevtn, event_evttim);
@@ -345,6 +310,5 @@
 
 	/*
-	 *  æå¾ã®ãã¼ããp_tmevtnã®ä½ç½®ã«æ¿å
-¥ããï¼
+	 *  最後のノードをp_tmevtnの位置に挿入する．
 	 */ 
 	*p_tmevtn = *(p_last_tmevtn + 1);
@@ -353,6 +317,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãã®å
-é ­ã®ãã¼ãã®åé¤
+ *  タイムイベントヒープの先頭のノードの削除
  */
 Inline TMEVTB *
@@ -364,16 +327,13 @@
 
 	/*
-	 *  åé¤ã«ããã¿ã¤ã ã¤ãã³ããã¼ããç©ºã«ãªãå ´åã¯ä½ãããªãï¼
+	 *  削除によりタイムイベントヒープが空になる場合は何もしない．
 	 */
 	if (--p_last_tmevtn >= p_top_tmevtn) {
 		/*
-		 *  ã«ã¼ããã¼ãã«æå¾ã®ãã¼ãï¼p_last_tmevtn + 1 ã®ä½ç½®ã®ãã¼
-		 *  ãï¼ãæ¿å
-¥ãï¼ãããé©åãªä½ç½®ã¸ç§»åãããï¼å®éã«ã¯ï¼æå¾
-		 *  ã®ãã¼ããå®éã«æ¿å
-¥ããã®ã§ã¯ãªãï¼ã«ã¼ããã¼ããç©ºãã¼ã
-		 *  ã«ãªãã®ã§ï¼æå¾ã®ãã¼ããæ¿å
-¥ãã¹ãä½ç½®ã¸åãã¦ç©ºãã¼ãã
-		 *  ç§»åãããï¼
+		 *  ルートノードに最後のノード（p_last_tmevtn + 1 の位置のノー
+		 *  ド）を挿入し，それを適切な位置へ移動させる．実際には，最後
+		 *  のノードを実際に挿入するのではなく，ルートノードが空ノード
+		 *  になるので，最後のノードを挿入すべき位置へ向けて空ノードを
+		 *  移動させる．
 		 */
 		event_evttim = (p_last_tmevtn + 1)->p_tmevtb->evttim;
@@ -381,6 +341,5 @@
 
 		/*
-		 *  æå¾ã®ãã¼ããp_tmevtnã®ä½ç½®ã«æ¿å
-¥ããï¼
+		 *  最後のノードをp_tmevtnの位置に挿入する．
 		 */ 
 		*p_tmevtn = *(p_last_tmevtn + 1);
@@ -391,5 +350,5 @@
 
 /*
- *  ç¾å¨ã®ã¤ãã³ãæå»ã®æ´æ°
+ *  現在のイベント時刻の更新
  */
 #ifdef TOPPERS_tmecur
@@ -401,6 +360,6 @@
 	EVTTIM	previous_evttim;
 
-	new_hrtcnt = target_hrt_get_current();			/*ï¼»ASPD1013ï¼½*/
-	hrtcnt_advance = new_hrtcnt - current_hrtcnt;	/*ï¼»ASPD1014ï¼½*/
+	new_hrtcnt = target_hrt_get_current();			/*［ASPD1013］*/
+	hrtcnt_advance = new_hrtcnt - current_hrtcnt;	/*［ASPD1014］*/
 #ifdef TCYC_HRTCNT
 	if (new_hrtcnt < current_hrtcnt) {
@@ -410,15 +369,15 @@
 
 	previous_evttim = current_evttim;
-	current_evttim += (EVTTIM) hrtcnt_advance;		/*ï¼»ASPD1015ï¼½*/
-	current_hrtcnt = new_hrtcnt;					/*ï¼»ASPD1016ï¼½*/
-	boundary_evttim = current_evttim - BOUNDARY_MARGIN;	/*ï¼»ASPD1011ï¼½*/
+	current_evttim += (EVTTIM) hrtcnt_advance;		/*［ASPD1015］*/
+	current_hrtcnt = new_hrtcnt;					/*［ASPD1016］*/
+	boundary_evttim = current_evttim - BOUNDARY_MARGIN;	/*［ASPD1011］*/
 
 	if (monotonic_evttim - previous_evttim < (EVTTIM) hrtcnt_advance) {
 #ifdef UINT64_MAX
 		if (current_evttim < monotonic_evttim) {
-			systim_offset += 1LLU << 32;			/*ï¼»ASPD1045ï¼½*/
+			systim_offset += 1LLU << 32;			/*［ASPD1045］*/
 		}
 #endif /* UINT64_MAX */
-		monotonic_evttim = current_evttim;			/*ï¼»ASPD1042ï¼½*/
+		monotonic_evttim = current_evttim;			/*［ASPD1042］*/
 	}
 }
@@ -427,8 +386,7 @@
 
 /*
- *  ç¾å¨ã®ã¤ãã³ãæå»ãé
-ãæ¹ã«ä¸¸ããã¤ãã³ãæå»ã®ç®åºï¼»ASPD1027ï¼½
+ *  現在のイベント時刻を遅い方に丸めたイベント時刻の算出［ASPD1027］
  *
- *  ç¾å¨ã®ã¤ãã³ãæå»ãæ´æ°ããå¾ã«å¼ã¶ãã¨ãæ³å®ãã¦ããï¼
+ *  現在のイベント時刻を更新した後に呼ぶことを想定している．
  */
 Inline EVTTIM
@@ -439,5 +397,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ã®è¨­å®
+ *  高分解能タイマ割込みの発生タイミングの設定
  */
 #ifdef TOPPERS_tmeset
@@ -449,16 +407,16 @@
 
 	if (p_last_tmevtn < p_top_tmevtn) {
-		target_hrt_set_event(HRTCNT_BOUND);			/*ï¼»ASPD1007ï¼½*/
+		target_hrt_set_event(HRTCNT_BOUND);			/*［ASPD1007］*/
 	}
 	else if (EVTTIM_LE(top_evttim, current_evttim)) {
-		target_hrt_raise_event();					/*ï¼»ASPD1017ï¼½*/
+		target_hrt_raise_event();					/*［ASPD1017］*/
 	}
 	else {
 		hrtcnt = (HRTCNT)(top_evttim - current_evttim);
 		if (hrtcnt > HRTCNT_BOUND) {
-			target_hrt_set_event(HRTCNT_BOUND);		/*ï¼»ASPD1006ï¼½*/
+			target_hrt_set_event(HRTCNT_BOUND);		/*［ASPD1006］*/
 		}
 		else {
-			target_hrt_set_event(hrtcnt);			/*ï¼»ASPD1002ï¼½*/
+			target_hrt_set_event(hrtcnt);			/*［ASPD1002］*/
 		}
 	}
@@ -468,6 +426,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã­ãã¯ã®ãã¼ãã¸ã®æ¿å
-¥
+ *  タイムイベントブロックのヒープへの挿入
  */
 #ifdef TOPPERS_tmereg
@@ -482,5 +439,5 @@
 
 /*
- *  ç¸å¯¾æéæå®ã«ããã¿ã¤ã ã¤ãã³ãã®ç»é²
+ *  相対時間指定によるタイムイベントの登録
  *  
  */
@@ -491,5 +448,5 @@
 {
 	/*
-	 *  ç¾å¨ã®ã¤ãã³ãæå»ã¨ã¿ã¤ã ã¤ãã³ãã®çºçæå»ãæ±ããï¼»ASPD1026ï¼½ï¼
+	 *  現在のイベント時刻とタイムイベントの発生時刻を求める［ASPD1026］．
 	 */
 	update_current_evttim();
@@ -497,12 +454,11 @@
 
 	/*
-	 *  ã¿ã¤ã ã¤ãã³ããã­ãã¯ããã¼ãã«æ¿å
-¥ããï¼»ASPD1030ï¼½ï¼
+	 *  タイムイベントブロックをヒープに挿入する［ASPD1030］．
 	 */
 	tmevtb_insert(p_tmevtb);
 
 	/*
-	 *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ãè¨­å®ããï¼»ASPD1031ï¼½
-	 *  ï¼»ASPD1034ï¼½ï¼
+	 *  高分解能タイマ割込みの発生タイミングを設定する［ASPD1031］
+	 *  ［ASPD1034］．
 	 */
 	if (!in_signal_time && p_tmevtb->p_tmevtn == p_top_tmevtn) {
@@ -514,5 +470,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãã®ç»é²è§£é¤
+ *  タイムイベントの登録解除
  */
 #ifdef TOPPERS_tmedeq
@@ -524,5 +480,5 @@
 
 	/*
-	 *  ã¿ã¤ã ã¤ãã³ããã­ãã¯ããã¼ãããåé¤ããï¼»ASPD1039ï¼½ï¼
+	 *  タイムイベントブロックをヒープから削除する［ASPD1039］．
 	 */
 	p_tmevtn = p_tmevtb->p_tmevtn;
@@ -530,5 +486,5 @@
 
 	/*
-	 *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ãè¨­å®ããï¼»ASPD1040ï¼½ï¼
+	 *  高分解能タイマ割込みの発生タイミングを設定する［ASPD1040］．
 	 */
 	if (!in_signal_time && p_tmevtn == p_top_tmevtn) {
@@ -541,5 +497,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®èª¿æ´æã®ã¨ã©ã¼ãã§ãã¯
+ *  システム時刻の調整時のエラーチェック
  */
 #ifdef TOPPERS_tmechk
@@ -549,8 +505,8 @@
 {
 	if (adjtim > 0) {
-		return(p_last_tmevtn >= p_top_tmevtn	/*ï¼»NGKI3588ï¼½*/
+		return(p_last_tmevtn >= p_top_tmevtn	/*［NGKI3588］*/
 					&& EVTTIM_LE(top_evttim, current_evttim - TMAX_ADJTIM));
 	}
-	else if (adjtim < 0) {						/*ï¼»NGKI3589ï¼½*/
+	else if (adjtim < 0) {						/*［NGKI3589］*/
 		return(monotonic_evttim - current_evttim >= -TMIN_ADJTIM);
 	}
@@ -561,5 +517,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããçºçããã¾ã§ã®æéã®è¨ç®
+ *  タイムイベントが発生するまでの時間の計算
  */
 #ifdef TOPPERS_tmeltim
@@ -571,6 +527,5 @@
 
 	/*
-	 *  ç¾å¨ã®ã¤ãã³ãæå»ãé
-ãæ¹ã«ä¸¸ããæå»ãæ±ããï¼»ASPD1050ï¼½ï¼
+	 *  現在のイベント時刻を遅い方に丸めた時刻を求める［ASPD1050］．
 	 */
 	update_current_evttim();
@@ -578,10 +533,10 @@
 
 	/*
-	 *  ã¿ã¤ã ã¤ãã³ãçºçã¾ã§ã®ç¸å¯¾æéãæ±ããï¼»ASPD1049ï¼½ï¼
+	 *  タイムイベント発生までの相対時間を求める［ASPD1049］．
 	 */
 	evttim = p_tmevtb->evttim;
 	if (EVTTIM_LE(evttim, current_evttim_ub)) {
 		/*
-		 *  ã¿ã¤ã ã¤ãã³ãã®çºçæå»ãéãã¦ããå ´åã«ã¯0ãè¿ãï¼»NGKI0552ï¼½ï¼
+		 *  タイムイベントの発生時刻を過ぎている場合には0を返す［NGKI0552］．
 		 */
 		return(0U);
@@ -595,5 +550,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®å¦ç
+ *  高分解能タイマ割込みの処理
  */
 #ifdef TOPPERS_sigtim
@@ -609,21 +564,21 @@
 
 	lock_cpu();
-	in_signal_time = true;							/*ï¼»ASPD1033ï¼½*/
+	in_signal_time = true;							/*［ASPD1033］*/
 
 	do {
 		/*
-		 *  ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããªããã°ã«ã¼ããæããï¼»ASPD1020ï¼½ï¼
+		 *  コールバック関数を呼び出さなければループを抜ける［ASPD1020］．
 		 */
 		callflag = false;
 
 		/*
-		 *  ç¾å¨ã®ã¤ãã³ãæå»ãæ±ããï¼»ASPD1022ï¼½ï¼
+		 *  現在のイベント時刻を求める［ASPD1022］．
 		 */
 		update_current_evttim();
 
 		/*
-		 *  çºçæå»ãcurrent_evttimä»¥åã®ã¿ã¤ã ã¤ãã³ããããã°ï¼ã¿ã¤
-		 *  ã ã¤ãã³ããã¼ãããåé¤ãï¼ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºã
-		 *  ï¼»ASPD1018ï¼½ï¼»ASPD1019ï¼½ï¼
+		 *  発生時刻がcurrent_evttim以前のタイムイベントがあれば，タイ
+		 *  ムイベントヒープから削除し，コールバック関数を呼び出す
+		 *  ［ASPD1018］［ASPD1019］．
 		 */
 		while (p_last_tmevtn >= p_top_tmevtn
@@ -633,12 +588,12 @@
 			callflag = true;
 		}
-	} while (callflag);								/*ï¼»ASPD1020ï¼½*/
-
-	/*
-	 *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ãè¨­å®ããï¼»ASPD1025ï¼½ï¼
+	} while (callflag);								/*［ASPD1020］*/
+
+	/*
+	 *  高分解能タイマ割込みの発生タイミングを設定する［ASPD1025］．
 	 */
 	set_hrt_event();
 
-	in_signal_time = false;							/*ï¼»ASPD1033ï¼½*/
+	in_signal_time = false;							/*［ASPD1033］*/
 	unlock_cpu();
 }
Index: azure_iot_hub/trunk/asp3_dcre/kernel/time_event.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/time_event.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/time_event.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã¿ã¤ã ã¤ãã³ãç®¡çã¢ã¸ã¥ã¼ã«
+ *		タイムイベント管理モジュール
  */
 
@@ -67,94 +52,90 @@
 
 /*
- *  ã¤ãã³ãæå»ã®ãã¼ã¿åã®å®ç¾©ï¼»ASPD1001ï¼½
- *
- *  ã¿ã¤ã ã¤ãã³ããã¼ãã«ç»é²ããã¿ã¤ã ã¤ãã³ãã®çºçæå»ãè¡¨ç¾ããã
- *  ãã®ãã¼ã¿åï¼ãªã¼ããããä½æ¸ã®ããã«ï¼32ãããã§æ±ãï¼
+ *  イベント時刻のデータ型の定義［ASPD1001］
+ *
+ *  タイムイベントヒープに登録するタイムイベントの発生時刻を表現するた
+ *  めのデータ型．オーバヘッド低減のために，32ビットで扱う．
  */
 typedef uint32_t	EVTTIM;
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãä¸­ã®ãã¼ãã®ãã¼ã¿åã®åæ¹åç
-§
+ *  タイムイベントヒープ中のノードのデータ型の前方参照
  */
 typedef union time_event_node TMEVTN;
 
 /* 
- *  ã¿ã¤ã ã¤ãã³ããã­ãã¯ã®ãã¼ã¿åã®å®ç¾©
- */
-typedef void	(*CBACK)(void *);	/* ã³ã¼ã«ããã¯é¢æ°ã®å */
+ *  タイムイベントブロックのデータ型の定義
+ */
+typedef void	(*CBACK)(void *);	/* コールバック関数の型 */
 
 typedef struct time_event_block {
-	EVTTIM	evttim;			/* ã¿ã¤ã ã¤ãã³ãã®çºçæå» */
-	TMEVTN	*p_tmevtn;		/* ã¿ã¤ã ã¤ãã³ããã¼ãä¸­ã§ã®ä½ç½® */
-	CBACK	callback;		/* ã³ã¼ã«ããã¯é¢æ° */
-	void	*arg;			/* ã³ã¼ã«ããã¯é¢æ°ã¸æ¸¡ãå¼æ° */
+	EVTTIM	evttim;			/* タイムイベントの発生時刻 */
+	TMEVTN	*p_tmevtn;		/* タイムイベントヒープ中での位置 */
+	CBACK	callback;		/* コールバック関数 */
+	void	*arg;			/* コールバック関数へ渡す引数 */
 } TMEVTB;
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãä¸­ã®ãã¼ãã®ãã¼ã¿åã®å®ç¾©
- *
- *  ã¿ã¤ã ã¤ãã³ããã¼ãã®å
-é ­ã®ãã¼ãï¼tmevt_heap[0]ï¼ã«ï¼æå¾ã®ä½¿ç¨é 
- *  åãæããã¤ã³ã¿ï¼p_lastï¼ãæ ¼ç´ãï¼ããä»¥éãã¿ã¤ã ã¤ãã³ããã¼ã
- *  ã¨ãã¦ä½¿ç¨ããï¼(tmevt_heap[0].p_last - tmevt_heap) ãï¼ã¿ã¤ã ã¤ã
- *  ã³ããã¼ãã«ç»é²ããã¦ããã¿ã¤ã ã¤ãã³ãã®æ°ã¨ãªãï¼
+ *  タイムイベントヒープ中のノードのデータ型の定義
+ *
+ *  タイムイベントヒープの先頭のノード（tmevt_heap[0]）に，最後の使用領
+ *  域を指すポインタ（p_last）を格納し，それ以降をタイムイベントヒープ
+ *  として使用する．(tmevt_heap[0].p_last - tmevt_heap) が，タイムイベ
+ *  ントヒープに登録されているタイムイベントの数となる．
  */
 union time_event_node {
-	TMEVTB	*p_tmevtb;		/* å¯¾å¿ããã¿ã¤ã ã¤ãã³ããã­ãã¯ */
-	TMEVTN	*p_last;		/* ã¿ã¤ã ã¤ãã³ããã¼ãã®æå¾ã®ä½¿ç¨é å */
+	TMEVTB	*p_tmevtb;		/* 対応するタイムイベントブロック */
+	TMEVTN	*p_last;		/* タイムイベントヒープの最後の使用領域 */
 };
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã¼ãï¼kernel_cfg.cï¼
+ *  タイムイベントヒープ（kernel_cfg.c）
  */
 extern TMEVTN	tmevt_heap[];
 
 /*
- *  å¢çã¤ãã³ãæå»ï¼»ASPD1008ï¼½
+ *  境界イベント時刻［ASPD1008］
  */
 extern EVTTIM	boundary_evttim;
 
 /*
- *  ç¾å¨ã®ã¤ãã³ãæå»ã¨å¢çã¤ãã³ãæå»ã®å·®ï¼»ASPD1010ï¼½
+ *  現在のイベント時刻と境界イベント時刻の差［ASPD1010］
  */
 #define BOUNDARY_MARGIN		(200000000U)
 
 /*
- *  æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®ã¤ãã³ãæå»ï¼»ASPD1012ï¼½
+ *  最後に現在時刻を算出した時点でのイベント時刻［ASPD1012］
  */
 extern EVTTIM	current_evttim;
 
 /*
- *  æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ï¼»ASPD1012ï¼½
+ *  最後に現在時刻を算出した時点での高分解能タイマのカウント値［ASPD1012］
  */
 extern HRTCNT	current_hrtcnt;
 
 /*
- *  æãé²ãã§ããæã®ã¤ãã³ãæå»ï¼»ASPD1041ï¼½
+ *  最も進んでいた時のイベント時刻［ASPD1041］
  */
 extern EVTTIM	monotonic_evttim;
 
 /*
- *  ã·ã¹ãã æå»ã®ãªãã»ããï¼»ASPD1043ï¼½
- *
- *  get_timã§åç
-§ããã·ã¹ãã æå»ã¨monotonic_evttimã®å·®ãä¿æããï¼
+ *  システム時刻のオフセット［ASPD1043］
+ *
+ *  get_timで参照するシステム時刻とmonotonic_evttimの差を保持する．
  */
 extern SYSTIM	systim_offset;
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®å¦çä¸­ã§ãããã¨ãç¤ºããã©ã°ï¼»ASPD1032ï¼½
+ *  高分解能タイマ割込みの処理中であることを示すフラグ［ASPD1032］
  */
 extern bool_t	in_signal_time;
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãç®¡çã¢ã¸ã¥ã¼ã«ã®åæå
+ *  タイムイベント管理モジュールの初期化
  */
 extern void	initialize_tmevt(void);
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãã®æ¿å
-¥ä½ç½®ã®æ¢ç´¢
+ *  タイムイベントの挿入位置の探索
  */
 extern TMEVTN	*tmevt_up(TMEVTN *p_tmevtn, EVTTIM evttim);
@@ -162,57 +143,57 @@
 
 /*
- *  ç¾å¨ã®ã¤ãã³ãæå»ã®æ´æ°
- *
- *  current_evttimã¨current_hrtcntãï¼ç¾å¨ã®å¤ã«æ´æ°ããï¼
+ *  現在のイベント時刻の更新
+ *
+ *  current_evttimとcurrent_hrtcntを，現在の値に更新する．
  */
 extern void		update_current_evttim(void);
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ã®è¨­å®
- *
- *  ç¾å¨ã®ã¤ãã³ãæå»ãåå¾ããå¾ã«å¼ã³åºããã¨ãæ³å®ãã¦ããï¼
+ *  高分解能タイマ割込みの発生タイミングの設定
+ *
+ *  現在のイベント時刻を取得した後に呼び出すことを想定している．
  */
 extern void		set_hrt_event(void);
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãã®ç»é²
- *
- *  p_tmevtbã§æå®ããã¿ã¤ã ã¤ãã³ããã­ãã¯ãç»é²ããï¼ã¿ã¤ã ã¤ãã³ã
- *  ã®çºçæå»ï¼ã³ã¼ã«ããã¯é¢æ°ï¼ã³ã¼ã«ããã¯é¢æ°ã¸æ¸¡ãå¼æ°ã¯ï¼
- *  p_tmevtbãæãã¿ã¤ã ã¤ãã³ããã­ãã¯ä¸­ã«è¨­å®ãã¦ããï¼
+ *  タイムイベントの登録
+ *
+ *  p_tmevtbで指定したタイムイベントブロックを登録する．タイムイベント
+ *  の発生時刻，コールバック関数，コールバック関数へ渡す引数は，
+ *  p_tmevtbが指すタイムイベントブロック中に設定しておく．
  */
 extern void		tmevtb_register(TMEVTB *p_tmevtb);
 
 /*
- *  ç¸å¯¾æéæå®ã«ããã¿ã¤ã ã¤ãã³ãã®ç»é²
- *
- *  timeã§æå®ããç¸å¯¾æéãçµéããå¾ã«ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã
- *  ããã«ï¼p_tmevtbã§æå®ããã¿ã¤ã ã¤ãã³ããã­ãã¯ãç»é²ããï¼ã³ã¼ã«
- *  ããã¯é¢æ°ï¼ã³ã¼ã«ããã¯é¢æ°ã¸æ¸¡ãå¼æ°ã¯ï¼p_tmevtbãæãã¿ã¤ã ã¤ã
- *  ã³ããã­ãã¯ä¸­ã«è¨­å®ãã¦ããï¼
+ *  相対時間指定によるタイムイベントの登録
+ *
+ *  timeで指定した相対時間が経過した後にコールバック関数が呼び出される
+ *  ように，p_tmevtbで指定したタイムイベントブロックを登録する．コール
+ *  バック関数，コールバック関数へ渡す引数は，p_tmevtbが指すタイムイベ
+ *  ントブロック中に設定しておく．
  */
 extern void		tmevtb_enqueue(TMEVTB *p_tmevtb, RELTIM time);
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãã®ç»é²è§£é¤
+ *  タイムイベントの登録解除
  */
 extern void		tmevtb_dequeue(TMEVTB *p_tmevtb);
 
 /*
- *  ã·ã¹ãã æå»ã®èª¿æ´æã®ã¨ã©ã¼ãã§ãã¯
- *
- *  adjtimã§æå®ãããæéã®åï¼ã·ã¹ãã æå»ãèª¿æ´ãã¦ãããå¤å®ããï¼
- *  èª¿æ´ãã¦ã¯ãªããªãå ´åã«trueï¼ããã§ãªãå ´åã«falseãè¿ãï¼ç¾å¨ã®ã¤
- *  ãã³ãæå»ãåå¾ããå¾ã«å¼ã³åºããã¨ãæ³å®ãã¦ããï¼
+ *  システム時刻の調整時のエラーチェック
+ *
+ *  adjtimで指定された時間の分，システム時刻を調整してよいか判定する．
+ *  調整してはならない場合にtrue，そうでない場合にfalseを返す．現在のイ
+ *  ベント時刻を取得した後に呼び出すことを想定している．
  */
 extern bool_t	check_adjtim(int_t adjtim);
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããçºçããã¾ã§ã®æéã®è¨ç®
+ *  タイムイベントが発生するまでの時間の計算
  */
 extern RELTIM	tmevt_lefttim(TMEVTB *p_tmevtb);
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®å¦ç
+ *  高分解能タイマ割込みの処理
  */
 extern void	signal_time(void);
Index: azure_iot_hub/trunk/asp3_dcre/kernel/time_manage.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/time_manage.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/time_manage.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã·ã¹ãã æå»ç®¡çæ©è½
+ *		システム時刻管理機能
  */
 
@@ -70,5 +55,5 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
+ *  トレースログマクロのデフォルト定義
  */
 #ifndef LOG_SET_TIM_ENTER
@@ -105,5 +90,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®è¨­å®ï¼»NGKI3563ï¼½
+ *  システム時刻の設定［NGKI3563］
  */
 #ifdef TOPPERS_set_tim
@@ -115,9 +100,9 @@
 
 	LOG_SET_TIM_ENTER(systim);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI3564ï¼½ï¼»NGKI3565ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI3564］［NGKI3565］*/
 
 	lock_cpu();
-	update_current_evttim();					/*ï¼»ASPD1059ï¼½*/
-	systim_offset = systim - monotonic_evttim;	/*ï¼»ASPD1060ï¼½*/
+	update_current_evttim();					/*［ASPD1059］*/
+	systim_offset = systim - monotonic_evttim;	/*［ASPD1060］*/
 	ercd = E_OK;
 	unlock_cpu();
@@ -131,6 +116,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®åç
-§ï¼»NGKI2349ï¼½
+ *  システム時刻の参照［NGKI2349］
  */
 #ifdef TOPPERS_get_tim
@@ -142,9 +126,9 @@
 
 	LOG_GET_TIM_ENTER(p_systim);
-	CHECK_TSKCTX_UNL();							/*ï¼»NGKI2350ï¼½ï¼»NGKI2351ï¼½*/
+	CHECK_TSKCTX_UNL();							/*［NGKI2350］［NGKI2351］*/
 
 	lock_cpu();
-	update_current_evttim();					/*ï¼»ASPD1057ï¼½*/
-	*p_systim = systim_offset + monotonic_evttim;	/*ï¼»ASPD1058ï¼½*/
+	update_current_evttim();					/*［ASPD1057］*/
+	*p_systim = systim_offset + monotonic_evttim;	/*［ASPD1058］*/
 	ercd = E_OK;
 	unlock_cpu();
@@ -158,5 +142,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®èª¿æ´ï¼»NGKI3581ï¼½
+ *  システム時刻の調整［NGKI3581］
  */
 #ifdef TOPPERS_adj_tim
@@ -169,16 +153,16 @@
 
 	LOG_ADJ_TIM_ENTER(adjtim);
-	CHECK_UNL();								/*ï¼»NGKI3583ï¼½*/
+	CHECK_UNL();								/*［NGKI3583］*/
 	CHECK_PAR(TMIN_ADJTIM <= adjtim && adjtim <= TMAX_ADJTIM);
-												/*ï¼»NGKI3584ï¼½*/
+												/*［NGKI3584］*/
 	lock_cpu();
-	update_current_evttim();					/*ï¼»ASPD1051ï¼½*/
-	if (check_adjtim(adjtim)) {					/*ï¼»ASPD1052ï¼½*/
+	update_current_evttim();					/*［ASPD1051］*/
+	if (check_adjtim(adjtim)) {					/*［ASPD1052］*/
 		ercd = E_OBJ;
 	}
 	else {
 		previous_evttim = current_evttim;
-		current_evttim += adjtim;				/*ï¼»ASPD1053ï¼½*/
-		boundary_evttim = current_evttim - BOUNDARY_MARGIN;	/*ï¼»ASPD1055ï¼½*/
+		current_evttim += adjtim;				/*［ASPD1053］*/
+		boundary_evttim = current_evttim - BOUNDARY_MARGIN;	/*［ASPD1055］*/
 
 		if (adjtim > 0
@@ -189,8 +173,8 @@
 			}
 #endif /* UINT64_MAX */
-			monotonic_evttim = current_evttim;	/*ï¼»ASPD1054ï¼½*/
+			monotonic_evttim = current_evttim;	/*［ASPD1054］*/
 		}
 
-		set_hrt_event();						/*ï¼»ASPD1056ï¼½*/
+		set_hrt_event();						/*［ASPD1056］*/
 		ercd = E_OK;
 	}
@@ -205,12 +189,8 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®åç
-§ï¼»NGKI3569ï¼½
+ *  高分解能タイマの参照［NGKI3569］
  *
- *  ä»»æã®ç¶æ
-ããå¼ã³åºããããã«ããããã«ï¼SILã®å
-¨å²è¾¼ã¿ã­ãã¯ç¶æ
-ã®
- *  å¶å¾¡æ©è½ãç¨ãã¦ï¼æä»å¶å¾¡ãå®ç¾ãã¦ããï¼»NGKI3572ï¼½ï¼
+ *  任意の状態から呼び出せるようにするために，SILの全割込みロック状態の
+ *  制御機能を用いて，排他制御を実現している［NGKI3572］．
  */
 #ifdef TOPPERS_fch_hrt
@@ -225,5 +205,5 @@
 
 	SIL_LOC_INT();
-	hrtcnt = target_hrt_get_current();			/*ï¼»NGKI3571ï¼½*/
+	hrtcnt = target_hrt_get_current();			/*［NGKI3571］*/
 	SIL_UNL_INT();
 
@@ -235,5 +215,5 @@
 
 /*
- *  éç¥æ¹æ³ã®ã¨ã©ã¼ãã§ãã¯
+ *  通知方法のエラーチェック
  */
 #ifdef TOPPERS_chknfy
@@ -319,5 +299,5 @@
 
 /*
- *  éç¥ãã³ãã©
+ *  通知ハンドラ
  */
 #ifdef TOPPERS_nfyhdr
Index: azure_iot_hub/trunk/asp3_dcre/kernel/wait.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/wait.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/wait.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,7 +42,5 @@
 
 /*
- *		å¾
-ã¡ç¶æ
-ç®¡çã¢ã¸ã¥ã¼ã«
+ *		待ち状態管理モジュール
  */
 
@@ -66,7 +49,5 @@
 
 /*
- *  å¾
-ã¡ç¶æ
-ã¸ã®é·ç§»ï¼ã¿ã¤ã ã¢ã¦ãæå®ï¼
+ *  待ち状態への遷移（タイムアウト指定）
  */
 #ifdef TOPPERS_waimake
@@ -92,6 +73,5 @@
 
 /*
- *  å¾
-ã¡è§£é¤
+ *  待ち解除
  */
 #ifdef TOPPERS_waicmp
@@ -108,6 +88,5 @@
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãã«ä¼´ãå¾
-ã¡è§£é¤
+ *  タイムアウトに伴う待ち解除
  */
 #ifdef TOPPERS_waitmo
@@ -124,6 +103,5 @@
 
 	/*
-	 *  ããã§åªå
-åº¦ã®é«ãå²è¾¼ã¿ãåãä»ããï¼
+	 *  ここで優先度の高い割込みを受け付ける．
 	 */
 	unlock_cpu();
@@ -145,6 +123,5 @@
 
 	/*
-	 *  ããã§åªå
-åº¦ã®é«ãå²è¾¼ã¿ãåãä»ããï¼
+	 *  ここで優先度の高い割込みを受け付ける．
 	 */
 	unlock_cpu();
@@ -156,14 +133,8 @@
 
 /*
- *  å®è¡ä¸­ã®ã¿ã¹ã¯ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã¸ã®æ¿å
-¥
+ *  実行中のタスクの同期・通信オブジェクトの待ちキューへの挿入
  *
- *  å®è¡ä¸­ã®ã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã¸æ¿å
-¥ããï¼ãª
- *  ãã¸ã§ã¯ãã®å±æ§ã«å¿ãã¦ï¼FIFOé ã¾ãã¯ã¿ã¹ã¯åªå
-åº¦é ã§æ¿å
-¥ããï¼
+ *  実行中のタスクを，同期・通信オブジェクトの待ちキューへ挿入する．オ
+ *  ブジェクトの属性に応じて，FIFO順またはタスク優先度順で挿入する．
  */
 Inline void
@@ -179,7 +150,5 @@
 
 /*
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡ç¶æ
-ã¸ã®é·ç§»
+ *  同期・通信オブジェクトに対する待ち状態への遷移
  */
 #ifdef TOPPERS_wobjwai
@@ -210,6 +179,5 @@
 
 /*
- *  å¾
-ã¡ã­ã¥ã¼ã®åæå
+ *  待ちキューの初期化
  */
 #ifdef TOPPERS_iniwque
Index: azure_iot_hub/trunk/asp3_dcre/kernel/wait.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/kernel/wait.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/kernel/wait.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,7 +42,5 @@
 
 /*
- *		å¾
-ã¡ç¶æ
-ç®¡çã¢ã¸ã¥ã¼ã«
+ *		待ち状態管理モジュール
  */
 
@@ -71,15 +54,8 @@
 
 /*
- *  ã¿ã¹ã¯ã®åªå
-åº¦é ã®å¾
-ã¡ã­ã¥ã¼ã¸ã®æ¿å
-¥
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãï¼ã¿ã¹ã¯åªå
-åº¦é ã®ã­ã¥ã¼p_queueã«æ¿å
-¥ããï¼
- *  ã­ã¥ã¼ã®ä¸­ã«åãåªå
-åº¦ã®ã¿ã¹ã¯ãããå ´åã«ã¯ï¼ãã®æå¾ã«æ¿å
-¥ããï¼
+ *  タスクの優先度順の待ちキューへの挿入
+ *
+ *  p_tcbで指定されるタスクを，タスク優先度順のキューp_queueに挿入する．
+ *  キューの中に同じ優先度のタスクがある場合には，その最後に挿入する．
  */
 Inline void
@@ -99,14 +75,9 @@
 
 /*
- *  å¾
-ã¡ç¶æ
-ã¸ã®é·ç§»
- *
- *  å®è¡ä¸­ã®ã¿ã¹ã¯ãå¾
-ã¡ç¶æ
-ã«é·ç§»ãããï¼å
-·ä½çã«ã¯ï¼å®è¡ä¸­ã®ã¿ã¹ã¯ã
- *  ã¬ãã£ã­ã¥ã¼ããåé¤ãï¼TCBã®p_winfoãã£ã¼ã«ãï¼WINFOã®p_tmevtbãã£ã¼
- *  ã«ããè¨­å®ããï¼
+ *  待ち状態への遷移
+ *
+ *  実行中のタスクを待ち状態に遷移させる．具体的には，実行中のタスクを
+ *  レディキューから削除し，TCBのp_winfoフィールド，WINFOのp_tmevtbフィー
+ *  ルドを設定する．
  */
 Inline void
@@ -119,30 +90,19 @@
 
 /*
- *  å¾
-ã¡ç¶æ
-ã¸ã®é·ç§»ï¼ã¿ã¤ã ã¢ã¦ãæå®ï¼
- *
- *  å®è¡ä¸­ã®ã¿ã¹ã¯ãï¼ã¿ã¤ã ã¢ã¦ãæå®ä»ãã§å¾
-ã¡ç¶æ
-ã«é·ç§»ãããï¼å
-·ä½
- *  çã«ã¯ï¼å®è¡ä¸­ã®ã¿ã¹ã¯ãã¬ãã£ã­ã¥ã¼ããåé¤ãï¼TCBã®p_winfoãã£ã¼
- *  ã«ãï¼WINFOã®p_tmevtbãã£ã¼ã«ããè¨­å®ããï¼ã¾ãï¼ã¿ã¤ã ã¤ãã³ãã
- *  ã­ãã¯ãç»é²ããï¼
+ *  待ち状態への遷移（タイムアウト指定）
+ *
+ *  実行中のタスクを，タイムアウト指定付きで待ち状態に遷移させる．具体
+ *  的には，実行中のタスクをレディキューから削除し，TCBのp_winfoフィー
+ *  ルド，WINFOのp_tmevtbフィールドを設定する．また，タイムイベントブ
+ *  ロックを登録する．
  */
 extern void	make_wait_tmout(WINFO *p_winfo, TMEVTB *p_tmevtb, TMO tmout);
 
 /*
- *  å¾
-ã¡è§£é¤ã®ããã®ã¿ã¹ã¯ç¶æ
-ã®æ´æ°
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãï¼å¾
-ã¡è§£é¤ããããã¿ã¹ã¯ç¶æ
-ãæ´æ°ããï¼
- *  å¾
-ã¡è§£é¤ããã¿ã¹ã¯ãå®è¡ã§ããç¶æ
-ã«ãªãå ´åã¯ï¼ã¬ãã£ã­ã¥ã¼ã«ã¤ãª
- *  ãï¼
+ *  待ち解除のためのタスク状態の更新
+ *
+ *  p_tcbで指定されるタスクを，待ち解除するようタスク状態を更新する．
+ *  待ち解除するタスクが実行できる状態になる場合は，レディキューにつな
+ *  ぐ．
  */
 Inline void
@@ -153,8 +113,5 @@
 	if (!TSTAT_SUSPENDED(p_tcb->tstat)) {
 		/*
-		 *  å¾
-ã¡ç¶æ
-ããå®è¡ã§ããç¶æ
-ã¸ã®é·ç§»
+		 *  待ち状態から実行できる状態への遷移
 		 */
 		p_tcb->tstat = TS_RUNNABLE;
@@ -164,9 +121,5 @@
 	else {
 		/*
-		 *  äºéå¾
-ã¡ç¶æ
-ããå¼·å¶å¾
-ã¡ç¶æ
-ã¸ã®é·ç§»
+		 *  二重待ち状態から強制待ち状態への遷移
 		 */
 		p_tcb->tstat = TS_SUSPENDED;
@@ -176,11 +129,8 @@
 
 /*
- *  ãªãã¸ã§ã¯ãå¾
-ã¡ã­ã¥ã¼ããã®åé¤
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼ã«ã¤
- *  ãªããã¦ããã°ï¼å¾
-ã¡ã­ã¥ã¼ããåé¤ããï¼
+ *  オブジェクト待ちキューからの削除
+ *
+ *  p_tcbで指定されるタスクが，同期・通信オブジェクトの待ちキューにつ
+ *  ながれていれば，待ちキューから削除する．
  */
 Inline void
@@ -193,10 +143,8 @@
 
 /*
- *  æéå¾
-ã¡ã®ããã®ã¿ã¤ã ã¤ãã³ããã­ãã¯ã®ç»é²è§£é¤
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã«å¯¾ãã¦ï¼æéå¾
-ã¡ã®ããã®ã¿ã¤ã ã¤ãã³ãã
- *  ã­ãã¯ãç»é²ããã¦ããã°ï¼ãããç»é²è§£é¤ããï¼
+ *  時間待ちのためのタイムイベントブロックの登録解除
+ *
+ *  p_tcbで指定されるタスクに対して，時間待ちのためのタイムイベントブ
+ *  ロックが登録されていれば，それを登録解除する．
  */
 Inline void
@@ -209,38 +157,25 @@
 
 /*
- *  å¾
-ã¡è§£é¤
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ã®å¾
-ã¡ç¶æ
-ãè§£é¤ããï¼å
-·ä½çã«ã¯ï¼ã¿ã¤ã ã¤
- *  ãã³ããã­ãã¯ãç»é²ããã¦ããã°ï¼ãããç»é²è§£é¤ããï¼ã¾ãï¼ã¿ã¹ã¯
- *  ç¶æ
-ãæ´æ°ãï¼å¾
-ã¡è§£é¤ããã¿ã¹ã¯ããã®è¿å¤ãE_OKã¨ããï¼å¾
-ã¡ã­ã¥ã¼
- *  ããã®åé¤ã¯è¡ããªãï¼
+ *  待ち解除
+ *
+ *  p_tcbで指定されるタスクの待ち状態を解除する．具体的には，タイムイ
+ *  ベントブロックが登録されていれば，それを登録解除する．また，タスク
+ *  状態を更新し，待ち解除したタスクからの返値をE_OKとする．待ちキュー
+ *  からの削除は行わない．
  */
 extern void	wait_complete(TCB *p_tcb);
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãã«ä¼´ãå¾
-ã¡è§£é¤
- *
- *  p_tcbã§æå®ãããã¿ã¹ã¯ãï¼å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªããã¦ããã°å¾
-ã¡ã­ã¥ã¼
- *  ããåé¤ãï¼ã¿ã¹ã¯ç¶æ
-ãæ´æ°ããï¼ã¾ãï¼å¾
-ã¡è§£é¤ããã¿ã¹ã¯ããã®è¿
- *  å¤ãï¼wait_tmoutã§ã¯E_TMOUTï¼wait_tmout_okã§ã¯E_OKã¨ããï¼
- *
- *  wait_tmout_okã¯ï¼dly_tskã§ä½¿ãããã®ãã®ã§ï¼å¾
-ã¡ã­ã¥ã¼ããåé¤ãã
- *  å¦çãè¡ããªãï¼
- *
- *  ãããã®é¢æ°ãï¼ã¿ã¤ã ã¤ãã³ãã®ã³ã¼ã«ããã¯é¢æ°ã¨ãã¦ç¨ããããã®
- *  ãã®ã§ï¼å²è¾¼ã¿ãã³ãã©ããå¼ã³åºããããã¨ãæ³å®ãã¦ããï¼
+ *  タイムアウトに伴う待ち解除
+ *
+ *  p_tcbで指定されるタスクが，待ちキューにつながれていれば待ちキュー
+ *  から削除し，タスク状態を更新する．また，待ち解除したタスクからの返
+ *  値を，wait_tmoutではE_TMOUT，wait_tmout_okではE_OKとする．
+ *
+ *  wait_tmout_okは，dly_tskで使うためのもので，待ちキューから削除する
+ *  処理を行わない．
+ *
+ *  いずれの関数も，タイムイベントのコールバック関数として用いるための
+ *  もので，割込みハンドラから呼び出されることを想定している．
  */
 extern void	wait_tmout(TCB *p_tcb);
@@ -248,13 +183,8 @@
 
 /*
- *  å¾
-ã¡ã­ã¥ã¼ã®å
-é ­ã®ã¿ã¹ã¯ID
- *
- *  p_wait_queueã§æå®ããå¾
-ã¡ã­ã¥ã¼ã®å
-é ­ã®ã¿ã¹ã¯IDãè¿ãï¼å¾
-ã¡ã­ã¥ã¼
- *  ãç©ºã®å ´åã«ã¯ï¼TSK_NONEãè¿ãï¼
+ *  待ちキューの先頭のタスクID
+ *
+ *  p_wait_queueで指定した待ちキューの先頭のタスクIDを返す．待ちキュー
+ *  が空の場合には，TSK_NONEを返す．
  */
 Inline ID
@@ -270,76 +200,49 @@
 
 /*
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨åæä½ã«ã¼ãã³
- *
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã¨ç®¡çãã­ãã¯ã®å
-é ­é¨åã¯å
-±
- *  éã«ãªã£ã¦ããï¼ä»¥ä¸ã¯ï¼ãã®å
-±éé¨åãæ±ãããã®åããã³ã«ã¼ãã³ç¾¤
- *  ã§ããï¼
- *
- *  è¤æ°ã®å¾
-ã¡ã­ã¥ã¼ãæã¤åæã»éä¿¡ãªãã¸ã§ã¯ãã®å ´åï¼å
-é ­ä»¥å¤ã®å¾
-ã¡
- *  ã­ã¥ã¼ãæä½ããå ´åã«ã¯ï¼ãããã®ã«ã¼ãã³ã¯ä½¿ããªãï¼ã¾ãï¼ãªãã¸ã§
- *  ã¯ãå±æ§ã®TA_TPRIããããåç
-§ããã®ã§ï¼ãã®ããããä»ã®ç®çã«ä½¿ã£ã¦
- *  ããå ´åãï¼ãããã®ã«ã¼ãã³ã¯ä½¿ããªãï¼
- */
-
-/*
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãã­ãã¯ã®å
-±éé¨å
+ *  同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン
+ *
+ *  同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共
+ *  通になっている．以下は，その共通部分を扱うための型およびルーチン群
+ *  である．
+ *
+ *  複数の待ちキューを持つ同期・通信オブジェクトの場合，先頭以外の待ち
+ *  キューを操作する場合には，これらのルーチンは使えない．また，オブジェ
+ *  クト属性のTA_TPRIビットを参照するので，このビットを他の目的に使って
+ *  いる場合も，これらのルーチンは使えない．
+ */
+
+/*
+ *  同期・通信オブジェクトの初期化ブロックの共通部分
  */
 typedef struct wait_object_initialization_block {
-	ATR			wobjatr;		/* ãªãã¸ã§ã¯ãå±æ§ */
+	ATR			wobjatr;		/* オブジェクト属性 */
 } WOBJINIB;
 
 /*
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ã®å
-±éé¨å
+ *  同期・通信オブジェクトの管理ブロックの共通部分
  */
 typedef struct wait_object_control_block {
-	QUEUE		wait_queue;		/* å¾
-ã¡ã­ã¥ã¼ */
-	const WOBJINIB *p_wobjinib;	/* åæåãã­ãã¯ã¸ã®ãã¤ã³ã¿ */
+	QUEUE		wait_queue;		/* 待ちキュー */
+	const WOBJINIB *p_wobjinib;	/* 初期化ブロックへのポインタ */
 } WOBJCB;
 
 /*
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡æ
-å ±ãã­ãã¯ã®å
-±éé¨å
- *
- *  ãã®æ§é ä½ã¯ï¼å¾
-ã¡æ
-å ±ãã­ãã¯ï¼WINFOï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨
- *  èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ãããï¼WINFOãå
-±ç¨ä½ã§å®ç¾©ããã¦ããã
- *  ãã«ï¼1ã¤ã®ãã£ã¼ã«ãã¨ãã¦å«ãã¦ããï¼
+ *  同期・通信オブジェクトの待ち情報ブロックの共通部分
+ *
+ *  この構造体は，待ち情報ブロック（WINFO）を拡張（オブジェクト指向言
+ *  語の継承に相当）したものであるが，WINFOが共用体で定義されているた
+ *  めに，1つのフィールドとして含めている．
  */
 typedef struct wait_object_waiting_information {
-	WINFO	winfo;			/* æ¨æºã®å¾
-ã¡æ
-å ±ãã­ãã¯ */
-	WOBJCB	*p_wobjcb;		/* å¾
-ã¡ãªãã¸ã§ã¯ãã®ç®¡çãã­ãã¯ */
+	WINFO	winfo;			/* 標準の待ち情報ブロック */
+	WOBJCB	*p_wobjcb;		/* 待ちオブジェクトの管理ブロック */
 } WINFO_WOBJ;
 
 /*
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡ç¶æ
-ã¸ã®é·ç§»
+ *  同期・通信オブジェクトに対する待ち状態への遷移
  *  
- *  å®è¡ä¸­ã®ã¿ã¹ã¯ãå¾
-ã¡ç¶æ
-ã«é·ç§»ããï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾
-ã¡ã­ã¥ã¼
- *  ã«ã¤ãªãï¼ã¾ãï¼å¾
-ã¡æ
-å ±ãã­ãã¯ï¼WINFOï¼ã®p_wobjcbãè¨­å®ããï¼
- *  wobj_make_wait_tmoutã¯ï¼ã¿ã¤ã ã¤ãã³ããã­ãã¯ã®ç»é²ãè¡ãï¼
+ *  実行中のタスクを待ち状態に遷移させ，同期・通信オブジェクトの待ちキュー
+ *  につなぐ．また，待ち情報ブロック（WINFO）のp_wobjcbを設定する．
+ *  wobj_make_wait_tmoutは，タイムイベントブロックの登録も行う．
  */
 extern void	wobj_make_wait(WOBJCB *p_wobjcb, WINFO_WOBJ *p_winfo);
@@ -348,13 +251,8 @@
 
 /*
- *  ã¿ã¹ã¯åªå
-åº¦å¤æ´æã®å¦ç
- *
- *  åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡ç¶æ
-ã«ããã¿ã¹ã¯ã®åªå
-åº¦ãå¤æ´ã
- *  ããå ´åã«ï¼å¾
-ã¡ã­ã¥ã¼ã®ä¸­ã§ã®ã¿ã¹ã¯ã®ä½ç½®ãä¿®æ­£ããï¼
+ *  タスク優先度変更時の処理
+ *
+ *  同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ
+ *  れた場合に，待ちキューの中でのタスクの位置を修正する．
  */
 Inline void
@@ -368,12 +266,8 @@
 
 /*
- *  å¾
-ã¡ã­ã¥ã¼ã®åæå
- *
- *  å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªããã¦ããã¿ã¹ã¯ããã¹ã¦å¾
-ã¡è§£é¤ããï¼å¾
-ã¡è§£é¤ãã
- *  ã¿ã¹ã¯ããã®è¿å¤ã¯ï¼E_DLTã¨ããï¼
+ *  待ちキューの初期化
+ *
+ *  待ちキューにつながれているタスクをすべて待ち解除する．待ち解除した
+ *  タスクからの返値は，E_DLTとする．
  */
 extern void	init_wait_queue(QUEUE *p_wait_queue);
Index: azure_iot_hub/trunk/asp3_dcre/library/log_output.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/library/log_output.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/library/log_output.c	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã®ãã©ã¼ãããåºå
+ *		システムログのフォーマット出力
  */
 
@@ -64,8 +49,8 @@
 
 /*
- *  æ°å¤ãæå­åã«å¤æ
+ *  数値を文字列に変換
  */
 #define CONVERT_BUFLEN	((sizeof(ULOGPAR) * CHAR_BIT + 2) / 3)
-										/* ULOGPARåã®æ°å¤ã®æå¤§æå­æ° */
+										/* ULOGPAR型の数値の最大文字数 */
 static void
 convert(ULOGPAR val, uint_t radix, const char *radchar,
@@ -99,5 +84,5 @@
 
 /*
- *  æå­åæ´å½¢åºå
+ *  文字列整形出力
  */
 static const char raddec[] = "0123456789";
@@ -180,6 +165,5 @@
 
 /*
- *  ã­ã°æ
-å ±ã®åºå
+ *  ログ情報の出力
  */
 void
@@ -197,6 +181,5 @@
 	default:
 		/*
-		 *  ä»ã®ç¨®å¥ã®ã­ã°æ
-å ±ã«ã¯å¯¾å¿ãã¦ããªãï¼
+		 *  他の種別のログ情報には対応していない．
 		 */
 		break;
@@ -205,6 +188,5 @@
 
 /*
- *  ã­ã°æ
-å ±åªå¤±ã¡ãã»ã¼ã¸ã®åºå
+ *  ログ情報喪失メッセージの出力
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/library/strerror.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/library/strerror.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/library/strerror.c	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		ã¨ã©ã¼ã¡ãã»ã¼ã¸æå­åãè¿ãé¢æ°
+ *		エラーメッセージ文字列を返す関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/library/t_perror.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/library/t_perror.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/library/t_perror.c	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		ã¨ã©ã¼ã¡ãã»ã¼ã¸ã®åºå
+ *		エラーメッセージの出力
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/library/vasyslog.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/library/vasyslog.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/library/vasyslog.c	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,5 +41,5 @@
 
 /*
- *		å¯å¤æ°å¼æ°ã®ã·ã¹ãã ã­ã°ã©ã¤ãã©ãª
+ *		可変数引数のシステムログライブラリ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/mbed/Makefile.mbed
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/mbed/Makefile.mbed	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/mbed/Makefile.mbed	(revision 389)
@@ -1,4 +1,4 @@
 #
-#		Makefile ã®mbedï¼RZ/A1ç¨ï¼
+#		Makefile のmbed（RZ/A1用）
 #
 #  $Id$
@@ -6,10 +6,10 @@
 
 #
-#  mbedãã£ã¬ã¯ããªåã®å®ç¾©
+#  mbedディレクトリ名の定義
 #
 MBEDDIR = $(SRCDIR)/mbed
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES := $(INCLUDES)\
@@ -23,5 +23,5 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(SYSSVC_DIRS)\
Index: azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,6 +40,5 @@
 
 /*
- *		FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©ã¤ã
+ *		FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
  */
 
@@ -66,5 +50,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã®ãªã¼ãã³
+ *  シリアルI/Oポートのオープン
  */
 void
@@ -77,5 +61,5 @@
 	if (VAR_initialized) {
 		/*
-		 *  æ¢ã«åæåãã¦ããå ´åã¯ãäºéã«åæåããªãï¼
+		 *  既に初期化している場合は、二重に初期化しない．
 		 */
 		return;
@@ -92,5 +76,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã®ã¯ã­ã¼ãº
+ *  シリアルI/Oポートのクローズ
  */
 void
@@ -104,5 +88,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã¸ã®æå­éä¿¡
+ *  シリアルI/Oポートへの文字送信
  */
 bool_t
@@ -120,5 +104,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãããã®æå­åä¿¡
+ *  シリアルI/Oポートからの文字受信
  */
 int_t
@@ -136,5 +120,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  シリアルI/Oポートからのコールバックの許可
  */
 void
@@ -155,5 +139,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  シリアルI/Oポートからのコールバックの禁止
  */
 void
@@ -174,5 +158,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã«å¯¾ããåä¿¡å²è¾¼ã¿å¦ç
+ *  シリアルI/Oポートに対する受信割込み処理
  */
 void
@@ -184,5 +168,5 @@
 	if (serial_readable(obj)) {
 		/*
-		 *  åä¿¡éç¥ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãï¼
+		 *  受信通知コールバックルーチンを呼び出す．
 		 */
 		ciSIOCBR_readyReceive();
@@ -191,5 +175,5 @@
 
 /*
- *  ã·ãªã¢ã«I/Oãã¼ãã«å¯¾ããéä¿¡å²è¾¼ã¿å¦ç
+ *  シリアルI/Oポートに対する送信割込み処理
  */
 void
@@ -201,5 +185,5 @@
 	if (serial_writable(obj)) {
 		/*
-		 *  éä¿¡å¯è½ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãï¼
+		 *  送信可能コールバックルーチンを呼び出す．
 		 */
 		ciSIOCBR_readySend();
Index: azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.cdl	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,20 +41,17 @@
 
 /*
- *		FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©
- *		ã¤ãã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドラ
+ *		イバのコンポーネント記述
  */
 
 /*
- *  FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ã«é¢ããå®ç¾©ã®ã¤ã³
- *  ãã¼ã
+ *  FIFO内蔵シリアルコミュニケーションインタフェースに関する定義のイン
+ *  ポート
  */
 import_C("serial_api.h");
 
 /*
- *  FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©ã¤ã
- *  ã®ã»ã«ã¿ã¤ã
+ *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
+ *  のセルタイプ
  */
 celltype tMbedSerial {
@@ -80,8 +62,8 @@
 		int32_t tx;
 		int32_t rx;
-		uint32_t	baudRate;		/* ãã¼ã¬ã¼ãã®è¨­å®å¤ */
+		uint32_t	baudRate;		/* ボーレートの設定値 */
 	};
 	var {
-		bool_t		initialized = false;	/* åæåæ¸ã¿ */
+		bool_t		initialized = false;	/* 初期化済み */
 		serial_t	serial;
 	};
Index: azure_iot_hub/trunk/asp3_dcre/mbed/target/device.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/mbed/target/device.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/mbed/target/device.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  *
  *  Copyright (C) 2014-2018 Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -64,5 +49,5 @@
 #include "scif.h"
 
- /* PWMåºå(490Hz) */
+ /* PWM出力(490Hz) */
 #define TPU_BASE_COUNTER	(48000000 / 4 / 490)
 
@@ -136,6 +121,5 @@
 		return E_OK;
 
-	/* æ±ç¨å
-¥åºåãã¼ãã«è¨­å® */
+	/* 汎用入出力ポートに設定 */
 	switch (pin) {
 	case D0:
@@ -175,7 +159,7 @@
 	}
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
@@ -184,9 +168,9 @@
 	case D0:
 		if (gpio) {
-			/* P21ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P21ã¨ãã */
+			/* P21端子機能制御レジスタ P21とする */
 			sil_wrb_mem(MPC_P21PFS_ADDR, 0x00);
 		}
 		else {
-			/* P21ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCA3ã¨ãã */
+			/* P21端子機能制御レジスタ TIOCA3とする */
 			sil_wrb_mem(MPC_P21PFS_ADDR, 0x03);
 		}
@@ -196,9 +180,9 @@
 	case D1:
 		if (gpio) {
-			/* P20ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P20ã¨ãã */
+			/* P20端子機能制御レジスタ P20とする */
 			sil_wrb_mem(MPC_P20PFS_ADDR, 0x00);
 		}
 		else {
-			/* P20ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCB3ã¨ãã */
+			/* P20端子機能制御レジスタ TIOCB3とする */
 			sil_wrb_mem(MPC_P20PFS_ADDR, 0x03);
 		}
@@ -208,9 +192,9 @@
 	case D2:
 		if (gpio) {
-			/* P22ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P22ã¨ãã */
+			/* P22端子機能制御レジスタ P22とする */
 			sil_wrb_mem(MPC_P22PFS_ADDR, 0x00);
 		}
 		else {
-			/* P22ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCC3ã¨ãã */
+			/* P22端子機能制御レジスタ TIOCC3とする */
 			sil_wrb_mem(MPC_P22PFS_ADDR, 0x03);
 		}
@@ -220,9 +204,9 @@
 	case D3:
 		if (gpio) {
-			/* P23ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P23ã¨ãã */
+			/* P23端子機能制御レジスタ P23とする */
 			sil_wrb_mem(MPC_P23PFS_ADDR, 0x00);
 		}
 		else {
-			/* P23ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCD3ã¨ãã */
+			/* P23端子機能制御レジスタ TIOCD3とする */
 			sil_wrb_mem(MPC_P23PFS_ADDR, 0x03);
 		}
@@ -232,9 +216,9 @@
 	case D4:
 		if (gpio) {
-			/* P24ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P24ã¨ãã */
+			/* P24端子機能制御レジスタ P24とする */
 			sil_wrb_mem(MPC_P24PFS_ADDR, 0x00);
 		}
 		else {
-			/* P24ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCB4ã¨ãã */
+			/* P24端子機能制御レジスタ TIOCB4とする */
 			sil_wrb_mem(MPC_P24PFS_ADDR, 0x03);
 		}
@@ -244,9 +228,9 @@
 	case D5:
 		if (gpio) {
-			/* P25ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P25ã¨ãã */
+			/* P25端子機能制御レジスタ P25とする */
 			sil_wrb_mem(MPC_P25PFS_ADDR, 0x00);
 		}
 		else {
-			/* P25ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCA4ã¨ãã */
+			/* P25端子機能制御レジスタ TIOCA4とする */
 			sil_wrb_mem(MPC_P25PFS_ADDR, 0x03);
 		}
@@ -256,9 +240,9 @@
 	case D6:
 		if (gpio) {
-			/* P32ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P32ã¨ãã */
+			/* P32端子機能制御レジスタ P32とする */
 			sil_wrb_mem(MPC_P32PFS_ADDR, 0x00);
 		}
 		else {
-			/* P32ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCC0ã¨ãã */
+			/* P32端子機能制御レジスタ TIOCC0とする */
 			sil_wrb_mem(MPC_P32PFS_ADDR, 0x03);
 		}
@@ -268,9 +252,9 @@
 	case D7:
 		if (gpio) {
-			/* P33ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ P33ã¨ãã */
+			/* P33端子機能制御レジスタ P33とする */
 			sil_wrb_mem(MPC_P33PFS_ADDR, 0x00);
 		}
 		else {
-			/* P33ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TIOCD0ã¨ãã */
+			/* P33端子機能制御レジスタ TIOCD0とする */
 			sil_wrb_mem(MPC_P33PFS_ADDR, 0x03);
 		}
@@ -281,8 +265,8 @@
 	}
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+	/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 
-	/* æ©è½ãã¼ãã«è¨­å® */
+	/* 機能ポートに設定 */
 	if (!gpio) {
 		switch (pin) {
@@ -427,6 +411,5 @@
 void gpio_mode(gpio_t *obj, PinMode mode)
 {
-	/* æ±ç¨å
-¥åºåãã¼ãã«è¨­å® */
+	/* 汎用入出力ポートに設定 */
 	change_pin_function(obj->pin, true);
 
@@ -438,6 +421,5 @@
 void gpio_dir(gpio_t *obj, PinDirection direction)
 {
-	/* æ±ç¨å
-¥åºåãã¼ãã«è¨­å® */
+	/* 汎用入出力ポートに設定 */
 	change_pin_function(obj->pin, true);
 
@@ -614,16 +596,15 @@
 {
 	/*
-	* ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®(S12AD)
+	* モジュールストップ機能の設定(S12AD)
 	*/
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 		sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA17_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/* 12bitADCåæå */
-	sil_wrh_mem(S12AD_ADEXICR_ADDR, 0x0000);	/* æ¸©åº¦ã»ã³ãµåºåãå
-é¨åºæºé»å§éé¸æ */
-	sil_wrh_mem(S12AD_ADANS0_ADDR, 0x00FF);		/* å¤æãã¼ãAN000ï½AN007é¸æãAN008ï½AN015éé¸æ */
-	sil_wrh_mem(S12AD_ADANS1_ADDR, 0x0000);		/* å¤æãã¼ãAN016ï½AN020éé¸æ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* 書込み禁止 */
+
+	/* 12bitADC初期化 */
+	sil_wrh_mem(S12AD_ADEXICR_ADDR, 0x0000);	/* 温度センサ出力、内部基準電圧非選択 */
+	sil_wrh_mem(S12AD_ADANS0_ADDR, 0x00FF);		/* 変換ポートAN000～AN007選択、AN008～AN015非選択 */
+	sil_wrh_mem(S12AD_ADANS1_ADDR, 0x0000);		/* 変換ポートAN016～AN020非選択 */
 }
 
@@ -687,5 +668,5 @@
 	int i;
 
-	/* ADCã®å¤æçµæåå¾ */
+	/* ADCの変換結果取得 */
 	if ((sil_reb_mem(S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0) {
 		for (i = 0; i < 8; i++) {
@@ -701,5 +682,5 @@
 		}
 
-		/* å¤æéå§ï¼ã·ã³ã°ã«ã¹ã­ã£ã³ã¢ã¼ãï¼ */
+		/* 変換開始（シングルスキャンモード） */
 		sil_wrb_mem(S12AD_ADCSR_ADDR, S12AD_ADCSR_ADST_BIT);
 	}
@@ -716,11 +697,11 @@
 void pwmout_init(pwmout_t* obj, PinName pin)
 {
-	/* PWMåºå(490Hz) */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	/* PWM出力(490Hz) */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
-		sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA13_BIT); /* TPU0ï½TPU5 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/* ã«ã¦ã³ã¿ã¯ã­ãã¯ã®é¸æãã«ã¦ã³ã¿ã¯ãªã¢è¦å ã®é¸æ */
+		sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA13_BIT); /* TPU0～TPU5 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* 書込み禁止 */
+
+	/* カウンタクロックの選択、カウンタクリア要因の選択 */
 	sil_wrb_mem(TPU0_TCR_ADDR, (1 << TPU_TCR_TPSC_OFFSET) | (1 << TPU_TCR_CKEG_OFFSET)
 		| (1 << TPU_TCR_CCLR_OFFSET));
@@ -729,10 +710,10 @@
 	sil_wrb_mem(TPU4_TCR_ADDR, (1 << TPU_TCR_TPSC_OFFSET) | (1 << TPU_TCR_CKEG_OFFSET)
 		| (3 << TPU_TCR_CCLR_OFFSET));
-	/* æ³¢å½¢åºåã¬ãã«ã®é¸æ */
+	/* 波形出力レベルの選択 */
 	sil_wrb_mem(TPU0_TIORL_ADDR, (5 << TPU_TIORL_IOC_OFFSET) | (5 << TPU_TIORL_IOD_OFFSET));
 	sil_wrb_mem(TPU3_TIORH_ADDR, (5 << TPU_TIORH_IOA_OFFSET) | (5 << TPU_TIORH_IOB_OFFSET));
 	sil_wrb_mem(TPU3_TIORL_ADDR, (5 << TPU_TIORL_IOC_OFFSET) | (5 << TPU_TIORL_IOD_OFFSET));
 	sil_wrb_mem(TPU4_TIOR_ADDR, (5 << TPU_TIOR_IOA_OFFSET) | (5 << TPU_TIOR_IOB_OFFSET));
-	/* TGRyã®è¨­å® */
+	/* TGRyの設定 */
 	sil_wrh_mem(TPU0_TGRA_ADDR, TPU_BASE_COUNTER);
 	sil_wrh_mem(TPU0_TGRC_ADDR, 0);
@@ -744,11 +725,11 @@
 	sil_wrh_mem(TPU4_TGRA_ADDR, 0);
 	sil_wrh_mem(TPU4_TGRB_ADDR, 0);
-	/* PWMã¢ã¼ã2ã®è¨­å® */
+	/* PWMモード2の設定 */
 	sil_wrb_mem(TPU0_TMDR_ADDR, 3);
 	sil_wrb_mem(TPU3_TMDR_ADDR, 3);
 	sil_wrb_mem(TPU4_TMDR_ADDR, 3);
-	/* åæåä½è¨­å® */
+	/* 同期動作設定 */
 	sil_wrb_mem(TPUA_TSYR_ADDR, TPU_TSYR_SYNC0_BIT | TPU_TSYR_SYNC3_BIT | TPU_TSYR_SYNC4_BIT);
-	/* ã«ã¦ã³ãåä½éå§ */
+	/* カウント動作開始 */
 	sil_wrb_mem(TPUA_TSTR_ADDR, TPU_TSTR_CST0_BIT | TPU_TSTR_CST3_BIT | TPU_TSTR_CST4_BIT);
 }
@@ -756,5 +737,5 @@
 void pwmout_free(pwmout_t* obj)
 {
-	/* ã«ã¦ã³ãåä½çµäº */
+	/* カウント動作終了 */
 	sil_wrb_mem(TPUA_TSTR_ADDR, 0);
 }
@@ -778,13 +759,12 @@
 {
 	/*
-	 *  ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®
+	 *  モジュールストップ機能の設定
 	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRB_ADDR,
 		sil_rew_mem(SYSTEM_MSTPCRB_ADDR) & ~SCI_MSTPCRB_BIT(base_address));
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* 書込み禁止 */
+
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(base_address), 0x00U);
 
@@ -794,12 +774,10 @@
 		switch (mode) {
 		case sciSerial:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT2_PODR_ADDR,
 				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT);
-			/* TXåºå/RXå
-¥åãã¼ãè¨­å® */
+			/* TX出力/RX入力ポート設定 */
 			sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT) & ~PORT_PDR_B1_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B1_BIT));
 			/* RX CMOS */
@@ -807,33 +785,29 @@
 				(sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm1_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT);
 			break;
 		case sciI2C:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT2_PODR_ADDR,
 				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT);
-			/* SCL,SDA åºåãã¼ãè¨­å® */
+			/* SCL,SDA 出力ポート設定 */
 			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B1_BIT);
-			/* ãã«ã¢ããæå¹ */
+			/* プルアップ有効 */
 			sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) | PORT_PCR_B0_BIT | PORT_PCR_B1_BIT);
-			/* Nãã£ãã«ãªã¼ãã³ãã¬ã¤ã³ */
+			/* Nチャネルオープンドレイン */
 			sil_wrb_mem(PORT2_ODR0_ADDR,
 				(sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK))
 				| (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm1_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT);
 			break;
 		case sciSPIM:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT2_PODR_ADDR,
 				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT | PORT_PODR_B2_BIT);
-			/* MOSIåºå/MISOå
-¥å/SCKå
-¥åºåãã¼ãè¨­å® */
+			/* MOSI出力/MISO入力/SCK入出力ポート設定 */
 			sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B2_BIT) & ~PORT_PDR_B1_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B1_BIT | PORT_PCR_B2_BIT));
 			/* MISO CMOS */
@@ -841,23 +815,23 @@
 				(sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK | PORT_ODR_Pm2_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm1_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT | PORT_PMR_B2_BIT);
 			break;
 		}
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-		/* P20ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD0/SMOSI0/SSDA0ã¨ãã */
+		/* P20端子機能制御レジスタ TXD0/SMOSI0/SSDA0とする */
 		sil_wrb_mem(MPC_P20PFS_ADDR, 0x0A);
-		/* P21ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD0/SMISO0/SSCL0ã¨ãã */
+		/* P21端子機能制御レジスタ RXD0/SMISO0/SSCL0とする */
 		sil_wrb_mem(MPC_P21PFS_ADDR, 0x0A);
 		if (mode == sciSPIM) {
-			/* P22ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK0ã¨ãã */
+			/* P22端子機能制御レジスタ SCK0とする */
 			sil_wrb_mem(MPC_P22PFS_ADDR, 0x0A);
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 		break;
@@ -866,12 +840,10 @@
 		switch (mode) {
 		case sciSerial:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT5_PODR_ADDR,
 				sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B2_BIT);
-			/* TXåºå/RXå
-¥åãã¼ãè¨­å® */
+			/* TX出力/RX入力ポート設定 */
 			sil_wrb_mem(PORT5_PDR_ADDR, (sil_reb_mem(PORT5_PDR_ADDR) | PORT_PDR_B0_BIT) & ~PORT_PDR_B2_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT5_PCR_ADDR, sil_reb_mem(PORT5_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B2_BIT));
 			/* RX CMOS */
@@ -879,33 +851,29 @@
 				(sil_reb_mem(PORT5_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm2_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT5_PMR_ADDR, sil_reb_mem(PORT5_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B2_BIT);
 			break;
 		case sciI2C:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT5_PODR_ADDR,
 				sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B2_BIT);
-			/* SCL,SDA åºåãã¼ãè¨­å® */
+			/* SCL,SDA 出力ポート設定 */
 			sil_wrb_mem(PORT5_PDR_ADDR, sil_reb_mem(PORT5_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B2_BIT);
-			/* ãã«ã¢ããæå¹ */
+			/* プルアップ有効 */
 			sil_wrb_mem(PORT5_PCR_ADDR, sil_reb_mem(PORT5_PCR_ADDR) | PORT_PCR_B0_BIT | PORT_PCR_B2_BIT);
-			/* Nãã£ãã«ãªã¼ãã³ãã¬ã¤ã³ */
+			/* Nチャネルオープンドレイン */
 			sil_wrb_mem(PORT5_ODR0_ADDR,
 				(sil_reb_mem(PORT5_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm2_MASK))
 				| (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm2_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT5_PMR_ADDR, sil_reb_mem(PORT5_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B2_BIT);
 			break;
 		case sciSPIM:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT5_PODR_ADDR,
 				sil_reb_mem(PORT5_PODR_ADDR) | PORT_PODR_B0_BIT | PORT_PODR_B1_BIT | PORT_PODR_B2_BIT);
-			/* MOSIåºå/MISOå
-¥å/SCKå
-¥åºåãã¼ãè¨­å® */
+			/* MOSI出力/MISO入力/SCK入出力ポート設定 */
 			sil_wrb_mem(PORT5_PDR_ADDR, (sil_reb_mem(PORT5_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B1_BIT) & ~PORT_PDR_B2_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT5_PCR_ADDR, sil_reb_mem(PORT5_PCR_ADDR) & ~(PORT_PCR_B0_BIT | PORT_PCR_B1_BIT | PORT_PCR_B2_BIT));
 			/* MISO CMOS */
@@ -913,23 +881,23 @@
 				(sil_reb_mem(PORT5_ODR0_ADDR) & ~(PORT_ODR_Pm0_MASK | PORT_ODR_Pm1_MASK | PORT_ODR_Pm2_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm0_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm1_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT5_PMR_ADDR, sil_reb_mem(PORT5_PMR_ADDR) | PORT_PMR_B0_BIT | PORT_PMR_B1_BIT | PORT_PMR_B1_BIT | PORT_PMR_B2_BIT);
 			break;
 		}
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-		/* P50ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSDA2ã¨ãã */
+		/* P50端子機能制御レジスタ SSDA2とする */
 		sil_wrb_mem(MPC_P50PFS_ADDR, 0x0A);
-		/* P52ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSCL2ã¨ãã */
+		/* P52端子機能制御レジスタ SSCL2とする */
 		sil_wrb_mem(MPC_P52PFS_ADDR, 0x0A);
 		if (mode == sciSPIM) {
-			/* P51ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK2ã¨ãã */
+			/* P51端子機能制御レジスタ SCK2とする */
 			sil_wrb_mem(MPC_P51PFS_ADDR, 0x0A);
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 		break;
@@ -938,12 +906,10 @@
 		switch (mode) {
 		case sciSerial:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT2_PODR_ADDR,
 				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B5_BIT);
-			/* TXåºå/RXå
-¥åãã¼ãè¨­å® */
+			/* TX出力/RX入力ポート設定 */
 			sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT) & ~PORT_PDR_B5_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B3_BIT | PORT_PCR_B5_BIT));
 			/* RX CMOS */
@@ -951,33 +917,29 @@
 				(sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm3_MASK | PORT_ODR_Pm5_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm5_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT | PORT_PMR_B5_BIT);
 			break;
 		case sciI2C:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT2_PODR_ADDR,
 				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B5_BIT);
-			/* SCL,SDA åºåãã¼ãè¨­å® */
+			/* SCL,SDA 出力ポート設定 */
 			sil_wrb_mem(PORT2_PDR_ADDR, sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT | PORT_PDR_B5_BIT);
-			/* ãã«ã¢ããæå¹ */
+			/* プルアップ有効 */
 			sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) | PORT_PCR_B3_BIT | PORT_PCR_B5_BIT);
-			/* Nãã£ãã«ãªã¼ãã³ãã¬ã¤ã³ */
+			/* Nチャネルオープンドレイン */
 			sil_wrb_mem(PORT2_ODR0_ADDR,
 				(sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm3_MASK | PORT_ODR_Pm5_MASK))
 				| (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm5_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT | PORT_PMR_B5_BIT);
 			break;
 		case sciSPIM:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT2_PODR_ADDR,
 				sil_reb_mem(PORT2_PODR_ADDR) | PORT_PODR_B3_BIT | PORT_PODR_B4_BIT | PORT_PODR_B5_BIT);
-			/* MOSIåºå/MISOå
-¥å/SCKå
-¥åºåãã¼ãè¨­å® */
+			/* MOSI出力/MISO入力/SCK入出力ポート設定 */
 			sil_wrb_mem(PORT2_PDR_ADDR, (sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B3_BIT | PORT_PDR_B4_BIT) & ~PORT_PDR_B5_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT2_PCR_ADDR, sil_reb_mem(PORT2_PCR_ADDR) & ~(PORT_PCR_B3_BIT | PORT_PCR_B4_BIT | PORT_PCR_B5_BIT));
 			/* MISO CMOS */
@@ -985,23 +947,23 @@
 				(sil_reb_mem(PORT2_ODR0_ADDR) & ~(PORT_ODR_Pm3_MASK | PORT_ODR_Pm4_MASK | PORT_ODR_Pm5_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm4_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm5_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT2_PMR_ADDR, sil_reb_mem(PORT2_PMR_ADDR) | PORT_PMR_B3_BIT | PORT_PMR_B4_BIT | PORT_PMR_B4_BIT | PORT_PMR_B5_BIT);
 			break;
 		}
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-		/* P23ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSDA2ã¨ãã */
+		/* P23端子機能制御レジスタ SSDA2とする */
 		sil_wrb_mem(MPC_P23PFS_ADDR, 0x0A);
-		/* P25ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SSCL2ã¨ãã */
+		/* P25端子機能制御レジスタ SSCL2とする */
 		sil_wrb_mem(MPC_P25PFS_ADDR, 0x0A);
 		if (mode == sciSPIM) {
-			/* P24ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK2ã¨ãã */
+			/* P24端子機能制御レジスタ SCK2とする */
 			sil_wrb_mem(MPC_P24PFS_ADDR, 0x0A);
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 		break;
@@ -1010,12 +972,10 @@
 		switch (mode) {
 		case sciSerial:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT3_PODR_ADDR,
 				sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT);
-			/* TXåºå/RXå
-¥åãã¼ãè¨­å® */
+			/* TX出力/RX入力ポート設定 */
 			sil_wrb_mem(PORT3_PDR_ADDR, (sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT) & ~PORT_PDR_B3_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT3_PCR_ADDR, sil_reb_mem(PORT3_PCR_ADDR) & ~(PORT_PCR_B2_BIT | PORT_PCR_B3_BIT));
 			/* RX CMOS */
@@ -1023,33 +983,29 @@
 				(sil_reb_mem(PORT3_ODR0_ADDR) & ~(PORT_ODR_Pm2_MASK | PORT_ODR_Pm3_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT | PORT_PMR_B3_BIT);
 			break;
 		case sciI2C:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT3_PODR_ADDR,
 				sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT);
-			/* SCL,SDA åºåãã¼ãè¨­å® */
+			/* SCL,SDA 出力ポート設定 */
 			sil_wrb_mem(PORT3_PDR_ADDR, sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT | PORT_PDR_B3_BIT);
-			/* ãã«ã¢ããæå¹ */
+			/* プルアップ有効 */
 			sil_wrb_mem(PORT3_PCR_ADDR, sil_reb_mem(PORT3_PCR_ADDR) | PORT_PCR_B2_BIT | PORT_PCR_B3_BIT);
-			/* Nãã£ãã«ãªã¼ãã³ãã¬ã¤ã³ */
+			/* Nチャネルオープンドレイン */
 			sil_wrb_mem(PORT3_ODR0_ADDR,
 				(sil_reb_mem(PORT3_ODR0_ADDR) & ~(PORT_ODR_Pm2_MASK | PORT_ODR_Pm3_MASK))
 				| (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm2_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm3_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT | PORT_PMR_B3_BIT);
 			break;
 		case sciSPIM:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORT3_PODR_ADDR,
 				sil_reb_mem(PORT3_PODR_ADDR) | PORT_PODR_B2_BIT | PORT_PODR_B3_BIT | PORT_PODR_B4_BIT);
-			/* MOSIåºå/MISOå
-¥å/SCKå
-¥åºåãã¼ãè¨­å® */
+			/* MOSI出力/MISO入力/SCK入出力ポート設定 */
 			sil_wrb_mem(PORT3_PDR_ADDR, (sil_reb_mem(PORT3_PDR_ADDR) | PORT_PDR_B2_BIT | PORT_PDR_B4_BIT) & ~PORT_PDR_B3_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORT3_PCR_ADDR, sil_reb_mem(PORT3_PCR_ADDR) & ~(PORT_PCR_B2_BIT | PORT_PCR_B3_BIT | PORT_PCR_B4_BIT));
 			/* MISO CMOS */
@@ -1057,24 +1013,24 @@
 				(sil_reb_mem(PORT3_ODR0_ADDR) & ~(PORT_ODR_Pm2_MASK | PORT_ODR_Pm3_MASK | PORT_ODR_Pm4_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm2_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm3_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm4_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORT3_PMR_ADDR, sil_reb_mem(PORT3_PMR_ADDR) | PORT_PMR_B2_BIT | PORT_PMR_B3_BIT | PORT_PMR_B4_BIT);
 			break;
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-		/* P32ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD6/SMOSI6/SSDA6ã¨ãã */
+		/* P32端子機能制御レジスタ TXD6/SMOSI6/SSDA6とする */
 		sil_wrb_mem(MPC_P32PFS_ADDR, 0x0A);
-		/* P33ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD6/SMISO6/SSCL6ã¨ãã */
+		/* P33端子機能制御レジスタ RXD6/SMISO6/SSCL6とする */
 		sil_wrb_mem(MPC_P33PFS_ADDR, 0x0A);
 		if (mode == sciSPIM) {
-			/* P34ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK6ã¨ãã */
+			/* P34端子機能制御レジスタ SCK6とする */
 			sil_wrb_mem(MPC_P34PFS_ADDR, 0x0A);
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 		break;
@@ -1083,12 +1039,10 @@
 		switch (mode) {
 		case sciSerial:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORTC_PODR_ADDR,
 				sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B6_BIT | PORT_PODR_B7_BIT);
-			/* TXåºå/RXå
-¥åãã¼ãè¨­å® */
+			/* TX出力/RX入力ポート設定 */
 			sil_wrb_mem(PORTC_PDR_ADDR, (sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B6_BIT) & ~PORT_PDR_B7_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PCR_ADDR) & ~(PORT_PCR_B6_BIT | PORT_PCR_B7_BIT));
 			/* RX CMOS */
@@ -1096,33 +1050,29 @@
 				(sil_reb_mem(PORTC_ODR0_ADDR) & ~(PORT_ODR_Pm6_MASK | PORT_ODR_Pm7_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm6_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm7_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORTC_PMR_ADDR, sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT);
 			break;
 		case sciI2C:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORTC_PODR_ADDR,
 				sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B6_BIT | PORT_PODR_B7_BIT);
-			/* SCL,SDA åºåãã¼ãè¨­å® */
+			/* SCL,SDA 出力ポート設定 */
 			sil_wrb_mem(PORTC_PDR_ADDR, sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B6_BIT | PORT_PDR_B7_BIT);
-			/* ãã«ã¢ããæå¹ */
+			/* プルアップ有効 */
 			sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PCR_ADDR) | PORT_PCR_B6_BIT | PORT_PCR_B7_BIT);
-			/* Nãã£ãã«ãªã¼ãã³ãã¬ã¤ã³ */
+			/* Nチャネルオープンドレイン */
 			sil_wrb_mem(PORTC_ODR0_ADDR,
 				(sil_reb_mem(PORTC_ODR0_ADDR) & ~(PORT_ODR_Pm6_MASK | PORT_ODR_Pm7_MASK))
 				| (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm6_OFFSET) | (PORT_ODR_NCH_OPEN_DRAIN << PORT_ODR_Pm7_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORTC_PMR_ADDR, sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT);
 			break;
 		case sciSPIM:
-			/* HIGHç¶æ
-ã«è¨­å® */
+			/* HIGH状態に設定 */
 			sil_wrb_mem(PORTC_PODR_ADDR,
 				sil_reb_mem(PORTC_PODR_ADDR) | PORT_PODR_B7_BIT | PORT_PODR_B6_BIT | PORT_PODR_B5_BIT);
-			/* MOSIåºå/MISOå
-¥å/SCKå
-¥åºåãã¼ãè¨­å® */
+			/* MOSI出力/MISO入力/SCK入出力ポート設定 */
 			sil_wrb_mem(PORTC_PDR_ADDR, (sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B5_BIT | PORT_PDR_B7_BIT) & ~PORT_PDR_B6_BIT);
-			/* ãã«ã¢ããç¡å¹ */
+			/* プルアップ無効 */
 			sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PCR_ADDR) & ~(PORT_PCR_B5_BIT | PORT_PCR_B7_BIT | PORT_PCR_B6_BIT));
 			/* MISO CMOS */
@@ -1130,24 +1080,24 @@
 				(sil_reb_mem(PORTC_ODR0_ADDR) & ~(PORT_ODR_Pm5_MASK | PORT_ODR_Pm6_MASK | PORT_ODR_Pm7_MASK))
 				| (PORT_ODR_CMOS << PORT_ODR_Pm5_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm6_OFFSET) | (PORT_ODR_CMOS << PORT_ODR_Pm7_OFFSET));
-			/* å¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+			/* 周辺機能として使用 */
 			sil_wrb_mem(PORTC_PMR_ADDR, sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B5_BIT | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT);
 			break;
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+		/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-		/* PC7ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD8/SMOSI8/SSDA8ã¨ãã */
+		/* PC7端子機能制御レジスタ TXD8/SMOSI8/SSDA8とする */
 		sil_wrb_mem(MPC_PC7PFS_ADDR, 0x0A);
-		/* PC6ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD8/SMISO8/SSCL8ã¨ãã */
+		/* PC6端子機能制御レジスタ RXD8/SMISO8/SSCL8とする */
 		sil_wrb_mem(MPC_PC6PFS_ADDR, 0x0A);
 		if (mode == sciSPIM) {
-			/* PC5ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ SCK8ã¨ãã */
+			/* PC5端子機能制御レジスタ SCK8とする */
 			sil_wrb_mem(MPC_PC5PFS_ADDR, 0x0A);
 		}
 
-		/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+		/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 		sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 		break;
@@ -1157,15 +1107,14 @@
 void sci_disable(void *base_address)
 {
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(base_address), 0x00U);
 
 	/*
-	 *  ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®
+	 *  モジュールストップ機能の設定
 	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRB_ADDR,
 		sil_rew_mem(SYSTEM_MSTPCRB_ADDR) | SCI_MSTPCRB_BIT(base_address));
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* 書込み禁止 */
 }
 
@@ -1189,9 +1138,9 @@
 	brr = (brr / 2) + (brr % 2) - 1;
 
-	/* SMRã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããè¨­å® */
-	/* ã¯ã­ãã¯é¸æããã(SMR.CKS[1:0]ããããè¨­å®)ãããä»¥å¤ã®ããããâ0âã«è¨­å® */
+	/* SMRに送信／ 受信フォーマットを設定 */
+	/* クロック選択ビット(SMR.CKS[1:0]ビットを設定)、それ以外のビットを“0”に設定 */
 	sil_wrb_mem(SCI_SMR(base_address), clk);
 
-	/* ãããã¬ã¼ããè¨­å® */
+	/* ビットレートを設定 */
 	sil_wrb_mem(SCI_BRR(base_address), brr);
 }
@@ -1248,12 +1197,12 @@
 	dis_int(obj->tei_intno);
 
-	/* SCIæå¹ */
+	/* SCI有効 */
 	sci_enable(obj->base_address, sciSerial);
 
-	/* SIMR1.IICMããããâ0âã«è¨­å® */
+	/* SIMR1.IICMビットを“0”に設定 */
 	sil_wrb_mem(SCI_SIMR1(obj->base_address),
 		sil_reb_mem(SCI_SIMR1(obj->base_address)) & ~IICM);
 
-	/* SPMR.CKPH, CKPOLããããâ0âã«è¨­å® */
+	/* SPMR.CKPH, CKPOLビットを“0”に設定 */
 	sil_wrb_mem(SCI_SPMR(obj->base_address),
 		sil_reb_mem(SCI_SPMR(obj->base_address)) & ~(CKPH | CKPOL));
@@ -1261,12 +1210,12 @@
 	sci_set_frequency(obj->base_address, /*9600*/115200);
 
-	/* SCMRã¬ã¸ã¹ã¿ã¯SDIRããããâ0âãSINVããããâ0âãSMIFããããâ0âã«è¨­å® */
+	/* SCMRレジスタはSDIRビットを“0”、SINVビットを“0”、SMIFビットを“0”に設定 */
 	sil_wrb_mem(SCI_SCMR(obj->base_address),
 		(sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SINV | SMIF | SDIR)));
 
-	/* SMRã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããè¨­å® */
+	/* SMRに送信／ 受信フォーマットを設定 */
 	serial_format(obj, 8, ParityNone, 1);
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address),
 		(sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE));
@@ -1281,5 +1230,5 @@
 	dis_int(obj->tei_intno);
 
-	/* SCIç¡å¹ */
+	/* SCI無効 */
 	sci_disable(obj->base_address);
 
@@ -1291,11 +1240,10 @@
 	uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address));
 
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U);
 
 	sci_set_frequency(obj->base_address, baudrate);
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), scr);
 }
@@ -1349,29 +1297,29 @@
 
 	for (;;) {
-		/* SSR.ORER, PER, FERãã©ã°ããªã¼ã */
+		/* SSR.ORER, PER, FERフラグをリード */
 		ssr = sil_reb_mem(SCI_SSR(obj->base_address));
 
-		/* åä¿¡ã¨ã©ã¼ãçºçããã¨ã */
+		/* 受信エラーが発生したとき */
 		if ((ssr & (ORER | PER | FER)) != 0) {
-			/* ãªã¼ãã©ã³ã¨ã©ã¼ */
+			/* オーバランエラー */
 			if ((ssr & ORER) != 0) {
-				/* RDRã¬ã¸ã¹ã¿ããªã¼ã */
+				/* RDRレジスタをリード */
 				c = (int)sil_reb_mem(SCI_RDR(obj->base_address));
 			}
-			/* ãã¬ã¼ãã³ã°ã¨ã©ã¼ */
+			/* フレーミングエラー */
 			if ((ssr & FER) != 0) {
 			}
-			/* ããªãã£ã¨ã©ã¼ */
+			/* パリティエラー */
 			if ((ssr & PER) != 0) {
 			}
 		}
 
-		/* SSR.ORER, PER, FERãã©ã°ãâ0âã«è¨­å® */
+		/* SSR.ORER, PER, FERフラグを“0”に設定 */
 		sil_wrb_mem(SCI_SSR(obj->base_address), ssr & ~(ORER | PER | FER));
 
-		/* SSR.ORER, PER, FERãã©ã°ããªã¼ã */
+		/* SSR.ORER, PER, FERフラグをリード */
 		ssr = sil_reb_mem(SCI_SSR(obj->base_address));
 
-		/* RXIå²ãè¾¼ã¿ */
+		/* RXI割り込み */
 		if (serial_readable(obj)) {
 			clear_int(obj->rxi_intno);
@@ -1382,5 +1330,5 @@
 	}
 
-	/* RDRã¬ã¸ã¹ã¿ããªã¼ã */
+	/* RDRレジスタをリード */
 	c = (int)sil_reb_mem(SCI_RDR(obj->base_address));
 
@@ -1478,34 +1426,33 @@
 	}
 
-	/* SCIæå¹ */
+	/* SCI有効 */
 	sci_enable(obj->base_address, sciI2C);
 
-	/* SIMR3.IICSDAS[1:0](b5-b4), IICSCLS[1:0](b7-b6)ããããâ11bâã«è¨­å® */
+	/* SIMR3.IICSDAS[1:0](b5-b4), IICSCLS[1:0](b7-b6)ビットを“11b”に設定 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address), 0xF0U);
 
 	sci_set_frequency(obj->base_address, 100000);
 
-	/* SCMRã¬ã¸ã¹ã¿ã¯SDIRããããâ1âãSINVããããâ0âãSMIFããããâ0âã«è¨­å® */
+	/* SCMRレジスタはSDIRビットを“1”、SINVビットを“0”、SMIFビットを“0”に設定 */
 	sil_wrb_mem(SCI_SCMR(obj->base_address),
 		(sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SINV | SMIF)) | SDIR);
 
-	/* SEMRãSNFRãSIMR1ãSIMR2ãSPMRã¬ã¸ã¹ã¿ã«å¤ãè¨­å® */
-	/* SEMRã¬ã¸ã¹ã¿ã¯ãNFENããããè¨­å® */
+	/* SEMR、SNFR、SIMR1、SIMR2、SPMRレジスタに値を設定 */
+	/* SEMRレジスタは、NFENビットを設定 */
 	sil_wrb_mem(SCI_SEMR(obj->base_address), NFEN);
 
-	/* SNFRã¬ã¸ã¹ã¿ã¯ãNFCS[2:0]ããããè¨­å®*/
+	/* SNFRレジスタは、NFCS[2:0]ビットを設定*/
 	sil_wrb_mem(SCI_SNFR(obj->base_address), 1);
 
-	/* SIMR1ã¬ã¸ã¹ã¿ã¯ãIICMããããâ1âã«è¨­å®ããIICDL[4:0]ã	ãããè¨­å® */
+	/* SIMR1レジスタは、IICMビットを“1”に設定し、IICDL[4:0]ビ	ットを設定 */
 	sil_wrb_mem(SCI_SIMR1(obj->base_address), IICM | (3 << 3));
 
-	/* SIMR2ã¬ã¸ã¹ã¿ã¯ãIICACKTãIICCSCããããâ1âã«è¨­å®ããIICINTMããããè¨­å® */
+	/* SIMR2レジスタは、IICACKT、IICCSCビットを“1”に設定し、IICINTMビットを設定 */
 	sil_wrb_mem(SCI_SIMR2(obj->base_address), IICACKT | IICCSC | IICINTM);
 
-	/* SPMRã¬ã¸ã¹ã¿ã¯ãå
-¨ãããâ0âã«è¨­å® */
+	/* SPMRレジスタは、全ビット“0”に設定 */
 	sil_wrb_mem(SCI_SPMR(obj->base_address), 0);
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address),
 		(sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE));
@@ -1516,11 +1463,10 @@
 	uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address));
 
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U);
 
 	sci_set_frequency(obj->base_address, hz);
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), scr);
 }
@@ -1531,6 +1477,6 @@
 		return 0;
 
-	/* SIMR3.IICSTAREQããããâ1âã«è¨­å®ããã¨åæã«ã
-	 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ããããâ01bâã«è¨­å® */
+	/* SIMR3.IICSTAREQビットを“1”に設定すると同時に、
+	 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ビットを“01b”に設定 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address), IICSTAREQ | (1 << 4) | (1 << 6));
 
@@ -1553,6 +1499,6 @@
 		return 0;
 
-	/* SIMR3.IICSTPREQããããâ1âã«è¨­å®ããã¨åæã«ã
-	 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ããããâ01bâã«è¨­å® */
+	/* SIMR3.IICSTPREQビットを“1”に設定すると同時に、
+	 * SIMR3.IICSCLS[1:0],IICSDAS[1:0]ビットを“01b”に設定 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address), IICSTPREQ | (1 << 4) | (1 << 6));
 
@@ -1565,58 +1511,58 @@
 		return 0;
 
-	/* éä¿¡å²ãè¾¼ã¿è¦æ±ãç¦æ­¢ */
+	/* 送信割り込み要求を禁止 */
 	sil_wrb_mem(SCI_SCR(obj->base_address),
 		(sil_reb_mem(SCI_SCR(obj->base_address)) & ~(RIE)) | TEIE | TIE);
 
-	/* éå§æ¡ä»¶ã®çæ */
+	/* 開始条件の生成 */
 	i2c_start(obj);
 
-	/* STI(TEI)å²ãè¾¼ã¿çºçç¢ºèª */
+	/* STI(TEI)割り込み発生確認 */
 	while (!probe_int(obj->tei_intno))
 		dly_tsk(2);
 	clear_int(obj->tei_intno);
 
-	/* SIMR3.IICSTIFãã©ã°ãâ0âã«è¨­å®ãã */
+	/* SIMR3.IICSTIFフラグを“0”に設定し、 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address),
 		sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF);
-	/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ããããâ00bâã«è¨­å® */
+	/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“00b”に設定 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address),
 		sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~((3 << 4) | (3 << 6)));
 
-	/* TDRã¬ã¸ã¹ã¿ã«ã¹ã¬ã¼ãã¢ãã¬ã¹ãR/Wããããã©ã¤ã */
+	/* TDRレジスタにスレーブアドレス、R/Wビットをライト */
 	sil_wrb_mem(SCI_TDR(obj->base_address), address | 1);
 
-	/* TXIå²ãè¾¼ã¿çºçç¢ºèª */
+	/* TXI割り込み発生確認 */
 	while (!probe_int(obj->txi_intno))
 		dly_tsk(10);
 	clear_int(obj->txi_intno);
 
-	/* ã¹ã¬ã¼ãããã¤ã¹ããã®ACKãç¢ºèª */
+	/* スレーブデバイスからのACKを確認 */
 	if ((sil_reb_mem(SCI_SISR(obj->base_address)) & IICACKR) == 0) {
-		/* SIMR2.IICACKTããããâ0âã«è¨­å® */
+		/* SIMR2.IICACKTビットを“0”に設定 */
 		sil_wrb_mem(SCI_SIMR2(obj->base_address), sil_reb_mem(SCI_SIMR2(obj->base_address)) & ~IICACKT);
-		/* SCR.RIEããããâ1âã«è¨­å® */
+		/* SCR.RIEビットを“1”に設定 */
 		sil_wrb_mem(SCI_SCR(obj->base_address), sil_reb_mem(SCI_SCR(obj->base_address)) | RIE);
 
 		for (int i = 0; i < length; i++) {
-			/* æ¬¡ãã¼ã¿ãæçµ */
+			/* 次データが最終 */
 			if (i == length - 1) {
-				/* SIMR2.IICACKTããããâ1âã«è¨­å® */
+				/* SIMR2.IICACKTビットを“1”に設定 */
 				sil_wrb_mem(SCI_SIMR2(obj->base_address), sil_reb_mem(SCI_SIMR2(obj->base_address)) | IICACKT);
 			}
 
-			/* TDRã¬ã¸ã¹ã¿ã«ããã¼ãã¼ã¿âFFhâãã©ã¤ã */
+			/* TDRレジスタにダミーデータ“FFh”をライト */
 			sil_wrb_mem(SCI_TDR(obj->base_address), 0xFF);
 
-			/* RXIå²ãè¾¼ã¿çºçç¢ºèª */
+			/* RXI割り込み発生確認 */
 			while (!probe_int(obj->rxi_intno))
 				dly_tsk(10);
 			clear_int(obj->rxi_intno);
 
-			/* RDRã¬ã¸ã¹ã¿ã®åä¿¡ãã¼ã¿ããªã¼ã */
+			/* RDRレジスタの受信データをリード */
 			*data = sil_reb_mem(SCI_RDR(obj->base_address));
 			data++;
 
-			/* TXIå²ãè¾¼ã¿çºçç¢ºèª */
+			/* TXI割り込み発生確認 */
 			while (!probe_int(obj->txi_intno))
 				dly_tsk(10);
@@ -1626,16 +1572,16 @@
 
 	if (stop) {
-		/* åæ­¢æ¡ä»¶ã®çæ */
+		/* 停止条件の生成 */
 		i2c_stop(obj);
 
-		/* STI(TEI)å²ãè¾¼ã¿çºçç¢ºèª */
+		/* STI(TEI)割り込み発生確認 */
 		while (!probe_int(obj->tei_intno))
 			dly_tsk(2);
 		clear_int(obj->tei_intno);
 
-		/* SIMR3.IICSTIFãã©ã°ãâ0âã«è¨­å®ãã*/
+		/* SIMR3.IICSTIFフラグを“0”に設定し、*/
 		sil_wrb_mem(SCI_SIMR3(obj->base_address),
 			sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF);
-		/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ããããâ11bâã«è¨­å® */
+		/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“11b”に設定 */
 		sil_wrb_mem(SCI_SIMR3(obj->base_address),
 			sil_reb_mem(SCI_SIMR3(obj->base_address)) | ((3 << 4) | (3 << 6)));
@@ -1650,40 +1596,40 @@
 		return 0;
 
-	/* åä¿¡å²ãè¾¼ã¿è¦æ±ãç¦æ­¢ */
+	/* 受信割り込み要求を禁止 */
 	sil_wrb_mem(SCI_SCR(obj->base_address),
 		(sil_reb_mem(SCI_SCR(obj->base_address)) & ~(RIE)) | TEIE | TIE);
 
-	/* éå§æ¡ä»¶ã®çæ */
+	/* 開始条件の生成 */
 	i2c_start(obj);
 
-	/* STI(TEI)å²ãè¾¼ã¿çºçç¢ºèª */
+	/* STI(TEI)割り込み発生確認 */
 	while (!probe_int(obj->tei_intno))
 		dly_tsk(2);
 	clear_int(obj->tei_intno);
 
-	/* SIMR3.IICSTIFãã©ã°ãâ0âã«è¨­å®ãã */
+	/* SIMR3.IICSTIFフラグを“0”に設定し、 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address),
 		sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF);
-	/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ããããâ00bâã«è¨­å® */
+	/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“00b”に設定 */
 	sil_wrb_mem(SCI_SIMR3(obj->base_address),
 		sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~((3 << 4) | (3 << 6)));
 
-	/* TDRã¬ã¸ã¹ã¿ã«ã¹ã¬ã¼ãã¢ãã¬ã¹ãR/Wããããã©ã¤ã */
+	/* TDRレジスタにスレーブアドレス、R/Wビットをライト */
 	sil_wrb_mem(SCI_TDR(obj->base_address), address);
 
-	/* TXIå²ãè¾¼ã¿çºçç¢ºèª */
+	/* TXI割り込み発生確認 */
 	while (!probe_int(obj->txi_intno))
 		dly_tsk(10);
 	clear_int(obj->txi_intno);
 
-	/* ã¹ã¬ã¼ãããã¤ã¹ããã®ACKãç¢ºèª */
+	/* スレーブデバイスからのACKを確認 */
 	if ((sil_reb_mem(SCI_SISR(obj->base_address)) & IICACKR) == 0) {
 
 		for (int i = 0; i < length; i++) {
-			/* TDRã¬ã¸ã¹ã¿ã«ã¹ã¬ã¼ãã¢ãã¬ã¹ãR/Wããããã©ã¤ã */
+			/* TDRレジスタにスレーブアドレス、R/Wビットをライト */
 			sil_wrb_mem(SCI_TDR(obj->base_address), *data);
 			data++;
 
-			/* TXIå²ãè¾¼ã¿çºçç¢ºèª */
+			/* TXI割り込み発生確認 */
 			while (!probe_int(obj->txi_intno))
 				dly_tsk(10);
@@ -1693,16 +1639,16 @@
 
 	if (stop) {
-		/* åæ­¢æ¡ä»¶ã®çæ */
+		/* 停止条件の生成 */
 		i2c_stop(obj);
 
-		/* STI(TEI)å²ãè¾¼ã¿çºçç¢ºèª */
+		/* STI(TEI)割り込み発生確認 */
 		while (!probe_int(obj->tei_intno))
 			dly_tsk(2);
 		clear_int(obj->tei_intno);
 
-		/* SIMR3.IICSTIFãã©ã°ãâ0âã«è¨­å®ãã*/
+		/* SIMR3.IICSTIFフラグを“0”に設定し、*/
 		sil_wrb_mem(SCI_SIMR3(obj->base_address),
 			sil_reb_mem(SCI_SIMR3(obj->base_address)) & ~IICSTIF);
-		/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ããããâ11bâã«è¨­å® */
+		/* SIMR3.IICSCLS[1:0], IICSDAS[1:0]ビットを“11b”に設定 */
 		sil_wrb_mem(SCI_SIMR3(obj->base_address),
 			sil_reb_mem(SCI_SIMR3(obj->base_address)) | ((3 << 4) | (3 << 6)));
@@ -1747,31 +1693,31 @@
 	}
 
-	/* SCIæå¹ */
+	/* SCI有効 */
 	sci_enable(obj->base_address, (ssel != NC) ? sciSPIS : sciSPIM);
 
-	/* SIMR1.IICMããããâ0âã«è¨­å® */
+	/* SIMR1.IICMビットを“0”に設定 */
 	sil_wrb_mem(SCI_SIMR1(obj->base_address),
 		sil_reb_mem(SCI_SIMR1(obj->base_address)) & ~IICM);
 
 	if (ssel == NC) {
-		/* SPMR.SSE, CTSE, MSS, MFF, CKPH, CKPOLããããâ0âã«è¨­å® */
+		/* SPMR.SSE, CTSE, MSS, MFF, CKPH, CKPOLビットを“0”に設定 */
 		sil_wrb_mem(SCI_SPMR(obj->base_address), 0);
 	}
 	else {
-		/* SPMR, CTSE, MSS, MFF, CKPH, CKPOLããããâ0âã«è¨­å® */
-		/* SPMR.SSEããããâ1âã«è¨­å® */
+		/* SPMR, CTSE, MSS, MFF, CKPH, CKPOLビットを“0”に設定 */
+		/* SPMR.SSEビットを“1”に設定 */
 		sil_wrb_mem(SCI_SPMR(obj->base_address), SSE);
 	}
 
-	/* SCMRã¬ã¸ã¹ã¿ã¯SDIRããããâ0âãSINVããããâ0âãSMIFããããâ0âã«è¨­å® */
+	/* SCMRレジスタはSDIRビットを“0”、SINVビットを“0”、SMIFビットを“0”に設定 */
 	sil_wrb_mem(SCI_SCMR(obj->base_address),
 		(sil_reb_mem(SCI_SCMR(obj->base_address)) & ~(SMIF | SDIR)) | SINV);
 
-	/* SMRã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããã¯ã­ãã¯åæå¼ã¢ã¼ãã§åä½ã§è¨­å® */
+	/* SMRに送信／ 受信フォーマットをクロック同期式モードで動作で設定 */
 	sil_wrb_mem(SCI_SMR(obj->base_address), CM);
 
 	sci_set_frequency(obj->base_address, 1000000);
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address),
 		(sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE));
@@ -1780,5 +1726,5 @@
 void spi_free(spi_t *obj)
 {
-	/* SCIç¡å¹ */
+	/* SCI無効 */
 	sci_disable(obj->base_address);
 
@@ -1796,11 +1742,10 @@
 	}
 
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U);
 
 	spmr = sil_reb_mem(SCI_SPMR(obj->base_address));
 
-	/* ã¯ã­ãã¯æ¥µæ§åè»¢ãã/ãªã */
+	/* クロック極性反転あり/なし */
 	if (polarity)
 		spmr |= CKPOL;
@@ -1808,5 +1753,5 @@
 		spmr &= ~CKPOL;
 
-	/* ã¯ã­ãã¯ä½ç¸åè»¢ãã/ãªã */
+	/* クロック位相反転あり/なし */
 	if (phase)
 		spmr |= CKPH;
@@ -1815,22 +1760,21 @@
 
 	if (slave) {
-		/* SCKnç«¯å­ã¯ã¯ã­ãã¯å
-¥åã¨ãã¦ä½¿ç¨ */
+		/* SCKn端子はクロック入力として使用 */
 		sil_wrb_mem(SCI_SCR(obj->base_address), 
 			(sil_reb_mem(SCI_SCR(obj->base_address)) & ~CKE) | 2);
 
-		/* SPMR.MSSããããâ1âã«è¨­å® */
+		/* SPMR.MSSビットを“1”に設定 */
 		sil_wrb_mem(SCI_SPMR(obj->base_address), spmr | MSS);
 	}
 	else {
-		/* SCKnç«¯å­ã¯ã¯ã­ãã¯åºåã¨ãã¦ä½¿ç¨ */
+		/* SCKn端子はクロック出力として使用 */
 		sil_wrb_mem(SCI_SCR(obj->base_address),
 			sil_reb_mem(SCI_SCR(obj->base_address)) & ~CKE);
 
-		/* SPMR.MSSããããâ0âã«è¨­å® */
+		/* SPMR.MSSビットを“0”に設定 */
 		sil_wrb_mem(SCI_SPMR(obj->base_address), spmr & ~MSS);
 	}
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address),
 		(sil_reb_mem(SCI_SCR(obj->base_address)) | RE | TE));
@@ -1841,11 +1785,10 @@
 	uint8_t scr = sil_reb_mem(SCI_SCR(obj->base_address));
 
-	/* éåä¿¡ç¦æ­¢, SCKnç«¯å­ã¯å
-¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
+	/* 送受信禁止, SCKn端子は入出力ポートとして使用 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), 0x00U);
 
 	sci_set_frequency(obj->base_address, hz);
 
-	/* éåä¿¡è¨±å¯ */
+	/* 送受信許可 */
 	sil_wrb_mem(SCI_SCR(obj->base_address), scr);
 }
@@ -1853,9 +1796,9 @@
 int spi_master_write(spi_t *obj, int value)
 {
-	/* TXIå²ãè¾¼ã¿çºçç¢ºèª */
+	/* TXI割り込み発生確認 */
 	while (!probe_int(obj->txi_intno))
 		;
 
-	/* éä¿¡ãã¼ã¿ãã©ã¤ã */
+	/* 送信データをライト */
 	sil_wrb_mem(SCI_TDR(obj->base_address), (char)value);
 
@@ -1868,8 +1811,8 @@
 		}
 	}
-	/* RXIå²ãè¾¼ã¿çºçç¢ºèª */
+	/* RXI割り込み発生確認 */
 	while (!probe_int(obj->rxi_intno));
 
-	/* åä¿¡ãã¼ã¿ããªã¼ã */
+	/* 受信データをリード */
 	return sil_reb_mem(SCI_RDR(obj->base_address));
 }
Index: azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/mbed/target/mbed_api.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *  gpio_apiã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  gpio_apiのシステムコンフィギュレーションファイル
  */
 #include "shellif.h"
Index: azure_iot_hub/trunk/asp3_dcre/sample/Makefile
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/Makefile	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/Makefile	(revision 389)
@@ -9,47 +9,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -57,15 +42,15 @@
 
 #
-#  ã¿ã¼ã²ããã®æå®ï¼Makefile.targetã§ä¸æ¸ããããã®ãé²ãããï¼
+#  ターゲットの指定（Makefile.targetで上書きされるのを防ぐため）
 #
 all:
 
 #
-#  ã¿ã¼ã²ããç¥ç§°ã®å®ç¾©
+#  ターゲット略称の定義
 #
 TARGET = @(TARGET)
 
 #
-#  ãã­ã°ã©ãã³ã°è¨èªã®å®ç¾©
+#  プログラミング言語の定義
 #
 SRCLANG = @(SRCLANG)
@@ -80,41 +65,41 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ソースファイルのディレクトリの定義
 #
 SRCDIR = @(SRCDIR)
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®æ¡å¼µå­ã®è¨­å®
+#  オブジェクトファイル名の拡張子の設定
 #
 OBJEXT = @(OBJEXT)
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªï¼libkernel.aï¼ã®ãã£ã¬ã¯ããªå
-#  ï¼ã«ã¼ãã«ã©ã¤ãã©ãªãmakeå¯¾è±¡ã«ããæã¯ï¼ç©ºã«å®ç¾©ããï¼
+#  カーネルライブラリ（libkernel.a）のディレクトリ名
+#  （カーネルライブラリもmake対象にする時は，空に定義する）
 #
 KERNEL_LIB = @(KERNEL_LIB)
 
 #
-#  ã«ã¼ãã«ãé¢æ°åä½ã§ã³ã³ãã¤ã«ãããã©ããã®å®ç¾©
+#  カーネルを関数単位でコンパイルするかどうかの定義
 #
 KERNEL_FUNCOBJS = @(KERNEL_FUNCOBJS)
 
 #
-#  TECSãå¤ããã©ããã®å®ç¾©
+#  TECSを外すかどうかの定義
 #
 OMIT_TECS = @(OMIT_TECS)
 
 #
-#  ãã¬ã¼ã¹ã­ã°ãåå¾ãããã©ããã®å®ç¾©
+#  トレースログを取得するかどうかの定義
 #
 ENABLE_TRACE = @(ENABLE_TRACE)
 
 #
-#  éçºãã¼ã«ï¼ã³ã³ãã¤ã©ç­ï¼ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  開発ツール（コンパイラ等）のディレクトリの定義
 #
 DEVTOOLDIR = @(DEVTOOLDIR)
 
 #
-#  ã¦ã¼ãã£ãªãã£ãã­ã°ã©ã ã®åç§°
+#  ユーティリティプログラムの名称
 #
 CFG = @(CFG)
@@ -122,5 +107,5 @@
 
 #
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«åã®å®ç¾©
+#  オブジェクトファイル名の定義
 #
 OBJNAME = asp
@@ -134,20 +119,20 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ãç½®ããã£ã¬ã¯ããªã®å®ç¾©
+#  依存関係ファイルを置くディレクトリの定義
 #
 DEPDIR = @(DEPDIR)
 
 #
-#  ã¿ã¼ã²ããä¾å­é¨ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  ターゲット依存部のディレクトリの定義
 #
 TARGETDIR = $(SRCDIR)/target/$(TARGET)
 
 #
-#  ã¿ã¼ã²ããä¾å­ã®å®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット依存の定義のインクルード
 #
 include $(TARGETDIR)/Makefile.target
 
 #
-#  TECSçæãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  TECS生成ファイルのディレクトリの定義
 #
 TECSGENDIR = ./gen
@@ -158,5 +143,5 @@
 
 #
-#  TECSãçæããå®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  TECSが生成する定義のインクルード
 #
 ifndef OMIT_TECS
@@ -166,6 +151,5 @@
 
 #
-#  å
-±éã³ã³ãã¤ã«ãªãã·ã§ã³ã®å®ç¾©
+#  共通コンパイルオプションの定義
 #
 COPTS := -g @(COPTS) $(COPTS)
@@ -186,5 +170,5 @@
 
 #
-#  ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã«é¢ããå®ç¾©
+#  アプリケーションプログラムに関する定義
 #
 APPLNAME = @(APPLNAME)
@@ -208,27 +192,27 @@
 
 #
-#  ãããã¯ã¼ã¯ãµã¼ãã¹ã®å®ç¾©
+#  ネットワークサービスの定義
 #
 
 NO_USE_TINET_LIBRARY = true
 
-#  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãä½ããä¸ã¤é¸æããã
+#  ネットワークインタフェースの選択、何れか一つ選択する。
 
 NET_IF = ether
 
-#  ã¤ã¼ãµãããã»ãã£ãã¤ã¹ãã©ã¤ãã®é¸æ
+#  イーサネット・ディバイスドライバの選択
 
 NET_DEV = if_mbed
 
-#  ãããã¯ã¼ã¯å±¤ã®é¸æ
+#  ネットワーク層の選択
 
 #SUPPORT_INET6 = true
 SUPPORT_INET4 = true
 
-#  API ã«çµè¾¼ãæ©è½ã®é¸æ
+#  API に組込む機能の選択
 
 #API_CFG_IP4MAPPED_ADDR = true
 
-#  ãã©ã³ã¹ãã¼ãå±¤ã®é¸æ
+#  トランスポート層の選択
 
 SUPPORT_TCP = true
@@ -236,10 +220,10 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã® Makefile ã®ã¤ã³ã¯ã«ã¼ã
+#  システムサービスの Makefile のインクルード
 #
 include $(SRCDIR)/tinet/Makefile.tinet
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(TECSGENDIR) $(SRCDIR)/tecs_kernel \
@@ -252,5 +236,5 @@
 
 #
-#  ã¿ã¼ã²ãããã¡ã¤ã«
+#  ターゲットファイル
 #
 .PHONY: all
@@ -266,8 +250,8 @@
 endif
 
-##### ä»¥ä¸ã¯ç·¨éããªããã¨ #####
-
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã«é¢ããå®ç¾©
+##### 以下は編集しないこと #####
+
+#
+#  コンフィギュレータに関する定義
 #
 CFG_TABS := --api-table $(SRCDIR)/tinet/tcpip_api.def:tcpip \
@@ -282,14 +266,14 @@
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
-#
-#  KERNEL_ASMOBJS: ã«ã¼ãã«ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãã¢ã»ã³ããªè¨èªã®
-#				   ãªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_COBJS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããï¼ã½ã¼ã¹ãCè¨èªã§ï¼ã½ã¼ã¹
-#				 ãã¡ã¤ã«ã¨1å¯¾1ã«å¯¾å¿ãããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
-#  KERNEL_LCSRCS: ã«ã¼ãã«ã®ã©ã¤ãã©ãªã«å«ããCè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ã§ï¼
-#				  1ã¤ã®ã½ã¼ã¹ãã¡ã¤ã«ããè¤æ°ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãç
-#				  æãããã®ï¼
-#  KERNEL_LCOBJS: ä¸ã®ã½ã¼ã¹ãã¡ã¤ã«ããçæããããªãã¸ã§ã¯ããã¡ã¤ã«ï¼
+#  カーネルに関する定義
+#
+#  KERNEL_ASMOBJS: カーネルライブラリに含める，ソースがアセンブリ言語の
+#				   オブジェクトファイル．
+#  KERNEL_COBJS: カーネルのライブラリに含める，ソースがC言語で，ソース
+#				 ファイルと1対1に対応するオブジェクトファイル．
+#  KERNEL_LCSRCS: カーネルのライブラリに含めるC言語のソースファイルで，
+#				  1つのソースファイルから複数のオブジェクトファイルを生
+#				  成するもの．
+#  KERNEL_LCOBJS: 上のソースファイルから生成されるオブジェクトファイル．
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(SRCDIR)/kernel
@@ -299,5 +283,5 @@
 
 #
-#  ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾©
+#  カーネルのファイル構成の定義
 #
 include $(SRCDIR)/kernel/Makefile.kernel
@@ -332,5 +316,5 @@
 
 #
-#  ã½ã¼ã¹ãã¡ã¤ã«ã®ãããã£ã¬ã¯ããªã«é¢ããå®ç¾©
+#  ソースファイルのあるディレクトリに関する定義
 #
 vpath %.c $(KERNEL_DIRS) $(SYSSVC_DIRS) $(APPL_DIRS)
@@ -340,5 +324,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã®ããã®å¤æ°ã®å®ç¾©
+#  コンパイルのための変数の定義
 #
 KERNEL_LIB_OBJS = $(KERNEL_ASMOBJS) $(KERNEL_COBJS) $(KERNEL_LCOBJS)
@@ -368,10 +352,10 @@
 
 #
-#  tecsgenããCããªãã­ã»ããµãå¼ã³åºãéã®ãªãã·ã§ã³ã®å®ç¾©
+#  tecsgenからCプリプロセッサを呼び出す際のオプションの定義
 #
 TECS_CPP = $(CC) $(CDEFS) $(INCLUDES) $(SYSSVC_CFLAGS) -D TECSGEN -E
 
 #
-#  tecsgenã®å¼åºã
+#  tecsgenの呼出し
 #
 .PHONY: tecs
@@ -381,5 +365,5 @@
 
 #
-#  ã«ã¼ãã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®çæ
+#  カーネルのコンフィギュレーションファイルの生成
 #
 cfg1_out.c cfg1_out.db: cfg1_out.timestamp ;
@@ -403,5 +387,5 @@
 
 #
-#  ãªãã»ãããã¡ã¤ã«ï¼offset.hï¼ã®çæè¦å
+#  オフセットファイル（offset.h）の生成規則
 #
 $(OFFSET_H): offset.timestamp ;
@@ -411,5 +395,5 @@
 
 #
-#  ã«ã¼ãã«ã©ã¤ãã©ãªãã¡ã¤ã«ã®çæ
+#  カーネルライブラリファイルの生成
 #
 libkernel.a: $(OFFSET_H) $(KERNEL_LIB_OBJS)
@@ -419,5 +403,5 @@
 
 #
-#  ä¸¦åmakeã®ããã®ä¾å­é¢ä¿ã®å®ç¾©
+#  並列makeのための依存関係の定義
 #
 $(APPL_OBJS) $(SYSSVC_OBJS): | kernel_cfg.timestamp
@@ -426,11 +410,10 @@
 
 #
-#  ç¹å¥ãªä¾å­é¢ä¿ã®å®ç¾©
+#  特別な依存関係の定義
 #
 tBannerMain.o: $(filter-out tBannerMain.o,$(ALL_OBJS)) $(LIBS_DEP)
 
 #
-#  å
-¨ä½ã®ãªã³ã¯
+#  全体のリンク
 #
 $(OBJFILE): $(ALL_OBJS) $(LIBS_DEP)
@@ -440,5 +423,5 @@
 
 #
-#  ä¾å­é¢ä¿ãã©ã«ãã®ä½æ
+#  依存関係フォルダの作成
 #
 $(DEPDIR):
@@ -446,5 +429,5 @@
 
 #
-#  ã·ã³ãã«ãã¡ã¤ã«ã®çæ
+#  シンボルファイルの生成
 #
 $(OBJNAME).syms: $(OBJFILE)
@@ -452,5 +435,5 @@
 
 #
-#  ãã¤ããªãã¡ã¤ã«ã®çæ
+#  バイナリファイルの生成
 #
 $(OBJNAME).bin: $(OBJFILE)
@@ -458,5 +441,5 @@
 
 #
-#  Sã¬ã³ã¼ããã¡ã¤ã«ã®çæ
+#  Sレコードファイルの生成
 #
 $(OBJNAME).srec: $(OBJFILE)
@@ -464,5 +447,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯å¦ç
+#  エラーチェック処理
 #
 .PHONY: check
@@ -474,5 +457,5 @@
 
 #
-#  ã³ã³ãã¤ã«çµæã®æ¶å»
+#  コンパイル結果の消去
 #
 .PHONY: clean
@@ -499,9 +482,8 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã®ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
-#
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãçæãããã¡ã¤ã«ã¯ï¼å
-±éã®ã³ã³ãã¤ã«ãªãã·ã§ã³
-#  ã®ã¿ãä»ãã¦ã³ã³ãã¤ã«ããï¼
+#  コンフィギュレータが生成したファイルのコンパイルルールの定義
+#
+#  コンフィギュレータが生成したファイルは，共通のコンパイルオプション
+#  のみを付けてコンパイルする．
 #
 ALL_CFG_COBJS = $(CFG_COBJS) cfg1_out.o
@@ -518,14 +500,14 @@
 
 #
-#  ä¾å­é¢ä¿ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+#  依存関係ファイルのインクルード
 #
 -include $(DEPDIR)/*.d
 
 #
-#  éçºãã¼ã«ã®ã³ãã³ãåã®å®ç¾©
+#  開発ツールのコマンド名の定義
 #
 ifeq ($(TOOL),gcc)
 	#
-	#  GNUéçºç°å¢ç¨
+	#  GNU開発環境用
 	#
 	ifdef GCC_TARGET
@@ -564,5 +546,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
+#  コンパイルルールの定義
 #
 $(KERNEL_COBJS): %.o: %.c
@@ -607,5 +589,5 @@
 
 #
-#  ããã©ã«ãã³ã³ãã¤ã«ã«ã¼ã«ãä¸æ¸ã
+#  デフォルトコンパイルルールを上書き
 #
 %.o: %.c
Index: azure_iot_hub/trunk/asp3_dcre/sample/sample1.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/sample1.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/sample1.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,93 +42,69 @@
 
 /* 
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®æ¬ä½
- *
- *  ASPã«ã¼ãã«ã®åºæ¬çãªåä½ãç¢ºèªããããã®ãµã³ãã«ãã­ã°ã©ã ï¼
- *
- *  ãã­ã°ã©ã ã®æ¦è¦:
- *
- *  ã¦ã¼ã¶ã¤ã³ã¿ãã§ã¼ã¹ãåãæã¤ã¡ã¤ã³ã¿ã¹ã¯ï¼ã¿ã¹ã¯ID: MAIN_TASKï¼åª
- *  å
-åº¦: MAIN_PRIORITYï¼ã¨ï¼3ã¤ã®ä¸¦è¡å®è¡ãããã¿ã¹ã¯ï¼ã¿ã¹ã¯ID:
- *  TASK1ï½TASK3ï¼åæåªå
-åº¦: MID_PRIORITYï¼ã§æ§æãããï¼ã¾ãï¼èµ·åå¨
- *  æã2ç§ã®å¨æãã³ãã©ï¼å¨æãã³ãã©ID: CYCHDR1ï¼ãç¨ããï¼
- *
- *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯ã¯ï¼task_loopåç©ºã«ã¼ããå®è¡ããåº¦ã«ï¼ã¿ã¹ã¯ã
- *  å®è¡ä¸­ã§ãããã¨ãããããã¡ãã»ã¼ã¸ãè¡¨ç¤ºããï¼ç©ºã«ã¼ããå®è¡ãã
- *  ã®ã¯ï¼ç©ºã«ã¼ããªãã§ã¡ãã»ã¼ã¸ãåºåããã¨ï¼å¤éã®ã¡ãã»ã¼ã¸ãåºå
- *  ããï¼ãã­ã°ã©ã ã®åä½ãç¢ºèªãããããªãããã§ããï¼ã¾ãï¼ä½éãªã·
- *  ãªã¢ã«ãã¼ããç¨ãã¦ã¡ãã»ã¼ã¸ãåºåããå ´åã«ï¼ãã¹ã¦ã®ã¡ãã»ã¼ã¸
- *  ãåºåã§ããããã«ï¼ã¡ãã»ã¼ã¸ã®éãå¶éããã¨ããçç±ãããï¼
- *
- *  å¨æãã³ãã©ã¯ï¼ä¸ã¤ã®åªå
-åº¦ï¼HIGH_PRIORITYï¼MID_PRIORITYï¼
- *  LOW_PRIORITYï¼ã®ã¬ãã£ã­ã¥ã¼ãåè»¢ãããï¼ãã­ã°ã©ã ã®èµ·åç´å¾ã¯ï¼
- *  å¨æãã³ãã©ã¯åæ­¢ç¶æ
-ã«ãªã£ã¦ããï¼
- *
- *  ã¡ã¤ã³ã¿ã¹ã¯ã¯ï¼ã·ãªã¢ã«I/Oãã¼ãããã®æå­å
-¥åãè¡ãï¼æå­å
-¥åã
- *  å¾
-ã£ã¦ããéã¯ï¼ä¸¦è¡å®è¡ãããã¿ã¹ã¯ãå®è¡ããã¦ããï¼ï¼å
-¥åããã
- *  æå­ã«å¯¾å¿ããå¦çãå®è¡ããï¼å
-¥åãããæå­ã¨å¦çã®é¢ä¿ã¯æ¬¡ã®éãï¼
- *  Control-Cã¾ãã¯'Q'ãå
-¥åãããã¨ï¼ãã­ã°ã©ã ãçµäºããï¼
- *
- *  '1' : å¯¾è±¡ã¿ã¹ã¯ãTASK1ã«åãæããï¼åæè¨­å®ï¼ï¼
- *  '2' : å¯¾è±¡ã¿ã¹ã¯ãTASK2ã«åãæããï¼
- *  '3' : å¯¾è±¡ã¿ã¹ã¯ãTASK3ã«åãæããï¼
- *  'a' : å¯¾è±¡ã¿ã¹ã¯ãact_tskã«ããèµ·åããï¼
- *  'A' : å¯¾è±¡ã¿ã¹ã¯ã«å¯¾ããèµ·åè¦æ±ãcan_actã«ããã­ã£ã³ã»ã«ããï¼
- *  'e' : å¯¾è±¡ã¿ã¹ã¯ã«ext_tskãå¼ã³åºããï¼çµäºãããï¼
- *  't' : å¯¾è±¡ã¿ã¹ã¯ãter_tskã«ããå¼·å¶çµäºããï¼
- *  '>' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãHIGH_PRIORITYã«ããï¼
- *  '=' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãMID_PRIORITYã«ããï¼
- *  '<' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãLOW_PRIORITYã«ããï¼
- *  'G' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãget_priã§èª­ã¿åºãï¼
- *  's' : å¯¾è±¡ã¿ã¹ã¯ã«slp_tskãå¼ã³åºããï¼èµ·åºå¾
-ã¡ã«ãããï¼
- *  'S' : å¯¾è±¡ã¿ã¹ã¯ã«tslp_tsk(10ç§)ãå¼ã³åºããï¼èµ·åºå¾
-ã¡ã«ãããï¼
- *  'w' : å¯¾è±¡ã¿ã¹ã¯ãwup_tskã«ããèµ·åºããï¼
- *  'W' : å¯¾è±¡ã¿ã¹ã¯ã«å¯¾ããèµ·åºè¦æ±ãcan_wupã«ããã­ã£ã³ã»ã«ããï¼
- *  'l' : å¯¾è±¡ã¿ã¹ã¯ãrel_waiã«ããå¼·å¶çã«å¾
-ã¡è§£é¤ã«ããï¼
- *  'u' : å¯¾è±¡ã¿ã¹ã¯ãsus_tskã«ããå¼·å¶å¾
-ã¡ç¶æ
-ã«ããï¼
- *  'm' : å¯¾è±¡ã¿ã¹ã¯ã®å¼·å¶å¾
-ã¡ç¶æ
-ãrsm_tskã«ããè§£é¤ããï¼
- *  'd' : å¯¾è±¡ã¿ã¹ã¯ã«dly_tsk(10ç§)ãå¼ã³åºããï¼æéçµéå¾
-ã¡ã«ãããï¼
- *  'x' : å¯¾è±¡ã¿ã¹ã¯ã«ras_terã«ããçµäºè¦æ±ããï¼
- *  'y' : å¯¾è±¡ã¿ã¹ã¯ã«dis_terãå¼ã³åºããï¼ã¿ã¹ã¯çµäºãç¦æ­¢ããï¼
- *  'Y' : å¯¾è±¡ã¿ã¹ã¯ã«ena_terãå¼ã³åºããï¼ã¿ã¹ã¯çµäºãè¨±å¯ããï¼
- *  'r' : 3ã¤ã®åªå
-åº¦ï¼HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITYï¼ã®ã¬
- *        ãã£ã­ã¥ã¼ãåè»¢ãããï¼
- *  'c' : å¨æãã³ãã©ãåä½éå§ãããï¼
- *  'C' : å¨æãã³ãã©ãåä½åæ­¢ãããï¼
- *  'b' : ã¢ã©ã¼ã ãã³ãã©ã5ç§å¾ã«èµ·åããããåä½éå§ãããï¼
- *  'B' : ã¢ã©ã¼ã ãã³ãã©ãåä½åæ­¢ãããï¼
- *  'z' : å¯¾è±¡ã¿ã¹ã¯ã«CPUä¾å¤ãçºçãããï¼ã¿ã¹ã¯ãçµäºãããï¼ï¼
- *  'Z' : å¯¾è±¡ã¿ã¹ã¯ã«CPUã­ãã¯ç¶æ
-ã§CPUä¾å¤ãçºçãããï¼ãã­ã°ã©ã ã
- *        çµäºããï¼ï¼
- *  '@' : ã¿ã¹ã¯3ãacre_tskã«ããçæããï¼
- *  '!' : å¯¾è±¡ã¿ã¹ã¯ãdel_tskã«ããåé¤ããï¼
- *  '$' : ã¢ã©ã¼ã ãã³ãã©ãacre_almã«ããçæããï¼
- *  '#' : ã¢ã©ã¼ã ãã³ãã©ãdel_almã«ããåé¤ããï¼
- *  'V' : fch_hrtã§é«åè§£è½ã¿ã¤ãã2åèª­ãï¼
- *  'v' : çºè¡ããã·ã¹ãã ã³ã¼ã«ãè¡¨ç¤ºããï¼ããã©ã«ãï¼ï¼
- *  'q' : çºè¡ããã·ã¹ãã ã³ã¼ã«ãè¡¨ç¤ºããªãï¼
+ *  サンプルプログラム(1)の本体
+ *
+ *  ASPカーネルの基本的な動作を確認するためのサンプルプログラム．
+ *
+ *  プログラムの概要:
+ *
+ *  ユーザインタフェースを受け持つメインタスク（タスクID: MAIN_TASK，優
+ *  先度: MAIN_PRIORITY）と，3つの並行実行されるタスク（タスクID:
+ *  TASK1～TASK3，初期優先度: MID_PRIORITY）で構成される．また，起動周
+ *  期が2秒の周期ハンドラ（周期ハンドラID: CYCHDR1）を用いる．
+ *
+ *  並行実行されるタスクは，task_loop回空ループを実行する度に，タスクが
+ *  実行中であることをあらわすメッセージを表示する．空ループを実行する
+ *  のは，空ループなしでメッセージを出力すると，多量のメッセージが出力
+ *  され，プログラムの動作が確認しずらくなるためである．また，低速なシ
+ *  リアルポートを用いてメッセージを出力する場合に，すべてのメッセージ
+ *  が出力できるように，メッセージの量を制限するという理由もある．
+ *
+ *  周期ハンドラは，三つの優先度（HIGH_PRIORITY，MID_PRIORITY，
+ *  LOW_PRIORITY）のレディキューを回転させる．プログラムの起動直後は，
+ *  周期ハンドラは停止状態になっている．
+ *
+ *  メインタスクは，シリアルI/Oポートからの文字入力を行い（文字入力を
+ *  待っている間は，並行実行されるタスクが実行されている），入力された
+ *  文字に対応した処理を実行する．入力された文字と処理の関係は次の通り．
+ *  Control-Cまたは'Q'が入力されると，プログラムを終了する．
+ *
+ *  '1' : 対象タスクをTASK1に切り換える（初期設定）．
+ *  '2' : 対象タスクをTASK2に切り換える．
+ *  '3' : 対象タスクをTASK3に切り換える．
+ *  'a' : 対象タスクをact_tskにより起動する．
+ *  'A' : 対象タスクに対する起動要求をcan_actによりキャンセルする．
+ *  'e' : 対象タスクにext_tskを呼び出させ，終了させる．
+ *  't' : 対象タスクをter_tskにより強制終了する．
+ *  '>' : 対象タスクの優先度をHIGH_PRIORITYにする．
+ *  '=' : 対象タスクの優先度をMID_PRIORITYにする．
+ *  '<' : 対象タスクの優先度をLOW_PRIORITYにする．
+ *  'G' : 対象タスクの優先度をget_priで読み出す．
+ *  's' : 対象タスクにslp_tskを呼び出させ，起床待ちにさせる．
+ *  'S' : 対象タスクにtslp_tsk(10秒)を呼び出させ，起床待ちにさせる．
+ *  'w' : 対象タスクをwup_tskにより起床する．
+ *  'W' : 対象タスクに対する起床要求をcan_wupによりキャンセルする．
+ *  'l' : 対象タスクをrel_waiにより強制的に待ち解除にする．
+ *  'u' : 対象タスクをsus_tskにより強制待ち状態にする．
+ *  'm' : 対象タスクの強制待ち状態をrsm_tskにより解除する．
+ *  'd' : 対象タスクにdly_tsk(10秒)を呼び出させ，時間経過待ちにさせる．
+ *  'x' : 対象タスクにras_terにより終了要求する．
+ *  'y' : 対象タスクにdis_terを呼び出させ，タスク終了を禁止する．
+ *  'Y' : 対象タスクにena_terを呼び出させ，タスク終了を許可する．
+ *  'r' : 3つの優先度（HIGH_PRIORITY，MID_PRIORITY，LOW_PRIORITY）のレ
+ *        ディキューを回転させる．
+ *  'c' : 周期ハンドラを動作開始させる．
+ *  'C' : 周期ハンドラを動作停止させる．
+ *  'b' : アラームハンドラを5秒後に起動するよう動作開始させる．
+ *  'B' : アラームハンドラを動作停止させる．
+ *  'z' : 対象タスクにCPU例外を発生させる（タスクを終了させる）．
+ *  'Z' : 対象タスクにCPUロック状態でCPU例外を発生させる（プログラムを
+ *        終了する）．
+ *  '@' : タスク3をacre_tskにより生成する．
+ *  '!' : 対象タスクをdel_tskにより削除する．
+ *  '$' : アラームハンドラをacre_almにより生成する．
+ *  '#' : アラームハンドラをdel_almにより削除する．
+ *  'V' : fch_hrtで高分解能タイマを2回読む．
+ *  'v' : 発行したシステムコールを表示する（デフォルト）．
+ *  'q' : 発行したシステムコールを表示しない．
  */
 
@@ -157,5 +118,5 @@
 
 /*
- *  ãµã¼ãã¹ã³ã¼ã«ã®ã¨ã©ã¼ã®ã­ã°åºå
+ *  サービスコールのエラーのログ出力
  */
 Inline void
@@ -170,16 +131,15 @@
 
 /*
- *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯ã¸ã®ã¡ãã»ã¼ã¸é å
+ *  並行実行されるタスクへのメッセージ領域
  */
 char	message[3];
 
 /*
- *  ã«ã¼ãåæ°
- */
-ulong_t	task_loop;		/* ã¿ã¹ã¯å
-ã§ã®ã«ã¼ãåæ° */
-
-/*
- *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯
+ *  ループ回数
+ */
+ulong_t	task_loop;		/* タスク内でのループ回数 */
+
+/*
+ *  並行実行されるタスク
  */
 void task(intptr_t exinf)
@@ -241,5 +201,5 @@
 
 /*
- *  å²è¾¼ã¿ãã³ãã©
+ *  割込みハンドラ
  */
 #ifdef INTNO1
@@ -256,7 +216,7 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©
- */
-ID	cpuexc_tskid;		/* CPUä¾å¤ãèµ·ãããã¿ã¹ã¯ã®ID */
+ *  CPU例外ハンドラ
+ */
+ID	cpuexc_tskid;		/* CPU例外を起こしたタスクのID */
 
 #ifdef CPUEXC1
@@ -297,9 +257,8 @@
 
 /*
- *  å¨æãã³ãã©
- *
- *  HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå
-åº¦ã®ã¬ãã£ã­ã¥ã¼
- *  ãåè»¢ãããï¼
+ *  周期ハンドラ
+ *
+ *  HIGH_PRIORITY，MID_PRIORITY，LOW_PRIORITY の各優先度のレディキュー
+ *  を回転させる．
  */
 void cyclic_handler(intptr_t exinf)
@@ -311,9 +270,8 @@
 
 /*
- *  ã¢ã©ã¼ã ãã³ãã©
- *
- *  HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå
-åº¦ã®ã¬ãã£ã­ã¥ã¼
- *  ãåè»¢ãããï¼
+ *  アラームハンドラ
+ *
+ *  HIGH_PRIORITY，MID_PRIORITY，LOW_PRIORITY の各優先度のレディキュー
+ *  を回転させる．
  */
 void alarm_handler(intptr_t exinf)
@@ -325,5 +283,5 @@
 
 /*
- *  ä¾å¤å¦çã¿ã¹ã¯
+ *  例外処理タスク
  */
 void exc_task(intptr_t exinf)
@@ -333,5 +291,5 @@
 
 /*
- *  ã¡ã¤ã³ã¿ã¹ã¯
+ *  メインタスク
  */
 void main_task(intptr_t exinf)
@@ -356,9 +314,9 @@
 
 	/*
-	 *  ã·ãªã¢ã«ãã¼ãã®åæå
+	 *  シリアルポートの初期化
 	 *
-	 *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¨åãã·ãªã¢ã«ãã¼ããä½¿ãå ´åãªã©ï¼ã·ãªã¢ã«
-	 *  ãã¼ãããªã¼ãã³æ¸ã¿ã®å ´åã«ã¯ããã§E_OBJã¨ã©ã¼ã«ãªããï¼æ¯éã¯
-	 *  ãªãï¼
+	 *  システムログタスクと同じシリアルポートを使う場合など，シリアル
+	 *  ポートがオープン済みの場合にはここでE_OBJエラーになるが，支障は
+	 *  ない．
 	 */
 	ercd = serial_opn_por(TASK_PORTID);
@@ -371,31 +329,29 @@
 
 	/*
- 	 *  ã«ã¼ãåæ°ã®è¨­å®
+ 	 *  ループ回数の設定
 	 *
-	 *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯å
-ã§ã®ç©ºã«ã¼ãã®åæ°ï¼task_loopï¼ã¯ï¼ç©ºã«ã¼
-	 *  ãã®å®è¡æéãç´0.4ç§ã«ãªãããã«è¨­å®ããï¼ãã®è¨­å®ã®ããã«ï¼
-	 *  LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãï¼ãã®åå¾ã§get_timãå¼ã¶ãã¨ã§
-	 *  æ¸¬å®ãï¼ãã®æ¸¬å®çµæããç©ºã«ã¼ãã®å®è¡æéã0.4ç§ã«ãªãã«ã¼ãå
-	 *  æ°ãæ±ãï¼task_loopã«è¨­å®ããï¼
+	 *  並行実行されるタスク内での空ループの回数（task_loop）は，空ルー
+	 *  プの実行時間が約0.4秒になるように設定する．この設定のために，
+	 *  LOOP_REF回の空ループの実行時間を，その前後でget_timを呼ぶことで
+	 *  測定し，その測定結果から空ループの実行時間が0.4秒になるループ回
+	 *  数を求め，task_loopに設定する．
 	 *
-	 *  LOOP_REFã¯ï¼ããã©ã«ãã§ã¯1,000,000ã«è¨­å®ãã¦ãããï¼æ³å®ããã
-	 *  ãé
-ããã­ã»ããµã§ã¯ï¼ãµã³ãã«ãã­ã°ã©ã ã®å®è¡éå§ã«æéããã
-	 *  ããããã¨ããåé¡ãçããï¼éã«æ³å®ããããéããã­ã»ããµã§ã¯ï¼
-	 *  LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãç­ããªãï¼task_loopã«è¨­å®ããå¤
-	 *  ã®èª¤å·®ãå¤§ãããªãã¨ããåé¡ãããï¼
+	 *  LOOP_REFは，デフォルトでは1,000,000に設定しているが，想定したよ
+	 *  り遅いプロセッサでは，サンプルプログラムの実行開始に時間がかか
+	 *  りすぎるという問題を生じる．逆に想定したより速いプロセッサでは，
+	 *  LOOP_REF回の空ループの実行時間が短くなり，task_loopに設定する値
+	 *  の誤差が大きくなるという問題がある．
 	 *
-	 *  ããã§ï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼target_test.hã§ï¼LOOP_REFãé©
-	 *  åãªå¤ã«å®ç¾©ããã®ãæã¾ããï¼
+	 *  そこで，そのようなターゲットでは，target_test.hで，LOOP_REFを適
+	 *  切な値に定義するのが望ましい．
 	 *
-	 *  ã¾ãï¼task_loopã®å¤ãåºå®ãããå ´åã«ã¯ï¼ãã®å¤ãTASK_LOOPã«ã
-	 *  ã¯ã­å®ç¾©ããï¼TASK_LOOPããã¯ã­å®ç¾©ããã¦ããå ´åï¼ä¸è¨ã®æ¸¬å®ã
-	 *  è¡ããã«ï¼TASK_LOOPã«å®ç¾©ãããå¤ãç©ºã«ã¼ãã®åæ°ã¨ããï¼
+	 *  また，task_loopの値を固定したい場合には，その値をTASK_LOOPにマ
+	 *  クロ定義する．TASK_LOOPがマクロ定義されている場合，上記の測定を
+	 *  行わずに，TASK_LOOPに定義された値を空ループの回数とする．
 	 *
-	 * ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ç©ºã«ã¼ãã®å®è¡æéã®1åç®ã®æ¸¬å®ã§ï¼æ¬æ¥ã
-	 * ããé·ãã«ãªããã®ãããï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼MEASURE_TWICE
-	 * ããã¯ã­å®ç¾©ãããã¨ã§ï¼1åç®ã®æ¸¬å®çµæãæ¨ã¦ã¦ï¼2åç®ã®æ¸¬å®çµæ
-	 * ãä½¿ãï¼
+	 * ターゲットによっては，空ループの実行時間の1回目の測定で，本来よ
+	 * りも長めになるものがある．このようなターゲットでは，MEASURE_TWICE
+	 * をマクロ定義することで，1回目の測定結果を捨てて，2回目の測定結果
+	 * を使う．
 	 */
 #ifdef TASK_LOOP
@@ -419,5 +375,5 @@
 
 	/*
- 	 *  ã¿ã¹ã¯ã®èµ·å
+ 	 *  タスクの起動
 	 */
 	SVC_PERROR(act_tsk(TASK1));
@@ -425,5 +381,5 @@
 
 	/*
- 	 *  ã¡ã¤ã³ã«ã¼ã
+ 	 *  メインループ
 	 */
 	do {
Index: azure_iot_hub/trunk/asp3_dcre/sample/sample1.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/sample1.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/sample1.cdl	(revision 389)
@@ -1,14 +1,14 @@
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (1)ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		サンプルプログラム(1)のコンポーネント記述ファイル
  *
  *  $Id$
  */
 /*
- *  ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å®ç¾©
+ *  カーネルオブジェクトの定義
  */
 import(<kernel.cdl>);
 
 /*
- *  ã¿ã¼ã²ããéä¾å­ã®ã»ã«ã¿ã¤ãã®å®ç¾©
+ *  ターゲット非依存のセルタイプの定義
  */
 import("syssvc/tSerialPort.cdl");
@@ -20,40 +20,39 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨ã®åãè¾¼ã¿
+ *  ターゲット依存部の取り込み
  */
 import("target.cdl");
 
 /*
- *  ãã»ã«ã®çµä¸ãè¨è¿°ãã¨ã¯ï¼"cell"ã§å§ã¾ãè¡ããï¼ããã«å¯¾å¿ãã"};"
- *  ã®è¡ã¾ã§ã®ãã¨ãè¨ãï¼
+ *  「セルの組上げ記述」とは，"cell"で始まる行から，それに対応する"};"
+ *  の行までのことを言う．
  */
 
 /*
- *  ã·ã¹ãã ã­ã°æ©è½ã®çµä¸ãè¨è¿°
+ *  システムログ機能の組上げ記述
  *
- *  ã·ã¹ãã ã­ã°æ©è½ãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ãï¼ã³
- *  ã³ãã¤ã«ãªãã·ã§ã³ã«-DTOPPERS_OMIT_SYSLOGãè¿½å ããã°ããï¼ãã ãï¼
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¯ã·ã¹ãã ã­ã°æ©è½ãä½¿ç¨ããããï¼ãããå¤ããã¨
- *  ãå¿
-è¦ã§ããï¼ã¾ãï¼ã·ã¹ãã ã­ã°æ©è½ã®ã¢ããã¿ãå¤ããªããã°ãªããª
- *  ãï¼tecsgenãè­¦åã¡ãã»ã¼ã¸ãåºããï¼ç¡è¦ãã¦ããï¼
+ *  システムログ機能を外す場合には，以下のセルの組上げ記述を削除し，コ
+ *  ンパイルオプションに-DTOPPERS_OMIT_SYSLOGを追加すればよい．ただし，
+ *  システムログタスクはシステムログ機能を使用するため，それも外すこと
+ *  が必要である．また，システムログ機能のアダプタも外さなければならな
+ *  い．tecsgenが警告メッセージを出すが，無視してよい．
  */
 cell tSysLog SysLog {
-	logBufferSize = 32;					/* ã­ã°ãããã¡ã®ãµã¤ãº */
+	logBufferSize = 32;					/* ログバッファのサイズ */
 	initLogMask = C_EXP("LOG_UPTO(LOG_NOTICE)");
-										/* ã­ã°ãããã¡ã«è¨é²ãã¹ãéè¦åº¦ */
+										/* ログバッファに記録すべき重要度 */
 	initLowMask = C_EXP("LOG_UPTO(LOG_EMERG)");
-									   	/* ä½ã¬ãã«åºåãã¹ãéè¦åº¦ */
-	/* ä½ã¬ãã«åºåã¨ã®çµå */
+									   	/* 低レベル出力すべき重要度 */
+	/* 低レベル出力との結合 */
 	cPutLog = PutLogTarget.ePutLog;
 };
 
 /*
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ã¹ãã ã­ã°æ©è½
- *  ãå¼ã³åºãããã®ã¢ããã¿ã®çµä¸ãè¨è¿°
+ *  C言語で記述されたアプリケーションから，TECSベースのシステムログ機能
+ *  を呼び出すためのアダプタの組上げ記述
  *
- *  ã·ã¹ãã ã­ã°æ©è½ã®ãµã¼ãã¹ã³ã¼ã«ï¼syslogé¢æ°ã¨syslog_0é¢æ°ï½syslog_5
- *  é¢æ°ä»¥å¤ã®ãã®ï¼ã«ãCè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããå¼ã³åºããª
- *  ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ããã°ããï¼
+ *  システムログ機能のサービスコール（syslog関数とsyslog_0関数～syslog_5
+ *  関数以外のもの）ルをC言語で記述されたアプリケーションから呼び出さな
+ *  い場合には，以下のセルの組上げ記述を削除すればよい．
  */
 cell tSysLogAdapter SysLogAdapter {
@@ -62,28 +61,27 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®çµä¸ãè¨è¿°
+ *  シリアルインタフェースドライバの組上げ記述
  *
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨
- *  è¿°ãåé¤ããã°ããï¼ãã ãï¼ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¯ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼
- *  ã¹ãã©ã¤ããä½¿ç¨ããããï¼ãããå¤ããã¨ãå¿
-è¦ã§ããï¼ã¾ãï¼ã·ãªã¢
- *  ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¢ããã¿ãå¤ããªããã°ãªããªãï¼
+ *  シリアルインタフェースドライバを外す場合には，以下のセルの組上げ記
+ *  述を削除すればよい．ただし，システムログタスクはシリアルインタフェー
+ *  スドライバを使用するため，それも外すことが必要である．また，シリア
+ *  ルインタフェースドライバのアダプタも外さなければならない．
  */
 cell tSerialPort SerialPort1 {
-	receiveBufferSize = 256;			/* åä¿¡ãããã¡ã®ãµã¤ãº */
-	sendBufferSize    = 256;			/* éä¿¡ãããã¡ã®ãµã¤ãº */
+	receiveBufferSize = 256;			/* 受信バッファのサイズ */
+	sendBufferSize    = 256;			/* 送信バッファのサイズ */
 
-	/* ã¿ã¼ã²ããä¾å­é¨ã¨ã®çµå */
+	/* ターゲット依存部との結合 */
 	cSIOPort = SIOPortTarget1.eSIOPort;
-	eiSIOCBR <= SIOPortTarget1.ciSIOCBR;	/* ã³ã¼ã«ããã¯ */
+	eiSIOCBR <= SIOPortTarget1.ciSIOCBR;	/* コールバック */
 };
 
 /*
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ãªã¢ã«ã¤ã³ã¿
- *  ãã§ã¼ã¹ãã©ã¤ããå¼ã³åºãããã®ã¢ããã¿ã®çµä¸ãè¨è¿°
+ *  C言語で記述されたアプリケーションから，TECSベースのシリアルインタ
+ *  フェースドライバを呼び出すためのアダプタの組上げ記述
  *
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãµã¼ãã¹ã³ã¼ã«ãCè¨èªã§è¨è¿°ãããã¢
- *  ããªã±ã¼ã·ã§ã³ããå¼ã³åºããªãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãå
- *  é¤ããã°ããï¼
+ *  シリアルインタフェースドライバのサービスコールをC言語で記述されたア
+ *  プリケーションから呼び出さない場合には，以下のセルの組上げ記述を削
+ *  除すればよい．
  */
 cell tSerialAdapter SerialAdapter {
@@ -92,33 +90,32 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®çµä¸ãè¨è¿°
+ *  システムログタスクの組上げ記述
  *
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ãã
- *  ã°ããï¼
+ *  システムログタスクを外す場合には，以下のセルの組上げ記述を削除すれ
+ *  ばよい．
  */
 cell tLogTask LogTask {
-	priority  = 3;					/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®åªå
-åº¦ */
-	stackSize = LogTaskStackSize;	/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
+	priority  = 3;					/* システムログタスクの優先度 */
+	stackSize = LogTaskStackSize;	/* システムログタスクのスタックサイズ */
 
-	/* ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå */
+	/* シリアルインタフェースドライバとの結合 */
 	cSerialPort        = SerialPort1.eSerialPort;
 	cnSerialPortManage = SerialPort1.enSerialPortManage;
 
-	/* ã·ã¹ãã ã­ã°æ©è½ã¨ã®çµå */
+	/* システムログ機能との結合 */
 	cSysLog = SysLog.eSysLog;
 
-	/* ä½ã¬ãã«åºåã¨ã®çµå */
+	/* 低レベル出力との結合 */
 	cPutLog = PutLogTarget.ePutLog;
 };
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸åºåã®çµä¸ãè¨è¿°
+ *  カーネル起動メッセージ出力の組上げ記述
  *
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°
- *  ãåé¤ããã°ããï¼
+ *  カーネル起動メッセージの出力を外す場合には，以下のセルの組上げ記述
+ *  を削除すればよい．
  */
 cell tBanner Banner {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	targetName      = BannerTargetName;
 	copyrightNotice = BannerCopyrightNotice;
Index: azure_iot_hub/trunk/asp3_dcre/sample/sample1.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/sample1.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/sample1.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (1)ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *		サンプルプログラム(1)のシステムコンフィギュレーションファイル
  *
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/sample/sample1.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/sample1.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/sample1.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (1)ã®ããããã¡ã¤ã«
+ *		サンプルプログラム(1)のヘッダファイル
  */
 
@@ -63,47 +48,42 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®å®ç¾©
+ *  ターゲット依存の定義
  */
 #include "target_test.h"
 
 /*
- *  åã¿ã¹ã¯ã®åªå
-åº¦ã®å®ç¾©
+ *  各タスクの優先度の定義
  */
 
-#define EXC_PRIORITY	1		/* ä¾å¤å¦çã¿ã¹ã¯ã®åªå
-åº¦ */
-#define MAIN_PRIORITY	5		/* ã¡ã¤ã³ã¿ã¹ã¯ã®åªå
-åº¦ */
-								/* HIGH_PRIORITYããé«ããããã¨ */
+#define EXC_PRIORITY	1		/* 例外処理タスクの優先度 */
+#define MAIN_PRIORITY	5		/* メインタスクの優先度 */
+								/* HIGH_PRIORITYより高くすること */
 
-#define HIGH_PRIORITY	9		/* ä¸¦è¡å®è¡ãããã¿ã¹ã¯ã®åªå
-åº¦ */
+#define HIGH_PRIORITY	9		/* 並行実行されるタスクの優先度 */
 #define MID_PRIORITY	10
 #define LOW_PRIORITY	11
 
 /*
- *  ã¿ã¼ã²ããã«ä¾å­ããå¯è½æ§ã®ããå®æ°ã®å®ç¾©
+ *  ターゲットに依存する可能性のある定数の定義
  */
 
 #ifndef TASK_PORTID
-#define	TASK_PORTID		1			/* æå­å
-¥åããã·ãªã¢ã«ãã¼ãID */
+#define	TASK_PORTID		1			/* 文字入力するシリアルポートID */
 #endif /* TASK_PORTID */
 
 #ifndef STACK_SIZE
-#define	STACK_SIZE		4096		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
+#define	STACK_SIZE		4096		/* タスクのスタックサイズ */
 #endif /* STACK_SIZE */
 
 #ifndef KMM_SIZE
-#define	KMM_SIZE		(STACK_SIZE * 16)	/* ã«ã¼ãã«ãå²ãä»ãã   */
-#endif /* KMM_SIZE */						/*     ã¡ã¢ãªé åã®ãµã¤ãº */
+#define	KMM_SIZE		(STACK_SIZE * 16)	/* カーネルが割り付ける   */
+#endif /* KMM_SIZE */						/*     メモリ領域のサイズ */
 
 #ifndef LOOP_REF
-#define LOOP_REF		ULONG_C(1000000)	/* éåº¦è¨æ¸¬ç¨ã®ã«ã¼ãåæ° */
+#define LOOP_REF		ULONG_C(1000000)	/* 速度計測用のループ回数 */
 #endif /* LOOP_REF */
 
 /*
- *  é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨
+ *  関数のプロトタイプ宣言
  */
 #ifndef TOPPERS_MACRO_ONLY
Index: azure_iot_hub/trunk/asp3_dcre/sample/tSample2.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/tSample2.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/tSample2.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,90 +42,66 @@
 
 /* 
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®æ¬ä½
- *
- *  ASPã«ã¼ãã«ã®åºæ¬çãªåä½ãç¢ºèªããããã®ãµã³ãã«ãã­ã°ã©ã ï¼
- *
- *  ãã­ã°ã©ã ã®æ¦è¦:
- *
- *  ã¦ã¼ã¶ã¤ã³ã¿ãã§ã¼ã¹ãåãæã¤ã¡ã¤ã³ã¿ã¹ã¯ï¼ã¿ã¹ã¯ID: MAIN_TASKï¼åª
- *  å
-åº¦: MAIN_PRIORITYï¼ã¨ï¼3ã¤ã®ä¸¦è¡å®è¡ãããã¿ã¹ã¯ï¼ã¿ã¹ã¯ID:
- *  TASK1ï½TASK3ï¼åæåªå
-åº¦: MID_PRIORITYï¼ã§æ§æãããï¼ã¾ãï¼èµ·åå¨
- *  æã2ç§ã®å¨æãã³ãã©ï¼å¨æãã³ãã©ID: CYCHDR1ï¼ãç¨ããï¼
- *
- *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯ã¯ï¼task_loopåç©ºã«ã¼ããå®è¡ããåº¦ã«ï¼ã¿ã¹ã¯ã
- *  å®è¡ä¸­ã§ãããã¨ãããããã¡ãã»ã¼ã¸ãè¡¨ç¤ºããï¼ç©ºã«ã¼ããå®è¡ãã
- *  ã®ã¯ï¼ç©ºã«ã¼ããªãã§ã¡ãã»ã¼ã¸ãåºåããã¨ï¼å¤éã®ã¡ãã»ã¼ã¸ãåºå
- *  ããï¼ãã­ã°ã©ã ã®åä½ãç¢ºèªãããããªãããã§ããï¼ã¾ãï¼ä½éãªã·
- *  ãªã¢ã«ãã¼ããç¨ãã¦ã¡ãã»ã¼ã¸ãåºåããå ´åã«ï¼ãã¹ã¦ã®ã¡ãã»ã¼ã¸
- *  ãåºåã§ããããã«ï¼ã¡ãã»ã¼ã¸ã®éãå¶éããã¨ããçç±ãããï¼
- *
- *  å¨æãã³ãã©ã¯ï¼ä¸ã¤ã®åªå
-åº¦ï¼HIGH_PRIORITYï¼MID_PRIORITYï¼
- *  LOW_PRIORITYï¼ã®ã¬ãã£ã­ã¥ã¼ãåè»¢ãããï¼ãã­ã°ã©ã ã®èµ·åç´å¾ã¯ï¼
- *  å¨æãã³ãã©ã¯åæ­¢ç¶æ
-ã«ãªã£ã¦ããï¼
- *
- *  ã¡ã¤ã³ã¿ã¹ã¯ã¯ï¼ã·ãªã¢ã«I/Oãã¼ãããã®æå­å
-¥åãè¡ãï¼æå­å
-¥åã
- *  å¾
-ã£ã¦ããéã¯ï¼ä¸¦åå®è¡ãããã¿ã¹ã¯ãå®è¡ããã¦ããï¼ï¼å
-¥åããã
- *  æå­ã«å¯¾å¿ããå¦çãå®è¡ããï¼å
-¥åãããæå­ã¨å¦çã®é¢ä¿ã¯æ¬¡ã®éãï¼
- *  Control-Cã¾ãã¯'Q'ãå
-¥åãããã¨ï¼ãã­ã°ã©ã ãçµäºããï¼
- *
- *  '1' : å¯¾è±¡ã¿ã¹ã¯ãTASK1ã«åãæããï¼åæè¨­å®ï¼ï¼
- *  '2' : å¯¾è±¡ã¿ã¹ã¯ãTASK2ã«åãæããï¼
- *  '3' : å¯¾è±¡ã¿ã¹ã¯ãTASK3ã«åãæããï¼
- *  'a' : å¯¾è±¡ã¿ã¹ã¯ãcTask_activateã«ããèµ·åããï¼
- *  'A' : å¯¾è±¡ã¿ã¹ã¯ã«å¯¾ããèµ·åè¦æ±ãcTask_cancelActivateã«ããã­ã£ã³ã»ã«ããï¼
- *  'e' : å¯¾è±¡ã¿ã¹ã¯ã«exitTaskãå¼ã³åºããï¼çµäºãããï¼
- *  't' : å¯¾è±¡ã¿ã¹ã¯ãcTask_terminateã«ããå¼·å¶çµäºããï¼
- *  '>' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãHIGH_PRIORITYã«ããï¼
- *  '=' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãMID_PRIORITYã«ããï¼
- *  '<' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãLOW_PRIORITYã«ããï¼
- *  'G' : å¯¾è±¡ã¿ã¹ã¯ã®åªå
-åº¦ãcTask_getPriorityã§èª­ã¿åºãï¼
- *  's' : å¯¾è±¡ã¿ã¹ã¯ã«sleepãå¼ã³åºããï¼èµ·åºå¾
-ã¡ã«ãããï¼
- *  'S' : å¯¾è±¡ã¿ã¹ã¯ã«sleepTimeout10ç§)ãå¼ã³åºããï¼èµ·åºå¾
-ã¡ã«ãããï¼
- *  'w' : å¯¾è±¡ã¿ã¹ã¯ãcTask_wakeupã«ããèµ·åºããï¼
- *  'W' : å¯¾è±¡ã¿ã¹ã¯ã«å¯¾ããèµ·åºè¦æ±ãcTask_cancelWakeupã«ããã­ã£ã³ã»ã«ããï¼
- *  'l' : å¯¾è±¡ã¿ã¹ã¯ãcTask_releaseWaitã«ããå¼·å¶çã«å¾
-ã¡è§£é¤ã«ããï¼
- *  'u' : å¯¾è±¡ã¿ã¹ã¯ãcTask_suspendã«ããå¼·å¶å¾
-ã¡ç¶æ
-ã«ããï¼
- *  'm' : å¯¾è±¡ã¿ã¹ã¯ã®å¼·å¶å¾
-ã¡ç¶æ
-ãcTask_resumeã«ããè§£é¤ããï¼
- *  'd' : å¯¾è±¡ã¿ã¹ã¯ã«delay(10ç§)ãå¼ã³åºããï¼æéçµéå¾
-ã¡ã«ãããï¼
- *  'x' : å¯¾è±¡ã¿ã¹ã¯ã«raiseTerminateã«ããçµäºè¦æ±ããï¼
- *  'y' : å¯¾è±¡ã¿ã¹ã¯ã«disableTerminateãå¼ã³åºããï¼ã¿ã¹ã¯çµäºãç¦æ­¢ããï¼
- *  'Y' : å¯¾è±¡ã¿ã¹ã¯ã«enableTerminateãå¼ã³åºããï¼ã¿ã¹ã¯çµäºãè¨±å¯ããï¼
- *  'r' : 3ã¤ã®åªå
-åº¦ï¼HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITYï¼ã®ã¬
- *        ãã£ã­ã¥ã¼ãåè»¢ãããï¼
- *  'c' : å¨æãã³ãã©ãåä½éå§ãããï¼
- *  'C' : å¨æãã³ãã©ãåä½åæ­¢ãããï¼
- *  'b' : ã¢ã©ã¼ã ãã³ãã©ã5ç§å¾ã«èµ·åããããåä½éå§ãããï¼
- *  'B' : ã¢ã©ã¼ã ãã³ãã©ãåä½åæ­¢ãããï¼
- *  'z' : å¯¾è±¡ã¿ã¹ã¯ã«CPUä¾å¤ãçºçãããï¼ã¿ã¹ã¯ãçµäºãããï¼ï¼
- *  'Z' : å¯¾è±¡ã¿ã¹ã¯ã«CPUã­ãã¯ç¶æ
-ã§CPUä¾å¤ãçºçãããï¼ãã­ã°ã©ã ã
- *        çµäºããï¼ï¼
- *  'V' : fetchHighResolutionTimerã§é«åè§£è½ã¿ã¤ãã2åèª­ãï¼
- *  'v' : çºè¡ããã·ã¹ãã ã³ã¼ã«ãè¡¨ç¤ºããï¼ããã©ã«ãï¼ï¼
- *  'q' : çºè¡ããã·ã¹ãã ã³ã¼ã«ãè¡¨ç¤ºããªãï¼
- * å¼ã³å£é¢æ° #_TCPF_#
+ *  サンプルプログラム(1)の本体
+ *
+ *  ASPカーネルの基本的な動作を確認するためのサンプルプログラム．
+ *
+ *  プログラムの概要:
+ *
+ *  ユーザインタフェースを受け持つメインタスク（タスクID: MAIN_TASK，優
+ *  先度: MAIN_PRIORITY）と，3つの並行実行されるタスク（タスクID:
+ *  TASK1～TASK3，初期優先度: MID_PRIORITY）で構成される．また，起動周
+ *  期が2秒の周期ハンドラ（周期ハンドラID: CYCHDR1）を用いる．
+ *
+ *  並行実行されるタスクは，task_loop回空ループを実行する度に，タスクが
+ *  実行中であることをあらわすメッセージを表示する．空ループを実行する
+ *  のは，空ループなしでメッセージを出力すると，多量のメッセージが出力
+ *  され，プログラムの動作が確認しずらくなるためである．また，低速なシ
+ *  リアルポートを用いてメッセージを出力する場合に，すべてのメッセージ
+ *  が出力できるように，メッセージの量を制限するという理由もある．
+ *
+ *  周期ハンドラは，三つの優先度（HIGH_PRIORITY，MID_PRIORITY，
+ *  LOW_PRIORITY）のレディキューを回転させる．プログラムの起動直後は，
+ *  周期ハンドラは停止状態になっている．
+ *
+ *  メインタスクは，シリアルI/Oポートからの文字入力を行い（文字入力を
+ *  待っている間は，並列実行されるタスクが実行されている），入力された
+ *  文字に対応した処理を実行する．入力された文字と処理の関係は次の通り．
+ *  Control-Cまたは'Q'が入力されると，プログラムを終了する．
+ *
+ *  '1' : 対象タスクをTASK1に切り換える（初期設定）．
+ *  '2' : 対象タスクをTASK2に切り換える．
+ *  '3' : 対象タスクをTASK3に切り換える．
+ *  'a' : 対象タスクをcTask_activateにより起動する．
+ *  'A' : 対象タスクに対する起動要求をcTask_cancelActivateによりキャンセルする．
+ *  'e' : 対象タスクにexitTaskを呼び出させ，終了させる．
+ *  't' : 対象タスクをcTask_terminateにより強制終了する．
+ *  '>' : 対象タスクの優先度をHIGH_PRIORITYにする．
+ *  '=' : 対象タスクの優先度をMID_PRIORITYにする．
+ *  '<' : 対象タスクの優先度をLOW_PRIORITYにする．
+ *  'G' : 対象タスクの優先度をcTask_getPriorityで読み出す．
+ *  's' : 対象タスクにsleepを呼び出させ，起床待ちにさせる．
+ *  'S' : 対象タスクにsleepTimeout10秒)を呼び出させ，起床待ちにさせる．
+ *  'w' : 対象タスクをcTask_wakeupにより起床する．
+ *  'W' : 対象タスクに対する起床要求をcTask_cancelWakeupによりキャンセルする．
+ *  'l' : 対象タスクをcTask_releaseWaitにより強制的に待ち解除にする．
+ *  'u' : 対象タスクをcTask_suspendにより強制待ち状態にする．
+ *  'm' : 対象タスクの強制待ち状態をcTask_resumeにより解除する．
+ *  'd' : 対象タスクにdelay(10秒)を呼び出させ，時間経過待ちにさせる．
+ *  'x' : 対象タスクにraiseTerminateにより終了要求する．
+ *  'y' : 対象タスクにdisableTerminateを呼び出させ，タスク終了を禁止する．
+ *  'Y' : 対象タスクにenableTerminateを呼び出させ，タスク終了を許可する．
+ *  'r' : 3つの優先度（HIGH_PRIORITY，MID_PRIORITY，LOW_PRIORITY）のレ
+ *        ディキューを回転させる．
+ *  'c' : 周期ハンドラを動作開始させる．
+ *  'C' : 周期ハンドラを動作停止させる．
+ *  'b' : アラームハンドラを5秒後に起動するよう動作開始させる．
+ *  'B' : アラームハンドラを動作停止させる．
+ *  'z' : 対象タスクにCPU例外を発生させる（タスクを終了させる）．
+ *  'Z' : 対象タスクにCPUロック状態でCPU例外を発生させる（プログラムを
+ *        終了する）．
+ *  'V' : fetchHighResolutionTimerで高分解能タイマを2回読む．
+ *  'v' : 発行したシステムコールを表示する（デフォルト）．
+ *  'q' : 発行したシステムコールを表示しない．
+ * 呼び口関数 #_TCPF_#
  * require port: signature:sKernel context:task
  *   ER             getExtendedInformation( intptr_t* p_exinf );
@@ -246,5 +207,5 @@
 
 /*
- *  ãµã¼ãã¹ã³ã¼ã«ã®ã¨ã©ã¼ã®ã­ã°åºå
+ *  サービスコールのエラーのログ出力
  */
 Inline void
@@ -259,16 +220,15 @@
 
 /*
- *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯ã¸ã®ã¡ãã»ã¼ã¸é å
+ *  並行実行されるタスクへのメッセージ領域
  */
 char	message[3];
 
 /*
- *  ã«ã¼ãåæ°
- */
-ulong_t	task_loop;		/* ã¿ã¹ã¯å
-ã§ã®ã«ã¼ãåæ° */
-
-/*
- *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯
+ *  ループ回数
+ */
+ulong_t	task_loop;		/* タスク内でのループ回数 */
+
+/*
+ *  並行実行されるタスク
  */
 void eSampleTask_main(int_t subscript)
@@ -330,8 +290,8 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©
- */
-
-ID	cpuexc_tskid;		/* CPUä¾å¤ãèµ·ãããã¿ã¹ã¯ã®ID */
+ *  CPU例外ハンドラ
+ */
+
+ID	cpuexc_tskid;		/* CPU例外を起こしたタスクのID */
 
 #ifdef CPUEXC1
@@ -373,9 +333,8 @@
 
 /*
- *  å¨æãã³ãã©
- *
- *  HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå
-åº¦ã®ã¬ãã£ã­ã¥ã¼
- *  ãåè»¢ãããï¼
+ *  周期ハンドラ
+ *
+ *  HIGH_PRIORITY，MID_PRIORITY，LOW_PRIORITY の各優先度のレディキュー
+ *  を回転させる．
  */
 /* #[<ENTRY_FUNC>]# eiCyclicHandler_main
@@ -393,9 +352,8 @@
 
 /*
- *  ã¢ã©ã¼ã ãã³ãã©
- *
- *  HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå
-åº¦ã®ã¬ãã£ã­ã¥ã¼
- *  ãåè»¢ãããï¼
+ *  アラームハンドラ
+ *
+ *  HIGH_PRIORITY，MID_PRIORITY，LOW_PRIORITY の各優先度のレディキュー
+ *  を回転させる．
  */
 /* #[<ENTRY_FUNC>]# eiAlarmHandler_main
@@ -412,5 +370,5 @@
 }
 /*
- *  ä¾å¤å¦çã¿ã¹ã¯
+ *  例外処理タスク
  */
 /* #[<ENTRY_FUNC>]# eExceptionTask_main
@@ -424,7 +382,7 @@
 }
 /*
- *  ã¡ã¤ã³ã¿ã¹ã¯
- */
-/* å±æ§ã®è¨­å® *//* #[<ENTRY_FUNC>]# eMainTask_main
+ *  メインタスク
+ */
+/* 属性の設定 *//* #[<ENTRY_FUNC>]# eMainTask_main
  * name:         eMainTask_main
  * global_name:  tSample2_eMainTask_main
@@ -447,7 +405,6 @@
 	} else {
 		/*
-		 *  ã·ãªã¢ã«åºåãã§ããªãå ´åãã­ã°ã¡ãã»ã¼ã¸ãå
-¨ã¦
-		 *  ä½ã¬ãã«åºåã«ããåºåããã
+		 *  シリアル出力ができない場合、ログメッセージを全て
+		 *  低レベル出力により出力する。
 		 */
 		SVC_PERROR(cSysLog_mask(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_DEBUG)));
@@ -456,9 +413,9 @@
 
 	/*
-	 *  ã·ãªã¢ã«ãã¼ãã®åæå
+	 *  シリアルポートの初期化
 	 *
-	 *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¨åãã·ãªã¢ã«ãã¼ããä½¿ãå ´åãªã©ï¼ã·ãªã¢ã«
-	 *  ãã¼ãããªã¼ãã³æ¸ã¿ã®å ´åã«ã¯ããã§E_OBJã¨ã©ã¼ã«ãªããï¼æ¯éã¯
-	 *  ãªãï¼
+	 *  システムログタスクと同じシリアルポートを使う場合など，シリアル
+	 *  ポートがオープン済みの場合にはここでE_OBJエラーになるが，支障は
+	 *  ない．
 	 */
 
@@ -473,31 +430,29 @@
 
 	/*
- 	 *  ã«ã¼ãåæ°ã®è¨­å®
+ 	 *  ループ回数の設定
 	 *
-	 *  ä¸¦è¡å®è¡ãããã¿ã¹ã¯å
-ã§ã®ç©ºã«ã¼ãã®åæ°ï¼task_loopï¼ã¯ï¼ç©ºã«ã¼
-	 *  ãã®å®è¡æéãç´0.4ç§ã«ãªãããã«è¨­å®ããï¼ãã®è¨­å®ã®ããã«ï¼
-	 *  LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãï¼ãã®åå¾ã§get_timãå¼ã¶ãã¨ã§
-	 *  æ¸¬å®ãï¼ãã®æ¸¬å®çµæããç©ºã«ã¼ãã®å®è¡æéã0.4ç§ã«ãªãã«ã¼ãå
-	 *  æ°ãæ±ãï¼task_loopã«è¨­å®ããï¼
+	 *  並行実行されるタスク内での空ループの回数（task_loop）は，空ルー
+	 *  プの実行時間が約0.4秒になるように設定する．この設定のために，
+	 *  LOOP_REF回の空ループの実行時間を，その前後でget_timを呼ぶことで
+	 *  測定し，その測定結果から空ループの実行時間が0.4秒になるループ回
+	 *  数を求め，task_loopに設定する．
 	 *
-	 *  LOOP_REFã¯ï¼ããã©ã«ãã§ã¯1,000,000ã«è¨­å®ãã¦ãããï¼æ³å®ããã
-	 *  ãé
-ããã­ã»ããµã§ã¯ï¼ãµã³ãã«ãã­ã°ã©ã ã®å®è¡éå§ã«æéããã
-	 *  ããããã¨ããåé¡ãçããï¼éã«æ³å®ããããéããã­ã»ããµã§ã¯ï¼
-	 *  LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãç­ããªãï¼task_loopã«è¨­å®ããå¤
-	 *  ã®èª¤å·®ãå¤§ãããªãã¨ããåé¡ãããï¼
+	 *  LOOP_REFは，デフォルトでは1,000,000に設定しているが，想定したよ
+	 *  り遅いプロセッサでは，サンプルプログラムの実行開始に時間がかか
+	 *  りすぎるという問題を生じる．逆に想定したより速いプロセッサでは，
+	 *  LOOP_REF回の空ループの実行時間が短くなり，task_loopに設定する値
+	 *  の誤差が大きくなるという問題がある．
 	 *
-	 *  ããã§ï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼target_test.hã§ï¼LOOP_REFãé©
-	 *  åãªå¤ã«å®ç¾©ããã®ãæã¾ããï¼
+	 *  そこで，そのようなターゲットでは，target_test.hで，LOOP_REFを適
+	 *  切な値に定義するのが望ましい．
 	 *
-	 *  ã¾ãï¼task_loopã®å¤ãåºå®ãããå ´åã«ã¯ï¼ãã®å¤ãTASK_LOOPã«ã
-	 *  ã¯ã­å®ç¾©ããï¼TASK_LOOPããã¯ã­å®ç¾©ããã¦ããå ´åï¼ä¸è¨ã®æ¸¬å®ã
-	 *  è¡ããã«ï¼TASK_LOOPã«å®ç¾©ãããå¤ãç©ºã«ã¼ãã®åæ°ã¨ããï¼
+	 *  また，task_loopの値を固定したい場合には，その値をTASK_LOOPにマ
+	 *  クロ定義する．TASK_LOOPがマクロ定義されている場合，上記の測定を
+	 *  行わずに，TASK_LOOPに定義された値を空ループの回数とする．
 	 *
-	 * ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ç©ºã«ã¼ãã®å®è¡æéã®1åç®ã®æ¸¬å®ã§ï¼æ¬æ¥ã
-	 * ããé·ãã«ãªããã®ãããï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼MEASURE_TWICE
-	 * ããã¯ã­å®ç¾©ãããã¨ã§ï¼1åç®ã®æ¸¬å®çµæãæ¨ã¦ã¦ï¼2åç®ã®æ¸¬å®çµæ
-	 * ãä½¿ãï¼
+	 * ターゲットによっては，空ループの実行時間の1回目の測定で，本来よ
+	 * りも長めになるものがある．このようなターゲットでは，MEASURE_TWICE
+	 * をマクロ定義することで，1回目の測定結果を捨てて，2回目の測定結果
+	 * を使う．
 	 */
 #ifdef TASK_LOOP
@@ -521,5 +476,5 @@
 
 	/*
- 	 *  ã¿ã¹ã¯ã®èµ·å
+ 	 *  タスクの起動
 	 */
 
@@ -529,5 +484,5 @@
 
 	/*
- 	 *  ã¡ã¤ã³ã«ã¼ã
+ 	 *  メインループ
 	 */
 	if (is_cSerialPort_joined()) {
Index: azure_iot_hub/trunk/asp3_dcre/sample/tSample2.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/tSample2.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/tSample2.cdl	(revision 389)
@@ -1,14 +1,14 @@
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (2)ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		サンプルプログラム(2)のコンポーネント記述ファイル
  *
  *  $Id$
  */
 /*
- *  ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å®ç¾©
+ *  カーネルオブジェクトの定義
  */
 import("kernel.cdl");
 
 /*
- *  ã¿ã¼ã²ããéä¾å­ã®ã»ã«ã¿ã¤ãã®å®ç¾©
+ *  ターゲット非依存のセルタイプの定義
  */
 import("syssvc/tSerialPort.cdl");
@@ -18,82 +18,79 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨ã®åãè¾¼ã¿
+ *  ターゲット依存部の取り込み
  */
 import("target.cdl");
 
 /*
- *  ãã»ã«ã®çµä¸ãè¨è¿°ãã¨ã¯ï¼"cell"ã§å§ã¾ãè¡ããï¼ããã«å¯¾å¿ãã"};"
- *  ã®è¡ã¾ã§ã®ãã¨ãè¨ãï¼
- */
-
-/*
- *  ã·ã¹ãã ã­ã°æ©è½ã®çµä¸ãè¨è¿°
- *
- *  ã·ã¹ãã ã­ã°æ©è½ãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ãï¼ã³
- *  ã³ãã¤ã«ãªãã·ã§ã³ã«-DTOPPERS_OMIT_SYSLOGãè¿½å ããã°ããï¼ãã ãï¼
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¯ã·ã¹ãã ã­ã°æ©è½ãä½¿ç¨ããããï¼ãããå¤ããã¨
- *  ãå¿
-è¦ã§ããï¼ã¾ãï¼ã·ã¹ãã ã­ã°æ©è½ã®ã¢ããã¿ãå¤ããªããã°ãªããª
- *  ãï¼tecsgenãè­¦åã¡ãã»ã¼ã¸ãåºããï¼ç¡è¦ãã¦ããï¼
+ *  「セルの組上げ記述」とは，"cell"で始まる行から，それに対応する"};"
+ *  の行までのことを言う．
+ */
+
+/*
+ *  システムログ機能の組上げ記述
+ *
+ *  システムログ機能を外す場合には，以下のセルの組上げ記述を削除し，コ
+ *  ンパイルオプションに-DTOPPERS_OMIT_SYSLOGを追加すればよい．ただし，
+ *  システムログタスクはシステムログ機能を使用するため，それも外すこと
+ *  が必要である．また，システムログ機能のアダプタも外さなければならな
+ *  い．tecsgenが警告メッセージを出すが，無視してよい．
  */
 cell tSysLog SysLog {
-	logBufferSize = 32;					/* ã­ã°ãããã¡ã®ãµã¤ãº */
+	logBufferSize = 32;					/* ログバッファのサイズ */
 	initLogMask = C_EXP("LOG_UPTO(LOG_NOTICE)");
-										/* ã­ã°ãããã¡ã«è¨é²ãã¹ãéè¦åº¦ */
+										/* ログバッファに記録すべき重要度 */
 	initLowMask = C_EXP("LOG_UPTO(LOG_EMERG)");
-									   	/* ä½ã¬ãã«åºåãã¹ãéè¦åº¦ */
-
-	/* ä½ã¬ãã«åºåã¨ã®çµå */
+									   	/* 低レベル出力すべき重要度 */
+
+	/* 低レベル出力との結合 */
 	cPutLog = PutLogTarget.ePutLog;
 };
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®çµä¸ãè¨è¿°
- *
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨
- *  è¿°ãåé¤ããã°ããï¼ãã ãï¼ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã¯ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼
- *  ã¹ãã©ã¤ããä½¿ç¨ããããï¼ãããå¤ããã¨ãå¿
-è¦ã§ããï¼ã¾ãï¼ã·ãªã¢
- *  ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¢ããã¿ãå¤ããªããã°ãªããªãï¼
+ *  シリアルインタフェースドライバの組上げ記述
+ *
+ *  シリアルインタフェースドライバを外す場合には，以下のセルの組上げ記
+ *  述を削除すればよい．ただし，システムログタスクはシリアルインタフェー
+ *  スドライバを使用するため，それも外すことが必要である．また，シリア
+ *  ルインタフェースドライバのアダプタも外さなければならない．
  */
 cell tSerialPort SerialPort1 {
-	receiveBufferSize = 256;			/* åä¿¡ãããã¡ã®ãµã¤ãº */
-	sendBufferSize    = 256;			/* éä¿¡ãããã¡ã®ãµã¤ãº */
-
-	/* ã¿ã¼ã²ããä¾å­é¨ã¨ã®çµå */
+	receiveBufferSize = 256;			/* 受信バッファのサイズ */
+	sendBufferSize    = 256;			/* 送信バッファのサイズ */
+
+	/* ターゲット依存部との結合 */
 	cSIOPort = SIOPortTarget1.eSIOPort;
-	eiSIOCBR <= SIOPortTarget1.ciSIOCBR;	/* ã³ã¼ã«ããã¯ */
-};
-
-/*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®çµä¸ãè¨è¿°
- *
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°ãåé¤ãã
- *  ã°ããï¼
+	eiSIOCBR <= SIOPortTarget1.ciSIOCBR;	/* コールバック */
+};
+
+/*
+ *  システムログタスクの組上げ記述
+ *
+ *  システムログタスクを外す場合には，以下のセルの組上げ記述を削除すれ
+ *  ばよい．
  */
 cell tLogTask LogTask {
-	priority  = 3;					/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®åªå
-åº¦ */
-	stackSize = LogTaskStackSize;	/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
-
-	/* ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå */
+	priority  = 3;					/* システムログタスクの優先度 */
+	stackSize = LogTaskStackSize;	/* システムログタスクのスタックサイズ */
+
+	/* シリアルインタフェースドライバとの結合 */
 	cSerialPort        = SerialPort1.eSerialPort;
 	cnSerialPortManage = SerialPort1.enSerialPortManage;
 
-	/* ã·ã¹ãã ã­ã°æ©è½ã¨ã®çµå */
+	/* システムログ機能との結合 */
 	cSysLog = SysLog.eSysLog;
 
-	/* ä½ã¬ãã«åºåã¨ã®çµå */
+	/* 低レベル出力との結合 */
 	cPutLog = PutLogTarget.ePutLog;
 };
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸åºåã®çµä¸ãè¨è¿°
- *
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåãå¤ãå ´åã«ã¯ï¼ä»¥ä¸ã®ã»ã«ã®çµä¸ãè¨è¿°
- *  ãåé¤ããã°ããï¼
+ *  カーネル起動メッセージ出力の組上げ記述
+ *
+ *  カーネル起動メッセージの出力を外す場合には，以下のセルの組上げ記述
+ *  を削除すればよい．
  */
 cell tBanner Banner {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	targetName      = BannerTargetName;
 	copyrightNotice = BannerCopyrightNotice;
@@ -101,33 +98,33 @@
 
 /*
- *  ãµã³ãã«ãã­ã°ã©ã ã®å®ç¾©
+ *  サンプルプログラムの定義
  */
 [singleton]
 celltype tSample2 {
-	require tKernel.eKernel;			/* å¼ã³å£åãªãï¼ä¾ï¼delayï¼*/
-	/*require cKernel = tKernel.eKernel;/* å¼ã³å£åããï¼ä¾ï¼cKernel_delayï¼*/
-	require ciKernel = tKernel.eiKernel;/* å¼ã³å£åããï¼ä¾ï¼ciKernel_ï¼*/
-
-	call sTask		    cTask[4];		/* ã¿ã¹ã¯æä½ */
+	require tKernel.eKernel;			/* 呼び口名なし（例：delay）*/
+	/*require cKernel = tKernel.eKernel;/* 呼び口名あり（例：cKernel_delay）*/
+	require ciKernel = tKernel.eiKernel;/* 呼び口名あり（例：ciKernel_）*/
+
+	call sTask		    cTask[4];		/* タスク操作 */
 	call sTask 			cExceptionTask;
 	call sCyclic        cCyclic;
 	call sAlarm         cAlarm;
 
-	[optional] call sSerialPort	cSerialPort;/* ã·ãªã¢ã«ãã©ã¤ãã¨ã®æ¥ç¶ */
-	call sSysLog		cSysLog;		/* ã·ã¹ãã ã­ã°æ©è½ã¨ã®æ¥ç¶ */
+	[optional] call sSerialPort	cSerialPort;/* シリアルドライバとの接続 */
+	call sSysLog		cSysLog;		/* システムログ機能との接続 */
 	
-	entry sTaskBody		eMainTask;	  	/* Mainã¿ã¹ã¯ */
-	entry sTaskBody		eSampleTask[3];	/* ä¸¦è¡å®è¡ãããã¿ã¹ã¯ */
-	entry sTaskBody		eExceptionTask;	/* ä¾å¤å¦çã¿ã¹ã¯ */
+	entry sTaskBody		eMainTask;	  	/* Mainタスク */
+	entry sTaskBody		eSampleTask[3];	/* 並行実行されるタスク */
+	entry sTaskBody		eExceptionTask;	/* 例外処理タスク */
 	
-	entry siHandlerBody eiCyclicHandler;/* å¨æãã³ãã©*/
-	entry siHandlerBody eiAlarmHandler; /* ã¢ã©ã¼ã ãã³ãã© */
-};
-
-/*
- *  çµã¿ä¸ãè¨è¿°
- */
-
-/* Sample2ã®ãã­ãã¿ã¤ãå®£è¨ */
+	entry siHandlerBody eiCyclicHandler;/* 周期ハンドラ*/
+	entry siHandlerBody eiAlarmHandler; /* アラームハンドラ */
+};
+
+/*
+ *  組み上げ記述
+ */
+
+/* Sample2のプロトタイプ宣言 */
 cell tSample2 Sample2;
 
@@ -136,7 +133,7 @@
 
 cell tTask MainTask {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	cTaskBody = Sample2.eMainTask;
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	attribute = C_EXP("TA_ACT");
 	priority = C_EXP("MAIN_PRIORITY");
@@ -145,7 +142,7 @@
 
 cell tTask Task1 {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	cTaskBody = Sample2.eSampleTask[0];
-	  /* å±æ§ã®è¨­å® */
+	  /* 属性の設定 */
 	priority = C_EXP("MID_PRIORITY");
 	stackSize = C_EXP("STACK_SIZE");
@@ -153,7 +150,7 @@
 
 cell tTask Task2 {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	cTaskBody = Sample2.eSampleTask[1];
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	priority = C_EXP("MID_PRIORITY");
 	stackSize = C_EXP("STACK_SIZE");
@@ -161,7 +158,7 @@
 
 cell tTask Task3 {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	cTaskBody = Sample2.eSampleTask[2];
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	priority = C_EXP("MID_PRIORITY");
 	stackSize = C_EXP("STACK_SIZE");
@@ -169,7 +166,7 @@
 
 cell tTask ExceptionTask {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	cTaskBody = Sample2.eExceptionTask;
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	priority = C_EXP("EXC_PRIORITY");
 	stackSize = C_EXP("STACK_SIZE");
@@ -177,7 +174,7 @@
 
 cell tCyclicHandler CyclicHandler {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	ciHandlerBody = Sample2.eiCyclicHandler;
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	cycleTime = 2000000;
 };
@@ -188,5 +185,5 @@
 
 cell tSample2 Sample2 {
-	/* å¼ã³å£ã®çµå */
+	/* 呼び口の結合 */
 	cTask[ 0 ] = MainTask.eTask;
 	cTask[ 1 ] = Task1.eTask;
Index: azure_iot_hub/trunk/asp3_dcre/sample/tSample2.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/tSample2.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/tSample2.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (2)ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *		サンプルプログラム(2)のシステムコンフィギュレーションファイル
  *
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/sample/tSample2.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/sample/tSample2.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/sample/tSample2.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  $Id$
@@ -57,42 +42,38 @@
 
 /*
- *		ãµã³ãã«ãã­ã°ã©ã (2)ã®ããããã¡ã¤ã«
+ *		サンプルプログラム(2)のヘッダファイル
  */
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®å®ç¾©
+ *  ターゲット依存の定義
  */
 #include "target_test.h"
 
 /*
- *  åã¿ã¹ã¯ã®åªå
-åº¦ã®å®ç¾©
+ *  各タスクの優先度の定義
  */
 
-#define EXC_PRIORITY	1		/* ä¾å¤å¦çã¿ã¹ã¯ã®åªå
-åº¦ */
-#define MAIN_PRIORITY	5		/* ã¡ã¤ã³ã¿ã¹ã¯ã®åªå
-åº¦ */
-								/* HIGH_PRIORITYããé«ããããã¨ */
+#define EXC_PRIORITY	1		/* 例外処理タスクの優先度 */
+#define MAIN_PRIORITY	5		/* メインタスクの優先度 */
+								/* HIGH_PRIORITYより高くすること */
 
-#define HIGH_PRIORITY	9		/* ä¸¦åã«å®è¡ãããã¿ã¹ã¯ã®åªå
-åº¦ */
+#define HIGH_PRIORITY	9		/* 並列に実行されるタスクの優先度 */
 #define MID_PRIORITY	10
 #define LOW_PRIORITY	11
 
 /*
- *  ã¿ã¼ã²ããã«ä¾å­ããå¯è½æ§ã®ããå®æ°ã®å®ç¾©
+ *  ターゲットに依存する可能性のある定数の定義
  */
 
 #ifndef STACK_SIZE
-#define	STACK_SIZE		4096		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
+#define	STACK_SIZE		4096		/* タスクのスタックサイズ */
 #endif /* STACK_SIZE */
 
 #ifndef LOOP_REF
-#define LOOP_REF		ULONG_C(1000000)	/* éåº¦è¨æ¸¬ç¨ã®ã«ã¼ãåæ° */
+#define LOOP_REF		ULONG_C(1000000)	/* 速度計測用のループ回数 */
 #endif /* LOOP_REF */
 
 /*
- *  é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨
+ *  関数のプロトタイプ宣言
  */
 #ifndef TOPPERS_MACRO_ONLY
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/histogram.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/histogram.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/histogram.h	(revision 389)
@@ -6,47 +6,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -54,5 +39,5 @@
 
 /*
- *		å®è¡æéåå¸éè¨ãµã¼ãã¹
+ *		実行時間分布集計サービス
  */
 
@@ -67,20 +52,20 @@
 
 /*
- *  å®è¡æéåå¸è¨æ¸¬ã®åæå
+ *  実行時間分布計測の初期化
  */
 extern void	init_hist(ID histid);
 
 /*
- *  å®è¡æéè¨æ¸¬ã®éå§
+ *  実行時間計測の開始
  */
 extern void	begin_measure(ID histid);
 
 /*
- *  å®è¡æéè¨æ¸¬ã®çµäº
+ *  実行時間計測の終了
  */
 extern void	end_measure(ID histid);
 
 /*
- *  å®è¡æéåå¸è¨æ¸¬ã®è¡¨ç¤º
+ *  実行時間分布計測の表示
  */
 extern void	print_hist(ID histid);
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/musl_adapter.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/serial.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/serial.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/serial.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã
+ *		シリアルインタフェースドライバ
  */
 
@@ -70,19 +55,19 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ç¨ãããã±ãã
+ *  シリアルインタフェースドライバの用いるパケット
  */
 typedef struct {
-	uint_t		reacnt;			/* åä¿¡ãããã¡ä¸­ã®æå­æ° */
-	uint_t		wricnt;			/* éä¿¡ãããã¡ä¸­ã®æå­æ° */
+	uint_t		reacnt;			/* 受信バッファ中の文字数 */
+	uint_t		wricnt;			/* 送信バッファ中の文字数 */
 } T_SERIAL_RPOR;
 
 #ifdef TOPPERS_OMIT_TECS
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®åæåã«ã¼ãã³
+ *  シリアルインタフェースドライバの初期化ルーチン
  */
 extern void		serial_initialize(intptr_t exinf) throw();
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãããã®æªéä¿¡æå­ã®ååºã
+ *  シリアルインタフェースドライバからの未送信文字の取出し
  */
 extern bool_t	serial_get_chr(ID portid, char *p_c) throw();
@@ -90,5 +75,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãµã¼ãã¹ã³ã¼ã«
+ *  シリアルインタフェースドライバのサービスコール
  */
 extern ER		serial_opn_por(ID portid) throw();
@@ -105,14 +90,14 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®åä½å¶å¾¡ç¨ã®ããã®å®æ°
+ *  シリアルインタフェースドライバの動作制御用のための定数
  *
- *  ä»¥ä¸ã®å®æ°ã¯ï¼ãããæ¯ã«è«çåãã¨ã£ã¦ç¨ããï¼
+ *  以下の定数は，ビット毎に論理和をとって用いる．
  */
-#define	IOCTL_NULL	0U			/* æå®ãªã */
-#define	IOCTL_ECHO	0x0001U		/* åä¿¡ããæå­ãã¨ã³ã¼ããã¯ */
-#define	IOCTL_CRLF	0x0010U		/* LFãéä¿¡ããåã«CRãä»å  */
-#define	IOCTL_FCSND	0x0100U		/* éä¿¡ã«å¯¾ãã¦ãã­ã¼å¶å¾¡ãè¡ã */
-#define	IOCTL_FCANY	0x0200U		/* ã©ã®ãããªæå­ã§ãéä¿¡åé */
-#define	IOCTL_FCRCV	0x0400U		/* åä¿¡ã«å¯¾ãã¦ãã­ã¼å¶å¾¡ãè¡ã */
+#define	IOCTL_NULL	0U			/* 指定なし */
+#define	IOCTL_ECHO	0x0001U		/* 受信した文字をエコーバック */
+#define	IOCTL_CRLF	0x0010U		/* LFを送信する前にCRを付加 */
+#define	IOCTL_FCSND	0x0100U		/* 送信に対してフロー制御を行う */
+#define	IOCTL_FCANY	0x0200U		/* どのような文字でも送信再開 */
+#define	IOCTL_FCRCV	0x0400U		/* 受信に対してフロー制御を行う */
 
 #ifdef __cplusplus
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/siofd.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/siofd.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/siofd.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,6 +37,5 @@
 
 /*
- *	ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿å®è£
-é¨
+ *	シリアルインタフェースドライバのファイルディスクリプタ実装部
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/siofd.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/siofd.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/siofd.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,6 +37,5 @@
 
 /*
- *	ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿å®è£
-é¨
+ *	シリアルインタフェースドライバのファイルディスクリプタ実装部
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/syslog.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/syslog.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/syslog.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°æ©è½
+ *		システムログ機能
  */
 
@@ -72,12 +57,12 @@
 #ifdef TOPPERS_OMIT_TECS
 /*
- *  ã­ã°ãããã¡ã®ãµã¤ãº
+ *  ログバッファのサイズ
  */
 #ifndef TCNT_SYSLOG_BUFFER
-#define TCNT_SYSLOG_BUFFER	32		/* ã­ã°ãããã¡ã®ãµã¤ãº */
+#define TCNT_SYSLOG_BUFFER	32		/* ログバッファのサイズ */
 #endif /* TCNT_SYSLOG_BUFFER */
 
 /*
- *  ã·ã¹ãã ã­ã°æ©è½ã®åæå
+ *  システムログ機能の初期化
  */
 extern void	syslog_initialize(intptr_t exinf) throw();
@@ -85,31 +70,25 @@
 
 /*
- *  ã­ã°æ
-å ±ã®åºå
+ *  ログ情報の出力
  */
 extern ER	syslog_wri_log(uint_t prio, const SYSLOG *p_syslog) throw();
 
 /*
- *  ã­ã°ãããã¡ããã®ã­ã°æ
-å ±ã®èª­åºã
+ *  ログバッファからのログ情報の読出し
  */
 extern ER_UINT	syslog_rea_log(SYSLOG *p_syslog) throw();
 
 /*
- *  åºåãã¹ãã­ã°æ
-å ±ã®éè¦åº¦ã®è¨­å®
+ *  出力すべきログ情報の重要度の設定
  */
 extern ER	syslog_msk_log(uint_t logmask, uint_t lowmask) throw();
 
 /*
- *  ã­ã°ãããã¡ã®ç¶æ
-åç
-§
+ *  ログバッファの状態参照
  */
 extern ER	syslog_ref_log(T_SYSLOG_RLOG *pk_rlog) throw();
 
 /*
- *  ä½ã¬ãã«åºåã«ãããã¹ã¦ã®ã­ã°æ
-å ±ã®åºå
+ *  低レベル出力によるすべてのログ情報の出力
  */
 extern ER	syslog_fls_log(void) throw();
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tBanner.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tBanner.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tBanner.cdl	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸åºåã®æ¬ä½ã®ã»ã«ã¿ã¤ã
+ *  カーネル起動メッセージ出力の本体のセルタイプ
  */
 [singleton]
@@ -62,21 +47,21 @@
 
 	attr {
-		char	*targetName;			/* ã¿ã¼ã²ããå */
-		char	*copyrightNotice;		/* èä½æ¨©è¡¨ç¤º */
+		char	*targetName;			/* ターゲット名 */
+		char	*copyrightNotice;		/* 著作権表示 */
 	};
 };
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸åºåï¼è¤åã³ã³ãã¼ãã³ãï¼ã®ã»ã«ã¿ã¤ã
+ *  カーネル起動メッセージ出力（複合コンポーネント）のセルタイプ
  */
 [singleton,active]
 composite tBanner {
 	attr {
-		char	*targetName;			/* ã¿ã¼ã²ããå */
-		char	*copyrightNotice;		/* èä½æ¨©è¡¨ç¤º */
+		char	*targetName;			/* ターゲット名 */
+		char	*copyrightNotice;		/* 著作権表示 */
 	};
 
 	cell tBannerMain BannerMain {
-		/* å±æ§ã®ç¶æ¿ */
+		/* 属性の継承 */
 		targetName      = composite.targetName;
 		copyrightNotice = composite.copyrightNotice;
@@ -84,5 +69,5 @@
 
 	cell tInitializeRoutine InitializeRoutine {
-		/* å¼ã³å£ */
+		/* 呼び口 */
 		cInitializeRoutineBody = BannerMain.eBannerInitialize;
 	};
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tBannerMain.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tBannerMain.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tBannerMain.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸åºåã®æ¬ä½
+ *		カーネル起動メッセージ出力の本体
  */
 
@@ -64,5 +49,5 @@
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸
+ *  カーネル起動メッセージ
  */
 static const char banner[] = "\n"
@@ -76,5 +61,5 @@
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã®åºåï¼åãå£é¢æ°ï¼
+ *  カーネル起動メッセージの出力（受け口関数）
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tBuiltInTestAdaptor.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tBuiltInTestAdaptor.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tBuiltInTestAdaptor.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		èªå·±è¨ºæ­ãµã¼ãã¹ã®ãã£ã¹ã¯ãªãã¿ãåå¾ãããµã¼ãã¹
+ *		自己診断サービスのディスクリプタを取得するサービス
  */
 
@@ -64,5 +49,5 @@
 
 /*
- *  èªå·±è¨ºæ­ãµã¼ãã¹ã®ãã£ã¹ã¯ãªãã¿ã®åå¾
+ *  自己診断サービスのディスクリプタの取得
  */
 ER
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.c	(revision 389)
@@ -6,47 +6,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -54,5 +39,5 @@
 
 /*
- *		å®è¡æéåå¸éè¨ãµã¼ãã¹
+ *		実行時間分布集計サービス
  */
 
@@ -63,5 +48,5 @@
 
 /* 
- *  å®è¡æéåå¸è¨æ¸¬ã®åæåï¼åãå£é¢æ°ï¼
+ *  実行時間分布計測の初期化（受け口関数）
  */
 void
@@ -79,5 +64,5 @@
 
 /*
- *  å®è¡æéè¨æ¸¬ã®éå§ï¼åãå£é¢æ°ï¼
+ *  実行時間計測の開始（受け口関数）
  */
 void
@@ -91,5 +76,5 @@
 
 /*
- *  å®è¡æéè¨æ¸¬ã®çµäºï¼åãå£é¢æ°ï¼
+ *  実行時間計測の終了（受け口関数）
  */
 void
@@ -121,5 +106,5 @@
 
 /*
- *  å®è¡æéåå¸è¨æ¸¬ã®è¡¨ç¤ºï¼åãå£é¢æ°ï¼
+ *  実行時間分布計測の表示（受け口関数）
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.cdl	(revision 389)
@@ -6,47 +6,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -54,5 +39,5 @@
 
 /*
- *		å®è¡æéåå¸éè¨ãµã¼ãã¹ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		実行時間分布集計サービスのコンポーネント記述ファイル
  */
 
@@ -60,24 +45,24 @@
 
 /*
- *  å®è¡æéåå¸éè¨ãµã¼ãã¹ã®ã·ã°ããã£
+ *  実行時間分布集計サービスのシグニチャ
  */
 signature sHistogram {
 	/*
-	 *  å®è¡æéåå¸è¨æ¸¬ã®åæå
+	 *  実行時間分布計測の初期化
    	 */
 	void	initialize(void);
 
 	/*
-	 *  å®è¡æéè¨æ¸¬ã®éå§
+	 *  実行時間計測の開始
 	 */
 	void	beginMeasure(void);
 
 	/*
-	 *  å®è¡æéè¨æ¸¬ã®çµäº
+	 *  実行時間計測の終了
 	 */
 	void	endMeasure(void);
 
 	/*
-	 *  å®è¡æéåå¸è¨æ¸¬ã®è¡¨ç¤º
+	 *  実行時間分布計測の表示
 	 */
 	void	print(void);
@@ -85,5 +70,5 @@
 
 /*
- *  å®è¡æéåå¸éè¨ãµã¼ãã¹ã®ã»ã«ã¿ã¤ã
+ *  実行時間分布集計サービスのセルタイプ
  */
 celltype tHistogram {
@@ -91,13 +76,12 @@
 
 	attr {
-		uint_t		maxTime = 1000;		/* åå¸ãè¨é²ããæå¤§æé */
+		uint_t		maxTime = 1000;		/* 分布を記録する最大時間 */
 	};
 	var {
 		[size_is(maxTime + 1)] uint_t	*histarea;
-										/* åå¸ãè¨é²ããã¡ã¢ãªé å */
-		histtim_t	begin_time;			/* è¨æ¸¬éå§æå» */
-		uint_t		over;				/* æå¤§æéãè¶
-ããåº¦æ° */
-		uint_t		under;				/* æéã®éè»¢ãçãããåº¦æ° */
+										/* 分布を記録するメモリ領域 */
+		histtim_t	begin_time;			/* 計測開始時刻 */
+		uint_t		over;				/* 最大時間を超えた度数 */
+		uint_t		under;				/* 時間の逆転が疑われる度数 */
 	};
 };
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogram.h	(revision 389)
@@ -6,47 +6,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -54,5 +39,5 @@
 
 /*
- *		å®è¡æéåå¸éè¨ãµã¼ãã¹ã®ããããã¡ã¤ã«
+ *		実行時間分布集計サービスのヘッダファイル
  */
 
@@ -63,28 +48,28 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨ã§è¨­å®å¤æ´ããããã®ãã¯ã­
+ *  ターゲット依存部で設定変更するためのマクロ
  */
-#ifndef HISTTIM						/* å®è¡æéè¨æ¸¬ç¨ã®æå»ã®ãã¼ã¿å */
+#ifndef HISTTIM						/* 実行時間計測用の時刻のデータ型 */
 #define HISTTIM					HRTCNT
 
-#ifdef TCYC_HRTCNT					/* å®è¡æéè¨æ¸¬ç¨ã®æå»ã®å¨æ */
+#ifdef TCYC_HRTCNT					/* 実行時間計測用の時刻の周期 */
 #define HISTTIM_CYCLE			TCYC_HRTCNT
 #endif /* TCYC_HRTCNT */
 #endif /* HISTTIM */
 
-#ifndef HIST_GET_TIM				/* å®è¡æéè¨æ¸¬ç¨ã®ç¾å¨æå»ã®åå¾ */
+#ifndef HIST_GET_TIM				/* 実行時間計測用の現在時刻の取得 */
 #define HIST_GET_TIM(p_time)	(*(p_time) = fch_hrt())
 #endif /* HIST_GET_TIM */
 
-#ifndef HIST_CONV_TIM				/* æå»ã®å·®ããå®è¡æéã¸ã®å¤æ */
+#ifndef HIST_CONV_TIM				/* 時刻の差から実行時間への変換 */
 #define HIST_CONV_TIM(time)		((uint_t)(time))
 #endif /* HIST_CONV_TIM */
 
-#ifndef HIST_BM_HOOK				/* å®è¡æéè¨æ¸¬ç´åã«è¡ãã¹ãå¦ç */
+#ifndef HIST_BM_HOOK				/* 実行時間計測直前に行うべき処理 */
 #define HIST_BM_HOOK()			((void) 0)
 #endif
 
 /*
- *  å®è¡æéè¨æ¸¬ç¨ã®æå»ã®ãã¼ã¿åã®å®ç¾©
+ *  実行時間計測用の時刻のデータ型の定義
  */
 typedef HISTTIM	histtim_t;
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogramAdapter.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogramAdapter.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogramAdapter.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,6 +40,6 @@
 
 /*
- *		Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®å®è¡æéåå¸
- *		éè¨ãµã¼ãã¹ãå¼ã³åºãããã®ã¢ããã¿
+ *		C言語で記述されたアプリケーションから，TECSベースの実行時間分布
+ *		集計サービスを呼び出すためのアダプタ
  */
 
@@ -63,5 +48,5 @@
 
 /*
- *  å®è¡æéåå¸è¨æ¸¬ã®åæåï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  実行時間分布計測の初期化（サービスコール）
  */
 void
@@ -73,5 +58,5 @@
 
 /*
- *  å®è¡æéè¨æ¸¬ã®éå§
+ *  実行時間計測の開始
  */
 void
@@ -83,5 +68,5 @@
 
 /*
- *  å®è¡æéè¨æ¸¬ã®çµäº
+ *  実行時間計測の終了
  */
 void
@@ -93,5 +78,5 @@
 
 /*
- *  å®è¡æéåå¸è¨æ¸¬ã®è¡¨ç¤º
+ *  実行時間分布計測の表示
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogramAdapter.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogramAdapter.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tHistogramAdapter.cdl	(revision 389)
@@ -1,5 +1,5 @@
 /*
- *		Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®å®è¡æéåå¸
- *		éè¨ãµã¼ãã¹ãå¼ã³åºãããã®ã¢ããã¿ç¨ã»ã«ã¿ã¤ãã®å®ç¾©
+ *		C言語で記述されたアプリケーションから，TECSベースの実行時間分布
+ *		集計サービスを呼び出すためのアダプタ用セルタイプの定義
  * 
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tLogTask.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tLogTask.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tLogTask.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,9 +42,9 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		システムログタスクのコンポーネント記述ファイル
  */
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã·ã°ããã£
+ *  システムログタスクのシグニチャ
  */
 signature sLogTask {
@@ -68,5 +53,5 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®æ¬ä½ã®ã»ã«ã¿ã¤ã
+ *  システムログタスクの本体のセルタイプ
  */
 [singleton]
@@ -76,42 +61,39 @@
 	entry	sLogTask		eLogTask;
 
-	call	sSerialPort		cSerialPort;	/* ã·ãªã¢ã«ãã©ã¤ãã¨ã®æ¥ç¶ */
+	call	sSerialPort		cSerialPort;	/* シリアルドライバとの接続 */
 	call	snSerialPortManage	cnSerialPortManage;
-											/* ã·ãªã¢ã«ãã©ã¤ãç®¡çã¨ã®æ¥ç¶ */
-	call	sSysLog			cSysLog;		/* ã·ã¹ãã ã­ã°æ©è½ã¨ã®æ¥ç¶ */
-	call	sPutLog			cPutLog;		/* ä½ã¬ãã«åºåã¨ã®æ¥ç¶ */
+											/* シリアルドライバ管理との接続 */
+	call	sSysLog			cSysLog;		/* システムログ機能との接続 */
+	call	sPutLog			cPutLog;		/* 低レベル出力との接続 */
 
 	attr {
-		RELTIM	interval;				/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®åä½éé */
-		RELTIM	flushWait;				/* ãã©ãã·ã¥å¾
-ã¡ã®åä½æé */
+		RELTIM	interval;				/* システムログタスクの動作間隔 */
+		RELTIM	flushWait;				/* フラッシュ待ちの単位時間 */
 	};
 };
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ï¼è¤åã³ã³ãã¼ãã³ãï¼ã®ã»ã«ã¿ã¤ã
+ *  システムログタスク（複合コンポーネント）のセルタイプ
  */
 [singleton, active]
 composite tLogTask {
-	entry	sLogTask	eLogTask;		/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯æä½ */
+	entry	sLogTask	eLogTask;		/* システムログタスク操作 */
 	
-	call	sSerialPort	cSerialPort;	/* ã·ãªã¢ã«ãã©ã¤ãã¨ã®æ¥ç¶ */
+	call	sSerialPort	cSerialPort;	/* シリアルドライバとの接続 */
 	call	snSerialPortManage	cnSerialPortManage;
-										/* ã·ãªã¢ã«ãã©ã¤ãç®¡çã¨ã®æ¥ç¶ */
-	call	sSysLog		cSysLog;		/* ã·ã¹ãã ã­ã°æ©è½ã¨ã®æ¥ç¶ */
-	call	sPutLog		cPutLog;		/* ä½ã¬ãã«åºåã¨ã®æ¥ç¶ */
+										/* シリアルドライバ管理との接続 */
+	call	sSysLog		cSysLog;		/* システムログ機能との接続 */
+	call	sPutLog		cPutLog;		/* 低レベル出力との接続 */
 
 	attr {
-		[omit] ATR		attribute = C_EXP("TA_ACT");	/* ã¿ã¹ã¯å±æ§ */
-		[omit] PRI  	priority;		/* ã¿ã¹ã¯ã®åæåªå
-åº¦ */
-		[omit] size_t 	stackSize;		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
-		RELTIM		interval = 10000;	/* ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®åä½éé */
-		RELTIM		flushWait = 1000;	/* ãã©ãã·ã¥å¾
-ã¡ã®åä½æé */
+		[omit] ATR		attribute = C_EXP("TA_ACT");	/* タスク属性 */
+		[omit] PRI  	priority;		/* タスクの初期優先度 */
+		[omit] size_t 	stackSize;		/* タスクのスタックサイズ */
+		RELTIM		interval = 10000;	/* システムログタスクの動作間隔 */
+		RELTIM		flushWait = 1000;	/* フラッシュ待ちの単位時間 */
 	};
 
 	cell tLogTaskMain LogTaskMain {
-		/* å¼ã³å£ã®çµå */
+		/* 呼び口の結合 */
 		cSerialPort        => composite.cSerialPort;
 		cnSerialPortManage => composite.cnSerialPortManage;
@@ -119,5 +101,5 @@
 		cPutLog            => composite.cPutLog;
 
-		/* å±æ§ã®ç¶æ¿ */
+		/* 属性の継承 */
 		interval  = composite.interval;
 		flushWait = composite.flushWait;
@@ -125,8 +107,8 @@
 
 	cell tTask Task {
-		/* å¼ã³å£ã®çµå */
+		/* 呼び口の結合 */
 		cTaskBody = LogTaskMain.eLogTaskBody;
 
-		/* å±æ§ã®ç¶æ¿ */
+		/* 属性の継承 */
 		attribute = composite.attribute;
 		priority  = composite.priority;
@@ -135,9 +117,9 @@
 
 	cell tTerminateRoutine TerminateRoutine {
-		/* å¼ã³å£ */
+		/* 呼び口 */
 		cTerminateRoutineBody = LogTaskMain.eLogTaskTerminate;
 	};
 
-	/* åãå£ã®çµå */
+	/* 受け口の結合 */
 	composite.eLogTask => LogTaskMain.eLogTask;
 };
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tLogTaskMain.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tLogTaskMain.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tLogTaskMain.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã¿ã¹ã¯
+ *		システムログタスク
  */
 
@@ -66,5 +51,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ã¸ã®1æå­åºå
+ *  シリアルインタフェースへの1文字出力
  */
 static void
@@ -75,5 +60,5 @@
 
 /*
- *  ä½ã¬ãã«åºåã¸ã®1æå­åºå
+ *  低レベル出力への1文字出力
  */
 static void
@@ -84,6 +69,5 @@
 
 /*
- *  ã·ã¹ãã ã­ã°åºåã®å¾
-ã¡åããï¼åãå£é¢æ°ï¼
+ *  システムログ出力の待ち合わせ（受け口関数）
  */
 ER
@@ -106,6 +90,6 @@
 				if (count == 0U) {
 					/*
-					 *  countã0ã®å ´åã«ã¯ï¼ã·ãªã¢ã«ãããã¡ãç©ºããç¢º
-					 *  èªããï¼
+					 *  countが0の場合には，シリアルバッファが空かを確
+					 *  認する．
 					 */
 					if (cSerialPort_refer(&rpor) < 0) {
@@ -125,7 +109,5 @@
 
 			/*
-			 *  ãã©ãã·ã¥å¾
-ã¡ã®åä½æéï¼ATTR_flushWaitÎ¼ç§ï¼å¾
-ã¤ï¼
+			 *  フラッシュ待ちの単位時間（ATTR_flushWaitμ秒）待つ．
 			 */
 			rercd = dly_tsk(ATTR_flushWait);
@@ -142,5 +124,5 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®æ¬ä½ï¼åãå£é¢æ°ï¼
+ *  システムログタスクの本体（受け口関数）
  */
 void
@@ -173,5 +155,5 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®çµäºå¦çï¼åãå£é¢æ°ï¼
+ *  システムログタスクの終了処理（受け口関数）
  */
 void
@@ -184,6 +166,6 @@
 
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®éä¿¡ãããã¡ã«èç©ããããã¼ã¿
-	 *  ãï¼ä½ã¬ãã«åºåæ©è½ãç¨ãã¦åºåããï¼
+	 *  シリアルインタフェースドライバの送信バッファに蓄積されたデータ
+	 *  を，低レベル出力機能を用いて出力する．
 	 */
 	while (cnSerialPortManage_getChar(&c)) {
@@ -192,14 +174,12 @@
 
 	/*
-	 *  ã­ã°ãããã¡ã«è¨é²ãããã­ã°æ
-å ±ãï¼ä½ã¬ãã«åºåæ©è½ãç¨ãã¦åº
-	 *  åããï¼
+	 *  ログバッファに記録されたログ情報を，低レベル出力機能を用いて出
+	 *  力する．
 	 */
 	while ((rercd = cSysLog_read(&syslog)) >= 0) {
 		if (!msgflg) {
 			/*
-			 *  ã­ã°ãããã¡ã«æ®ã£ãã­ã°æ
-å ±ã§ãããã¨ãç¤ºãæå­åãåº
-			 *  åããï¼
+			 *  ログバッファに残ったログ情報であることを示す文字列を出
+			 *  力する．
 			 */
 			syslog_printf("-- buffered messages --\n", NULL, target_fput_log);
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tPutLogSIOPort.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tPutLogSIOPort.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tPutLogSIOPort.c	(revision 389)
@@ -6,47 +6,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -54,5 +39,5 @@
 
 /*
- *		SIOãã©ã¤ãã«ããã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºå
+ *		SIOドライバによるシステムログの低レベル出力
  */
 
@@ -60,8 +45,8 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®åæå
+ *  システムログの低レベル出力のための初期化
  *
- *  åæåã«ã¼ãã³ãå¼ã³åºãããåã«åæåããããã«ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ã
- *  ãä¾å­é¨ããç´æ¥å¼ã³åºãããã®é¢æ°ï¼
+ *  初期化ルーチンを呼び出すより前に初期化するために，カーネルのターゲッ
+ *  ト依存部から直接呼び出すための関数．
  */
 void
@@ -72,7 +57,7 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºåï¼åãå£é¢æ°ï¼
+ *  システムログの低レベル出力のための文字出力（受け口関数）
  *
- *  SIOãã¼ãã«æå­ãéä¿¡ã§ããã¾ã§ãã¼ãªã³ã°ããï¼
+ *  SIOポートに文字が送信できるまでポーリングする．
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tPutLogSIOPort.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tPutLogSIOPort.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tPutLogSIOPort.cdl	(revision 389)
@@ -8,47 +8,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -56,10 +41,10 @@
 
 /*
- *		SIOãã©ã¤ãã«ããã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ã³ã³ãã¼ãã³ãè¨è¿°
- *		ãã¡ã¤ã«
+ *		SIOドライバによるシステムログの低レベル出力のコンポーネント記述
+ *		ファイル
  */
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ã»ã«ã¿ã¤ã
+ *  システムログの低レベル出力のセルタイプ
  */
 [singleton]
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialAdapter.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialAdapter.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialAdapter.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,6 +40,6 @@
 
 /*
- *		Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ãªã¢ã«ã¤ã³
- *		ã¿ãã§ã¼ã¹ãã©ã¤ããå¼ã³åºãããã®ã¢ããã¿
+ *		C言語で記述されたアプリケーションから，TECSベースのシリアルイン
+ *		タフェースドライバを呼び出すためのアダプタ
  */
 
@@ -63,14 +48,14 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®ãªã¼ãã³ï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  シリアルポートのオープン（サービスコール）
  */
 ER
 serial_opn_por(ID portid)
 {
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!(1 <= portid && portid <= N_CP_cSerialPort)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 
@@ -79,14 +64,14 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®ã¯ã­ã¼ãºï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  シリアルポートのクローズ（サービスコール）
  */
 ER
 serial_cls_por(ID portid)
 {
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!(1 <= portid && portid <= N_CP_cSerialPort)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 
@@ -95,14 +80,14 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãããã®æå­ååä¿¡ï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  シリアルポートからの文字列受信（サービスコール）
  */
 ER_UINT
 serial_trea_dat(ID portid, char *buf, uint_t len, TMO tmout)
 {
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!(1 <= portid && portid <= N_CP_cSerialPort)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 
@@ -111,14 +96,14 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã¸ã®æå­åéä¿¡ï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  シリアルポートへの文字列送信（サービスコール）
  */
 ER_UINT
 serial_wri_dat(ID portid, const char *buf, uint_t len)
 {
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!(1 <= portid && portid <= N_CP_cSerialPort)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 
@@ -127,14 +112,14 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®å¶å¾¡ï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  シリアルポートの制御（サービスコール）
  */
 ER
 serial_ctl_por(ID portid, uint_t ioctl)
 {
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!(1 <= portid && portid <= N_CP_cSerialPort)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 
@@ -143,16 +128,14 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãç¶æ
-ã®åç
-§ï¼ãµã¼ãã¹ã³ã¼ã«ï¼
+ *  シリアルポート状態の参照（サービスコール）
  */
 ER
 serial_ref_por(ID portid, T_SERIAL_RPOR *pk_rpor)
 {
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!(1 <= portid && portid <= N_CP_cSerialPort)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialAdapter.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialAdapter.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialAdapter.cdl	(revision 389)
@@ -1,5 +1,5 @@
 /*
- *		Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ãªã¢ã«ã¤ã³
- *		ã¿ãã§ã¼ã¹ãã©ã¤ããå¼ã³åºãããã®ã¢ããã¿ç¨ã»ã«ã¿ã¤ãã®å®ç¾©
+ *		C言語で記述されたアプリケーションから，TECSベースのシリアルイン
+ *		タフェースドライバを呼び出すためのアダプタ用セルタイプの定義
  * 
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPort.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPort.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPort.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,16 +42,15 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		シリアルインタフェースドライバのコンポーネント記述ファイル
  */
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ããTECSãç¨ããã«å¼ã³åºãããã«ãå¿
-è¦
- *  ãªå®ç¾©ã®åè¾¼ã¿
+ *  シリアルインタフェースドライバをTECSを用いずに呼び出すためにも必要
+ *  な定義の取込み
  */
 import_C("syssvc/serial.h");
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã·ã°ããã£
+ *  シリアルインタフェースドライバのシグニチャ
  */
 signature sSerialPort {
@@ -80,5 +64,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ãæä¾ããé¢æ°
+ *  シリアルインタフェースドライバのターゲット依存部が提供する関数
  */
 signature sSIOPort {
@@ -92,11 +76,11 @@
 
 /*
- *  ã³ã¼ã«ããã¯ã«ã¼ãã³ã®è­å¥çªå·ï¼cbrtnãã©ã¡ã¼ã¿ã«ç¨ããï¼
+ *  コールバックルーチンの識別番号（cbrtnパラメータに用いる）
  */
-const uint_t SIOSendReady = 1;		/* éä¿¡å¯è½ã³ã¼ã«ããã¯ */
-const uint_t SIOReceiveReady = 2;	/* åä¿¡éç¥ã³ã¼ã«ããã¯ */
+const uint_t SIOSendReady = 1;		/* 送信可能コールバック */
+const uint_t SIOReceiveReady = 2;	/* 受信通知コールバック */
 
 /*
- *  ã¿ã¼ã²ããä¾å­é¨ããã®ã³ã¼ã«ããã¯
+ *  ターゲット依存部からのコールバック
  */
 [callback]
@@ -107,6 +91,6 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãç®¡çç¨ã®ã·ã°ããã£ï¼çµäºå¦çã«ã¼ãã³
- *  ããã®ä½¿ç¨ãæ³å®ï¼
+ *  シリアルインタフェースドライバ管理用のシグニチャ（終了処理ルーチン
+ *  からの使用を想定）
  */
 signature snSerialPortManage {
@@ -115,5 +99,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®å¶å¾¡é¨ã®ã»ã«ã¿ã¤ã
+ *  シリアルポートの制御部のセルタイプ
  */
 celltype tSerialPortMain {
@@ -121,43 +105,41 @@
 	entry	snSerialPortManage	enSerialPortManage;
 
-	call	sSIOPort	cSIOPort;			/* ç°¡æSIOãã©ã¤ãã¨ã®æ¥ç¶ */
+	call	sSIOPort	cSIOPort;			/* 簡易SIOドライバとの接続 */
 	entry	siSIOCBR	eiSIOCBR;
 	
-	call	sSemaphore	cSendSemaphore;		/* éä¿¡ç¨ã»ããã©ã¨ã®æ¥ç¶ */
+	call	sSemaphore	cSendSemaphore;		/* 送信用セマフォとの接続 */
 	call	siSemaphore	ciSendSemaphore;
-	call	sSemaphore	cReceiveSemaphore;	/* åä¿¡ç¨ã»ããã©ã¨ã®æ¥ç¶ */
+	call	sSemaphore	cReceiveSemaphore;	/* 受信用セマフォとの接続 */
 	call	siSemaphore	ciReceiveSemaphore;
 	
 	attr {
-		uint_t	receiveBufferSize = 256;	/* åä¿¡ãããã¡ãµã¤ãº */
-		uint_t	sendBufferSize = 256;		/* éä¿¡ãããã¡ãµã¤ãº */
+		uint_t	receiveBufferSize = 256;	/* 受信バッファサイズ */
+		uint_t	sendBufferSize = 256;		/* 送信バッファサイズ */
 	};
 	var {
-		bool_t	openFlag = C_EXP("false");	/* ãªã¼ãã³æ¸ã¿ãã©ã° */
-		bool_t	errorFlag;					/* ã¨ã©ã¼ãã©ã° */
-		uint_t	ioControl;					/* åä½å¶å¾¡ã®è¨­å®å¤ */
+		bool_t	openFlag = C_EXP("false");	/* オープン済みフラグ */
+		bool_t	errorFlag;					/* エラーフラグ */
+		uint_t	ioControl;					/* 動作制御の設定値 */
 
-		[size_is(receiveBufferSize)] char *receiveBuffer;	/* åä¿¡ãããã¡ */
-		uint_t	receiveReadPointer;			/* åä¿¡ãããã¡èª­åºããã¤ã³ã¿ */
-		uint_t	receiveWritePointer;		/* åä¿¡ãããã¡æ¸è¾¼ã¿ãã¤ã³ã¿ */
-		uint_t	receiveCount;				/* åä¿¡ãããã¡ä¸­ã®æå­æ° */
-		char  	receiveFlowControl;			/* éãã¹ãSTART/STOP */
-		bool_t	receiveStopped;				/* STOPãéã£ãç¶æ
-ãï¼ */
+		[size_is(receiveBufferSize)] char *receiveBuffer;	/* 受信バッファ */
+		uint_t	receiveReadPointer;			/* 受信バッファ読出しポインタ */
+		uint_t	receiveWritePointer;		/* 受信バッファ書込みポインタ */
+		uint_t	receiveCount;				/* 受信バッファ中の文字数 */
+		char  	receiveFlowControl;			/* 送るべきSTART/STOP */
+		bool_t	receiveStopped;				/* STOPを送った状態か？ */
 
-		[size_is(sendBufferSize)] char *sendBuffer;		/* éä¿¡ãããã¡ */
-		uint_t	sendReadPointer;			/* éä¿¡ãããã¡èª­åºããã¤ã³ã¿ */
-		uint_t	sendWritePointer;			/* éä¿¡ãããã¡æ¸è¾¼ã¿ãã¤ã³ã¿ */
-		uint_t	sendCount;					/* éä¿¡ãããã¡ä¸­ã®æå­æ° */
-		bool_t	sendStopped;				/* STOPãåãåã£ãç¶æ
-ãï¼ */
+		[size_is(sendBufferSize)] char *sendBuffer;		/* 送信バッファ */
+		uint_t	sendReadPointer;			/* 送信バッファ読出しポインタ */
+		uint_t	sendWritePointer;			/* 送信バッファ書込みポインタ */
+		uint_t	sendCount;					/* 送信バッファ中の文字数 */
+		bool_t	sendStopped;				/* STOPを受け取った状態か？ */
 	};
 };
 
 /*
- *  ã·ãªã¢ã«ãã¼ããã©ã¤ãï¼è¤åã»ã«ï¼ã®ã»ã«ã¿ã¤ã
+ *  シリアルポートドライバ（複合セル）のセルタイプ
  *
- *  ã·ãªã¢ã«ãã¼ãã®å¶å¾¡é¨ã¨ï¼ãããä½¿ç¨ãã2ã¤ã®ã»ããã©ï¼åä¿¡ç¨ã¨é
- *  ä¿¡ç¨ï¼ãè¤ååãã¦ï¼1ã¤ã®ã³ã³ãã¼ãã³ãã¨ãã¦ããï¼
+ *  シリアルポートの制御部と，それが使用する2つのセマフォ（受信用と送
+ *  信用）を複合化して，1つのコンポーネントとしている．
  */
 composite tSerialPort {
@@ -165,13 +147,13 @@
 	entry	snSerialPortManage	enSerialPortManage;
 
-	call	sSIOPort		cSIOPort;		/* ç°¡æSIOãã©ã¤ãã¨ã®æ¥ç¶ */
+	call	sSIOPort		cSIOPort;		/* 簡易SIOドライバとの接続 */
 	entry	siSIOCBR		eiSIOCBR;
 	
 	attr {
-		uint_t	receiveBufferSize = 256;	/* åä¿¡ãããã¡ãµã¤ãº */
-		uint_t	sendBufferSize = 256;		/* éä¿¡ãããã¡ãµã¤ãº */
+		uint_t	receiveBufferSize = 256;	/* 受信バッファサイズ */
+		uint_t	sendBufferSize = 256;		/* 送信バッファサイズ */
 	};
 
-	/* åä¿¡ç¨ã®ã»ããã© */
+	/* 受信用のセマフォ */
 	cell tSemaphore ReceiveSemaphore {
 		attribute = C_EXP("TA_NULL");
@@ -180,5 +162,5 @@
 	};
 
-	/* éä¿¡ç¨ã®ã»ããã© */
+	/* 送信用のセマフォ */
 	cell tSemaphore SendSemaphore {
 		attribute = C_EXP("TA_NULL");
@@ -187,7 +169,7 @@
 	};
 
-	/* ã·ãªã¢ã«ãã¼ãã®å¶å¾¡é¨ */
+	/* シリアルポートの制御部 */
 	cell tSerialPortMain SerialPortMain {
-		/* ã»ããã©ã¨ã®çµå */
+		/* セマフォとの結合 */
 		cReceiveSemaphore  = ReceiveSemaphore.eSemaphore;
 		ciReceiveSemaphore = ReceiveSemaphore.eiSemaphore;
@@ -195,13 +177,13 @@
 		ciSendSemaphore    = SendSemaphore.eiSemaphore;
 
-		/* å¼ã³å£ã®ã¨ã¯ã¹ãã¼ã */
+		/* 呼び口のエクスポート */
 		cSIOPort          => composite.cSIOPort;
 
-		/* å±æ§ã®ç¶æ¿ */
+		/* 属性の継承 */
 		receiveBufferSize = composite.receiveBufferSize;
 		sendBufferSize    = composite.sendBufferSize;
 	};
 
-	/* åãå£ã®ã¨ã¯ã¹ãã¼ã */
+	/* 受け口のエクスポート */
 	composite.eSerialPort        => SerialPortMain.eSerialPort;
 	composite.enSerialPortManage => SerialPortMain.enSerialPortManage;
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPortMain.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPortMain.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPortMain.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã
+ *		シリアルインタフェースドライバ
  */
 
@@ -65,14 +50,14 @@
 
 /*
- *  ãã­ã¼å¶å¾¡ã«é¢é£ããå®æ°ã¨ãã¯ã­
- */
-#define	FC_STOP			'\023'		/* ã³ã³ãã­ã¼ã«-S */
-#define	FC_START		'\021'		/* ã³ã³ãã­ã¼ã«-Q */
-
-#define BUFCNT_STOP(bufsz)		((bufsz) * 3 / 4)	/* STOPãéãåºæºæå­æ° */
-#define BUFCNT_START(bufsz)		((bufsz) / 2)		/* STARTãéãåºæºæå­æ° */
-
-/*
- *  ãã¤ã³ã¿ã®ã¤ã³ã¯ãªã¡ã³ã
+ *  フロー制御に関連する定数とマクロ
+ */
+#define	FC_STOP			'\023'		/* コントロール-S */
+#define	FC_START		'\021'		/* コントロール-Q */
+
+#define BUFCNT_STOP(bufsz)		((bufsz) * 3 / 4)	/* STOPを送る基準文字数 */
+#define BUFCNT_START(bufsz)		((bufsz) / 2)		/* STARTを送る基準文字数 */
+
+/*
+ *  ポインタのインクリメント
  */
 #define INC_PTR(ptr, bufsz) do {	\
@@ -83,9 +68,8 @@
 
 /*
- *  ãµã¼ãã¹ã³ã¼ã«å¼åºããã¯ã­
+ *  サービスコール呼出しマクロ
  *
- *  ãµã¼ãã¹ã³ã¼ã«å¼åºããå«ãå¼expãè©ä¾¡ãï¼è¿å¤ãã¨ã©ã¼ï¼è² ã®å¤ï¼ã®å ´
- *  åã«ã¯ï¼ercã«ercd_expãè©ä¾¡ããå¤ãä»£å
-¥ãï¼error_exitã«gotoããï¼
+ *  サービスコール呼出しを含む式expを評価し，返値がエラー（負の値）の場
+ *  合には，ercにercd_expを評価した値を代入し，error_exitにgotoする．
  */
 #define SVC(exp, ercd_exp) do {		\
@@ -97,5 +81,5 @@
 
 /*
- *  E_SYSã¨ã©ã¼ã®çæ
+ *  E_SYSエラーの生成
  */
 static ER
@@ -107,7 +91,5 @@
 
 /*
- *  å¾
-ã¡ã«å
-¥ããµã¼ãã¹ã³ã¼ã«ããã®ã¨ã©ã¼ã®å¤æ
+ *  待ちに入るサービスコールからのエラーの変換
  */
 static ER
@@ -126,5 +108,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®ãªã¼ãã³ï¼åãå£é¢æ°ï¼
+ *  シリアルポートのオープン（受け口関数）
  */
 ER
@@ -134,19 +116,19 @@
 	ER		ercd;
 
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!VALID_IDX(idx)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 	p_cellcb = GET_CELLCB(idx);
 
 	SVC(dis_dsp(), gen_ercd_sys(p_cellcb));
-	if (VAR_openFlag) {				/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+	if (VAR_openFlag) {				/* オープン済みかのチェック */
 		ercd = E_OBJ;
 	}
 	else {
 		/*
-		 *  å¤æ°ã®åæå
+		 *  変数の初期化
 		 */
 		VAR_ioControl = (IOCTL_ECHO | IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV);
@@ -164,5 +146,5 @@
 
 		/*
-		 *  ããä»¥éï¼å²è¾¼ã¿ãç¦æ­¢ããï¼
+		 *  これ以降，割込みを禁止する．
 		 */
 		if (loc_cpu() < 0) {
@@ -172,10 +154,10 @@
 
 		/*
-		 *  ãã¼ãã¦ã§ã¢ä¾å­ã®ãªã¼ãã³å¦ç
+		 *  ハードウェア依存のオープン処理
 		 */
 		cSIOPort_open();
 
 		/*
-		 *  åä¿¡éç¥ã³ã¼ã«ããã¯ãè¨±å¯ããï¼
+		 *  受信通知コールバックを許可する．
 		 */
 		cSIOPort_enableCBR(SIOReceiveReady);
@@ -199,5 +181,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®ã¯ã­ã¼ãºï¼åãå£é¢æ°ï¼
+ *  シリアルポートのクローズ（受け口関数）
  */
 ER
@@ -208,19 +190,19 @@
 	bool_t	eflag = false;
 
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!VALID_IDX(idx)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
 	}
 	p_cellcb = GET_CELLCB(idx);
 
 	SVC(dis_dsp(), gen_ercd_sys(p_cellcb));
-	if (!VAR_openFlag) {			/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+	if (!VAR_openFlag) {			/* オープン済みかのチェック */
 		ercd = E_OBJ;
 	}
 	else {
 		/*
-		 *  ãã¼ãã¦ã§ã¢ä¾å­ã®ã¯ã­ã¼ãºå¦ç
+		 *  ハードウェア依存のクローズ処理
 		 */
 		if (loc_cpu() < 0) {
@@ -234,5 +216,5 @@
 
 		/*
-		 *  ã»ããã©ã®åæå
+		 *  セマフォの初期化
 		 */
 		if (cSendSemaphore_initialize() < 0) {
@@ -244,5 +226,5 @@
 
 		/*
-		 *  ã¨ã©ã¼ã³ã¼ãã®è¨­å®
+		 *  エラーコードの設定
 		 */
 		if (eflag) {
@@ -260,11 +242,10 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã¸ã®æå­éä¿¡
+ *  シリアルポートへの文字送信
  *
- *  p_cellcbã§æå®ãããSIOãã¼ãã«å¯¾ãã¦ï¼æå­cãéä¿¡ããï¼æå­ãéä¿¡
- *  ã¬ã¸ã¹ã¿ã«ãããå ´åã«ã¯trueãè¿ãï¼ããã§ãªãå ´åã«ã¯ï¼éä¿¡ã¬ã¸ã¹
- *  ã¿ãç©ºãããã¨ãéç¥ããã³ã¼ã«ããã¯é¢æ°ãè¨±å¯ãï¼falseãè¿ãï¼ãã®
- *  é¢æ°ã¯ï¼CPUã­ãã¯ç¶æ
-ã§å¼ã³åºãããï¼
+ *  p_cellcbで指定されるSIOポートに対して，文字cを送信する．文字を送信
+ *  レジスタにいれた場合にはtrueを返す．そうでない場合には，送信レジス
+ *  タが空いたことを通知するコールバック関数を許可し，falseを返す．この
+ *  関数は，CPUロック状態で呼び出される．
  */
 Inline bool_t
@@ -281,5 +262,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã¸ã®1æå­éä¿¡
+ *  シリアルポートへの1文字送信
  */
 static ER_BOOL
@@ -290,12 +271,11 @@
 
 	/*
-	 *  LFã®åã«CRãéä¿¡ããï¼
+	 *  LFの前にCRを送信する．
 	 */
 	if (c == '\n' && (VAR_ioControl & IOCTL_CRLF) != 0U) {
 		/*
-		 *  ä»¥ä¸ã®ã³ã¼ãã¯åå¸°å¼åºãã«ãªã£ã¦ãããï¼å¼æ°cã'\n'ã®å ´åã«
-		 *  å¼æ°cã'\r'ã¨ãã¦å¼ã³åºããã¨ããï¼ãã®åå¸°å¼åºãã¯2åç®ã®
-		 *  å¼ã³åºãã§å¿
-ãæ­¢ã¾ãï¼
+		 *  以下のコードは再帰呼出しになっているが，引数cが'\n'の場合に
+		 *  引数cを'\r'として呼び出すことから，この再帰呼出しは2回目の
+		 *  呼び出しで必ず止まる．
 		 */
 		SVC(rercd = serialPort_writeChar(p_cellcb, '\r'), rercd);
@@ -310,6 +290,5 @@
 								&& serialPort_sendChar(p_cellcb, c)) {
 		/*
-		 *  SIOã®éä¿¡ã¬ã¸ã¹ã¿ã«æå­ãå
-¥ãããã¨ã«æåããå ´åï¼
+		 *  SIOの送信レジスタに文字を入れることに成功した場合．
 		 */
 		buffer_full = false;
@@ -317,6 +296,5 @@
 	else {
 		/*
-		 *  éä¿¡ãããã¡ã«æå­ãå
-¥ããï¼
+		 *  送信バッファに文字を入れる．
 		 */
 		VAR_sendBuffer[VAR_sendWritePointer] = c;
@@ -334,5 +312,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã¸ã®æå­åéä¿¡ï¼åãå£é¢æ°ï¼
+ *  シリアルポートへの文字列送信（受け口関数）
  */
 ER_UINT
@@ -344,21 +322,20 @@
 	ER		ercd, rercd;
 
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
-	if (!VALID_IDX(idx)) {			/* ãã¼ãçªå·ã®ãã§ãã¯ */
+	if (!VALID_IDX(idx)) {			/* ポート番号のチェック */
 		return(E_ID);
 	}
 
 	p_cellcb = GET_CELLCB(idx);
-	if (!VAR_openFlag) {			/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+	if (!VAR_openFlag) {			/* オープン済みかのチェック */
 		return(E_OBJ);
 	}
-	if (VAR_errorFlag) {			/* ã¨ã©ã¼ç¶æ
-ãã®ãã§ãã¯ */
+	if (VAR_errorFlag) {			/* エラー状態かのチェック */
 		return(E_SYS);
 	}
 
-	buffer_full = true;				/* ã«ã¼ãã®1åãã¯wai_semãã */
+	buffer_full = true;				/* ループの1回めはwai_semする */
 	while (wricnt < length) {
 		if (buffer_full) {
@@ -380,5 +357,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãããã®1æå­åä¿¡
+ *  シリアルポートからの1文字受信
  */
 static bool_t
@@ -391,5 +368,5 @@
 
 	/*
-	 *  åä¿¡ãããã¡ããæå­ãåãåºãï¼
+	 *  受信バッファから文字を取り出す．
 	 */
 	*p_c = VAR_receiveBuffer[VAR_receiveReadPointer];
@@ -399,5 +376,5 @@
 
 	/*
-	 *  STARTãéä¿¡ããï¼
+	 *  STARTを送信する．
 	 */
 	if (VAR_receiveStopped && VAR_receiveCount
@@ -417,5 +394,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãããã®æå­ååä¿¡ï¼åãå£é¢æ°ï¼
+ *  シリアルポートからの文字列受信（受け口関数）
  */
 ER_UINT
@@ -425,24 +402,23 @@
 	bool_t	buffer_empty;
 	uint_t	reacnt = 0U;
-	char	c = '\0';		/* ã³ã³ãã¤ã©ã®è­¦åãææ­¢ããããã«åæåãã */
+	char	c = '\0';		/* コンパイラの警告を抑止するために初期化する */
 	ER		ercd, rercd;
 
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
-	if (!VALID_IDX(idx)) {			/* ãã¼ãçªå·ã®ãã§ãã¯ */
+	if (!VALID_IDX(idx)) {			/* ポート番号のチェック */
 		return(E_ID);
 	}
 
 	p_cellcb = GET_CELLCB(idx);
-	if (!VAR_openFlag) {			/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+	if (!VAR_openFlag) {			/* オープン済みかのチェック */
 		return(E_OBJ);
 	}
-	if (VAR_errorFlag) {			/* ã¨ã©ã¼ç¶æ
-ãã®ãã§ãã¯ */
+	if (VAR_errorFlag) {			/* エラー状態かのチェック */
 		return(E_SYS);
 	}
 
-	buffer_empty = true;			/* ã«ã¼ãã®1åãã¯wai_semãã */
+	buffer_empty = true;			/* ループの1回めはwai_semする */
 	while (reacnt < length) {
 		if (buffer_empty) {
@@ -462,5 +438,5 @@
 
 		/*
-		 *  ã¨ã³ã¼ããã¯å¦çï¼
+		 *  エコーバック処理．
 		 */
 		if ((VAR_ioControl & IOCTL_ECHO) != 0U) {
@@ -483,5 +459,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®å¶å¾¡ï¼åãå£é¢æ°ï¼
+ *  シリアルポートの制御（受け口関数）
  */
 ER
@@ -490,17 +466,16 @@
 	CELLCB	*p_cellcb;
 
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!VALID_IDX(idx)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
-	}
-
-	p_cellcb = GET_CELLCB(idx);
-	if (!VAR_openFlag) {			/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
+	}
+
+	p_cellcb = GET_CELLCB(idx);
+	if (!VAR_openFlag) {			/* オープン済みかのチェック */
 		return(E_OBJ);
 	}
-	if (VAR_errorFlag) {			/* ã¨ã©ã¼ç¶æ
-ãã®ãã§ãã¯ */
+	if (VAR_errorFlag) {			/* エラー状態かのチェック */
 		return(E_SYS);
 	}
@@ -511,7 +486,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãç¶æ
-ã®åç
-§ï¼åãå£é¢æ°ï¼
+ *  シリアルポート状態の参照（受け口関数）
  */
 ER
@@ -520,17 +493,16 @@
 	CELLCB	*p_cellcb;
 
-	if (sns_dpn()) {				/* ã³ã³ãã­ã¹ãã®ãã§ãã¯ */
+	if (sns_dpn()) {				/* コンテキストのチェック */
 		return(E_CTX);
 	}
 	if (!VALID_IDX(idx)) {
-		return(E_ID);				/* ãã¼ãçªå·ã®ãã§ãã¯ */
-	}
-
-	p_cellcb = GET_CELLCB(idx);
-	if (!VAR_openFlag) {			/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+		return(E_ID);				/* ポート番号のチェック */
+	}
+
+	p_cellcb = GET_CELLCB(idx);
+	if (!VAR_openFlag) {			/* オープン済みかのチェック */
 		return(E_OBJ);
 	}
-	if (VAR_errorFlag) {			/* ã¨ã©ã¼ç¶æ
-ãã®ãã§ãã¯ */
+	if (VAR_errorFlag) {			/* エラー状態かのチェック */
 		return(E_SYS);
 	}
@@ -542,5 +514,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãããã®éä¿¡å¯è½ã³ã¼ã«ããã¯ï¼åãå£é¢æ°ï¼
+ *  シリアルポートからの送信可能コールバック（受け口関数）
  */
 void
@@ -553,5 +525,5 @@
 	if (VAR_receiveFlowControl != '\0') {
 		/*
-		 *  START/STOP ãéä¿¡ããï¼
+		 *  START/STOP を送信する．
 		 */
 		(void) cSIOPort_putChar(VAR_receiveFlowControl);
@@ -560,5 +532,5 @@
 	else if (!VAR_sendStopped && VAR_sendCount > 0U) {
 		/*
-		 *  éä¿¡ãããã¡ä¸­ããæå­ãåãåºãã¦éä¿¡ããï¼
+		 *  送信バッファ中から文字を取り出して送信する．
 		 */
 		(void) cSIOPort_putChar(VAR_sendBuffer[VAR_sendReadPointer]);
@@ -573,5 +545,5 @@
 	else {
 		/*
-		 *  éä¿¡ãã¹ãæå­ããªãå ´åã¯ï¼éä¿¡å¯è½ã³ã¼ã«ããã¯ãç¦æ­¢ããï¼
+		 *  送信すべき文字がない場合は，送信可能コールバックを禁止する．
 		 */
 		cSIOPort_disableCBR(SIOSendReady);
@@ -580,5 +552,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãããã®åä¿¡éç¥ã³ã¼ã«ããã¯ï¼åãå£é¢æ°ï¼
+ *  シリアルポートからの受信通知コールバック（受け口関数）
  */
 void
@@ -593,5 +565,5 @@
 	if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_STOP) {
 		/*
-		 *  éä¿¡ãä¸æåæ­¢ããï¼éä¿¡ä¸­ã®æå­ã¯ãã®ã¾ã¾éä¿¡ããï¼
+		 *  送信を一時停止する．送信中の文字はそのまま送信する．
 		 */
 		VAR_sendStopped = true;
@@ -600,5 +572,5 @@
 				|| (VAR_ioControl & IOCTL_FCANY) != 0U)) {
 		/*
-		 *  éä¿¡ãåéããï¼
+		 *  送信を再開する．
 		 */
 		VAR_sendStopped = false;
@@ -618,16 +590,15 @@
 	else if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_START) {
 		/*
-		 *  éä¿¡ã«å¯¾ãã¦ãã­ã¼å¶å¾¡ãã¦ããå ´åï¼START ã¯æ¨ã¦ãï¼
+		 *  送信に対してフロー制御している場合，START は捨てる．
 		 */
 	}
 	else if (VAR_receiveCount == ATTR_receiveBufferSize) {
 		/*
-		 *  ãããã¡ãã«ã®å ´åï¼åä¿¡ããæå­ãæ¨ã¦ãï¼
+		 *  バッファフルの場合，受信した文字を捨てる．
 		 */
 	}
 	else {
 		/*
-		 *  åä¿¡ããæå­ãåä¿¡ãããã¡ã«å
-¥ããï¼
+		 *  受信した文字を受信バッファに入れる．
 		 */
 		VAR_receiveBuffer[VAR_receiveWritePointer] = c;
@@ -641,5 +612,5 @@
 
 		/*
-		 *  STOPãéä¿¡ããï¼
+		 *  STOPを送信する．
 		 */
 		if ((VAR_ioControl & IOCTL_FCRCV) != 0U && !VAR_receiveStopped
@@ -654,5 +625,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãããã®æªéä¿¡æå­ã®ååºã
+ *  シリアルインタフェースドライバからの未送信文字の取出し
  */
 bool_t
@@ -661,7 +632,7 @@
 	CELLCB	*p_cellcb;
 
-	if (VALID_IDX(idx)) {						/* ãã¼ãçªå·ã®ãã§ãã¯ */
+	if (VALID_IDX(idx)) {						/* ポート番号のチェック */
 		p_cellcb = GET_CELLCB(idx);
-		if (VAR_openFlag) {						/* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯ */
+		if (VAR_openFlag) {						/* オープン済みかのチェック */
 			if (VAR_sendCount > 0U) {
 				*p_c = VAR_sendBuffer[VAR_sendReadPointer];
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLog.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLog.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLog.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°æ©è½
+ *		システムログ機能
  */
 
@@ -68,10 +53,8 @@
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ãã¯ã­ã®ããã©ã«ãå®ç¾©
- *
- *  ã·ã¹ãã ã­ã°ã«åºåãããã­ã°æ
-å ±ããã¬ã¼ã¹ã­ã°ã«ãè¨é²ã§ããããã«ï¼
- *  eSyslog_writeã®å
-¥å£ã«ãã¬ã¼ã¹ã­ã°ãã¯ã­ãç½®ãï¼
+ *  トレースログマクロのデフォルト定義
+ *
+ *  システムログに出力されたログ情報をトレースログにも記録できるように，
+ *  eSyslog_writeの入口にトレースログマクロを置く．
  */
 #ifndef LOG_TSYSLOG_ESYSLOG_WRITE_ENTER
@@ -80,9 +63,9 @@
 
 /*
- *  ã­ã°æå»ã®åãåºã
- *
- *  ããã©ã«ãã§ã¯ï¼ã­ã°æå»ã¨ãã¦ï¼é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ãç¨ãã¦
- *  ããï¼ã¿ã¼ã²ããä¾å­ã§å¤æ´ããå ´åã«ã¯ï¼SYSLOG_GET_LOGTIMã«ï¼ã­ã°æ
- *  å»ãåãåºããã¯ã­ãå®ç¾©ããï¼
+ *  ログ時刻の取り出し
+ *
+ *  デフォルトでは，ログ時刻として，高分解能タイマのカウント値を用いて
+ *  いる．ターゲット依存で変更する場合には，SYSLOG_GET_LOGTIMに，ログ時
+ *  刻を取り出すマクロを定義する．
  */
 #ifndef SYSLOG_GET_LOGTIM
@@ -94,5 +77,5 @@
 
 /*
- *  ä½ã¬ãã«åºåã®å¼åºãé¢æ°
+ *  低レベル出力の呼出し関数
  */
 static void
@@ -103,10 +86,7 @@
 
 /*
- *  ã­ã°æ
-å ±ã®åºåï¼åãå£é¢æ°ï¼
- *
- *  CPUã­ãã¯ç¶æ
-ãå®è¡ã³ã³ãã­ã¹ãã«ãããåä½ã§ããããã«å®è£
-ãã¦ããï¼
+ *  ログ情報の出力（受け口関数）
+ *
+ *  CPUロック状態や実行コンテキストによらず動作できるように実装してある．
  */
 ER
@@ -119,10 +99,10 @@
 
 	/*
-	 *  ã­ã°æå»ã®è¨­å®
+	 *  ログ時刻の設定
 	 */
 	SYSLOG_GET_LOGTIM(&(((SYSLOG *) p_syslog)->logtim));
 
 	/*
-	 *  ã­ã°ãããã¡ã«è¨é²
+	 *  ログバッファに記録
 	 */
 	if ((VAR_logMask & LOG_MASK(priority)) != 0U) {
@@ -142,5 +122,5 @@
 
 	/*
-	 *  ä½ã¬ãã«åºå
+	 *  低レベル出力
 	 */
 	if ((VAR_lowMask & LOG_MASK(priority)) != 0U) {
@@ -154,9 +134,7 @@
 
 /*
- *  ã­ã°ãããã¡ããã®èª­åºãï¼åãå£é¢æ°ï¼
- *
- *  CPUã­ãã¯ç¶æ
-ãå®è¡ã³ã³ãã­ã¹ãã«ãããåä½ã§ããããã«å®è£
-ãã¦ããï¼
+ *  ログバッファからの読出し（受け口関数）
+ *
+ *  CPUロック状態や実行コンテキストによらず動作できるように実装してある．
  */
 ER_UINT
@@ -169,5 +147,5 @@
 
 	/*
-	 *  ã­ã°ãããã¡ããã®ååºã
+	 *  ログバッファからの取出し
 	 */
 	if (VAR_count > 0U) {
@@ -190,6 +168,5 @@
 
 /* 
- *  åºåãã¹ãã­ã°æ
-å ±ã®éè¦åº¦ã®è¨­å®ï¼åãå£é¢æ°ï¼
+ *  出力すべきログ情報の重要度の設定（受け口関数）
  */
 ER
@@ -206,7 +183,5 @@
 
 /*
- *  ã­ã°ãããã¡ã®ç¶æ
-åç
-§ï¼åãå£é¢æ°ï¼
+ *  ログバッファの状態参照（受け口関数）
  */
 ER_UINT
@@ -225,6 +200,5 @@
 
 /* 
- *  ä½ã¬ãã«åºåã«ãããã¹ã¦ã®ã­ã°æ
-å ±ã®åºåï¼åãå£é¢æ°ï¼
+ *  低レベル出力によるすべてのログ情報の出力（受け口関数）
  */
 ER
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLog.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLog.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLog.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,14 +42,14 @@
 
 /*
- *		ã·ã¹ãã ã­ã°æ©è½ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		システムログ機能のコンポーネント記述ファイル
  */
 
 /*
- *  ã·ã¹ãã ã­ã°åºåã«é¢ããå®ç¾©
+ *  システムログ出力に関する定義
  */
 import_C("t_syslog.h");
 
 /*
- *  ä½ã¬ãã«åºåã®ã·ã°ããã£
+ *  低レベル出力のシグニチャ
  */
 signature sPutLog {
@@ -73,34 +58,29 @@
 
 /*
- *  ã·ã¹ãã ã­ã°æ©è½ã®ã·ã°ããã£
+ *  システムログ機能のシグニチャ
  */
 signature sSysLog {
 	/*
-	 *  ã­ã°æ
-å ±ã®åºå
+	 *  ログ情報の出力
 	 */
 	ER		write([in] uint_t priority, [in] const SYSLOG *p_syslog);
 
 	/*
-	 *  ã­ã°ãããã¡ããã®ã­ã°æ
-å ±ã®èª­åºã
+	 *  ログバッファからのログ情報の読出し
 	 */
 	ER_UINT	read([out] SYSLOG *p_syslog);
 
 	/*
-	 *  åºåãã¹ãã­ã°æ
-å ±ã®éè¦åº¦ã®è¨­å®
+	 *  出力すべきログ情報の重要度の設定
 	 */
 	ER		mask([in] uint_t logMask, [in] uint_t lowMask);
 
 	/*
-	 *  ä½ã¬ãã«åºåã«ãããã¹ã¦ã®ã­ã°æ
-å ±ã®åºå
+	 *  低レベル出力によるすべてのログ情報の出力
 	 */
 	ER		refer([out] T_SYSLOG_RLOG *pk_rlog);
 
 	/*
-	 *  ä½ã¬ãã«åºåã«ãããã¹ã¦ã®ã­ã°æ
-å ±ã®åºå
+	 *  低レベル出力によるすべてのログ情報の出力
 	 */
 	ER		flush(void);
@@ -108,27 +88,26 @@
 
 /*
- *  ã·ã¹ãã ã­ã°æ©è½ã®ã»ã«ã¿ã¤ã
+ *  システムログ機能のセルタイプ
  */
 [singleton]
 celltype tSysLog {
 	entry	sSysLog		eSysLog;
-	call	sPutLog		cPutLog;		/* ä½ã¬ãã«åºåã¨ã®æ¥ç¶ */
+	call	sPutLog		cPutLog;		/* 低レベル出力との接続 */
 
 	attr {
-		uint_t	logBufferSize;			/* ã­ã°ãããã¡ãµã¤ãº */
+		uint_t	logBufferSize;			/* ログバッファサイズ */
 		uint_t	initLogMask = C_EXP("LOG_UPTO(LOG_DEBUG)");
-										/* ã­ã°ãããã¡ã«è¨é²ãã¹ãéè¦åº¦ */
+										/* ログバッファに記録すべき重要度 */
 		uint_t	initLowMask = C_EXP("LOG_UPTO(LOG_EMERG)");
-									   	/* ä½ã¬ãã«åºåãã¹ãéè¦åº¦ */
+									   	/* 低レベル出力すべき重要度 */
 	};
 	var {
-		[size_is(logBufferSize)] SYSLOG	*logBuffer;	/* ã­ã°ãããã¡ */
-		uint_t	count = 0;				/* ã­ã°ãããã¡ä¸­ã®ã­ã°ã®æ° */
-		uint_t	head = 0;				/* å
-é ­ã®ã­ã°ã®æ ¼ç´ä½ç½® */
-		uint_t	tail = 0;				/* æ¬¡ã®ã­ã°ã®æ ¼ç´ä½ç½® */
-		uint_t	lost = 0;				/* å¤±ãããã­ã°ã®æ° */
-		uint_t	logMask = initLogMask;	/* ã­ã°ãããã¡ã«è¨é²ãã¹ãéè¦åº¦ */
-		uint_t	lowMask = initLowMask;	/* ä½ã¬ãã«åºåãã¹ãéè¦åº¦ */
+		[size_is(logBufferSize)] SYSLOG	*logBuffer;	/* ログバッファ */
+		uint_t	count = 0;				/* ログバッファ中のログの数 */
+		uint_t	head = 0;				/* 先頭のログの格納位置 */
+		uint_t	tail = 0;				/* 次のログの格納位置 */
+		uint_t	lost = 0;				/* 失われたログの数 */
+		uint_t	logMask = initLogMask;	/* ログバッファに記録すべき重要度 */
+		uint_t	lowMask = initLowMask;	/* 低レベル出力すべき重要度 */
 	};
 };
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLogAdapter.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLogAdapter.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLogAdapter.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,6 +40,6 @@
 
 /*
- *		Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ã¹ãã ã­ã°
- *		æ©è½ãå¼ã³åºãããã®ã¢ããã¿
+ *		C言語で記述されたアプリケーションから，TECSベースのシステムログ
+ *		機能を呼び出すためのアダプタ
  */
 
@@ -63,6 +48,5 @@
 
 /*
- *  ã­ã°æ
-å ±ã®åºå
+ *  ログ情報の出力
  */
 ER
@@ -73,6 +57,5 @@
 
 /*
- *  ã­ã°ãããã¡ããã®ã­ã°æ
-å ±ã®èª­åºã
+ *  ログバッファからのログ情報の読出し
  */
 ER_UINT
@@ -83,6 +66,5 @@
 
 /*
- *  åºåãã¹ãã­ã°æ
-å ±ã®éè¦åº¦ã®è¨­å®
+ *  出力すべきログ情報の重要度の設定
  */
 ER
@@ -93,7 +75,5 @@
 
 /*
- *  ã­ã°ãããã¡ã®ç¶æ
-åç
-§
+ *  ログバッファの状態参照
  */
 ER
@@ -104,6 +84,5 @@
 
 /*
- *  ä½ã¬ãã«åºåã«ãããã¹ã¦ã®ã­ã°æ
-å ±ã®åºå
+ *  低レベル出力によるすべてのログ情報の出力
  */
 ER
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLogAdapter.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLogAdapter.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tSysLogAdapter.cdl	(revision 389)
@@ -1,5 +1,5 @@
 /*
- *		Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSãã¼ã¹ã®ã·ã¹ãã ã­ã°
- *		æ©è½ãå¼ã³åºãããã®ã¢ããã¿ç¨ã»ã«ã¿ã¤ãã®å®ç¾©
+ *		C言語で記述されたアプリケーションから，TECSベースのシステムログ
+ *		機能を呼び出すためのアダプタ用セルタイプの定義
  *
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tTestService.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tTestService.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tTestService.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ãã¹ããã­ã°ã©ã ç¨ãµã¼ãã¹
+ *		テストプログラム用サービス
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  ãã¹ããã­ã°ã©ã ã®éå§ï¼åãå£é¢æ°ï¼
+ *  テストプログラムの開始（受け口関数）
  */
 void
@@ -75,5 +60,5 @@
 
 /*
- *	èªå·±è¨ºæ­é¢æ°ã®è¨­å®
+ *	自己診断関数の設定
  */
 void
@@ -84,5 +69,5 @@
 
 /*
- *	ãã¹ããã­ã°ã©ã ã®çµäº
+ *	テストプログラムの終了
  */
 static void
@@ -95,10 +80,10 @@
 	(void) ext_ker();
 
-	/* ããã¸æ¥ããã¨ã¯ãªãã¯ã */
+	/* ここへ来ることはないはず */
 	SIL_UNL_INT();
 }
 
 /*
- *	ãã§ãã¯ãã¤ã³ãï¼åãå£é¢æ°ï¼
+ *	チェックポイント（受け口関数）
  */
 void
@@ -110,11 +95,10 @@
 
 	/*
-	 *  å²è¾¼ã¿ã­ãã¯ç¶æ
-ã«
+	 *  割込みロック状態に
 	 */
 	SIL_LOC_INT();
 
 	/*
-	 *  ã·ã¼ã±ã³ã¹ãã§ãã¯
+	 *  シーケンスチェック
 	 */
 	if (++VAR_check_count == count) {
@@ -127,7 +111,5 @@
 
 	/*
-	 *  ã«ã¼ãã«ã®å
-é¨ç¶æ
-ã®æ¤æ»
+	 *  カーネルの内部状態の検査
 	 */
 	if (is_cBuiltInTest_joined()) {
@@ -141,5 +123,5 @@
 
 	/*
-	 *  ã¨ã©ã¼ãæ¤åºãããå ´åã¯ï¼ãã¹ããã­ã°ã©ã ãçµäºããï¼
+	 *  エラーが検出された場合は，テストプログラムを終了する．
 	 */
 	if (errorflag) {
@@ -148,6 +130,5 @@
 
 	/*
-	 *  å²è¾¼ã¿ã­ãã¯ç¶æ
-ãè§£é¤
+	 *  割込みロック状態を解除
 	 */
 	SIL_UNL_INT();
@@ -155,5 +136,5 @@
 
 /*
- *	å®äºãã§ãã¯ãã¤ã³ãï¼åãå£é¢æ°ï¼
+ *	完了チェックポイント（受け口関数）
  */
 void
@@ -168,5 +149,5 @@
 
 /*
- *	æ¡ä»¶ãã§ãã¯ã®ã¨ã©ã¼å¦çï¼åãå£é¢æ°ï¼
+ *	条件チェックのエラー処理（受け口関数）
  */
 void
@@ -179,5 +160,5 @@
 
 /*
- *	ã¨ã©ã¼ã³ã¼ããã§ãã¯ã®ã¨ã©ã¼å¦çï¼åãå£é¢æ°ï¼
+ *	エラーコードチェックのエラー処理（受け口関数）
  */
 void
@@ -190,5 +171,5 @@
 
 /*
- *	ã¨ã©ã¼ã³ã¼ããã§ãã¯ã®ã¨ã©ã¼å¦çï¼åãå£é¢æ°ï¼
+ *	エラーコードチェックのエラー処理（受け口関数）
  */
 ER
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tTestService.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tTestService.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tTestService.cdl	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,9 +40,9 @@
 
 /*
- *		ãã¹ããã­ã°ã©ã ç¨ãµã¼ãã¹ã®ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
+ *		テストプログラム用サービスのコンポーネント記述ファイル
  */
 
 /*
- *  èªå·±è¨ºæ­ãµã¼ãã¹ã®ã·ã°ããã£
+ *  自己診断サービスのシグニチャ
  */
 signature sBuiltInTest {
@@ -66,15 +51,15 @@
 
 /*
- *  ãã¹ããã­ã°ã©ã ç¨ãµã¼ãã¹ã®ã·ã°ããã£
+ *  テストプログラム用サービスのシグニチャ
  *
- *  setBuiltInTestã¯ï¼TECSã®ä¸­ã§ã¯åççµåãä½¿ã£ã¦å®ç¾ãã¹ãã§ãããï¼
- *  Cè¨èªã®ã¢ããªã±ã¼ã·ã§ã³ããå¼ã³åºããããããããã«ï¼TECSã®ä½æ³é
- *  åã®ã³ã¼ãã¨ãªã£ã¦ããï¼
+ *  setBuiltInTestは，TECSの中では動的結合を使って実現すべきであるが，
+ *  C言語のアプリケーションから呼び出しやすくするために，TECSの作法違
+ *  反のコードとなっている．
  *
- *  getInterruptPriorityMaskã¯ï¼ãã®ã¾ã¾ã«ã¼ãã«ãå¼ã³åºãã ãã®é¢æ°ã§
- *  ããï¼ä¿è­·æ©è½å¯¾å¿ã§ãªãã«ã¼ãã«ã§ã¯ãã®ã¾ã¾ã«ã¼ãã«ãå¼ã¹ã°è¯ããï¼
- *  ä¿è­·æ©è½å¯¾å¿ã«ã¼ãã«ã§ã¯ã«ã¼ãã«ãç´æ¥å¼ã³åºããã¨ã¯éããªãã®ã§ï¼
- *  ãã¹ããã­ã°ã©ã ç¨ãµã¼ãã¹ï¼ã«ã¼ãã«ãã¡ã¤ã³ã§åä½ãããã¨ãæ³å®ï¼
- *  ã¨ãã¦ç¨æãã¦ããï¼
+ *  getInterruptPriorityMaskは，そのままカーネルを呼び出すだけの関数で
+ *  ある．保護機能対応でないカーネルではそのままカーネルを呼べば良いが，
+ *  保護機能対応カーネルではカーネルを直接呼び出せるとは限らないので，
+ *  テストプログラム用サービス（カーネルドメインで動作することを想定）
+ *  として用意している．
  */
 signature sTestService {
@@ -91,5 +76,5 @@
 
 /*
- *  ãã¹ããã­ã°ã©ã ç¨ãµã¼ãã¹ã®ã»ã«ã¿ã¤ã
+ *  テストプログラム用サービスのセルタイプ
  */
 [singleton, active]
@@ -100,10 +85,10 @@
 
 	var {
-		uint_t		check_count;	/* æå¾ã«ééãããã§ãã¯ãã¤ã³ã */
+		uint_t		check_count;	/* 最後に通過したチェックポイント */
 	};
 };
 
 /*
- *  èªå·±è¨ºæ­ãµã¼ãã¹ã®ãã£ã¹ã¯ãªãã¿ãåå¾ããã·ã°ããã£
+ *  自己診断サービスのディスクリプタを取得するシグニチャ
  */
 signature sGetBuiltInTestDescriptor {
@@ -113,5 +98,5 @@
 
 /*
- *  èªå·±è¨ºæ­ãµã¼ãã¹ã®ãã£ã¹ã¯ãªãã¿ãåå¾ããã»ã«ã¿ã¤ã
+ *  自己診断サービスのディスクリプタを取得するセルタイプ
  */
 [singleton, active]
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/test_svc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/test_svc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/test_svc.h	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /* 
- *		ãã¹ããã­ã°ã©ã ç¨ãµã¼ãã¹
+ *		テストプログラム用サービス
  */
 
@@ -69,10 +54,10 @@
 
 /*
- *  TECSã§è¨è¿°ããããã¹ããã­ã°ã©ã ç¨ã®ãµã¼ãã¹ãç´æ¥å¼ã³åºãããã®å®ç¾©
+ *  TECSで記述されたテストプログラム用のサービスを直接呼び出すための定義
  *
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSã§è¨è¿°ããããã¹ããã­ã°
- *  ã©ã ç¨ã®ãµã¼ãã¹ãå¼ã³åºãããã«ã¯ï¼ã¢ããã¿ãç¨ããã®ãæ­£å½ãªæ¹æ³
- *  ã§ãããï¼ãã¹ããã­ã°ã©ã ç¨ã®ãµã¼ãã¹ãã·ã³ã°ã«ãã³ã§ãããã¨ãå©
- *  ç¨ãã¦ç´æ¥å¼ã³åºãï¼
+ *  C言語で記述されたアプリケーションから，TECSで記述されたテストプログ
+ *  ラム用のサービスを呼び出すためには，アダプタを用いるのが正当な方法
+ *  であるが，テストプログラム用のサービスがシングルトンであることを利
+ *  用して直接呼び出す．
  */
 extern void	tTestService_eTestService_start(const char *progname);
@@ -87,5 +72,5 @@
 
 /*
- *  ãã¹ããã­ã°ã©ã ã®éå§
+ *  テストプログラムの開始
  */
 Inline void
@@ -96,5 +81,5 @@
 
 /*
- *	èªå·±è¨ºæ­é¢æ°ã®è¨­å®
+ *	自己診断関数の設定
  */
 Inline void
@@ -105,5 +90,5 @@
 
 /*
- *	ãã§ãã¯ãã¤ã³ã
+ *	チェックポイント
  */
 Inline void
@@ -114,5 +99,5 @@
 
 /*
- *	å®äºãã§ãã¯ãã¤ã³ã
+ *	完了チェックポイント
  */
 Inline void
@@ -123,5 +108,5 @@
 
 /*
- *	æ¡ä»¶ãã§ãã¯
+ *	条件チェック
  */
 Inline void
@@ -135,5 +120,5 @@
 
 /*
- *	ã¨ã©ã¼ã³ã¼ããã§ãã¯
+ *	エラーコードチェック
  */
 Inline void
@@ -148,6 +133,5 @@
 
 /*
- *	ã·ã¹ãã ç¶æ
-ã®ãã§ãã¯
+ *	システム状態のチェック
  */
 #define check_state(ctx, loc, dsp, dpn, ter) do {	\
@@ -160,6 +144,5 @@
 
 /*
- *	å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®ãã§ãã¯
+ *	割込み優先度マスクのチェック
  */
 #define check_ipm(ipm) do {												\
@@ -177,9 +160,9 @@
 
 /*
- *  TECSã§è¨è¿°ãããèªå·±è¨ºæ­ãµã¼ãã¹ãç´æ¥å¼ã³åºãããã®å®ç¾©
+ *  TECSで記述された自己診断サービスを直接呼び出すための定義
  *
- *  Cè¨èªã§è¨è¿°ãããã¢ããªã±ã¼ã·ã§ã³ããï¼TECSã§è¨è¿°ãããèªå·±è¨ºæ­ãµã¼
- *  ãã¹ãå¼ã³åºãããã«ã¯ï¼ã¢ããã¿ãç¨ããã®ãæ­£å½ãªæ¹æ³ã§ãããï¼èª
- *  å·±è¨ºæ­ãµã¼ãã¹ãã·ã³ã°ã«ãã³ã§ãããã¨ãå©ç¨ãã¦ç´æ¥å¼ã³åºãï¼
+ *  C言語で記述されたアプリケーションから，TECSで記述された自己診断サー
+ *  ビスを呼び出すためには，アダプタを用いるのが正当な方法であるが，自
+ *  己診断サービスがシングルトンであることを利用して直接呼び出す．
  */
 extern ER	tBuiltInTestAdaptor_eGetBuiltInTestDescriptor_getDescriptor
Index: azure_iot_hub/trunk/asp3_dcre/syssvc/tlsf/README.md
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/syssvc/tlsf/README.md	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/syssvc/tlsf/README.md	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/MANIFEST
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/MANIFEST	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/MANIFEST	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.target
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.target	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.target	(revision 389)
@@ -1,8 +1,8 @@
 #
-#		Makefileã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+#		Makefileのターゲット依存部（GR-CITRUS用）
 #
 
 #
-#  ãã¼ãåï¼ãã­ã»ããµåï¼éçºç°å¢åã®å®ç¾©
+#  ボード名，プロセッサ名，開発環境名の定義
 #
 BOARD = gr_citrus
@@ -11,10 +11,10 @@
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES := $(INCLUDES) -I$(TARGETDIR) -I$(SRCDIR)/mbed
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
+#  カーネルに関する定義
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(TARGETDIR)
@@ -23,5 +23,5 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(SYSSVC_DIRS) $(SRCDIR)/mbed $(SRCDIR)/syssvc/tlsf
@@ -29,10 +29,10 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿é¢ä¿ã®å¤æ°ã®å®ç¾©
+#  コンフィギュレータ関係の変数の定義
 #
 CFG_TABS := $(CFG_TABS) --symval-table $(TARGETDIR)/target_sym.def
 
 #
-#  ãã¬ã¼ã¹ã­ã°è¨é²ã®ãµã³ãã«ã³ã¼ãã«é¢ããå®ç¾©
+#  トレースログ記録のサンプルコードに関する定義
 #
 ifeq ($(ENABLE_TRACE),true)
@@ -42,5 +42,5 @@
 
 #
-#  åã»ã°ã¡ã³ãã®éå§ã¢ãã¬ã¹ã®å®ç¾©
+#  各セグメントの開始アドレスの定義
 #
 #TEXT_START_ADDRESS = 00010000
@@ -48,13 +48,13 @@
 
 #
-#  ãªã³ã«ã¹ã¯ãªããã®å®ç¾©
+#  リンカスクリプトの定義
 #
 LDSCRIPT = $(TARGETDIR)/gr_citrus.ld
 
 #
-#  ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã«é¢ããå®ç¾©
+#  スタートアップモジュールに関する定義
 #
-#  m68kelf.ldã«ãSTARTUP(start.o)ããè¨è¿°ããããï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼
-#  ã«ã®ååãHIDDEN_OBJSã«å®ç¾©ããï¼ã¾ãï¼LDFLAGSã«-nostdlibãè¿½å ãã¦ããï¼
+#  m68kelf.ldに「STARTUP(start.o)」を記述したため，スタートアップモジュー
+#  ルの名前をHIDDEN_OBJSに定義する．また，LDFLAGSに-nostdlibを追加している．
 #
 HIDDEN_OBJS = start.o
@@ -73,5 +73,5 @@
 
 #
-#  ä¾å­é¢ä¿ã®å®ç¾©
+#  依存関係の定義
 #
 cfg1_out.c: $(TARGETDIR)/target_sym.def
@@ -80,5 +80,5 @@
 
 #
-#  ãã­ã»ããµä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ã
+#  プロセッサ依存部のインクルード
 #
 include $(SRCDIR)/arch/$(PRC)_$(TOOL)/Makefile.prc
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.tinet
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.tinet	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/Makefile.tinet	(revision 389)
@@ -5,39 +5,27 @@
 #                    Tomakomai National College of Technology, JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
-#   ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
-#   è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
-#   ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
-#   å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+#   によって公表されている GNU General Public License の Version 2 に記
+#   述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+#   を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+#   利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次の条件を満たすこと．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
-#   å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
-#   æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+#   含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+#   接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 #  
 #   @(#) $Id$
@@ -45,5 +33,5 @@
 
 #
-#  Makefile.tinet ã®ã·ã¹ãã ä¾å­é¨åï¼GR-CITRUSç¨ï¼
+#  Makefile.tinet のシステム依存部分（GR-CITRUS用）
 
 ifeq ($(NET_IF),ether)
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/gr_citrus.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/gr_citrus.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/gr_citrus.h	(revision 389)
@@ -6,52 +6,37 @@
  *  Copyright (C) 2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
  */
 
-/* GR-CITRUSç¨ããããã¡ã« */
+/* GR-CITRUS用ヘッダファル */
 
 #ifndef	TOPPERS_GRCITRUS_H
@@ -60,17 +45,16 @@
 
 /*
- *  MCUä¾å­æ
-å ±ã®èª­ã¿è¾¼ã¿
+ *  MCU依存情報の読み込み
  */
 #include "rx630.h"
 
 /*
- *  ã¯ã­ãã¯è¨­å®
+ *  クロック設定
  */
 
 /*
- *  ã·ã¹ãã ã¯ã­ãã¯ICLK(kHz)
+ *  システムクロックICLK(kHz)
  *
- *  CPUï¼DTCï¼DMACAï¼ETHERCï¼EDMACï¼ROMï¼RAMç¨
+ *  CPU，DTC，DMACA，ETHERC，EDMAC，ROM，RAM用
  *  
  */
@@ -78,17 +62,17 @@
 
 /*
- *  ã¯ã­ãã¯PCLK(kHz)
+ *  クロックPCLK(kHz)
  *
- *  ã¿ã¤ãï¼ã·ãªã¢ã«ãªã©å¨è¾ºã¢ã¸ã¥ã¼ã«ç¨
+ *  タイマ，シリアルなど周辺モジュール用
  */
 #define FREQ_PCLK  (48000U)
 
 /*
- *  ãã¼ã¬ã¼ãè¨­å®
+ *  ボーレート設定
  */
 #define UART_BAUDRATE		115200
 
 /*
- *  ã¯ã­ãã¯ã½ã¼ã¹
+ *  クロックソース
  */
 #define UART_CLKSRC			CLK_F1
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/sectrx.inc
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/sectrx.inc	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/sectrx.inc	(revision 389)
@@ -6,47 +6,32 @@
 ;*  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
 ;* 
-;*  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-;*  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-;*  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-;*  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-;*      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-;*      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-;*  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-;*      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-;*      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-;*      ã¨ï¼
-;*    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-;*        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-;*        å ±åãããã¨ï¼
-;*  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-;*      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-;*      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-;*      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-;*      å
-è²¬ãããã¨ï¼
+;*  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+;*  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+;*  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+;*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+;*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+;*      スコード中に含まれていること．
+;*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+;*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+;*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+;*      の無保証規定を掲載すること．
+;*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+;*      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+;*      と．
+;*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+;*        作権表示，この利用条件および下記の無保証規定を掲載すること．
+;*    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+;*        報告すること．
+;*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+;*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+;*      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+;*      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+;*      免責すること．
 ;* 
-;*  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-;*  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-;*  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-;*  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-;*  ã®è²¬ä»»ãè² ããªãï¼
+;*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+;*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+;*  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+;*  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+;*  の責任を負わない．
 ;* 
 ;*  @(#) $Id$
@@ -54,16 +39,16 @@
 
 ;
-;  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã»ã¯ã·ã§ã³å®ç¾©ãã¡ã¤ã«(ã¹ã¿ã¼ã¿ã¼ã­ããç¨)
+;  ターゲットシステム依存セクション定義ファイル(スターターキット用)
 ;
 
 ;
-;  ã»ã¯ã·ã§ã³ã®å®ç¾©
+;  セクションの定義
 ;
-;  ã»ã¯ã·ã§ã³ã®ã¢ãã¬ã¹å®ç¾©ã¯HEWä¸ã®æé©åãªã³ã«ã®
-;  ãªãã·ã§ã³ã«ã¦å®æ½ãã.
+;  セクションのアドレス定義はHEW上の最適化リンカの
+;  オプションにて実施する.
 ;
 
 	;
-	;  åæå¤æããã¼ã¿é åã®ã»ã¯ã·ã§ã³
+	;  初期値有りデータ領域のセクション
 	;
 	;  00000000h - 00020000h
@@ -75,5 +60,5 @@
 
 	;
-	;  åæå¤ç¡ããã¼ã¿é åã®ã»ã¯ã·ã§ã³
+	;  初期値無しデータ領域のセクション
 	;
 	;  00000000h - 00020000h
@@ -88,11 +73,11 @@
 
 	;
-	;  ã«ã¼ãã«ã¹ã¿ãã¯é åã®ã»ã¯ã·ã§ã³
+	;  カーネルスタック領域のセクション
 	;
 	;  00000000h - 00020000h
 	;
-	;  ä»¥ä¸.blkbå½ä»¤ã§ç¢ºä¿ãã¦ããã«ã¼ãã«ã¹ã¿ãã¯é åã®ãµã¤ãºã
-	;  å¤æ´ããå ´åã¯, target_kernel_impl.hã®DEFAULT_ISTKSZã®å¤ã, åã
-	;  å¤ã«å¤æ´ãããã¨.
+	;  以下.blkb命令で確保しているカーネルスタック領域のサイズを
+	;  変更する場合は, target_kernel_impl.hのDEFAULT_ISTKSZの値を, 同じ
+	;  値に変更すること.
 	;
 ;	.section	SI, DATA, ALIGN = 4
@@ -104,5 +89,5 @@
 
 	;
-	;  å®æ°é åã®ã»ã¯ã·ã§ã³
+	;  定数領域のセクション
 	;
 	;  00100000h - 00107FFFh
@@ -113,5 +98,5 @@
 
 	;
-	;  åæå¤æããã¼ã¿é åã®åæå¤
+	;  初期値有りデータ領域の初期値
 	;
 	;  00100000h - 00107FFFh
@@ -122,5 +107,5 @@
 
 	;
-	;  å¯å¤ãã¯ã¿ãã¼ãã«é åã®ã»ã¯ã·ã§ã³
+	;  可変ベクタテーブル領域のセクション
 	;
 	;  00100000h - 00107FFFh
@@ -131,5 +116,5 @@
 
 	;
-	;  ãã­ã°ã©ã é åã®ã»ã¯ã·ã§ã³
+	;  プログラム領域のセクション
 	;
 	;  FFE80000h - FFFFFF7Fh
@@ -138,5 +123,5 @@
 
 	;
-	;  åºå®ãã¯ã¿ãã¼ãã«é åã®ã»ã¯ã·ã§ã³
+	;  固定ベクタテーブル領域のセクション
 	;
 	;  FFFFFF80h - FFFFFFFFh
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tPutLogGRCitrus.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tPutLogGRCitrus.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tPutLogGRCitrus.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºå
+ *		システムログの低レベル出力
  */
 
@@ -61,8 +46,8 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®åæå
+ *  システムログの低レベル出力のための初期化
  *
- *  åæåã«ã¼ãã³ãå¼ã³åºãããåã«åæåããããã«ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ã
- *  ãä¾å­é¨ããç´æ¥å¼ã³åºãããã®é¢æ°ï¼
+ *  初期化ルーチンを呼び出すより前に初期化するために，カーネルのターゲッ
+ *  ト依存部から直接呼び出すための関数．
  */
 void
@@ -73,7 +58,7 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºåï¼åãå£é¢æ°ï¼
+ *  システムログの低レベル出力のための文字出力（受け口関数）
  *
- *  SIOãã¼ãã«æå­ãéä¿¡ã§ããã¾ã§ãã¼ãªã³ã°ããï¼
+ *  SIOポートに文字が送信できるまでポーリングする．
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tPutLogGRCitrus.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tPutLogGRCitrus.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tPutLogGRCitrus.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,9 +42,9 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		システムログの低レベル出力のコンポーネント記述
  */
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ã»ã«ã¿ã¤ã
+ *  システムログの低レベル出力のセルタイプ
  */
 [singleton]
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrus.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrus.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrus.cdl	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -58,10 +43,10 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
- *		ã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		シリアルインタフェースドライバのターゲット依存部（GR-CITRUS用）
+ *		のコンポーネント記述
  */
 
 /*
- *  GR-CITRUSã¨RX631/RX63Nã«é¢ããå®ç¾©
+ *  GR-CITRUSとRX631/RX63Nに関する定義
  */
 import_C("gr_citrus.h");
@@ -69,16 +54,15 @@
 
 /*
- *  FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©ã¤ã
+ *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
  */
 import("tMbedSerial.cdl");
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®æ¬ä½ï¼ã·ãªã¢ã«ã¤
- *  ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨SIOãã©ã¤ããæ¥ç¶ããé¨åï¼ã®ã»ã«ã¿ã¤ã
+ *  シリアルインタフェースドライバのターゲット依存部の本体（シリアルイ
+ *  ンタフェースドライバとSIOドライバを接続する部分）のセルタイプ
  */
 celltype tSIOPortGRCitrusMain {
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå
+	 *  シリアルインタフェースドライバとの結合
 	 */
 	[inline] entry		sSIOPort	eSIOPort;
@@ -86,5 +70,5 @@
 
 	/*
-	 *  SIOãã©ã¤ãã¨ã®çµå
+	 *  SIOドライバとの結合
 	 */
 	call			sSIOPort	cSIOPort;
@@ -93,10 +77,10 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼è¤åã³ã³ãã¼ãã³
- *  ãï¼ã®ã»ã«ã¿ã¤ã
+ *  シリアルインタフェースドライバのターゲット依存部（複合コンポーネン
+ *  ト）のセルタイプ
  */
 composite tSIOPortGRCitrus {
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå
+	 *  シリアルインタフェースドライバとの結合
 	 */
 	entry				sSIOPort	eSIOPort;
@@ -104,14 +88,14 @@
 
 	/*
-	 *  å±æ§ã®å®ç¾©
+	 *  属性の定義
 	 */
 	attr {
-		int32_t tx;								/* éä¿¡Pin */
-		int32_t rx;								/* åä¿¡Pin */
-		uint32_t	baudRate = 115200;			/* ãã¼ã¬ã¼ãã®è¨­å®å¤ */
+		int32_t tx;								/* 送信Pin */
+		int32_t rx;								/* 受信Pin */
+		uint32_t	baudRate = 115200;			/* ボーレートの設定値 */
 	};
 
 	/*
-	 *  SIOãã©ã¤ã
+	 *  SIOドライバ
 	 */
 	cell tMbedSerial MbedSerial {
@@ -123,5 +107,5 @@
 
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®æ¬ä½
+	 *  シリアルインタフェースドライバのターゲット依存部の本体
 	 */
 	cell tSIOPortGRCitrusMain SIOPortMain {
@@ -133,16 +117,14 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®ãã­ãã¿ã¤ã
+ *  シリアルインタフェースドライバのターゲット依存部のプロトタイプ
  *
- *  ãµã³ãã«ãã­ã°ã©ã ãä½¿ããã¼ããï¼SIOPortTarget1ã«åºå®ããã¦ããã
- *  ãï¼ãã¼ã1ã¨ãã¼ã3ãå
-¥ãæãã¦ããï¼å
-·ä½çã«ã¯ï¼SIOPortTarget1ã¯
- *  MbedSerialã®ãã£ãã«2ï¼ãã£ãã«çªå·ã¯0ããå§ã¾ãã®ã§ï¼ãã¼ã3ã®ãã¨ï¼ã«ï¼
- *  SIOPortTarget3ã¯MbedSerialã®ãã£ãã«0ã«ã¤ãªãã£ã¦ããï¼
+ *  サンプルプログラムが使うポートが，SIOPortTarget1に固定されているた
+ *  め，ポート1とポート3を入れ換えている．具体的には，SIOPortTarget1は
+ *  MbedSerialのチャネル2（チャネル番号は0から始まるので，ポート3のこと）に，
+ *  SIOPortTarget3はMbedSerialのチャネル0につながっている．
  */
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget1 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P20");		/* PIN_IO0 */
 	rx = C_EXP("P21");		/* PIN_IO1 */
@@ -151,5 +133,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget2 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P50");		/* PIN_IO5 */
 	rx = C_EXP("P52");		/* PIN_IO6 */
@@ -158,5 +140,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget3 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P32");		/* PIN_IO7 */
 	rx = C_EXP("P33");		/* PIN_IO8 */
@@ -165,5 +147,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget4 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("PC7");		/* PIN_IO12 */
 	rx = C_EXP("PC6");		/* PIN_IO11 */
@@ -172,5 +154,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget5 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P26");		/* PIN_IO26 */
 	rx = C_EXP("P30");		/* PIN_IO22 */
@@ -179,5 +161,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget6 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("PB5");		/* PIN_IO29 */
 	rx = C_EXP("P25");		/* PIN_IO23 */
@@ -186,5 +168,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget7 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("PA0");		/* PIN_IO33 */
 	rx = C_EXP("PC2");		/* PIN_IO4 */
@@ -193,5 +175,5 @@
 [prototype]
 cell tSIOPortGRCitrus SIOPortTarget8 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	rx = NULL;
 	tx = NULL;
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrusMain_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrusMain_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tSIOPortGRCitrusMain_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,9 +42,9 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（GR-CITRUS用）
  */
 
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 Inline void
@@ -69,5 +54,5 @@
 
 	/*
-	 *  ããã¤ã¹ä¾å­ã®ãªã¼ãã³å¦ç
+	 *  デバイス依存のオープン処理
 	 */
 	cSIOPort_open();
@@ -75,5 +60,5 @@
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 Inline void
@@ -83,5 +68,5 @@
 
 	/*
-	 *  ããã¤ã¹ä¾å­ã®ã¯ã­ã¼ãºå¦ç
+	 *  デバイス依存のクローズ処理
 	 */
 	cSIOPort_close();
@@ -89,5 +74,5 @@
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 Inline bool_t
@@ -100,5 +85,5 @@
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 Inline int_t
@@ -111,5 +96,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 Inline void
@@ -122,5 +107,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 Inline void
@@ -133,5 +118,5 @@
 
 /*
- *  SIOãã¼ãããã®éä¿¡å¯è½ã³ã¼ã«ããã¯
+ *  SIOポートからの送信可能コールバック
  */
 Inline void
@@ -146,5 +131,5 @@
 
 /*
- *  SIOãã¼ãããã®åä¿¡éç¥ã³ã¼ã«ããã¯
+ *  SIOポートからの受信通知コールバック
  */
 Inline void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,21 +42,21 @@
 
 /*
- *  ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®ããã©ã«ã
+ *  タスクのスタックサイズのデフォルト
  */
-const size_t DefaultTaskStackSize = 1024;		/* ã¹ã¿ãã¯ãµã¤ãºï¼1KBï¼*/
+const size_t DefaultTaskStackSize = 1024;		/* スタックサイズ（1KB）*/
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®å®ç¾©
+ *  システムログタスクのスタックサイズの定義
  */
 const size_t LogTaskStackSize = DefaultTaskStackSize;
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã«é¢ããå®ç¾©
+ *  カーネル起動メッセージに関する定義
  */
-const char *const BannerTargetName = "GR-CITRUS";		/* ã¿ã¼ã²ããå */
-const char *const BannerCopyrightNotice = "";			/* èä½æ¨©è¡¨ç¤º */
+const char *const BannerTargetName = "GR-CITRUS";		/* ターゲット名 */
+const char *const BannerCopyrightNotice = "";			/* 著作権表示 */
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®ã»ã«ã¿ã¤ãã®å®ç¾©
+ *  ターゲット依存のセルタイプの定義
  */
 import("syssvc/tPutLogSIOPort.cdl");
@@ -79,5 +64,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®çµã¿ä¸ãè¨è¿°
+ *  シリアルインタフェースドライバのターゲット依存部の組み上げ記述
  */
 cell tSIOPortGRCitrus SIOPortTarget1 {
@@ -85,8 +70,8 @@
 
 /*
- *  ä½ã¬ãã«åºåã®çµã¿ä¸ãè¨è¿°
+ *  低レベル出力の組み上げ記述
  */
 cell tPutLogSIOPort PutLogTarget {
-	/* SIOãã©ã¤ãã¨ã®çµå */
+	/* SIOドライバとの結合 */
 	cSIOPort = SIOPortTarget1.eSIOPort;
 };
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_cfg1_out.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_cfg1_out.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_cfg1_out.h	(revision 389)
@@ -1,5 +1,4 @@
 /*
- *		cfg1_out.cã®ãªã³ã¯ã«å¿
-è¦ãªã¹ã¿ãã®å®ç¾©
+ *		cfg1_out.cのリンクに必要なスタブの定義
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_check.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_check.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_check.trb	(revision 389)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 #
-#		ãã¹3ã®çæã¹ã¯ãªããã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+#		パス3の生成スクリプトのターゲット依存部（GR-CITRUS用）
 #
 
 #
-#  çæã¹ã¯ãªããã®ãã­ã»ããµä¾å­é¨
+#  生成スクリプトのプロセッサ依存部
 #
 IncludeTrb("prc_check.trb")
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.cfg	(revision 389)
@@ -1,5 +1,4 @@
 /*
- *		ã«ã¼ãã«å®è£
-ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *		カーネル実装のコンフィギュレーションファイル
  *
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.h	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,12 +45,12 @@
 
 /*
- *  ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾å­å®ç¾©ï¼GR-CITRUSç¨ï¼
+ *  カーネルのターゲット依存定義（GR-CITRUS用）
  */
 
 /*
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼kernel.hã§ã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡
- *  ã¤ã«ããç´æ¥ã¤ã³ã¯ã«ã¼ããããã¨ã¯ãªãï¼ãã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ã
- *  ããåã«ï¼t_stddef.hãã¤ã³ã¯ã«ã¼ããããã®ã§ï¼ãããã«ä¾å­ãã¦ãã
- *  ãï¼
+ *  このインクルードファイルは，kernel.hでインクルードされる．他のファ
+ *  イルから直接インクルードすることはない．このファイルをインクルード
+ *  する前に，t_stddef.hがインクルードされるので，それらに依存してもよ
+ *  い．
  */
 
@@ -75,20 +60,19 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_kernel.h"
 
 /*
- *  ãµãã¼ãããæ©è½ã®å®ç¾©
+ *  サポートする機能の定義
  */
-#define	TOPPERS_TARGET_SUPPORT_GET_UTM		/* get_utmããµãã¼ããã */
-//#define TOPPERS_TARGET_SUPPORT_OVRHDR		/* ãªã¼ãã©ã³ãã³ãã© */
+#define	TOPPERS_TARGET_SUPPORT_GET_UTM		/* get_utmをサポートする */
+//#define TOPPERS_TARGET_SUPPORT_OVRHDR		/* オーバランハンドラ */
 
 /*
- *  ã¿ã¤ã ãã£ãã¯ã®å®ç¾©
+ *  タイムティックの定義
  */
-#define	TIC_NUME		( 1U )		/* ã¿ã¤ã ãã£ãã¯ã®å¨æã®åå­ */
-#define	TIC_DENO		( 1U )		/* ã¿ã¤ã ãã£ãã¯ã®å¨æã®åæ¯ */
+#define	TIC_NUME		( 1U )		/* タイムティックの周期の分子 */
+#define	TIC_DENO		( 1U )		/* タイムティックの周期の分母 */
 
 #endif /* TOPPERS_TARGET_KERNEL_H */
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel.trb	(revision 389)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 #
-#		ãã¹2ã®çæã¹ã¯ãªããã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+#		パス2の生成スクリプトのターゲット依存部（GR-CITRUS用）
 #
 
 #
-#  çæã¹ã¯ãªããã®ãã­ã»ããµä¾å­é¨
+#  生成スクリプトのプロセッサ依存部
 #
 IncludeTrb("prc_kernel.trb")
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.c	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,5 +45,5 @@
 
 /*
- *	ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã¢ã¸ã¥ã¼ã«ï¼GR-CITRUSç¨ï¼
+ *	ターゲットシステム依存モジュール（GR-CITRUS用）
  */
 
@@ -77,5 +62,5 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ åæåã«ã¼ãã³
+ *  ターゲットシステム依存 初期化ルーチン
  */
 void
@@ -83,14 +68,13 @@
 {
 	/*
-	 *  ãã­ã»ããµä¾å­ã®åæå
+	 *  プロセッサ依存の初期化
 	 */
 	prc_initialize();
 
-	/* IOãã¼ãåæå */
-	/* PA0, PA1, PA2, PA6ãåºåãã¼ãã«ãã */
+	/* IOポート初期化 */
+	/* PA0, PA1, PA2, PA6を出力ポートにする */
 	sil_wrb_mem(PORTA_PDR_ADDR,
 		sil_reb_mem(PORTA_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B1_BIT | PORT_PDR_B2_BIT | PORT_PDR_B6_BIT);
-	/* PA7ãå
-¥åãã¼ãã«ãã */
+	/* PA7を入力ポートにする */
 	sil_wrb_mem(PORTA_PDR_ADDR,
 		sil_reb_mem(PORTA_PDR_ADDR) & ~PORT_PDR_B7_BIT);
@@ -98,5 +82,5 @@
 #ifdef TOPPERS_OMIT_TECS
 	/*
-	 *  ã·ãªã¢ã«ãã¼ãã®è¨­å®
+	 *  シリアルポートの設定
 	 */
 	serial_init(&log_serial, STDIO_UART_TX, STDIO_UART_RX);
@@ -105,47 +89,38 @@
 #endif
 
-	/* ãã¼ãP40ï½P47ãå¨è¾ºæ©å¨ã« */
+	/* ポートP40～P47を周辺機器に */
 	sil_wrb_mem(PORT4_PMR_ADDR, 0xFF);
 
-	/* ãã¼ãP40ï½P47ãå
-¥åãã¼ãã«ãã */
+	/* ポートP40～P47を入力ポートにする */
 	sil_wrb_mem(PORT4_PDR_ADDR, 0x00);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-	/* P21ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD0ã¨ãã */
+	/* P21端子機能制御レジスタ RXD0とする */
 	sil_wrb_mem(MPC_P21PFS_ADDR, 0x0a);
-	/* P20ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD0ã¨ãã */
+	/* P20端子機能制御レジスタ TXD0とする */
 	sil_wrb_mem(MPC_P20PFS_ADDR, 0x0a);
 
-	/* P40ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN000ã¨ãã */
+	/* P40端子機能制御レジスタ アナログ入力AN000とする */
 	sil_wrb_mem(MPC_P40PFS_ADDR, 0x80);
-	/* P41ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN001ã¨ãã */
+	/* P41端子機能制御レジスタ アナログ入力AN001とする */
 	sil_wrb_mem(MPC_P41PFS_ADDR, 0x80);
-	/* P42ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN002ã¨ãã */
+	/* P42端子機能制御レジスタ アナログ入力AN002とする */
 	sil_wrb_mem(MPC_P42PFS_ADDR, 0x80);
-	/* P43ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN003ã¨ãã */
+	/* P43端子機能制御レジスタ アナログ入力AN003とする */
 	sil_wrb_mem(MPC_P43PFS_ADDR, 0x80);
-	/* P44ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN004ã¨ãã */
+	/* P44端子機能制御レジスタ アナログ入力AN004とする */
 	sil_wrb_mem(MPC_P44PFS_ADDR, 0x80);
-	/* P45ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN005ã¨ãã */
+	/* P45端子機能制御レジスタ アナログ入力AN005とする */
 	sil_wrb_mem(MPC_P45PFS_ADDR, 0x80);
-	/* P46ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN006ã¨ãã */
+	/* P46端子機能制御レジスタ アナログ入力AN006とする */
 	sil_wrb_mem(MPC_P46PFS_ADDR, 0x80);
-	/* P47ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN007ã¨ãã */
+	/* P47端子機能制御レジスタ アナログ入力AN007とする */
 	sil_wrb_mem(MPC_P47PFS_ADDR, 0x80);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+	/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 }
@@ -153,5 +128,5 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ã®çµäºã«ã¼ãã³
+ *  ターゲットシステムの終了ルーチン
  */
 void
@@ -159,5 +134,5 @@
 {
 	/*
-	 *	ãã­ã»ããµä¾å­ã®çµäºå¦ç
+	 *	プロセッサ依存の終了処理
 	 */
 	prc_terminate();
@@ -167,5 +142,5 @@
 #ifdef TOPPERS_OMIT_TECS
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºå
+ *  システムログの低レベル出力のための文字出力
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_kernel_impl.h	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -58,8 +43,8 @@
 
 /*
- *		ã¿ã¼ã²ããä¾å­ã¢ã¸ã¥ã¼ã«ï¼GR-CITRUSç¨ï¼
+ *		ターゲット依存モジュール（GR-CITRUS用）
  *
- *  ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ï¼kernel_impl.hã®ã¿ã¼
- *  ã²ããä¾å­é¨ã®ä½ç½®ä»ãã¨ãªãï¼
+ *  カーネルのターゲット依存部のインクルードファイル．kernel_impl.hのター
+ *  ゲット依存部の位置付けとなる．
  */
 
@@ -68,5 +53,5 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ã®ãã¼ãã¦ã§ã¢è³æºã®å®ç¾©
+ *  ターゲットシステムのハードウェア資源の定義
  */
 #include "gr_citrus.h"
@@ -74,9 +59,9 @@
 
 /*
- *  ããã©ã«ãã®éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯é åã®å®ç¾©
+ *  デフォルトの非タスクコンテキスト用のスタック領域の定義
  *
- *  ã¹ã¿ãã¯ãµã¤ãºãå¤æ´ããå ´åã¯, sectrx.incã®_DEFAULT_ISTACK
- *  ã©ãã«ã®ä½ç½®ã«ãã.blkbå½ä»¤ã®ãµã¤ãºã¨, ä»¥ä¸DEFAULT_ISTKSZã®
- *  ãµã¤ãºãåããã¦åãå¤ã«å¤æ´ãããã¨.
+ *  スタックサイズを変更する場合は, sectrx.incの_DEFAULT_ISTACK
+ *  ラベルの位置にある.blkb命令のサイズと, 以下DEFAULT_ISTKSZの
+ *  サイズを合わせて同じ値に変更すること.
  */
 #define DEFAULT_ISTKSZ		( 0x400 )
@@ -84,5 +69,5 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®æå­åºåã«ä½¿ç¨ãããã¼ãã®å®ç¾©  
+ *  ターゲット依存の文字出力に使用するポートの定義  
  */
 #define TARGET_PUTC_PORTID	( 1 )
@@ -92,12 +77,12 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã®åæå
+ *  ターゲットシステム依存の初期化
  */
 extern void	target_initialize( void );
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ã®çµäº
+ *  ターゲットシステムの終了
  *
- *  ã·ã¹ãã ãçµäºããæã«ä½¿ãï¼
+ *  システムを終了する時に使う．
  */
 extern void	target_exit( void )	NoReturn;
@@ -107,17 +92,17 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
+ *  プロセッサ依存モジュール（RX630用）
  */
 #include "rx630_kernel_impl.h"
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã«é¢ããè¨­å®
+ *  トレースログに関する設定
  */
 #define TCNT_TRACE_BUFFER	( 32 )
 
 /*
- *  ãã¬ã¼ã¹ã­ã°åºåããç®æã®é¸æ
- *    ã­ã°åºåããç®æã1ã§å®ç¾©
- *    ã­ã°åºåããªãç®æã0ã§å®ç¾©
+ *  トレースログ出力する箇所の選択
+ *    ログ出力する箇所を1で定義
+ *    ログ出力しない箇所を0で定義
  */
 #ifdef TOPPERS_ENABLE_TRACE
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（GR-CITRUS用）
  */
 
@@ -69,35 +54,32 @@
 
 /*
- *  SIOãã¼ãåæåãã­ãã¯ã®å®ç¾©
+ *  SIOポート初期化ブロックの定義
  */
 typedef struct sio_port_initialization_block {
-	char		*path;			/* ãã¡ã¤ã«ã®ãã¹å */
+	char		*path;			/* ファイルのパス名 */
 } SIOPINIB;
 
 /*
- *  SIOãã¼ãç®¡çãã­ãã¯ã®å®ç¾©
+ *  SIOポート管理ブロックの定義
  */
 struct sio_port_control_block {
-	const SIOPINIB *p_siopinib;	/* SIOãã¼ãåæåãã­ãã¯ */
-	intptr_t	exinf;			/* æ¡å¼µæ
-å ± */
-	bool_t		opened;		/* ãªã¼ãã³æ¸ã¿ãã©ã° */
-	struct termios saved_term;	/* å
-ã®ç«¯æ«å¶å¾¡æ
-å ± */
-
-	int_t		read_fd;		/* èª­åºãç¨ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ */
-	bool_t		rcv_flag;		/* åä¿¡æå­ãããã¡æå¹ãã©ã° */
-	char		rcv_buf;		/* åä¿¡æå­ãããã¡ */
-	bool_t		rcv_rdy;		/* åä¿¡éç¥ã³ã¼ã«ããã¯è¨±å¯ãã©ã° */
-
-	int_t		write_fd;		/* æ¸è¾¼ã¿ç¨ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ */
-	bool_t		snd_flag;		/* éä¿¡æå­ãããã¡æå¹ãã©ã° */
-	char		snd_buf;		/* éä¿¡æå­ãããã¡ */
-	bool_t		snd_rdy;		/* éä¿¡éç¥ã³ã¼ã«ããã¯è¨±å¯ãã©ã° */
+	const SIOPINIB *p_siopinib;	/* SIOポート初期化ブロック */
+	intptr_t	exinf;			/* 拡張情報 */
+	bool_t		opened;		/* オープン済みフラグ */
+	struct termios saved_term;	/* 元の端末制御情報 */
+
+	int_t		read_fd;		/* 読出し用ファイルディスクリプタ */
+	bool_t		rcv_flag;		/* 受信文字バッファ有効フラグ */
+	char		rcv_buf;		/* 受信文字バッファ */
+	bool_t		rcv_rdy;		/* 受信通知コールバック許可フラグ */
+
+	int_t		write_fd;		/* 書込み用ファイルディスクリプタ */
+	bool_t		snd_flag;		/* 送信文字バッファ有効フラグ */
+	char		snd_buf;		/* 送信文字バッファ */
+	bool_t		snd_rdy;		/* 送信通知コールバック許可フラグ */
 };
 
 /*
- *  SIOãã¼ãåæåãã­ãã¯
+ *  SIOポート初期化ブロック
  */
 const SIOPINIB siopinib_table[TNUM_SIOP] = {
@@ -106,10 +88,10 @@
 
 /*
- *  SIOãã¼ãç®¡çãã­ãã¯ã®ã¨ãªã¢
+ *  SIOポート管理ブロックのエリア
  */
 SIOPCB	siopcb_table[TNUM_SIOP];
 
 /*
- *  SIOãã¼ãIDããç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  SIOポートIDから管理ブロックを取り出すためのマクロ
  */
 #define INDEX_SIOP(siopid)	((uint_t)((siopid) - 1))
@@ -117,5 +99,5 @@
 
 /*
- *  SIOãã©ã¤ãã®åæå
+ *  SIOドライバの初期化
  */
 void
@@ -126,5 +108,5 @@
 
 	/*
-	 *  SIOãã¼ãç®¡çãã­ãã¯ã®åæå
+	 *  SIOポート管理ブロックの初期化
 	 */
 	for (i = 0; i < TNUM_SIOP; i++) {
@@ -136,5 +118,5 @@
 
 /*
- *  SIOãã©ã¤ãã®çµäºå¦ç
+ *  SIOドライバの終了処理
  */
 void
@@ -144,5 +126,5 @@
 
 	/*
-	 *  ãªã¼ãã³ããã¦ããSIOãã¼ãã®ã¯ã­ã¼ãº
+	 *  オープンされているSIOポートのクローズ
 	 */
 	for (i = 0; i < TNUM_SIOP; i++) {
@@ -152,5 +134,5 @@
 
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 SIOPCB *
@@ -173,6 +155,5 @@
 		}
 		else {
-			fd = STDIN_FILENO;					/* æ¨æºå
-¥åºåãä½¿ã */
+			fd = STDIN_FILENO;					/* 標準入出力を使う */
 			p_siopcb->read_fd = STDIN_FILENO;
 			p_siopcb->write_fd = STDOUT_FILENO;
@@ -197,5 +178,5 @@
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 void
@@ -218,5 +199,5 @@
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 bool_t
@@ -240,5 +221,5 @@
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 bool_t
@@ -260,5 +241,5 @@
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 bool_t
@@ -284,5 +265,5 @@
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 int_t
@@ -306,5 +287,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 void
@@ -322,5 +303,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *	SIOãã©ã¤ãï¼GR-CITRUSç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *	SIOドライバ（GR-CITRUS用）のコンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_serial.h	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（GR-CITRUS用）
  */
 
@@ -65,84 +50,83 @@
 
 /*
- *  SIOãã¼ãæ°ã®å®ç¾©
+ *  SIOポート数の定義
  */
-//#define TNUM_SIOP		1		/* ãµãã¼ãããSIOãã¼ãã®æ° */
+//#define TNUM_SIOP		1		/* サポートするSIOポートの数 */
 
 /*
- *  SIOå²è¾¼ã¿ãç»é²ããããã®å®ç¾©
+ *  SIO割込みを登録するための定義
  */
-#define ISRPRI_SIO		1		/* SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®ISRåªå
-åº¦ */
+#define ISRPRI_SIO		1		/* SIOの割込みサービスルーチンのISR優先度 */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  SIOãã¼ãç®¡çãã­ãã¯ã®å®ç¾©
+ *  SIOポート管理ブロックの定義
  */
 typedef struct sio_port_control_block	SIOPCB;
 
 /*
- *  ã³ã¼ã«ããã¯ã«ã¼ãã³ã®è­å¥çªå·
+ *  コールバックルーチンの識別番号
  */
-#define SIO_RDY_SND		1U		/* éä¿¡å¯è½ã³ã¼ã«ããã¯ */
-#define SIO_RDY_RCV		2U		/* åä¿¡éç¥ã³ã¼ã«ããã¯ */
+#define SIO_RDY_SND		1U		/* 送信可能コールバック */
+#define SIO_RDY_RCV		2U		/* 受信通知コールバック */
 
 /*
- *  SIOãã©ã¤ãã®åæå
+ *  SIOドライバの初期化
  */
 extern void		sio_initialize(intptr_t exinf);
 
 /*
- *  SIOãã©ã¤ãã®çµäºå¦ç
+ *  SIOドライバの終了処理
  */
 extern void		sio_terminate(intptr_t exinf);
 
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 extern SIOPCB	*sio_opn_por(ID siopid, intptr_t exinf);
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 extern void		sio_cls_por(SIOPCB *p_siopcb);
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 extern bool_t	sio_isr_snd(ID siopid);
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 extern bool_t	sio_isr_rcv(ID siopid, char c);
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 extern bool_t	sio_snd_chr(SIOPCB *siopcb, char c);
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 extern int_t	sio_rcv_chr(SIOPCB *siopcb);
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 extern void		sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn);
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 extern void		sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn);
 
 /*
- *  SIOãã¼ãããã®éä¿¡å¯è½ã³ã¼ã«ããã¯
+ *  SIOポートからの送信可能コールバック
  */
 extern void		sio_irdy_snd(intptr_t exinf);
 
 /*
- *  SIOãã¼ãããã®åä¿¡éç¥ã³ã¼ã«ããã¯
+ *  SIOポートからの受信通知コールバック
  */
 extern void		sio_irdy_rcv(intptr_t exinf);
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_sil.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_sil.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_sil.h	(revision 389)
@@ -5,47 +5,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,11 +38,10 @@
 
 /*
- *		sil.hã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+ *		sil.hのターゲット依存部（GR-CITRUS用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼sil.hã®å
-é ­ã§ã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡
- *  ã¤ã«ããã¯ç´æ¥ã¤ã³ã¯ã«ã¼ããããã¨ã¯ãªãï¼ãã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼
- *  ãããåã«ï¼t_stddef.hãã¤ã³ã¯ã«ã¼ããããã®ã§ï¼ãããã«ä¾å­ãã¦ã
- *  ããï¼
+ *  このインクルードファイルは，sil.hの先頭でインクルードされる．他のファ
+ *  イルからは直接インクルードすることはない．このファイルをインクルー
+ *  ドする前に，t_stddef.hがインクルードされるので，それらに依存しても
+ *  よい．
  */
 
@@ -66,6 +50,5 @@
 
 /*
- *  å¾®å°æéå¾
-ã¡ã®ããã®å®ç¾©
+ *  微少時間待ちのための定義
  */
 #define SIL_DLY_TIM1     69
@@ -73,6 +56,5 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_sil.h"
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_stddef.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_stddef.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_stddef.h	(revision 389)
@@ -11,47 +11,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -59,12 +44,10 @@
 
 /*
- *  t_stddef.hã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+ *  t_stddef.hのターゲット依存部（GR-CITRUS用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼t_stddef.hã®å
-é ­ã§ã¤ã³ã¯ã«ã¼ããããï¼
- *  ä»ã®ãã¡ã¤ã«ããã¯ç´æ¥ã¤ã³ã¯ã«ã¼ããããã¨ã¯ãªãï¼ä»ã®ã¤ã³ã¯ã«ã¼ã
- *  ãã¡ã¤ã«ã«å
-ç«ã£ã¦å¦çãããããï¼ä»ã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã«ä¾å­ã
- *  ã¦ã¯ãªããªãï¼
+ *  このインクルードファイルは，t_stddef.hの先頭でインクルードされる．
+ *  他のファイルからは直接インクルードすることはない．他のインクルード
+ *  ファイルに先立って処理されるため，他のインクルードファイルに依存し
+ *  てはならない．
  */
 
@@ -73,12 +56,11 @@
 
 /*
- *  ã¿ã¼ã²ãããè­å¥ããããã®ãã¯ã­ã®å®ç¾©
+ *  ターゲットを識別するためのマクロの定義
  */
-#define TOPPERS_GRCITRUS			/* ã·ã¹ãã ç¥ç§° */
+#define TOPPERS_GRCITRUS			/* システム略称 */
 
 
 /*
- *  éçºç°å¢ã§å
-±éãªå®ç¾©
+ *  開発環境で共通な定義
  */
 #ifndef TOPPERS_MACRO_ONLY
@@ -90,11 +72,10 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_stddef.h"
 
 /*
- *  ã¢ãµã¼ã·ã§ã³ã®å¤±ææã®å®è¡ä¸­æ­å¦ç
+ *  アサーションの失敗時の実行中断処理
  */
 #ifndef TOPPERS_MACRO_ONLY
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_support.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_support.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_support.c	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *	ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã¢ã¸ã¥ã¼ã«ï¼GR-CITRUSç¨ï¼
+ *	ターゲットシステム依存モジュール（GR-CITRUS用）
  */
 
@@ -63,27 +48,24 @@
 {
 	/*
-	 * åä½ã¢ã¼ãè¨­å®
+	 * 動作モード設定
 	 *
-	 * åä½ã¢ã¼ãã¯ãã¼ãä¸ã®ç«¯å­ã«ãã£ã¦æ±ºå®ããããã,
-	 * ããã§ã¯ç¹å¥è¨­å®ããªã.
-	 * ãã ã, ãªãã«ã¨ã³ãã£ã¢ã³/ã·ã³ã°ã«ãããã¢ã¼ã
-	 * ã§ãããã¨ãåæã¨ãã.
+	 * 動作モードはボード上の端子によって決定されるため,
+	 * ここでは特別設定しない.
+	 * ただし, リトルエンディアン/シングルチップモード
+	 * であることを前提とする.
 	 *
-	 * ã¾ããªã»ããå¾, å
-èµROMï¼æå¹, å
-èµRAMï¼æå¹, å¤é¨ãã¹ï¼ç¡å¹
-	 * ã§ãã.
+	 * またリセット後, 内蔵ROM：有効, 内蔵RAM：有効, 外部バス：無効
+	 * である.
 	 */
 
 	/*
-	 * ã¯ã­ãã¯è¨­å®
+	 * クロック設定
 	 *
-	 * å
-¥åï¼12MHz
-	 * PLLåè·¯ï¼12 x 8 = 96MHz
-	 * ã·ã¹ãã ã¯ã­ãã¯ï¼96MHz
-	 * å¨è¾ºã¢ã¸ã¥ã¼ã«ã¯ã­ãã¯ï¼48MHz
-	 * å¤é¨ãã¹ã¯ã­ãã¯ï¼96MHz
-	 * ã¨ãã.
+	 * 入力：12MHz
+	 * PLL回路：12 x 8 = 96MHz
+	 * システムクロック：96MHz
+	 * 周辺モジュールクロック：48MHz
+	 * 外部バスクロック：96MHz
+	 * とする.
 	 */
 	sil_wrb_mem(PORT3_PDR_ADDR,
@@ -98,10 +80,10 @@
 	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xa503);
 
-	/* ã¡ã¤ã³ã¯ã­ãã¯çºæ¯å¨å¼·å¶çºæ¯ */
+	/* メインクロック発振器強制発振 */
 	while((sil_reb_mem(SYSTEM_MOFCR_ADDR) & SYSTEM_MOFCR_MOFXIN) == 0)
 		sil_wrb_mem(SYSTEM_MOFCR_ADDR,
 			sil_reb_mem(SYSTEM_MOFCR_ADDR) | SYSTEM_MOFCR_MOFXIN);
 
-	/* ã¡ã¤ã³ã¯ã­ãã¯çºæ¯å¨åä½ */
+	/* メインクロック発振器動作 */
 	while((sil_reb_mem(SYSTEM_MOSCCR_ADDR) & SYSTEM_MOSCCR_MOSTP) != 0)
 		sil_wrb_mem(SYSTEM_MOSCCR_ADDR,
@@ -119,5 +101,5 @@
 	sil_wrh_mem(SYSTEM_SCKCR2_ADDR, 0x0033);
 
-	/* PLLåè·¯é¸æ */
+	/* PLL回路選択 */
 	sil_wrh_mem(SYSTEM_SCKCR3_ADDR,
 		(sil_reh_mem(SYSTEM_SCKCR3_ADDR) & ~SYSTEM_SCKCR3_CKSEL_MASK)
@@ -125,13 +107,10 @@
 
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ããã
+	 * モジュールストップ
 	 *
-	 * ãªã»ããå¾, åä½ãã¦ããå
-èµå¨è¾ºã¢ã¸ã¥ã¼ã«ã¯DMAC, DTC,
-	 * å
-èµRAMã®ã¿ã§ãã.
-	 * ããä»¥å¤ã®å
-èµå¨è¾ºã¢ã¸ã¥ã¼ã«ã«é¢ãã¦ã¯ä½¿ç¨ããå´ã§
-	 * è¨­å®ãããã¨.
+	 * リセット後, 動作している内蔵周辺モジュールはDMAC, DTC,
+	 * 内蔵RAMのみである.
+	 * それ以外の内蔵周辺モジュールに関しては使用する側で
+	 * 設定すること.
 	 */
 	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xa500);
@@ -141,8 +120,6 @@
 {
 	/*
-	 * æ¬ã³ã³ãã¤ã©ã§ã¯weak definitionã®æ©è½ãç¡ããã,
-	 * ç¹ã«å¿
-è¦ãªå¦çã¯ãªãã, å¿
-ãå¼ã³åºããã¨ã¨ãã.
+	 * 本コンパイラではweak definitionの機能が無いため,
+	 * 特に必要な処理はないが, 必ず呼び出すこととする.
 	 */
 }
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_syssvc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_syssvc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_syssvc.h	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,10 +45,9 @@
 
 /*
- *		ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-CITRUSç¨ï¼
+ *		システムサービスのターゲット依存部（GR-CITRUS用）
  *
- *  ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ï¼ãã®ãã¡
- *  ã¤ã«ã®å
-å®¹ã¯ï¼ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«ã«è¨è¿°ããï¼ãã®ãã¡ã¤ã«ã¯
- *  ç¡ããªãè¦è¾¼ã¿ï¼
+ *  システムサービスのターゲット依存部のインクルードファイル．このファ
+ *  イルの内容は，コンポーネント記述ファイルに記述され，このファイルは
+ *  無くなる見込み．
  */
 
@@ -73,10 +57,10 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã®å®ç¾©
+ *  プロセッサ依存の定義
  */
 #include "prc_syssvc.h"
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã«é¢ããè¨­å®
+ *  トレースログに関する設定
  */
 #ifdef TOPPERS_ENABLE_TRACE
@@ -86,6 +70,5 @@
 
 /*
- *  ãã¼ãä¾å­æ
-å ±ã®èª­ã¿è¾¼ã¿
+ *  ボード依存情報の読み込み
  */
 #include "gr_citrus.h"
@@ -93,5 +76,5 @@
 
 /*
- *  èµ·åã¡ãã»ã¼ã¸ã®ã¿ã¼ã²ããã·ã¹ãã å
+ *  起動メッセージのターゲットシステム名
  */
 #define	TARGET_NAME	"GR-CITRUS"
@@ -99,7 +82,7 @@
 #ifdef TOPPERS_OMIT_TECS
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºå
+ *  システムログの低レベル出力のための文字出力
  *
- *  ã¿ã¼ã²ããä¾å­ã®æ¹æ³ã§ï¼æå­cãè¡¨ç¤º/åºå/ä¿å­ããï¼
+ *  ターゲット依存の方法で，文字cを表示/出力/保存する．
  */
 extern void	target_fput_log( char c );
@@ -107,6 +90,6 @@
 
 /*
- *  èµ·åã¡ãã»ã¼ã¸ã«ã¿ã¼ã²ããä¾å­é¨ã®èä½æ¨©è¡¨ç¤ºã
- *  è¿½å ããããã®ãã¯ã­ï¼
+ *  起動メッセージにターゲット依存部の著作権表示を
+ *  追加するためのマクロ．
  */
 #ifdef PRC_COPYRIGHT
@@ -116,10 +99,10 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãæ°ã®å®ç¾©
+ *  シリアルポート数の定義
  */
 #define TNUM_PORT			UINT_C( 2 )
 
 /*
- *  ä½¿ç¨ããã·ãªã¢ã«ãã¼ãID
+ *  使用するシリアルポートID
  */
 #define SIO_PORTID			UINT_C( 1 )
@@ -130,5 +113,5 @@
 
 /*
- *  ä½¿ç¨ããã·ãªã¢ã«ãã¼ãã®PinName
+ *  使用するシリアルポートのPinName
  */
 #define STDIO_UART_TX P20
@@ -136,7 +119,7 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯é¢é£ã®å®æ°ã®å®ç¾©
+ *  システムログタスク関連の定数の定義
  *
- *  ããã©ã«ãå¤ã®éãï¼
+ *  デフォルト値の通り．
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_test.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_test.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_test.h	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,5 +45,5 @@
 
 /*
- *		ãã¹ããã­ã°ã©ã ã®ã¿ã¼ã²ããä¾å­å®ç¾©ï¼GR-CITRUSç¨ï¼
+ *		テストプログラムのターゲット依存定義（GR-CITRUS用）
  */
 
@@ -67,11 +52,10 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_test.h"
 
 /*
- *  ã¿ã¹ã¯ã§ä½¿ç¨ããã·ãªã¢ã«ãã¼ãID
+ *  タスクで使用するシリアルポートID
  */
 #define	TASK_PORTID		( 1 )
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.c	(revision 389)
@@ -14,47 +14,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -62,5 +47,5 @@
 
 /*
- *		ã¿ã¤ããã©ã¤ãï¼GR-CITRUSç¨ï¼
+ *		タイマドライバ（GR-CITRUS用）
  */
 
@@ -74,10 +59,10 @@
 
 /*
- * ä¸ä½ã¿ã¤ãã½ããã«ã¦ã³ã¿
+ * 上位タイマソフトカウンタ
  */
 static uint16_t elapse_upper_timer = 0;
 
 /*
- * ä¸ä¸ä½ã¿ã¤ãè¨­å®ã«ã¦ã³ã¿
+ * 上下位タイマ設定カウンタ
  */
 static uint16_t timer_upper_set_count = 0, timer_lower_set_count = 0;
@@ -85,18 +70,18 @@
 #ifdef TOPPERS_SUPPORT_OVRHDR
 
-/* ãªã¼ãã©ã³ä¸ä¸ä½ã¿ã¤ãè¨­å®ã«ã¦ã³ã¿ */
+/* オーバラン上下位タイマ設定カウンタ */
 static uint16_t timer_ovr_upper_set_count = 0, timer_ovr_lower_set_count = 0;
 
-/* ãªã¼ãã©ã³ã¿ã¤ãå®è¡ä¸­ãã©ã° */
+/* オーバランタイマ実行中フラグ */
 static bool_t timer_ovr_running_flg = false;
 
-/* ãªã¼ãã©ã³ã¿ã¤ãéå§æHRTã¿ã¤ãå¤ */
+/* オーバランタイマ開始時HRTタイマ値 */
 static HRTCNT timer_ovr_hrt_backup;
 
-/* ãªã¼ãã©ã³ã¿ã¤ãè¨­å®æé */
+/* オーバランタイマ設定時間 */
 static PRCTIM timer_ovr_ovrtim_backup;
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢
+ *  オーバランタイマ割込み要求のクリア
  */
 Inline void
@@ -109,5 +94,5 @@
 
 /*
- *  ã¿ã¤ãã®åæåå¦ç
+ *  タイマの初期化処理
  */
 void
@@ -115,13 +100,13 @@
 {
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã0 è§£é¤
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット0 解除
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA15_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
 
 	/* 
-	 * ã¿ã¤ãåæ­¢ 
+	 * タイマ停止 
 	 */
 	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -129,6 +114,6 @@
 	
 	/*
- 	 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ã­ãã¯è¨­å®
-	 * PCLK/8ãé¸æ
+ 	 * カウントアップに用いられるクロック設定
+	 * PCLK/8を選択
 	 */
 	sil_wrh_mem(CMT0_CMCR_ADDR, CMT_PCLK_DIV_8);
@@ -136,5 +121,5 @@
 
 	/* 
-	 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨­å®
+	 * コンペアマッチタイマカウンタ設定
 	 */
 	sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);
@@ -142,5 +127,5 @@
 
 	/* 
-	 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å®
+	 * コンペアマッチタイマ周期設定
 	 */
 	sil_wrh_mem(CMT0_CMCOR_ADDR, 0); /* lower */
@@ -149,6 +134,5 @@
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿ï¼28,29ï¼
+	 * コンペアマッチタイマ割り込み要求先設定レジスタ（28,29）
 	 */
 	sil_wrb_mem(ICU_ISELR028_ADDR, ICU_ISEL_CPU);
@@ -156,5 +140,5 @@
 
 	/*
-	 *  ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ動作開始前の割込み要求をクリア
 	 */
 	clear_int(INTNO_TIMER0);
@@ -162,5 +146,5 @@
 
 	/* 
-	 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ãè¨±å¯
+	 * コンペアマッチタイマ割り込みを許可
 	 */
 //	sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -170,5 +154,5 @@
 
 	/* 
-	 * ã¿ã¤ãåä½éå§
+	 * タイマ動作開始
 	 */
 //	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -179,5 +163,5 @@
 
 /*
- *  ã¿ã¤ãã®åæ­¢å¦ç
+ *  タイマの停止処理
  */
 void
@@ -185,5 +169,5 @@
 {
 	/* 
-	 * ã¿ã¤ãåæ­¢  lower, upper
+	 * タイマ停止  lower, upper
 	 */
 	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -191,5 +175,5 @@
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢ãlower,upper
+	 * タイマ割り込み禁止　lower,upper
 	 */
 	sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -199,5 +183,5 @@
 
 	/*
-	 *  ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ割込み要求をクリア
 	 */
 	clear_int(INTNO_TIMER0);
@@ -205,19 +189,19 @@
 
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã0 åæ­¢
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット0 停止
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA15_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-}
-
-/*
- *  ä¸ä½ã¿ã¤ãå²è¾¼ã¿ãã³ãã©(CMT0)
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
+}
+
+/*
+ *  下位タイマ割込みハンドラ(CMT0)
  */
 void target_lower_timer_handler(void)
 {
 	/*
-	 * ã¿ã¤ãåæ­¢
+	 * タイマ停止
 	 */
 	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -225,5 +209,5 @@
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢
+	 * タイマ割り込み禁止
 	 */
 	sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -231,15 +215,15 @@
 
 	/*
-	 * å²ãè¾¼ã¿è¦å ã¯ãªã¢
+	 * 割り込み要因クリア
 	 */
 	clear_int(INTNO_TIMER0);
 
 	/*
-	 * ã«ã¦ã³ãè¨­å®ã¯ãªã¢
+	 * カウント設定クリア
 	 */
 	timer_lower_set_count = 0;
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿å¦ç
+	 * タイマ割り込み処理
 	 */
 	signal_time();
@@ -247,15 +231,15 @@
 
 /*
- *  ä¸ä½ã¿ã¤ãå²è¾¼ã¿ãã³ãã©(CMT1)
+ *  上位タイマ割込みハンドラ(CMT1)
  */
 void target_upper_timer_handler(void)
 {
 	/*
-	 * ä¸ä½ã¿ã¤ãã½ããã«ã¦ã³ã¿æ´æ°
+	 * 上位タイマソフトカウンタ更新
 	 */
 	elapse_upper_timer++;
 
 	/*
-	 * ä¸ä½ã¿ã¤ãè¨­å®å¤æ´æ°
+	 * 上位タイマ設定値更新
 	 */
 	if(timer_upper_set_count > 0) {
@@ -264,10 +248,10 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ããããå¦ç
+	 * 上位タイママッチ処理
 	 */
 	if(timer_upper_set_count == 0){
 		if(timer_lower_set_count > 0){
 			/*
-			 * ä¸ä½ã¿ã¤ãè¨­å®ãéå§
+			 * 下位タイマ設定、開始
 			 */
 			sil_wrh_mem(CMT0_CMCOR_ADDR, timer_lower_set_count);
@@ -280,5 +264,5 @@
 		else{
 			/*
-			 * ä¸ä½ã¿ã¤ãå²ãè¾¼ã¿å¼·å¶èµ·å
+			 * 下位タイマ割り込み強制起動
 			 */
 			target_hrt_raise_event();
@@ -289,5 +273,5 @@
 	if(timer_ovr_running_flg == true) {
 		/*
-		 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãè¨­å®å¤æ´æ°
+		 * オーバラン上位タイマ設定値更新
 		 */
 		if(timer_ovr_upper_set_count > 0) {
@@ -296,10 +280,10 @@
 
 		/*
-		 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ããããå¦ç
+		 * オーバラン上位タイママッチ処理
 		 */
 		if(timer_ovr_upper_set_count == 0) {
 			if(timer_ovr_lower_set_count > 0){
 				/*
-				 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãè¨­å®ãéå§
+				 * オーバラン下位タイマ設定、開始
 				 */
 				sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);
@@ -313,5 +297,5 @@
 			else {
 				/*
-				 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå²ãè¾¼ã¿å¼·å¶èµ·å
+				 * オーバラン下位タイマ割り込み強制起動
 				 */
 				target_ovrtimer_raise_event();
@@ -323,5 +307,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã¸ã®å²è¾¼ã¿ã¿ã¤ãã³ã°ã®è¨­å®
+ *  高分解能タイマへの割込みタイミングの設定
  */
 void
@@ -332,5 +316,5 @@
 
 	/*
-	 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ
+	 * 時間 -> タイマカウンタ 変換
 	 */
 	total_timer_count = hrtcnt * USEC_CONVERT_VALUE;
@@ -339,5 +323,5 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´
+	 * 上位タイマカウンタ現在値で調整
 	 */
 	current_timer_count_work = timer_lower_set_count + sil_reh_mem(CMT1_CMCNT_ADDR);
@@ -348,24 +332,24 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ãè¨­å®
+	 * 下位タイマ設定
 	 */
 	if(timer_upper_set_count == 0 && timer_lower_set_count > 0) {
 		/*
-		 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨­å®
+		 * コンペアマッチタイマカウンタ設定
 		 */
 		sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);
 
 		/*
-		 * å²ãè¾¼ã¿è¦å ã¯ãªã¢
+		 * 割り込み要因クリア
 		 */
 		clear_int(INTNO_TIMER0);
 
 		/*
-		 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å®
+		 * コンペアマッチタイマ周期設定
 		 */
 		sil_wrh_mem(CMT0_CMCOR_ADDR, timer_lower_set_count);
 
 		/*
-		 *  ã¿ã¤ãå²ãè¾¼ã¿è¨±å¯
+		 *  タイマ割り込み許可
 		 */
 		sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -373,5 +357,5 @@
 
 		/*
-		 * ã¿ã¤ãéå§
+		 * タイマ開始
 		 */
 		sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -381,5 +365,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±
+ *  高分解能タイマ割込みの要求
  */
 void
@@ -387,19 +371,18 @@
 {
 	/*
-	 * ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å
-	 * æ³¨æï¼åæ­¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã
-	 */
-	sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);	/* ã«ã¦ã³ã¿åæå	*/
-	clear_int(INTNO_TIMER0);			/* è¦æ±ã¯ãªã¢		*/
-	sil_wrh_mem(CMT0_CMCOR_ADDR, 0U);	/* ãããå¨æè¨­å®	*/
-	sil_wrh_mem(CMT0_CMCR_ADDR,			/* å²ãè¾¼ã¿è¨±å¯	*/
+	 * 下位タイマ強制割り込み起動
+	 * 注意：停止するまで割り込みが繰り返し発生する
+	 */
+	sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);	/* カウンタ初期化	*/
+	clear_int(INTNO_TIMER0);			/* 要求クリア		*/
+	sil_wrh_mem(CMT0_CMCOR_ADDR, 0U);	/* マッチ周期設定	*/
+	sil_wrh_mem(CMT0_CMCR_ADDR,			/* 割り込み許可	*/
 			sil_reh_mem(CMT0_CMCR_ADDR) | CMT0_CMCR_CMIE_BIT);
-	sil_wrh_mem(CMT_CMSTR0_ADDR,		/* ã¿ã¤ãèµ·å		*/
+	sil_wrh_mem(CMT_CMSTR0_ADDR,		/* タイマ起動		*/
 			sil_reh_mem(CMT_CMSTR0_ADDR) | CMT_CMSTR0_STR0_BIT);
 }
 
 /*
- * é«åè§£è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èª­åºããå
-é¨å¦ç
+ * 高分解能タイマの現在のカウント値の読出し　内部処理
  */
 HRTCNT target_hrt_get_current_convert(void)
@@ -412,5 +395,5 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ã ã³ã³ãã¢ããããã§ãã¯
+	 * 上位タイマ コンペアマッチチェック
 	 */
 	if (probe_int(INTNO_TIMER1)) {
@@ -421,5 +404,5 @@
 	time = (((HRTCNT)local_eut * CMCOR_PERIOD) + (HRTCNT)local_cnt) / USEC_CONVERT_VALUE;
 #ifdef _MSC_VER
-	// ã·ãã¥ã¬ã¼ã·ã§ã³ã§ã¯ã¿ã¤ãã¼ãæ»ããªãããèª¿æ´
+	// シミュレーションではタイマーが戻らないよう調整
 	if (time < current_hrtcnt)
 		time = current_hrtcnt + ((HRTCNT)local_cnt / USEC_CONVERT_VALUE);
@@ -429,10 +412,10 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ã
+ *  オーバランタイマドライバ
  */
 #ifdef TOPPERS_SUPPORT_OVRHDR
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦ç
+ *  オーバランタイマの初期化処理
  */
 void
@@ -440,13 +423,13 @@
 {
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã1 è§£é¤
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット1 解除
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA14_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/*
-	 * ã¿ã¤ãåæ­¢ CMT2
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
+
+	/*
+	 * タイマ停止 CMT2
 	 */
 	sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -454,27 +437,26 @@
 
 	/*
- 	 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ã­ãã¯è¨­å® CMT2
-	 * PCLK/8ãé¸æ
+ 	 * カウントアップに用いられるクロック設定 CMT2
+	 * PCLK/8を選択
 	 */
 	sil_wrh_mem(CMT2_CMCR_ADDR, CMT_PCLK_DIV_8);
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨­å® CMT2
+	 * コンペアマッチタイマカウンタ設定 CMT2
 	 */
 	sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å® CMT2
+	 * コンペアマッチタイマ周期設定 CMT2
 	 */
 	sil_wrh_mem(CMT2_CMCOR_ADDR, 0U);
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿ï¼30ï¼
+	 * コンペアマッチタイマ割り込み要求先設定レジスタ（30）
 	 */
 	sil_wrb_mem(ICU_ISELR030_ADDR, ICU_ISEL_CPU);
 
 	/*
-	 *  ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ動作開始前の割込み要求をクリア
 	 */
 	target_ovrtimer_int_clear();
@@ -488,5 +470,5 @@
 
 	/*
-	 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ
+	 * 時間 -> タイマカウンタ 変換
 	 */
 	total_timer_count = ovrtim * USEC_CONVERT_VALUE;
@@ -495,5 +477,5 @@
 
 	/*
-	 * é«åè§£è½ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´
+	 * 高分解能上位タイマカウンタ現在値で調整
 	 */
 	timer_ovr_ovrtim_backup = ovrtim;
@@ -506,10 +488,10 @@
 
 	/*
-	 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸­ãã©ã°
+	 * オーバランタイマ動作中フラグ
 	 */
 	timer_ovr_running_flg = true;
 
 	/*
-	 * ä¸ä½ã¿ã¤ãè¨­å®
+	 * 下位タイマ設定
 	 */
 	if(timer_ovr_upper_set_count == 0) {
@@ -519,20 +501,20 @@
 		else {
 			/*
-			 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢ CMT2
+			 * コンペアマッチタイマカウンタクリア CMT2
 			 */
 			sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);
 
 			/*
-			 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å® CMT2
+			 * コンペアマッチタイマ周期設定 CMT2
 			 */
 			sil_wrh_mem(CMT2_CMCOR_ADDR, timer_ovr_lower_set_count);
 
 			/*
-			 *  ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢
+			 *  タイマ動作開始前の割込み要求をクリア
 			 */
 			target_ovrtimer_int_clear();
 
 			/*
-			 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ãè¨±å¯ CMT2
+			 * コンペアマッチタイマ割り込みを許可 CMT2
 			 */
 			sil_wrh_mem(CMT2_CMCR_ADDR,
@@ -540,5 +522,5 @@
 
 			/*
-			 * ã¿ã¤ãåä½éå§ CMT2
+			 * タイマ動作開始 CMT2
 			 */
 			sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -549,5 +531,5 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢å¦ç
+ *  オーバランタイマの停止処理
  */
 void
@@ -555,5 +537,5 @@
 {
 	/*
-	 * ã¿ã¤ãåæ­¢
+	 * タイマ停止
 	 */
 	sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -561,5 +543,5 @@
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢
+	 * タイマ割り込み禁止
 	 */
 	sil_wrh_mem(CMT2_CMCR_ADDR,
@@ -567,24 +549,24 @@
 
 	/*
-	 *  ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ割込み要求をクリア
 	 */
 	target_ovrtimer_int_clear();
 
 	/*
-	 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸­ãã©ã°
+	 * オーバランタイマ動作中フラグ
 	 */
 	timer_ovr_running_flg = false;
 
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã0 åæ­¢
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット0 停止
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA14_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-}
-
-/*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
+}
+
+/*
+ *  オーバランタイマの停止
  */
 PRCTIM
@@ -594,5 +576,5 @@
 
 	/*
-	 * ã¿ã¤ãåæ­¢
+	 * タイマ停止
 	 */
 	sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -600,5 +582,5 @@
 
 	/*
-	 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸­ãã©ã°
+	 * オーバランタイマ動作中フラグ
 	 */
 	timer_ovr_running_flg = false;
@@ -606,5 +588,5 @@
 	if(int_num == INTNO_TIMER2) {
 		/*
-		 *  ãªã¼ãã©ã³å²è¾¼ã¿ã®å ´å
+		 *  オーバラン割込みの場合
 		 */
 		target_ovrtimer_int_clear();
@@ -622,5 +604,5 @@
 		}
 
-		if(cnt > timer_ovr_ovrtim_backup) { /* è¨­å®æéãéãã */
+		if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */
 			cnt = 0;
 		}
@@ -630,5 +612,5 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®ç¾å¨å¤ã®èª­åºã
+ *  オーバランタイマの現在値の読出し
  */
 PRCTIM
@@ -639,5 +621,5 @@
 	if (probe_int(INTNO_TIMER2)) {
 		/*
-		 *  å²è¾¼ã¿è¦æ±ãçºçãã¦ããå ´å
+		 *  割込み要求が発生している場合
 		 */
 		return(0U);
@@ -650,5 +632,5 @@
 		}
 
-		if(cnt > timer_ovr_ovrtim_backup) { /* è¨­å®æéãéãã */
+		if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */
 			cnt = 0;
 		}
@@ -658,5 +640,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±
+ *  高分解能タイマ割込みの要求
  */
 void
@@ -664,22 +646,21 @@
 {
 	/*
-	 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å
-	 * æ³¨æï¼åæ­¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã
-	 */
-	sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);	/* ã«ã¦ã³ã¿åæå	*/
-	clear_int(INTNO_TIMER2);			/* è¦æ±ã¯ãªã¢		*/
-	sil_wrh_mem(CMT2_CMCOR_ADDR, 0U);	/* ãããå¨æè¨­å®	*/
-	sil_wrh_mem(CMT2_CMCR_ADDR,			/* å²ãè¾¼ã¿è¨±å¯	*/
+	 * オーバラン下位タイマ強制割り込み起動
+	 * 注意：停止するまで割り込みが繰り返し発生する
+	 */
+	sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);	/* カウンタ初期化	*/
+	clear_int(INTNO_TIMER2);			/* 要求クリア		*/
+	sil_wrh_mem(CMT2_CMCOR_ADDR, 0U);	/* マッチ周期設定	*/
+	sil_wrh_mem(CMT2_CMCR_ADDR,			/* 割り込み許可	*/
 			sil_reh_mem(CMT2_CMCR_ADDR) | CMT2_CMCR_CMIE_BIT);
-	sil_wrh_mem(CMT_CMSTR1_ADDR,		/* ã¿ã¤ãèµ·å		*/
+	sil_wrh_mem(CMT_CMSTR1_ADDR,		/* タイマ起動		*/
 			sil_reh_mem(CMT_CMSTR1_ADDR) | CMT_CMSTR1_STR2_BIT);
 }
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©
+ *  オーバランタイマ割込みハンドラ
  *
- *  ãã®ã«ã¼ãã³ã«æ¥ãã¾ã§ã«ï¼target_ovrtimer_stopãå¼ã°ãã¦ããããï¼
- *  OSã¿ã¤ããåæ­¢ããå¿
-è¦ã¯ãªãï¼
+ *  このルーチンに来るまでに，target_ovrtimer_stopが呼ばれているため，
+ *  OSタイマを停止する必要はない．
  */
 void
@@ -687,5 +668,5 @@
 {
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢
+	 * タイマ割り込み禁止
 	 */
 	sil_wrh_mem(CMT2_CMCR_ADDR,
@@ -693,10 +674,10 @@
 
 	/*
-	 * ä¸ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢
+	 * 上下位タイマカウンタクリア
 	 */
 	timer_ovr_upper_set_count = 0;
 	timer_ovr_lower_set_count = 0;
 
-	call_ovrhdr();	/* ãªã¼ãã©ã³ãã³ãã©ã®èµ·åå¦ç */
+	call_ovrhdr();	/* オーバランハンドラの起動処理 */
 }
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *  ã¿ã¤ããã©ã¤ãï¼GR-CITRUSç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  タイマドライバ（GR-CITRUS用）のコンフィギュレーションファイル
  */
 
@@ -13,5 +13,5 @@
 
 /*
- *  ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ããã©ã¤ãï¼RX630ç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  オーバランハンドラ用タイマドライバ（RX630用）のコンフィギュレーションファイル
  */
 #ifdef TOPPERS_SUPPORT_OVRHDR
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.h	(revision 389)
@@ -14,47 +14,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -62,5 +47,5 @@
 
 /*
- *		ã¿ã¤ããã©ã¤ãï¼GR-CITRUSç¨ï¼
+ *		タイマドライバ（GR-CITRUS用）
  */
  
@@ -73,58 +58,53 @@
 
 /*
- *  ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ç»é²ã®ããã®å®æ°
- */
-#define INHNO_TIMER0	INT_CMT0_CMI				/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_TIMER0	INT_CMT0_CMI				/* å²è¾¼ã¿çªå· */
-#define INTPRI_TIMER0	-5							/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_TIMER0	(TA_ENAINT | TA_EDGE)		/* å²è¾¼ã¿å±æ§ */
-
-#define INHNO_TIMER1	INT_CMT1_CMI				/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_TIMER1	INT_CMT1_CMI				/* å²è¾¼ã¿çªå· */
-#define INTPRI_TIMER1	-5							/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_TIMER1	(TA_ENAINT | TA_EDGE)		/* å²è¾¼ã¿å±æ§ */
-
-/*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ç»é²ã®ããã®å®æ°
- */
-#define INHNO_TIMER2	INT_CMT2_CMI				/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_TIMER2	INT_CMT2_CMI				/* å²è¾¼ã¿çªå· */
-#define INTPRI_TIMER2	-5							/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_TIMER2	(TA_ENAINT | TA_EDGE)		/* å²è¾¼ã¿å±æ§ */
-#define INTNO_OVR_BASE_TIMER	INTNO_TIMER1		/* åºæ¬ã¿ã¤ãã«ä½¿ãã¿ã¤ãå²è¾¼ã¿çªå· */
-#define INTNO_DUMMY_TIMER		255					/* ããã¼ã¿ã¤ãå²è¾¼ã¿çªå· */
+ *  タイマ割込みハンドラ登録のための定数
+ */
+#define INHNO_TIMER0	INT_CMT0_CMI				/* 割込みハンドラ番号 */
+#define INTNO_TIMER0	INT_CMT0_CMI				/* 割込み番号 */
+#define INTPRI_TIMER0	-5							/* 割込み優先度 */
+#define INTATR_TIMER0	(TA_ENAINT | TA_EDGE)		/* 割込み属性 */
+
+#define INHNO_TIMER1	INT_CMT1_CMI				/* 割込みハンドラ番号 */
+#define INTNO_TIMER1	INT_CMT1_CMI				/* 割込み番号 */
+#define INTPRI_TIMER1	-5							/* 割込み優先度 */
+#define INTATR_TIMER1	(TA_ENAINT | TA_EDGE)		/* 割込み属性 */
+
+/*
+ *  オーバランタイマ割込みハンドラ登録のための定数
+ */
+#define INHNO_TIMER2	INT_CMT2_CMI				/* 割込みハンドラ番号 */
+#define INTNO_TIMER2	INT_CMT2_CMI				/* 割込み番号 */
+#define INTPRI_TIMER2	-5							/* 割込み優先度 */
+#define INTATR_TIMER2	(TA_ENAINT | TA_EDGE)		/* 割込み属性 */
+#define INTNO_OVR_BASE_TIMER	INTNO_TIMER1		/* 基本タイマに使うタイマ割込み番号 */
+#define INTNO_DUMMY_TIMER		255					/* ダミータイマ割込み番号 */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  ã¿ã¤ãå¤ã®å
-é¨è¡¨ç¾ã®å
+ *  タイマ値の内部表現の型
  */
 typedef uint16_t	CLOCK;
 
 /*
- *  ã¿ã¤ãå¤ã®å
-é¨è¡¨ç¾ã¨ããªç§åä½ã¨ã®å¤æ
- *
- *  1msã®ã¿ã¤ãã¼å²ãè¾¼ã¿ãä½¿ç¨ããã®ã§ãã®ã¯ã­ãã¯ãå®ç¾©ããï¼
- */
-#define TIMER_CLOCK				(FREQ_PCLK / 8U)		/* PCLK/æä½åå¨æ¯8 = 6MHz */
+ *  タイマ値の内部表現とミリ秒単位との変換
+ *
+ *  1msのタイマー割り込みを使用するのでそのクロックを定義する．
+ */
+#define TIMER_CLOCK				(FREQ_PCLK / 8U)		/* PCLK/最低分周比8 = 6MHz */
 #define TO_CLOCK(nume, deno)	((CLOCK)(TIMER_CLOCK * (nume) / (deno)))
 #define	TO_USEC(clock)			((SYSUTM)((clock) * 1000U / TIMER_CLOCK))
 
 /*
- *  ã³ã³ãã¢ãããã¿ã¤ãã³ã³ã¹ã¿ã³ãã¬ã¸ã¹ã¿ï¼CMCORï¼
- *
- *  ã³ã³ãã¢ãããå¨æ
- *  å¨è¾ºã¢ã¸ã¥ã¼ã«ã¯ã­ãã¯ï¼PCLKï¼48MHzã8åå¨ããã®ã§ï¼
- *  6ã«ã¦ã³ã = 1us : max 10922.667us
+ *  コンペアマッチタイマコンスタントレジスタ（CMCOR）
+ *
+ *  コンペアマッチ周期
+ *  周辺モジュールクロック（PCLK）48MHzを8分周するので，
+ *  6カウント = 1us : max 10922.667us
  */
 #define CMCOR_PERIOD	(0x10000U)
 
 /*
- * ã«ã¦ã³ã < - > ãã¤ã¯ã­ç§ å¤æå¤
+ * カウント < - > マイクロ秒 変換値
  * 48MHz / 8 / 1000
  */
@@ -132,5 +112,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ã¿ã¤ãå¨æ
+ *  高分解能タイマのタイマ周期
  *
  *  2^32 / 6
@@ -139,26 +119,22 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ã®é²ã¿å¹
-
+ *  高分解能タイマのカウント値の進み幅
  */
 #define TSTEP_HRTCNT	1U
 
 /*
- *  æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãåãåºãéã®å¦çæéã®è¦ç©ãå¤ï¼åä½ã¯å
-é¨è¡¨ç¾ï¼
- */
-#define	GET_TOLERANCE	(100U)	/* å¦çé
-ãã®è¦ç©ãå¤ï¼åä½ã¯å
-é¨è¡¨ç¾ï¼*/
+ *  性能評価用システム時刻を取り出す際の処理時間の見積り値（単位は内部表現）
+ */
+#define	GET_TOLERANCE	(100U)	/* 処理遅れの見積り値（単位は内部表現）*/
 #define	BEFORE_IREQ(clock) \
 		((clock) >= (TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE))
 
 /*
- *  ã³ã³ãã¢ãããã¿ã¤ãã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿ã®è¨­å®å¤
- */
-/*
- *  ã¯ã­ãã¯é¸æããã
- *
- *  bit7ã¯äºç´é åã§ãã, æ¸è¾¼ã¿ã¯1åºå®
+ *  コンペアマッチタイマコントロールレジスタの設定値
+ */
+/*
+ *  クロック選択ビット
+ *
+ *  bit7は予約領域であり, 書込みは1固定
  */
 #define CMT_PCLK_DIV_8			(0x0080U)
@@ -168,25 +144,24 @@
 
 /*
- * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿iï¼ISELRiï¼ï¼i= å²ãè¾¼ã¿ãã¯ã¿çªå·ï¼
+ * コンペアマッチタイマ割り込み要求先設定レジスタi（ISELRi）（i= 割り込みベクタ番号）
  */
 #define ICU_ISEL_CPU			(0x00U)
 
 /*
- *  ã¿ã¤ãã®èµ·åå¦ç
- *
- *  ã¿ã¤ããåæåãï¼å¨æçãªã¿ã¤ãå²è¾¼ã¿è¦æ±ãçºçãããï¼
+ *  タイマの起動処理
+ *
+ *  タイマを初期化し，周期的なタイマ割込み要求を発生させる．
  */
 extern void	target_timer_initialize(intptr_t exinf);
 
 /*
- *  ã¿ã¤ãã®åæ­¢å¦ç
- *
- *  ã¿ã¤ãã®åä½ãåæ­¢ãããï¼
+ *  タイマの停止処理
+ *
+ *  タイマの動作を停止させる．
  */
 extern void	target_timer_terminate(intptr_t exinf);
 
 /*
- *  ã¿ã¤ãã¬ã¸ã¹ã¿å¤ã®èª­ã¿åºã
+ *  タイマレジスタ値の読み出し
  */
 Inline uint16_t rx630_cmt_getcount(void)
@@ -196,5 +171,5 @@
 
 /*
- *  ã¿ã¤ãã¬ã¸ã¹ã¿å¤ã®æ¸ãè¾¼ã¿
+ *  タイマレジスタ値の書き込み
  */
 Inline void rx630_cmt_setcount(uint16_t count)
@@ -204,15 +179,15 @@
 
 /*
- *  ã¿ã¤ãã®ç¾å¨å¤ã®èª­åºã
+ *  タイマの現在値の読出し
  */
 Inline CLOCK
 target_timer_get_current(void)
 {
-	/* ã¢ããã«ã¦ã³ãã®ããã¿ã¤ãã¬ã¸ã¹ã¿å¤ããã®ã¾ã¾è¿ã	*/
+	/* アップカウントのためタイマレジスタ値をそのまま返す	*/
 	return (rx630_cmt_getcount());
 }
 
 /*
- *  ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®ãã§ãã¯
+ *  タイマ割込み要求のチェック
  */
 Inline bool_t
@@ -223,5 +198,5 @@
 
 /*
- *  ã¿ã¤ãå²è¾¼ã¿ãã³ãã©
+ *  タイマ割込みハンドラ
  */
 extern void	target_lower_timer_handler(void);
@@ -229,29 +204,28 @@
 
 /*
- *  å²è¾¼ã¿ã¿ã¤ãã³ã°ã«æå®ããæå¤§å¤
+ *  割込みタイミングに指定する最大値
  */
 #define HRTCNT_BOUND	100000002U
 
 /*
- *  é«åè§£è½ã¿ã¤ãã¸ã®å²è¾¼ã¿ã¿ã¤ãã³ã°ã®è¨­å®
- *
- *  é«åè§£è½ã¿ã¤ããï¼hrtcntã§æå®ããå¤ã«ã¦ã³ãã¢ãããããå²è¾¼ã¿ãçº
- *  çãããããã«è¨­å®ããï¼
+ *  高分解能タイマへの割込みタイミングの設定
+ *
+ *  高分解能タイマを，hrtcntで指定した値カウントアップしたら割込みを発
+ *  生させるように設定する．
  */
 extern void target_hrt_set_event(HRTCNT hrtcnt);
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±
+ *  高分解能タイマ割込みの要求
  */
 extern  void target_hrt_raise_event(void);
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èª­åºããå
-é¨å¦ç
+ *  高分解能タイマの現在のカウント値の読出し　内部処理
  */
 extern HRTCNT target_hrt_get_current_convert(void);
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èª­åºã
+ *  高分解能タイマの現在のカウント値の読出し
  */
 Inline HRTCNT
@@ -264,35 +238,35 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦ç
+ *  オーバランタイマの初期化処理
  */
 extern void target_ovrtimer_initialize(intptr_t exinf);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢å¦ç
+ *  オーバランタイマの停止処理
  */
 extern void target_ovrtimer_terminate(intptr_t exinf);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§
+ *  オーバランタイマの動作開始
  */
 extern void target_ovrtimer_start(PRCTIM ovrtim);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢
+ *  オーバランタイマの停止
  */
 extern PRCTIM target_ovrtimer_stop(uint_t int_num);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®ç¾å¨å¤ã®èª­åºã
+ *  オーバランタイマの現在値の読出し
  */
 extern PRCTIM target_ovrtimer_get_current(void);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®å²è¾¼ã¿ã®è¦æ±
+ *  オーバランタイマの割込みの要求
  */
 extern  void target_ovrtimer_raise_event(void);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©
+ *  オーバランタイマ割込みハンドラ
  */
 extern void	target_ovrtimer_handler(void);
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_config.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_config.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_config.c	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,5 +38,5 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX63Nç¨ï¼
+ *  ターゲット依存モジュール（RX63N用）
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  rx62n_bus_init -- ã¿ã¼ã²ããä¾å­é¨ã®ãã¹ã®åæå
+ *  rx62n_bus_init -- ターゲット依存部のバスの初期化
  */
 
@@ -74,5 +59,5 @@
 
 /*
- *  rx62n_inter_init -- ã¿ã¼ã²ããä¾å­é¨ã®å²è¾¼ã¿ã®åæå
+ *  rx62n_inter_init -- ターゲット依存部の割込みの初期化
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_config.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_config.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_config.h	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -56,14 +41,14 @@
 
 /*
- *  TCP/IP ã«é¢ããå®ç¾©
- */
-
-/* TCP ã«é¢ããå®ç¾© */
-
-/*
- *  MAX_TCP_SND_SEG: éä¿¡ã»ã°ã¡ã³ããµã¤ãºã®æå¤§å¤
+ *  TCP/IP に関する定義
+ */
+
+/* TCP に関する定義 */
+
+/*
+ *  MAX_TCP_SND_SEG: 送信セグメントサイズの最大値
  *
- *    ç¸æãã MSS ãªãã·ã§ã³ã§ã»ã°ã¡ã³ããµã¤ãºãæå®ããã¦ãã
- *    ãã®å¤ã§ãã»ã°ã¡ã³ããµã¤ãºãå¶éã§ããã
+ *    相手から MSS オプションでセグメントサイズを指定されても、
+ *    この値で、セグメントサイズを制限できる。
  */
 
@@ -73,5 +58,5 @@
 
 /*
- *  DEF_TCP_RCV_SEG: åä¿¡ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤
+ *  DEF_TCP_RCV_SEG: 受信セグメントサイズの規定値
  */
 
@@ -81,40 +66,37 @@
 
 /* 
- *  ã»ã°ã¡ã³ãã®é çªãå
-¥ãæ¿ããã¨ãã«æ°ãã«ãããã¯ã¼ã¯ãããã¡ãå²å½ã¦ã¦ã
- *  ãã¼ã¿ãã³ãã¼ãããµã¤ãºã®ãããå¤
+ *  セグメントの順番を入れ替えるときに新たにネットワークバッファを割当てて、
+ *  データをコピーするサイズのしきい値
  */
 #define MAX_TCP_REALLOC_SIZE	1024	
 
-#define TCP_CFG_OPT_MSS		/* ã³ãã¯ã·ã§ã³éè¨­æã«ãã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ãã¤ãã¦éä¿¡ããã*/
-#define TCP_CFG_DELAY_ACK	/* ACK ãé
-ãããã¨ãã¯ã³ã¡ã³ããå¤ãã			*/
-#define TCP_CFG_ALWAYS_KEEP	/* å¸¸ã«ã­ã¼ãã¢ã©ã¤ãããæã¯ã³ã¡ã³ããå¤ãã		*/
-
-/* UDP ã«é¢ããå®ç¾© */
-
-#define UDP_CFG_IN_CHECKSUM	/* UDP ã®å
-¥åãã§ãã¯ãµã ãè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-#define UDP_CFG_OUT_CHECKSUM	/* UDP ã®åºåãã§ãã¯ãµã ãè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-
-/* ICMPv4/v6 ã«é¢ããå®ç¾© */
-
-#define ICMP_REPLY_ERROR		/* ICMP ã¨ã©ã¼ã¡ãã»ã¼ã¸ãéä¿¡ããå ´åã¯ã³ã¡ã³ããå¤ãã*/
-
-/* IPv4 ã«é¢ããå®ç¾© */
-
-//#define IP4_CFG_FRAGMENT		/* ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-#define NUM_IP4_FRAG_QUEUE	2	/* ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãµã¤ãº			*/
-#define IP4_CFG_FRAG_REASSM_SIZE	4096	/* IPv4 åæ§æãããã¡ãµã¤ãº			*/
-
-/* IPv6 ã«é¢ããå®ç¾© */
-
-#define NUM_IP6_DAD_COUNT	1	/* éè¤ã¢ãã¬ã¹æ¤åºã§éä¿¡ããè¿é£è¦è«ã®åæ°ã		*/
-					/*  0 ãæå®ããã¨ãéè¤ã¢ãã¬ã¹æ¤åºãè¡ããªãã	*/
-#define NUM_ND6_CACHE_ENTRY	10	/* è¿é£ã­ã£ãã·ã¥ã®ã¨ã³ããªæ°			*/
-
-/*
- *  IPv6 ç¨ãã¹ãã­ã£ãã·ã¥ã®ã¨ã³ããªæ°ã
- *  0 ãæå®ããã¨IPv6 ç¨ãã¹ãã­ã£ãã·ã¥ãçµè¾¼ã¾ãªãã
+#define TCP_CFG_OPT_MSS		/* コネクション開設時に、セグメントサイズオプションをつけて送信する。*/
+#define TCP_CFG_DELAY_ACK	/* ACK を遅らせるときはコメントを外す。			*/
+#define TCP_CFG_ALWAYS_KEEP	/* 常にキープアライブする時はコメントを外す。		*/
+
+/* UDP に関する定義 */
+
+#define UDP_CFG_IN_CHECKSUM	/* UDP の入力チェックサムを行う場合はコメントを外す。	*/
+#define UDP_CFG_OUT_CHECKSUM	/* UDP の出力チェックサムを行う場合はコメントを外す。	*/
+
+/* ICMPv4/v6 に関する定義 */
+
+#define ICMP_REPLY_ERROR		/* ICMP エラーメッセージを送信する場合はコメントを外す。*/
+
+/* IPv4 に関する定義 */
+
+//#define IP4_CFG_FRAGMENT		/* データグラムの分割・再構成行う場合はコメントを外す。	*/
+#define NUM_IP4_FRAG_QUEUE	2	/* データグラム再構成キューサイズ			*/
+#define IP4_CFG_FRAG_REASSM_SIZE	4096	/* IPv4 再構成バッファサイズ			*/
+
+/* IPv6 に関する定義 */
+
+#define NUM_IP6_DAD_COUNT	1	/* 重複アドレス検出で送信する近隣要請の回数、		*/
+					/*  0 を指定すると、重複アドレス検出を行わない。	*/
+#define NUM_ND6_CACHE_ENTRY	10	/* 近隣キャッシュのエントリ数			*/
+
+/*
+ *  IPv6 用ホストキャッシュのエントリ数。
+ *  0 を指定するとIPv6 用ホストキャッシュを組込まない。
  */
 #define NUM_IN6_HOSTCACHE_ENTRY	4
@@ -122,114 +104,111 @@
 #ifdef SUPPORT_ETHER
 
-#define IP6_CFG_AUTO_LINKLOCAL		/* ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã®èªåè¨­å®ãè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã*/
-
-/*
- *  ãã£ãã©ã«ãã«ã¼ã¿ãªã¹ãã«é¢ããå®ç¾©
- */
-
-/*
- *  ãã£ãã©ã«ãã«ã¼ã¿ãªã¹ãã®ã¨ã³ããªæ°ã
- *  æå¤§å¤ã¯ 16ã0 ãæå®ããã¨ã«ã¼ã¿éç¥ãåä¿¡ããªãã
+#define IP6_CFG_AUTO_LINKLOCAL		/* リンクローカルアドレスの自動設定を行う場合はコメントを外す。*/
+
+/*
+ *  ディフォルトルータリストに関する定義
+ */
+
+/*
+ *  ディフォルトルータリストのエントリ数。
+ *  最大値は 16、0 を指定するとルータ通知を受信しない。
  */
 #define NUM_ND6_DEF_RTR_ENTRY		4
 
 /*
- *  ãã¬ãã£ãã¯ã¹ãªã¹ãã«é¢ããå®ç¾©ã
- *  æå¤§å¤ã¯ 16ã
- */
-#define NUM_ND6_PREFIX_ENTRY		4	/*  ãã¬ãã£ãã¯ã¹ãªã¹ãã®ã¨ã³ããªæ°			*/
-
-/*
- *  èµ·åæã®ã«ã¼ã¿è¦è«åºååæ°ã
- *  0 ãæå®ããã¨ã«ã¼ã¿è¦è«ãåºåããªãã
+ *  プレフィックスリストに関する定義。
+ *  最大値は 16。
+ */
+#define NUM_ND6_PREFIX_ENTRY		4	/*  プレフィックスリストのエントリ数			*/
+
+/*
+ *  起動時のルータ要請出力回数。
+ *  0 を指定するとルータ要請を出力しない。
  */
 #define NUM_ND6_RTR_SOL_RETRY	3	
 
-#define IP6_CFG_FRAGMENT		/* ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-#define NUM_IP6_FRAG_QUEUE	2	/* ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãµã¤ãº			*/
-#define IP6_CFG_FRAG_REASSM_SIZE	4096	/* IPv6 åæ§æãããã¡ãµã¤ãº			*/
+#define IP6_CFG_FRAGMENT		/* データグラムの分割・再構成行う場合はコメントを外す。	*/
+#define NUM_IP6_FRAG_QUEUE	2	/* データグラム再構成キューサイズ			*/
+#define IP6_CFG_FRAG_REASSM_SIZE	4096	/* IPv6 再構成バッファサイズ			*/
 
 #endif	/* of #ifdef SUPPORT_ETHER */
 
 /*
- *  ãã¼ã¿ãªã³ã¯å±¤ (ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹) ã«é¢ããå®ç¾©
- */
-
-/*
- *  PPPãã¢ãã ã«é¢ããå®ç¾©
- */
-
-#define MODEM_CFG_DIAL		"ATD"	/* ãã¤ã¢ã«ã³ãã³ãæå­å			*/
-#define MODEM_CFG_RETRY_CNT	3	/* ãã¤ã¢ã«ãªãã©ã¤åæ°			*/
-#define MODEM_CFG_RETRY_WAIT	10000	/* ãã¤ã¢ã«ãªãã©ã¤ã¾ã§ã®å¾
-ã¡æé [ms]	*/
-
-/*
- *  PPPãHDLC ã«é¢ããå®ç¾©
- */
-
-#define DEF_LOCAL_ACCM		ULONG_C(0x000a0000)	/* èªåã® ACCMãXON ã¨ XOFF ã®ã¿å¤æ	*/
-#define DEF_REMOTE_ACCM		ULONG_C(0xffffffff)	/* ç¸æã® ACCMãåæå¤ã¯å
-¨ã¦å¤æ		*/
-
-/*
- *  PPPãLCP ã«é¢ããå®ç¾©
+ *  データリンク層 (ネットワークインタフェース) に関する定義
+ */
+
+/*
+ *  PPP、モデムに関する定義
+ */
+
+#define MODEM_CFG_DIAL		"ATD"	/* ダイアルコマンド文字列			*/
+#define MODEM_CFG_RETRY_CNT	3	/* ダイアルリトライ回数			*/
+#define MODEM_CFG_RETRY_WAIT	10000	/* ダイアルリトライまでの待ち時間 [ms]	*/
+
+/*
+ *  PPP、HDLC に関する定義
+ */
+
+#define DEF_LOCAL_ACCM		ULONG_C(0x000a0000)	/* 自分の ACCM、XON と XOFF のみ変換	*/
+#define DEF_REMOTE_ACCM		ULONG_C(0xffffffff)	/* 相手の ACCM、初期値は全て変換		*/
+
+/*
+ *  PPP、LCP に関する定義
  */
 
 #define LCP_CFG_MRU		UINT_C(0x0001)	/* MRU					*/
 #define LCP_CFG_ACCM		UINT_C(0x0002)	/* ACCM					*/
-#define LCP_CFG_MAGIC		UINT_C(0x0004)	/* ãã¸ãã¯çªå·				*/
-#define LCP_CFG_PCOMP		UINT_C(0x0008)	/* ãã­ãã³ã«é¨å§ç¸®æ©è½			*/
-#define LCP_CFG_ACCOMP		UINT_C(0x0010)	/* ã¢ãã¬ã¹ã»å¶å¾¡é¨å§ç¸®			*/
+#define LCP_CFG_MAGIC		UINT_C(0x0004)	/* マジック番号				*/
+#define LCP_CFG_PCOMP		UINT_C(0x0008)	/* プロトコル部圧縮機能			*/
+#define LCP_CFG_ACCOMP		UINT_C(0x0010)	/* アドレス・制御部圧縮			*/
 #define LCP_CFG_PAP		UINT_C(0x0020)	/* PAP					*/
-/*#define LCP_CFG_CHAP		UINT_C(0x0040)	   CHAP ã¯å®è£
-äºå®			*/
+/*#define LCP_CFG_CHAP		UINT_C(0x0040)	   CHAP は実装予定			*/
 
 #ifdef LCP_CFG_MAGIC
 
-#define LCP_ECHO_INTERVAL	(20*NET_TIMER_HZ)	/* ã¤ã³ã¿ã¼ãã«æé		*/
-#define LCP_ECHO_FAILS		9			/* å¤±æé¾å¤			*/
+#define LCP_ECHO_INTERVAL	(20*NET_TIMER_HZ)	/* インターバル時間		*/
+#define LCP_ECHO_FAILS		9			/* 失敗閾値			*/
 
 #endif	/* of #ifdef LCP_CFG_MAGIC */
 
 /*
- *  PPPãPAP ã«é¢ããå®ç¾©
+ *  PPP、PAP に関する定義
  */
 
 #define DEF_PAP_TIMEOUT		(3*NET_TIMER_HZ)
-#define DEF_PAP_REQTIME		(30*NET_TIMER_HZ)	/* ã¿ã¤ã ã¢ã¦ãå¦çãè¡ãã¨ãã¯ã³ã¡ã³ããå¤ãã*/
-#define MAX_PAP_REXMT		10			/* èªè¨¼è¦æ±ã®æå¤§åéåæ°	*/
-
-/*
- *  RX63N Ethernet Controler ã«é¢ããå®ç¾©
- */
-
-#define NUM_IF_RX62N_TXBUF		2	/* éä¿¡ãããã¡æ°			*/
-#define NUM_IF_RX62N_RXBUF		2	/* åä¿¡ãããã¡æ°			*/
-#define IF_RX62N_BUF_PAGE_SIZE	1518	/* ãããã¡ãµã¤ãº */
-
-#define TMO_IF_RX62N_GET_NET_BUF	1000	/* [us]ãåä¿¡ç¨ net_buf ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
-					/* [s]ã éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
+#define DEF_PAP_REQTIME		(30*NET_TIMER_HZ)	/* タイムアウト処理を行うときはコメントを外す。*/
+#define MAX_PAP_REXMT		10			/* 認証要求の最大再送回数	*/
+
+/*
+ *  RX63N Ethernet Controler に関する定義
+ */
+
+#define NUM_IF_RX62N_TXBUF		2	/* 送信バッファ数			*/
+#define NUM_IF_RX62N_RXBUF		2	/* 受信バッファ数			*/
+#define IF_RX62N_BUF_PAGE_SIZE	1518	/* バッファサイズ */
+
+#define TMO_IF_RX62N_GET_NET_BUF	1000	/* [us]、受信用 net_buf 獲得タイムアウト	*/
+					/* [s]、 送信タイムアウト			*/
 #define TMO_IF_RX62N_XMIT		(2*IF_TIMER_HZ)
 
-/*#define IF_RX62N_CFG_ACCEPT_ALL		 ãã«ãã­ã£ã¹ããã¨ã©ã¼ãã¬ã¼ã ãåä¿¡ããã¨ãã¯ã³ã¡ã³ããå¤ãã*/
-
-/*
- *  Bluetooth USB PAN ã«é¢ããå®ç¾©
- */
-
-#define NUM_IF_BTUSB_TXBUF		2	/* éä¿¡ãããã¡æ°			*/
-#define NUM_IF_BTUSB_RXBUF		2	/* åä¿¡ãããã¡æ°			*/
-#define IF_BTUSB_BUF_PAGE_SIZE	1518	/* ãããã¡ãµã¤ãº */
-
-#define TMO_IF_BTUSB_GET_NET_BUF	1	/* [ms]ãåä¿¡ç¨ net_buf ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
-					/* [s]ã éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
+/*#define IF_RX62N_CFG_ACCEPT_ALL		 マルチキャスト、エラーフレームも受信するときはコメントを外す。*/
+
+/*
+ *  Bluetooth USB PAN に関する定義
+ */
+
+#define NUM_IF_BTUSB_TXBUF		2	/* 送信バッファ数			*/
+#define NUM_IF_BTUSB_RXBUF		2	/* 受信バッファ数			*/
+#define IF_BTUSB_BUF_PAGE_SIZE	1518	/* バッファサイズ */
+
+#define TMO_IF_BTUSB_GET_NET_BUF	1	/* [ms]、受信用 net_buf 獲得タイムアウト	*/
+					/* [s]、 送信タイムアウト			*/
 #define TMO_IF_BTUSB_XMIT		(2*IF_TIMER_HZ)
 
 /*
- *  ã¤ã¼ãµãããåºåæã«ãNIC ã§ net_buf ãéæ¾ããå ´åã«æå®ããã
+ *  イーサネット出力時に、NIC で net_buf を開放する場合に指定する。
  *
- *  æ³¨æ: ä»¥ä¸ã®æå®ã¯ãæå®ä¾ã§ãããif_rx62n ã§ã¯ã
- *        éæ¾ããªãã®ã§ãä»¥ä¸ã®ã³ã¡ã³ããå¤ãã¦ã¯ãªããªãã
+ *  注意: 以下の指定は、指定例であり、if_rx62n では、
+ *        開放しないので、以下のコメントを外してはならない。
  */
 
@@ -237,90 +216,88 @@
 
 /*
- *  RX63N Ethernet Controller ã«é¢ããå®ç¾©
- */
-
-#define RX63N_BASE_ADDRESS		ULONG_C(0x00200000)	/* NIC ã®ã¬ã¸ã¹ã¿ãã¼ã¹ã¢ãã¬ã¹ */
-
-#define INHNO_IF_RX62N_TRX	INT_ETH_EINT	/* ãã±ããéåä¿¡ */
-#define INTNO_IF_RX62N_TRX	INT_ETH_EINT	/* ãã±ããéåä¿¡ */
-#define INTATR_IF_RX62N_TRX	(TA_NULL)	/* å²è¾¼ã¿å±æ§	*/
-#define INTPRI_IF_RX62N_TRX	(-1)		/* å²è¾¼ã¿åªå
-åº¦	*/
-
-/*
- *  ARP ã«é¢ããå®ç¾©
- */
-
-#define NUM_ARP_ENTRY		10			/* ARP ã­ã£ãã·ã¥ã¨ã³ããªæ°	*/
-
-/*
- *  DHCP ã«é¢ããå®ç¾©
+ *  RX63N Ethernet Controller に関する定義
+ */
+
+#define RX63N_BASE_ADDRESS		ULONG_C(0x00200000)	/* NIC のレジスタベースアドレス */
+
+#define INHNO_IF_RX62N_TRX	INT_ETH_EINT	/* パケット送受信 */
+#define INTNO_IF_RX62N_TRX	INT_ETH_EINT	/* パケット送受信 */
+#define INTATR_IF_RX62N_TRX	(TA_NULL)	/* 割込み属性	*/
+#define INTPRI_IF_RX62N_TRX	(-1)		/* 割込み優先度	*/
+
+/*
+ *  ARP に関する定義
+ */
+
+#define NUM_ARP_ENTRY		10			/* ARP キャッシュエントリ数	*/
+
+/*
+ *  DHCP に関する定義
  *
- *    ã»æ³¨æ: TINET ã¯ãDHCP ãå®è£
-ãã¦ããªããå¿ç¨ãã­ã°ã©ã ã§ã
- *            DHCP ã¡ãã»ã¼ã¸ãåä¿¡ããããã®å®ç¾©ã§ããã
- *            ã¾ããç¾å¨ã¯ IPv4 ã®ã¿æå¹ã§ããã
- */
-
-#define DHCP_CFG					 /* DHCP ãå¦çããå ´åã¯ã³ã¡ã³ããå¤ãã*/
-
-/*
- *  Ethernet ã«é¢ããå®ç¾©
- */
-
-/*#define ETHER_CFG_ACCEPT_ALL		 ãã«ãã­ã£ã¹ããã¨ã©ã¼ãã¬ã¼ã ãåä¿¡ããã¨ãã¯ã³ã¡ã³ããå¤ãã	*/
-/*#define ETHER_CFG_UNEXP_WARNING	 éãµãã¼ããã¬ã¼ã ã®è­¦åãè¡¨ç¤ºããã¨ãã¯ã³ã¡ã³ããå¤ãã		*/
-/*#define ETHER_CFG_802_WARNING		 IEEE 802.3 ãã¬ã¼ã ã®è­¦åãè¡¨ç¤ºããã¨ãã¯ã³ã¡ã³ããå¤ãã		*/
-/*#define ETHER_CFG_MCAST_WARNING	 ãã«ãã­ã£ã¹ãã®è­¦åãè¡¨ç¤ºããã¨ãã¯ã³ã¡ã³ããå¤ãã		*/
-#define ETHER_CFG_MULTICAST			/* ãã«ãã­ã£ã¹ããéåä¿¡ */
-
-/*
- *  ã¢ãã¬ã¹ãªã¹ãã«é¢ããå®ç¾©ã
- */
-#define NUM_IN6_IFADDR_ENTRY		5	/*  ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ãªã¹ãã®ã¨ã³ããªæ°		*/
-
-/*
- *  æ±ç¨ãããã¯ã¼ã¯ã«é¢ããå®ç¾©
- */
-
-/*
- *  ãããã¯ã¼ã¯ãããã¡ã«é¢ããå®ç¾©
- */
-
-/* ãããã¯ã¼ã¯ãããã¡æ° */
+ *    ・注意: TINET は、DHCP を実装していない。応用プログラムで、
+ *            DHCP メッセージを受信するための定義である。
+ *            また、現在は IPv4 のみ有効である。
+ */
+
+#define DHCP_CFG					 /* DHCP を処理する場合はコメントを外す。*/
+
+/*
+ *  Ethernet に関する定義
+ */
+
+/*#define ETHER_CFG_ACCEPT_ALL		 マルチキャスト、エラーフレームも受信するときはコメントを外す。	*/
+/*#define ETHER_CFG_UNEXP_WARNING	 非サポートフレームの警告を表示するときはコメントを外す。		*/
+/*#define ETHER_CFG_802_WARNING		 IEEE 802.3 フレームの警告を表示するときはコメントを外す。		*/
+/*#define ETHER_CFG_MCAST_WARNING	 マルチキャストの警告を表示するときはコメントを外す。		*/
+#define ETHER_CFG_MULTICAST			/* マルチキャストを送受信 */
+
+/*
+ *  アドレスリストに関する定義。
+ */
+#define NUM_IN6_IFADDR_ENTRY		5	/*  インタフェースのアドレスリストのエントリ数		*/
+
+/*
+ *  汎用ネットワークに関する定義
+ */
+
+/*
+ *  ネットワークバッファに関する定義
+ */
+
+/* ネットワークバッファ数 */
 
 #ifdef SUPPORT_PPP
 
 /*
- *  PPP ã§ã¯ãåä¿¡ç¨ã® ãããã¯ã¼ã¯ãããã¡ã¯ PDU (1502) ãµã¤ãºãå¸¸ã«
- *  å²ãå½ã¦ãªããã°ãªããªãã®ã§ PDU ãµã¤ãºãå¤ãã«ç¢ºä¿ããã
+ *  PPP では、受信用の ネットワークバッファは PDU (1502) サイズを常に
+ *  割り当てなければならないので PDU サイズを多めに確保する。
  */
 
 #ifndef NUM_MPF_NET_BUF_CSEG
-#define NUM_MPF_NET_BUF_CSEG	2	/* IF + IP + TCPã2 ä»¥ä¸*/
+#define NUM_MPF_NET_BUF_CSEG	2	/* IF + IP + TCP、2 以上*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_CSEG */
 
 #ifndef NUM_MPF_NET_BUF_64
-#define NUM_MPF_NET_BUF_64	0	/* 64 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_64	0	/* 64 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_64 */
 
 #ifndef NUM_MPF_NET_BUF_128
-#define NUM_MPF_NET_BUF_128	0	/* 128 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_128	0	/* 128 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_128 */
 
 #ifndef NUM_MPF_NET_BUF_256
-#define NUM_MPF_NET_BUF_256	0	/* 256 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_256	0	/* 256 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_256 */
 
 #ifndef NUM_MPF_NET_BUF_512
-#define NUM_MPF_NET_BUF_512	0	/* 512 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_512	0	/* 512 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_512 */
 
 #ifndef NUM_MPF_NET_BUF_1024
-#define NUM_MPF_NET_BUF_1024	0	/* 1024 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_1024	0	/* 1024 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_1024 */
 
 #ifndef NUM_MPF_NET_BUF_IF_PDU
-#define NUM_MPF_NET_BUF_IF_PDU	2	/* IF æå¤§ PDU ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF_IF_PDU	2	/* IF 最大 PDU サイズ	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IF_PDU */
 
@@ -328,7 +305,7 @@
 
 #if defined(SUPPORT_INET4) && defined(IP4_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 再構成バッファサイズ	*/
 #endif
 
@@ -338,7 +315,7 @@
 
 #if defined(SUPPORT_INET6) && defined(IP6_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 再構成バッファサイズ	*/
 #endif
 
@@ -350,13 +327,13 @@
 
 /*
- *  ã¤ã¼ãµãããã®å ´åã®ãããã¯ã¼ã¯ãããã¡æ°ã®å²ãå½ã¦
- */
-
-/*
- *  æ³¨æ!!
+ *  イーサネットの場合のネットワークバッファ数の割り当て
+ */
+
+/*
+ *  注意!!
  *
- *  RX63N Ethernet Controler ã®ãã£ãã¤ã¹ãã©ã¤ãï¼if_rx62nï¼ã®æä½å²å½ã¦é·ã¯
- *  60ï¼ã¢ã©ã¤ã³ãã¦ 62ï¼ãªã¯ãããã®ãã IF + IP +TCP ããã¯
- *  64 ãªã¯ãããã®ãããã¯ã¼ã¯ãããã¡ã®æ¹ãæé©ã§ããã
+ *  RX63N Ethernet Controler のディバイスドライバ（if_rx62n）の最低割当て長は
+ *  60（アラインして 62）オクテットのため IF + IP +TCP よりは
+ *  64 オクテットのネットワークバッファの方が最適である。
  */
 
@@ -366,17 +343,17 @@
 
 #ifndef NUM_MPF_NET_BUF_64
-#define NUM_MPF_NET_BUF_64	2	/* 64 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_64	2	/* 64 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_64 */
 
 #ifndef NUM_MPF_NET_BUF_128
-#define NUM_MPF_NET_BUF_128	0	/* 128 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_128	0	/* 128 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_128 */
 
 #ifndef NUM_MPF_NET_BUF_256
-#define NUM_MPF_NET_BUF_256	0	/* 256 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_256	0	/* 256 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_256 */
 
 #ifndef NUM_MPF_NET_BUF_512
-#define NUM_MPF_NET_BUF_512	0	/* 512 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_512	0	/* 512 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_512 */
 
@@ -384,5 +361,5 @@
 
 #ifndef NUM_MPF_NET_BUF_IP_MSS
-#define NUM_MPF_NET_BUF_IP_MSS	0	/* IF + 576 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_IP_MSS	0	/* IF + 576 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IP_MSS */
 
@@ -390,5 +367,5 @@
 
 #ifndef NUM_MPF_NET_BUF_1024
-#define NUM_MPF_NET_BUF_1024	0	/* 1024 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_1024	0	/* 1024 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_1024 */
 
@@ -402,5 +379,5 @@
 
 #ifndef NUM_MPF_NET_BUF_IF_PDU
-#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF æå¤§ PDU ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF 最大 PDU サイズ	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IF_PDU */
 
@@ -408,7 +385,7 @@
 
 #if defined(SUPPORT_INET4) && defined(IP4_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 再構成バッファサイズ	*/
 #endif
 
@@ -418,7 +395,7 @@
 
 #if defined(SUPPORT_INET6) && defined(IP6_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 再構成バッファサイズ	*/
 #endif
 
@@ -434,25 +411,25 @@
 
 #ifndef NUM_MPF_NET_BUF_64
-#define NUM_MPF_NET_BUF_64	0	/* 64 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_64	0	/* 64 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_64 */
 
 #ifndef NUM_MPF_NET_BUF_128
-#define NUM_MPF_NET_BUF_128	0	/* 128 ãªã¯ãããã2 ä»¥ä¸	*/
+#define NUM_MPF_NET_BUF_128	0	/* 128 オクテット、2 以上	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_128 */
 
 #ifndef NUM_MPF_NET_BUF_256
-#define NUM_MPF_NET_BUF_256	0	/* 256 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_256	0	/* 256 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_256 */
 
 #ifndef NUM_MPF_NET_BUF_512
-#define NUM_MPF_NET_BUF_512	0	/* 512 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_512	0	/* 512 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_512 */
 
 #ifndef NUM_MPF_NET_BUF_1024
-#define NUM_MPF_NET_BUF_1024	0	/* 1024 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_1024	0	/* 1024 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_1024 */
 
 #ifndef NUM_MPF_NET_BUF_IF_PDU
-#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF æå¤§ PDU ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF 最大 PDU サイズ	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IF_PDU */
 
@@ -460,10 +437,8 @@
 
 /*
- *  ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬
+ *  ネットワーク統計情報の計測
  *
- *  ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬ãè¡ãå ´åã¯ãtinet/include/net/net.h
- *  ã§å®ç¾©ããã¦ãããã­ãã³ã«è­å¥ãã©ã°ãæå®ããã
+ *  ネットワーク統計情報の計測を行う場合は、tinet/include/net/net.h
+ *  で定義されているプロトコル識別フラグを指定する。
  */
 
@@ -550,5 +525,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_defs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_defs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/tinet_target_defs.h	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -56,12 +41,11 @@
 
 /*
- *  ãããã¯ã¼ã¯ã«é¢ããå®ç¾©
+ *  ネットワークに関する定義
  */
 
 /*
- *  CPU ã®ã¢ã©ã¤ã¡ã³ãã«é¢ããå®ç¾©
+ *  CPU のアライメントに関する定義
  *
- *  4 ãªã¯ãããåä½ã§ãã¢ã©ã¤ã³ããå¿
-è¦ãããå ´åã¯ 4 ãæå®ããã
+ *  4 オクテット単位で、アラインする必要がある場合は 4 を指定する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/MANIFEST
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/MANIFEST	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/MANIFEST	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.target
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.target	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.target	(revision 389)
@@ -1,8 +1,8 @@
 #
-#		Makefileã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+#		Makefileのターゲット依存部（GR-SAKURA用）
 #
 
 #
-#  ãã¼ãåï¼ãã­ã»ããµåï¼éçºç°å¢åã®å®ç¾©
+#  ボード名，プロセッサ名，開発環境名の定義
 #
 BOARD = gr_sakura
@@ -11,10 +11,10 @@
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES := $(INCLUDES) -I$(TARGETDIR) -I$(SRCDIR)/mbed
 
 #
-#  ã«ã¼ãã«ã«é¢ããå®ç¾©
+#  カーネルに関する定義
 #
 KERNEL_DIRS := $(KERNEL_DIRS) $(TARGETDIR)
@@ -23,5 +23,5 @@
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ã«é¢ããå®ç¾©
+#  システムサービスに関する定義
 #
 SYSSVC_DIRS := $(SYSSVC_DIRS) $(SRCDIR)/mbed $(SRCDIR)/syssvc/tlsf
@@ -29,10 +29,10 @@
 
 #
-#  ã³ã³ãã£ã®ã¥ã¬ã¼ã¿é¢ä¿ã®å¤æ°ã®å®ç¾©
+#  コンフィギュレータ関係の変数の定義
 #
 CFG_TABS := $(CFG_TABS) --symval-table $(TARGETDIR)/target_sym.def
 
 #
-#  ãã¬ã¼ã¹ã­ã°è¨é²ã®ãµã³ãã«ã³ã¼ãã«é¢ããå®ç¾©
+#  トレースログ記録のサンプルコードに関する定義
 #
 ifeq ($(ENABLE_TRACE),true)
@@ -42,5 +42,5 @@
 
 #
-#  åã»ã°ã¡ã³ãã®éå§ã¢ãã¬ã¹ã®å®ç¾©
+#  各セグメントの開始アドレスの定義
 #
 #TEXT_START_ADDRESS = 00010000
@@ -48,13 +48,13 @@
 
 #
-#  ãªã³ã«ã¹ã¯ãªããã®å®ç¾©
+#  リンカスクリプトの定義
 #
 LDSCRIPT = $(TARGETDIR)/gr_sakura.ld
 
 #
-#  ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼ã«ã«é¢ããå®ç¾©
+#  スタートアップモジュールに関する定義
 #
-#  m68kelf.ldã«ãSTARTUP(start.o)ããè¨è¿°ããããï¼ã¹ã¿ã¼ãã¢ããã¢ã¸ã¥ã¼
-#  ã«ã®ååãHIDDEN_OBJSã«å®ç¾©ããï¼ã¾ãï¼LDFLAGSã«-nostdlibãè¿½å ãã¦ããï¼
+#  m68kelf.ldに「STARTUP(start.o)」を記述したため，スタートアップモジュー
+#  ルの名前をHIDDEN_OBJSに定義する．また，LDFLAGSに-nostdlibを追加している．
 #
 HIDDEN_OBJS = start.o
@@ -73,5 +73,5 @@
 
 #
-#  ä¾å­é¢ä¿ã®å®ç¾©
+#  依存関係の定義
 #
 cfg1_out.c: $(TARGETDIR)/target_sym.def
@@ -80,5 +80,5 @@
 
 #
-#  ãã­ã»ããµä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ã
+#  プロセッサ依存部のインクルード
 #
 include $(SRCDIR)/arch/$(PRC)_$(TOOL)/Makefile.prc
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.tinet
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.tinet	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/Makefile.tinet	(revision 389)
@@ -5,39 +5,27 @@
 #                    Tomakomai National College of Technology, JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
-#   ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
-#   è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
-#   ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
-#   å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+#   によって公表されている GNU General Public License の Version 2 に記
+#   述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+#   を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+#   利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次の条件を満たすこと．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
-#   å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
-#   æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+#   含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+#   接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 #  
 #   @(#) $Id$
@@ -45,5 +33,5 @@
 
 #
-#  Makefile.tinet ã®ã·ã¹ãã ä¾å­é¨åï¼GR-SAKURAç¨ï¼
+#  Makefile.tinet のシステム依存部分（GR-SAKURA用）
 
 ifeq ($(NET_IF),ether)
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/gr_sakura.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/gr_sakura.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/gr_sakura.h	(revision 389)
@@ -6,52 +6,37 @@
  *  Copyright (C) 2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
  */
 
-/* GR-SAKURAç¨ããããã¡ã« */
+/* GR-SAKURA用ヘッダファル */
 
 #ifndef	TOPPERS_GRSAKURA_H
@@ -60,17 +45,16 @@
 
 /*
- *  MCUä¾å­æ
-å ±ã®èª­ã¿è¾¼ã¿
+ *  MCU依存情報の読み込み
  */
 #include "rx630.h"
 
 /*
- *  ã¯ã­ãã¯è¨­å®
+ *  クロック設定
  */
 
 /*
- *  ã·ã¹ãã ã¯ã­ãã¯ICLK(kHz)
+ *  システムクロックICLK(kHz)
  *
- *  CPUï¼DTCï¼DMACAï¼ETHERCï¼EDMACï¼ROMï¼RAMç¨
+ *  CPU，DTC，DMACA，ETHERC，EDMAC，ROM，RAM用
  *  
  */
@@ -78,17 +62,17 @@
 
 /*
- *  ã¯ã­ãã¯PCLK(kHz)
+ *  クロックPCLK(kHz)
  *
- *  ã¿ã¤ãï¼ã·ãªã¢ã«ãªã©å¨è¾ºã¢ã¸ã¥ã¼ã«ç¨
+ *  タイマ，シリアルなど周辺モジュール用
  */
 #define FREQ_PCLK  (48000U)
 
 /*
- *  ãã¼ã¬ã¼ãè¨­å®
+ *  ボーレート設定
  */
 #define UART_BAUDRATE		115200
 
 /*
- *  ã¯ã­ãã¯ã½ã¼ã¹
+ *  クロックソース
  */
 #define UART_CLKSRC			CLK_F1
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/sectrx.inc
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/sectrx.inc	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/sectrx.inc	(revision 389)
@@ -6,47 +6,32 @@
 ;*  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
 ;* 
-;*  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-;*  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-;*  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-;*  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-;*      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-;*      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-;*  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-;*      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-;*      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-;*      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-;*      ã¨ï¼
-;*    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-;*        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-;*    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-;*        å ±åãããã¨ï¼
-;*  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-;*      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-;*      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-;*      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-;*      å
-è²¬ãããã¨ï¼
+;*  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+;*  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+;*  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+;*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+;*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+;*      スコード中に含まれていること．
+;*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+;*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+;*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+;*      の無保証規定を掲載すること．
+;*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+;*      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+;*      と．
+;*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+;*        作権表示，この利用条件および下記の無保証規定を掲載すること．
+;*    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+;*        報告すること．
+;*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+;*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+;*      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+;*      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+;*      免責すること．
 ;* 
-;*  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-;*  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-;*  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-;*  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-;*  ã®è²¬ä»»ãè² ããªãï¼
+;*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+;*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+;*  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+;*  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+;*  の責任を負わない．
 ;* 
 ;*  @(#) $Id$
@@ -54,16 +39,16 @@
 
 ;
-;  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã»ã¯ã·ã§ã³å®ç¾©ãã¡ã¤ã«(ã¹ã¿ã¼ã¿ã¼ã­ããç¨)
+;  ターゲットシステム依存セクション定義ファイル(スターターキット用)
 ;
 
 ;
-;  ã»ã¯ã·ã§ã³ã®å®ç¾©
+;  セクションの定義
 ;
-;  ã»ã¯ã·ã§ã³ã®ã¢ãã¬ã¹å®ç¾©ã¯HEWä¸ã®æé©åãªã³ã«ã®
-;  ãªãã·ã§ã³ã«ã¦å®æ½ãã.
+;  セクションのアドレス定義はHEW上の最適化リンカの
+;  オプションにて実施する.
 ;
 
 	;
-	;  åæå¤æããã¼ã¿é åã®ã»ã¯ã·ã§ã³
+	;  初期値有りデータ領域のセクション
 	;
 	;  00000000h - 00020000h
@@ -75,5 +60,5 @@
 
 	;
-	;  åæå¤ç¡ããã¼ã¿é åã®ã»ã¯ã·ã§ã³
+	;  初期値無しデータ領域のセクション
 	;
 	;  00000000h - 00020000h
@@ -88,11 +73,11 @@
 
 	;
-	;  ã«ã¼ãã«ã¹ã¿ãã¯é åã®ã»ã¯ã·ã§ã³
+	;  カーネルスタック領域のセクション
 	;
 	;  00000000h - 00020000h
 	;
-	;  ä»¥ä¸.blkbå½ä»¤ã§ç¢ºä¿ãã¦ããã«ã¼ãã«ã¹ã¿ãã¯é åã®ãµã¤ãºã
-	;  å¤æ´ããå ´åã¯, target_kernel_impl.hã®DEFAULT_ISTKSZã®å¤ã, åã
-	;  å¤ã«å¤æ´ãããã¨.
+	;  以下.blkb命令で確保しているカーネルスタック領域のサイズを
+	;  変更する場合は, target_kernel_impl.hのDEFAULT_ISTKSZの値を, 同じ
+	;  値に変更すること.
 	;
 ;	.section	SI, DATA, ALIGN = 4
@@ -104,5 +89,5 @@
 
 	;
-	;  å®æ°é åã®ã»ã¯ã·ã§ã³
+	;  定数領域のセクション
 	;
 	;  00100000h - 00107FFFh
@@ -113,5 +98,5 @@
 
 	;
-	;  åæå¤æããã¼ã¿é åã®åæå¤
+	;  初期値有りデータ領域の初期値
 	;
 	;  00100000h - 00107FFFh
@@ -122,5 +107,5 @@
 
 	;
-	;  å¯å¤ãã¯ã¿ãã¼ãã«é åã®ã»ã¯ã·ã§ã³
+	;  可変ベクタテーブル領域のセクション
 	;
 	;  00100000h - 00107FFFh
@@ -131,5 +116,5 @@
 
 	;
-	;  ãã­ã°ã©ã é åã®ã»ã¯ã·ã§ã³
+	;  プログラム領域のセクション
 	;
 	;  FFE80000h - FFFFFF7Fh
@@ -138,5 +123,5 @@
 
 	;
-	;  åºå®ãã¯ã¿ãã¼ãã«é åã®ã»ã¯ã·ã§ã³
+	;  固定ベクタテーブル領域のセクション
 	;
 	;  FFFFFF80h - FFFFFFFFh
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tPutLogGRSakura.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tPutLogGRSakura.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tPutLogGRSakura.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºå
+ *		システムログの低レベル出力
  */
 
@@ -61,8 +46,8 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®åæå
+ *  システムログの低レベル出力のための初期化
  *
- *  åæåã«ã¼ãã³ãå¼ã³åºãããåã«åæåããããã«ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ã
- *  ãä¾å­é¨ããç´æ¥å¼ã³åºãããã®é¢æ°ï¼
+ *  初期化ルーチンを呼び出すより前に初期化するために，カーネルのターゲッ
+ *  ト依存部から直接呼び出すための関数．
  */
 void
@@ -73,7 +58,7 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºåï¼åãå£é¢æ°ï¼
+ *  システムログの低レベル出力のための文字出力（受け口関数）
  *
- *  SIOãã¼ãã«æå­ãéä¿¡ã§ããã¾ã§ãã¼ãªã³ã°ããï¼
+ *  SIOポートに文字が送信できるまでポーリングする．
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tPutLogGRSakura.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tPutLogGRSakura.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tPutLogGRSakura.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,9 +42,9 @@
 
 /*
- *		ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		システムログの低レベル出力のコンポーネント記述
  */
 
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ã»ã«ã¿ã¤ã
+ *  システムログの低レベル出力のセルタイプ
  */
 [singleton]
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakura.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakura.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakura.cdl	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -58,10 +43,10 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
- *		ã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		シリアルインタフェースドライバのターゲット依存部（GR-SAKURA用）
+ *		のコンポーネント記述
  */
 
 /*
- *  GR-SAKURAã¨RX631/RX63Nã«é¢ããå®ç¾©
+ *  GR-SAKURAとRX631/RX63Nに関する定義
  */
 import_C("gr_sakura.h");
@@ -69,16 +54,15 @@
 
 /*
- *  FIFOå
-èµã·ãªã¢ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã¤ã³ã¿ãã§ã¼ã¹ç¨ ç°¡æSIOãã©ã¤ã
+ *  FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
  */
 import("tMbedSerial.cdl");
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®æ¬ä½ï¼ã·ãªã¢ã«ã¤
- *  ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨SIOãã©ã¤ããæ¥ç¶ããé¨åï¼ã®ã»ã«ã¿ã¤ã
+ *  シリアルインタフェースドライバのターゲット依存部の本体（シリアルイ
+ *  ンタフェースドライバとSIOドライバを接続する部分）のセルタイプ
  */
 celltype tSIOPortGRSakuraMain {
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå
+	 *  シリアルインタフェースドライバとの結合
 	 */
 	[inline] entry		sSIOPort	eSIOPort;
@@ -86,5 +70,5 @@
 
 	/*
-	 *  SIOãã©ã¤ãã¨ã®çµå
+	 *  SIOドライバとの結合
 	 */
 	call			sSIOPort	cSIOPort;
@@ -93,10 +77,10 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼è¤åã³ã³ãã¼ãã³
- *  ãï¼ã®ã»ã«ã¿ã¤ã
+ *  シリアルインタフェースドライバのターゲット依存部（複合コンポーネン
+ *  ト）のセルタイプ
  */
 composite tSIOPortGRSakura {
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå
+	 *  シリアルインタフェースドライバとの結合
 	 */
 	entry				sSIOPort	eSIOPort;
@@ -104,14 +88,14 @@
 
 	/*
-	 *  å±æ§ã®å®ç¾©
+	 *  属性の定義
 	 */
 	attr {
-		int32_t tx;								/* éä¿¡Pin */
-		int32_t rx;								/* åä¿¡Pin */
-		uint32_t	baudRate = 115200;			/* ãã¼ã¬ã¼ãã®è¨­å®å¤ */
+		int32_t tx;								/* 送信Pin */
+		int32_t rx;								/* 受信Pin */
+		uint32_t	baudRate = 115200;			/* ボーレートの設定値 */
 	};
 
 	/*
-	 *  SIOãã©ã¤ã
+	 *  SIOドライバ
 	 */
 	cell tMbedSerial MbedSerial {
@@ -123,5 +107,5 @@
 
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®æ¬ä½
+	 *  シリアルインタフェースドライバのターゲット依存部の本体
 	 */
 	cell tSIOPortGRSakuraMain SIOPortMain {
@@ -133,16 +117,14 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®ãã­ãã¿ã¤ã
+ *  シリアルインタフェースドライバのターゲット依存部のプロトタイプ
  *
- *  ãµã³ãã«ãã­ã°ã©ã ãä½¿ããã¼ããï¼SIOPortTarget1ã«åºå®ããã¦ããã
- *  ãï¼ãã¼ã1ã¨ãã¼ã3ãå
-¥ãæãã¦ããï¼å
-·ä½çã«ã¯ï¼SIOPortTarget1ã¯
- *  MbedSerialã®ãã£ãã«2ï¼ãã£ãã«çªå·ã¯0ããå§ã¾ãã®ã§ï¼ãã¼ã3ã®ãã¨ï¼ã«ï¼
- *  SIOPortTarget3ã¯MbedSerialã®ãã£ãã«0ã«ã¤ãªãã£ã¦ããï¼
+ *  サンプルプログラムが使うポートが，SIOPortTarget1に固定されているた
+ *  め，ポート1とポート3を入れ換えている．具体的には，SIOPortTarget1は
+ *  MbedSerialのチャネル2（チャネル番号は0から始まるので，ポート3のこと）に，
+ *  SIOPortTarget3はMbedSerialのチャネル0につながっている．
  */
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget1 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P20");		/* PIN_IO1 */
 	rx = C_EXP("P21");		/* PIN_IO0 */
@@ -151,5 +133,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget2 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P32");		/* PIN_IO6 */
 	rx = C_EXP("P33");		/* PIN_IO7 */
@@ -158,5 +140,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget3 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P50");		/* PIN_IO24 */
 	rx = C_EXP("P52");		/* PIN_IO26 */
@@ -165,5 +147,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget4 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P23");		/* PIN_IO3 */
 	rx = C_EXP("P25");		/* PIN_IO5 */
@@ -172,5 +154,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget5 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("PC3");		/* PIN_IO9 */
 	rx = C_EXP("PC2");		/* PIN_IO8 */
@@ -179,5 +161,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget6 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("PC7");		/* PIN_IO12 */
 	rx = C_EXP("PC6");		/* PIN_IO11 */
@@ -186,5 +168,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget7 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = C_EXP("P26");		/* PIN_IO58 */
 	rx = C_EXP("P30");		/* PIN_IO60 */
@@ -193,5 +175,5 @@
 [prototype]
 cell tSIOPortGRSakura SIOPortTarget8 {
-	/* å±æ§ã®è¨­å® */
+	/* 属性の設定 */
 	tx = NULL;
 	rx = NULL;
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakuraMain_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakuraMain_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tSIOPortGRSakuraMain_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,9 +42,9 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（GR-SAKURA用）
  */
 
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 Inline void
@@ -69,5 +54,5 @@
 
 	/*
-	 *  ããã¤ã¹ä¾å­ã®ãªã¼ãã³å¦ç
+	 *  デバイス依存のオープン処理
 	 */
 	cSIOPort_open();
@@ -75,5 +60,5 @@
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 Inline void
@@ -83,5 +68,5 @@
 
 	/*
-	 *  ããã¤ã¹ä¾å­ã®ã¯ã­ã¼ãºå¦ç
+	 *  デバイス依存のクローズ処理
 	 */
 	cSIOPort_close();
@@ -89,5 +74,5 @@
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 Inline bool_t
@@ -100,5 +85,5 @@
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 Inline int_t
@@ -111,5 +96,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 Inline void
@@ -122,5 +107,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 Inline void
@@ -133,5 +118,5 @@
 
 /*
- *  SIOãã¼ãããã®éä¿¡å¯è½ã³ã¼ã«ããã¯
+ *  SIOポートからの送信可能コールバック
  */
 Inline void
@@ -146,5 +131,5 @@
 
 /*
- *  SIOãã¼ãããã®åä¿¡éç¥ã³ã¼ã«ããã¯
+ *  SIOポートからの受信通知コールバック
  */
 Inline void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,21 +42,21 @@
 
 /*
- *  ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®ããã©ã«ã
+ *  タスクのスタックサイズのデフォルト
  */
-const size_t DefaultTaskStackSize = 1024;		/* ã¹ã¿ãã¯ãµã¤ãºï¼1KBï¼*/
+const size_t DefaultTaskStackSize = 1024;		/* スタックサイズ（1KB）*/
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®å®ç¾©
+ *  システムログタスクのスタックサイズの定義
  */
 const size_t LogTaskStackSize = DefaultTaskStackSize;
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã«é¢ããå®ç¾©
+ *  カーネル起動メッセージに関する定義
  */
-const char *const BannerTargetName = "GR-SAKURA";		/* ã¿ã¼ã²ããå */
-const char *const BannerCopyrightNotice = "";			/* èä½æ¨©è¡¨ç¤º */
+const char *const BannerTargetName = "GR-SAKURA";		/* ターゲット名 */
+const char *const BannerCopyrightNotice = "";			/* 著作権表示 */
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®ã»ã«ã¿ã¤ãã®å®ç¾©
+ *  ターゲット依存のセルタイプの定義
  */
 import("syssvc/tPutLogSIOPort.cdl");
@@ -79,5 +64,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®çµã¿ä¸ãè¨è¿°
+ *  シリアルインタフェースドライバのターゲット依存部の組み上げ記述
  */
 cell tSIOPortGRSakura SIOPortTarget1 {
@@ -85,8 +70,8 @@
 
 /*
- *  ä½ã¬ãã«åºåã®çµã¿ä¸ãè¨è¿°
+ *  低レベル出力の組み上げ記述
  */
 cell tPutLogSIOPort PutLogTarget {
-	/* SIOãã©ã¤ãã¨ã®çµå */
+	/* SIOドライバとの結合 */
 	cSIOPort = SIOPortTarget1.eSIOPort;
 };
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_cfg1_out.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_cfg1_out.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_cfg1_out.h	(revision 389)
@@ -1,5 +1,4 @@
 /*
- *		cfg1_out.cã®ãªã³ã¯ã«å¿
-è¦ãªã¹ã¿ãã®å®ç¾©
+ *		cfg1_out.cのリンクに必要なスタブの定義
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_check.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_check.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_check.trb	(revision 389)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 #
-#		ãã¹3ã®çæã¹ã¯ãªããã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+#		パス3の生成スクリプトのターゲット依存部（GR-SAKURA用）
 #
 
 #
-#  çæã¹ã¯ãªããã®ãã­ã»ããµä¾å­é¨
+#  生成スクリプトのプロセッサ依存部
 #
 IncludeTrb("prc_check.trb")
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.cfg	(revision 389)
@@ -1,5 +1,4 @@
 /*
- *		ã«ã¼ãã«å®è£
-ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *		カーネル実装のコンフィギュレーションファイル
  *
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.h	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,12 +45,12 @@
 
 /*
- *  ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾å­å®ç¾©ï¼GR-SAKURAç¨ï¼
+ *  カーネルのターゲット依存定義（GR-SAKURA用）
  */
 
 /*
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼kernel.hã§ã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡
- *  ã¤ã«ããç´æ¥ã¤ã³ã¯ã«ã¼ããããã¨ã¯ãªãï¼ãã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ã
- *  ããåã«ï¼t_stddef.hãã¤ã³ã¯ã«ã¼ããããã®ã§ï¼ãããã«ä¾å­ãã¦ãã
- *  ãï¼
+ *  このインクルードファイルは，kernel.hでインクルードされる．他のファ
+ *  イルから直接インクルードすることはない．このファイルをインクルード
+ *  する前に，t_stddef.hがインクルードされるので，それらに依存してもよ
+ *  い．
  */
 
@@ -75,20 +60,19 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_kernel.h"
 
 /*
- *  ãµãã¼ãããæ©è½ã®å®ç¾©
+ *  サポートする機能の定義
  */
-#define	TOPPERS_TARGET_SUPPORT_GET_UTM		/* get_utmããµãã¼ããã */
-//#define TOPPERS_TARGET_SUPPORT_OVRHDR		/* ãªã¼ãã©ã³ãã³ãã© */
+#define	TOPPERS_TARGET_SUPPORT_GET_UTM		/* get_utmをサポートする */
+//#define TOPPERS_TARGET_SUPPORT_OVRHDR		/* オーバランハンドラ */
 
 /*
- *  ã¿ã¤ã ãã£ãã¯ã®å®ç¾©
+ *  タイムティックの定義
  */
-#define	TIC_NUME		( 1U )		/* ã¿ã¤ã ãã£ãã¯ã®å¨æã®åå­ */
-#define	TIC_DENO		( 1U )		/* ã¿ã¤ã ãã£ãã¯ã®å¨æã®åæ¯ */
+#define	TIC_NUME		( 1U )		/* タイムティックの周期の分子 */
+#define	TIC_DENO		( 1U )		/* タイムティックの周期の分母 */
 
 #endif /* TOPPERS_TARGET_KERNEL_H */
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel.trb	(revision 389)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 #
-#		ãã¹2ã®çæã¹ã¯ãªããã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+#		パス2の生成スクリプトのターゲット依存部（GR-SAKURA用）
 #
 
 #
-#  çæã¹ã¯ãªããã®ãã­ã»ããµä¾å­é¨
+#  生成スクリプトのプロセッサ依存部
 #
 IncludeTrb("prc_kernel.trb")
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.c	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,5 +45,5 @@
 
 /*
- *	ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã¢ã¸ã¥ã¼ã«ï¼GR-SAKURAç¨ï¼
+ *	ターゲットシステム依存モジュール（GR-SAKURA用）
  */
 
@@ -77,5 +62,5 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ åæåã«ã¼ãã³
+ *  ターゲットシステム依存 初期化ルーチン
  */
 void
@@ -83,17 +68,16 @@
 {
 	/*
-	 *  ãã­ã»ããµä¾å­ã®åæå
+	 *  プロセッサ依存の初期化
 	 */
 	prc_initialize();
 
-	/* IOãã¼ãåæå */
-	/* P25ãåºåãã¼ãã«ãã */
+	/* IOポート初期化 */
+	/* P25を出力ポートにする */
 	sil_wrb_mem(PORT2_PDR_ADDR, 
 		sil_reb_mem(PORT2_PDR_ADDR) | PORT_PDR_B5_BIT);
-	/* PA0, PA1, PA2, PA6ãåºåãã¼ãã«ãã */
+	/* PA0, PA1, PA2, PA6を出力ポートにする */
 	sil_wrb_mem(PORTA_PDR_ADDR,
 		sil_reb_mem(PORTA_PDR_ADDR) | PORT_PDR_B0_BIT | PORT_PDR_B1_BIT | PORT_PDR_B2_BIT | PORT_PDR_B6_BIT);
-	/* PA7ãå
-¥åãã¼ãã«ãã */
+	/* PA7を入力ポートにする */
 	sil_wrb_mem(PORTA_PDR_ADDR,
 		sil_reb_mem(PORTA_PDR_ADDR) & ~PORT_PDR_B7_BIT);
@@ -101,5 +85,5 @@
 #ifdef TOPPERS_OMIT_TECS
 	/*
-	 *  ã·ãªã¢ã«ãã¼ãã®è¨­å®
+	 *  シリアルポートの設定
 	 */
 	serial_init(&log_serial, STDIO_UART_TX, STDIO_UART_RX);
@@ -108,47 +92,38 @@
 #endif
 
-	/* ãã¼ãP40ï½P47ãå¨è¾ºæ©å¨ã« */
+	/* ポートP40～P47を周辺機器に */
 	sil_wrb_mem(PORT4_PMR_ADDR, 0xFF);
 
-	/* ãã¼ãP40ï½P47ãå
-¥åãã¼ãã«ãã */
+	/* ポートP40～P47を入力ポートにする */
 	sil_wrb_mem(PORT4_PDR_ADDR, 0x00);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-	/* P21ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ RXD0ã¨ãã */
+	/* P21端子機能制御レジスタ RXD0とする */
 	sil_wrb_mem(MPC_P21PFS_ADDR, 0x0a);
-	/* P20ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ TXD0ã¨ãã */
+	/* P20端子機能制御レジスタ TXD0とする */
 	sil_wrb_mem(MPC_P20PFS_ADDR, 0x0a);
 
-	/* P40ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN000ã¨ãã */
+	/* P40端子機能制御レジスタ アナログ入力AN000とする */
 	sil_wrb_mem(MPC_P40PFS_ADDR, 0x80);
-	/* P41ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN001ã¨ãã */
+	/* P41端子機能制御レジスタ アナログ入力AN001とする */
 	sil_wrb_mem(MPC_P41PFS_ADDR, 0x80);
-	/* P42ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN002ã¨ãã */
+	/* P42端子機能制御レジスタ アナログ入力AN002とする */
 	sil_wrb_mem(MPC_P42PFS_ADDR, 0x80);
-	/* P43ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN003ã¨ãã */
+	/* P43端子機能制御レジスタ アナログ入力AN003とする */
 	sil_wrb_mem(MPC_P43PFS_ADDR, 0x80);
-	/* P44ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN004ã¨ãã */
+	/* P44端子機能制御レジスタ アナログ入力AN004とする */
 	sil_wrb_mem(MPC_P44PFS_ADDR, 0x80);
-	/* P45ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN005ã¨ãã */
+	/* P45端子機能制御レジスタ アナログ入力AN005とする */
 	sil_wrb_mem(MPC_P45PFS_ADDR, 0x80);
-	/* P46ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN006ã¨ãã */
+	/* P46端子機能制御レジスタ アナログ入力AN006とする */
 	sil_wrb_mem(MPC_P46PFS_ADDR, 0x80);
-	/* P47ç«¯å­æ©è½å¶å¾¡ã¬ã¸ã¹ã¿ ã¢ãã­ã°å
-¥åAN007ã¨ãã */
+	/* P47端子機能制御レジスタ アナログ入力AN007とする */
 	sil_wrb_mem(MPC_P47PFS_ADDR, 0x80);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+	/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 }
@@ -156,5 +131,5 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ã®çµäºã«ã¼ãã³
+ *  ターゲットシステムの終了ルーチン
  */
 void
@@ -162,5 +137,5 @@
 {
 	/*
-	 *	ãã­ã»ããµä¾å­ã®çµäºå¦ç
+	 *	プロセッサ依存の終了処理
 	 */
 	prc_terminate();
@@ -170,5 +145,5 @@
 #ifdef TOPPERS_OMIT_TECS
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºå
+ *  システムログの低レベル出力のための文字出力
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_kernel_impl.h	(revision 389)
@@ -10,47 +10,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -58,8 +43,8 @@
 
 /*
- *		ã¿ã¼ã²ããä¾å­ã¢ã¸ã¥ã¼ã«ï¼GR-SAKURAç¨ï¼
+ *		ターゲット依存モジュール（GR-SAKURA用）
  *
- *  ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ï¼kernel_impl.hã®ã¿ã¼
- *  ã²ããä¾å­é¨ã®ä½ç½®ä»ãã¨ãªãï¼
+ *  カーネルのターゲット依存部のインクルードファイル．kernel_impl.hのター
+ *  ゲット依存部の位置付けとなる．
  */
 
@@ -68,5 +53,5 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ã®ãã¼ãã¦ã§ã¢è³æºã®å®ç¾©
+ *  ターゲットシステムのハードウェア資源の定義
  */
 #include "gr_sakura.h"
@@ -74,9 +59,9 @@
 
 /*
- *  ããã©ã«ãã®éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ã®ã¹ã¿ãã¯é åã®å®ç¾©
+ *  デフォルトの非タスクコンテキスト用のスタック領域の定義
  *
- *  ã¹ã¿ãã¯ãµã¤ãºãå¤æ´ããå ´åã¯, sectrx.incã®_DEFAULT_ISTACK
- *  ã©ãã«ã®ä½ç½®ã«ãã.blkbå½ä»¤ã®ãµã¤ãºã¨, ä»¥ä¸DEFAULT_ISTKSZã®
- *  ãµã¤ãºãåããã¦åãå¤ã«å¤æ´ãããã¨.
+ *  スタックサイズを変更する場合は, sectrx.incの_DEFAULT_ISTACK
+ *  ラベルの位置にある.blkb命令のサイズと, 以下DEFAULT_ISTKSZの
+ *  サイズを合わせて同じ値に変更すること.
  */
 #define DEFAULT_ISTKSZ		( 0x400 )
@@ -84,5 +69,5 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®æå­åºåã«ä½¿ç¨ãããã¼ãã®å®ç¾©  
+ *  ターゲット依存の文字出力に使用するポートの定義  
  */
 #define TARGET_PUTC_PORTID	( 1 )
@@ -92,12 +77,12 @@
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã®åæå
+ *  ターゲットシステム依存の初期化
  */
 extern void	target_initialize( void );
 
 /*
- *  ã¿ã¼ã²ããã·ã¹ãã ã®çµäº
+ *  ターゲットシステムの終了
  *
- *  ã·ã¹ãã ãçµäºããæã«ä½¿ãï¼
+ *  システムを終了する時に使う．
  */
 extern void	target_exit( void )	NoReturn;
@@ -107,17 +92,17 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX630ç¨ï¼
+ *  プロセッサ依存モジュール（RX630用）
  */
 #include "rx630_kernel_impl.h"
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã«é¢ããè¨­å®
+ *  トレースログに関する設定
  */
 #define TCNT_TRACE_BUFFER	( 32 )
 
 /*
- *  ãã¬ã¼ã¹ã­ã°åºåããç®æã®é¸æ
- *    ã­ã°åºåããç®æã1ã§å®ç¾©
- *    ã­ã°åºåããªãç®æã0ã§å®ç¾©
+ *  トレースログ出力する箇所の選択
+ *    ログ出力する箇所を1で定義
+ *    ログ出力しない箇所を0で定義
  */
 #ifdef TOPPERS_ENABLE_TRACE
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（GR-SAKURA用）
  */
 
@@ -69,35 +54,32 @@
 
 /*
- *  SIOãã¼ãåæåãã­ãã¯ã®å®ç¾©
+ *  SIOポート初期化ブロックの定義
  */
 typedef struct sio_port_initialization_block {
-	char		*path;			/* ãã¡ã¤ã«ã®ãã¹å */
+	char		*path;			/* ファイルのパス名 */
 } SIOPINIB;
 
 /*
- *  SIOãã¼ãç®¡çãã­ãã¯ã®å®ç¾©
+ *  SIOポート管理ブロックの定義
  */
 struct sio_port_control_block {
-	const SIOPINIB *p_siopinib;	/* SIOãã¼ãåæåãã­ãã¯ */
-	intptr_t	exinf;			/* æ¡å¼µæ
-å ± */
-	bool_t		opened;		/* ãªã¼ãã³æ¸ã¿ãã©ã° */
-	struct termios saved_term;	/* å
-ã®ç«¯æ«å¶å¾¡æ
-å ± */
-
-	int_t		read_fd;		/* èª­åºãç¨ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ */
-	bool_t		rcv_flag;		/* åä¿¡æå­ãããã¡æå¹ãã©ã° */
-	char		rcv_buf;		/* åä¿¡æå­ãããã¡ */
-	bool_t		rcv_rdy;		/* åä¿¡éç¥ã³ã¼ã«ããã¯è¨±å¯ãã©ã° */
-
-	int_t		write_fd;		/* æ¸è¾¼ã¿ç¨ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ */
-	bool_t		snd_flag;		/* éä¿¡æå­ãããã¡æå¹ãã©ã° */
-	char		snd_buf;		/* éä¿¡æå­ãããã¡ */
-	bool_t		snd_rdy;		/* éä¿¡éç¥ã³ã¼ã«ããã¯è¨±å¯ãã©ã° */
+	const SIOPINIB *p_siopinib;	/* SIOポート初期化ブロック */
+	intptr_t	exinf;			/* 拡張情報 */
+	bool_t		opened;		/* オープン済みフラグ */
+	struct termios saved_term;	/* 元の端末制御情報 */
+
+	int_t		read_fd;		/* 読出し用ファイルディスクリプタ */
+	bool_t		rcv_flag;		/* 受信文字バッファ有効フラグ */
+	char		rcv_buf;		/* 受信文字バッファ */
+	bool_t		rcv_rdy;		/* 受信通知コールバック許可フラグ */
+
+	int_t		write_fd;		/* 書込み用ファイルディスクリプタ */
+	bool_t		snd_flag;		/* 送信文字バッファ有効フラグ */
+	char		snd_buf;		/* 送信文字バッファ */
+	bool_t		snd_rdy;		/* 送信通知コールバック許可フラグ */
 };
 
 /*
- *  SIOãã¼ãåæåãã­ãã¯
+ *  SIOポート初期化ブロック
  */
 const SIOPINIB siopinib_table[TNUM_SIOP] = {
@@ -106,10 +88,10 @@
 
 /*
- *  SIOãã¼ãç®¡çãã­ãã¯ã®ã¨ãªã¢
+ *  SIOポート管理ブロックのエリア
  */
 SIOPCB	siopcb_table[TNUM_SIOP];
 
 /*
- *  SIOãã¼ãIDããç®¡çãã­ãã¯ãåãåºãããã®ãã¯ã­
+ *  SIOポートIDから管理ブロックを取り出すためのマクロ
  */
 #define INDEX_SIOP(siopid)	((uint_t)((siopid) - 1))
@@ -117,5 +99,5 @@
 
 /*
- *  SIOãã©ã¤ãã®åæå
+ *  SIOドライバの初期化
  */
 void
@@ -126,5 +108,5 @@
 
 	/*
-	 *  SIOãã¼ãç®¡çãã­ãã¯ã®åæå
+	 *  SIOポート管理ブロックの初期化
 	 */
 	for (i = 0; i < TNUM_SIOP; i++) {
@@ -136,5 +118,5 @@
 
 /*
- *  SIOãã©ã¤ãã®çµäºå¦ç
+ *  SIOドライバの終了処理
  */
 void
@@ -144,5 +126,5 @@
 
 	/*
-	 *  ãªã¼ãã³ããã¦ããSIOãã¼ãã®ã¯ã­ã¼ãº
+	 *  オープンされているSIOポートのクローズ
 	 */
 	for (i = 0; i < TNUM_SIOP; i++) {
@@ -152,5 +134,5 @@
 
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 SIOPCB *
@@ -173,6 +155,5 @@
 		}
 		else {
-			fd = STDIN_FILENO;					/* æ¨æºå
-¥åºåãä½¿ã */
+			fd = STDIN_FILENO;					/* 標準入出力を使う */
 			p_siopcb->read_fd = STDIN_FILENO;
 			p_siopcb->write_fd = STDOUT_FILENO;
@@ -197,5 +178,5 @@
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 void
@@ -218,5 +199,5 @@
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 bool_t
@@ -240,5 +221,5 @@
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 bool_t
@@ -260,5 +241,5 @@
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 bool_t
@@ -284,5 +265,5 @@
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 int_t
@@ -306,5 +287,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 void
@@ -322,5 +303,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *	SIOãã©ã¤ãï¼GR-SAKURAç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *	SIOドライバ（GR-SAKURA用）のコンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_serial.h	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（GR-SAKURA用）
  */
 
@@ -65,84 +50,83 @@
 
 /*
- *  SIOãã¼ãæ°ã®å®ç¾©
+ *  SIOポート数の定義
  */
-//#define TNUM_SIOP		1		/* ãµãã¼ãããSIOãã¼ãã®æ° */
+//#define TNUM_SIOP		1		/* サポートするSIOポートの数 */
 
 /*
- *  SIOå²è¾¼ã¿ãç»é²ããããã®å®ç¾©
+ *  SIO割込みを登録するための定義
  */
-#define ISRPRI_SIO		1		/* SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®ISRåªå
-åº¦ */
+#define ISRPRI_SIO		1		/* SIOの割込みサービスルーチンのISR優先度 */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  SIOãã¼ãç®¡çãã­ãã¯ã®å®ç¾©
+ *  SIOポート管理ブロックの定義
  */
 typedef struct sio_port_control_block	SIOPCB;
 
 /*
- *  ã³ã¼ã«ããã¯ã«ã¼ãã³ã®è­å¥çªå·
+ *  コールバックルーチンの識別番号
  */
-#define SIO_RDY_SND		1U		/* éä¿¡å¯è½ã³ã¼ã«ããã¯ */
-#define SIO_RDY_RCV		2U		/* åä¿¡éç¥ã³ã¼ã«ããã¯ */
+#define SIO_RDY_SND		1U		/* 送信可能コールバック */
+#define SIO_RDY_RCV		2U		/* 受信通知コールバック */
 
 /*
- *  SIOãã©ã¤ãã®åæå
+ *  SIOドライバの初期化
  */
 extern void		sio_initialize(intptr_t exinf);
 
 /*
- *  SIOãã©ã¤ãã®çµäºå¦ç
+ *  SIOドライバの終了処理
  */
 extern void		sio_terminate(intptr_t exinf);
 
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 extern SIOPCB	*sio_opn_por(ID siopid, intptr_t exinf);
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 extern void		sio_cls_por(SIOPCB *p_siopcb);
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 extern bool_t	sio_isr_snd(ID siopid);
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 extern bool_t	sio_isr_rcv(ID siopid, char c);
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 extern bool_t	sio_snd_chr(SIOPCB *siopcb, char c);
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 extern int_t	sio_rcv_chr(SIOPCB *siopcb);
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 extern void		sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn);
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 extern void		sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn);
 
 /*
- *  SIOãã¼ãããã®éä¿¡å¯è½ã³ã¼ã«ããã¯
+ *  SIOポートからの送信可能コールバック
  */
 extern void		sio_irdy_snd(intptr_t exinf);
 
 /*
- *  SIOãã¼ãããã®åä¿¡éç¥ã³ã¼ã«ããã¯
+ *  SIOポートからの受信通知コールバック
  */
 extern void		sio_irdy_rcv(intptr_t exinf);
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_sil.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_sil.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_sil.h	(revision 389)
@@ -5,47 +5,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,11 +38,10 @@
 
 /*
- *		sil.hã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+ *		sil.hのターゲット依存部（GR-SAKURA用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼sil.hã®å
-é ­ã§ã¤ã³ã¯ã«ã¼ããããï¼ä»ã®ãã¡
- *  ã¤ã«ããã¯ç´æ¥ã¤ã³ã¯ã«ã¼ããããã¨ã¯ãªãï¼ãã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼
- *  ãããåã«ï¼t_stddef.hãã¤ã³ã¯ã«ã¼ããããã®ã§ï¼ãããã«ä¾å­ãã¦ã
- *  ããï¼
+ *  このインクルードファイルは，sil.hの先頭でインクルードされる．他のファ
+ *  イルからは直接インクルードすることはない．このファイルをインクルー
+ *  ドする前に，t_stddef.hがインクルードされるので，それらに依存しても
+ *  よい．
  */
 
@@ -66,6 +50,5 @@
 
 /*
- *  å¾®å°æéå¾
-ã¡ã®ããã®å®ç¾©
+ *  微少時間待ちのための定義
  */
 #define SIL_DLY_TIM1     69
@@ -73,6 +56,5 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_sil.h"
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_stddef.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_stddef.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_stddef.h	(revision 389)
@@ -11,47 +11,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -59,12 +44,10 @@
 
 /*
- *  t_stddef.hã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+ *  t_stddef.hのターゲット依存部（GR-SAKURA用）
  *
- *  ãã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã¯ï¼t_stddef.hã®å
-é ­ã§ã¤ã³ã¯ã«ã¼ããããï¼
- *  ä»ã®ãã¡ã¤ã«ããã¯ç´æ¥ã¤ã³ã¯ã«ã¼ããããã¨ã¯ãªãï¼ä»ã®ã¤ã³ã¯ã«ã¼ã
- *  ãã¡ã¤ã«ã«å
-ç«ã£ã¦å¦çãããããï¼ä»ã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã«ä¾å­ã
- *  ã¦ã¯ãªããªãï¼
+ *  このインクルードファイルは，t_stddef.hの先頭でインクルードされる．
+ *  他のファイルからは直接インクルードすることはない．他のインクルード
+ *  ファイルに先立って処理されるため，他のインクルードファイルに依存し
+ *  てはならない．
  */
 
@@ -73,12 +56,11 @@
 
 /*
- *  ã¿ã¼ã²ãããè­å¥ããããã®ãã¯ã­ã®å®ç¾©
+ *  ターゲットを識別するためのマクロの定義
  */
-#define TOPPERS_GRSAKURA			/* ã·ã¹ãã ç¥ç§° */
+#define TOPPERS_GRSAKURA			/* システム略称 */
 
 
 /*
- *  éçºç°å¢ã§å
-±éãªå®ç¾©
+ *  開発環境で共通な定義
  */
 #ifndef TOPPERS_MACRO_ONLY
@@ -90,11 +72,10 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_stddef.h"
 
 /*
- *  ã¢ãµã¼ã·ã§ã³ã®å¤±ææã®å®è¡ä¸­æ­å¦ç
+ *  アサーションの失敗時の実行中断処理
  */
 #ifndef TOPPERS_MACRO_ONLY
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_support.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_support.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_support.c	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *	ã¿ã¼ã²ããã·ã¹ãã ä¾å­ã¢ã¸ã¥ã¼ã«ï¼GR-SAKURAç¨ï¼
+ *	ターゲットシステム依存モジュール（GR-SAKURA用）
  */
 
@@ -63,27 +48,24 @@
 {
 	/*
-	 * åä½ã¢ã¼ãè¨­å®
+	 * 動作モード設定
 	 *
-	 * åä½ã¢ã¼ãã¯ãã¼ãä¸ã®ç«¯å­ã«ãã£ã¦æ±ºå®ããããã,
-	 * ããã§ã¯ç¹å¥è¨­å®ããªã.
-	 * ãã ã, ãªãã«ã¨ã³ãã£ã¢ã³/ã·ã³ã°ã«ãããã¢ã¼ã
-	 * ã§ãããã¨ãåæã¨ãã.
+	 * 動作モードはボード上の端子によって決定されるため,
+	 * ここでは特別設定しない.
+	 * ただし, リトルエンディアン/シングルチップモード
+	 * であることを前提とする.
 	 *
-	 * ã¾ããªã»ããå¾, å
-èµROMï¼æå¹, å
-èµRAMï¼æå¹, å¤é¨ãã¹ï¼ç¡å¹
-	 * ã§ãã.
+	 * またリセット後, 内蔵ROM：有効, 内蔵RAM：有効, 外部バス：無効
+	 * である.
 	 */
 
 	/*
-	 * ã¯ã­ãã¯è¨­å®
+	 * クロック設定
 	 *
-	 * å
-¥åï¼12MHz
-	 * PLLåè·¯ï¼12 x 8 = 96MHz
-	 * ã·ã¹ãã ã¯ã­ãã¯ï¼96MHz
-	 * å¨è¾ºã¢ã¸ã¥ã¼ã«ã¯ã­ãã¯ï¼48MHz
-	 * å¤é¨ãã¹ã¯ã­ãã¯ï¼96MHz
-	 * ã¨ãã.
+	 * 入力：12MHz
+	 * PLL回路：12 x 8 = 96MHz
+	 * システムクロック：96MHz
+	 * 周辺モジュールクロック：48MHz
+	 * 外部バスクロック：96MHz
+	 * とする.
 	 */
 	sil_wrb_mem(PORT3_PDR_ADDR,
@@ -98,10 +80,10 @@
 	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xa503);
 
-	/* ã¡ã¤ã³ã¯ã­ãã¯çºæ¯å¨å¼·å¶çºæ¯ */
+	/* メインクロック発振器強制発振 */
 	while((sil_reb_mem(SYSTEM_MOFCR_ADDR) & SYSTEM_MOFCR_MOFXIN) == 0)
 		sil_wrb_mem(SYSTEM_MOFCR_ADDR,
 			sil_reb_mem(SYSTEM_MOFCR_ADDR) | SYSTEM_MOFCR_MOFXIN);
 
-	/* ã¡ã¤ã³ã¯ã­ãã¯çºæ¯å¨åä½ */
+	/* メインクロック発振器動作 */
 	while((sil_reb_mem(SYSTEM_MOSCCR_ADDR) & SYSTEM_MOSCCR_MOSTP) != 0)
 		sil_wrb_mem(SYSTEM_MOSCCR_ADDR,
@@ -119,5 +101,5 @@
 	sil_wrh_mem(SYSTEM_SCKCR2_ADDR, 0x0033);
 
-	/* PLLåè·¯é¸æ */
+	/* PLL回路選択 */
 	sil_wrh_mem(SYSTEM_SCKCR3_ADDR,
 		(sil_reh_mem(SYSTEM_SCKCR3_ADDR) & ~SYSTEM_SCKCR3_CKSEL_MASK)
@@ -125,13 +107,10 @@
 
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ããã
+	 * モジュールストップ
 	 *
-	 * ãªã»ããå¾, åä½ãã¦ããå
-èµå¨è¾ºã¢ã¸ã¥ã¼ã«ã¯DMAC, DTC,
-	 * å
-èµRAMã®ã¿ã§ãã.
-	 * ããä»¥å¤ã®å
-èµå¨è¾ºã¢ã¸ã¥ã¼ã«ã«é¢ãã¦ã¯ä½¿ç¨ããå´ã§
-	 * è¨­å®ãããã¨.
+	 * リセット後, 動作している内蔵周辺モジュールはDMAC, DTC,
+	 * 内蔵RAMのみである.
+	 * それ以外の内蔵周辺モジュールに関しては使用する側で
+	 * 設定すること.
 	 */
 	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xa500);
@@ -141,8 +120,6 @@
 {
 	/*
-	 * æ¬ã³ã³ãã¤ã©ã§ã¯weak definitionã®æ©è½ãç¡ããã,
-	 * ç¹ã«å¿
-è¦ãªå¦çã¯ãªãã, å¿
-ãå¼ã³åºããã¨ã¨ãã.
+	 * 本コンパイラではweak definitionの機能が無いため,
+	 * 特に必要な処理はないが, 必ず呼び出すこととする.
 	 */
 }
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_syssvc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_syssvc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_syssvc.h	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,10 +45,9 @@
 
 /*
- *		ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾å­é¨ï¼GR-SAKURAç¨ï¼
+ *		システムサービスのターゲット依存部（GR-SAKURA用）
  *
- *  ã·ã¹ãã ãµã¼ãã¹ã®ã¿ã¼ã²ããä¾å­é¨ã®ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ï¼ãã®ãã¡
- *  ã¤ã«ã®å
-å®¹ã¯ï¼ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«ã«è¨è¿°ããï¼ãã®ãã¡ã¤ã«ã¯
- *  ç¡ããªãè¦è¾¼ã¿ï¼
+ *  システムサービスのターゲット依存部のインクルードファイル．このファ
+ *  イルの内容は，コンポーネント記述ファイルに記述され，このファイルは
+ *  無くなる見込み．
  */
 
@@ -73,10 +57,10 @@
 
 /*
- *  ãã­ã»ããµä¾å­ã®å®ç¾©
+ *  プロセッサ依存の定義
  */
 #include "prc_syssvc.h"
 
 /*
- *  ãã¬ã¼ã¹ã­ã°ã«é¢ããè¨­å®
+ *  トレースログに関する設定
  */
 #ifdef TOPPERS_ENABLE_TRACE
@@ -86,6 +70,5 @@
 
 /*
- *  ãã¼ãä¾å­æ
-å ±ã®èª­ã¿è¾¼ã¿
+ *  ボード依存情報の読み込み
  */
 #include "gr_sakura.h"
@@ -93,5 +76,5 @@
 
 /*
- *  èµ·åã¡ãã»ã¼ã¸ã®ã¿ã¼ã²ããã·ã¹ãã å
+ *  起動メッセージのターゲットシステム名
  */
 #define	TARGET_NAME	"GR-SAKURA"
@@ -99,7 +82,7 @@
 #ifdef TOPPERS_OMIT_TECS
 /*
- *  ã·ã¹ãã ã­ã°ã®ä½ã¬ãã«åºåã®ããã®æå­åºå
+ *  システムログの低レベル出力のための文字出力
  *
- *  ã¿ã¼ã²ããä¾å­ã®æ¹æ³ã§ï¼æå­cãè¡¨ç¤º/åºå/ä¿å­ããï¼
+ *  ターゲット依存の方法で，文字cを表示/出力/保存する．
  */
 extern void	target_fput_log( char c );
@@ -107,6 +90,6 @@
 
 /*
- *  èµ·åã¡ãã»ã¼ã¸ã«ã¿ã¼ã²ããä¾å­é¨ã®èä½æ¨©è¡¨ç¤ºã
- *  è¿½å ããããã®ãã¯ã­ï¼
+ *  起動メッセージにターゲット依存部の著作権表示を
+ *  追加するためのマクロ．
  */
 #ifdef PRC_COPYRIGHT
@@ -116,10 +99,10 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãæ°ã®å®ç¾©
+ *  シリアルポート数の定義
  */
 #define TNUM_PORT			UINT_C( 2 )
 
 /*
- *  ä½¿ç¨ããã·ãªã¢ã«ãã¼ãID
+ *  使用するシリアルポートID
  */
 #define SIO_PORTID			UINT_C( 1 )
@@ -130,5 +113,5 @@
 
 /*
- *  ä½¿ç¨ããã·ãªã¢ã«ãã¼ãã®PinName
+ *  使用するシリアルポートのPinName
  */
 #define STDIO_UART_TX P20
@@ -136,7 +119,7 @@
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯é¢é£ã®å®æ°ã®å®ç¾©
+ *  システムログタスク関連の定数の定義
  *
- *  ããã©ã«ãå¤ã®éãï¼
+ *  デフォルト値の通り．
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_test.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_test.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_test.h	(revision 389)
@@ -12,47 +12,32 @@
  *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,5 +45,5 @@
 
 /*
- *		ãã¹ããã­ã°ã©ã ã®ã¿ã¼ã²ããä¾å­å®ç¾©ï¼GR-SAKURAç¨ï¼
+ *		テストプログラムのターゲット依存定義（GR-SAKURA用）
  */
 
@@ -67,11 +52,10 @@
 
 /*
- *  ãã­ã»ããµã§å
-±éãªå®ç¾©
+ *  プロセッサで共通な定義
  */
 #include "prc_test.h"
 
 /*
- *  ã¿ã¹ã¯ã§ä½¿ç¨ããã·ãªã¢ã«ãã¼ãID
+ *  タスクで使用するシリアルポートID
  */
 #define	TASK_PORTID		( 1 )
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.c	(revision 389)
@@ -14,47 +14,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -62,5 +47,5 @@
 
 /*
- *		ã¿ã¤ããã©ã¤ãï¼GR-SAKURAç¨ï¼
+ *		タイマドライバ（GR-SAKURA用）
  */
 
@@ -74,10 +59,10 @@
 
 /*
- * ä¸ä½ã¿ã¤ãã½ããã«ã¦ã³ã¿
+ * 上位タイマソフトカウンタ
  */
 static uint16_t elapse_upper_timer = 0;
 
 /*
- * ä¸ä¸ä½ã¿ã¤ãè¨­å®ã«ã¦ã³ã¿
+ * 上下位タイマ設定カウンタ
  */
 static uint16_t timer_upper_set_count = 0, timer_lower_set_count = 0;
@@ -85,18 +70,18 @@
 #ifdef TOPPERS_SUPPORT_OVRHDR
 
-/* ãªã¼ãã©ã³ä¸ä¸ä½ã¿ã¤ãè¨­å®ã«ã¦ã³ã¿ */
+/* オーバラン上下位タイマ設定カウンタ */
 static uint16_t timer_ovr_upper_set_count = 0, timer_ovr_lower_set_count = 0;
 
-/* ãªã¼ãã©ã³ã¿ã¤ãå®è¡ä¸­ãã©ã° */
+/* オーバランタイマ実行中フラグ */
 static bool_t timer_ovr_running_flg = false;
 
-/* ãªã¼ãã©ã³ã¿ã¤ãéå§æHRTã¿ã¤ãå¤ */
+/* オーバランタイマ開始時HRTタイマ値 */
 static HRTCNT timer_ovr_hrt_backup;
 
-/* ãªã¼ãã©ã³ã¿ã¤ãè¨­å®æé */
+/* オーバランタイマ設定時間 */
 static PRCTIM timer_ovr_ovrtim_backup;
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢
+ *  オーバランタイマ割込み要求のクリア
  */
 Inline void
@@ -109,5 +94,5 @@
 
 /*
- *  ã¿ã¤ãã®åæåå¦ç
+ *  タイマの初期化処理
  */
 void
@@ -115,13 +100,13 @@
 {
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã0 è§£é¤
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット0 解除
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA15_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
 
 	/* 
-	 * ã¿ã¤ãåæ­¢ 
+	 * タイマ停止 
 	 */
 	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -129,6 +114,6 @@
 	
 	/*
- 	 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ã­ãã¯è¨­å®
-	 * PCLK/8ãé¸æ
+ 	 * カウントアップに用いられるクロック設定
+	 * PCLK/8を選択
 	 */
 	sil_wrh_mem(CMT0_CMCR_ADDR, CMT_PCLK_DIV_8);
@@ -136,5 +121,5 @@
 
 	/* 
-	 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨­å®
+	 * コンペアマッチタイマカウンタ設定
 	 */
 	sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);
@@ -142,5 +127,5 @@
 
 	/* 
-	 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å®
+	 * コンペアマッチタイマ周期設定
 	 */
 	sil_wrh_mem(CMT0_CMCOR_ADDR, 0); /* lower */
@@ -149,6 +134,5 @@
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿ï¼28,29ï¼
+	 * コンペアマッチタイマ割り込み要求先設定レジスタ（28,29）
 	 */
 	sil_wrb_mem(ICU_ISELR028_ADDR, ICU_ISEL_CPU);
@@ -156,5 +140,5 @@
 
 	/*
-	 *  ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ動作開始前の割込み要求をクリア
 	 */
 	clear_int(INTNO_TIMER0);
@@ -162,5 +146,5 @@
 
 	/* 
-	 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ãè¨±å¯
+	 * コンペアマッチタイマ割り込みを許可
 	 */
 //	sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -170,5 +154,5 @@
 
 	/* 
-	 * ã¿ã¤ãåä½éå§
+	 * タイマ動作開始
 	 */
 //	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -179,5 +163,5 @@
 
 /*
- *  ã¿ã¤ãã®åæ­¢å¦ç
+ *  タイマの停止処理
  */
 void
@@ -185,5 +169,5 @@
 {
 	/* 
-	 * ã¿ã¤ãåæ­¢  lower, upper
+	 * タイマ停止  lower, upper
 	 */
 	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -191,5 +175,5 @@
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢ãlower,upper
+	 * タイマ割り込み禁止　lower,upper
 	 */
 	sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -199,5 +183,5 @@
 
 	/*
-	 *  ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ割込み要求をクリア
 	 */
 	clear_int(INTNO_TIMER0);
@@ -205,19 +189,19 @@
 
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã0 åæ­¢
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット0 停止
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA15_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-}
-
-/*
- *  ä¸ä½ã¿ã¤ãå²è¾¼ã¿ãã³ãã©(CMT0)
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
+}
+
+/*
+ *  下位タイマ割込みハンドラ(CMT0)
  */
 void target_lower_timer_handler(void)
 {
 	/*
-	 * ã¿ã¤ãåæ­¢
+	 * タイマ停止
 	 */
 	sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -225,5 +209,5 @@
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢
+	 * タイマ割り込み禁止
 	 */
 	sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -231,15 +215,15 @@
 
 	/*
-	 * å²ãè¾¼ã¿è¦å ã¯ãªã¢
+	 * 割り込み要因クリア
 	 */
 	clear_int(INTNO_TIMER0);
 
 	/*
-	 * ã«ã¦ã³ãè¨­å®ã¯ãªã¢
+	 * カウント設定クリア
 	 */
 	timer_lower_set_count = 0;
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿å¦ç
+	 * タイマ割り込み処理
 	 */
 	signal_time();
@@ -247,15 +231,15 @@
 
 /*
- *  ä¸ä½ã¿ã¤ãå²è¾¼ã¿ãã³ãã©(CMT1)
+ *  上位タイマ割込みハンドラ(CMT1)
  */
 void target_upper_timer_handler(void)
 {
 	/*
-	 * ä¸ä½ã¿ã¤ãã½ããã«ã¦ã³ã¿æ´æ°
+	 * 上位タイマソフトカウンタ更新
 	 */
 	elapse_upper_timer++;
 
 	/*
-	 * ä¸ä½ã¿ã¤ãè¨­å®å¤æ´æ°
+	 * 上位タイマ設定値更新
 	 */
 	if(timer_upper_set_count > 0) {
@@ -264,10 +248,10 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ããããå¦ç
+	 * 上位タイママッチ処理
 	 */
 	if(timer_upper_set_count == 0){
 		if(timer_lower_set_count > 0){
 			/*
-			 * ä¸ä½ã¿ã¤ãè¨­å®ãéå§
+			 * 下位タイマ設定、開始
 			 */
 			sil_wrh_mem(CMT0_CMCOR_ADDR, timer_lower_set_count);
@@ -280,5 +264,5 @@
 		else{
 			/*
-			 * ä¸ä½ã¿ã¤ãå²ãè¾¼ã¿å¼·å¶èµ·å
+			 * 下位タイマ割り込み強制起動
 			 */
 			target_hrt_raise_event();
@@ -289,5 +273,5 @@
 	if(timer_ovr_running_flg == true) {
 		/*
-		 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãè¨­å®å¤æ´æ°
+		 * オーバラン上位タイマ設定値更新
 		 */
 		if(timer_ovr_upper_set_count > 0) {
@@ -296,10 +280,10 @@
 
 		/*
-		 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ããããå¦ç
+		 * オーバラン上位タイママッチ処理
 		 */
 		if(timer_ovr_upper_set_count == 0) {
 			if(timer_ovr_lower_set_count > 0){
 				/*
-				 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãè¨­å®ãéå§
+				 * オーバラン下位タイマ設定、開始
 				 */
 				sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);
@@ -313,5 +297,5 @@
 			else {
 				/*
-				 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå²ãè¾¼ã¿å¼·å¶èµ·å
+				 * オーバラン下位タイマ割り込み強制起動
 				 */
 				target_ovrtimer_raise_event();
@@ -323,5 +307,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã¸ã®å²è¾¼ã¿ã¿ã¤ãã³ã°ã®è¨­å®
+ *  高分解能タイマへの割込みタイミングの設定
  */
 void
@@ -332,5 +316,5 @@
 
 	/*
-	 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ
+	 * 時間 -> タイマカウンタ 変換
 	 */
 	total_timer_count = hrtcnt * USEC_CONVERT_VALUE;
@@ -339,5 +323,5 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´
+	 * 上位タイマカウンタ現在値で調整
 	 */
 	current_timer_count_work = timer_lower_set_count + sil_reh_mem(CMT1_CMCNT_ADDR);
@@ -348,24 +332,24 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ãè¨­å®
+	 * 下位タイマ設定
 	 */
 	if(timer_upper_set_count == 0 && timer_lower_set_count > 0) {
 		/*
-		 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨­å®
+		 * コンペアマッチタイマカウンタ設定
 		 */
 		sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);
 
 		/*
-		 * å²ãè¾¼ã¿è¦å ã¯ãªã¢
+		 * 割り込み要因クリア
 		 */
 		clear_int(INTNO_TIMER0);
 
 		/*
-		 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å®
+		 * コンペアマッチタイマ周期設定
 		 */
 		sil_wrh_mem(CMT0_CMCOR_ADDR, timer_lower_set_count);
 
 		/*
-		 *  ã¿ã¤ãå²ãè¾¼ã¿è¨±å¯
+		 *  タイマ割り込み許可
 		 */
 		sil_wrh_mem(CMT0_CMCR_ADDR,
@@ -373,5 +357,5 @@
 
 		/*
-		 * ã¿ã¤ãéå§
+		 * タイマ開始
 		 */
 		sil_wrh_mem(CMT_CMSTR0_ADDR,
@@ -381,5 +365,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±
+ *  高分解能タイマ割込みの要求
  */
 void
@@ -387,19 +371,18 @@
 {
 	/*
-	 * ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å
-	 * æ³¨æï¼åæ­¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã
-	 */
-	sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);	/* ã«ã¦ã³ã¿åæå	*/
-	clear_int(INTNO_TIMER0);			/* è¦æ±ã¯ãªã¢		*/
-	sil_wrh_mem(CMT0_CMCOR_ADDR, 0U);	/* ãããå¨æè¨­å®	*/
-	sil_wrh_mem(CMT0_CMCR_ADDR,			/* å²ãè¾¼ã¿è¨±å¯	*/
+	 * 下位タイマ強制割り込み起動
+	 * 注意：停止するまで割り込みが繰り返し発生する
+	 */
+	sil_wrh_mem(CMT0_CMCNT_ADDR, 0U);	/* カウンタ初期化	*/
+	clear_int(INTNO_TIMER0);			/* 要求クリア		*/
+	sil_wrh_mem(CMT0_CMCOR_ADDR, 0U);	/* マッチ周期設定	*/
+	sil_wrh_mem(CMT0_CMCR_ADDR,			/* 割り込み許可	*/
 			sil_reh_mem(CMT0_CMCR_ADDR) | CMT0_CMCR_CMIE_BIT);
-	sil_wrh_mem(CMT_CMSTR0_ADDR,		/* ã¿ã¤ãèµ·å		*/
+	sil_wrh_mem(CMT_CMSTR0_ADDR,		/* タイマ起動		*/
 			sil_reh_mem(CMT_CMSTR0_ADDR) | CMT_CMSTR0_STR0_BIT);
 }
 
 /*
- * é«åè§£è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èª­åºããå
-é¨å¦ç
+ * 高分解能タイマの現在のカウント値の読出し　内部処理
  */
 HRTCNT target_hrt_get_current_convert(void)
@@ -412,5 +395,5 @@
 
 	/*
-	 * ä¸ä½ã¿ã¤ã ã³ã³ãã¢ããããã§ãã¯
+	 * 上位タイマ コンペアマッチチェック
 	 */
 	if (probe_int(INTNO_TIMER1)) {
@@ -421,5 +404,5 @@
 	time = (((HRTCNT)local_eut * CMCOR_PERIOD) + (HRTCNT)local_cnt) / USEC_CONVERT_VALUE;
 #ifdef _MSC_VER
-	// ã·ãã¥ã¬ã¼ã·ã§ã³ã§ã¯ã¿ã¤ãã¼ãæ»ããªãããèª¿æ´
+	// シミュレーションではタイマーが戻らないよう調整
 	if (time < current_hrtcnt)
 		time = current_hrtcnt + ((HRTCNT)local_cnt / USEC_CONVERT_VALUE);
@@ -429,10 +412,10 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ã
+ *  オーバランタイマドライバ
  */
 #ifdef TOPPERS_SUPPORT_OVRHDR
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦ç
+ *  オーバランタイマの初期化処理
  */
 void
@@ -440,13 +423,13 @@
 {
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã1 è§£é¤
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット1 解除
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA14_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/*
-	 * ã¿ã¤ãåæ­¢ CMT2
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
+
+	/*
+	 * タイマ停止 CMT2
 	 */
 	sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -454,27 +437,26 @@
 
 	/*
- 	 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ã­ãã¯è¨­å® CMT2
-	 * PCLK/8ãé¸æ
+ 	 * カウントアップに用いられるクロック設定 CMT2
+	 * PCLK/8を選択
 	 */
 	sil_wrh_mem(CMT2_CMCR_ADDR, CMT_PCLK_DIV_8);
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨­å® CMT2
+	 * コンペアマッチタイマカウンタ設定 CMT2
 	 */
 	sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å® CMT2
+	 * コンペアマッチタイマ周期設定 CMT2
 	 */
 	sil_wrh_mem(CMT2_CMCOR_ADDR, 0U);
 
 	/*
-	 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿ï¼30ï¼
+	 * コンペアマッチタイマ割り込み要求先設定レジスタ（30）
 	 */
 	sil_wrb_mem(ICU_ISELR030_ADDR, ICU_ISEL_CPU);
 
 	/*
-	 *  ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ動作開始前の割込み要求をクリア
 	 */
 	target_ovrtimer_int_clear();
@@ -488,5 +470,5 @@
 
 	/*
-	 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ
+	 * 時間 -> タイマカウンタ 変換
 	 */
 	total_timer_count = ovrtim * USEC_CONVERT_VALUE;
@@ -495,5 +477,5 @@
 
 	/*
-	 * é«åè§£è½ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´
+	 * 高分解能上位タイマカウンタ現在値で調整
 	 */
 	timer_ovr_ovrtim_backup = ovrtim;
@@ -506,10 +488,10 @@
 
 	/*
-	 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸­ãã©ã°
+	 * オーバランタイマ動作中フラグ
 	 */
 	timer_ovr_running_flg = true;
 
 	/*
-	 * ä¸ä½ã¿ã¤ãè¨­å®
+	 * 下位タイマ設定
 	 */
 	if(timer_ovr_upper_set_count == 0) {
@@ -519,20 +501,20 @@
 		else {
 			/*
-			 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢ CMT2
+			 * コンペアマッチタイマカウンタクリア CMT2
 			 */
 			sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);
 
 			/*
-			 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨­å® CMT2
+			 * コンペアマッチタイマ周期設定 CMT2
 			 */
 			sil_wrh_mem(CMT2_CMCOR_ADDR, timer_ovr_lower_set_count);
 
 			/*
-			 *  ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢
+			 *  タイマ動作開始前の割込み要求をクリア
 			 */
 			target_ovrtimer_int_clear();
 
 			/*
-			 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ãè¨±å¯ CMT2
+			 * コンペアマッチタイマ割り込みを許可 CMT2
 			 */
 			sil_wrh_mem(CMT2_CMCR_ADDR,
@@ -540,5 +522,5 @@
 
 			/*
-			 * ã¿ã¤ãåä½éå§ CMT2
+			 * タイマ動作開始 CMT2
 			 */
 			sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -549,5 +531,5 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢å¦ç
+ *  オーバランタイマの停止処理
  */
 void
@@ -555,5 +537,5 @@
 {
 	/*
-	 * ã¿ã¤ãåæ­¢
+	 * タイマ停止
 	 */
 	sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -561,5 +543,5 @@
 
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢
+	 * タイマ割り込み禁止
 	 */
 	sil_wrh_mem(CMT2_CMCR_ADDR,
@@ -567,24 +549,24 @@
 
 	/*
-	 *  ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢
+	 *  タイマ割込み要求をクリア
 	 */
 	target_ovrtimer_int_clear();
 
 	/*
-	 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸­ãã©ã°
+	 * オーバランタイマ動作中フラグ
 	 */
 	timer_ovr_running_flg = false;
 
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®  CMTã¦ããã0 åæ­¢
-	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	 * モジュールストップ機能の設定  CMTユニット0 停止
+	 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRA_ADDR,
 			sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA14_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-}
-
-/*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
+}
+
+/*
+ *  オーバランタイマの停止
  */
 PRCTIM
@@ -594,5 +576,5 @@
 
 	/*
-	 * ã¿ã¤ãåæ­¢
+	 * タイマ停止
 	 */
 	sil_wrh_mem(CMT_CMSTR1_ADDR,
@@ -600,5 +582,5 @@
 
 	/*
-	 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸­ãã©ã°
+	 * オーバランタイマ動作中フラグ
 	 */
 	timer_ovr_running_flg = false;
@@ -606,5 +588,5 @@
 	if(int_num == INTNO_TIMER2) {
 		/*
-		 *  ãªã¼ãã©ã³å²è¾¼ã¿ã®å ´å
+		 *  オーバラン割込みの場合
 		 */
 		target_ovrtimer_int_clear();
@@ -622,5 +604,5 @@
 		}
 
-		if(cnt > timer_ovr_ovrtim_backup) { /* è¨­å®æéãéãã */
+		if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */
 			cnt = 0;
 		}
@@ -630,5 +612,5 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®ç¾å¨å¤ã®èª­åºã
+ *  オーバランタイマの現在値の読出し
  */
 PRCTIM
@@ -639,5 +621,5 @@
 	if (probe_int(INTNO_TIMER2)) {
 		/*
-		 *  å²è¾¼ã¿è¦æ±ãçºçãã¦ããå ´å
+		 *  割込み要求が発生している場合
 		 */
 		return(0U);
@@ -650,5 +632,5 @@
 		}
 
-		if(cnt > timer_ovr_ovrtim_backup) { /* è¨­å®æéãéãã */
+		if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */
 			cnt = 0;
 		}
@@ -658,5 +640,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±
+ *  高分解能タイマ割込みの要求
  */
 void
@@ -664,22 +646,21 @@
 {
 	/*
-	 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å
-	 * æ³¨æï¼åæ­¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã
-	 */
-	sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);	/* ã«ã¦ã³ã¿åæå	*/
-	clear_int(INTNO_TIMER2);			/* è¦æ±ã¯ãªã¢		*/
-	sil_wrh_mem(CMT2_CMCOR_ADDR, 0U);	/* ãããå¨æè¨­å®	*/
-	sil_wrh_mem(CMT2_CMCR_ADDR,			/* å²ãè¾¼ã¿è¨±å¯	*/
+	 * オーバラン下位タイマ強制割り込み起動
+	 * 注意：停止するまで割り込みが繰り返し発生する
+	 */
+	sil_wrh_mem(CMT2_CMCNT_ADDR, 0U);	/* カウンタ初期化	*/
+	clear_int(INTNO_TIMER2);			/* 要求クリア		*/
+	sil_wrh_mem(CMT2_CMCOR_ADDR, 0U);	/* マッチ周期設定	*/
+	sil_wrh_mem(CMT2_CMCR_ADDR,			/* 割り込み許可	*/
 			sil_reh_mem(CMT2_CMCR_ADDR) | CMT2_CMCR_CMIE_BIT);
-	sil_wrh_mem(CMT_CMSTR1_ADDR,		/* ã¿ã¤ãèµ·å		*/
+	sil_wrh_mem(CMT_CMSTR1_ADDR,		/* タイマ起動		*/
 			sil_reh_mem(CMT_CMSTR1_ADDR) | CMT_CMSTR1_STR2_BIT);
 }
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©
+ *  オーバランタイマ割込みハンドラ
  *
- *  ãã®ã«ã¼ãã³ã«æ¥ãã¾ã§ã«ï¼target_ovrtimer_stopãå¼ã°ãã¦ããããï¼
- *  OSã¿ã¤ããåæ­¢ããå¿
-è¦ã¯ãªãï¼
+ *  このルーチンに来るまでに，target_ovrtimer_stopが呼ばれているため，
+ *  OSタイマを停止する必要はない．
  */
 void
@@ -687,5 +668,5 @@
 {
 	/*
-	 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ­¢
+	 * タイマ割り込み禁止
 	 */
 	sil_wrh_mem(CMT2_CMCR_ADDR,
@@ -693,10 +674,10 @@
 
 	/*
-	 * ä¸ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢
+	 * 上下位タイマカウンタクリア
 	 */
 	timer_ovr_upper_set_count = 0;
 	timer_ovr_lower_set_count = 0;
 
-	call_ovrhdr();	/* ãªã¼ãã©ã³ãã³ãã©ã®èµ·åå¦ç */
+	call_ovrhdr();	/* オーバランハンドラの起動処理 */
 }
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *  ã¿ã¤ããã©ã¤ãï¼GR-SAKURAç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  タイマドライバ（GR-SAKURA用）のコンフィギュレーションファイル
  */
 
@@ -13,5 +13,5 @@
 
 /*
- *  ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ããã©ã¤ãï¼RX630ç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  オーバランハンドラ用タイマドライバ（RX630用）のコンフィギュレーションファイル
  */
 #ifdef TOPPERS_SUPPORT_OVRHDR
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.h	(revision 389)
@@ -14,47 +14,32 @@
  *  Copyright (C) 2017      by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -62,5 +47,5 @@
 
 /*
- *		ã¿ã¤ããã©ã¤ãï¼GR-SAKURAç¨ï¼
+ *		タイマドライバ（GR-SAKURA用）
  */
  
@@ -73,58 +58,53 @@
 
 /*
- *  ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ç»é²ã®ããã®å®æ°
- */
-#define INHNO_TIMER0	INT_CMT0_CMI				/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_TIMER0	INT_CMT0_CMI				/* å²è¾¼ã¿çªå· */
-#define INTPRI_TIMER0	-5							/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_TIMER0	(TA_ENAINT | TA_EDGE)		/* å²è¾¼ã¿å±æ§ */
-
-#define INHNO_TIMER1	INT_CMT1_CMI				/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_TIMER1	INT_CMT1_CMI				/* å²è¾¼ã¿çªå· */
-#define INTPRI_TIMER1	-5							/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_TIMER1	(TA_ENAINT | TA_EDGE)		/* å²è¾¼ã¿å±æ§ */
-
-/*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©ç»é²ã®ããã®å®æ°
- */
-#define INHNO_TIMER2	INT_CMT2_CMI				/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_TIMER2	INT_CMT2_CMI				/* å²è¾¼ã¿çªå· */
-#define INTPRI_TIMER2	-5							/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_TIMER2	(TA_ENAINT | TA_EDGE)		/* å²è¾¼ã¿å±æ§ */
-#define INTNO_OVR_BASE_TIMER	INTNO_TIMER1		/* åºæ¬ã¿ã¤ãã«ä½¿ãã¿ã¤ãå²è¾¼ã¿çªå· */
-#define INTNO_DUMMY_TIMER		255					/* ããã¼ã¿ã¤ãå²è¾¼ã¿çªå· */
+ *  タイマ割込みハンドラ登録のための定数
+ */
+#define INHNO_TIMER0	INT_CMT0_CMI				/* 割込みハンドラ番号 */
+#define INTNO_TIMER0	INT_CMT0_CMI				/* 割込み番号 */
+#define INTPRI_TIMER0	-5							/* 割込み優先度 */
+#define INTATR_TIMER0	(TA_ENAINT | TA_EDGE)		/* 割込み属性 */
+
+#define INHNO_TIMER1	INT_CMT1_CMI				/* 割込みハンドラ番号 */
+#define INTNO_TIMER1	INT_CMT1_CMI				/* 割込み番号 */
+#define INTPRI_TIMER1	-5							/* 割込み優先度 */
+#define INTATR_TIMER1	(TA_ENAINT | TA_EDGE)		/* 割込み属性 */
+
+/*
+ *  オーバランタイマ割込みハンドラ登録のための定数
+ */
+#define INHNO_TIMER2	INT_CMT2_CMI				/* 割込みハンドラ番号 */
+#define INTNO_TIMER2	INT_CMT2_CMI				/* 割込み番号 */
+#define INTPRI_TIMER2	-5							/* 割込み優先度 */
+#define INTATR_TIMER2	(TA_ENAINT | TA_EDGE)		/* 割込み属性 */
+#define INTNO_OVR_BASE_TIMER	INTNO_TIMER1		/* 基本タイマに使うタイマ割込み番号 */
+#define INTNO_DUMMY_TIMER		255					/* ダミータイマ割込み番号 */
 
 #ifndef TOPPERS_MACRO_ONLY
 
 /*
- *  ã¿ã¤ãå¤ã®å
-é¨è¡¨ç¾ã®å
+ *  タイマ値の内部表現の型
  */
 typedef uint16_t	CLOCK;
 
 /*
- *  ã¿ã¤ãå¤ã®å
-é¨è¡¨ç¾ã¨ããªç§åä½ã¨ã®å¤æ
- *
- *  1msã®ã¿ã¤ãã¼å²ãè¾¼ã¿ãä½¿ç¨ããã®ã§ãã®ã¯ã­ãã¯ãå®ç¾©ããï¼
- */
-#define TIMER_CLOCK				(FREQ_PCLK / 8U)		/* PCLK/æä½åå¨æ¯8 = 6MHz */
+ *  タイマ値の内部表現とミリ秒単位との変換
+ *
+ *  1msのタイマー割り込みを使用するのでそのクロックを定義する．
+ */
+#define TIMER_CLOCK				(FREQ_PCLK / 8U)		/* PCLK/最低分周比8 = 6MHz */
 #define TO_CLOCK(nume, deno)	((CLOCK)(TIMER_CLOCK * (nume) / (deno)))
 #define	TO_USEC(clock)			((SYSUTM)((clock) * 1000U / TIMER_CLOCK))
 
 /*
- *  ã³ã³ãã¢ãããã¿ã¤ãã³ã³ã¹ã¿ã³ãã¬ã¸ã¹ã¿ï¼CMCORï¼
- *
- *  ã³ã³ãã¢ãããå¨æ
- *  å¨è¾ºã¢ã¸ã¥ã¼ã«ã¯ã­ãã¯ï¼PCLKï¼48MHzã8åå¨ããã®ã§ï¼
- *  6ã«ã¦ã³ã = 1us : max 10922.667us
+ *  コンペアマッチタイマコンスタントレジスタ（CMCOR）
+ *
+ *  コンペアマッチ周期
+ *  周辺モジュールクロック（PCLK）48MHzを8分周するので，
+ *  6カウント = 1us : max 10922.667us
  */
 #define CMCOR_PERIOD	(0x10000U)
 
 /*
- * ã«ã¦ã³ã < - > ãã¤ã¯ã­ç§ å¤æå¤
+ * カウント < - > マイクロ秒 変換値
  * 48MHz / 8 / 1000
  */
@@ -132,5 +112,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ã¿ã¤ãå¨æ
+ *  高分解能タイマのタイマ周期
  *
  *  2^32 / 6
@@ -139,26 +119,22 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ã®é²ã¿å¹
-
+ *  高分解能タイマのカウント値の進み幅
  */
 #define TSTEP_HRTCNT	1U
 
 /*
- *  æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ãåãåºãéã®å¦çæéã®è¦ç©ãå¤ï¼åä½ã¯å
-é¨è¡¨ç¾ï¼
- */
-#define	GET_TOLERANCE	(100U)	/* å¦çé
-ãã®è¦ç©ãå¤ï¼åä½ã¯å
-é¨è¡¨ç¾ï¼*/
+ *  性能評価用システム時刻を取り出す際の処理時間の見積り値（単位は内部表現）
+ */
+#define	GET_TOLERANCE	(100U)	/* 処理遅れの見積り値（単位は内部表現）*/
 #define	BEFORE_IREQ(clock) \
 		((clock) >= (TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE))
 
 /*
- *  ã³ã³ãã¢ãããã¿ã¤ãã³ã³ãã­ã¼ã«ã¬ã¸ã¹ã¿ã®è¨­å®å¤
- */
-/*
- *  ã¯ã­ãã¯é¸æããã
- *
- *  bit7ã¯äºç´é åã§ãã, æ¸è¾¼ã¿ã¯1åºå®
+ *  コンペアマッチタイマコントロールレジスタの設定値
+ */
+/*
+ *  クロック選択ビット
+ *
+ *  bit7は予約領域であり, 書込みは1固定
  */
 #define CMT_PCLK_DIV_8			(0x0080U)
@@ -168,25 +144,24 @@
 
 /*
- * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å
-è¨­å®ã¬ã¸ã¹ã¿iï¼ISELRiï¼ï¼i= å²ãè¾¼ã¿ãã¯ã¿çªå·ï¼
+ * コンペアマッチタイマ割り込み要求先設定レジスタi（ISELRi）（i= 割り込みベクタ番号）
  */
 #define ICU_ISEL_CPU			(0x00U)
 
 /*
- *  ã¿ã¤ãã®èµ·åå¦ç
- *
- *  ã¿ã¤ããåæåãï¼å¨æçãªã¿ã¤ãå²è¾¼ã¿è¦æ±ãçºçãããï¼
+ *  タイマの起動処理
+ *
+ *  タイマを初期化し，周期的なタイマ割込み要求を発生させる．
  */
 extern void	target_timer_initialize(intptr_t exinf);
 
 /*
- *  ã¿ã¤ãã®åæ­¢å¦ç
- *
- *  ã¿ã¤ãã®åä½ãåæ­¢ãããï¼
+ *  タイマの停止処理
+ *
+ *  タイマの動作を停止させる．
  */
 extern void	target_timer_terminate(intptr_t exinf);
 
 /*
- *  ã¿ã¤ãã¬ã¸ã¹ã¿å¤ã®èª­ã¿åºã
+ *  タイマレジスタ値の読み出し
  */
 Inline uint16_t rx630_cmt_getcount(void)
@@ -196,5 +171,5 @@
 
 /*
- *  ã¿ã¤ãã¬ã¸ã¹ã¿å¤ã®æ¸ãè¾¼ã¿
+ *  タイマレジスタ値の書き込み
  */
 Inline void rx630_cmt_setcount(uint16_t count)
@@ -204,15 +179,15 @@
 
 /*
- *  ã¿ã¤ãã®ç¾å¨å¤ã®èª­åºã
+ *  タイマの現在値の読出し
  */
 Inline CLOCK
 target_timer_get_current(void)
 {
-	/* ã¢ããã«ã¦ã³ãã®ããã¿ã¤ãã¬ã¸ã¹ã¿å¤ããã®ã¾ã¾è¿ã	*/
+	/* アップカウントのためタイマレジスタ値をそのまま返す	*/
 	return (rx630_cmt_getcount());
 }
 
 /*
- *  ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®ãã§ãã¯
+ *  タイマ割込み要求のチェック
  */
 Inline bool_t
@@ -223,5 +198,5 @@
 
 /*
- *  ã¿ã¤ãå²è¾¼ã¿ãã³ãã©
+ *  タイマ割込みハンドラ
  */
 extern void	target_lower_timer_handler(void);
@@ -229,29 +204,28 @@
 
 /*
- *  å²è¾¼ã¿ã¿ã¤ãã³ã°ã«æå®ããæå¤§å¤
+ *  割込みタイミングに指定する最大値
  */
 #define HRTCNT_BOUND	100000002U
 
 /*
- *  é«åè§£è½ã¿ã¤ãã¸ã®å²è¾¼ã¿ã¿ã¤ãã³ã°ã®è¨­å®
- *
- *  é«åè§£è½ã¿ã¤ããï¼hrtcntã§æå®ããå¤ã«ã¦ã³ãã¢ãããããå²è¾¼ã¿ãçº
- *  çãããããã«è¨­å®ããï¼
+ *  高分解能タイマへの割込みタイミングの設定
+ *
+ *  高分解能タイマを，hrtcntで指定した値カウントアップしたら割込みを発
+ *  生させるように設定する．
  */
 extern void target_hrt_set_event(HRTCNT hrtcnt);
 
 /*
- *  é«åè§£è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±
+ *  高分解能タイマ割込みの要求
  */
 extern  void target_hrt_raise_event(void);
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èª­åºããå
-é¨å¦ç
+ *  高分解能タイマの現在のカウント値の読出し　内部処理
  */
 extern HRTCNT target_hrt_get_current_convert(void);
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èª­åºã
+ *  高分解能タイマの現在のカウント値の読出し
  */
 Inline HRTCNT
@@ -264,35 +238,35 @@
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦ç
+ *  オーバランタイマの初期化処理
  */
 extern void target_ovrtimer_initialize(intptr_t exinf);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢å¦ç
+ *  オーバランタイマの停止処理
  */
 extern void target_ovrtimer_terminate(intptr_t exinf);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§
+ *  オーバランタイマの動作開始
  */
 extern void target_ovrtimer_start(PRCTIM ovrtim);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®åæ­¢
+ *  オーバランタイマの停止
  */
 extern PRCTIM target_ovrtimer_stop(uint_t int_num);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®ç¾å¨å¤ã®èª­åºã
+ *  オーバランタイマの現在値の読出し
  */
 extern PRCTIM target_ovrtimer_get_current(void);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãã®å²è¾¼ã¿ã®è¦æ±
+ *  オーバランタイマの割込みの要求
  */
 extern  void target_ovrtimer_raise_event(void);
 
 /*
- *  ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©
+ *  オーバランタイマ割込みハンドラ
  */
 extern void	target_ovrtimer_handler(void);
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_config.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_config.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_config.c	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,5 +38,5 @@
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã¢ã¸ã¥ã¼ã«ï¼RX63Nç¨ï¼
+ *  ターゲット依存モジュール（RX63N用）
  */
 
@@ -65,5 +50,5 @@
 
 /*
- *  rx62n_bus_init -- ã¿ã¼ã²ããä¾å­é¨ã®ãã¹ã®åæå
+ *  rx62n_bus_init -- ターゲット依存部のバスの初期化
  */
 
@@ -71,53 +56,53 @@
 rx62n_bus_init (void)
 {
-	/* ã¤ã¼ãµãããã»ã³ã³ãã­ã¼ã©ã®åä½ãè¨±å¯ */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	/* イーサネット・コントローラの動作を許可 */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRB_ADDR,
 		sil_rew_mem(SYSTEM_MSTPCRB_ADDR) & ~SYSTEM_MSTPCRB_MSTPB15_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500);	/* 書込み禁止 */
 
-	/* EtherNETæå¹ */
-	/* PA3ï½5 RMII_MDIO, RMII_MDC, RMII_LINKSTA */
+	/* EtherNET有効 */
+	/* PA3～5 RMII_MDIO, RMII_MDC, RMII_LINKSTA */
 	sil_wrb_mem(PORTA_PMR_ADDR,
 		sil_reb_mem(PORTA_PMR_ADDR) | (1 << 3) | (1 << 4) | (1 << 5));
-	/* PB0ï½7 RXD1, RXD0, REF50CK, RX-ER, TXD-EN, TXD0, TXD1, CRS */
+	/* PB0～7 RXD1, RXD0, REF50CK, RX-ER, TXD-EN, TXD0, TXD1, CRS */
 	sil_wrb_mem(PORTB_PMR_ADDR,
 		sil_reb_mem(PORTB_PMR_ADDR) | 0xFF);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-	/* PA3ãET_MDIOã¨ãã */
+	/* PA3をET_MDIOとする */
 	sil_wrb_mem(MPC_PA3PFS_ADDR, 0x11); 
-	/* PA4ãET_MDCã¨ãã */
+	/* PA4をET_MDCとする */
 	sil_wrb_mem(MPC_PA4PFS_ADDR, 0x11); 
-	/* PA5ãET_LINKSTAã¨ãã */
+	/* PA5をET_LINKSTAとする */
 	sil_wrb_mem(MPC_PA5PFS_ADDR, 0x11); 
 
-	/* PB0ãRXD1ã¨ãã */
+	/* PB0をRXD1とする */
 	sil_wrb_mem(MPC_PB0PFS_ADDR, 0x12);
-	/* PB1ãRXD0ã¨ãã */
+	/* PB1をRXD0とする */
 	sil_wrb_mem(MPC_PB1PFS_ADDR, 0x12);
-	/* PB2ãREF50CKã¨ãã */
+	/* PB2をREF50CKとする */
 	sil_wrb_mem(MPC_PB2PFS_ADDR, 0x12);
-	/* PB3ãRX-ERã¨ãã */
+	/* PB3をRX-ERとする */
 	sil_wrb_mem(MPC_PB3PFS_ADDR, 0x12);
-	/* PB4ãTXD-ENã¨ãã */
+	/* PB4をTXD-ENとする */
 	sil_wrb_mem(MPC_PB4PFS_ADDR, 0x12);
-	/* PB5ãTXD0ã¨ãã */
+	/* PB5をTXD0とする */
 	sil_wrb_mem(MPC_PB5PFS_ADDR, 0x12);
-	/* PB6ãTXD1ã¨ãã */
+	/* PB6をTXD1とする */
 	sil_wrb_mem(MPC_PB6PFS_ADDR, 0x12);
-	/* PB7ãCRSã¨ãã */
+	/* PB7をCRSとする */
 	sil_wrb_mem(MPC_PB7PFS_ADDR, 0x12);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+	/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 	sil_wrb_mem(MPC_PWPR_ADDR , 0x80);
 }
 
 /*
- *  rx62n_inter_init -- ã¿ã¼ã²ããä¾å­é¨ã®å²è¾¼ã¿ã®åæå
+ *  rx62n_inter_init -- ターゲット依存部の割込みの初期化
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_config.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_config.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_config.h	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -56,14 +41,14 @@
 
 /*
- *  TCP/IP ã«é¢ããå®ç¾©
- */
-
-/* TCP ã«é¢ããå®ç¾© */
-
-/*
- *  MAX_TCP_SND_SEG: éä¿¡ã»ã°ã¡ã³ããµã¤ãºã®æå¤§å¤
+ *  TCP/IP に関する定義
+ */
+
+/* TCP に関する定義 */
+
+/*
+ *  MAX_TCP_SND_SEG: 送信セグメントサイズの最大値
  *
- *    ç¸æãã MSS ãªãã·ã§ã³ã§ã»ã°ã¡ã³ããµã¤ãºãæå®ããã¦ãã
- *    ãã®å¤ã§ãã»ã°ã¡ã³ããµã¤ãºãå¶éã§ããã
+ *    相手から MSS オプションでセグメントサイズを指定されても、
+ *    この値で、セグメントサイズを制限できる。
  */
 
@@ -73,5 +58,5 @@
 
 /*
- *  DEF_TCP_RCV_SEG: åä¿¡ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤
+ *  DEF_TCP_RCV_SEG: 受信セグメントサイズの規定値
  */
 
@@ -81,40 +66,37 @@
 
 /* 
- *  ã»ã°ã¡ã³ãã®é çªãå
-¥ãæ¿ããã¨ãã«æ°ãã«ãããã¯ã¼ã¯ãããã¡ãå²å½ã¦ã¦ã
- *  ãã¼ã¿ãã³ãã¼ãããµã¤ãºã®ãããå¤
+ *  セグメントの順番を入れ替えるときに新たにネットワークバッファを割当てて、
+ *  データをコピーするサイズのしきい値
  */
 #define MAX_TCP_REALLOC_SIZE	1024	
 
-#define TCP_CFG_OPT_MSS		/* ã³ãã¯ã·ã§ã³éè¨­æã«ãã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ãã¤ãã¦éä¿¡ããã*/
-#define TCP_CFG_DELAY_ACK	/* ACK ãé
-ãããã¨ãã¯ã³ã¡ã³ããå¤ãã			*/
-#define TCP_CFG_ALWAYS_KEEP	/* å¸¸ã«ã­ã¼ãã¢ã©ã¤ãããæã¯ã³ã¡ã³ããå¤ãã		*/
-
-/* UDP ã«é¢ããå®ç¾© */
-
-#define UDP_CFG_IN_CHECKSUM	/* UDP ã®å
-¥åãã§ãã¯ãµã ãè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-#define UDP_CFG_OUT_CHECKSUM	/* UDP ã®åºåãã§ãã¯ãµã ãè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-
-/* ICMPv4/v6 ã«é¢ããå®ç¾© */
-
-#define ICMP_REPLY_ERROR		/* ICMP ã¨ã©ã¼ã¡ãã»ã¼ã¸ãéä¿¡ããå ´åã¯ã³ã¡ã³ããå¤ãã*/
-
-/* IPv4 ã«é¢ããå®ç¾© */
-
-//#define IP4_CFG_FRAGMENT		/* ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-#define NUM_IP4_FRAG_QUEUE	2	/* ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãµã¤ãº			*/
-#define IP4_CFG_FRAG_REASSM_SIZE	4096	/* IPv4 åæ§æãããã¡ãµã¤ãº			*/
-
-/* IPv6 ã«é¢ããå®ç¾© */
-
-#define NUM_IP6_DAD_COUNT	1	/* éè¤ã¢ãã¬ã¹æ¤åºã§éä¿¡ããè¿é£è¦è«ã®åæ°ã		*/
-					/*  0 ãæå®ããã¨ãéè¤ã¢ãã¬ã¹æ¤åºãè¡ããªãã	*/
-#define NUM_ND6_CACHE_ENTRY	10	/* è¿é£ã­ã£ãã·ã¥ã®ã¨ã³ããªæ°			*/
-
-/*
- *  IPv6 ç¨ãã¹ãã­ã£ãã·ã¥ã®ã¨ã³ããªæ°ã
- *  0 ãæå®ããã¨IPv6 ç¨ãã¹ãã­ã£ãã·ã¥ãçµè¾¼ã¾ãªãã
+#define TCP_CFG_OPT_MSS		/* コネクション開設時に、セグメントサイズオプションをつけて送信する。*/
+#define TCP_CFG_DELAY_ACK	/* ACK を遅らせるときはコメントを外す。			*/
+#define TCP_CFG_ALWAYS_KEEP	/* 常にキープアライブする時はコメントを外す。		*/
+
+/* UDP に関する定義 */
+
+#define UDP_CFG_IN_CHECKSUM	/* UDP の入力チェックサムを行う場合はコメントを外す。	*/
+#define UDP_CFG_OUT_CHECKSUM	/* UDP の出力チェックサムを行う場合はコメントを外す。	*/
+
+/* ICMPv4/v6 に関する定義 */
+
+#define ICMP_REPLY_ERROR		/* ICMP エラーメッセージを送信する場合はコメントを外す。*/
+
+/* IPv4 に関する定義 */
+
+//#define IP4_CFG_FRAGMENT		/* データグラムの分割・再構成行う場合はコメントを外す。	*/
+#define NUM_IP4_FRAG_QUEUE	2	/* データグラム再構成キューサイズ			*/
+#define IP4_CFG_FRAG_REASSM_SIZE	4096	/* IPv4 再構成バッファサイズ			*/
+
+/* IPv6 に関する定義 */
+
+#define NUM_IP6_DAD_COUNT	1	/* 重複アドレス検出で送信する近隣要請の回数、		*/
+					/*  0 を指定すると、重複アドレス検出を行わない。	*/
+#define NUM_ND6_CACHE_ENTRY	10	/* 近隣キャッシュのエントリ数			*/
+
+/*
+ *  IPv6 用ホストキャッシュのエントリ数。
+ *  0 を指定するとIPv6 用ホストキャッシュを組込まない。
  */
 #define NUM_IN6_HOSTCACHE_ENTRY	4
@@ -122,114 +104,111 @@
 #ifdef SUPPORT_ETHER
 
-#define IP6_CFG_AUTO_LINKLOCAL		/* ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã®èªåè¨­å®ãè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã*/
-
-/*
- *  ãã£ãã©ã«ãã«ã¼ã¿ãªã¹ãã«é¢ããå®ç¾©
- */
-
-/*
- *  ãã£ãã©ã«ãã«ã¼ã¿ãªã¹ãã®ã¨ã³ããªæ°ã
- *  æå¤§å¤ã¯ 16ã0 ãæå®ããã¨ã«ã¼ã¿éç¥ãåä¿¡ããªãã
+#define IP6_CFG_AUTO_LINKLOCAL		/* リンクローカルアドレスの自動設定を行う場合はコメントを外す。*/
+
+/*
+ *  ディフォルトルータリストに関する定義
+ */
+
+/*
+ *  ディフォルトルータリストのエントリ数。
+ *  最大値は 16、0 を指定するとルータ通知を受信しない。
  */
 #define NUM_ND6_DEF_RTR_ENTRY		4
 
 /*
- *  ãã¬ãã£ãã¯ã¹ãªã¹ãã«é¢ããå®ç¾©ã
- *  æå¤§å¤ã¯ 16ã
- */
-#define NUM_ND6_PREFIX_ENTRY		4	/*  ãã¬ãã£ãã¯ã¹ãªã¹ãã®ã¨ã³ããªæ°			*/
-
-/*
- *  èµ·åæã®ã«ã¼ã¿è¦è«åºååæ°ã
- *  0 ãæå®ããã¨ã«ã¼ã¿è¦è«ãåºåããªãã
+ *  プレフィックスリストに関する定義。
+ *  最大値は 16。
+ */
+#define NUM_ND6_PREFIX_ENTRY		4	/*  プレフィックスリストのエントリ数			*/
+
+/*
+ *  起動時のルータ要請出力回数。
+ *  0 を指定するとルータ要請を出力しない。
  */
 #define NUM_ND6_RTR_SOL_RETRY	3	
 
-#define IP6_CFG_FRAGMENT		/* ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æè¡ãå ´åã¯ã³ã¡ã³ããå¤ãã	*/
-#define NUM_IP6_FRAG_QUEUE	2	/* ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãµã¤ãº			*/
-#define IP6_CFG_FRAG_REASSM_SIZE	4096	/* IPv6 åæ§æãããã¡ãµã¤ãº			*/
+#define IP6_CFG_FRAGMENT		/* データグラムの分割・再構成行う場合はコメントを外す。	*/
+#define NUM_IP6_FRAG_QUEUE	2	/* データグラム再構成キューサイズ			*/
+#define IP6_CFG_FRAG_REASSM_SIZE	4096	/* IPv6 再構成バッファサイズ			*/
 
 #endif	/* of #ifdef SUPPORT_ETHER */
 
 /*
- *  ãã¼ã¿ãªã³ã¯å±¤ (ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹) ã«é¢ããå®ç¾©
- */
-
-/*
- *  PPPãã¢ãã ã«é¢ããå®ç¾©
- */
-
-#define MODEM_CFG_DIAL		"ATD"	/* ãã¤ã¢ã«ã³ãã³ãæå­å			*/
-#define MODEM_CFG_RETRY_CNT	3	/* ãã¤ã¢ã«ãªãã©ã¤åæ°			*/
-#define MODEM_CFG_RETRY_WAIT	10000	/* ãã¤ã¢ã«ãªãã©ã¤ã¾ã§ã®å¾
-ã¡æé [ms]	*/
-
-/*
- *  PPPãHDLC ã«é¢ããå®ç¾©
- */
-
-#define DEF_LOCAL_ACCM		ULONG_C(0x000a0000)	/* èªåã® ACCMãXON ã¨ XOFF ã®ã¿å¤æ	*/
-#define DEF_REMOTE_ACCM		ULONG_C(0xffffffff)	/* ç¸æã® ACCMãåæå¤ã¯å
-¨ã¦å¤æ		*/
-
-/*
- *  PPPãLCP ã«é¢ããå®ç¾©
+ *  データリンク層 (ネットワークインタフェース) に関する定義
+ */
+
+/*
+ *  PPP、モデムに関する定義
+ */
+
+#define MODEM_CFG_DIAL		"ATD"	/* ダイアルコマンド文字列			*/
+#define MODEM_CFG_RETRY_CNT	3	/* ダイアルリトライ回数			*/
+#define MODEM_CFG_RETRY_WAIT	10000	/* ダイアルリトライまでの待ち時間 [ms]	*/
+
+/*
+ *  PPP、HDLC に関する定義
+ */
+
+#define DEF_LOCAL_ACCM		ULONG_C(0x000a0000)	/* 自分の ACCM、XON と XOFF のみ変換	*/
+#define DEF_REMOTE_ACCM		ULONG_C(0xffffffff)	/* 相手の ACCM、初期値は全て変換		*/
+
+/*
+ *  PPP、LCP に関する定義
  */
 
 #define LCP_CFG_MRU		UINT_C(0x0001)	/* MRU					*/
 #define LCP_CFG_ACCM		UINT_C(0x0002)	/* ACCM					*/
-#define LCP_CFG_MAGIC		UINT_C(0x0004)	/* ãã¸ãã¯çªå·				*/
-#define LCP_CFG_PCOMP		UINT_C(0x0008)	/* ãã­ãã³ã«é¨å§ç¸®æ©è½			*/
-#define LCP_CFG_ACCOMP		UINT_C(0x0010)	/* ã¢ãã¬ã¹ã»å¶å¾¡é¨å§ç¸®			*/
+#define LCP_CFG_MAGIC		UINT_C(0x0004)	/* マジック番号				*/
+#define LCP_CFG_PCOMP		UINT_C(0x0008)	/* プロトコル部圧縮機能			*/
+#define LCP_CFG_ACCOMP		UINT_C(0x0010)	/* アドレス・制御部圧縮			*/
 #define LCP_CFG_PAP		UINT_C(0x0020)	/* PAP					*/
-/*#define LCP_CFG_CHAP		UINT_C(0x0040)	   CHAP ã¯å®è£
-äºå®			*/
+/*#define LCP_CFG_CHAP		UINT_C(0x0040)	   CHAP は実装予定			*/
 
 #ifdef LCP_CFG_MAGIC
 
-#define LCP_ECHO_INTERVAL	(20*NET_TIMER_HZ)	/* ã¤ã³ã¿ã¼ãã«æé		*/
-#define LCP_ECHO_FAILS		9			/* å¤±æé¾å¤			*/
+#define LCP_ECHO_INTERVAL	(20*NET_TIMER_HZ)	/* インターバル時間		*/
+#define LCP_ECHO_FAILS		9			/* 失敗閾値			*/
 
 #endif	/* of #ifdef LCP_CFG_MAGIC */
 
 /*
- *  PPPãPAP ã«é¢ããå®ç¾©
+ *  PPP、PAP に関する定義
  */
 
 #define DEF_PAP_TIMEOUT		(3*NET_TIMER_HZ)
-#define DEF_PAP_REQTIME		(30*NET_TIMER_HZ)	/* ã¿ã¤ã ã¢ã¦ãå¦çãè¡ãã¨ãã¯ã³ã¡ã³ããå¤ãã*/
-#define MAX_PAP_REXMT		10			/* èªè¨¼è¦æ±ã®æå¤§åéåæ°	*/
-
-/*
- *  RX63N Ethernet Controler ã«é¢ããå®ç¾©
- */
-
-#define NUM_IF_RX62N_TXBUF		2	/* éä¿¡ãããã¡æ°			*/
-#define NUM_IF_RX62N_RXBUF		2	/* åä¿¡ãããã¡æ°			*/
-#define IF_RX62N_BUF_PAGE_SIZE	1518	/* ãããã¡ãµã¤ãº */
-
-#define TMO_IF_RX62N_GET_NET_BUF	1000	/* [us]ãåä¿¡ç¨ net_buf ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
-					/* [s]ã éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
+#define DEF_PAP_REQTIME		(30*NET_TIMER_HZ)	/* タイムアウト処理を行うときはコメントを外す。*/
+#define MAX_PAP_REXMT		10			/* 認証要求の最大再送回数	*/
+
+/*
+ *  RX63N Ethernet Controler に関する定義
+ */
+
+#define NUM_IF_RX62N_TXBUF		2	/* 送信バッファ数			*/
+#define NUM_IF_RX62N_RXBUF		2	/* 受信バッファ数			*/
+#define IF_RX62N_BUF_PAGE_SIZE	1518	/* バッファサイズ */
+
+#define TMO_IF_RX62N_GET_NET_BUF	1000	/* [us]、受信用 net_buf 獲得タイムアウト	*/
+					/* [s]、 送信タイムアウト			*/
 #define TMO_IF_RX62N_XMIT		(2*IF_TIMER_HZ)
 
-/*#define IF_RX62N_CFG_ACCEPT_ALL		 ãã«ãã­ã£ã¹ããã¨ã©ã¼ãã¬ã¼ã ãåä¿¡ããã¨ãã¯ã³ã¡ã³ããå¤ãã*/
-
-/*
- *  Bluetooth USB PAN ã«é¢ããå®ç¾©
- */
-
-#define NUM_IF_BTUSB_TXBUF		2	/* éä¿¡ãããã¡æ°			*/
-#define NUM_IF_BTUSB_RXBUF		2	/* åä¿¡ãããã¡æ°			*/
-#define IF_BTUSB_BUF_PAGE_SIZE	1518	/* ãããã¡ãµã¤ãº */
-
-#define TMO_IF_BTUSB_GET_NET_BUF	1	/* [ms]ãåä¿¡ç¨ net_buf ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
-					/* [s]ã éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
+/*#define IF_RX62N_CFG_ACCEPT_ALL		 マルチキャスト、エラーフレームも受信するときはコメントを外す。*/
+
+/*
+ *  Bluetooth USB PAN に関する定義
+ */
+
+#define NUM_IF_BTUSB_TXBUF		2	/* 送信バッファ数			*/
+#define NUM_IF_BTUSB_RXBUF		2	/* 受信バッファ数			*/
+#define IF_BTUSB_BUF_PAGE_SIZE	1518	/* バッファサイズ */
+
+#define TMO_IF_BTUSB_GET_NET_BUF	1	/* [ms]、受信用 net_buf 獲得タイムアウト	*/
+					/* [s]、 送信タイムアウト			*/
 #define TMO_IF_BTUSB_XMIT		(2*IF_TIMER_HZ)
 
 /*
- *  ã¤ã¼ãµãããåºåæã«ãNIC ã§ net_buf ãéæ¾ããå ´åã«æå®ããã
+ *  イーサネット出力時に、NIC で net_buf を開放する場合に指定する。
  *
- *  æ³¨æ: ä»¥ä¸ã®æå®ã¯ãæå®ä¾ã§ãããif_rx62n ã§ã¯ã
- *        éæ¾ããªãã®ã§ãä»¥ä¸ã®ã³ã¡ã³ããå¤ãã¦ã¯ãªããªãã
+ *  注意: 以下の指定は、指定例であり、if_rx62n では、
+ *        開放しないので、以下のコメントを外してはならない。
  */
 
@@ -237,90 +216,88 @@
 
 /*
- *  RX63N Ethernet Controller ã«é¢ããå®ç¾©
- */
-
-#define RX63N_BASE_ADDRESS		ULONG_C(0x00200000)	/* NIC ã®ã¬ã¸ã¹ã¿ãã¼ã¹ã¢ãã¬ã¹ */
-
-#define INHNO_IF_RX62N_TRX	INT_ETH_EINT	/* ãã±ããéåä¿¡ */
-#define INTNO_IF_RX62N_TRX	INT_ETH_EINT	/* ãã±ããéåä¿¡ */
-#define INTATR_IF_RX62N_TRX	(TA_NULL)	/* å²è¾¼ã¿å±æ§	*/
-#define INTPRI_IF_RX62N_TRX	(-1)		/* å²è¾¼ã¿åªå
-åº¦	*/
-
-/*
- *  ARP ã«é¢ããå®ç¾©
- */
-
-#define NUM_ARP_ENTRY		10			/* ARP ã­ã£ãã·ã¥ã¨ã³ããªæ°	*/
-
-/*
- *  DHCP ã«é¢ããå®ç¾©
+ *  RX63N Ethernet Controller に関する定義
+ */
+
+#define RX63N_BASE_ADDRESS		ULONG_C(0x00200000)	/* NIC のレジスタベースアドレス */
+
+#define INHNO_IF_RX62N_TRX	INT_ETH_EINT	/* パケット送受信 */
+#define INTNO_IF_RX62N_TRX	INT_ETH_EINT	/* パケット送受信 */
+#define INTATR_IF_RX62N_TRX	(TA_NULL)	/* 割込み属性	*/
+#define INTPRI_IF_RX62N_TRX	(-1)		/* 割込み優先度	*/
+
+/*
+ *  ARP に関する定義
+ */
+
+#define NUM_ARP_ENTRY		10			/* ARP キャッシュエントリ数	*/
+
+/*
+ *  DHCP に関する定義
  *
- *    ã»æ³¨æ: TINET ã¯ãDHCP ãå®è£
-ãã¦ããªããå¿ç¨ãã­ã°ã©ã ã§ã
- *            DHCP ã¡ãã»ã¼ã¸ãåä¿¡ããããã®å®ç¾©ã§ããã
- *            ã¾ããç¾å¨ã¯ IPv4 ã®ã¿æå¹ã§ããã
- */
-
-#define DHCP_CFG					 /* DHCP ãå¦çããå ´åã¯ã³ã¡ã³ããå¤ãã*/
-
-/*
- *  Ethernet ã«é¢ããå®ç¾©
- */
-
-/*#define ETHER_CFG_ACCEPT_ALL		 ãã«ãã­ã£ã¹ããã¨ã©ã¼ãã¬ã¼ã ãåä¿¡ããã¨ãã¯ã³ã¡ã³ããå¤ãã	*/
-/*#define ETHER_CFG_UNEXP_WARNING	 éãµãã¼ããã¬ã¼ã ã®è­¦åãè¡¨ç¤ºããã¨ãã¯ã³ã¡ã³ããå¤ãã		*/
-/*#define ETHER_CFG_802_WARNING		 IEEE 802.3 ãã¬ã¼ã ã®è­¦åãè¡¨ç¤ºããã¨ãã¯ã³ã¡ã³ããå¤ãã		*/
-/*#define ETHER_CFG_MCAST_WARNING	 ãã«ãã­ã£ã¹ãã®è­¦åãè¡¨ç¤ºããã¨ãã¯ã³ã¡ã³ããå¤ãã		*/
-#define ETHER_CFG_MULTICAST			/* ãã«ãã­ã£ã¹ããéåä¿¡ */
-
-/*
- *  ã¢ãã¬ã¹ãªã¹ãã«é¢ããå®ç¾©ã
- */
-#define NUM_IN6_IFADDR_ENTRY		5	/*  ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ãªã¹ãã®ã¨ã³ããªæ°		*/
-
-/*
- *  æ±ç¨ãããã¯ã¼ã¯ã«é¢ããå®ç¾©
- */
-
-/*
- *  ãããã¯ã¼ã¯ãããã¡ã«é¢ããå®ç¾©
- */
-
-/* ãããã¯ã¼ã¯ãããã¡æ° */
+ *    ・注意: TINET は、DHCP を実装していない。応用プログラムで、
+ *            DHCP メッセージを受信するための定義である。
+ *            また、現在は IPv4 のみ有効である。
+ */
+
+#define DHCP_CFG					 /* DHCP を処理する場合はコメントを外す。*/
+
+/*
+ *  Ethernet に関する定義
+ */
+
+/*#define ETHER_CFG_ACCEPT_ALL		 マルチキャスト、エラーフレームも受信するときはコメントを外す。	*/
+/*#define ETHER_CFG_UNEXP_WARNING	 非サポートフレームの警告を表示するときはコメントを外す。		*/
+/*#define ETHER_CFG_802_WARNING		 IEEE 802.3 フレームの警告を表示するときはコメントを外す。		*/
+/*#define ETHER_CFG_MCAST_WARNING	 マルチキャストの警告を表示するときはコメントを外す。		*/
+#define ETHER_CFG_MULTICAST			/* マルチキャストを送受信 */
+
+/*
+ *  アドレスリストに関する定義。
+ */
+#define NUM_IN6_IFADDR_ENTRY		5	/*  インタフェースのアドレスリストのエントリ数		*/
+
+/*
+ *  汎用ネットワークに関する定義
+ */
+
+/*
+ *  ネットワークバッファに関する定義
+ */
+
+/* ネットワークバッファ数 */
 
 #ifdef SUPPORT_PPP
 
 /*
- *  PPP ã§ã¯ãåä¿¡ç¨ã® ãããã¯ã¼ã¯ãããã¡ã¯ PDU (1502) ãµã¤ãºãå¸¸ã«
- *  å²ãå½ã¦ãªããã°ãªããªãã®ã§ PDU ãµã¤ãºãå¤ãã«ç¢ºä¿ããã
+ *  PPP では、受信用の ネットワークバッファは PDU (1502) サイズを常に
+ *  割り当てなければならないので PDU サイズを多めに確保する。
  */
 
 #ifndef NUM_MPF_NET_BUF_CSEG
-#define NUM_MPF_NET_BUF_CSEG	2	/* IF + IP + TCPã2 ä»¥ä¸*/
+#define NUM_MPF_NET_BUF_CSEG	2	/* IF + IP + TCP、2 以上*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_CSEG */
 
 #ifndef NUM_MPF_NET_BUF_64
-#define NUM_MPF_NET_BUF_64	0	/* 64 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_64	0	/* 64 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_64 */
 
 #ifndef NUM_MPF_NET_BUF_128
-#define NUM_MPF_NET_BUF_128	0	/* 128 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_128	0	/* 128 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_128 */
 
 #ifndef NUM_MPF_NET_BUF_256
-#define NUM_MPF_NET_BUF_256	0	/* 256 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_256	0	/* 256 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_256 */
 
 #ifndef NUM_MPF_NET_BUF_512
-#define NUM_MPF_NET_BUF_512	0	/* 512 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_512	0	/* 512 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_512 */
 
 #ifndef NUM_MPF_NET_BUF_1024
-#define NUM_MPF_NET_BUF_1024	0	/* 1024 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_1024	0	/* 1024 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_1024 */
 
 #ifndef NUM_MPF_NET_BUF_IF_PDU
-#define NUM_MPF_NET_BUF_IF_PDU	2	/* IF æå¤§ PDU ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF_IF_PDU	2	/* IF 最大 PDU サイズ	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IF_PDU */
 
@@ -328,7 +305,7 @@
 
 #if defined(SUPPORT_INET4) && defined(IP4_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 再構成バッファサイズ	*/
 #endif
 
@@ -338,7 +315,7 @@
 
 #if defined(SUPPORT_INET6) && defined(IP6_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 再構成バッファサイズ	*/
 #endif
 
@@ -350,13 +327,13 @@
 
 /*
- *  ã¤ã¼ãµãããã®å ´åã®ãããã¯ã¼ã¯ãããã¡æ°ã®å²ãå½ã¦
- */
-
-/*
- *  æ³¨æ!!
+ *  イーサネットの場合のネットワークバッファ数の割り当て
+ */
+
+/*
+ *  注意!!
  *
- *  RX63N Ethernet Controler ã®ãã£ãã¤ã¹ãã©ã¤ãï¼if_rx62nï¼ã®æä½å²å½ã¦é·ã¯
- *  60ï¼ã¢ã©ã¤ã³ãã¦ 62ï¼ãªã¯ãããã®ãã IF + IP +TCP ããã¯
- *  64 ãªã¯ãããã®ãããã¯ã¼ã¯ãããã¡ã®æ¹ãæé©ã§ããã
+ *  RX63N Ethernet Controler のディバイスドライバ（if_rx62n）の最低割当て長は
+ *  60（アラインして 62）オクテットのため IF + IP +TCP よりは
+ *  64 オクテットのネットワークバッファの方が最適である。
  */
 
@@ -366,17 +343,17 @@
 
 #ifndef NUM_MPF_NET_BUF_64
-#define NUM_MPF_NET_BUF_64	2	/* 64 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_64	2	/* 64 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_64 */
 
 #ifndef NUM_MPF_NET_BUF_128
-#define NUM_MPF_NET_BUF_128	0	/* 128 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_128	0	/* 128 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_128 */
 
 #ifndef NUM_MPF_NET_BUF_256
-#define NUM_MPF_NET_BUF_256	0	/* 256 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_256	0	/* 256 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_256 */
 
 #ifndef NUM_MPF_NET_BUF_512
-#define NUM_MPF_NET_BUF_512	0	/* 512 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_512	0	/* 512 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_512 */
 
@@ -384,5 +361,5 @@
 
 #ifndef NUM_MPF_NET_BUF_IP_MSS
-#define NUM_MPF_NET_BUF_IP_MSS	0	/* IF + 576 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_IP_MSS	0	/* IF + 576 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IP_MSS */
 
@@ -390,5 +367,5 @@
 
 #ifndef NUM_MPF_NET_BUF_1024
-#define NUM_MPF_NET_BUF_1024	0	/* 1024 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_1024	0	/* 1024 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_1024 */
 
@@ -402,5 +379,5 @@
 
 #ifndef NUM_MPF_NET_BUF_IF_PDU
-#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF æå¤§ PDU ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF 最大 PDU サイズ	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IF_PDU */
 
@@ -408,7 +385,7 @@
 
 #if defined(SUPPORT_INET4) && defined(IP4_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	2	/* IPv4 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF4_REASSM	0	/* IPv4 再構成バッファサイズ	*/
 #endif
 
@@ -418,7 +395,7 @@
 
 #if defined(SUPPORT_INET6) && defined(IP6_CFG_FRAGMENT)
-#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	2	/* IPv6 再構成バッファサイズ	*/
 #else
-#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 åæ§æãããã¡ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF6_REASSM	0	/* IPv6 再構成バッファサイズ	*/
 #endif
 
@@ -434,25 +411,25 @@
 
 #ifndef NUM_MPF_NET_BUF_64
-#define NUM_MPF_NET_BUF_64	0	/* 64 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_64	0	/* 64 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_64 */
 
 #ifndef NUM_MPF_NET_BUF_128
-#define NUM_MPF_NET_BUF_128	0	/* 128 ãªã¯ãããã2 ä»¥ä¸	*/
+#define NUM_MPF_NET_BUF_128	0	/* 128 オクテット、2 以上	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_128 */
 
 #ifndef NUM_MPF_NET_BUF_256
-#define NUM_MPF_NET_BUF_256	0	/* 256 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_256	0	/* 256 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_256 */
 
 #ifndef NUM_MPF_NET_BUF_512
-#define NUM_MPF_NET_BUF_512	0	/* 512 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_512	0	/* 512 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_512 */
 
 #ifndef NUM_MPF_NET_BUF_1024
-#define NUM_MPF_NET_BUF_1024	0	/* 1024 ãªã¯ããã	*/
+#define NUM_MPF_NET_BUF_1024	0	/* 1024 オクテット	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_1024 */
 
 #ifndef NUM_MPF_NET_BUF_IF_PDU
-#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF æå¤§ PDU ãµã¤ãº	*/
+#define NUM_MPF_NET_BUF_IF_PDU	4	/* IF 最大 PDU サイズ	*/
 #endif	/* of #ifndef NUM_MPF_NET_BUF_IF_PDU */
 
@@ -460,10 +437,8 @@
 
 /*
- *  ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬
+ *  ネットワーク統計情報の計測
  *
- *  ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬ãè¡ãå ´åã¯ãtinet/include/net/net.h
- *  ã§å®ç¾©ããã¦ãããã­ãã³ã«è­å¥ãã©ã°ãæå®ããã
+ *  ネットワーク統計情報の計測を行う場合は、tinet/include/net/net.h
+ *  で定義されているプロトコル識別フラグを指定する。
  */
 
@@ -550,5 +525,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_defs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_defs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/tinet_target_defs.h	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -56,12 +41,11 @@
 
 /*
- *  ãããã¯ã¼ã¯ã«é¢ããå®ç¾©
+ *  ネットワークに関する定義
  */
 
 /*
- *  CPU ã®ã¢ã©ã¤ã¡ã³ãã«é¢ããå®ç¾©
+ *  CPU のアライメントに関する定義
  *
- *  4 ãªã¯ãããåä½ã§ãã¢ã©ã¤ã³ããå¿
-è¦ãããå ´åã¯ 4 ãæå®ããã
+ *  4 オクテット単位で、アラインする必要がある場合は 4 を指定する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/init_tecs.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/init_tecs.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/init_tecs.c	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *		TECSã®åæåå¦ç
+ *		TECSの初期化処理
  *
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/kernel.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/kernel.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/kernel.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,14 +42,14 @@
 
 /*
- *		TOPPERS/ASPã«ã¼ãã«ãªãã¸ã§ã¯ã ã³ã³ãã¼ãã³ãè¨è¿°ãã¡ã¤ã«
- */
-
-/*
- *  ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ã³ã³ãã¼ãã³ãåã®ããã®ããããã¡ã¤ã«
+ *		TOPPERS/ASPカーネルオブジェクト コンポーネント記述ファイル
+ */
+
+/*
+ *  カーネルオブジェクトのコンポーネント化のためのヘッダファイル
  */
 import_C("tecs_kernel.h");
 
 /*
- *  ã«ã¼ãã«æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  カーネル操作のシグニチャ（タスクコンテキスト用）
  */
 signature sKernel {
@@ -106,5 +91,5 @@
 
 /*
- *  ã«ã¼ãã«æä½ã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  カーネル操作のシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -123,5 +108,5 @@
 	ER		exitKernel(void);
 
-	/* CPUä¾å¤ãã³ãã©ä¸­ã§ä½¿ç¨ãã */
+	/* CPU例外ハンドラ中で使用する */
 	bool_t	exceptionSenseDispatchPendingState
 						([in] const void *p_exceptionInformation);
@@ -129,5 +114,5 @@
 
 /*
- *  ã«ã¼ãã«ã®ã»ã«ã¿ã¤ã
+ *  カーネルのセルタイプ
  */
 [singleton]
@@ -138,5 +123,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ãéç¥ãåãåãããã®ã·ã°ããã£
+ *  タイムイベント通知を受け取るためのシグネチャ
  */
 [context("non-task")]
@@ -145,5 +130,5 @@
 
 /*
- *  ã¿ã¹ã¯æ¬ä½ã®ã·ã°ããã£
+ *  タスク本体のシグニチャ
  */
 signature sTaskBody {
@@ -152,5 +137,5 @@
 
 /*
- *  ã¿ã¹ã¯æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  タスク操作のシグニチャ（タスクコンテキスト用）
  */
 signature sTask {
@@ -173,5 +158,5 @@
 
 /*
- *  ã¿ã¹ã¯æä½ã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  タスク操作のシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -183,5 +168,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®ã»ã«ã¿ã¤ã
+ *  タスクのセルタイプ
  */
 [active]
@@ -213,5 +198,5 @@
 
 /*
- *  ã»ããã©æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  セマフォ操作のシグニチャ（タスクコンテキスト用）
  */
 signature sSemaphore {
@@ -225,5 +210,5 @@
 
 /*
- *  ã»ããã©æä½ã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  セマフォ操作のシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -233,5 +218,5 @@
 
 /*
- *  ã»ããã©ã®ã»ã«ã¿ã¤ã
+ *  セマフォのセルタイプ
  */
 celltype tSemaphore {
@@ -258,5 +243,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  イベントフラグ操作のシグニチャ（タスクコンテキスト用）
  */
 signature sEventflag {
@@ -274,5 +259,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°æä½ã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  イベントフラグ操作のシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -282,5 +267,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ã»ã«ã¿ã¤ã
+ *  イベントフラグのセルタイプ
  */
 celltype tEventflag {
@@ -306,5 +291,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  データキュー操作のシグニチャ（タスクコンテキスト用）
  */
 signature sDataqueue {
@@ -321,5 +306,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼æä½ã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  データキュー操作のシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -330,5 +315,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®ã»ã«ã¿ã¤ã
+ *  データキューのセルタイプ
  */
 celltype tDataqueue {
@@ -355,6 +340,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  優先度データキュー操作のシグニチャ（タスクコンテキスト用）
  */
 signature sPriorityDataqueue {
@@ -372,6 +356,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼æä½ã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  優先度データキュー操作のシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -381,6 +364,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ã»ã«ã¿ã¤ã
+ *  優先度データキューのセルタイプ
  */
 celltype tPriorityDataqueue {
@@ -407,5 +389,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  ミューテックス操作のシグニチャ（タスクコンテキスト用）
  */
 signature sMutex {
@@ -419,5 +401,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã»ã«ã¿ã¤ã
+ *  ミューテックスのセルタイプ
  */
 celltype tMutex {
@@ -440,5 +422,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªã¡ã¢ãªãã¼ã«æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  固定長メモリメモリプール操作のシグニチャ（タスクコンテキスト用）
  */
 [deviate]
@@ -453,5 +435,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®ã»ã«ã¿ã¤ã
+ *  固定長メモリプールのセルタイプ
  */
 celltype tFixedSizeMemoryPool {
@@ -478,5 +460,5 @@
 
 /*
- *  ãã³ãã©æ¬ä½ã®ã·ã°ããã£
+ *  ハンドラ本体のシグニチャ
  */
 [context("non-task")]
@@ -486,5 +468,5 @@
 
 /*
- *  ã¿ã¤ã ã¤ãã³ããã³ãã©ãæå®ããããã®ã»ã«ã¿ã¤ã
+ *  タイムイベントハンドラを指定するためのセルタイプ
  */
 celltype tTimeEventHandler {
@@ -498,5 +480,5 @@
 
 /*
- *  å¨æéç¥ãæä½ããããã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  周期通知を操作するためのシグニチャ（タスクコンテキスト用）
  */
 signature sCyclic {
@@ -507,5 +489,5 @@
 
 /*
- *  å¨æéç¥ã®ã»ã«ã¿ã¤ã
+ *  周期通知のセルタイプ
  */
 [active, generate(NotifierPlugin,
@@ -525,24 +507,24 @@
 		[omit] RELTIM	cyclePhase = 0;
 
-		/* å¤æ°ã®è¨­å®ã«ããéç¥ï¼TNFY_SETVARï¼*/
+		/* 変数の設定による通知（TNFY_SETVAR）*/
 		[omit] intptr_t *setVariableAddress = 0;
 		[omit] intptr_t setVariableValue = 0;
 
-		/* å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ãã«ããéç¥ï¼TNFY_INCVARï¼*/
+		/* 変数のインクリメントによる通知（TNFY_INCVAR）*/
 		[omit] intptr_t *incrementedVariableAddress = 0;
 
-		/* ã¤ãã³ããã©ã°ã®ã»ããã«ããéç¥ï¼TNFY_SETFLGï¼*/
+		/* イベントフラグのセットによる通知（TNFY_SETFLG）*/
 		[omit] FLGPTN flagPattern = 0;
 
-		/* ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ã«ããéç¥ï¼TNFY_SNDDTQï¼*/
+		/* データキューへの送信による通知（TNFY_SNDDTQ）*/
 		[omit] intptr_t dataqueueSentValue = 0;
 
-		/* å¤æ°ã®è¨­å®ã«ããã¨ã©ã¼éç¥ï¼TENFY_SETVARï¼*/
+		/* 変数の設定によるエラー通知（TENFY_SETVAR）*/
 		[omit] intptr_t *setVariableAddressForError = 0;
 
-		/* å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ãã«ããã¨ã©ã¼éç¥ï¼TENFY_INCVARï¼*/
+		/* 変数のインクリメントによるエラー通知（TENFY_INCVAR）*/
 		[omit] intptr_t *incrementedVariableAddressForError = 0;
 
-		/* ã¤ãã³ããã©ã°ã®ã»ããã«ããã¨ã©ã¼éç¥ï¼TENFY_SETFLGï¼*/
+		/* イベントフラグのセットによるエラー通知（TENFY_SETFLG）*/
 		[omit] FLGPTN flagPatternForError = 0;
 	};
@@ -554,5 +536,5 @@
 
 /*
- *  å¨æéç¥ã«ã¦ã¼ã¶ã¼ãã³ãã©ãæå®ããããã®è¤åã»ã«ã¿ã¤ã
+ *  周期通知にユーザーハンドラを指定するための複合セルタイプ
  */
 [active]
@@ -584,5 +566,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ãæä½ããããã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  アラーム通知を操作するためのシグニチャ（タスクコンテキスト用）
  */
 signature sAlarm {
@@ -593,5 +575,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ãæä½ããããã®ã·ã°ããã£ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  アラーム通知を操作するためのシグニチャ（非タスクコンテキスト用）
  */
 [context("non-task")]
@@ -602,5 +584,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®ã»ã«ã¿ã¤ã
+ *  アラーム通知のセルタイプ
  */
 [active, generate(NotifierPlugin,
@@ -619,24 +601,24 @@
 		[omit] bool_t	ignoreErrors = false;
 
-		/* å¤æ°ã®è¨­å®ã«ããéç¥ï¼TNFY_SETVARï¼*/
+		/* 変数の設定による通知（TNFY_SETVAR）*/
 		[omit] intptr_t *setVariableAddress = 0;
 		[omit] intptr_t setVariableValue = 0;
 
-		/* å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ãã«ããéç¥ï¼TNFY_INCVARï¼*/
+		/* 変数のインクリメントによる通知（TNFY_INCVAR）*/
 		[omit] intptr_t *incrementedVariableAddress = 0;
 
-		/* ã¤ãã³ããã©ã°ã®ã»ããã«ããéç¥ï¼TNFY_SETFLGï¼*/
+		/* イベントフラグのセットによる通知（TNFY_SETFLG）*/
 		[omit] FLGPTN flagPattern = 0;
 
-		/* ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ã«ããéç¥ï¼TNFY_SNDDTQï¼*/
+		/* データキューへの送信による通知（TNFY_SNDDTQ）*/
 		[omit] intptr_t dataqueueSentValue = 0;
 
-		/* å¤æ°ã®è¨­å®ã«ããã¨ã©ã¼éç¥ï¼TENFY_SETVARï¼*/
+		/* 変数の設定によるエラー通知（TENFY_SETVAR）*/
 		[omit] intptr_t *setVariableAddressForError = 0;
 
-		/* å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ãã«ããã¨ã©ã¼éç¥ï¼TENFY_INCVARï¼*/
+		/* 変数のインクリメントによるエラー通知（TENFY_INCVAR）*/
 		[omit] intptr_t *incrementedVariableAddressForError = 0;
 
-		/* ã¤ãã³ããã©ã°ã®ã»ããã«ããã¨ã©ã¼éç¥ï¼TENFY_SETFLGï¼*/
+		/* イベントフラグのセットによるエラー通知（TENFY_SETFLG）*/
 		[omit] FLGPTN flagPatternForError = 0;
 	};
@@ -648,5 +630,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã«ã¦ã¼ã¶ã¼ãã³ãã©ãæå®ããããã®è¤åã»ã«ã¿ã¤ã
+ *  アラーム通知にユーザーハンドラを指定するための複合セルタイプ
  */
 [active]
@@ -676,5 +658,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã©ã¤ã³æä½ã®ã·ã°ããã£ï¼ã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  割込み要求ライン操作のシグニチャ（タスクコンテキスト用）
  */
 signature sInterruptRequest {
@@ -687,5 +669,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®ã»ã«ã¿ã¤ã
+ *  割込み要求ラインのセルタイプ
  */
 celltype tInterruptRequest {
@@ -705,5 +687,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®ã»ã«ã¿ã¤ã
+ *  割込みサービスルーチンのセルタイプ
  */
 [active]
@@ -729,5 +711,5 @@
 
 /*
- *  å²è¾¼ã¿ãã³ãã©ã®ã»ã«ã¿ã¤ã
+ *  割込みハンドラのセルタイプ
  */
 [active]
@@ -750,5 +732,5 @@
 
 /*
- *  CPUä¾å¤ãã³ãã©ã®ã»ã«ã¿ã¤ã
+ *  CPU例外ハンドラのセルタイプ
  */
 [active]
@@ -771,5 +753,5 @@
 
 /*
- *  åæåï¼çµäºå¦çã«ã¼ãã³æ¬ä½ã®ã·ã°ããã£
+ *  初期化／終了処理ルーチン本体のシグニチャ
  */
 signature sRoutineBody {
@@ -778,5 +760,5 @@
 
 /*
- *  åæåã«ã¼ãã³ã®ã»ã«ã¿ã¤ã
+ *  初期化ルーチンのセルタイプ
  */
 [active]
@@ -799,5 +781,5 @@
 
 /*
- *  çµäºå¦çã«ã¼ãã³ã®ã»ã«ã¿ã¤ã
+ *  終了処理ルーチンのセルタイプ
  */
 [active]
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tAlarmNotifier.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tAlarmNotifier.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tAlarmNotifier.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tAlarmNotifier_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tAlarmNotifier_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tAlarmNotifier_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åä½éå§
+ *  アラーム通知の動作開始
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åä½åæ­¢
+ *  アラーム通知の動作停止
  */
 Inline ER
@@ -80,7 +65,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®ç¶æ
-åç
-§
+ *  アラーム通知の状態参照
  */
 Inline ER
@@ -92,5 +75,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åä½éå§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  アラーム通知の動作開始（非タスクコンテキスト用）
  */
 Inline ER
@@ -102,5 +85,5 @@
 
 /*
- *  ã¢ã©ã¼ã éç¥ã®åä½åæ­¢ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  アラーム通知の動作停止（非タスクコンテキスト用）
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCpuExceptionHandler.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCpuExceptionHandler.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCpuExceptionHandler.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,5 +44,5 @@
 
 /*
- *  å²è¾¼ã¿ãã³ãã©æ¬ä½ã®å¼åºã
+ *  割込みハンドラ本体の呼出し
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCyclicNotifier.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCyclicNotifier.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCyclicNotifier.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCyclicNotifier_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCyclicNotifier_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tCyclicNotifier_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  å¨æéç¥ã®åä½éå§
+ *  周期通知の動作開始
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  å¨æéç¥ã®åä½åæ­¢
+ *  周期通知の動作停止
  */
 Inline ER
@@ -80,7 +65,5 @@
 
 /*
- *  å¨æéç¥ã®ç¶æ
-åç
-§
+ *  周期通知の状態参照
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tDataqueue_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tDataqueue_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tDataqueue_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡
+ *  データキューへの送信
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  データキューへの送信（ポーリング）
  */
 Inline ER
@@ -80,5 +65,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  データキューへの送信（タイムアウトあり）
  */
 Inline ER
@@ -90,5 +75,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®å¼·å¶éä¿¡
+ *  データキューへの強制送信
  */
 Inline ER
@@ -100,5 +85,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡
+ *  データキューからの受信
  */
 Inline ER
@@ -110,5 +95,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  データキューからの受信（ポーリング）
  */
 Inline ER
@@ -120,5 +105,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  データキューからの受信（タイムアウトあり）
  */
 Inline ER
@@ -130,5 +115,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®ååæå
+ *  データキューの再初期化
  */
 Inline ER
@@ -140,7 +125,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã®ç¶æ
-åç
-§
+ *  データキューの状態参照
  */
 Inline ER
@@ -152,5 +135,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  データキューへの送信（ポーリング，非タスクコンテキスト用）
  */
 Inline ER
@@ -162,5 +145,5 @@
 
 /*
- *  ãã¼ã¿ã­ã¥ã¼ã¸ã®å¼·å¶éä¿¡ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  データキューへの強制送信（非タスクコンテキスト用）
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tEventflag_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tEventflag_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tEventflag_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ã»ãã
+ *  イベントフラグのセット
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ã¯ãªã¢
+ *  イベントフラグのクリア
  */
 Inline ER
@@ -80,6 +65,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡
+ *  イベントフラグ待ち
  */
 Inline ER
@@ -92,6 +76,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡ï¼ãã¼ãªã³ã°ï¼
+ *  イベントフラグ待ち（ポーリング）
  */
 Inline ER
@@ -104,6 +87,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°å¾
-ã¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  イベントフラグ待ち（タイムアウトあり）
  */
 Inline ER
@@ -117,5 +99,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ååæå
+ *  イベントフラグの再初期化
  */
 Inline ER
@@ -127,7 +109,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ç¶æ
-åç
-§
+ *  イベントフラグの状態参照
  */
 Inline ER
@@ -139,5 +119,5 @@
 
 /*
- *  ã¤ãã³ããã©ã°ã®ã»ããï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  イベントフラグのセット（非タスクコンテキスト用）
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tFixedSizeMemoryPool_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tFixedSizeMemoryPool_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tFixedSizeMemoryPool_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾
+ *  固定長メモリブロックの獲得
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾ï¼ãã¼ãªã³ã°ï¼
+ *  固定長メモリブロックの獲得（ポーリング）
  */
 Inline ER
@@ -80,5 +65,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®ç²å¾ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  固定長メモリブロックの獲得（タイムアウトあり）
  */
 Inline ER
@@ -90,5 +75,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã­ãã¯ã®è¿å´
+ *  固定長メモリブロックの返却
  */
 Inline ER
@@ -100,5 +85,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®ååæå
+ *  固定長メモリプールの再初期化
  */
 Inline ER
@@ -110,7 +95,5 @@
 
 /*
- *  åºå®é·ã¡ã¢ãªãã¼ã«ã®ç¶æ
-åç
-§
+ *  固定長メモリプールの状態参照
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tISR.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tISR.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tISR.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,5 +44,5 @@
 
 /*
- *  å²è¾¼ã¿ãµã¼ãã«ã«ã¼ãã³æ¬ä½ã®å¼åºã
+ *  割込みサービルルーチン本体の呼出し
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInitializeRoutine.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInitializeRoutine.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInitializeRoutine.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,5 +44,5 @@
 
 /*
- *  åæåã«ã¼ãã³æ¬ä½ã®å¼åºã
+ *  初期化ルーチン本体の呼出し
  */
 void  tInitializeRoutine_start(intptr_t exinf)
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInterruptHandler.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInterruptHandler.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInterruptHandler.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,5 +44,5 @@
 
 /*
- *  å²è¾¼ã¿ãã³ãã©æ¬ä½ã®å¼åºã
+ *  割込みハンドラ本体の呼出し
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInterruptRequest_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInterruptRequest_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tInterruptRequest_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  $Id$  
@@ -60,5 +45,5 @@
 
 /*
- *  å²è¾¼ã¿ã®ç¦æ­¢
+ *  割込みの禁止
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  å²è¾¼ã¿ã®è¨±å¯
+ *  割込みの許可
  */
 Inline ER
@@ -80,5 +65,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢
+ *  割込み要求のクリア
  */
 Inline ER
@@ -90,5 +75,5 @@
 
 /*
- *  å²è¾¼ã¿ã®è¦æ±
+ *  割込みの要求
  */
 Inline ER
@@ -100,5 +85,5 @@
 
 /*
- *  å²è¾¼ã¿è¦æ±ã®ãã§ãã¯
+ *  割込み要求のチェック
  */
 Inline ER_BOOL
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tKernel_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tKernel_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tKernel_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,7 +45,5 @@
 
 /*
- *  èªã¿ã¹ã¯ã®æ¡å¼µæ
-å ±ã®åç
-§
+ *  自タスクの拡張情報の参照
  */
 Inline ER
@@ -71,6 +54,5 @@
 
 /*
- *  èµ·åºå¾
-ã¡
+ *  起床待ち
  */
 Inline ER
@@ -81,6 +63,5 @@
 
 /*
- *  èµ·åºå¾
-ã¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  起床待ち（タイムアウトあり）
  */
 Inline ER
@@ -91,6 +72,5 @@
 
 /*
- *  èªã¿ã¹ã¯ã®é
-å»¶
+ *  自タスクの遅延
  */
 Inline ER
@@ -101,5 +81,5 @@
 
 /*
- *  èªã¿ã¹ã¯ã®çµäº
+ *  自タスクの終了
  */
 Inline ER
@@ -110,5 +90,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºã®ç¦æ­¢
+ *  タスク終了の禁止
  */
 Inline ER
@@ -119,5 +99,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºã®è¨±å¯
+ *  タスク終了の許可
  */
 Inline ER
@@ -128,7 +108,5 @@
 
 /*
- *  ã¿ã¹ã¯çµäºç¦æ­¢ç¶æ
-ã®åç
-§
+ *  タスク終了禁止状態の参照
  */
 Inline bool_t
@@ -139,5 +117,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®è¨­å®
+ *  システム時刻の設定
  */
 Inline ER
@@ -148,6 +126,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®åç
-§
+ *  システム時刻の参照
  */
 Inline ER
@@ -158,5 +135,5 @@
 
 /*
- *  ã·ã¹ãã æå»ã®èª¿æ´
+ *  システム時刻の調整
  */
 Inline ER
@@ -167,6 +144,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®åç
-§
+ *  高分解能タイマの参照
  */
 Inline HRTCNT
@@ -177,6 +153,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®åªå
-é ä½ã®åè»¢
+ *  タスクの優先順位の回転
  */
 Inline ER
@@ -187,7 +162,5 @@
 
 /*
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯IDã®åç
-§
+ *  実行状態のタスクIDの参照
  */
 Inline ER
@@ -198,6 +171,5 @@
 
 /*
- *  å®è¡ã§ããã¿ã¹ã¯ã®æ°ã®åç
-§
+ *  実行できるタスクの数の参照
  */
 Inline ER
@@ -208,7 +180,5 @@
 
 /*
- *  æå®ããåªå
-é ä½ã®ã¿ã¹ã¯IDã®åç
-§
+ *  指定した優先順位のタスクIDの参照
  */
 Inline ER
@@ -218,6 +188,5 @@
 }
 /*
- *  CPUã­ãã¯ç¶æ
-ã¸ã®é·ç§»
+ *  CPUロック状態への遷移
  */
 Inline ER
@@ -228,6 +197,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®è§£é¤
+ *  CPUロック状態の解除
  */
 Inline ER
@@ -238,5 +206,5 @@
 
 /*
- *  ãã£ã¹ãããã®ç¦æ­¢
+ *  ディスパッチの禁止
  */
 Inline ER
@@ -247,5 +215,5 @@
 
 /*
- *  ãã£ã¹ãããã®è¨±å¯
+ *  ディスパッチの許可
  */
 Inline ER
@@ -256,6 +224,5 @@
 
 /*
- *  ã³ã³ãã­ã¹ãã®åç
-§
+ *  コンテキストの参照
  */
 Inline bool_t
@@ -266,7 +233,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®åç
-§
+ *  CPUロック状態の参照
  */
 Inline bool_t
@@ -277,7 +242,5 @@
 
 /*
- *  ãã£ã¹ãããç¦æ­¢ç¶æ
-ã®åç
-§
+ *  ディスパッチ禁止状態の参照
  */
 Inline bool_t
@@ -288,7 +251,5 @@
 
 /*
- *  ãã£ã¹ãããä¿çç¶æ
-ã®åç
-§
+ *  ディスパッチ保留状態の参照
  */
 Inline bool_t
@@ -299,7 +260,5 @@
 
 /*
- *  ã«ã¼ãã«éåä½ç¶æ
-ã®åç
-§
+ *  カーネル非動作状態の参照
  */
 Inline bool_t
@@ -310,5 +269,5 @@
 
 /*
- *  ã«ã¼ãã«ã®çµäº
+ *  カーネルの終了
  */
 Inline ER
@@ -319,6 +278,5 @@
 
 /*
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®å¤æ´
+ *  割込み優先度マスクの変更
  */
 Inline ER
@@ -329,7 +287,5 @@
 
 /*
- *  å²è¾¼ã¿åªå
-åº¦ãã¹ã¯ã®åç
-§
+ *  割込み優先度マスクの参照
  */
 Inline ER
@@ -340,6 +296,5 @@
 
 /*
- *  é«åè§£è½ã¿ã¤ãã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  高分解能タイマの参照（非タスクコンテキスト用）
  */
 Inline HRTCNT
@@ -350,6 +305,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®åªå
-é ä½ã®åè»¢ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  タスクの優先順位の回転（非タスクコンテキスト用）
  */
 Inline ER
@@ -360,7 +314,5 @@
 
 /*
- *  å®è¡ç¶æ
-ã®ã¿ã¹ã¯IDã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  実行状態のタスクIDの参照（非タスクコンテキスト用）
  */
 Inline ER
@@ -371,6 +323,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã¸ã®é·ç§»ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  CPUロック状態への遷移（非タスクコンテキスト用）
  */
 Inline ER
@@ -381,6 +332,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®è§£é¤ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  CPUロック状態の解除（非タスクコンテキスト用）
  */
 Inline ER
@@ -391,6 +341,5 @@
 
 /*
- *  ã³ã³ãã­ã¹ãã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  コンテキストの参照（非タスクコンテキスト用）
  */
 Inline bool_t
@@ -401,7 +350,5 @@
 
 /*
- *  CPUã­ãã¯ç¶æ
-ã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  CPUロック状態の参照（非タスクコンテキスト用）
  */
 Inline bool_t
@@ -412,7 +359,5 @@
 
 /*
- *  ãã£ã¹ãããç¦æ­¢ç¶æ
-ã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  ディスパッチ禁止状態の参照（非タスクコンテキスト用）
  */
 Inline bool_t
@@ -423,7 +368,5 @@
 
 /*
- *  ãã£ã¹ãããä¿çç¶æ
-ã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  ディスパッチ保留状態の参照（非タスクコンテキスト用）
  */
 Inline bool_t
@@ -434,7 +377,5 @@
 
 /*
- *  ã«ã¼ãã«éåä½ç¶æ
-ã®åç
-§ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  カーネル非動作状態の参照（非タスクコンテキスト用）
  */
 Inline bool_t
@@ -445,5 +386,5 @@
 
 /*
- *  ã«ã¼ãã«ã®çµäºï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  カーネルの終了（非タスクコンテキスト用）
  */
 Inline ER
@@ -454,7 +395,5 @@
 
 /*
- *  CPUä¾å¤çºçæã®ãã£ã¹ãããä¿çç¶æ
-ã®åç
-§
+ *  CPU例外発生時のディスパッチ保留状態の参照
  */
 Inline bool_t
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tMutex_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tMutex_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tMutex_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯
+ *  ミューテックスのロック
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯ï¼ãã¼ãªã³ã°ï¼
+ *  ミューテックスのロック（ポーリング）
  */
 Inline ER
@@ -80,5 +65,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  ミューテックスのロック（タイムアウトあり）
  */
 Inline ER
@@ -90,5 +75,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ã­ãã¯è§£é¤
+ *  ミューテックスのロック解除
  */
 Inline ER
@@ -100,5 +85,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ååæå
+ *  ミューテックスの再初期化
  */
 Inline ER
@@ -110,7 +95,5 @@
 
 /*
- *  ãã¥ã¼ããã¯ã¹ã®ç¶æ
-åç
-§
+ *  ミューテックスの状態参照
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tPriorityDataqueue_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tPriorityDataqueue_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tPriorityDataqueue_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,6 +45,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡
+ *  優先度データキューへの送信
  */
 Inline ER
@@ -71,6 +55,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  優先度データキューへの送信（ポーリング）
  */
 Inline ER
@@ -82,6 +65,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  優先度データキューへの送信（タイムアウトあり）
  */
 Inline ER
@@ -94,6 +76,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡
+ *  優先度データキューからの受信
  */
 Inline ER
@@ -105,6 +86,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼
+ *  優先度データキューからの受信（ポーリング）
  */
 Inline ER
@@ -117,6 +97,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  優先度データキューからの受信（タイムアウトあり）
  */
 Inline ER
@@ -129,6 +108,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ååæå
+ *  優先度データキューの再初期化
  */
 Inline ER
@@ -140,8 +118,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã®ç¶æ
-åç
-§
+ *  優先度データキューの状態参照
  */
 Inline ER
@@ -153,6 +128,5 @@
 
 /*
- *  åªå
-åº¦ãã¼ã¿ã­ã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  優先度データキューへの送信（ポーリング，非タスクコンテキスト用）
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tSemaphore_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tSemaphore_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tSemaphore_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  ã»ããã©è³æºã®è¿å´
+ *  セマフォ資源の返却
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  ã»ããã©è³æºã®ç²å¾
+ *  セマフォ資源の獲得
  */
 Inline ER
@@ -80,5 +65,5 @@
 
 /*
- *  ã»ããã©è³æºã®ç²å¾ï¼ãã¼ãªã³ã°ï¼
+ *  セマフォ資源の獲得（ポーリング）
  */
 Inline ER
@@ -90,5 +75,5 @@
 
 /*
- *  ã»ããã©è³æºã®ç²å¾ï¼ã¿ã¤ã ã¢ã¦ãããï¼
+ *  セマフォ資源の獲得（タイムアウトあり）
  */
 Inline ER
@@ -100,5 +85,5 @@
 
 /*
- *  ã»ããã©ã®ååæå
+ *  セマフォの再初期化
  */
 Inline ER
@@ -110,7 +95,5 @@
 
 /*
- *  ã»ããã©ã®ç¶æ
-åç
-§
+ *  セマフォの状態参照
  */
 Inline ER
@@ -122,5 +105,5 @@
 
 /*
- *  ã»ããã©è³æºã®è¿å´ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  セマフォ資源の返却（非タスクコンテキスト用）
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTask.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTask.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTask.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,5 +44,5 @@
 
 /*
- *  ã¿ã¹ã¯æ¬ä½ã®å¼åºã
+ *  タスク本体の呼出し
  */
 void
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTask_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTask_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTask_inline.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -60,5 +45,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®èµ·å
+ *  タスクの起動
  */
 Inline ER
@@ -70,5 +55,5 @@
 
 /*
- *  ã¿ã¹ã¯èµ·åè¦æ±ã®ã­ã£ã³ã»ã«
+ *  タスク起動要求のキャンセル
  */
 Inline ER_UINT
@@ -80,7 +65,5 @@
 
 /*
- *  ã¿ã¹ã¯ç¶æ
-ã®åç
-§
+ *  タスク状態の参照
  */
 Inline ER
@@ -92,6 +75,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®ãã¼ã¹åªå
-åº¦ã®å¤æ´
+ *  タスクのベース優先度の変更
  */
 Inline ER
@@ -103,7 +85,5 @@
 
 /*
- *  ã¿ã¹ã¯åªå
-åº¦ã®åç
-§
+ *  タスク優先度の参照
  */
 Inline ER
@@ -115,7 +95,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®ç¶æ
-åç
-§
+ *  タスクの状態参照
  */
 Inline ER
@@ -127,5 +105,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®èµ·åº
+ *  タスクの起床
  */
 Inline ER
@@ -137,5 +115,5 @@
 
 /*
- *  ã¿ã¹ã¯èµ·åºè¦æ±ã®ã­ã£ã³ã»ã«
+ *  タスク起床要求のキャンセル
  */
 Inline ER_UINT
@@ -147,7 +125,5 @@
 
 /*
- *  å¾
-ã¡ç¶æ
-ã®å¼·å¶è§£é¤
+ *  待ち状態の強制解除
  */
 Inline ER
@@ -159,7 +135,5 @@
 
 /*
- *  å¼·å¶å¾
-ã¡ç¶æ
-ã¸ã®ç§»è¡
+ *  強制待ち状態への移行
  */
 Inline ER
@@ -171,7 +145,5 @@
 
 /*
- *  å¼·å¶å¾
-ã¡ç¶æ
-ããã®åé
+ *  強制待ち状態からの再開
  */
 Inline ER
@@ -183,5 +155,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®çµäºè¦æ±ï¼»NGKI3469ï¼½
+ *  タスクの終了要求［NGKI3469］
  */
 Inline ER
@@ -193,5 +165,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®å¼·å¶çµäº
+ *  タスクの強制終了
  */
 Inline ER
@@ -203,5 +175,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®èµ·åï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  タスクの起動（非タスクコンテキスト用）
  */
 Inline ER
@@ -213,5 +185,5 @@
 
 /*
- *  ã¿ã¹ã¯ã®èµ·åºï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  タスクの起床（非タスクコンテキスト用）
  */
 Inline ER
@@ -223,7 +195,5 @@
 
 /*
- *  å¾
-ã¡ç¶æ
-ã®å¼·å¶è§£é¤ï¼éã¿ã¹ã¯ã³ã³ãã­ã¹ãç¨ï¼
+ *  待ち状態の強制解除（非タスクコンテキスト用）
  */
 Inline ER
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTerminateRoutine.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTerminateRoutine.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tTerminateRoutine.c	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,5 +44,5 @@
 
 /*
- *  çµäºå¦çã«ã¼ãã³æ¬ä½ã®å¼åºã
+ *  終了処理ルーチン本体の呼出し
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tecs_kernel.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tecs_kernel.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecs_kernel/tecs_kernel.h	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,5 +42,5 @@
 
 /*
- *		ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ã³ã³ãã¼ãã³ãåã®ããã®ããããã¡ã¤ã«
+ *		カーネルオブジェクトのコンポーネント化のためのヘッダファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/MANIFEST_for_asp3
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/MANIFEST_for_asp3	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/MANIFEST_for_asp3	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/MANIFEST_tecsgen_body
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/MANIFEST_tecsgen_body	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/MANIFEST_tecsgen_body	(revision 389)
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/Makefile
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/Makefile	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/Makefile	(revision 389)
@@ -5,47 +5,32 @@
 #   Copyright (C) 2008-2013 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -117,12 +102,12 @@
 
 $(GEN_TAB_DEB) : $(BNF) $(GEN_SRC) $(PLUGIN_SRC)
-	racc -v -g -o $(GEN_TAB_DEB) $(BNF)	# yydebug ãæå¹ã«ãã
+	racc -v -g -o $(GEN_TAB_DEB) $(BNF)	# yydebug を有効にする
 
-print_error :	# ã¨ã©ã¼ã¡ãã»ã¼ã¸ãæ¾ãåºã
+print_error :	# エラーメッセージを拾い出す
 	grep -e "Generator\.error" -e cdl_error $(LIB_PATH)/*.rb \
 		| grep -v bnf.tab.rb \
 		| sed -e "s/\s*Generator\.error(//" -e "s/\s*cdl_error[0-9]*(//" -e "s/).*$$//"
 
-print_error2 :	# ã¨ã©ã¼ã¡ãã»ã¼ã¸ãæ¾ãåºã
+print_error2 :	# エラーメッセージを拾い出す
 	grep '[^A-Z][A-VXYZ][0-9][0-9][0-9][0-9]' $(LIB_PATH)/*.rb \
 		| grep -v bnf.tab.rb \
@@ -131,5 +116,5 @@
 		| sed -e 's/\(.*\)".*/\1/'
 
-print_warning : # ã¦ã©ã¼ãã³ã°ã¡ãã»ã¼ã¸ãæ¾ãåºã
+print_warning : # ウォーニングメッセージを拾い出す
 	grep -e 'Generator\.warning' -e cdl_warning $(LIB_PATH)/*.rb \
 		| grep -v bnf.tab.rb \
@@ -137,9 +122,9 @@
 
 print_expr_token :
-	# Expression ã«å«ã¾ãããã¼ã¯ã³ãæ¾ãåºã
-	# OP_... ããå¾ãã¯å¼ã¨ã¯é¢ä¿ãªããã¼ã¯ã³
+	# Expression に含まれるトークンを拾い出す
+	# OP_... より後ろは式とは関係ないトークン
 	grep ':[A-Z]' bnf.y.rb | sed -e 's/.*\(:[A-Z]\w*\).*/\1/'
 
-print_mikan : # è¨­è¨æªå®é¨åãæ¾ãåºã
+print_mikan : # 設計未完部分を拾い出す
 	grep mikan $(LIB_PATH)/*.rb 
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/in_exerb.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/in_exerb.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/in_exerb.rb	(revision 389)
@@ -6,62 +6,47 @@
 #   Copyright (C) 2008-2015 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# exerb çã§æåã«èª­ã¿ãã¾ãããã¡ã¤ã«
-# ãã®ãã¡ã¤ã«ãã generate.rb ãèª­ã¿ãã¾ãã
+# exerb 版で最初に読みこまれるファイル
+# このファイルから generate.rb が読みこまれる
 
 $IN_EXERB=true
 
-# ãã®å¤æ°ã¯ exerb çã®ã¿
+# この変数は exerb 版のみ
 $path = ENV[ 'PATH' ]
 
-#=== cygwin ã®ãã¹ã Windows ãã¹ã«å¤æ
-# cygpath ã³ãã³ããæ¢ãã¦ãè¦ã¤ããã°å¤æãã
-# å¤æã§ããªãã£ããã¾ãã¯å¤æå¾ã®ãã¹ãè¦ã¤ãããªãå ´åãdefault ãè¿ã
+#=== cygwin のパスを Windows パスに変換
+# cygpath コマンドを探して、見つかれば変換する
+# 変換できなかった、または変換後のパスが見つからない場合、default を返す
 def cygpath( path, default = nil )
   if ! $IN_EXERB then
@@ -96,12 +81,10 @@
 end
 
-# gcc ã®ãã¹ãè¨­å®ãã
-#  cygwin ã®ãããã¼ã¸ã§ã³ã§ã¯ gcc ã¯ gcc-3.exe ã¾ãã¯ gcc-4.exe ã¸ã®ã·ã³ããªãã¯ãªã³ã¯ã¨ãªã£ã¦ãã
-#  exerb çã§ã¯ã·ã³ããªãã¯ãªã³ã¯ãè¾¿ããªããã gcc ã® exe ãæ¢ã
-#  cygwin ã®ãªã³ã¯ã¯ãã·ã¹ãã å±æ§ãä»ããããã³ãã³ããã­ã³ããä¸ã§ã¯ dir /A:S ãæå®ããªãã¨è¡¨ç¤ºãããªã
-#  (cygwin ã®ãã¼ã¸ã§ã³ã§å®è£
-ãç°ãªããããããªã)
-#  ãã¡ã¤ã«ã®å
-é ­2ãã¤ããèª­åºã PE ãã©ã¼ãããã®ãã¸ãã¯ã«ä¸è´ãããèª¿ã¹ã
+# gcc のパスを設定する
+#  cygwin のあるバージョンでは gcc は gcc-3.exe または gcc-4.exe へのシンボリックリンクとなっている
+#  exerb 版ではシンボリックリンクを辿れないため gcc の exe を探す
+#  cygwin のリンクは、システム属性が付けられ、コマンドプロンプト上では dir /A:S を指定しないと表示されない
+#  (cygwin のバージョンで実装が異なるかもしれない)
+#  ファイルの先頭2バイトを読出し PE フォーマットのマジックに一致するか調べる
 $gcc = "gcc"
 $path.split( ";" ).each{ |path|
@@ -112,5 +95,5 @@
       begin
         magic = File.read( gcc_path, 2 )
-        if magic == "MZ"                  # ãã¸ãã¯ããã§ãã¯
+        if magic == "MZ"                  # マジックをチェック
           $gcc = gcc
           found = true
@@ -118,5 +101,5 @@
         end
       rescue
-        # magic ã®èª­åºãã«å¤±æãç¡è¦
+        # magic の読出しに失敗。無視
       end
     end
@@ -125,7 +108,7 @@
 }
 
-# cpp ã³ãã³ããè¨­å®ãã
+# cpp コマンドを設定する
 $cpp = "#{$gcc} -E -D TECSGEN"
 
-# exerb ç TECS ã¸ã§ãã¬ã¼ã¿ã®å®è¡ãéå§
+# exerb 版 TECS ジェネレータの実行を開始
 require "tecsgen.rb"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfo.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfo.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfo.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -95,23 +80,22 @@
     signature sTypeInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1] = NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1] = NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         uint32_t   getSize(void);    // size of the value in bytes
         int8_t     getKind(void);    // see Constants of Kinds
         uint32_t   getNType(void);
-           // kind == ARRAY ã®å ´åãµã¤ãºãPOINTER, TYPEDEF ã®å ´å1ãããä»¥å¤ã¯0
+           // kind == ARRAY の場合サイズ、POINTER, TYPEDEF の場合1、それ以外は0
         ER     getTypeInfo( [out]Descriptor(sTypeInfo) *desc );
-           // kind == POINTER, TYPEDEF ã®å ´åãdesc ã«æå¹ãªå¤ãè¿ã
+           // kind == POINTER, TYPEDEF の場合、desc に有効な値を返す
         uint32_t   getNMember(void);
-           // STRUCT ã®å ´åã¡ã³ãã¼æ°
+           // STRUCT の場合メンバー数
         ER     getMemberInfo( [in]uint32_t ith, [out]Descriptor(sVarDeclInfo) *desc );
-           // kind == STRUCT ã®å ´åãdesc ã«æå¹ãªå¤ãè¿ã
-           // ith ã¯ã¡ã³ãã¼ã®æ·»æ° 0<=ith<*num
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // kind == STRUCT の場合、desc に有効な値を返す
+           // ith はメンバーの添数 0<=ith<*num
+           // ith が範囲外の場合 E_NORES を返す
 //        void   getSignatureInfo( [out]Descriptor(sSignatureInfo) *desc );
-//           // kind == DESCRIPTOR ã®å ´åãdesc ã«æå¹ãªå¤ãè¿ã
+//           // kind == DESCRIPTOR の場合、desc に有効な値を返す
     };
 
@@ -119,16 +103,15 @@
     signature sVarDeclInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1] = NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1] = NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         void       getLocationInfo(  [out]uint32_t *offset,
                                      [out]int8_t   *place );            // VARDECL_PLACE_*
         void       getTypeInfo( [out]Descriptor( sTypeInfo ) *desc );
         void       getSizeIsExpr( [out,string(max_len)]char_t *expr_str, [in]int32_t max_len );
-          // size_is è¨ç®å¼ãæå­åã§è¿ã. size_is æªæå®ã®å ´å *expr_str = NULL ãè¿ããã
+          // size_is 計算式を文字列で返す. size_is 未指定の場合 *expr_str = NULL が返される
         ER         getSizeIs( [out]uint32_t *size, [in]const void *p_cb);
-          // p_cb ãä¸ããã¨ãsize ãè¿ã (size_is æå®ããªãå ´åï¼E_NOSPT ãè¿ã)
+          // p_cb を与えると、size を返す (size_is 指定がない場合，E_NOSPT を返す)
     };
 
@@ -136,9 +119,8 @@
     signature sParamInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1] = NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1] = NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         ER         getTypeInfo( [out]Descriptor(sTypeInfo) *desc);
         ER         getDir( [out]int8_t *dir );
@@ -148,14 +130,13 @@
     signature sFunctionInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1] = NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1] = NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         void       getReturnTypeInfo( [out]Descriptor( sTypeInfo ) *desc );
         uint32_t   getNParam(void);
         ER         getParamInfo( [in]uint32_t ith, [out]Descriptor(sParamInfo) *param );
            // 0 <= ith < *num
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
     };
 
@@ -163,13 +144,12 @@
     signature sSignatureInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1] = NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1] = NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         uint32_t   getNFunction(void);
         ER         getFunctionInfo( [in]uint32_t ith, [out]Descriptor( sFunctionInfo ) *desc );
            // 0 <= ith < *num
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
     };
 
@@ -177,9 +157,8 @@
     signature sCallInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1]= NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1]= NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         void       getSignatureInfo( [out]Descriptor( sSignatureInfo ) *desc );
         uint32_t   getArraySize(void);
@@ -192,7 +171,7 @@
         void       getLocationInfo(  [out]uint32_t *offset,             // CALL_PLACE_*
                                      [out]int8_t   *place );            // CALL_PLACE_*
-        void       getOptimizeInfo(  [out]bool_t   *b_VMT_useless,      // VMT (é¢æ°ãã¼ãã«) ä¸è¦æé©å (é¢æ°ç´æ¥å¼åºã)
-                                     [out]bool_t   *b_skelton_useless,  // ã¹ã±ã«ãã³é¢æ°ä¸è¦ (
-                                     [out]bool_t   *b_cell_unique );    // åä¸ã®ã»ã«
+        void       getOptimizeInfo(  [out]bool_t   *b_VMT_useless,      // VMT (関数テーブル) 不要最適化 (関数直接呼出し)
+                                     [out]bool_t   *b_skelton_useless,  // スケルトン関数不要 (
+                                     [out]bool_t   *b_cell_unique );    // 単一のセル
     };
 
@@ -200,9 +179,8 @@
     signature sEntryInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1]=NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1]=NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         void       getSignatureInfo( [out]Descriptor( sSignatureInfo ) *desc );
         uint32_t   getArraySize(void);
@@ -213,20 +191,19 @@
     signature sCelltypeInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1]=NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1]=NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         uint32_t   getNAttr(void);
         ER         getAttrInfo( [in]uint32_t ith, [out]Descriptor(sVarDeclInfo)*desc );
         uint32_t   getNVar(void);
         ER         getVarInfo( [in]uint32_t ith,  [out]Descriptor(sVarDeclInfo)*desc );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
         uint32_t   getNCall(void);
         ER         getCallInfo( [in]uint32_t ith, [out]Descriptor(sCallInfo)*desc );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
         uint32_t   getNEntry(void);
         ER         getEntryInfo( [in]uint32_t ith, [out]Descriptor(sEntryInfo)*desc );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
         bool_t     isSingleton(void);
         bool_t     isIDX_is_ID(void);
@@ -239,25 +216,21 @@
     signature sCellInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1]=NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1]=NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         uint32_t   getNRawEntryDescriptorInfo( void );
         ER         getRawEntryDescriptorInfo( [in]int_t index, [out]Descriptor(sRawEntryDescriptorInfo) *desc );
-           // index ã¯ãåãå£ãæå® (CelltypeInfo ã® cEntryInfo ã®åºæ°ã«ä¸è´ãã)
+           // index は、受け口を指定 (CelltypeInfo の cEntryInfo の序数に一致する)
         void       getCelltypeInfo( [out]Descriptor( sCelltypeInfo ) *desc );
-        void       getCBP( [out]void **cbp );      // out: é¸è±
-        void       getINIBP( [out]void **inibp );  // out: é¸è±
+        void       getCBP( [out]void **cbp );      // out: 逸脱
+        void       getINIBP( [out]void **inibp );  // out: 逸脱
     };
 
     [deviate]
     signature sRawEntryDescriptorInfo {
-        uint16_t   getNRawEntryDescriptorInfo( void );         // åãå£é
-åã®å ´åãè¦ç´ æ°ãè¿ããéé
-åã®å ´å 1ã
+        uint16_t   getNRawEntryDescriptorInfo( void );         // 受け口配列の場合、要素数を返す。非配列の場合 1。
         ER         getRawDescriptor( [in]int_t ith, [out]void **rawDesc );
-                        // ith ãé
-åç¯å²å¤ã®å ´åãE_NOEXS ãè¿ã
+                        // ith が配列範囲外の場合、E_NOEXS を返す
     };
 
@@ -265,18 +238,17 @@
     signature sNamespaceInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1]=NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1]=NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         uint32_t   getNNamespace(void);
         ER         getNamespaceInfo( [in]uint32_t ith, [out]Descriptor(sNamespaceInfo) *des );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
         uint32_t   getNSignature(void);
         ER         getSignatureInfo( [in]uint32_t ith, [out]Descriptor(sSignatureInfo) *des );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
         uint32_t   getNCelltype(void);
         ER     getCelltypeInfo( [in]uint32_t ith,  [out]Descriptor(sCelltypeInfo) *des );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
     };
 
@@ -284,15 +256,14 @@
     signature sRegionInfo {
         ER         getName( [out,string(max_len)]char_t *name, [in]int_t max_len );
-           // é·ãã max_len ãè¶
-ããå ´åã¯ E_NOMEM ãè¿ã.
-           // (max_len-1) æå­ã³ãã¼ãããname[max_len-1]=NULL
-        uint16_t   getNameLength(void);
-           //  çµç«¯æå­ (NULL) ãå«ãé·ã (strlen ã¨ä»æ§ãç°ãªããã¨ã«æ³¨æ)
+           // 長さが max_len を超えた場合は E_NOMEM を返す.
+           // (max_len-1) 文字コピーする。name[max_len-1]=NULL
+        uint16_t   getNameLength(void);
+           //  終端文字 (NULL) を含む長さ (strlen と仕様が異なることに注意)
         uint32_t   getNCell(void);
         ER         getCellInfo( [in]uint32_t ith,    [out]Descriptor(sCellInfo) *des );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
         uint32_t   getNRegion(void);
         ER         getRegionInfo( [in]uint32_t ith,  [out]Descriptor(sRegionInfo) *des );
-           // ith ãç¯å²å¤ã®å ´å E_NORES ãè¿ã
+           // ith が範囲外の場合 E_NORES を返す
     };
 
@@ -309,6 +280,5 @@
                              [out]Descriptor( sRawEntryDescriptorInfo )*rawEntryDescDesc,
                              [out]Descriptor( sEntryInfo )*entryDesc);
-        ER     findRawEntryDescriptor_unsafe(           // ãã®ã¡ã½ããã¯ãéé
-åã®å ´åã®ã¿ãããã§ãã
+        ER     findRawEntryDescriptor_unsafe(           // このメソッドは、非配列の場合のみしようできる
                              [in,string]const char_t *namespace_path,
                              [out]void **rawDesc );
@@ -318,10 +288,10 @@
 
     /*
-     * tTECSInfo ã»ã«ã¿ã¤ãã®ã»ã«ã¯ãã¦ã¼ã¶ã¼ãè¨­ç½®ããï¼
+     * tTECSInfo セルタイプのセルは、ユーザーが設置する．
      *
-     * ãã®ã»ã«ãããtTECSInfoSub ã¸ã®çµåã¯ããã©ã°ã¤ã³ã«ããèªåçã«
-     * è¡ããããããã¦ã¼ã¶ã¼ã¯ããã®ã»ã«ãè¨­ç½®ããã ãã§ããï¼
-     * (ãã­ãã¿ã¤ããç¨ãã¦ããªãã®ã¯ããã®ã»ã«ãä»»æã®ãªã¼ã¸ã§ã³ã«ç½®
-     * ããã¨ãæ³å®ãã¦ã®ãã®)
+     * このセルから、tTECSInfoSub への結合は、プラグインにより自動的に
+     * 行われるため、ユーザーは、このセルを設置するだけでよい．
+     * (プロトタイプを用いていないのは、このセルを任意のリージョンに置
+     * くことを想定してのもの)
      */
     [singleton,
@@ -337,11 +307,9 @@
 
     /*
-     * tTECSInfoSub ã»ã«ã¿ã¤ãã®ã»ã«ã¯ããã©ã°ã¤ã³ã«ããèªåçæãããï¼
-     * ãã©ã°ã¤ã³ã¯ãçæãè¡ãåã«ã¨ã©ã¼ãçºçãã¦ããå ´åãã»ã«ãçæããªãï¼
-     * (TECSInfoSub ã»ã«ãæªå®ç¾©ã®ã¨ã©ã¼ãåºããã¨ã«ãªããä¸å®å
-¨ãªç¶æ
-
-     * ã§çæãããã¨ããã¨ãRuby ä¾å¤ãçºçããå¯è½æ§ããããããçæ
-     * ããªã)
+     * tTECSInfoSub セルタイプのセルは、プラグインにより自動生成される．
+     * プラグインは、生成を行う前にエラーが発生している場合、セルを生成しない．
+     * (TECSInfoSub セルが未定義のエラーも出ることになる。不完全な状態
+     * で生成しようとすると、Ruby 例外を発生する可能性があるため、生成
+     * しない)
      */
     [singleton]
@@ -352,6 +320,5 @@
         [ref_desc]
             call sRegionInfo    cRegionInfo;      // root region
-        // å
-é¨å¦çç¨ã®å¼ã³å£ (ä½åº¦ãä½¿ãã¾ããã®ã§ãä½¿ãç´åã«(å)è¨­å®ãããã¨ï¼
+        // 内部処理用の呼び口 (何度も使いまわすので、使う直前に(再)設定すること）
         [dynamic,optional]
             call sNamespaceInfo cNamespaceInfoTemp;
@@ -439,7 +406,7 @@
             uint32_t sizeOfCB;         // size in bytes, 0 if not exist
             uint32_t sizeOfINIB;       // size in bytes, 0 if not exist
-            uint32_t n_cellInLinkUnit; // CellInLinkUnit == 0 ã®æ ã»ã«ã¿ã¤ãã³ã¼ãã¯ããªã³ã¯ããã¦ããªã
-            uint32_t n_cellInSystem;   // ãã¹ã¦ã®ãªã³ã¯ã¦ããããå«ããã»ã«ã®åæ°ï¼
-                                       // ãã®æ°ã 0ã«ãªããã®ã¯ãCelltypeInfo ã¯çç¥ãããï¼
+            uint32_t n_cellInLinkUnit; // CellInLinkUnit == 0 の時 セルタイプコードは、リンクされていない
+            uint32_t n_cellInSystem;   // すべてのリンクユニットを含めたセルの個数．
+                                       // この数が 0になるものは、CelltypeInfo は省略される．
         };
         [ref_desc,optional]
@@ -466,7 +433,7 @@
             bool_t   b_require_port;
             int8_t   place;
-            bool_t   b_VMT_useless;        // VMT (é¢æ°ãã¼ãã«) ä¸è¦æé©å (é¢æ°ç´æ¥å¼åºã)
-            bool_t   b_skelton_useless;    // ã¹ã±ã«ãã³é¢æ°ä¸è¦ (
-            bool_t   b_cell_unique;        // åä¸ã®ã»ã«
+            bool_t   b_VMT_useless;        // VMT (関数テーブル) 不要最適化 (関数直接呼出し)
+            bool_t   b_skelton_useless;    // スケルトン関数不要 (
+            bool_t   b_cell_unique;        // 単一のセル
         };
         entry sCallInfo eCallInfo;
@@ -530,6 +497,5 @@
     celltype tRawEntryDescriptorInfo {
         attr {
-            int_t size;   // éé
-åã®å ´å 0
+            int_t size;   // 非配列の場合 0
             [size_is(size)]
                 void  **rawEntryDescriptor;
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfoAccessor.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfoAccessor.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/TECSInfoAccessor.cdl	(revision 389)
@@ -2,53 +2,38 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
  */
 
-// mruby ããã¢ã¯ã»ã¹ã§ãããããªã·ã°ããã£ã«ãããã¢ã¯ã»ã¹ç¨ã»ã«ã¿ã¤ãã®å®ç¾©
-// ã¤ã¾ããã·ã°ããã£ãã Descriptor åããªãããååãæå®ãã¦åççµåãããã»ã«ã¿ã¤ããç¨æãã
+// mruby からアクセスできるようなシグニチャにした、アクセス用セルタイプの定義
+// つまり、シグニチャから Descriptor 型をなくし、名前を指定して動的結合させるセルタイプを用意する
 
 import( <TECSInfo.cdl> );
@@ -93,7 +78,7 @@
         ER   getSelectedCallLocationInfo(  [out]uint32_t *offset,             // offset in CALL_PLACE_*
                                            [out]int8_t   *place );            // CALL_PLACE_*
-        ER   getSelectedCallOptimizeInfo(  [out]bool_t   *b_VMT_useless,      // VMT (é¢æ°ãã¼ãã«) ä¸è¦æé©å (é¢æ°ç´æ¥å¼åºã)
-                                           [out]bool_t   *b_skelton_useless,  // ã¹ã±ã«ãã³é¢æ°ä¸è¦ (
-                                           [out]bool_t   *b_cell_unique );    // åä¸ã®ã»ã«
+        ER   getSelectedCallOptimizeInfo(  [out]bool_t   *b_VMT_useless,      // VMT (関数テーブル) 不要最適化 (関数直接呼出し)
+                                           [out]bool_t   *b_skelton_useless,  // スケルトン関数不要 (
+                                           [out]bool_t   *b_cell_unique );    // 単一のセル
 
         // entry
@@ -125,9 +110,9 @@
         // cell
         ER   getSelectedCellInfo( [out,string(max_len)]char_t *name, [in]int_t max_len);
-        ER   selectCelltypeInfoOfCell(void); // é¸æä¸­ã»ã«ã®ã»ã«ã¿ã¤ããé¸æ (ã»ã«ã¿ã¤ãã®é¢æ°ãä½¿ç¨ã§ãã)
-        ER   getAttrValueInStr([out,string(max_len)]char_t *buf, [in]int_t max_len);  // äºåã«ãã»ã«ãã»ã«ã¿ã¤ããå±æ§ãé¸æãã¦ãããã¨ï¼cTypeInfo ãå¤æ´ããã
-        ER   getAttrSizeIsValue(void);       // äºåã«ãã»ã«ãã»ã«ã¿ã¤ããå±æ§ãé¸æãã¦ãããã¨ï¼cTypeInfo ãå¤æ´ããã
-        ER   getVarValueInStr([out,string(max_len)]char_t *buf, [in]int_t max_len);   // äºåã«ãã»ã«ãã»ã«ã¿ã¤ããå¤æ°ãé¸æãã¦ãããã¨ï¼cTypeInfo ãå¤æ´ããã
-        ER   getVarSizeIsValue(void);        // äºåã«ãã»ã«ãã»ã«ã¿ã¤ããå¤æ°ãé¸æãã¦ãããã¨ï¼cTypeInfo ãå¤æ´ããã
+        ER   selectCelltypeInfoOfCell(void); // 選択中セルのセルタイプを選択 (セルタイプの関数を使用できる)
+        ER   getAttrValueInStr([out,string(max_len)]char_t *buf, [in]int_t max_len);  // 事前に、セル、セルタイプ、属性を選択しておくこと．cTypeInfo が変更される
+        ER   getAttrSizeIsValue(void);       // 事前に、セル、セルタイプ、属性を選択しておくこと．cTypeInfo が変更される
+        ER   getVarValueInStr([out,string(max_len)]char_t *buf, [in]int_t max_len);   // 事前に、セル、セルタイプ、変数を選択しておくこと．cTypeInfo が変更される
+        ER   getVarSizeIsValue(void);        // 事前に、セル、セルタイプ、変数を選択しておくこと．cTypeInfo が変更される
     };
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tArrayTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -60,5 +45,5 @@
  * b_volatile       bool_t           ATTR_b_volatile 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
  *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
@@ -76,5 +61,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tArrayTypeInfo_tecsgen.h"
@@ -85,5 +70,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTypeInfo
  * entry port: eTypeInfo
@@ -109,5 +94,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -133,8 +118,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
 }
@@ -153,8 +138,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return ATTR_size;
 }
@@ -173,8 +158,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return TECSTypeKind_ArrayType;
 }
@@ -193,10 +178,9 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
-	return ATTR_size / cTypeInfo_getSize();  /* é
-åè¦ç´ æ° = ãµã¤ãº / è¦ç´ ãµã¤ãº */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
+	return ATTR_size / cTypeInfo_getSize();  /* 配列要素数 = サイズ / 要素サイズ */
 }
 
@@ -215,8 +199,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *desc = cTypeInfo_refer_to_descriptor();
   return ercd;
@@ -236,8 +220,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -260,5 +244,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -266,4 +250,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tBoolTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -219,8 +204,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -243,5 +228,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -249,4 +234,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCallInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCallInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCallInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * offset           uint32_t         ATTR_offset     
@@ -68,5 +53,5 @@
  * b_cell_unique    bool_t           ATTR_b_cell_unique
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task
  *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
@@ -197,8 +182,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *b_optional = ATTR_b_optional;
   *b_dynamic  = ATTR_b_dynamic;
@@ -220,8 +205,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *b_allocator_port = ATTR_b_allocator_port;
   *b_require_port   = ATTR_b_require_port;
@@ -241,8 +226,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *offset = ATTR_offset;
   *place  = ATTR_place;
@@ -262,8 +247,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *b_VMT_useless     = ATTR_b_VMT_useless;
   *b_skelton_useless = ATTR_b_skelton_useless;
@@ -272,4 +257,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCellInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCellInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCellInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,13 +35,13 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * cbp              void*            ATTR_cbp        
  * inibp            void*            ATTR_inibp      
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cCelltypeInfo signature: nTECSInfo_sCelltypeInfo context:task
  *   ER             cCelltypeInfo_getName( char_t* name, int_t max_len );
@@ -145,8 +130,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
 }
@@ -165,8 +150,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return NCP_cRawEntryDescriptor;
 }
@@ -186,8 +171,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   if( 0 <= index && index < NCP_cRawEntryDescriptor ){
       if( is_cRawEntryDescriptor_joined( index ) )
@@ -263,4 +248,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCelltypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCelltypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tCelltypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * b_singleton      bool_t           ATTR_b_singleton
@@ -62,5 +47,5 @@
  * n_cellInSystem   uint32_t         ATTR_n_cellInSystem
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cEntryInfo signature: nTECSInfo_sEntryInfo context:task optional:true
  *   bool_t     is_cEntryInfo_joined(int subscript)        check if joined
@@ -430,8 +415,8 @@
     }
     else {
-        /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-    } /* end if VALID_IDX(idx) */
-
-    /* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+        /* エラー処理コードをここに記述します */
+    } /* end if VALID_IDX(idx) */
+
+    /* ここに処理本体を記述します #_TEFB_# */
     return ATTR_sizeOfCB;
 }
@@ -450,12 +435,12 @@
     }
     else {
-        /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-    } /* end if VALID_IDX(idx) */
-
-    /* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+        /* エラー処理コードをここに記述します */
+    } /* end if VALID_IDX(idx) */
+
+    /* ここに処理本体を記述します #_TEFB_# */
     return ATTR_sizeOfINIB;
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDefinedTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDefinedTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDefinedTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -60,5 +45,5 @@
  * b_volatile       bool_t           ATTR_b_volatile 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
  *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
@@ -237,8 +222,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -261,5 +246,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -267,4 +252,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDescriptorTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDescriptorTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tDescriptorTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -60,5 +45,5 @@
  * b_volatile       bool_t           ATTR_b_volatile 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task
  *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
@@ -72,5 +57,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tDescriptorTypeInfo_tecsgen.h"
@@ -81,5 +66,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTypeInfo
  * entry port: eTypeInfo
@@ -105,5 +90,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -129,8 +114,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
 }
@@ -149,8 +134,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return ATTR_size;
 }
@@ -169,8 +154,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return TECSTypeKind_DescriptorType;
 }
@@ -189,8 +174,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return 0;
 }
@@ -209,8 +194,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return E_NOEXS;
 }
@@ -229,8 +214,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -253,5 +238,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -259,4 +244,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tEntryInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tEntryInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tEntryInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,13 +35,13 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * b_inline         bool_t           ATTR_b_inline   
  * array_size       uint32_t         ATTR_array_size 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task
  *   ER             cSignatureInfo_getName( char_t* name, int_t max_len );
@@ -195,4 +180,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFloatTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFloatTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFloatTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -62,5 +47,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tFloatTypeInfo_tecsgen.h"
@@ -71,5 +56,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTypeInfo
  * entry port: eTypeInfo
@@ -95,5 +80,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -119,8 +104,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
 }
@@ -139,8 +124,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return ATTR_size;
 }
@@ -159,8 +144,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return TECSTypeKind_FloatType;
 }
@@ -179,8 +164,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return 0;
 }
@@ -199,8 +184,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return E_NOEXS;
 }
@@ -219,8 +204,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -243,5 +228,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -249,4 +234,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFunctionInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFunctionInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tFunctionInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,12 +35,12 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * bOneway          bool_t           ATTR_bOneway    
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cParamInfo signature: nTECSInfo_sParamInfo context:task optional:true
  *   bool_t     is_cParamInfo_joined(int subscript)        check if joined
@@ -212,4 +197,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tIntTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tIntTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tIntTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -62,5 +47,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tIntTypeInfo_tecsgen.h"
@@ -71,5 +56,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTypeInfo
  * entry port: eTypeInfo
@@ -95,5 +80,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -119,8 +104,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
 }
@@ -139,8 +124,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return ATTR_size;
 }
@@ -159,8 +144,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return TECSTypeKind_IntType;
 }
@@ -179,8 +164,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return 0;
 }
@@ -199,8 +184,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return E_NOEXS;
 }
@@ -219,8 +204,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -243,5 +228,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -249,4 +234,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tNamespaceInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tNamespaceInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tNamespaceInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,11 +35,11 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char*            ATTR_name       
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cSignatureInfo signature: nTECSInfo_sSignatureInfo context:task optional:true
  *   bool_t     is_cSignatureInfo_joined(int subscript)        check if joined
@@ -289,4 +274,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tParamInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tParamInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tParamInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * dir              int8_t           ATTR_dir        
@@ -60,5 +45,5 @@
  * stringExpr       char_t*          ATTR_stringExpr 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
  *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
@@ -186,4 +171,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tPtrTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -60,5 +45,5 @@
  * b_volatile       bool_t           ATTR_b_volatile 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
  *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
@@ -76,5 +61,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tPtrTypeInfo_tecsgen.h"
@@ -85,5 +70,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTypeInfo
  * entry port: eTypeInfo
@@ -109,5 +94,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -133,8 +118,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
 }
@@ -153,8 +138,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return ATTR_size;
 }
@@ -173,8 +158,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return TECSTypeKind_PtrType;
 }
@@ -193,8 +178,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return 1;
 }
@@ -213,8 +198,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *desc = cTypeInfo_refer_to_descriptor();
 }
@@ -233,8 +218,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -257,5 +242,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -263,4 +248,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRawEntryDescriptorInfo.c	(revision 389)
@@ -1,7 +1,7 @@
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * size             int_t            ATTR_size       
  * rawEntryDescriptor void**           ATTR_rawEntryDescriptor
@@ -9,5 +9,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nTECSInfo_tRawEntryDescriptorInfo_tecsgen.h"
 
@@ -17,5 +17,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eRawEntryDescriptor
  * entry port: eRawEntryDescriptor
@@ -37,8 +37,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -58,8 +58,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( 0 <= ith && ith < ATTR_size ){
       *rawDesc = ATTR_rawEntryDescriptor[ ith ];
@@ -72,4 +72,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRegionInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRegionInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tRegionInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,11 +35,11 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char*            ATTR_name       
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cCellInfo signature: nTECSInfo_sCellInfo context:task optional:true
  *   bool_t     is_cCellInfo_joined(int subscript)        check if joined
@@ -228,4 +213,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tSignatureInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tSignatureInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tSignatureInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,11 +35,11 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char*            ATTR_name       
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cFunctionInfo signature: nTECSInfo_sFunctionInfo context:task optional:true
  *   bool_t     is_cFunctionInfo_joined(int subscript)        check if joined
@@ -133,5 +118,5 @@
 	/* Put statements here #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
-      /* çµç«¯æå­ (NULL) ãå«ã */
+      /* 終端文字 (NULL) を含む */
 }
 
@@ -177,4 +162,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tStructTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -60,5 +45,5 @@
  * b_volatile       bool_t           ATTR_b_volatile 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cVarDeclInfo signature: nTECSInfo_sVarDeclInfo context:task
  *   ER             cVarDeclInfo_getName( subscript, char_t* name, int_t max_len );
@@ -75,5 +60,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tStructTypeInfo_tecsgen.h"
@@ -84,5 +69,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTypeInfo
  * entry port: eTypeInfo
@@ -108,5 +93,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -132,10 +117,10 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	return strlen( ATTR_name ) + 1;
-      /* çµç«¯æå­ (NULL) ãå«ã */
+      /* 終端文字 (NULL) を含む */
 }
 
@@ -153,8 +138,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return ATTR_size;
 }
@@ -173,8 +158,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return TECSTypeKind_StructType;
 }
@@ -193,8 +178,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return NCP_cVarDeclInfo;
 }
@@ -213,8 +198,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   // *desc = cTypeInfo_refer_to_descriptor( ith );
 }
@@ -233,8 +218,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return NCP_cVarDeclInfo;
 }
@@ -257,5 +242,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( ith >= NCP_cVarDeclInfo )
       ercd = E_NOEXS;
@@ -267,4 +252,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoAccessor.c	(revision 389)
@@ -1,7 +1,7 @@
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * NAME_LEN         int16_t          ATTR_NAME_LEN   
  * name             char_t*          VAR_name        
@@ -10,5 +10,5 @@
  * selectedInibp    int8_t*          VAR_selectedInibp
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTECSInfo signature: nTECSInfo_sTECSInfo context:task
  *   ER             cTECSInfo_findNamespace( const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* NSdesc );
@@ -108,5 +108,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tTECSInfoAccessor_tecsgen.h"
@@ -117,5 +117,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eSelector
  * entry port: eSelector
@@ -142,5 +142,5 @@
 	} /* end if VALID_IDX(idx) */
 
-  /* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+  /* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findNamespace( namespacePath, &NSdesc );
   if( ercd == E_OK ){
@@ -172,5 +172,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findCelltype( namespacePath, &desc );
   if( ercd == E_OK ){
@@ -201,5 +201,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -223,5 +223,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -245,5 +245,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -267,5 +267,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -289,5 +289,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -311,5 +311,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -333,5 +333,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -355,5 +355,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -377,5 +377,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -399,5 +399,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -421,5 +421,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -443,5 +443,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -461,8 +461,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -485,5 +485,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -507,5 +507,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -525,8 +525,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -549,5 +549,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -571,5 +571,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -593,5 +593,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -615,5 +615,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -637,5 +637,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -659,5 +659,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -681,5 +681,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -703,5 +703,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -725,5 +725,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -747,5 +747,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -769,5 +769,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -791,5 +791,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -813,5 +813,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -835,5 +835,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -857,5 +857,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -879,5 +879,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -901,5 +901,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -923,5 +923,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -945,5 +945,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -967,5 +967,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -989,5 +989,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1011,5 +1011,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1033,5 +1033,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1055,5 +1055,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1077,5 +1077,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1099,5 +1099,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1121,5 +1121,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -1127,4 +1127,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfoSub.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name_len         int32_t          ATTR_name_len   
  * path_len         int32_t          ATTR_path_len   
@@ -60,5 +45,5 @@
  * path             char_t*          VAR_path        
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cNamespaceInfo signature: nTECSInfo_sNamespaceInfo context:task
  *   ER             cNamespaceInfo_getName( char_t* name, int_t max_len );
@@ -165,6 +150,6 @@
 
 /*
- * VAR_name1 â¦ å¼æ°ã¨ãã¦æ¸¡ããããã®ãã³ãã¼ããããã ããéä¸­ã® '::' ã '\0' ã«æ¸ãæãããã¨ã¯ããã
- * VAR_name2 â¦ é½åº¦ä¸æ¸ããã¦ä½¿ç¨ãã
+ * VAR_name1 … 引数として渡されたものをコピーする。ただし、途中の '::' を '\0' に書き換えることはある。
+ * VAR_name2 … 都度上書きして使用する
  */
 
@@ -358,6 +343,5 @@
         return E_NOMEM;
     }
-    if( VAR_path != namespace_path )     // findRawEntryDescriptorInfo ããå¼ã°ããæãVAR_path ã«å
-¥ã£ã¦ããã®ã§ã³ãã¼ä¸è¦
+    if( VAR_path != namespace_path )     // findRawEntryDescriptorInfo から呼ばれた時、VAR_path に入っているのでコピー不要
         strcpy( VAR_path, namespace_path );
     p = &VAR_path[ len - 1 ];
@@ -370,5 +354,5 @@
         p--;
         if( p < VAR_path || *p != ':' )
-            return E_PAR;    // :: ã§ã¯ãªãã: ã§ãã£ã
+            return E_PAR;    // :: ではなく、: であった
         if( p == VAR_path ){
             namespace_path = "::";
@@ -439,5 +423,5 @@
         p--;
     if( *p != '.' )
-        return E_PAR;    // '.' ãè¦ã¤ãããªã
+        return E_PAR;    // '.' が見つからない
     *p = '\0';
     ercd = eTECSInfo_findCell( VAR_path, &cellDesc);
@@ -452,5 +436,5 @@
     // dly_tsk( 10000 );
     for( i = 0; i < n; i++ ){
-        ercd = cCelltypeInfoTemp_getEntryInfo( i, &entDesc ); // ã¨ã©ã¼ã¯ã¿ãªã
+        ercd = cCelltypeInfoTemp_getEntryInfo( i, &entDesc ); // エラーはみない
         //syslog_2( LOG_NOTICE, "tTECSInfo.eTECSInfo.findRawEntryDescriptor 5 ercd=%d entDesc=%x", ercd, entDesc.vdes );
         cEntryInfoTemp_set_descriptor( entDesc );
@@ -494,12 +478,12 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
 /*
- * namespace_path ã VAR_path ã¸ã³ãã¼ãããã£ã¬ã¯ããªãã¹é¨ã¨ãªãã¸ã§ã¯ãåé¨ã«åå²ãã
+ * namespace_path を VAR_path へコピーし、ディレクトリパス部とオブジェクト名部に分割する
  * namespace_path  "::namespace::subnamespace::object_name"
- * VAR_path        "::namespace::subnamespace\0:object_name"   ä¸çªå³ã® '::' ã '\0:' ã«ç½®ãæãã
- * basename        "object_name" ã¸ã®ãã¤ã³ã¿ãè¿ã
+ * VAR_path        "::namespace::subnamespace\0:object_name"   一番右の '::' を '\0:' に置き換える
+ * basename        "object_name" へのポインタを返す
  */
 static ER
@@ -514,6 +498,5 @@
         return E_NOMEM;
     }
-    if( VAR_path != *namespace_path )     // findRawEntryDescriptorInfo ããå¼ã°ããæãVAR_path ã«å
-¥ã£ã¦ããã®ã§ã³ãã¼ä¸è¦
+    if( VAR_path != *namespace_path )     // findRawEntryDescriptorInfo から呼ばれた時、VAR_path に入っているのでコピー不要
         strcpy( VAR_path, *namespace_path );
     p = &VAR_path[ len - 1 ];
@@ -526,5 +509,5 @@
         p--;
         if( p < VAR_path || *p != ':' )
-            return E_PAR;    // :: ã§ã¯ãªãã: ã§ãã£ã
+            return E_PAR;    // :: ではなく、: であった
         if( p == VAR_path ){
             *namespace_path = root_namespacepath;
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTECSInfo_inline.h	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -59,8 +44,8 @@
  */
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTECSInfo signature: nTECSInfo_sTECSInfo context:task
  *   ER             cTECSInfo_findNamespace( const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* nsDesc );
@@ -159,5 +144,5 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -60,5 +45,5 @@
  * b_volatile       bool_t           ATTR_b_volatile 
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task optional:true
  *   bool_t     is_cTypeInfo_joined()                     check if joined
@@ -214,4 +199,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVarDeclInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * sizeIsExpr       char_t*          ATTR_sizeIsExpr 
@@ -60,5 +45,5 @@
  * offset           uint32_t         ATTR_offset     
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTypeInfo signature: nTECSInfo_sTypeInfo context:task
  *   ER             cTypeInfo_getName( char_t* name, int_t max_len );
@@ -76,5 +61,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include <string.h>
 #include "nTECSInfo_tVarDeclInfo_tecsgen.h"
@@ -85,5 +70,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eVarDeclInfo
  * entry port: eVarDeclInfo
@@ -109,5 +94,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	name[ max_len - 1 ] = '\0';
 	strncpy( name, ATTR_name, max_len );
@@ -133,8 +118,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   return strlen( ATTR_name ) + 1;
 }
@@ -153,8 +138,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *offset = ATTR_offset;
   *place  = ATTR_place;
@@ -174,8 +159,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   *desc = cTypeInfo_refer_to_descriptor();
 }
@@ -194,8 +179,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   strncpy( expr_str, ATTR_sizeIsExpr, max_len - 1 );
   expr_str[ max_len - 1 ] = '\0';
@@ -219,5 +204,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = E_NOSPT;
 	return(ercd);
@@ -225,4 +210,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/nTECSInfo_tVoidTypeInfo.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * name             char_t*          ATTR_name       
  * typeKind         int8_t           ATTR_typeKind   
@@ -219,8 +204,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 
 }
@@ -243,5 +228,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -249,4 +234,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/tTECSInfoAccessor.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/tTECSInfoAccessor.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TECSInfo/tTECSInfoAccessor.c	(revision 389)
@@ -1,7 +1,7 @@
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * NAME_LEN         int16_t          ATTR_NAME_LEN   
  * name             char_t*          VAR_name        
@@ -10,5 +10,5 @@
  * selectedInibp    int8_t*          VAR_selectedInibp
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cTECSInfo signature: nTECSInfo_sTECSInfo context:task
  *   ER             cTECSInfo_findNamespace( const char_t* namespace_path, Descriptor( nTECSInfo_sNamespaceInfo )* NSdesc );
@@ -159,5 +159,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "tTECSInfoAccessor_tecsgen.h"
 
@@ -170,5 +170,5 @@
 getSelectedTypeValue( CELLCB *p_cellcb, void *ptr, char_t *buf, int_t max_len );
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eSelector
  * entry port: eSelector
@@ -195,5 +195,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findNamespace( namespacePath, &NSdesc );
   if( ercd == E_OK ){
@@ -225,5 +225,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findCelltype( namespacePath, &CTdesc );
   if( ercd == E_OK ){
@@ -255,5 +255,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findSignature( namespacePath, &SIGdesc );
   if( ercd == E_OK ){
@@ -284,5 +284,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findRegion( regionPath, &RGNdesc );
   if( ercd == E_OK ){
@@ -313,5 +313,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd = cTECSInfo_findCell( cellPath, &desc );
   if( ercd == E_OK ){
@@ -342,5 +342,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cNSInfo_joined() ){
       cNSInfo_getName( name, max_len );
@@ -374,5 +374,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cCelltypeInfo_unjoin(  );
   if( is_cNSInfo_joined() ){
@@ -411,5 +411,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cSignatureInfo_unjoin(  );
   if( is_cNSInfo_joined() ){
@@ -446,5 +446,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCelltypeInfo_joined() ){
       cCelltypeInfo_getName( name, max_len );
@@ -479,5 +479,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cCallInfo_unjoin(  );
   if( is_cCelltypeInfo_joined() ){
@@ -515,5 +515,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cEntryInfo_unjoin(  );
   if( is_cCelltypeInfo_joined() ){
@@ -551,5 +551,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cAttrInfo_unjoin(  );
   if( is_cCelltypeInfo_joined() ){
@@ -587,5 +587,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cVarInfo_unjoin(  );
   if( is_cCelltypeInfo_joined() ){
@@ -622,5 +622,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cAttrInfo_joined() ){
       cAttrInfo_getName( name, max_len );
@@ -646,8 +646,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cAttrInfo_joined() ){
       cAttrInfo_getSizeIsExpr( expr_str, max_len );
@@ -677,5 +677,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cAttrInfo_joined() ){
       cAttrInfo_getTypeInfo( &desc );
@@ -706,5 +706,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cVarInfo_joined() ){
       cVarInfo_getName( name, max_len );
@@ -731,8 +731,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   printf( "eSelector_getSizeIsExprOfVar not supported\n" );
 
@@ -758,5 +758,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cVarInfo_joined() ){
       cVarInfo_getTypeInfo( &desc );
@@ -787,5 +787,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCallInfo_joined() ){
       cCallInfo_getName( name, max_len );
@@ -816,5 +816,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCallInfo_joined() ){
       cCallInfo_getSignatureInfo( &desc );
@@ -845,5 +845,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCallInfo_joined() ){
       cCallInfo_getSpecifierInfo( b_optional, b_dynamic, b_ref_desc, b_omit );
@@ -872,5 +872,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCallInfo_joined() ){
       cCallInfo_getInternalInfo( b_allocator_port, b_require_port );
@@ -899,5 +899,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCallInfo_joined() ){
       cCallInfo_getLocationInfo( offset, place );
@@ -926,5 +926,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCallInfo_joined() ){
       cCallInfo_getOptimizeInfo( b_VMT_useless, b_skelton_useless, b_cell_unique );
@@ -953,5 +953,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cEntryInfo_joined() ){
       cEntryInfo_getName( name, max_len );
@@ -983,5 +983,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cEntryInfo_joined() ){
       cEntryInfo_getSignatureInfo( &desc );
@@ -1012,5 +1012,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cEntryInfo_joined() ){
       *b_inline = cEntryInfo_isInline( );
@@ -1040,5 +1040,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cSignatureInfo_joined() ){
       cSignatureInfo_getName( name, max_len );
@@ -1070,5 +1070,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cSignatureInfo_joined() ){
       if( 0 <= ith && ith < cSignatureInfo_getNFunction( ) ){
@@ -1103,5 +1103,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cFunctionInfo_joined() ){
       cFunctionInfo_getName( name, max_len );
@@ -1132,5 +1132,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cFunctionInfo_joined() ){
       cFunctionInfo_getReturnTypeInfo( &desc );
@@ -1161,5 +1161,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cParamInfo_joined() ){
       cParamInfo_getName( name, max_len );
@@ -1191,5 +1191,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cFunctionInfo_joined() ){
       if( 0 <= ith && ith < cFunctionInfo_getNParam() ){
@@ -1226,5 +1226,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cParamInfo_joined() ){
       cParamInfo_getTypeInfo( &desc );
@@ -1255,5 +1255,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cTypeInfo_joined() ){
       cTypeInfo_getName( name, max_len );
@@ -1284,5 +1284,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cTypeInfo_joined() ){
       cTypeInfo_getTypeInfo( &desc );
@@ -1313,5 +1313,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cRegionInfo_joined() ){
       cRegionInfo_getName( name, max_len );
@@ -1343,5 +1343,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cRegionInfo_joined() ){
       if( 0 <= ith && ith < cRegionInfo_getNCell() ){
@@ -1377,5 +1377,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCellInfo_joined() ){
       cCellInfo_getName( name, max_len );
@@ -1406,5 +1406,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCellInfo_joined() ){
       cCellInfo_getCelltypeInfo( &desc );
@@ -1439,5 +1439,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( is_cCellInfo_joined() && is_cAttrInfo_joined() ){
       cCellInfo_getCelltypeInfo( &CTdesc );
@@ -1488,5 +1488,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   printf( "eSelector_getAttrSizeIsValue not supported\n" );
 
@@ -1514,5 +1514,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   cVarInfo_getLocationInfo( &offset, &place );
   switch( place ){
@@ -1555,5 +1555,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   printf( "eSelector_getVarSizeIsValue not supported\n" );
 
@@ -1562,5 +1562,5 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/README-TLSF.txt
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/README-TLSF.txt	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/README-TLSF.txt	(revision 389)
@@ -1,35 +1,23 @@
-TLSF Malloc ã¢ã­ã±ã¼ã¿
+TLSF Malloc アロケータ
                                           2017.4.15
-                                          å¤§å±±
-1.æ¦è¦
+                                          大山
+1.概要
 
-TLSF ã¯å¹çããããã©ã°ã¡ã³ããèµ·ãã«ããã¢ã­ã±ã¼ã¿ã§ãã OS éä¾å­ã«
-å®è£
-ããã¦ãããããçµè¾¼ã¿ã·ã¹ãã ã¸ã®å¿ç¨ã«é©ãã¦ãã¾ãããã®å®è£
-ã§ã¯
-æä»å¶å¾¡ãè¡ã£ã¦ãã¾ãããè¤æ°ã®ã¿ã¹ã¯ã§å
-±ç¨ããã«ã¯ãæä»å¶å¾¡ãè¡ãå¿
+TLSF は効率よく、フラグメントが起きにくいアロケータです。 OS 非依存に
+実装されているため、組込みシステムへの応用に適しています。この実装では
+排他制御を行っていません。複数のタスクで共用するには、排他制御を行う必
+要があります。
 
-è¦ãããã¾ãã
+2. 実装について
 
-2. å®è£
-ã«ã¤ãã¦
-
-1) TLSF ã¢ã­ã±ã¼ã¿ã®æ¬ä½ã¯ãTECS ã¸ã§ãã¬ã¼ã¿ããã±ã¼ã¸ã«ã¯å«ã¾ãã¦ãã¾ããã
-ä»¥ä¸ã«å
-¬éããã¦ãã TLSF ãå
-¥æããå¿
-è¦ãããã¾ãã
-ããã¯ GPL/LGPL ã©ã¤ã»ã³ã¹ã§å
-¬éããã¦ãã¾ãã
+1) TLSF アロケータの本体は、TECS ジェネレータパッケージには含まれていません。
+以下に公開されている TLSF を入手する必要があります。
+これは GPL/LGPL ライセンスで公開されています。
   http://www.gii.upv.es/tlsf/main/docs
 
-2) TLSF ã«ã¯ãå¥ã«å®è£
-ãã MIT ã©ã¤ã»ã³ã¹ã§å
-¬éããã¦ãããã®ãããã¾ãã
-API ãè¥å¹²ç°ãªããããtTLSFMalloc_inline.h ãå°ãä¿®æ­£ããå¿
-è¦ãããã¾ãã
+2) TLSF には、別に実装され MIT ライセンスで公開されているものもあります。
+API が若干異なるため、tTLSFMalloc_inline.h を少し修正する必要があります。
   https://github.com/mattconte/tlsf
 
-3) ETã­ãã³ã³ç¨ããã±ã¼ã¸
-mruby-on-ev3rt+tecs_package (ev3rt) ã«ã¯ã1) ã® TLSF ãå«ã¾ãã¦ãã¾ãã
+3) ETロボコン用パッケージ
+mruby-on-ev3rt+tecs_package (ev3rt) には、1) の TLSF が含まれています。
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -60,9 +45,9 @@
     var {
         /*
-         * ã¡ã¢ãªãã¼ã«
+         * メモリプール
          *
-         * size_is ã®å¼æ°ã«é¢ããè£è¶³èª¬æ
-         *  pool ã®åã uint64_t ã®ãã sizeof uint64_t (8) ã§å²ã£ã¦ãã
-         *  memoryPoolSize ã 8 ã®åæ°ã§ãªãå ´åãã¡ã¢ãªé åãä¸è¶³ããªããã +7 ãå ç®ãã¦ããé¤ãã
+         * size_is の引数に関する補足説明
+         *  pool の型が uint64_t のため sizeof uint64_t (8) で割っている
+         *  memoryPoolSize が 8 の倍数でない場合、メモリ領域が不足しないよう +7 を加算してから除する
          */
         [size_is( (memoryPoolSize+7) / 8 )]
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/TLSFMalloc/tTLSFMalloc_inline.h	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,8 +40,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * memoryPoolSize   size_t           ATTR_memoryPoolSize
  * pool             uint64_t*        VAR_pool        
@@ -162,5 +147,5 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/README-mruby.txt
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/README-mruby.txt	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/README-mruby.txt	(revision 389)
@@ -1,73 +1,62 @@
 mruby
-                                              2017.4.17  æ°è¦
+                                              2017.4.17  新規
                                               2017.11.4  
-                                              å¤§å±± åå¸
+                                              大山 博司
 
-â æ¦è¦
+■概要
 
-mruby ãã£ã¬ã¯ããªã«ã¯ãçµè¾¼ã¿ç¨ mruby VM ã®ã»ã«ã¿ã¤ããããã³
-MrubyBridgePlugin ã«å¯¾å¿ããã¢ã¸ã¥ã¼ã«ãå«ã¾ãã¾ãï¼
+mruby ディレクトリには、組込み用 mruby VM のセルタイプ、および
+MrubyBridgePlugin に対応したモジュールが含まれます．
 
-mruby V1.2.0 ã«å¯¾å¿ãã¦ãã¾ãï¼V1.1.0 ã§ããã«ããããã¨ã¯å¯è½ã§ãï¼
+mruby V1.2.0 に対応しています．V1.1.0 でもビルドすることは可能です．
 
-ããã«ã¯ mruby ã®æ¬ä½ã¯å«ã¾ãã¾ããï¼ä»¥ä¸ãããã¦ã³ã­ã¼ãããå¿
-è¦ãããã¾ãï¼
+ここには mruby の本体は含まれません．以下からダウンロードする必要があります．
    http://forum.mruby.org/
 
-â TECS ã¸ã§ãã¬ã¼ã¿ V1.5 ã§ã®å¤æ´
+■TECS ジェネレータ V1.5 での変更
 
-tMruby.cdl (ãã¹ï¼tecsgen/tecs/mruby/tMruby.cdl) ãæ°è¨­ããï¼
-ä»¥ä¸ãå¯è½ã«ããããã« tMruby ã composite ã«åè§£ããï¼
- * mruby ã¹ã¯ãªããã®å¨æã¿ã¹ã¯å®è¡
- * VM ãã¨ã«ç°ãªã TLSF ã¢ã­ã±ã¼ã¿ã³ã³ãã¼ãã³ããä½¿ç¨
+tMruby.cdl (パス：tecsgen/tecs/mruby/tMruby.cdl) を新設した．
+以下を可能にするために tMruby を composite に分解した．
+ * mruby スクリプトの周期タスク実行
+ * VM ごとに異なる TLSF アロケータコンポーネントを使用
 
-tMruby.cdl ã§ã¯ tMruby (ãã¼ã ã¹ãã¼ã¹ãã¹ï¼nMruby::tMruby) ã®å®è£
-ã
-æ°ããããä»ãå¨æã¿ã¹ã¯å®è¡ç¨ã® tMrubyCyclic (åï¼nMruby::tMrubyCyclic)
-ãæ°è¨­ããï¼tMruby ãåè§£ãããtMrubyVM ã»ã«ã¿ã¤ãã¨ããã®ã·ã°ããã£
-sMruby (sMruby.cdlå
-) ãæ°è¨­ããï¼
+tMruby.cdl では tMruby (ネームスペースパス：nMruby::tMruby) の実装を
+新しくした他、周期タスク実行用の tMrubyCyclic (同：nMruby::tMrubyCyclic)
+を新設した．tMruby を分解した、tMrubyVM セルタイプと、そのシグニチャ
+sMruby (sMruby.cdl内) も新設した．
 
-tMruby.cdl ã«ç½®ãæãå¯è½ã ããä»¥ä¸ã®ç¹ã§ãã«ãç¨ Makefile ã®å¤æ´ãå¿
-è¦ï¼
- * TLSF ããã tTLSFMalloc_inline.h ã¸ã®ãã¹ãè¿½å 
- * TLSF ã®ãªãã¸ã§ã¯ãã®è¿½å  (mruby+TECS on EV3 ã«ã¯å®è£
-æ¸ã¿)
+tMruby.cdl に置き換え可能だが、以下の点でビルド用 Makefile の変更が必要．
+ * TLSF ヘッダ tTLSFMalloc_inline.h へのパスを追加
+ * TLSF のオブジェクトの追加 (mruby+TECS on EV3 には実装済み)
 
-ã¾ããä»¥ä¸ã®ç¹ã«çæããå¿
-è¦ãããï¼
- * TLSF ã¯ãVM ãã¨ã« 1MB ãå²ãä»ãã 
+また、以下の点に留意する必要がある．
+ * TLSF は、VM ごとに 1MB を割り付ける 
 
-ãã®ãããååãªç©ºãã¡ã¢ãªãå¿
-è¦ã§ããï¼
-ãã®ãµã¤ãºã¯ VM ã»ã«ã®å®ç¾©ã§å¤æ´å¯è½ (å±æ§ memoryPoolSize)ï¼
+このため、十分な空きメモリが必要である．
+このサイズは VM セルの定義で変更可能 (属性 memoryPoolSize)．
 
-â  ã³ã³ãã¼ãã³ãæ¦è¦
+■ コンポーネント概要
 
-tMruby.cdl: (TECS ã¸ã§ãã¬ã¼ã¿ V1.5.0 ä»¥é)
+tMruby.cdl: (TECS ジェネレータ V1.5.0 以降)
  celltype  tMrubyVM
-    VM ãå®è£
-ããããã®ã»ã«ã¿ã¤ãï¼ã¡ã¢ãªã¢ã­ã±ã¼ã¿ TLSFMalloc ãå«ã¾
-    ãªã. åãå£ eMrubyVM ã®ã·ã°ããã£ã¯ sMrubyï¼
+    VM を実装するためのセルタイプ．メモリアロケータ TLSFMalloc を含ま
+    ない. 受け口 eMrubyVM のシグニチャは sMruby．
 
  composite tMruby
-    åãå£ eMrubyBody ã®ã·ã°ããã£ã sTaskBody ã¨ããï¼tTLSFMalloc ã
-    çµã¿å
-¥ã.
+    受け口 eMrubyBody のシグニチャを sTaskBody とする．tTLSFMalloc も
+    組み入れ.
 
  composite tMrubyCyclic
-    åãå£ eMrubyBody ã®ã·ã°ããã£ã sTaskBody ã¨ããï¼tTLSFMalloc ã
-    çµã¿å
-¥ã.
-    å¨æã¿ã¹ã¯èµ·åºãåæã¨ãã¦ããï¼
-    ä¸åç®ã®å¼åºãã§ã¯ mrb_open ããããªãã¸ã»ã«ãç»é²å¾ãmrb_run ãå¼
-    ã³åºãã¦ã¹ã¯ãªããå®è¡ãè¡ãï¼ã¹ã¯ãªããçµäºå¾ã« mrb_close ã¯å¼ã³
-    åºãããªãï¼
-    äºåç®ä»¥éã®å¼åºãã§ã¯ mrb_run ã®ã¿å¼ã³åºãããï¼
-    çµäºå¦ç mrb_close ãå¼ã³ã ãææ®µã¯æä¾ãã¦ããªãï¼çªç¶é»æºãåã
-    ãããã¨ãåæã¨ãã¦ããï¼ (å°ãªãã¨ãæåã®å®è£
-ã§ã¯)ï¼
+    受け口 eMrubyBody のシグニチャを sTaskBody とする．tTLSFMalloc も
+    組み入れ.
+    周期タスク起床を前提としている．
+    一回目の呼出しでは mrb_open し、ブリッジセルを登録後、mrb_run を呼
+    び出してスクリプト実行を行う．スクリプト終了後に mrb_close は呼び
+    出されない．
+    二回目以降の呼出しでは mrb_run のみ呼び出される．
+    終了処理 mrb_close を呼びだす手段は提供していない．突然電源が切ら
+    れることを前提としている． (少なくとも最初の実装では)．
 
-sMruby.cdlï¼
+sMruby.cdl：
  signature sMruby
-   åæåãå®è¡ãçµäºå¦çã«åè§£ããã·ã°ããã£
+   初期化、実行、終了処理に分解したシグニチャ
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSPointer.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSPointer.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSPointer.h	(revision 389)
@@ -4,47 +4,32 @@
  *   Copyright (C) 2008-2012 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$ 
@@ -99,5 +84,5 @@
 POINTER_BODY( SChar,  char_t )		/* struct SCharPointerBody */
 
-// â  TECS_NO_VAL_CHECK ã define ããã¨ãå¤ãã§ãã¯ãçç¥ãã
+// ■ TECS_NO_VAL_CHECK を define すると、値チェックを省略する
 #ifndef TECS_NO_VAL_CHECK
 #define	VALCHECK_INT(Type, TYPE, type )									\
@@ -174,14 +159,14 @@
 VALCHECK_UINT( UInt64, UINT64, uint64_t )
 #ifndef mrb_int_IS_int64
-	 // â  int 32 bit ãä»®å®ãã¦ãã. 64 bit ã§ããã° mrb_int_IS_64 ã define ãã
+	 // ■ int 32 bit を仮定している. 64 bit であれば mrb_int_IS_64 を define する
 VALCHECK_MRB_INT( Int64, INT64, int64_t )
 VALCHECK_MRB_UINT( UInt64, UINT64, uint64_t )
 #else
-#define VALCHECK_MRB_Int64(mrb,val)      // ç¯å²ãã§ãã¯ãç¡æå³ã§ãããããè­¦åãåºãã®ãåé¿ãã
-#define VALCHECK_MRB_UInt64(mrb,val)      // ç¯å²ãã§ãã¯ãç¡æå³ã§ãããããè­¦åãåºãã®ãåé¿ãã
+#define VALCHECK_MRB_Int64(mrb,val)      // 範囲チェックが無意味であるため、警告が出るのを回避する
+#define VALCHECK_MRB_UInt64(mrb,val)      // 範囲チェックが無意味であるため、警告が出るのを回避する
 #endif
 
 #ifndef TECS_NO_VAL_CHECK
-	 // â  char_t ã¯ unsigned ã¨ã¿ãªã
+	 // ■ char_t は unsigned とみなす
 static inline void
 VALCHECK_Char( mrb_state *mrb, mrb_int  val )
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSStruct.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSStruct.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/TECSStruct.h	(revision 389)
@@ -4,47 +4,32 @@
  *   Copyright (C) 2008-2012 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$ 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mruby.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mruby.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mruby.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyInitializer.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyInitializer.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyInitializer.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyPointers.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyPointers.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyPointers.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyVMs.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyVMs.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/mrubyVMs.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,6 +37,6 @@
 
 /*
- * POSIX ç°å¢ç¨ã® VM
- * mrbgems ã® mrbgems/mruby-bin-mruby/tools/mruby/mruby.c ãåèã«ä½æãããã®
+ * POSIX 環境用の VM
+ * mrbgems の mrbgems/mruby-bin-mruby/tools/mruby/mruby.c を参考に作成したもの
  */
 namespace nMruby{
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tBoolPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tBoolPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tBoolPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tBoolPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Bool, bool_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_BoolPointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tCharPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tCharPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tCharPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tCharPointer_tecsgen.h"
 
@@ -72,5 +57,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -89,5 +74,5 @@
 	struct  RClass *c;
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	c = tecs_init_CharPointer( mrb, TECS );
 	mrb_define_method(mrb, c, "to_s", CharPointer_to_s, MRB_ARGS_NONE());
@@ -97,4 +82,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tDouble64Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tDouble64Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tDouble64Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tDouble64Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Double64, double64_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_Double64Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tFloat32Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tFloat32Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tFloat32Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -51,10 +36,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tFloat32Pointer_tecsgen.h"
 
@@ -68,5 +53,5 @@
 CHECK_AND_GET_POINTER( Float32, float32_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -83,9 +68,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_Float32Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt16Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt16Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt16Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tInt16Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Int16, int16_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_Int16Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt32Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt32Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt32Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tInt32Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Int32, int32_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_Int32Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt64Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt64Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt64Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2012 by Ubiquitous Computing and Networking Laboratory
  *                Ritsumeikan Univ., JAPAN
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tInt64Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Int64, int64_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_Int64Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt8Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt8Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tInt8Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tInt8Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Int8, int8_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_Int8Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tIntPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tIntPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tIntPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tIntPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Int, int )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_IntPointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tLongPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tLongPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tLongPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tLongPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Long, long )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_LongPointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMruby.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMruby.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMruby.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,7 +35,7 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- * å¼ã³å£é¢æ° #_TCPF_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ * 呼び口関数 #_TCPF_#
  * call port : cSerialPort  signature: sSerialPort context: task
  *   ER             cSerialPort_open( );
@@ -63,5 +48,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tMruby_tecsgen.h"
 #include <string.h>
@@ -84,5 +69,5 @@
 
 void mrb_init_mrb(CELLCB *p_cellcb, mrb_state *mrb);
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMrubyBody
  * entry port: eMrubyBody
@@ -143,5 +128,5 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
@@ -166,7 +151,7 @@
 _sbrk(size_t incr)
 {
-  // TODO: æ­£ãããã¼ããµã¤ãºãæå®ãããã¨ (EV3ã¯RAM 64MB)
+  // TODO: 正しいヒープサイズを指定すること (EV3はRAM 64MB)
   extern char __heap_start;
-  static uint32_t cs3_heap_end = &__heap_start + MEM_SIZE; // ãã¼ãã®æå¾ã¢ãã¬ã¹
+  static uint32_t cs3_heap_end = &__heap_start + MEM_SIZE; // ヒープの最後アドレス
   static char *heap_end = &__heap_start;
   char *prev_heap_end;
@@ -208,5 +193,5 @@
   char *cp;
   cp = (char*)buf;
-  /* ã·ãªã¢ã«ãã¼ããçµåããã¦ããå ´åã®ã¿å¼ã³åºã
+  /* シリアルポートが結合されている場合のみ呼び出す
   if(is_cSerialPort_joined()){
     //cSerialPort_write(buf, size);
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyCyclicTaskBody.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyCyclicTaskBody.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyCyclicTaskBody.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cMrubyVM signature: nMruby_sMrubyVM context:task
  *   bool_t         cMrubyVM_initialize( );
@@ -62,5 +47,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tMrubyCyclicTaskBody_tecsgen.h"
 
@@ -70,5 +55,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMrubyBody
  * entry port: eMrubyBody
@@ -90,8 +75,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( ! VAR_b_init ){
       cMrubyVM_initialize( );
@@ -102,4 +87,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /*
- * ä»¥åã® nMruby_tMrubyProc.c ã¯ãmruby ã®æ¬ä½ã«å«ã¾ãã¦ãã 
+ * 以前の nMruby_tMrubyProc.c は、mruby の本体に含まれていた 
  *    mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
- * ããã¼ã¹ã« TECS ã®ã³ã¼ããè¶³ãã¦ããããTOPPERS ã©ã¤ã»ã³ã¹ã¨ç°ãªããã
- * æ°ãã«æ¸ãä¸ããããï¼å°ããªã³ã¼ãã®ãããæ¦ã­ä¼¼ããããªãã®ã«ãªããã
+ * をベースに TECS のコードを足していたが、TOPPERS ライセンスと異なるため
+ * 新たに書き下ろした。（小さなコードのため、概ね似たようなものになるが。
  */
 
@@ -80,5 +65,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tMrubyProc_tecsgen.h"
 
@@ -88,5 +73,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMain
  * entry port: eMain
@@ -110,9 +95,9 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
       return -1;
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if (argc != 2) {
       printf("usage: %s script.rb\n", argv[0]);
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc_1_0.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc_1_0.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyProc_1_0.c	(revision 389)
@@ -5,10 +5,8 @@
  * A little modification is done to to call initializer registering TECS components.
  *
- * ãã®ãã¡ã¤ã«ã¯ãmruby ã®ãã®ã§ãã
- * mruby ã®ã©ã¤ã»ã³ã¹ã®ãã¨ã§ãé
-å¸ããã¾ãã(TOPPERS ã©ã¤ã»ã³ã¹ã§ã¯ããã¾ãã)
- *  åç
-§ï¼  https://github.com/mruby/mruby
- * TECS ã³ã³ãã¼ãã³ããç»é²ããåæåå­ãå¼ã¶ãããå°ãã®ä¿®æ­£ããªããã¦ãã¾ãã
+ * このファイルは、mruby のものです。
+ * mruby のライセンスのもとで、配布されます。(TOPPERS ライセンスではありません)
+ *  参照：  https://github.com/mruby/mruby
+ * TECS コンポーネントを登録する初期化子を呼ぶため、少しの修正がなされています。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyTaskBody.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyTaskBody.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyTaskBody.c	(revision 389)
@@ -2,47 +2,32 @@
  *   Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cMrubyVM signature: nMruby_sMrubyVM context:task
  *   bool_t         cMrubyVM_initialize( );
@@ -61,5 +46,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tMrubyTaskBody_tecsgen.h"
 
@@ -69,5 +54,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMrubyBody
  * entry port: eMrubyBody
@@ -89,8 +74,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( cMrubyVM_initialize( ) ){
     cMrubyVM_run( );
@@ -100,4 +85,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tMrubyVM.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,8 +35,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
- *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
+ *
+ * 属性アクセスマクロ #_CAAM_#
  * irep             uint8_t*         ATTR_irep       
  * var_irep         mrb_irep*        VAR_var_irep    
@@ -59,5 +44,5 @@
  * rproc            struct RProc*    VAR_rproc       
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cInit signature: nMruby_sInitializeBridge context:task optional:true
  *   bool_t     is_cInit_joined()                     check if joined
@@ -72,5 +57,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tMrubyVM_tecsgen.h"
 #include <string.h>
@@ -89,5 +74,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMrubyVM
  * entry port: eMrubyVM
@@ -109,10 +94,10 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
     return false;
 	} /* end if VALID_IDX(idx) */
 
   cMalloc_initializeMemoryPool();
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   /* new interpreter instance */
   //VAR_mrb = mrb_open();
@@ -146,8 +131,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   mrb_run(VAR_mrb, VAR_rproc, mrb_top_self(VAR_mrb));
   if (VAR_mrb->exc) {
@@ -172,8 +157,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
   argc = 0;
   (void)mrb_funcall(VAR_mrb, mrb_top_self(VAR_mrb), name, argc );
@@ -193,8 +178,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
-	} /* end if VALID_IDX(idx) */
-
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+		/* エラー処理コードをここに記述します */
+	} /* end if VALID_IDX(idx) */
+
+	/* ここに処理本体を記述します #_TEFB_# */
 	syslog(LOG_EMERG, "end of mruby program");
   mrb_close(VAR_mrb);
@@ -202,5 +187,5 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
@@ -225,8 +210,7 @@
 }
 
-// p_cellcb ã¯ VM ã®ãã®
-// VM ã»ã«ã¿ã¤ãã«ãå¼ã³å£ call sMalloc cMalloc; ãè¨­ãã
-// mrb_TECS_allocf ãåç
-§
+// p_cellcb は VM のもの
+// VM セルタイプに、呼び口 call sMalloc cMalloc; を設ける
+// mrb_TECS_allocf を参照
 MRB_API mrb_state*
 mrb_open_TECS( CELLCB *p_cellcb)
@@ -235,5 +219,5 @@
 };
 
-/*** ããã¼é¢æ° ***/
+/*** ダミー関数 ***/
 #ifndef EV3_SOUND
 void _write(){}
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tSCharPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tSCharPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tSCharPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tSCharPointer_tecsgen.h"
 
@@ -75,5 +60,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -92,5 +77,5 @@
 	struct RClass *c;
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	c=tecs_init_SCharPointer( mrb, TECS );
 	mrb_define_method(mrb, c, "to_s", CharPointer_to_s, MRB_ARGS_NONE());
@@ -99,4 +84,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tShortPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tShortPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tShortPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tShortPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( Short, short )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_ShortPointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tTECSInitializer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tTECSInitializer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tTECSInitializer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,11 +35,11 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * TECS             struct RClass *  VAR_TECS        
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cInitialize  signature: nMruby_sInitializeTECSBridge context: task
  *   void           cInitialize_initializeBridge( subscript, const mrb_state* mrb, const struct RClass * TECS );
@@ -63,5 +48,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tTECSInitializer_tecsgen.h"
 
@@ -71,5 +56,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -94,8 +79,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	TECS = mrb_define_module( (mrb_state *)mrb, "TECS" );
 	// mrb: const mrb_state * => mrb_state *
@@ -107,4 +92,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUCharPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUCharPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUCharPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUCharPointer_tecsgen.h"
 
@@ -72,5 +57,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -89,5 +74,5 @@
 	struct RClass *c;
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	c=tecs_init_UCharPointer( mrb, TECS );
 	mrb_define_method(mrb, c, "to_s", CharPointer_to_s, MRB_ARGS_NONE());
@@ -96,4 +81,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt16Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt16Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt16Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUInt16Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( UInt16, uint16_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_UInt16Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt32Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt32Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt32Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUInt32Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( UInt32, uint32_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_UInt32Pointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt64Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt64Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt64Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUInt64Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( UInt64, uint64_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,5 +67,5 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_UInt64Pointer( mrb, TECS );
 
@@ -88,4 +73,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt8Pointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt8Pointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUInt8Pointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUInt8Pointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( UInt8, uint8_t )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,5 +67,5 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_UInt8Pointer( mrb, TECS );
 
@@ -88,4 +73,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUIntPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUIntPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUIntPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUIntPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( UInt, unsigned int )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,5 +67,5 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_UIntPointer( mrb, TECS );
 
@@ -88,4 +73,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tULongPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tULongPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tULongPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tULongPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( ULong, unsigned long )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_ULongPointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUShortPointer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUShortPointer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/nMruby_tUShortPointer.c	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -50,10 +35,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+/* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 #include "nMruby_tUShortPointer_tecsgen.h"
 
@@ -67,5 +52,5 @@
 CHECK_AND_GET_POINTER( UShort, unsigned short )
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eInitialize
  * entry port: eInitialize
@@ -82,9 +67,9 @@
 eInitialize_initializeBridge(mrb_state* mrb, struct RClass * TECS)
 {
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	(void)tecs_init_UShortPointer( mrb, TECS );
 }
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/sMruby.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/sMruby.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/sMruby.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2012 by Ubiquitous Computing and Networking Laboratory
  *                Ritsumeikan Univ., JAPAN
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,28 +37,28 @@
   signature sMrubyVM {
     /*
-     * åæåãã (ä»¥ä¸ã¾ã§å®äºãã)
+     * 初期化する (以下まで完了する)
      *   mrb_open
-     *   VM_TECSInitializer  (TECS ããªãã¸ã®åæå)
-     *   mrb_read_irep       (ãã¤ãã³ã¼ãã®ç»é²)
+     *   VM_TECSInitializer  (TECS ブリッジの初期化)
+     *   mrb_read_irep       (バイトコードの登録)
      */
     bool_t initialize(void);
 
     /*
-     * å®è¡ãã
+     * 実行する
      * RETURN
-     *   true  æªå¦ç½®ã®ä¾å¤ããªã
-     *   false æªå¦ç½®ã®ä¾å¤ããã
-     *  initialize ã false ãè¿ããå ´åãrun, finalize ãå¼ã³åºãã¦ã¯ãªããªã
+     *   true  未処置の例外がない
+     *   false 未処置の例外がある
+     *  initialize が false を返した場合、run, finalize を呼び出してはならない
      */
     bool_t run(void);
 
     /*
-     * é¢æ°ãå¼ã³ã ã
+     * 関数を呼びだす
      */
     void funcall( [in,string]const char_t *name );
 
     /*
-     * çµæåãã
-     *  run ã false ãè¿ããå ´åã§ãå¼ã³ã ããã¨
+     * 終期化する
+     *  run が false を返した場合でも呼びだすこと
      */
     void finalize(void);
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/tMruby.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/tMruby.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/tMruby.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2012 by Ubiquitous Computing and Networking Laboratory
  *                Ritsumeikan Univ., JAPAN
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -70,11 +55,9 @@
     };
 
-    /* MrubyBridgePlugin ã®çæãã VM_TECSInitializeer.eInitialize ã¸çµåãã */
+    /* MrubyBridgePlugin の生成する VM_TECSInitializeer.eInitialize へ結合する */
     [optional]  call sInitializeBridge cInit;
     /*
-     * ã¢ã­ã±ã¼ã¿ 
-     *  ä»ã¨å
-±æããªãã®ã§ããã°ããã®ã¢ã­ã±ã¼ã¿ã¯æä»å¶å¾¡ãããå¿
-è¦ã¯ãªã
+     * アロケータ 
+     *  他と共有しないのであれば、このアロケータは排他制御される必要はない
      */
     call sMalloc cMalloc;
@@ -96,5 +79,5 @@
 /*** Standard Task Versoin  ***/
   /*
-   * tMrubyãã® eMrubyBody.main ããç¹°ãè¿ãèµ·åºããããã¨ã¯æ³å®ããã¦ãã¾ããã
+   * tMruby　の eMrubyBody.main が、繰り返し起床されることは想定されていません。
    */
   celltype tMrubyTaskBody{
@@ -129,7 +112,6 @@
 /*** Cyclic Task Versoin  ***/
   /*
-   * tMrubyCyclic ã® eMrubyBody.main ãç¹°ãè¿ãå¼ã³åºããããã¨ãæ³å®ããã¦ãã¾ãã
-   * ãã®å®è£
-ã§ã¯ mrb_close ã¯å¼ã³åºããã¾ãã (çµäºã¯ãçªç¶é»æºãåãããã¨ãæ³å®)
+   * tMrubyCyclic の eMrubyBody.main が繰り返し呼び出されることが想定されています。
+   * この実装では mrb_close は呼び出されません (終了は、突然電源が切れることを想定)
    */
   celltype tMrubyCyclicTaskBody{
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/tecs_mruby.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/tecs_mruby.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/mruby/tecs_mruby.h	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2019 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/posix/posix.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/posix/posix.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/posix/posix.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2008-2017 by TOPPERS Project
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/PPAllocator.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/PPAllocator.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/PPAllocator.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -55,35 +40,34 @@
  * PPAlloc: Push Pop Allocator
  *
- * allocate ããéé ã§ deallocate ããªãã¦ã¯ãªããªã
- * deallocate ã¯ãã¾ã¨ãã¦è¡ããã¨ãã§ãã
- * ä¾ãã°æåã« allocate ãããé åã deallocate ããã¨ããã¹ã¦ã® allocate ãããé åã deallocate ãããã¨ã«ãªã
- * æä»å¶å¾¡ãã¦ããªãããåä¸ã®ã¿ã¹ã¯ã«å²ä»ãã¦ä½¿ç¨ãã
+ * allocate した逆順で deallocate しなくてはならない
+ * deallocate は、まとめて行うことができる
+ * 例えば最初に allocate された領域を deallocate すると、すべての allocate された領域を deallocate したことになる
+ * 排他制御していないため単一のタスクに割付けて使用する
  */
 
-[deviate]   // alloc ãé¸è±ã«ãªã
+[deviate]   // alloc が逸脱になる
 signature sPPAllocator {
 	/*
-	 * size ã§æå®ãããå¤§ããã®ã¡ã¢ãªé åãã¢ã­ã±ã¼ããã
-	 * ã¡ã¢ãªé åãç¢ºä¿ãããå ´å *ptr ã«ã¡ã¢ãªé åã®ã¢ãã¬ã¹ãæ ¼ç´ãã¦ E_OK ãè¿ã
-	 * ååãªç©ºãé åããªãå ´å E_NOMEM ãè¿ã
+	 * size で指定された大きさのメモリ領域をアロケートする
+	 * メモリ領域が確保された場合 *ptr にメモリ領域のアドレスを格納して E_OK を返す
+	 * 十分な空き領域がない場合 E_NOMEM を返す
 	 */
 	ER  alloc( [in]uint32_t size, [out]void **ptr );
 	/*
-	 * ã¡ã¢ãªããã¢ã­ã±ã¼ããã
-	 * alloc ã§ç²å¾ãããã¤ã³ã¿ãå¼ãæ° ptr ã«æå®ãã
-	 * alloc ã§ç²å¾ããã¡ã¢ãªé åã alloc ããã®ã¨ã¯éé ã« dealloc ããªãã¦ã¯ãªããªã
-	 * ãã¹ã¦ã dealloc ããã«ã¯ãæåã« alloc ãããã¡ã¢ãªé åã dealloc ãããã¨ã§è¡ããã¨ãã§ãã
-	 * alloc ãç²å¾ããã¡ã¢ãªé åããã¹ã¦ dealloc ããåã«ãåã³ alloc ãããã¨ã¯ã§ãã
-	 * ãã®å ´åã§ããdealloc ãã¦ããªãã¡ã¢ãªé åã alloc ããã®ã¨ã¯éé ã« dealloc ããªãã¦ã¯ãªããªã
+	 * メモリをデアロケートする
+	 * alloc で獲得したポインタを引き数 ptr に指定する
+	 * alloc で獲得したメモリ領域を alloc したのとは逆順に dealloc しなくてはならない
+	 * すべてを dealloc するには、最初に alloc されたメモリ領域を dealloc することで行うことができる
+	 * alloc し獲得したメモリ領域をすべて dealloc する前に、再び alloc することはできる
+	 * その場合でも、dealloc していないメモリ領域を alloc したのとは逆順に dealloc しなくてはならない
 	 *
-	 * ptr ã®å¤ã buf <= ptr < buf+allocated_size ãæºãããã©ããæ¤æ»ããã
-	 * ptr ã®å¤ãä¸æ­£ã®å ´å E_PAR ãè¿ã
+	 * ptr の値が buf <= ptr < buf+allocated_size を満たすかどうか検査される
+	 * ptr の値が不正の場合 E_PAR を返す
 	 */
 	ER  dealloc( [in]const void *ptr );
 
     /*
-	 * PPAllocator ã»ã«ã®å²ä»ãæ¸ã¿ã¡ã¢ãªããã¹ã¦è§£æ¾ãã
-	 * ãã®é¢æ°ã¯å¿
-ãæåãã
+	 * PPAllocator セルの割付け済みメモリをすべて解放する
+	 * この関数は必ず成功する
 	 */
     ER  dealloc_all(void);
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/RPCTask.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/RPCTask.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/RPCTask.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,5 +38,5 @@
 
 /*
- * unmarshaler ã® main ã®ã·ã°ããã£
+ * unmarshaler の main のシグニチャ
  */
 signature sUnmarshalerMain {
@@ -59,14 +44,14 @@
 };
 
-///////////////// å°æãã£ã³ãã«ç¨ã®å®ç¾© ////////////////
+///////////////// 専有チャンネル用の定義 ////////////////
 /*
- * CELLTYPE: å°æãã£ã³ãã«ç¨ã®ã¿ã¹ã¯ã¡ã¤ã³
+ * CELLTYPE: 専有チャンネル用のタスクメイン
  */
-celltype tRPCDedicatedTaskMain {			// Transparent RPC ã§ç¨ãã
+celltype tRPCDedicatedTaskMain {			// Transparent RPC で用いる
 	entry	sTaskBody			eMain;
 	call	sUnmarshalerMain	cMain;
 };
 
-celltype tRPCDedicatedTaskMainWithOpener {	// Opaque RPC ã§ç¨ãã
+celltype tRPCDedicatedTaskMainWithOpener {	// Opaque RPC で用いる
 	entry	sTaskBody				eMain;
 	call	sUnmarshalerMain		cMain;
@@ -79,9 +64,7 @@
 };
 
-///////////////// å
-±æãã£ã³ãã«ç¨ã®å®ç¾© ////////////////
+///////////////// 共有チャンネル用の定義 ////////////////
 /*
- * CONST: å
-±æãã£ã³ãã«ãããã®ãã¸ãã¯
+ * CONST: 共有チャンネルヘッダのマジック
  */
 const uint16_t RPC_CHANNEL_MAN_SOP_MAGIC   = (0x3141);  // Beginning of using shared channel
@@ -89,10 +72,8 @@
 
 /*
- * CELLTYPE: å
-±æãã£ã³ãã«ããã¼ã¸ã£
- * REM:      å¼ã³å
-å´ã«ç½®ããã£ã³ãã«ããã¼ã¸ã£
- *           eSemaphore ãå¼ã³åºãããã¨ããã£ã³ãã«ãã­ãã¯ããã¨ã¨ãã«ã
- *           ãã£ã³ãã«çªå·ãéåºãã
+ * CELLTYPE: 共有チャンネルマネージャ
+ * REM:      呼び元側に置くチャンネルマネージャ
+ *           eSemaphore が呼び出されたときチャンネルをロックするとともに、
+ *           チャンネル番号を送出する
  */
 celltype tRPCSharedChannelMan {
@@ -104,9 +85,7 @@
 
 /*
- * CELLTYPE: å
-±æãã£ã³ãã«ç¨ã®ã¿ã¹ã¯ã¡ã¤ã³
- * REM:      å¼ã³å
-å´ã«ç½®ãã¿ã¹ã¯
- *           ãã£ã³ãã«çªå·ãåãåºãããã£ã³ãã«çªå·ã® cTaskBody ãå¼ã³åºã
+ * CELLTYPE: 共有チャンネル用のタスクメイン
+ * REM:      呼び先側に置くタスク
+ *           チャンネル番号を取り出し、チャンネル番号の cTaskBody を呼び出す
  */
 celltype tRPCSharedTaskMain {
@@ -119,10 +98,9 @@
 
 	var {
-		int16_t	channelNo;	/* é
-åæ·»æ° + 1 */
+		int16_t	channelNo;	/* 配列添数 + 1 */
 	};
 };
 
-celltype tRPCSharedTaskMainWithOpener {	// Opaque RPC ã§ç¨ãã
+celltype tRPCSharedTaskMainWithOpener {	// Opaque RPC で用いる
 	entry	sTaskBody			eMain;
 	call	sUnmarshalerMain	cUnmarshalAndCallFunction[];
@@ -137,6 +115,5 @@
 	};
 	var {
-		int16_t	channelNo;	/* é
-åæ·»æ° + 1 */
+		int16_t	channelNo;	/* 配列添数 + 1 */
 	};
 };
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/TDR.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/TDR.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/TDR.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -57,44 +42,40 @@
 const uint32_t TDR_SOP_MAGIC1   = (0x672A);  // Client to Server
 const uint32_t TDR_SOP_MAGIC2   = (0x561E);  // Server to Client
-const uint32_t TDR_EOP_MAGIC1   = (0x5A3C);  // è¿ä¿¡ãå¾
-ã¤ (åæå¼åºã)
-const uint32_t TDR_EOP_MAGIC2   = (0x6D5E);  // è¿ä¿¡ãå¾
-ããªã(éåæå¼åºãã¾ãã¯ãªã¿ã¼ã³)
+const uint32_t TDR_EOP_MAGIC1   = (0x5A3C);  // 返信を待つ (同期呼出し)
+const uint32_t TDR_EOP_MAGIC2   = (0x6D5E);  // 返信を待たない(非同期呼出しまたはリターン)
 
 // Straight Order TDR for SharedChannel
 const uint32_t TDR_SHSOP_MAGIC1   = (0x98D5);  // Client to Server
 const uint32_t TDR_SHSOP_MAGIC2   = (0xA9E1);  // Server to Client
-const uint32_t TDR_SHEOP_MAGIC1   = (0xB5C3);  // è¿ä¿¡ãå¾
-ã¤ (åæå¼åºã)
-const uint32_t TDR_SHEOP_MAGIC2   = (0x92A1);  // è¿ä¿¡ãå¾
-ããªã(éåæå¼åºãã¾ãã¯ãªã¿ã¼ã³)
+const uint32_t TDR_SHEOP_MAGIC1   = (0xB5C3);  // 返信を待つ (同期呼出し)
+const uint32_t TDR_SHEOP_MAGIC2   = (0x92A1);  // 返信を待たない(非同期呼出しまたはリターン)
 
 /*
  * TDR: TECS Data Representation layer
  */
-[deviate]         /* get_intptr ãé¸è±ã«ãªã */
+[deviate]         /* get_intptr が逸脱になる */
 signature sTDR {  /* TECS Data Representation */
 
-	/* å¶å¾¡é¢æ° */
+	/* 制御関数 */
 
-	/* ãã£ã³ãã«ã®ãªã»ãã */
-	ER	reset( void );	/* éä¿¡ãã£ã³ãã«ã®ãªã»ãã */
-						/* éä¸­ã§ã¨ã©ã¼ãçºçããéä¿¡ã¾ãã¯åä¿¡ãç¶è¡ã§ããªãã£ãã¨ãã¯ãªã»ãããã */
-						/* ä¸æ¹ããªã»ããããããã¨ãä»æ¹ã¯ RESET ã¨ã©ã¼ãè¿ã */
-						/* ç¢ºèªã§ããªãã¨ãã¯ããã®ãã£ãã«ã¯æ¾æ£ãããããªã */
+	/* チャンネルのリセット */
+	ER	reset( void );	/* 通信チャンネルのリセット */
+						/* 途中でエラーが発生し、送信または受信を続行できなかったときはリセットする */
+						/* 一方がリセットをかけると、他方は RESET エラーを返す */
+						/* 確認できないときは、このチャネルは放棄するしかない */
 
-	/* ãã¸ãã¯ã³ã¼ãã®éåä¿¡ */
-	ER	sendSOP( [in]bool_t b_client );     /* StartOfPacket magic ãéä¿¡ */
-	ER	receiveSOP( [in]bool_t b_client );  /* StartOfPacket magic ãåä¿¡ */
-						 /* b_client: ã¯ã©ã¤ã¢ã³ãå´ãªã true, ãµã¼ãã¼å´ãªã false */
+	/* マジックコードの送受信 */
+	ER	sendSOP( [in]bool_t b_client );     /* StartOfPacket magic を送信 */
+	ER	receiveSOP( [in]bool_t b_client );  /* StartOfPacket magic を受信 */
+						 /* b_client: クライアント側なら true, サーバー側なら false */
 
-	ER	sendEOP( [in]bool_t b_continue );   /* EndOfPacket magic ãéä¿¡ï¼ãã±ããã®æãã ããè¡ãï¼ */
-	ER	receiveEOP( [in]bool_t b_continue );/* EndOfPacket magic ãåä¿¡ */
-                        /* b_continue: åæå¼ã³åºãã®ã¯ã©ã¤ã¢ã³ãå´ãªã true,
-                           éåæå¼ã³åºãã®ã¯ã©ã¤ã¢ã³ãå´ã¾ãã¯ãµã¼ãã¼å´ãªã false */
+	ER	sendEOP( [in]bool_t b_continue );   /* EndOfPacket magic を送信（パケットの掃きだしも行う） */
+	ER	receiveEOP( [in]bool_t b_continue );/* EndOfPacket magic を受信 */
+                        /* b_continue: 同期呼び出しのクライアント側なら true,
+                           非同期呼び出しのクライアント側またはサーバー側なら false */
 
-	/* ãã¼ã¿éåä¿¡é¢æ° */
+	/* データ送受信関数 */
 
-	/* æ´æ°å (æ¨å¥¨) */
+	/* 整数型 (推奨) */
 	ER	putInt8( [in]int8_t in ); 
 	ER	putInt16( [in]int16_t in ); 
@@ -109,5 +90,5 @@
 	ER	getInt128( [out]int128_t *out );
 
-	/* ç¡ç¬¦å·æ´æ°å (æ¨å¥¨) */
+	/* 無符号整数型 (推奨) */
 	ER	putUInt8( [in]uint8_t in ); 
 	ER	putUInt16( [in]uint16_t in ); 
@@ -122,13 +103,13 @@
 	ER	getUInt128( [out]uint128_t *out );
 
-	/* æå­åï¼æ¨å¥¨ã8bitï¼ */
+	/* 文字型（推奨、8bit） */
 	ER	putChar( [in]char_t in ); 
 	ER	getChar( [out]char_t *out ); 
 
-	/* Bool å */
+	/* Bool 型 */
 	ER	putBool( [in]bool_t in ); 
 	ER	getBool( [out]bool_t *out ); 
 
-	/* æµ®åå°æ°å */
+	/* 浮動小数型 */
 	ER	putFloat32( [in]float32_t in );
 	ER	putDouble64( [in]double64_t in );
@@ -137,5 +118,5 @@
 
 
-	/* éæ¨å¥¨ã®å(æç¬¦å·) */
+	/* 非推奨の型(有符号) */
 	ER	putSChar( [in]schar_t in );
 	ER	putShort( [in]short_t in ); 
@@ -149,5 +130,5 @@
 
 
-	/* éæ¨å¥¨ã®å(ç¡ç¬¦å·) */
+	/* 非推奨の型(無符号) */
 	ER	putUChar( [in]uchar_t in ); 
 	ER	putUShort( [in]ushort_t in ); 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/rpc.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/rpc.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/rpc.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,21 +38,20 @@
 
 /*
- * TECS RPC ã«é¢ããå®ç¾©
+ * TECS RPC に関する定義
  */
 
-/* ãã£ã³ãã« ã·ã°ããã£ */
+/* チャンネル シグニチャ */
 import( <sChannel.cdl> );
 
-/* TDR ã·ã°ããã£ & ã»ã«ã¿ã¤ã */
+/* TDR シグニチャ & セルタイプ */
 import( <TDR.cdl> );
 
-/* ãã£ã³ãã«ã»ã«ã¿ã¤ã */
-/* ãã£ã³ãã«ã»ã«ã¿ã¤ãã¯ãå¿
-è¦ãªãã®ãåã¢ããªã±ã¼ã·ã§ã³ã§ import ãã */
+/* チャンネルセルタイプ */
+/* チャンネルセルタイプは、必要なものを各アプリケーションで import する */
 // import( <tDataqueueOWChannel.cdl> );
 // import( <tSocketChannel.cdl> );
 // import( <tTINETChannel.cdl> );
 
-/* ã¿ã¹ã¯ ã»ã«ã¿ã¤ã */
+/* タスク セルタイプ */
 import( <RPCTask.cdl> );
 import( <PPAllocator.cdl> );
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/rpc_string.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/rpc_string.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/rpc_string.h	(revision 389)
@@ -6,47 +6,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -57,6 +42,6 @@
 #include <string.h>
 
-/* GenParamCopy.rb ã§çæãã STRLEN, STRNLEN é¢æ°ã®å®ç¾© */
-/* ç¾ç¶ã§ã¯ short, int, long, int128_t ããµãã¼ãããªã */
+/* GenParamCopy.rb で生成する STRLEN, STRNLEN 関数の定義 */
+/* 現状では short, int, long, int128_t をサポートしない */
 
 #define   STRLEN8( str )    strlen( (char *)str )
@@ -64,13 +49,10 @@
 /*
  * STRNLEN
- *  marshaler, unmarshaler ã¯ strnlen ãä½¿ãï¼
- *  ãããã¡ãªã¼ãã¼ã©ã³ã¸ã®èæ§ãæç¢ºã«ããããï¼
- *  ããããstrnlen ã¯ ANSI-C æ¨æºã®ã©ã¤ãã©ãªé¢æ°ã§ã¯ãªããããå®è£
-ããã¦ããªãã±ã¼ã¹ããã
- *  GNU (Linux), VC++ ã§ã¯ä½¿ç¨ã§ããããMacOS ã§ã¯ä½¿ç¨ã§ããªã
- *  ï¼ä»ã®çµè¾¼ã¿ç¨ OS ã§ã®å®è£
-ç¶æ³ãä¸æï¼
- *  å°ããªé¢æ°ã§ããã®ã§ inline é¢æ°ã¨ãã¦å®è£
-ãã¦ãã
+ *  marshaler, unmarshaler は strnlen を使う．
+ *  バッファオーバーランへの耐性を明確にするため．
+ *  しかし、strnlen は ANSI-C 標準のライブラリ関数ではないため、実装されていないケースがある
+ *  GNU (Linux), VC++ では使用できるが、MacOS では使用できない
+ *  （他の組込み用 OS での実装状況も不明）
+ *  小さな関数ですむので inline 関数として実装しておく
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/sChannel.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/sChannel.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/sChannel.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -58,26 +43,25 @@
 
 signature	sChannel {
-	/* éã */
+	/* 送る */
 	ER		send( [in,size_is(size)] const int8_t  *buf, [in]int16_t  size, [in]TMO tmo );
-	/* éä¿¡çµããã®æãåºãï¼ãã±ããã®çµããã§ä¸åã ãå¼åºã */
-	ER		flush( [in]TMO tmo );       /* ãããã¡ãªã³ã°ãã¦ããå ´åã®æãã ã */
+	/* 送信終わりの掃き出し（パケットの終わりで一回だけ呼出す */
+	ER		flush( [in]TMO tmo );       /* バッファリングしている場合の掃きだし */
 
-	/* åãåã */
+	/* 受け取る */
 	ER_UINT	receive( [out,size_is(size)] int8_t  *buf, [in]int16_t  size, [in]TMO tmo );
 
-	/* ãã±ããã®çµããã¾ã§åä¿¡ãã (flush ã®é)ãçµããã«éãã¦ããªãå ´å E_ILUSE */
+	/* パケットの終わりまで受信した (flush の逆)。終わりに達していない場合 E_ILUSE */
 	ER		end_receive( void );
 
-	/* ãªã»ãã */
-	ER		reset( void );       /* ãã£ã³ãã«ããªã»ãã */
+	/* リセット */
+	ER		reset( void );       /* チャンネルをリセット */
 };
 
 /*
- * size ã« uint16_t ã§ã¯ãªã int16_t ãç¨ããã®ã¯ãä¸ä½å±¤ã ER_INT ãè¿ãå ´åãæ³å®ãããã®ï¼
+ * size に uint16_t ではなく int16_t を用いるのは、下位層が ER_INT を返す場合を想定したもの．
  *
- * sChannel ã¯ TECS RPC ã® TDR ã®ä¸ä½å±¤ã§ããéä¿¡ãã£ã³ãã«ã¨ã®ã¤ã³ã¿ãã§ã¼ã¹ã§ããï¼
- * éä¿¡ãã£ã³ãã«ã¯ãé«æ°´æº I/O ã®ããã«ããããã¡ãªã³ã°ããããã¨ãæ³å®ããï¼
- * TDR ããã¯ãint8_t, int16_t, int32_t, int64_t, (int128_t), float32_t, double64_t bool_t, char_t ã®ãããªåºæ¬å(ç¡ç¬¦å·ãå«ã)ãæ¸¡ãããã
- * é
-åãæ§é ä½ã®å ´åã§ãã£ã¦ãè¦ç´ ãã¨ã«æ¸¡ãããã
+ * sChannel は TECS RPC の TDR の下位層である通信チャンネルとのインタフェースである．
+ * 通信チャンネルは、高水準 I/O のように、バッファリングされることを想定する．
+ * TDR からは、int8_t, int16_t, int32_t, int64_t, (int128_t), float32_t, double64_t bool_t, char_t のような基本型(無符号を含む)が渡される。
+ * 配列や構造体の場合であっても要素ごとに渡される。
  */
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/sRPCErrorHandler.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/sRPCErrorHandler.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/sRPCErrorHandler.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -81,12 +66,9 @@
 
 /*
- * å¼ã³å
-å´ã§ã¯ state ã RPCSTATE_CLIENT_EXEC ã¨ç­ãããå¤§ããå ´åã
- * å¼ã³å
-å´ã§ã¯ state ã RPCSTATE_SERVER_EXEC ã¨ç­ãããå¤§ããå ´åã
- * å¼ã³å
-é¢æ°ã®å¼ã³åºãã«ã¯æåãã¦ããã
+ * 呼び元側では state が RPCSTATE_CLIENT_EXEC と等しいか大きい場合、
+ * 呼び先側では state が RPCSTATE_SERVER_EXEC と等しいか大きい場合、
+ * 呼び先関数の呼び出しには成功している。
  *
- * RPCErrorHandler ãå¼ã³åºãããæç¹ã§ãsend/receive å¼æ°ã®è§£æ¾ã¯çµãã£ã¦ããã
- * ãã®ãããRPCErrorHandler ã®ä¸­ã§å¦çãæã¡åã£ã¦ã(ã¿ã¹ã¯ã®åèµ·åãªã©ãè¡ã£ã¦ã)ããããã«ããã¡ã¢ãªãªã¼ã¯ãèµ·ããªãã
+ * RPCErrorHandler が呼び出された時点で、send/receive 引数の解放は終わっている。
+ * このため、RPCErrorHandler の中で処理を打ち切っても(タスクの再起動などを行っても)、それらによるメモリリークが起きない。
  */
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tDataqueueAdaptor_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tDataqueueAdaptor_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tDataqueueAdaptor_inline.h	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,10 +38,10 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
  * #[</PREAMBLE>]# */
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eChannel
  * entry port: eChannel
@@ -82,5 +67,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -104,5 +89,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -126,5 +111,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	cEventflag_clear( 0 );
 
@@ -150,5 +135,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	ercd = 0;
 	for( i = 0; i < size; i++ )
@@ -175,5 +160,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -199,5 +184,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	/* printf( "DQA: receive(%d) ", size ); */
 	for( i = 0; i < size; i++ ){
@@ -230,7 +215,7 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
-
-	return(ercd);
-}
-
+	/* ここに処理本体を記述します #_TEFB_# */
+
+	return(ercd);
+}
+
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tDataqueueOWChannel.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tDataqueueOWChannel.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tDataqueueOWChannel.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -71,5 +56,5 @@
 	entry sEventflag eEventflag;
 	attr {
-		// Queue ã®ããã©ã«ãã®ãµã¤ãº
+		// Queue のデフォルトのサイズ
 		uint_t	queueSize = 64;
 	};
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -62,15 +47,12 @@
     attr {
         uint16_t  buf_size = DEFAULT_MESSAGE_BUFFER_SIZE;
-        /* ãã®å¤ã¯ maxMessageSize ã«åããããå°ããã¨ããããã¡ãªã¼ãã¼ã©ã³ã«ãªã */
+        /* この値は maxMessageSize に合わせる。小さいと、バッファオーバーランになる */
     };
     var {
         /*
-         * OpaqueMarshalerPlugin ã®çæãããã¼ã·ã£ã©ã¯ãåä¿¡ããããµã¤ãºä»¥ä¸ã®é åãç¢ºä¿ããªãï¼
-         * ä¸æ¹ãtMessageBuffer ã¯ãæå¤§ maxMessageSize èª­ã¿åºãããï¼
-         * åä¿¡ããå´ã¯ãå¿
-ã maxMessageSize ãç¨æãã¦ããå¿
-è¦ãããï¼
-         * ãã®ããããã£ãããããã¡ã¸åãåã£ã¦ã³ãã¼ããå¿
-è¦ãããï¼
+         * OpaqueMarshalerPlugin の生成するマーシャラは、受信したいサイズ以上の領域を確保しない．
+         * 一方、tMessageBuffer は、最大 maxMessageSize 読み出しうる．
+         * 受信する側は、必ず maxMessageSize を用意しておく必要がある．
+         * このため、いったんバッファへ受け取ってコピーする必要がある．
          */
         [size_is(buf_size)]
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferCEP_inline.h	(revision 389)
@@ -3,8 +3,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cMessageBuffer0 signature: sMessageBuffer context:task
  *   ER             cMessageBuffer0_send( const uint8_t* message, uint32_t size );
@@ -28,5 +28,5 @@
  * #[</PREAMBLE>]# */
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eChannel
  * entry port: eChannel
@@ -54,5 +54,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( size < 0 )
       return E_PAR;
@@ -93,6 +93,6 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
-  /* flush ããªãã¦ãããã¤ãéããã */
+	/* ここに処理本体を記述します #_TEFB_# */
+  /* flush しなくても、いつも送られる */
   if( VAR_write_count > 0 ){
       ercd = cMessageBuffer0_sendTimeout( (const uint8_t *)VAR_write_buf, VAR_write_count, tmo );
@@ -122,5 +122,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   if( size == 0 )
       return 0;
@@ -167,5 +167,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -190,5 +190,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
   ercd0 = cMessageBuffer0_initialize( );
   ercd1 = cMessageBuffer1_initialize( );
@@ -198,5 +198,5 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferChannel.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferChannel.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tMessageBufferChannel.cdl	(revision 389)
@@ -6,47 +6,32 @@
  *               Graduate School of Information Science, Nagoya Univ., JAPAN
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -60,5 +45,5 @@
 
     attr {
-        // Queue ã®ããã©ã«ãã®ãµã¤ãº
+        // Queue のデフォルトのサイズ
         uint32_t	bufferSize = 256;
     };
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tNBOTDR_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tNBOTDR_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tNBOTDR_inline.h	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,11 +38,11 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * tmo              TMO              VAR_tmo         
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port: cChannel signature: sChannel context:task 
  *   ER             cChannel_send( const int8_t* buf, int16_t size, TMO tmo );
@@ -75,7 +60,6 @@
 
 /*
- * marhaler, unmarshaler ãä½¿ç¨ãã STRLEN é¢æ°ãå®ç¾©ãã
- *  marshaler, unmarshaler ã¯å¿
-ã TDR ã¯ ã«çµåããããã
+ * marhaler, unmarshaler が使用する STRLEN 関数を定義する
+ *  marshaler, unmarshaler は必ず TDR は に結合されるため
  */
 #include	"rpc_string.h"
@@ -105,9 +89,8 @@
 
 /*
- * ç¡èª¿æ´åã ããããããæ«å®çãªå®è£
-ã«ãªã£ã¦ãã
- * ã»ntohX(), htonX() ã¯ int64_t åã«å®ç¾©ããã¦ãã (32bitãªããªã¼ããããå¤§)
- * ã»int128_t, uint128_t ã¯ tecs.h ã§ typedef ãããåã§ãã
- * ã»BIGENDIAN å¤å®ã¯åçã«ãªã£ã¦ãã (æããæé©åã§å®æ°å¤å®ã«ããããã¨ã¯ãªã)
+ * 無調整型だが、いくらか暫定的な実装になっている
+ * ・ntohX(), htonX() は int64_t 型に定義されている (32bitならオーバヘッド大)
+ * ・int128_t, uint128_t は tecs.h で typedef された型である
+ * ・BIGENDIAN 判定は動的になっている (恐らく最適化で定数判定にされることはない)
  */
 
@@ -120,5 +103,5 @@
 #define	IS_BIGENDIAN()	(0)
 #else
-/* BIGENDIAN ãã©ããèªåå¤å® */
+/* BIGENDIAN かどうか自動判定 */
 static const uint16_t	endian_check = 0xff00;
 #define	IS_BIGENDIAN()	(*(uint8_t *)&endian_check)
@@ -302,6 +285,5 @@
 		return d;
 	else{
-		/* ãã®å®è£
-ã¯ tecs.h ã§ typedef ãã int128_t ã«é©å */
+		/* この実装は tecs.h で typedef した int128_t に適合 */
 		int128_t d1;
 		d1.hi = hton64( d.lo );
@@ -370,5 +352,5 @@
 }
 
-/*** unsigned ç¨ã®é¢æ° (128 bit çã®ã¿ç¨æ) ***/
+/*** unsigned 用の関数 (128 bit 版のみ用意) ***/
 Inline int128_t
 ntoh128( int128_t d )
@@ -377,6 +359,5 @@
 		return d;
 	else{
-		/* ãã®å®è£
-ã¯ tecs.h ã§ typedef ãã int128_t ã«é©å */
+		/* この実装は tecs.h で typedef した int128_t に適合 */
 		int128_t d1;
 		d1.hi = ntoh64( d.lo );
@@ -392,6 +373,5 @@
 		return d;
 	else{
-		/* ãã®å®è£
-ã¯ tecs.h ã§ typedef ãã int128_t ã«é©å */
+		/* この実装は tecs.h で typedef した int128_t に適合 */
 		uint128_t d1;
 		d1.hi = hton64( d.lo );
@@ -407,6 +387,5 @@
 		return d;
 	else{
-		/* ãã®å®è£
-ã¯ tecs.h ã§ typedef ãã int128_t ã«é©å */
+		/* この実装は tecs.h で typedef した int128_t に適合 */
 		uint128_t d1;
 		d1.hi = ntoh64( d.lo );
@@ -417,5 +396,5 @@
 
 /************************************************
- *  htonX, ntohX ã¯ 16, 32, 64 ã«ã®ã¿å¯¾å¿ã§ãã *
+ *  htonX, ntohX は 16, 32, 64 にのみ対応できる *
  ************************************************/
 Inline int64_t
@@ -441,5 +420,5 @@
 }
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTDR
  * entry port: eTDR
@@ -465,5 +444,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	syslog( LOG_INFO, "TDR: resetting channel" );
@@ -491,5 +470,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_sendSOP(b_client=%d)", b_client);
@@ -501,15 +480,15 @@
 
 	/*
-	 * SOP ãã±ããã®éä¿¡
-	 * ãã±ããã·ã¼ã±ã³ã¹ãå¤å°å´©ãã¦ãåå¾©ã§ããããã«ããã¤ãåä½ã§éã
-	 * ä¸ä½ãã¤ããä¸ä½ãã¤ãã®é ã«éã
+	 * SOP パケットの送信
+	 * パケットシーケンスが多少崩れても回復できるように、バイト単位で送る
+	 * 上位バイト、下位バイトの順に送る
 	 */
 
 	val = (uint8_t)(sopMagic>>8);
-	ercd = eTDR_putUInt8( idx, val );		/* ä¸ä½8ããã */
+	ercd = eTDR_putUInt8( idx, val );		/* 上位8ビット */
 	if( ercd != E_OK )
 		return	ercd;
 
-	val = (uint8_t)(sopMagic&0xff);			/* ä¸ä½8ããã */
+	val = (uint8_t)(sopMagic&0xff);			/* 下位8ビット */
 	ercd = eTDR_putUInt8( idx, val );
 
@@ -537,5 +516,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_receiveSOP(b_client=%d)", b_client);
@@ -582,5 +561,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_sendEOP(b_continue=%d)", b_continue);
@@ -592,5 +571,5 @@
 		magic = TDR_EOP_MAGIC2;
 
-	/* EOP magic ã®éä¿¡ */
+	/* EOP magic の送信 */
 	if( (ercd = eTDR_putUInt16( idx, magic )) != E_OK )
 		return ercd;
@@ -618,5 +597,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_receiveEOP(b_continue=%d)",b_continue);
@@ -651,5 +630,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -671,5 +650,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton16( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -692,5 +671,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton32( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -713,5 +692,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton64( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -734,5 +713,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton128( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -756,5 +735,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -778,5 +757,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh16( *out );
@@ -801,5 +780,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh32( *out );
@@ -824,5 +803,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh64( *out );
@@ -847,5 +826,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh128( *out );
@@ -869,5 +848,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -889,5 +868,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton16( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -910,5 +889,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton32( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -931,5 +910,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton64( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -952,5 +931,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	in = hton128u( in );
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
@@ -974,5 +953,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -996,5 +975,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh16( *out );
@@ -1019,5 +998,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh32( *out );
@@ -1042,5 +1021,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh64( *out );
@@ -1065,5 +1044,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	*out = ntoh128u( *out );
@@ -1087,5 +1066,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1108,5 +1087,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1130,5 +1109,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	eTDR_putUInt8(idx, (uint8_t)(in != 0) );
 
@@ -1154,5 +1133,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	ercd = eTDR_getUInt8(idx, &val );
 	if( ercd != E_OK )
@@ -1180,5 +1159,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	val = hton32( *(int32_t*)&in );
 	return cChannel_send( (int8_t *)&val, (int16_t)sizeof( val ), VAR_tmo );
@@ -1202,5 +1181,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
     val = *(int64_t *)&in;
 	val = hton64( val );
@@ -1226,5 +1205,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&val, (int16_t)sizeof( val ), VAR_tmo );
 	val = ntoh32( val );
@@ -1251,5 +1230,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&val, (int16_t)sizeof( val ), VAR_tmo );
 	val = ntoh64( val );
@@ -1274,5 +1253,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1295,5 +1274,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONS( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1317,5 +1296,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONI( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1339,5 +1318,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONL( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1361,5 +1340,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1384,5 +1363,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*out = NTOHS( OUT, sizeof OUT );
@@ -1408,5 +1387,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*out = NTOHI( OUT, sizeof OUT );
@@ -1432,5 +1411,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*out = NTOHL( OUT, sizeof OUT );
@@ -1454,5 +1433,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1475,5 +1454,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONS( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1497,5 +1476,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONI( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1519,5 +1498,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONL( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1541,5 +1520,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1564,5 +1543,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*out = NTOHS( OUT, sizeof OUT );
@@ -1588,5 +1567,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*out = NTOHI( OUT, sizeof OUT );
@@ -1612,5 +1591,5 @@
 	} /* end if VALID_IDX(idx) */
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*out = NTOHL( OUT, sizeof OUT );
@@ -1635,5 +1614,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	IN = HTONIP( IN, sizeof IN );
 	return cChannel_send( (int8_t *)&IN, (int16_t)sizeof( IN ), VAR_tmo );
@@ -1658,5 +1637,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)&OUT, (int16_t)sizeof( OUT ), VAR_tmo );
 	*ptr = NTOHIP( OUT, sizeof OUT );
@@ -1665,4 +1644,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tPPAllocator.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tPPAllocator.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tPPAllocator.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * heap_size        uint32_t         ATTR_heap_size  
  * buf              int8_t*          VAR_buf         
@@ -70,5 +55,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# ePPAllocator
  * entry port: ePPAllocator
@@ -94,5 +79,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	if( size + VAR_allocatedSize > ATTR_heapSize ){
 		ercd = E_NOMEM;
@@ -123,5 +108,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	if( (uintptr_t)ptr < (uintptr_t)VAR_buf || (uintptr_t)ptr >= (uintptr_t)(VAR_buf+VAR_allocatedSize) ){
 		ercd = E_PAR;
@@ -151,5 +136,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	VAR_allocatedSize = 0;
 
@@ -158,4 +143,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCDedicatedTaskMain.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCDedicatedTaskMain.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCDedicatedTaskMain.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cMain  signature: sTaskBody context: task
  *   void           cMain_main( );
@@ -69,5 +54,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMain
  * entry port: eMain
@@ -89,8 +74,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	while( cMain_main() == E_OK ){
 	}
@@ -98,4 +83,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCDedicatedTaskMainWithOpener.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCDedicatedTaskMainWithOpener.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCDedicatedTaskMainWithOpener.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cMain  signature: sTaskBody context: task
  *   void           cMain_main( );
@@ -69,5 +54,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMain
  * entry port: eMain
@@ -91,8 +76,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	while(1){
 #ifdef RPC_DEBUG
@@ -111,4 +96,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedChannelMan.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedChannelMan.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedChannelMan.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cSemaphore  signature: sSemaphore context: task
  *   ER             cSemaphore_signal( );
@@ -104,5 +89,5 @@
 
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eSemaphore
  * entry port: eSemaphore
@@ -128,5 +113,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	cClientSideTDR_putInt16( RPC_CHANNEL_MAN_EOP_MAGIC );
 	ercd = cSemaphore_signal();
@@ -153,5 +138,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	ercd = cSemaphore_wait();
 	if( ercd == E_OK ){
@@ -182,5 +167,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	ercd = cSemaphore_waitPolling();
 	if( ercd == E_OK ){
@@ -209,5 +194,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	ercd = cSemaphore_waitTimeout(timeout);
 	if( ercd == E_OK ){
@@ -238,5 +223,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -260,5 +245,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -266,4 +251,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMain.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMain.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMain.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,11 +38,11 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * channelNo        int16_t          VAR_channelNo   
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cUnmarshalAndCallFunction  signature: sTaskBody context: task
  *   void           cUnmarshalAndCallFunction_main( subscript );
@@ -108,5 +93,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMain
  * entry port: eMain
@@ -128,8 +113,8 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	syslog( LOG_INFO, "Shared RPC server task started." );
 	while(1){
@@ -172,4 +157,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMainWithOpener.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMainWithOpener.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMainWithOpener.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,20 +38,20 @@
 
 /*
- * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ãããã³ãã¬ã¼ãã¨ãã¦èªåçæããã¾ãã
- * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ãæå³ããã¦ãã¾ãã
- * tecsgen ã®åå®è¡ã«ããä¸æ¸ãããã¦ãã¾ããããéå¸¸
+ * このファイルは tecsgen によりテンプレートとして自動生成されました
+ * このファイルを編集して使用することが意図されていますが
+ * tecsgen の再実行により上書きされてしまうため、通常
  *   gen/tRPCSharedTaskMainWithOpener_template.c => src/tRPCSharedTaskMainWithOpener.c
- * ã®ããã«åå, ãã©ã«ããå¤æ´ãã¦ããä¿®æ­£ãã¾ã
+ * のように名前, フォルダを変更してから修正します
  */
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * initialDelay     RELTIM           ATTR_initialDelay
  * reopenDelay      RELTIM           ATTR_reopenDelay
  * channelNo        int16_t          VAR_channelNo   
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cUnmarshalAndCallFunction  signature: sTaskBody context: task
  *   void           cUnmarshalAndCallFunction_main( subscript );
@@ -118,5 +103,5 @@
  * #[</PREAMBLE>]# */
 
-/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã */
+/* プロトタイプ宣言や変数の定義をここに書きます */
 #include "tRPCSharedTaskMainWithOpener_tecsgen.h"
 
@@ -126,5 +111,5 @@
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eMain
  * entry port: eMain
@@ -147,10 +132,10 @@
 	}
 	else {
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */
+		/* エラー処理コードをここに記述します */
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	delay( ATTR_initialDelay );
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	while(1){
 #ifdef RPC_DEBUG
@@ -202,4 +187,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketChannel.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketChannel.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketChannel.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -56,5 +41,5 @@
 signature sSocketClientOpener {
 	ER		open( [in,string]const char_t *serverAddr, [in]uint16_t portNo, [in]TMO tmo );
-	ER		simpleOpen( [in]TMO tmo );      // attr ã®è¨­å®ã«å¾ã£ã¦éã
+	ER		simpleOpen( [in]TMO tmo );      // attr の設定に従って開く
 	ER		close( [in]TMO tmo );
 };
@@ -64,5 +49,5 @@
 	entry	sSocketClientOpener	eOpener;
 	attr {
-		// simpleOpen ã§ç¨ããããã¢ãã¬ã¹ããã³ãã¼ãçªå·
+		// simpleOpen で用いられるアドレスおよびポート番号
 		int16_t	portNo = SOCKET_DEFAULT_PORT_NO;
 		char_t  *serverAddr = "127.0.0.1";       // Loop back address
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketClient.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketClient.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketClient.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -74,9 +59,9 @@
 
 #ifndef E_OK
-#define	E_OK	0		/* æ­£å¸¸çµäº */
-#define	E_ID	(-18)	/* ä¸æ­£IDçªå· */
+#define	E_OK	0		/* 正常終了 */
+#define	E_ID	(-18)	/* 不正ID番号 */
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eC0
  * entry port: eC0
@@ -104,6 +89,6 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
-	// mikan BUG  buf ã®ä½ç½®ãæ´æ°ãã¦ããªã
+	/* ここに処理本体を記述します */
+	// mikan BUG  buf の位置を更新していない
 	while(size>0){
 		if((sz=write( VAR_sd, buf, (ssize_t)size )) < 0 ){
@@ -140,6 +125,6 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
-	/* write ã¯ãããã¡ãªã³ã°ãªããªã®ã§ flush ããªã */
+	/* ここに処理本体を記述します */
+	/* write はバッファリングなしなので flush しない */
 
 	return(ercd);
@@ -164,5 +149,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 	sz = read( VAR_sd, buf, (ssize_t)size );
 	ercd = errno2ER( errno );
@@ -178,6 +163,5 @@
 	}
 #endif
-	/* mikan ä¸çºã§å
-¨ã¦èª­ããã¨ä»®å® */
+	/* mikan 一発で全て読めると仮定 */
 	if( sz >= 0 )
 		ercd = sz;
@@ -203,5 +187,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -225,5 +209,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 
 	return(ercd);
@@ -256,5 +240,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	soc=socket(AF_INET, SOCK_STREAM, 0);
 	if(soc<0){
@@ -265,5 +249,5 @@
 
 #if 0
-/* ãã³ãã­ãã¯ã«å¤æ´ */
+/* ノンブロックに変更 */
 	int flag=fcntl(soc, F_GETFL, 0);
 	if(flag<0) perror("fcntl(GET) error");
@@ -286,12 +270,12 @@
 	if(errno!=EINPROGRESS)
 		perror("connect error");
-	//EINPROGRESS:ã³ãã¯ã·ã§ã³è¦æ±ã¯å§ã¾ã£ãããã¾ã å®äºãã¦ããªã
+	//EINPROGRESS:コネクション要求は始まったが、まだ完了していない
 
 	fd_set rmask,wmask;FD_ZERO(&rmask);FD_SET(soc,&rmask);wmask=rmask;
-	struct timeval tv={ ã¿ã¤ã ã¢ã¦ãæé[ç§],[Î¼ç§] };
+	struct timeval tv={ タイムアウト時間[秒],[μ秒] };
 	int rc=select(soc+1, &rmask, &wmask, NULL, &tv);
 	if(rc<0) perror("connect-select error");
-	if(rc==0){ ã¿ã¤ã ã¢ã¦ãå¦ç }
-	if(rc==2){ //èª­ã¿æ¸ããåæã«åºæ¥ãå ´å
+	if(rc==0){ タイムアウト処理 }
+	if(rc==2){ //読み書きが同時に出来る場合
 #if Solaris
 		int val;
@@ -303,12 +287,11 @@
 			if(getpeername(soc,(struct sockaddr*)&name,&len)>=0) {
 #endif
-				// æ¢ã«ãã¼ã¿ãæ¥ã¦ãã
+				// 既にデータが来ている
 			}else{
-				// ã³ãã¯ãå¤±æ
+				// コネクト失敗
 			}
 		}
 	}
-//ãã©ã°ãå
-ã«æ»ã
+//フラグを元に戻す
 	if(fcntl(soc, F_SETFL, flag)<0) perror("fcntl(END) error");
 #endif /* 0 */
@@ -357,6 +340,6 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
-	close( VAR_sd );       /* mikan ã¨ã©ã¼å¦ç */
+	/* ここに処理本体を記述します #_TEFB_# */
+	close( VAR_sd );       /* mikan エラー処理 */
 
 	return(ercd);
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketServer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketServer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tSocketServer.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * portNo           int16_t          ATTR_portNo    
  * sd               int_t            VAR_sd          
@@ -73,10 +58,10 @@
 
 #ifndef E_OK
-#define	E_OK	0		/* æ­£å¸¸çµäº */
-#define	E_ID	(-18)	/* ä¸æ­£IDçªå· */
+#define	E_OK	0		/* 正常終了 */
+#define	E_ID	(-18)	/* 不正ID番号 */
 #endif
 
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eC1
  * entry port: eC1
@@ -104,5 +89,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 #ifdef DEBUG
 	syslog( LOG_INFO, "tSocketServer: send" );
@@ -147,5 +132,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 
 	return(ercd);
@@ -171,5 +156,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 	if( (sz=read( VAR_sd, buf, (size_t)size )) < 0 )
 		ercd = errno2ER( errno );
@@ -197,5 +182,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 
 	return(ercd);
@@ -219,5 +204,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 	syslog( LOG_INFO, "tSocketServer: reset" );
 
@@ -251,5 +236,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	syslog( LOG_INFO, "tSocketServer: open" );
 
@@ -306,5 +291,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	syslog( LOG_INFO, "tSocketServer: close" );
 	if( close( VAR_sd ) < 0 )
@@ -315,4 +300,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTDR_inline.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTDR_inline.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTDR_inline.h	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * tmo              TMO              VAR_tmo         
  *
@@ -62,11 +47,10 @@
 
 /*
- * marhaler, unmarshaler ãä½¿ç¨ãã STRLEN é¢æ°ãå®ç¾©ãã
- *  marshaler, unmarshaler ã¯å¿
-ã TDR ã¯ ã«çµåããããã
+ * marhaler, unmarshaler が使用する STRLEN 関数を定義する
+ *  marshaler, unmarshaler は必ず TDR は に結合されるため
  */
 #include	"rpc_string.h"
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eTDR
  * entry port: eTDR
@@ -121,5 +105,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_sendSOP(b_client=%d)", b_client);
@@ -131,7 +115,7 @@
 
 	/*
-	 * SOP ãã±ããã®éä¿¡
-	 * ãã±ããã·ã¼ã±ã³ã¹ãå¤å°å´©ãã¦ãåå¾©ã§ããããã«ããã¤ãåä½ã§éã
-	 * ä¸ä½ã¢ãã¬ã¹ãä¸ä½ã¢ãã¬ã¹ã®é ã«éã
+	 * SOP パケットの送信
+	 * パケットシーケンスが多少崩れても回復できるように、バイト単位で送る
+	 * 下位アドレス、上位アドレスの順に送る
 	 */
 
@@ -171,5 +155,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_receiveSOP(b_client=%d)", b_client);
@@ -219,5 +203,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_sendEOP(b_continue=%d)", b_continue);
@@ -229,5 +213,5 @@
 		magic = TDR_EOP_MAGIC2;
 
-	/* EOP magic ã®éä¿¡ */
+	/* EOP magic の送信 */
 	if( (ercd = eTDR_putInt16( idx, (int16_t)magic )) != E_OK )
 		return ercd;
@@ -256,5 +240,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 #ifdef RPC_DEBUG
 	syslog(LOG_INFO, "eTDR_receiveEOP(b_continue=%d)",b_continue);
@@ -290,5 +274,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -311,5 +295,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -332,5 +316,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -353,5 +337,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -374,5 +358,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -396,5 +380,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -419,5 +403,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -442,5 +426,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -465,5 +449,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -488,5 +472,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -510,5 +494,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -531,5 +515,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -552,5 +536,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -573,5 +557,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -594,5 +578,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -616,5 +600,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -639,5 +623,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -662,5 +646,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -685,5 +669,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -708,5 +692,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -731,5 +715,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	eTDR_putUInt8(idx, (uint8_t)(in != 0) );
 
@@ -756,5 +740,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	ercd = eTDR_getUInt8(idx, &val );
 	if( ercd != E_OK )
@@ -782,5 +766,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -803,5 +787,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -825,5 +809,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -848,5 +832,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -870,5 +854,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -891,5 +875,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -913,5 +897,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -934,5 +918,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -955,5 +939,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -976,5 +960,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -998,5 +982,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1021,5 +1005,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1044,5 +1028,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1067,5 +1051,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1089,5 +1073,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1110,5 +1094,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1131,5 +1115,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1152,5 +1136,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&in, (int16_t)sizeof( in ), VAR_tmo );
 }
@@ -1174,5 +1158,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1197,5 +1181,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1220,5 +1204,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1243,5 +1227,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)out, (int16_t)sizeof( *out ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *out ) ? E_OK : E_BOVR );
@@ -1265,5 +1249,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	return cChannel_send( (int8_t *)&ptr, (int16_t)sizeof( ptr ), VAR_tmo );
 }
@@ -1287,5 +1271,5 @@
   (void)p_cellcb;   // to avoid unused warning
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	er_sz = cChannel_receive( (int8_t *)ptr, (int16_t)sizeof( *ptr ), VAR_tmo );
 	return  er_sz < 0 ? er_sz : ( er_sz == sizeof( *ptr ) ? E_OK : E_BOVR );
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETChannel.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETChannel.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETChannel.cdl	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETClient.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETClient.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETClient.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,8 +38,8 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * cep_id           ID               ATTR_cep_id     
  *
@@ -71,9 +56,9 @@
 
 #ifndef E_OK
-#define	E_OK	0		/* æ­£å¸¸çµäº */
-#define	E_ID	(-18)	/* ä¸æ­£IDçªå· */
+#define	E_OK	0		/* 正常終了 */
+#define	E_ID	(-18)	/* 不正ID番号 */
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eC0
  * entry port: eC0
@@ -101,5 +86,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 #ifdef DEBUG
 	syslog( LOG_INFO, "tTINETServer: send" );
@@ -144,6 +129,6 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
-	/* write ã¯ãããã¡ãªã³ã°ãªããªã®ã§ flush ããªã */
+	/* ここに処理本体を記述します */
+	/* write はバッファリングなしなので flush しない */
 
 	return(ercd);
@@ -168,5 +153,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 	ercd = tcp_rcv_dat( ATTR_cep_id, buf, (size_t)size, tmo );
 
@@ -191,5 +176,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 
 	return(ercd);
@@ -213,5 +198,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 
 	return(ercd);
@@ -241,5 +226,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	puts("opening");
 	ercd=tcp_con_cep(ATTR_cep_id, NADR, clientAddr, tmo);
@@ -269,6 +254,6 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
-	ercd = tcp_cls_cep( ATTR_cep_id, 0 );       /* mikan ã¨ã©ã¼å¦ç */
+	/* ここに処理本体を記述します #_TEFB_# */
+	ercd = tcp_cls_cep( ATTR_cep_id, 0 );       /* mikan エラー処理 */
 
 	return(ercd);
@@ -276,4 +261,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETServer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETServer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tTINETServer.c	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -53,12 +38,12 @@
 
 /* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
  *
- * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ #_CAAM_#
+ * 属性アクセスマクロ #_CAAM_#
  * cep_id           ID               ATTR_cep_id     
  * rep_id           ID               ATTR_rep_id     
  *
- * å¼ã³å£é¢æ° #_TCPF_#
+ * 呼び口関数 #_TCPF_#
  * call port : cCheck  signature: sIPV4AcceptCheck context: task
  *   bool_t         cCheck_check( const T_IPV4EP* clientAddr );
@@ -77,9 +62,9 @@
 
 #ifndef E_OK
-#define	E_OK	0		/* æ­£å¸¸çµäº */
-#define	E_ID	(-18)	/* ä¸æ­£IDçªå· */
+#define	E_OK	0		/* 正常終了 */
+#define	E_ID	(-18)	/* 不正ID番号 */
 #endif
 
-/* åãå£é¢æ° #_TEPF_# */
+/* 受け口関数 #_TEPF_# */
 /* #[<ENTRY_PORT>]# eC1
  * entry port: eC1
@@ -107,5 +92,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 #ifdef DEBUG
 	syslog( LOG_INFO, "tTINETServer: send" );
@@ -150,5 +135,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 
 	return(ercd);
@@ -174,5 +159,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 	ercd = tcp_rcv_dat( ATTR_cep_id, buf, (size_t)size, tmo );
 
@@ -197,5 +182,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 
 	return(ercd);
@@ -219,5 +204,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã */
+	/* ここに処理本体を記述します */
 	syslog( LOG_INFO, "tTINETServer: reset" );
 
@@ -250,5 +235,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	syslog( LOG_INFO, "tTINETServer: open" );
 	if( (ercd=tcp_acp_cep(ATTR_cep_id, ATTR_rep_id, &dst, TMO_FEVR)) != E_OK ){
@@ -279,5 +264,5 @@
 	}
 
-	/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã #_TEFB_# */
+	/* ここに処理本体を記述します #_TEFB_# */
 	syslog( LOG_INFO, "tTINETServer: close" );
 	ercd = tcp_cls_cep( ATTR_cep_id, TMO_FEVR );
@@ -287,4 +272,4 @@
 
 /* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tecs_rpc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tecs_rpc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/rpc/tecs_rpc.h	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -69,8 +54,6 @@
 
 /*
- * marshaler, unmarshaler å
-ã®ç¶æ
-å¤ãè¨­å®ãããã¯ã­
- * val ã¯ sRPCErrorHandler.cdl ã§å®ç¾©ãã
+ * marshaler, unmarshaler 内の状態値を設定するマクロ
+ * val は sRPCErrorHandler.cdl で定義する
  */
 #if ! defined( NO_NEED_RPC_STATE ) && ! defined( NO_NEED_RPC_ERROR_HANDLER )
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/sMalloc.cdl
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/sMalloc.cdl	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/sMalloc.cdl	(revision 389)
@@ -2,47 +2,32 @@
  *  Copyright (C) 2012 by Ubiquitous Computing and Networking Laboratory
  *                Ritsumeikan Univ., JAPAN
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/tecs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/tecs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecs/tecs.h	(revision 389)
@@ -5,47 +5,32 @@
  *   Copyright (C) 2008-2013 by TOPPERS Project
  *--
- *   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *       ã¨ï¼
- *     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *         å ±åãããã¨ï¼
- *   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *       å
-è²¬ãããã¨ï¼
+ *   上記著作権者は，以下の(1)(4)の条件を満たす場合に限り，本ソフトウェ
+ *   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *       スコード中に含まれていること．
+ *   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *       の無保証規定を掲載すること．
+ *   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *       と．
+ *     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *         作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *         報告すること．
+ *   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *       免責すること．
  *  
- *   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *   ã®è²¬ä»»ãè² ããªãï¼
+ *   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *   の責任を負わない．
  *  
  *   $Id$
@@ -69,7 +54,7 @@
 #endif /* end SHORT_T_DEFINED */
 
-#ifndef CHAR_T_DEFINED				/* t_stddef.h ASP 1.7.0 ä»¥åã§ã¯éè¤ãã */
+#ifndef CHAR_T_DEFINED				/* t_stddef.h ASP 1.7.0 以前では重複する */
 #define CHAR_T_DEFINED
-typedef char  char_t;				/* signed, unsigned æªå® */
+typedef char  char_t;				/* signed, unsigned 未定 */
 #endif /* end CHAR_T_DEFINED */
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsgen.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsgen.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsgen.rb	(revision 389)
@@ -7,68 +7,49 @@
 #   Copyright (C) 2008-2019 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#= tecsgen  : TECS ã®ã¸ã§ãã¬ã¼ã¿
+#= tecsgen  : TECS のジェネレータ
 #
-#Authors::    ç³å·ãæä¹(HRP2Plugin)
-#Authors::    åããæ(åççµåä»æ§)
-#Authors::    æ²³ç°ãæºæ(NotifierPlugin)
-#Authors::    é«ç°ãåºç« (ASP3 ã¸ã® TECS çµè¾¼ã¿)
-#Authors::    é«æ¨ãä¿¡å°(ã©ã³ã¿ã¤ã ããã)
-#Authors::    æç¬ãæç¾(TECS flow å®è£
-)
-#Authors::    éµé£¼ãæ¬å¹¸(ATK1Plugin)
-#Authors::    å¤§å±±ãåå¸(ã¸ã§ãã¬ã¼ã¿å®è£
-, RPCPlugin, TracePlugin, MrubyBridgePlugin)
-#Authors::    å±±æ¬ãå°ä¹(ã¸ã§ãã¬ã¼ã¿åæãã­ãã¿ã¤ãå®è£
-)
-#Authors::    å°åãéé(ãã¹ãã³ã¼ãã®ä¸é¨)
-#Authors::    å®ç©ãåä¹(ASP+TECS, EV3RT+TECS, mruby on TECSç­å®è£
-)
+#Authors::    石川　拓也(HRP2Plugin)
+#Authors::    原　　拓(動的結合仕様)
+#Authors::    河田　智明(NotifierPlugin)
+#Authors::    高田　広章(ASP3 への TECS 組込み)
+#Authors::    高木　信尚(ランタイムヘッダ)
+#Authors::    成瀬　有美(TECS flow 実装)
+#Authors::    鵜飼　敬幸(ATK1Plugin)
+#Authors::    大山　博司(ジェネレータ実装, RPCPlugin, TracePlugin, MrubyBridgePlugin)
+#Authors::    山本　将也(ジェネレータ初期プロトタイプ実装)
+#Authors::    小南　靖雄(テストコードの一部)
+#Authors::    安積　卓也(ASP+TECS, EV3RT+TECS, mruby on TECS等実装)
 #  Authors list is in i-ro-ha order.
 #Version::   see version.rb
@@ -81,8 +62,8 @@
 
 ###
-#= Array  initializer ã® '{', '}' ã§å²ã¾ããå ´å
-# mikan AggregateInitializer ãªã©ãã¯ã©ã¹ãå¤æ´ãã¹ãã§ãã
+#= Array  initializer の '{', '}' で囲まれた場合
+# mikan AggregateInitializer など、クラスを変更すべきである
 class Array
-  #=== CDL ã®æå­åãçæãã
+  #=== CDL の文字列を生成する
   def to_CDL_str
     str = '{ '
@@ -105,13 +86,12 @@
 end
 
-#=== RUBY ã©ã¤ãã©ãªãã­ã¼ããã
+#=== RUBY ライブラリをロードする
 #
-# -L, $RUBYLIB, ã·ã¹ãã (/usr/lib/rub..ãªã©) ã®é ã«ãµã¼ããè¡ããã
-# exerb å¯¾å¿ã®ãããä¸è¨ãã¹ã«ãã¡ã¤ã«ãè¦ã¤ãããªãå ´å require ãå®è¡ãã¦ã¿ã
+# -L, $RUBYLIB, システム(/usr/lib/rub..など) の順にサーチが行われる
+# exerb 対応のため、上記パスにファイルが見つからない場合 require を実行してみる
 #
-# ãã©ã°ã¤ã³ã®å ´åã¯ b_fatal = false ãæå®ããã¡ã¤ã«ããªãã¦ãã¨ã©ã¼åºåå¾ãå¦çç¶è¡
-# b_fatal = false ã®å ´å tecslib/core ããµã¼ããã¹ã«è¿½å ããã
-#RETURN::Bool   : true=æåã false=å¤±æ   å¤±æããå ´åãGenerator.error ã¯å¼ã³å
-ã§åºåãã
+# プラグインの場合は b_fatal = false を指定。ファイルがなくてもエラー出力後、処理続行
+# b_fatal = false の場合 tecslib/core がサーチパスに追加される
+#RETURN::Bool   : true=成功、 false=失敗   失敗した場合、Generator.error は呼び元で出力する
 def require_tecsgen_lib( fname, b_fatal = true )
   dbgPrint( "require_lib: #{fname}\n")
@@ -121,12 +101,11 @@
     b_exception = false
 
-    # -L ã $RUBYLIB ã§æå®ããããã¹ããã³ã·ã¹ãã ã®ãã¹ãããµã¼ã
-    #   exerb ã§ã¯ $LOAD_PATH ã¯ ["."] ã®ã¿å
-¥ã£ã¦ããããã 
+    # -L 、 $RUBYLIB で指定されたパスおよびシステムのパスからサーチ
+    #   exerb では $LOAD_PATH は ["."] のみ入っているようだ
     ($library_path+$LOAD_PATH).each{ |path|
       [ "", "tecslib/plugin/" ].each { |lp|
         lib = File.expand_path( path ) + '/' + lp + fname
         
-        if File.exist? lib then  # ãã¡ã¤ã«å­å¦ã¨ä»ã®ã¨ã©ã¼ãåºå¥ããããå­å¨ç¢ºèªããã
+        if File.exist? lib then  # ファイル存否と他のエラーを区別するため存在確認をする
           begin
             require( lib )
@@ -145,7 +124,7 @@
 
     if b_require == false && b_exception == false then
-      # exerb å¯¾å¿ "." ããµã¼ããã¹ã®æåã«å ãã
-      #   "tecslib/" ã¯ RPCPlugin.rb, TracePlugin.rb ã®ããã«ç¨æãã¦ãã
-      #   RPCPlugin.rb, TracePlugin.rb ã tecslib ä¸ã§ãªããã°ä¸è¦ã«ãªããããã®ããã«ãã¦ãã
+      # exerb 対応 "." をサーチパスの最初に加える
+      #   "tecslib/" は RPCPlugin.rb, TracePlugin.rb のために用意してある
+      #   RPCPlugin.rb, TracePlugin.rb が tecslib 下でなければ不要になるが、このようにしておく
       ["","tecslib/plugin/"].each{ |lp|
         path = lp + fname
@@ -155,9 +134,9 @@
         rescue LoadError => e
           # p "LoadError to load #{fname}"
-          # 2015.12.18 exerb çã§ãã©ã°ã¤ã³ã®ã­ã¼ãã§ã¨ã©ã¼ãåºãã®ã§ãç¡è¦ãã. ããããæããã¨ã©ã¼ã¯åºã¦ãã
+          # 2015.12.18 exerb 版でプラグインのロードでエラーが出るので、無視する. おそらく昔からエラーは出ていた
           # print_exception( e )
         rescue Exception => e
           b_exception = true
-          # ææ³ã¨ã©ã¼ãªã©ãçºç
+          # 文法エラーなどが発生
           print_exception( e )
           break
@@ -167,9 +146,9 @@
 
     if b_require == false then
-      # è¦ã¤ãããªãã£ã
+      # 見つからなかった
       if b_exception == false then
         STDERR << "tecsgen: Fail to load #{fname}. Check $RUBYLIB environment variable or -L option\n"
       end
-      # tecsgen ãæ§æãããã¡ã¤ã«ã®å ´åã¯ä¸­æ­¢ãã
+      # tecsgen を構成するファイルの場合は中止する
       if b_fatal then
         STDERR << "tecsgen: Exit because of unrecoverble error\n"
@@ -180,13 +159,13 @@
     return true
   ensure
-    # $KCODE ã CDL ã®æå­ã³ã¼ãã«æ»ãã¦ãã
+    # $KCODE を CDL の文字コードに戻しておく
     set_kcode $KCODE_CDL
   end
 end
 
-#=== ä¾å¤ã®è¡¨ç¤º
+#=== 例外の表示
 #evar:: Exception
 def print_exception( evar )
-# ããã¹ã¿ãã¯ãã¬ã¼ã¹ãåºãã¾ã§ãæéãããããããªãã°ãæ¬¡ãã³ã¡ã³ãã¢ã¦ããã¦ã¿ãã¹ã
+# もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
   print "*** Begin Ruby exception message ***\n"
   puts( evar.to_s )
@@ -211,5 +190,5 @@
 end
 
-#=== ã¨ã©ã¼ããã³è­¦åã®ã¬ãã¼ã
+#=== エラーおよび警告のレポート
 def print_report
   msg = nil
@@ -229,5 +208,5 @@
 end
 
-#=== $KCODE ãè¨­å®
+#=== $KCODE を設定
 def set_kcode kcode
   if ! $b_no_kcode then
@@ -301,7 +280,7 @@
     # include RUNIT::Assert
 
-    ### ã°ã­ã¼ãã«å¤æ°å®ç¾© ###
-
-    # ã³ãã³ãã©ã¤ã³å¼æ°ã (Makefile.templ ã¸åºå)
+    ### グローバル変数定義 ###
+
+    # コマンドライン引数　 (Makefile.templ へ出力)
     $arguments = ""
     ARGV.each { |a| $arguments += " " + a }
@@ -328,7 +307,6 @@
     $ram_initializer = false # bool: generate ram initializer
     $region_list = {}      #string array : region path which is generated
-    $generating_region = nil # Region:  Region to optimisze & generate code   # ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã§ã¯ãªã
-		 #           Cell#is_generate? ã«ã¦åç
-§ããã
+    $generating_region = nil # Region:  Region to optimisze & generate code   # コマンドラインオプションではない
+		 #           Cell#is_generate? にて参照される
     $unit_test = false     # bool:   unit test verification
     $kcode     = nil       # nil | String: Kanji code type "euc"|"sjis"|"none"|"utf8"
@@ -336,5 +314,5 @@
     $no_banner = false     # bool:   not print banner
     $print_version = false # bool:   print version
-    $target    = "tecs"    # String: target name, ARGV[0] ããåè¨­å®ããï¼"tecs" ã¯ä»®ã®ã¿ã¼ã²ãã)
+    $target    = "tecs"    # String: target name, ARGV[0] から再設定する（"tecs" は仮のターゲット)
     $no_default_import_path = false  # bool: no default import path
     $c_suffix  = "c"       # suffix for C progorams (for C++ source)
@@ -365,17 +343,17 @@
     end
 
-    # # æå­ã³ã¼ãã®è¨­å®
+    # # 文字コードの設定
     if $IN_EXERB then
-      # KCODE_CDL, $KCONV_CDL ãä»®ã«è¨­å®ãã (tecs_lang.rb ã§ããã«åè¨­å®ããã)
+      # KCODE_CDL, $KCONV_CDL を仮に設定する (tecs_lang.rb ですぐに再設定される)
       $KCODE_CDL = "SJIS"          # string: "EUC" | "SJIS" | "NONE" | "UTF8"
-      $KCONV_CDL = Kconv::SJIS     # const: NONE ã«ã¯ ASCII ãå¯¾å¿ããã
+      $KCONV_CDL = Kconv::SJIS     # const: NONE には ASCII を対応させる
     else
       $KCODE_CDL = "EUC"           # string: "EUC" | "SJIS" | "NONE" | "UTF8"
-      $KCONV_CDL = Kconv::EUC      # const: NONE ã«ã¯ ASCII ãå¯¾å¿ããã
-    end
-    # $KCODE_TECSGEN, $KCONV_TECSGEN ãä»®ã«è¨­å®ãã (tecs_lang.rb ã§ããã«åè¨­å®ããã)
-    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  ãã®ãã¡ã¤ã«ã®æå­ã³ã¼ãï¼ãªãã·ã§ã³ã§ã¯ãªãå®æ°ï¼
+      $KCONV_CDL = Kconv::EUC      # const: NONE には ASCII を対応させる
+    end
+    # $KCODE_TECSGEN, $KCONV_TECSGEN を仮に設定する (tecs_lang.rb ですぐに再設定される)
+    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード（オプションではなく定数）
     $KCONV_TECSGEN = Kconv::UTF8 # const: 
-    set_kcode( $KCODE_TECSGEN )  # ãã®ãã¡ã¤ã«ã®æå­ã³ã¼ããè¨­å®
+    set_kcode( $KCODE_TECSGEN )  # このファイルの文字コードを設定
 
   end # initialize_global_var
@@ -383,5 +361,5 @@
   def self.analyze_option( additional_option_parser )
 
-    ###  tecsgen ã³ãã³ããªãã·ã§ã³è§£æ  ###
+    ###  tecsgen コマンドオプション解析  ###
     ARGV.options {|parser|
       parser.banner = "Usage: tecsgen [options] files"
@@ -434,5 +412,5 @@
         $kcode = code
       }
-      #  old_mode ã¯ V1.0.C.22 ã§å»æ­¢
+      #  old_mode は V1.0.C.22 で廃止
       #  parser.on('-o', '--old-mode',    'old mode' ){
       #    $old_mode = true
@@ -503,10 +481,10 @@
 
   def self.load_modules
-    ### tecsgen ã¢ã¸ã¥ã¼ã«ã®ã­ã¼ã ####
-    # -L ã§ãã¹æå®å¯è½ã¨ãããããããããã­ã¼ããéå§ãã
-
-    #  tecsgen ãã¼ã¸ã§ã³ãã¡ã¤ã«ã®ã­ã¼ã
-    # ãããå®è¡ããã¾ã§ tecsgen ã®ãã¼ã¸ã§ã³ãè¡¨ç¤ºã§ããªã
-    # ãã®ãã¡ã¤ã«ãèª¤ã£ã¦èª­ã¿è¾¼ãã¨ãç°ãªããã¼ã¸ã§ã³åãè¡¨ç¤ºãã¦ãã¾ã
+    ### tecsgen モジュールのロード ####
+    # -L でパス指定可能としたため、ここからロードを開始する
+
+    #  tecsgen バージョンファイルのロード
+    # これを実行するまで tecsgen のバージョンを表示できない
+    # このファイルを誤って読み込むと、異なるバージョン名を表示してしまう
     require_tecsgen_lib 'tecslib/version.rb'
     if $title then
@@ -522,5 +500,5 @@
     end
 
-    # æå­ã³ã¼ãæ±ºå®ã®ããæåã«èª­ã¿ãã
+    # 文字コード決定のため最初に読みこむ
     require_tecsgen_lib 'tecslib/core/tecs_lang.rb'
 
@@ -531,5 +509,5 @@
     end
 
-    # syntaxobj.rb ã«ã¯ Node ãå®ç¾©ããã¦ããã®ã§ãæ©ãæ®µéã§ require 
+    # syntaxobj.rb には Node が定義されているので、早い段階で require 
     require_tecsgen_lib 'tecslib/core/syntaxobj.rb'
     require_tecsgen_lib 'tecslib/core/pluginModule.rb'
@@ -555,5 +533,5 @@
     require_tecsgen_lib 'tecslib/plugin/MultiPlugin.rb'
 
-    # C è¨èªãã¼ãµ
+    # C 言語パーサ
     require_tecsgen_lib 'tecslib/core/C_parser.tab.rb'
     require_tecsgen_lib 'tecslib/core/ctypes.rb'
@@ -566,10 +544,10 @@
 
   def self.setup
-    # $import_path, $tecspath ãèª¿æ´
+    # $import_path, $tecspath を調整
     TECSGEN.adjust_exerb_path
 
-    # $import_path ã«ç°å¢å¤æ° $TECSGEN ããã³ãã®ç´ä¸ãè¿½å 
+    # $import_path に環境変数 $TECSGEN およびその直下を追加
     if $no_default_import_path == false then
-      # $TECSGEN ããã³ããã®ç´ä¸ã®ãã£ã¬ã¯ããªããã¹ã«è¿½å 
+      # $TECSGEN および、その直下のディレクトリをパスに追加
       if $tecspath != "." then
         TECSGEN.add_import_path $tecspath
@@ -582,24 +560,24 @@
           }
         rescue
-          # ç¡è¦
+          # 無視
         end
       end
     end
 
-    # ããã©ã«ãè¨­å®
+    # デフォルト設定
     TECSGEN.set_default_config
 
-    # $target ã®è¨­å®
+    # $target の設定
     $target = ARGV[0]
     pos = $target.rindex( /[:\\\/]/ )
     if pos then
-      $target = $target[pos+1..-1]  # ãã£ã¬ã¯ããªåºåããé¤ããæå­å
+      $target = $target[pos+1..-1]  # ディレクトリ区切りを除いた文字列
     end
     pos = $target.rindex( /\./ )
     if pos then
-      $target = $target[0..pos-1]   # æ¡å¼µå­ãåãé¤ããæå­å
-    end
-
-    # gen ãã£ã¬ã¯ããªã®ä½æ
+      $target = $target[0..pos-1]   # 拡張子を取り除いた文字列
+    end
+
+    # gen ディレクトリの作成
     begin
       if ! File.directory?( $gen_base ) then
@@ -627,7 +605,6 @@
 end # TECSGEN
 
-# è¤æ°ã®ã¸ã§ãã¬ã¼ã¿ã¤ã³ã¹ã¿ã³ã¹ãçæãããã¨ã¯ãå¯è½ã ããä»¥ä¸ã®åé¡ããã
-#  ã¯ã©ã¹å¤æ°ã®ãªã»ãããç¢ºå®ã«è¡ãå¿
-è¦ããã
+# 複数のジェネレータインスタンスを生成することは、可能だが、以下の問題がある
+#  クラス変数のリセットを確実に行う必要がある
 
 if $TECSCDE != true && $TECSFLOW != true then
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsgen_rcov.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsgen_rcov.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsgen_rcov.rb	(revision 389)
@@ -7,54 +7,38 @@
 #   Copyright (C) 2008-2016 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# ã«ãã¬ãã¸ãåãããã® tecsgen ã³ãã³ã
-# SimpleCov ãä½¿ç¨ãããããruby V1.9 ä»¥éãå¿
-è¦
+# カバレッジを取るための tecsgen コマンド
+# SimpleCov を使用するため、ruby V1.9 以降が必要
 #
 # Usage: tecsgen_rcov.rb [options] CDL-file.cdl
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb	(revision 389)
@@ -107,9 +107,8 @@
 #		b_asm   = false
 
-		# euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+		# euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
 		TECS_LANG::set_kcode_binary
 
-		# 800U, 0xffLL ãªã© (æ´æ°ãªãã©ã«ã«å
-±éã®ä¿®é£¾å­)
+		# 800U, 0xffLL など (整数リテラルに共通の修飾子)
 		integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
 
@@ -126,5 +125,5 @@
 				if comment
 					case line
-					# ã³ã¡ã³ãçµäº
+					# コメント終了
 					when /\A\*\//
 						comment = false
@@ -134,36 +133,36 @@
 				else
 					case line
-					# ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+					# 空白、プリプロセスディレクティブ
 					when /\A\s+/
 						;
-					# è­å¥å­
+					# 識別子
 					when /\A[a-zA-Z_]\w*/
 						word = $&
 						@q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-					# 16 é²æ°å®æ°
+					# 16 進数定数
 					when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
 						@q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-					# 8 é²æ°å®æ°
+					# 8 進数定数
 					when /\A0[0-7]+#{integer_qualifier}/
 						@q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-					# æµ®åå°æ°å®æ°
+					# 浮動小数定数
 					when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
 						@q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-					# æ´æ°å®æ°
+					# 整数定数
 					when /\A\d+#{integer_qualifier}/
 					# when /\A\d+/
 						@q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-					# æå­
+					# 文字
 					when /\A'(?:[^'\\]|\\.)'/
 						@q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-					# æå­å
-#					"#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+					# 文字列
+#					"#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #					when /\A"(?:[^"\\]+|\\.)*"/
-					when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+					when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
 						@q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-					# è¡ã³ã¡ã³ã
+					# 行コメント
 					when /\A\/\/.*$/
-						# èª­ã¿é£ã°ãã ã
-					# ã³ã¡ã³ãéå§
+						# 読み飛ばすだけ
+					# コメント開始
 					when /\A\/\*/
 						comment = true
@@ -196,5 +195,5 @@
 	}
 
-	# çµäºã®å°
+	# 終了の印
 	@q << nil
 
@@ -223,5 +222,5 @@
 			end
 
-			# TYPE_NAME ãã¼ã¯ã³ã¸ç½®ãæã
+			# TYPE_NAME トークンへ置き換え
 			if @b_no_type_name == false
 				if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
@@ -232,5 +231,5 @@
 			end
 
-			if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+			if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
 				locale = @@current_locale[@@generator_nest]
 				if token then
@@ -262,5 +261,5 @@
 	@@n_info = 0
 
-	# ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
 	def self.error( msg )
 		@@n_error += 1
@@ -274,5 +273,5 @@
 	end
 
-	# ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
 	def self.warning( msg )
 		@@n_warning += 1
@@ -281,5 +280,5 @@
 	end
 
-	# ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯
+	# このメソッドは構文解析、意味解析からのみ呼出し可
 	def self.info( msg )
 		@@n_info += 1
@@ -1796,5 +1795,5 @@
 module_eval(<<'.,.,', 'C_parser.y.rb', 228)
   def _reduce_83(val, _values, result)
-    			result = Expression.new( val[2] )    # ',' ã®å¾ããæ¡ç¨
+    			result = Expression.new( val[2] )    # ',' の後ろを採用
 		
     result
@@ -1822,5 +1821,5 @@
 module_eval(<<'.,.,', 'C_parser.y.rb', 261)
   def _reduce_86(val, _values, result)
-    			result = CIntType.new( -3 )    # storage class ã¯ç¡è¦
+    			result = CIntType.new( -3 )    # storage class は無視
 		
     result
@@ -1830,5 +1829,5 @@
 module_eval(<<'.,.,', 'C_parser.y.rb', 265)
   def _reduce_87(val, _values, result)
-    			result = val[1]                # storage class ã¯ç¡è¦
+    			result = val[1]                # storage class は無視
 		
     result
@@ -2587,9 +2586,7 @@
   def _reduce_268(val, _values, result)
     		while true
-			# ';' ãè¡¨ããã¾ã§ããã¼ã¯ã³ãèª­ã¿é£ã°ãã
-			# gcc ã®æ§ææ¡å¼µã«å¯¾å¿ãã¹ãã ããåç´ãªå®è£
-ã¨ãã¦ã';' ã¾ã§èª­ã¿é£ã°ãã
-			# ãã¼ã¯ã³åä½ã§èª­ã¿é£ã°ãã¦ããã®ã§ãæå­åãã³ã¡ã³ãå
-ã® ';' ã¯å¯¾è±¡ã«ãªããªãã
+			# ';' が表れるまで、トークンを読み飛ばす。
+			# gcc の構文拡張に対応すべきだが、単純な実装として、';' まで読み飛ばす。
+			# トークン単位で読み飛ばしているので、文字列やコメント内の ';' は対象にならない。
 			token = next_token
 			if token[1].val == ";"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -55,26 +40,22 @@
 class C_parser
 rule
-# ãããã¬ãã«ã®æ§æè¦ç´ ã¯ C_parser
+# トップレベルの構文要素は C_parser
 all: C_parser
 
 # Expr
-##########################  å¼  ##########################
-# K&Rã®ææ³(ãã­ã°ã©ãã³ã°è¨èªC ç¬¬2ç ä»é²)ã¨ä¸é¨ç°ãªã
-# argument_expression_list(é¢æ°å¼æ°), assignment_expression(ä»£å
-¥)ããªã
-# å¼ã® result ã¯ããã¹ã¦é
-åã§ç¬¬ä¸è¦ç´ ãè­å¥ã·ã³ãã«ãç¬¬äºè¦ç´ ä»¥ä¸ãå¼æ°
+##########################  式  ##########################
+# K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
+# argument_expression_list(関数引数), assignment_expression(代入)がない
+# 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
 #
-# 2019/3/28 é·å³¶ ä¸è¨ã®C99ã®æ§æã«è¿ã¥ãããå¤æ´
-#ï¼èª­ããªããããã¼ãã¡ã¤ã«ããã£ãããï¼
+# 2019/3/28 長島 下記のC99の構文に近づくよう変更
+#（読めないヘッダーファイルがあったため）
 # http://www.quut.com/c/ANSI-C-grammar-y-1999.html
-# å
-ã
-ã®ã³ã¡ã³ãã¨åããªããªã£ã¦ãã¾ã
+# 元々のコメントと合わなくなっています
 
 primary_expression
 		: namespace_identifier
 		{ result = [ :IDENTIFIER, val[0] ] }     #1ok
-#        : IDENTIFIER	# mikan namespace ã¸ã®å¯¾å¿
+#        : IDENTIFIER	# mikan namespace への対応
 #		{ result = [ :IDENTIFIER, val[0] ] }
 #        | TRUE
@@ -103,5 +84,5 @@
 		{ result << val[1] }
 
-# é¢æ°å¼ã³åºãã¨å¾ç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 関数呼び出しと後置インクリメント、デクリメント演算子がない
 postfix_expression
 		: primary_expression
@@ -115,5 +96,5 @@
 		| postfix_expression '->' IDENTIFIER
 		{ result = [ :OP_REF, val[0], val[2] ] }
-		| postfix_expression '++'	{ result = val[0] }   # ++, -- ã¯ç¡è¦ãã
+		| postfix_expression '++'	{ result = val[0] }   # ++, -- は無視する
 		| postfix_expression '--'	{ result = val[0] }
 		| '(' type_name ')' '{' initializer_list '}'
@@ -125,5 +106,5 @@
 
 
-# åç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 前置インクリメント、デクリメント演算子がない
 unary_expression
 		: postfix_expression
@@ -134,5 +115,5 @@
 		| SIZEOF '(' type_name ')'
 		{ result = [ :OP_SIZEOF_TYPE, val[1] ] }
-		| '++' unary_expression			{ result = val[1] }   # ++, -- ã¯ç¡è¦ãã
+		| '++' unary_expression			{ result = val[1] }   # ++, -- は無視する
 		| '--' unary_expression			{ result = val[1] }
 
@@ -246,5 +227,5 @@
 		| expression ',' assignment_expression
 		{
-			result = Expression.new( val[2] )    # ',' ã®å¾ããæ¡ç¨
+			result = Expression.new( val[2] )    # ',' の後ろを採用
 		}
 
@@ -264,24 +245,24 @@
 
 # Types
-##########################  å®£è¨  ##########################
-# å®£è¨ãK&Rã¨ä¸é¨ç°ãªã
-
-# declarationã¯ã»ã«ã®å±æ§ã§ä½¿ããã
-# K&Rã¨ã®éã: storage classãæå®ã§ããªããåãçç¥ã§ããªã
+##########################  宣言  ##########################
+# 宣言もK&Rと一部異なる
+
+# declarationはセルの属性で使われる
+# K&Rとの違い: storage classが指定できない、型が省略できない
 declaration
 		: declaration_specifiers init_declarator_list ';'
 #        : specifier_qualifier_list init_declarator_list ';'
 
-# declaration_specifiersã¯é¢æ°ã®ãã©ã¡ã¼ã¿ã§ä½¿ããããã
-# specifier_qualifier_listã§ååãããããªã
+# declaration_specifiersは関数のパラメータで使われるが、
+# specifier_qualifier_listで十分かもしれない
 
 declaration_specifiers
 		: storage_class_specifier
 		{
-			result = CIntType.new( -3 )    # storage class ã¯ç¡è¦
+			result = CIntType.new( -3 )    # storage class は無視
 		}
 		| storage_class_specifier declaration_specifiers
 		{
-			result = val[1]                # storage class ã¯ç¡è¦
+			result = val[1]                # storage class は無視
 		}
 		| type_specifier
@@ -350,13 +331,13 @@
 		{ set_no_type_name true; result = CBoolType.new }
 		| struct_specifier
-		{ set_no_type_name true; result = val[0] } # set_no_type_name true ã¯ struct_tag ã§ãå¼ã°ãã
+		{ set_no_type_name true; result = val[0] } # set_no_type_name true は struct_tag でも呼ばれる
 		| union_specifier
-		{ set_no_type_name true; result = CVoidType.new }  # void ãå®£è¨ãããã¨ãã
+		{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
 		| enum_specifier
-		{ set_no_type_name true; result = CVoidType.new }  # void ãå®£è¨ãããã¨ãã
+		{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
 		| TYPE_NAME
 		{ set_no_type_name true; result = CDefinedType.new( val[0].val ) }
 
-# mikan K&Rã®struct_or_union_specifierã«ç¸å½ããããunionã¯ä½¿ããªã, bit field ã«ãå¯¾å¿ããªã
+# mikan K&Rのstruct_or_union_specifierに相当するが、unionは使えない, bit field にも対応しない
 struct_specifier		# mikan
 #        : STRUCT struct_tag '{'
@@ -379,8 +360,6 @@
 			result = val[1]
 		}
-#        | STRUCT struct_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
-		| struct_term struct_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+#        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
+		| struct_term struct_tag   # mikan struct_tag は namespace 対応が必要
 		{
 			StructType.set_define( false )
@@ -403,5 +382,5 @@
 		}
 
-# ãã¤ã³ã¿ä¿®é£¾å­ãè¿½å 
+# ポインタ修飾子を追加
 struct_declaration
 		: declaration_specifiers struct_declarator_list ';'
@@ -416,5 +395,5 @@
 			result = val[1]
 		}
-		# ããããã£ã¼ã«ããèª­ã¿é£ã°ã
+		# ビットフィールドを読み飛ばし
 		| declaration_specifiers struct_declarator_list ':' constant_expression ';'
 		{
@@ -427,11 +406,11 @@
 			result = val[1]
 		}
-		| union_specifier ';'                       # ç¡å
-		| struct_specifier ';'                       # ç¡å
-
-
-
-# K&Rã®specifier_qualifier_listã¨åã
-# ååãã¾ãããããã£ãã®ã§type_ãä»ãã
+		| union_specifier ';'                       # 無名
+		| struct_specifier ';'                       # 無名
+
+
+
+# K&Rのspecifier_qualifier_listと同じ
+# 名前がまぎらわしかったのでtype_を付けた
 specifier_qualifier_list
 		: type_specifier specifier_qualifier_list
@@ -457,5 +436,5 @@
 		{ result << val[2] }
 
-# ããããã£ã¼ã«ãã¯ä½¿ããªã
+# ビットフィールドは使えない
 struct_declarator
 		: declarator
@@ -466,10 +445,8 @@
 #        : UNION union_tag '{' union_declaration_list '}'
 #        | UNION '{' union_declaration_list '}'
-#        | UNION union_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+#        | UNION union_tag   # mikan struct_tag は namespace 対応が必要
 		: union_term union_tag '{' union_declaration_list '}'
 		| union_term '{' union_declaration_list '}'
-		| union_term union_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+		| union_term union_tag   # mikan struct_tag は namespace 対応が必要
 
 union_term
@@ -485,6 +462,6 @@
 union_declaration
 		: declaration_specifiers union_declarator_list ';'
-		| union_specifier ';'                       # ç¡å
-		| struct_specifier ';'                      # ç¡å
+		| union_specifier ';'                       # 無名
+		| struct_specifier ';'                      # 無名
 
 union_declarator_list
@@ -535,5 +512,5 @@
 		}
 		| direct_declarator
-		| pointer TYPE_NAME     # é¢æ°ãã¤ã³ã¿ã® typedef ãäºéå®ç¾©ã®å ´å
+		| pointer TYPE_NAME     # 関数ポインタの typedef が二重定義の場合
 		{
 			result = Decl.new( val[1].val )
@@ -562,6 +539,5 @@
 			result = val[0]
 		}
-		| direct_declarator '(' identifier_list ')'  # ããã¯ä½ã®ããã«å¿
-è¦ï¼ 060211
+		| direct_declarator '(' identifier_list ')'  # これは何のために必要？ 060211
 		| direct_declarator '(' ')'
 		{
@@ -599,5 +575,5 @@
 		: parameter_list
 		| parameter_list ',' '.' '.' '.'
-		# mikan å¯å¤é·ãã©ã¡ã¼ã¿,  ... ã®éã®ã¹ãã¼ã¹ãè¨±ãããï¼ææãï¼
+		# mikan 可変長パラメータ,  ... の間のスペースが許される（手抜き）
 
 parameter_list
@@ -607,9 +583,9 @@
 #		{
 #			val[0].add_param( val[2] )
-#			# result = val[0] ä¸è¦
+#			# result = val[0] 不要
 #		}
 
 
-# ãã©ã¡ã¼ã¿ä¿®é£¾å­ãè¿½å 
+# パラメータ修飾子を追加
 parameter_declaration
 		: declaration_specifiers declarator
@@ -620,6 +596,6 @@
 #		}
 
-	# ä»¥ä¸ã¯ã¨ã©ã¼ã¨ãã
-#        | declaration_specifiers	# ä»®å¼æ°ãªãã¯ãã¨ããããæ±ããªã 060210
+	# 以下はエラーとする
+#        | declaration_specifiers	# 仮引数なしは、とりあえず扱わない 060210
 #		{
 #			unless val[0].kind_of?( VoidType ) then
@@ -628,9 +604,9 @@
 #			result = nil
 #		}
-		| declaration_specifiers abstract_declarator	# ä»®å¼æ°ãªã
-		| declaration_specifiers						# ä»®å¼æ°ãªã
-
-
-identifier_list       # 060211  ä¸ç¨ã«ãªã£ã
+		| declaration_specifiers abstract_declarator	# 仮引数なし
+		| declaration_specifiers						# 仮引数なし
+
+
+identifier_list       # 060211  不用になった
         : IDENTIFIER
         | identifier_list ',' IDENTIFIER
@@ -662,5 +638,5 @@
 		| direct_abstract_declarator '(' parameter_type_list ')'
 
-# assignment_expressionãconstant_expressionã«å¤æ´
+# assignment_expressionをconstant_expressionに変更
 initializer			# mikan
 		: assignment_expression
@@ -685,7 +661,7 @@
 
 
-##########################  ããããã¯CDLç¬èª  ##########################
-
-#ãããã¬ãã«ã®æ§æè¦å
+##########################  ここからはCDL独自  ##########################
+
+#トップレベルの構文規則
 C_parser
 		:
@@ -703,5 +679,5 @@
 		| declaration
 		| ';'
-		| error   # ã¨ã©ã¼åå¾©ãã¤ã³ã
+		| error   # エラー回復ポイント
 
 typedef
@@ -792,9 +768,7 @@
 		: _ASM {
 		while true
-			# ';' ãè¡¨ããã¾ã§ããã¼ã¯ã³ãèª­ã¿é£ã°ãã
-			# gcc ã®æ§ææ¡å¼µã«å¯¾å¿ãã¹ãã ããåç´ãªå®è£
-ã¨ãã¦ã';' ã¾ã§èª­ã¿é£ã°ãã
-			# ãã¼ã¯ã³åä½ã§èª­ã¿é£ã°ãã¦ããã®ã§ãæå­åãã³ã¡ã³ãå
-ã® ';' ã¯å¯¾è±¡ã«ãªããªãã
+			# ';' が表れるまで、トークンを読み飛ばす。
+			# gcc の構文拡張に対応すべきだが、単純な実装として、';' まで読み飛ばす。
+			# トークン単位で読み飛ばしているので、文字列やコメント内の ';' は対象にならない。
 			token = next_token
 			if token[1].val == ";"
@@ -906,9 +880,8 @@
 #		b_asm   = false
 
-		# euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+		# euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
 		TECS_LANG::set_kcode_binary
 
-		# 800U, 0xffLL ãªã© (æ´æ°ãªãã©ã«ã«å
-±éã®ä¿®é£¾å­)
+		# 800U, 0xffLL など (整数リテラルに共通の修飾子)
 		integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
 
@@ -925,5 +898,5 @@
 				if comment
 					case line
-					# ã³ã¡ã³ãçµäº
+					# コメント終了
 					when /\A\*\//
 						comment = false
@@ -933,36 +906,36 @@
 				else
 					case line
-					# ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+					# 空白、プリプロセスディレクティブ
 					when /\A\s+/
 						;
-					# è­å¥å­
+					# 識別子
 					when /\A[a-zA-Z_]\w*/
 						word = $&
 						@q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-					# 16 é²æ°å®æ°
+					# 16 進数定数
 					when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
 						@q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-					# 8 é²æ°å®æ°
+					# 8 進数定数
 					when /\A0[0-7]+#{integer_qualifier}/
 						@q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-					# æµ®åå°æ°å®æ°
+					# 浮動小数定数
 					when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
 						@q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-					# æ´æ°å®æ°
+					# 整数定数
 					when /\A\d+#{integer_qualifier}/
 					# when /\A\d+/
 						@q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-					# æå­
+					# 文字
 					when /\A'(?:[^'\\]|\\.)'/
 						@q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-					# æå­å
-#					"#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+					# 文字列
+#					"#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #					when /\A"(?:[^"\\]+|\\.)*"/
-					when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+					when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
 						@q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-					# è¡ã³ã¡ã³ã
+					# 行コメント
 					when /\A\/\/.*$/
-						# èª­ã¿é£ã°ãã ã
-					# ã³ã¡ã³ãéå§
+						# 読み飛ばすだけ
+					# コメント開始
 					when /\A\/\*/
 						comment = true
@@ -995,5 +968,5 @@
 	}
 
-	# çµäºã®å°
+	# 終了の印
 	@q << nil
 
@@ -1022,5 +995,5 @@
 			end
 
-			# TYPE_NAME ãã¼ã¯ã³ã¸ç½®ãæã
+			# TYPE_NAME トークンへ置き換え
 			if @b_no_type_name == false
 				if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
@@ -1031,5 +1004,5 @@
 			end
 
-			if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+			if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
 				locale = @@current_locale[@@generator_nest]
 				if token then
@@ -1061,5 +1034,5 @@
 	@@n_info = 0
 
-	# ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
 	def self.error( msg )
 		@@n_error += 1
@@ -1073,5 +1046,5 @@
 	end
 
-	# ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+	# このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
 	def self.warning( msg )
 		@@n_warning += 1
@@ -1080,5 +1053,5 @@
 	end
 
-	# ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯
+	# このメソッドは構文解析、意味解析からのみ呼出し可
 	def self.info( msg )
 		@@n_info += 1
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb	(revision 389)
@@ -95,6 +95,5 @@
   }
 
-  # æå®å­ '[]' å
-ã§ã®ã¿ä½¿ç¨ã§ããã­ã¼ã¯ã¼ã
+  # 指定子 '[]' 内でのみ使用できるキーワード
   RESERVED2 = {
     # specifier
@@ -113,5 +112,5 @@
     # port (entry)
     'inline' => :INLINE,
-    'ref_desc' => :REF_DESC,   # call ãå¯
+    'ref_desc' => :REF_DESC,   # call も可
 
     # port (call)
@@ -157,32 +156,32 @@
   }
 
-  # åå¸°çãªãã¼ãµã®ããã®ã¹ã¿ãã¯
+  # 再帰的なパーサのためのスタック
   @@generator_nest = -1
   @@generator_stack = []
   @@current_locale = []
 
-  # import_C ä¸­ã§ãã
+  # import_C 中である
   @@import_C = false
 
-  # ãã¹ã¦ã®æ§æè§£æãå®äºãã
+  # すべての構文解析が完了した
   @@b_end_all_parse = false
 
-  # tag ãªã struct
+  # tag なし struct
   @@no_struct_tag_num = 0
 
   def self.parse( file_name, plugin = nil, b_reuse = false )
-    # ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ(å¥ãã¼ãµã§èª­ã¿è¾¼ã)
+    # パーサインスタンスを生成(別パーサで読み込む)
     parser = Generator.new
 
-    # plugin ãã import ããã¦ããå ´åã® plugin è¨­å®
+    # plugin から import されている場合の plugin 設定
     parser.set_plugin plugin
 
-    # reuse ãã©ã°ãè¨­å®
+    # reuse フラグを設定
     parser.set_reuse b_reuse
 
-    # cdl ããã¼ã¹
+    # cdl をパース
     parser.parse( [file_name] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     parser.finalize
   end
@@ -204,5 +203,5 @@
   def self.get_plugin
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].get_plugin
     else
@@ -221,5 +220,5 @@
   def self.is_reuse?
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].is_reuse?
     else
@@ -251,5 +250,5 @@
       b_in_string = false
 
-      # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
       TECS_LANG::set_kcode_binary
 
@@ -261,5 +260,5 @@
           TECSIO.foreach(file) {|line|
             col = 1
-#            line.rstrip!         æ¹è¡å«ãæå­åãæ±ãããã«ãªã£ãã®ã§ãããã§ç©ºç½ãåãé¤ããªããªã£ã
+#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
 
             until line.empty?
@@ -267,11 +266,10 @@
               if b_in_comment
                 case line
-                  # ã³ã¡ã³ãçµäº
+                  # コメント終了
                 when /\A\*\//
                   b_in_comment = false
                 when /\A./
                   ;
-                when /\s+/     # line.rstrip! ãæ­¢ãããã \n ãªã©ã®ç©ºç½æå­ã¨ã¾ã£ã¡ããã«ã¼ã«ãå¿
-è¦ã«ãªã£ã
+                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
                   ;
                 end
@@ -281,9 +279,9 @@
                   @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
                   b_in_string = false
-                elsif line =~ /\A.*\\\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
                   string += $&
-                elsif line =~ /\A.*\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
                   string += line
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå)
+                  # この位置では error メソッドは使えない (token 読出し前)
                   puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
                   @@n_error += 1
@@ -291,58 +289,58 @@
               else
                 case line
-                # ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+                # 空白、プリプロセスディレクティブ
                 when /\A\s+/
                   ;
-                # è­å¥å­
+                # 識別子
                 when /\A[a-zA-Z_]\w*/
                   word = $&
                   @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-                # 16 é²æ°å®æ°
+                # 16 進数定数
                 when /\A0x[0-9A-Fa-f]+/
                   @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-                # 8 é²æ°å®æ°
+                # 8 進数定数
                 when /\A0[0-7]+/
                   @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-                # æµ®åå°æ°å®æ°
+                # 浮動小数定数
                 when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
                   @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-                # æ´æ°å®æ°
+                # 整数定数
                 when /\A\d+/
                   @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-                # æå­å®æ°
+                # 文字定数
                 when /\A'(?:[^'\\]|\\.)'/
                   @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å
-#                "#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+                # 文字列
+#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #                when /\A"(?:[^"\\]+|\\.)*"/
-                when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
                   @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å (æ¹è¡ãã)
+                # 文字列 (改行あり)
                 when /\A"(?:[^"\\]|\\.)*\\\n$/
                   string = $&
                   b_in_string = true
-                # æå­å (æ¹è¡ãã, escape ãªã)
+                # 文字列 (改行あり, escape なし)
                 when /\A("(?:[^"\\]|\e\.)*)\n$/
                   string = $1 + "\\\n"
                   b_in_string = true
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå) # mikan cdl_error ã§ã¯ãªã
+                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
                   puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
                   @@n_error += 1
-                # å±±æ¬å¼§ã§å²ã¾ããæå­å
+                # 山括弧で囲まれた文字列
                 # when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
-                when /\A<(?:[^>\\]|\\.)*>/   # ããã¯ãã¾ãè¡ãããã 
+                when /\A<(?:[^>\\]|\\.)*>/   # これはうまく行くようだ
                   @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # è¡ã³ã¡ã³ã
+                # 行コメント
                 when /\A\/\/.*$/
-                  # èª­ã¿é£ã°ãã ã
-                # ã³ã¡ã³ãéå§
+                  # 読み飛ばすだけ
+                # コメント開始
                 when /\A\/\*/
                   b_in_comment = true
-                # '>>', '<<' ãªã©
+                # '>>', '<<' など
                 when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
                   @q << [$&, Token.new($&, file, lineno, col)]
                 when /\A::/, /\A=>/, /\A<=/, /\A>=/
                   @q << [$&, Token.new($&, file, lineno, col)]
-                # '(', ')' ãªã©ä¸æå­ã®è¨å·ãã¾ãã¯æªç¥ã®è¨å·
+                # '(', ')' など一文字の記号、または未知の記号
                 when /\A./
                   @q << [$&, Token.new($&, file, lineno, col)]
@@ -368,5 +366,5 @@
       }
 
-      # çµäºã®å°
+      # 終了の印
       @q << nil
 
@@ -388,15 +386,14 @@
 
       if token[0] == :IDENTIFIER then
-        # TYPE_NAME ãã¼ã¯ã³ã¸ç½®æã
+        # TYPE_NAME トークンへ置換え
         if Namespace.is_typename?( token[1].val ) then
           token[0] = :TYPE_NAME
         elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
-          # æå®å­ã­ã¼ã¯ã¼ãï¼ '[', ']' å
-ã§ã®ã¿æå¹)
+          # 指定子キーワード（ '[', ']' 内でのみ有効)
           token[0] = RESERVED2[ token[1].val.to_s ]
         end
       end
 
-      if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
         locale = @@current_locale[@@generator_nest]
         if token then
@@ -430,5 +427,5 @@
   @@n_info = 0
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
   def self.error( msg, *arg )
     locale = nil
@@ -440,5 +437,5 @@
 
     msg = TECSMsg.get_error_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -448,13 +445,13 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¨ã©ã¼ï¼
+    # import_C の中でのエラー？
     if @@import_C then
       C_parser.error( msg )
     else
 
-      # Node ã®è¨æ¶ãã ä½ç½® (locale) ãä½¿ç¨ããå ´åãå¤æ´ä»¥åã«æ¯ã¹ã
-      # åé¡çºçç®æã¨ç°ãªãä½ç½®ã«ã¨ã©ã¼ãåºããããæ§æè§£æä¸­ã®ã¨ã©ã¼
-      # ã¯ãè§£æä¸­ã®ä½ç½®ãåºåããï¼(new_XXX ã§ owner ãå­è¦ç´ ã®ãã§ã
-      # ã¯ãããã¨ owner ã®è¡çªå·ãåºã¦ãã¾ãç¹ã§ããããçãã¦ãã)
+      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
+      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
+      # は、解析中の位置を出力する．(new_XXX で owner が子要素のチェッ
+      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
 
       if @@b_end_all_parse == false || locale == nil then
@@ -469,5 +466,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
   def self.warning( msg, *arg )
     locale = nil
@@ -479,5 +476,5 @@
 
     msg = TECSMsg.get_warning_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -487,5 +484,5 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¦ã©ã¼ãã³ã°ï¼
+    # import_C の中でのウォーニング？
     if @@import_C then
       C_parser.warning( msg )
@@ -502,5 +499,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯
+  # このメソッドは構文解析、意味解析からのみ呼出し可
   def self.info( msg, *arg )
     locale = nil
@@ -512,5 +509,5 @@
 
     msg = TECSMsg.get_info_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -520,5 +517,5 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¦ã©ã¼ãã³ã°ï¼
+    # import_C の中でのウォーニング？
     if @@import_C then
       C_parser.info( msg )
@@ -555,5 +552,5 @@
   end
 
-  #===  '[' specifier å§ã
+  #===  '[' specifier 始め
   def set_in_specifier
     # p "set_in_specifier"
@@ -561,5 +558,5 @@
   end
 
-  #=== ']' specifier çµãã
+  #=== ']' specifier 終わり
   def unset_in_specifier
     # p "unset_in_specifier"
@@ -567,6 +564,5 @@
   end
 
-  # statement_specifier ã¯æ§æè§£ééä¸­ã§åç
-§ããããã
+  # statement_specifier は構文解釈途中で参照したいため
   @@statement_specifier_stack = []
   def self.add_statement_specifier( ss )
@@ -585,5 +581,5 @@
   end
 
-  #=== ãã¹ã¦ã®æ§æè§£æãå®äºãããã¨ãå ±å
+  #=== すべての構文解析が完了したことを報告
   def self.end_all_parse
     @@b_end_all_parse = true
@@ -2369,5 +2365,5 @@
 module_eval(<<'.,.,', 'bnf.y.rb', 76)
   def _reduce_13(val, _values, result)
-    			# é£æ¥ããæå­åã1ã¤ã®æå­åã«ã¾ã¨ãã
+    			# 連接した文字列を1つの文字列にまとめる
 			str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
 			result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
@@ -2947,6 +2943,5 @@
 module_eval(<<'.,.,', 'bnf.y.rb', 379)
   def _reduce_104(val, _values, result)
-    			# tag ãç¡ãå ´åãå
-é¨åãä¸ãã
+    			# tag が無い場合、内部名を与える
 			result = StructType.new( :"TAG__#{@@no_struct_tag_num}__" )
 			@@no_struct_tag_num += 1
@@ -3267,5 +3262,5 @@
   def _reduce_153(val, _values, result)
     			val[0].add_param( val[2] )
-			# result = val[0] ä¸è¦
+			# result = val[0] 不要
 		
     result
@@ -3422,5 +3417,5 @@
 				result = val[1]
 			else
-				# ã¨ã©ã¼ï¼ä»®ã§ val[0] ãè¿ã
+				# エラー：仮で val[0] を返す
 				result = val[0]
 			end
@@ -3568,7 +3563,7 @@
     			obj = val[3]
 			if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
-                                # cell, signature ä»¥å¤ã¯ãæå®å­ãç½®ããªã
+                                # cell, signature 以外は、指定子を置けない
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1009 unexpected specifier"  )
 			end
@@ -3941,6 +3936,5 @@
 				val[1].check
 			else
-				# mikan é¢æ°ã®é
-åãä»¥ä¸ã®ã¡ãã»ã¼ã¸ã«ãªã
+				# mikan 関数の配列も以下のメッセージになる
 				Generator.error( "G1010 Not function"  )
 				result = nil
@@ -3997,8 +3991,8 @@
   def _reduce_265(val, _values, result)
     			if val[3].kind_of? Port then
-				val[3].set_specifier val[1]  # è¨­å®é åºãã
+				val[3].set_specifier val[1]  # 設定順序あり
 				Celltype.new_port( val[3] )
 			else
-				# Port ä»¥å¤ã§ã¯æå®å­ã¯ã¨ã©ã¼
+				# Port 以外では指定子はエラー
 				Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
 			end
@@ -4205,5 +4199,5 @@
   def _reduce_298(val, _values, result)
     			val[3].each{ |i|       # i:Decl
-				i.set_kind( :ATTRIBUTE )   # è¨­å®é åºãã
+				i.set_kind( :ATTRIBUTE )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -4287,5 +4281,5 @@
   def _reduce_309(val, _values, result)
     			val[3].each{ |i|       # i:Decl
-				i.set_kind( :VAR )   # è¨­å®é åºãã
+				i.set_kind( :VAR )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -4568,6 +4562,5 @@
   def _reduce_354(val, _values, result)
     			if val[0].kind_of?( Port ) then
-				CompositeCelltype.new_port( val[0] )   # é
-å»¶ãã¦ç»é²
+				CompositeCelltype.new_port( val[0] )   # 遅延して登録
 			end
 		
@@ -4579,15 +4572,13 @@
   def _reduce_355(val, _values, result)
     			if val[3].kind_of?( Port ) then
-				# port ä»¥å¤ val[3] ã«æå¹ãªå¤ãå
-¥ã£ã¦ããªãã®ã§ãä»¥ä¸ã®ã¡ã½ãããé©ç¨ã§ããªã
-				# ç¾ç¶ port, cell ä»¥å¤ã¯æå®å­ãåãä»ããªã
-				# ï¼ãããå°æ¥ä»ã®æãæå®å­ãåãä»ããå¯è½æ§ãããã®ã§ããã®ä½ç½®ã«è¨è¿°ããï¼
+				# port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
+				# 現状 port, cell 以外は指定子を受け付けない
+				# （しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する）
 				val[3].set_specifier( Generator.get_statement_specifier )
-				CompositeCelltype.new_port( val[3] )   # é
-å»¶ãã¦ç»é² (set_specifier å¾)
+				CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
 			elsif val[3].kind_of?( Cell ) then
-				# Cell.end_of_parse ã«ã¦è¨­å®
+				# Cell.end_of_parse にて設定
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1013 unexpected specifier"  )
 			end
@@ -4877,5 +4868,5 @@
 			if obj.kind_of?( Cell ) then
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G9999 unexpected specifier"  )
 			end
@@ -5102,6 +5093,5 @@
 
 
-# ãã¡ã¤ã« => INCLUDE("header")ã®é
-å
+# ファイル => INCLUDE("header")の配列
 Include = Hash.new {|hash, key| hash[key] = []}
 
@@ -5157,21 +5147,18 @@
 
 #= TECSIO
-#  Ruby2.0(1.9) å¯¾å¿ã«ä¼´ãå°å
-¥ããã¯ã©ã¹
-#  SJIS ä»¥å¤ã§ã¯ãASCII-8BIT ã¨ãã¦å
-¥åãã
+#  Ruby2.0(1.9) 対応に伴い導入したクラス
+#  SJIS 以外では、ASCII-8BIT として入力する
 class TECSIO
-  def self.foreach(file) # ãã­ãã¯å¼æ° { |line| }
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
+  def self.foreach(file) # ブロック引数 { |line| }
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     if $b_no_kcode then
 	  msg = "E".encode $Ruby19_File_Encode
       if( $Ruby19_File_Encode == "Shift_JIS" )
 
-        # Shift JIS ã¯ããã£ãã Windows-31J ã¨ãã¦èª­ã¿è¾¼ã¾ããShift_JIS ã«å¤æãããï¼
-        # ã³ã¡ã³ãç­ã«å«ã¾ãã SJIS ã«ä¸é©åãªæå­ã³ã¼ãã¯ '?' ã¾ãã¯ REPLACEMENT CHARACTER ã«å¤æãããï¼
-        # EUC ã UTF-8 ã§è¨è¿°ããã CDL ãæ··å¨ãã¦ãã¦ããRuby ä¾å¤ãçºçãããã¨ãªãå¦çãé²ãããã¨ãã§ããï¼
-        # æå­ã³ã¼ãæå®ã SJIS ã§ãã£ã¦ãæå­åãªãã©ã«ã®ä¸­ã«ãæå­ã³ã¼ããSJIS ä»¥å¤ã®é ASCII ãå«ã¾ãã¦ããå ´åã
-        # Ruby 1.8 ã® tecsgen ã§ã¯æå­ã³ã¼ãæå®ã«å½±é¿ãªãå¦çããããã®ããRuby 1.9 ä»¥éã§ã¯ '?' ã«ç½®ãæããå¯è½æ§ãããï¼
+        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる．
+        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される．
+        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる．
+        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
+        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある．
 
         mode = "r:Windows-31J"
@@ -5197,17 +5184,17 @@
   end
 
-  #=== æå­ã³ã¼ããç¸éããå ´åä¸è´ããã
-  # msg ã¨ str ã®æå­ã³ã¼ããç¸éããå ´åãstr ã msg ã®æå­ã³ã¼ãã«å¤æãã
-  # å¤æä¸å¯ã®æå­ã³ã¼ãã¯ '?' (utf-8 ã®å ´å U+FFFD (REPLACEMENT CHARACTER )) ã«å¤æ
+  #=== 文字コードが相違する場合一致させる
+  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
+  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
   #
-  # ãã®ã¡ã½ããã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸åºåã§ãä½¿ç¨ããã¦ãããã¨ã«æ³¨æï¼
+  # このメソッドは、エラーメッセージ出力でも使用されていることに注意．
   #
   #msg_enc::Encode | String
   def self.str_code_convert( msg, str )
     if $b_no_kcode == false then
-      return str                          # Ruby V1.8 ã¾ã§
+      return str                          # Ruby V1.8 まで
     end
     if msg.encoding != str.encoding then
-      option = { :invalid => :replace, :undef => :replace }   # ä¾å¤ãçºçãããã'?' ã«å¤æãã(utf-8 ã¯ 0xfffd)
+      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
       # return str.encode( msg.encoding, option )
       str = str.encode( "utf-8", option )
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -55,14 +40,12 @@
 class Generator
 rule
-# ãããã¬ãã«ã®æ§æè¦ç´ ã¯component_description
+# トップレベルの構文要素はcomponent_description
 all: component_description
 
 # Expr
-##########################  å¼  ##########################
-# K&Rã®ææ³(ãã­ã°ã©ãã³ã°è¨èªC ç¬¬2ç ä»é²)ã¨ä¸é¨ç°ãªã
-# argument_expression_list(é¢æ°å¼æ°), assignment_expression(ä»£å
-¥)ããªã
-# å¼ã® result ã¯ããã¹ã¦é
-åã§ç¬¬ä¸è¦ç´ ãè­å¥ã·ã³ãã«ãç¬¬äºè¦ç´ ä»¥ä¸ãå¼æ°
+##########################  式  ##########################
+# K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
+# argument_expression_list(関数引数), assignment_expression(代入)がない
+# 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
 
 primary_expression
@@ -92,10 +75,10 @@
         | string_literal_list STRING_LITERAL
 		{
-			# é£æ¥ããæå­åã1ã¤ã®æå­åã«ã¾ã¨ãã
+			# 連接した文字列を1つの文字列にまとめる
 			str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
 			result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
 		}
 
-# é¢æ°å¼ã³åºãã¨å¾ç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 関数呼び出しと後置インクリメント、デクリメント演算子がない
 postfix_expression
         : primary_expression
@@ -107,5 +90,5 @@
 		{ result = [ :OP_REF, val[0], val[2] ] }
 
-# åç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 前置インクリメント、デクリメント演算子がない
 unary_expression
         : postfix_expression
@@ -202,5 +185,5 @@
 
 
-# ã³ã³ãæ¼ç®å­ãä½¿ããªã
+# コンマ演算子が使えない
 expression
         : conditional_expression
@@ -227,9 +210,9 @@
 
 # Types
-##########################  å®£è¨  ##########################
-# å®£è¨ãK&Rã¨ä¸é¨ç°ãªã
-
-# declarationã¯ã»ã«ã®å±æ§ã§ä½¿ããã
-# K&Rã¨ã®éã: storage classãæå®ã§ããªããåãçç¥ã§ããªã
+##########################  宣言  ##########################
+# 宣言もK&Rと一部異なる
+
+# declarationはセルの属性で使われる
+# K&Rとの違い: storage classが指定できない、型が省略できない
 declaration
         : type_specifier_qualifier_list init_declarator_list ';'
@@ -241,12 +224,10 @@
 		}
 
-# declaration_specifiersã¯é¢æ°ã®ãã©ã¡ã¼ã¿ã§ä½¿ããããã
-# type_specifier_qualifier_listã§ååãããããªã
+# declaration_specifiersは関数のパラメータで使われるが、
+# type_specifier_qualifier_listで十分かもしれない
 # Oyama
-# const, volatile ã¯åç¬ã§åã«ãªããªãã®ã§å¤å½¢
-# const ã¨ volatile ãåå±
-ãããã¨ã¯ãªãã®ã§ãç¹°è¿ãæå®ã§ããªãããã«ãã
-# type_specifier ãç¹°è¿ãæå®ã§ããå¿
-è¦ã¯ãªã (singed ãªã©åç¬ã§åã«ã¯ãªããªã)
+# const, volatile は単独で型にならないので変形
+# const と volatile が同居することはないので、繰返し指定できないようにした
+# type_specifier も繰返し指定できる必要はない (singed など単独で型にはならない)
 declaration_specifiers
         : type_specifier
@@ -268,7 +249,7 @@
 		{ val[0].set_initializer( val[2] ) }
 
-# INT8ããä¸ã¯K&Rã«ãªã
+# INT8から下はK&Rにない
 # Oyama
-# signed, unsigned ã¯åç¬ã§åã«ãªããªãã®ã§ãæ§æè¦ç´ ã¨ãã¦åé¢
+# signed, unsigned は単独で型にならないので、構文要素として分離
 type_specifier
         : VOID	{ result = VoidType.new }
@@ -278,5 +259,5 @@
         | enum_specifier
         | TYPE_NAME	{ result = DefinedType.new( val[0].val ) }
-#        | IDENTIFIER	{ result = DefinedType.new( val[0].val ) }   # reduce/reduce conflict ãèµ·ãã£ã¦ãã¾ã
+#        | IDENTIFIER	{ result = DefinedType.new( val[0].val ) }   # reduce/reduce conflict が起こってしまう
         | sign_int_type
         | char_type
@@ -373,9 +354,9 @@
 		}
 
-sign    # TECS ã§ã¯ signed, unsigned åç¬ã§ã¯åã«ã§ããªã
+sign    # TECS では signed, unsigned 単独では型にできない
         : SIGNED	{ result = :SIGNED }
         | UNSIGNED	{ result = :UNSIGNED }
 
-# result[0] :CHAR ãªã©ã®ãã¼ã¯ã³ãresult[1] :CONST, :VOLATILE ãªã©
+# result[0] :CHAR などのトークン、result[1] :CONST, :VOLATILE など
 sign_int_type
         : sign int_type
@@ -386,5 +367,5 @@
         | int_type
 
-# K&Rã®struct_or_union_specifierã«ç¸å½ããããunionã¯ä½¿ããªã
+# K&Rのstruct_or_union_specifierに相当するが、unionは使えない
 struct_specifier		# mikan
         : STRUCT struct_tag '{'
@@ -397,6 +378,5 @@
         | STRUCT
 		{
-			# tag ãç¡ãå ´åãå
-é¨åãä¸ãã
+			# tag が無い場合、内部名を与える
 			result = StructType.new( :"TAG__#{@@no_struct_tag_num}__" )
 			@@no_struct_tag_num += 1
@@ -408,6 +388,5 @@
 			result = val[1]
 		}
-        | STRUCT struct_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
 		{
 			StructType.set_define( false )
@@ -424,5 +403,5 @@
 		{ result = StructType.new( val[0].val ) }
 
-# ãã¤ã³ã¿ä¿®é£¾å­ãè¿½å 
+# ポインタ修飾子を追加
 struct_declaration
         :                                type_specifier_qualifier_list struct_declarator_list ';'
@@ -459,8 +438,8 @@
 
 
-# K&Rã®specifier_qualifier_listã¨åã
-# ååãã¾ãããããã£ãã®ã§type_ãä»ãã
+# K&Rのspecifier_qualifier_listと同じ
+# 名前がまぎらわしかったのでtype_を付けた
 type_specifier_qualifier_list
-# Oyama type_specifier ãç¹°ãè¿ãã¦æå®ãããã¨ã¯ãªããªã£ã (sign_int_type ã¨ããããï¼
+# Oyama type_specifier を繰り返して指定することはなくなった (sign_int_type としたため）
 #        : type_specifier type_specifier_qualifier_list
         : type_specifier
@@ -470,5 +449,5 @@
 			result = val[1]
 		}
-# mikan Oyama type_qualifier ã ãã§ã¯åæå®ã«ãªããªã : æ§æã¨ã©ã¼ã¨ãããããæå³ã¨ã©ã¼ã¨ããæ¹ãè¦ªå
+# mikan Oyama type_qualifier だけでは型指定にならない : 構文エラーとするより、意味エラーとした方が親切
 #        | type_qualifier
 
@@ -480,9 +459,9 @@
 		{ result << val[2] }
 
-# ããããã£ã¼ã«ãã¯ä½¿ããªã
+# ビットフィールドは使えない
 struct_declarator
         : declarator
 
-# enumã®ç¨®é¡ãè¿½å 
+# enumの種類を追加
 enum_specifier		# mikan
         : enum_type            '{' enumerator_list '}'
@@ -538,6 +517,5 @@
 			result = val[0]
 		}
-#        | direct_declarator '(' identifier_list ')'  # ããã¯ä½ã®ããã«å¿
-è¦ï¼ 060211
+#        | direct_declarator '(' identifier_list ')'  # これは何のために必要？ 060211
         | direct_declarator '(' ')'
 		{
@@ -572,5 +550,5 @@
         : parameter_list
         | parameter_list ',' '...'
-		# mikan å¯å¤é·ãã©ã¡ã¼ã¿
+		# mikan 可変長パラメータ
 
 parameter_list
@@ -580,9 +558,9 @@
 		{
 			val[0].add_param( val[2] )
-			# result = val[0] ä¸è¦
-		}
-
-
-# ãã©ã¡ã¼ã¿ä¿®é£¾å­ãè¿½å 
+			# result = val[0] 不要
+		}
+
+
+# パラメータ修飾子を追加
 parameter_declaration
 #        : spec_L parameter_specifier_list spec_R declaration_specifiers declarator
@@ -595,11 +573,11 @@
 		}
 
-	# ä»¥ä¸ã¯ã¨ã©ã¼ã¨ãã
-        | declaration_specifiers declarator # parameter_specifier ãªãã¯æ±ããªã
+	# 以下はエラーとする
+        | declaration_specifiers declarator # parameter_specifier なしは扱わない
 		{
 			Generator.error( "G1001 need specifier for \'$1\'" , val[1].get_name )
 			result = nil
 		}
-        | declaration_specifiers	# ä»®å¼æ°ãªãã¯ãã¨ããããæ±ããªã 060210
+        | declaration_specifiers	# 仮引数なしは、とりあえず扱わない 060210
 		{
 			unless val[0].instance_of?( VoidType ) then
@@ -608,6 +586,6 @@
 			result = nil
 		}
-#        | '[' parameter_specifier_list ']' declaration_specifiers # å 060210
-        | parameter_specifier_list_bracket declaration_specifiers # å 060210
+#        | '[' parameter_specifier_list ']' declaration_specifiers # 同 060210
+        | parameter_specifier_list_bracket declaration_specifiers # 同 060210
 		{
 			unless val[1].instance_of?( VoidType ) then
@@ -650,9 +628,9 @@
 				result = val[1]
 			else
-				# ã¨ã©ã¼ï¼ä»®ã§ val[0] ãè¿ã
+				# エラー：仮で val[0] を返す
 				result = val[0]
 			end
 		}
-		# mikan abstract_declarator ã pointer ä»¥å¤ã§ã¯ãã¾ãåããªããã¨ãããã '*' CAST ã®ã¿æã£ã
+		# mikan abstract_declarator が pointer 以外ではうまく動かない、とりあえず '*' CAST のみ救った
 
 abstract_declarator		# mikan
@@ -663,5 +641,5 @@
 direct_abstract_declarator
         : '(' abstract_declarator ')'
-		{ result = val[1] }  # é¢æ°ãã¤ã³ã¿åãæã
+		{ result = val[1] }  # 関数ポインタ型を救う
         | '[' ']'
 		{
@@ -702,5 +680,5 @@
 		}
 
-# assignment_expressionãconstant_expressionã«å¤æ´
+# assignment_expressionをconstant_expressionに変更
 initializer			# mikan
         : constant_expression
@@ -726,8 +704,8 @@
 
 
-##########################  ããããã¯CDLç¬èª  ##########################
-
-#ãããã¬ãã«ã®æ§æè¦å
-#ã³ã³ãã¼ãã³ãè¨è¿°
+##########################  ここからはCDL独自  ##########################
+
+#トップレベルの構文規則
+#コンポーネント記述
 component_description
         : component_description specified_statement
@@ -742,11 +720,11 @@
 			obj = val[3]
 			if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
-                                # cell, signature ä»¥å¤ã¯ãæå®å­ãç½®ããªã
+                                # cell, signature 以外は、指定子を置けない
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1009 unexpected specifier"  )
 			end
 		}
-		# ããã¨åãè¨è¿°ã composite_celltype ã«ããã
+		# これと同じ記述が composite_celltype にもある
 
 statement
@@ -764,5 +742,5 @@
         | import_C
         | generate_statement
-        | error   # ã¨ã©ã¼åå¾©ãã¤ã³ã
+        | error   # エラー回復ポイント
 
 	
@@ -803,5 +781,5 @@
         | IDENTIFIER '[' constant_expression ']' '.' IDENTIFIER '.' IDENTIFIER '=' initializer
 		{  result = [ :NORMAL_ALLOC, val[0], val[2], val[5], val[7], val[9] ] }
-# mikan å°æ¥çãªæ¡å¼µ ('*' ã§ã¾ã¨ãã¦æå®å¯è½ã¨ãã)
+# mikan 将来的な拡張 ('*' でまとめて指定可能とする)
 #        | IDENTIFIER '.' IDENTIFIER '.' '*'        '=' initializer
 #		{  result = [ val[0], val[ ], val[ ], val[ ] ] }
@@ -828,5 +806,5 @@
 
 const_statement
-        : declaration   # å®æ°å®ç¾©
+        : declaration   # 定数定義
 		{
 			val[0].each { |decl|
@@ -883,5 +861,5 @@
 			}
 		}
-		# mikan   typedef_specifier æªå¦ç½®
+		# mikan   typedef_specifier 未処置
 
 
@@ -903,5 +881,5 @@
         : IDENTIFIER
 		{result = Namespace.new(val[0].val)}
-		# namespace ã¤ã³ã¹ã¿ã³ã¹ã« statement ãè¨æ¶ãããããããã§çæ
+		# namespace インスタンスに statement を記憶させるためここで生成
 
 statement_list
@@ -915,5 +893,5 @@
 		{ result = val[0].append!( val[2].val ) }
 
-#ã·ã°ããã£
+#シグニチャ
 signature
         : SIGNATURE signature_name '{' function_head_list '}' ';'
@@ -924,6 +902,5 @@
 		{result = Signature.new( val[0].val ) }
 
-function_head_list     # result:  function_head ã®é
-å
+function_head_list     # result:  function_head の配列
 #        : function_head
 #		{ result = NamedList.new( val[0], "function" ) }
@@ -942,6 +919,5 @@
 				val[1].check
 			else
-				# mikan é¢æ°ã®é
-åãä»¥ä¸ã®ã¡ãã»ã¼ã¸ã«ãªã
+				# mikan 関数の配列も以下のメッセージになる
 				Generator.error( "G1010 Not function"  )
 				result = nil
@@ -959,5 +935,5 @@
 
 
-#ã»ã«ã¿ã¤ã
+#セルタイプ
 celltype
         : CELLTYPE celltype_name '{' celltype_statement_list '}' ';'
@@ -985,8 +961,8 @@
 		{
 			if val[3].kind_of? Port then
-				val[3].set_specifier val[1]  # è¨­å®é åºãã
+				val[3].set_specifier val[1]  # 設定順序あり
 				Celltype.new_port( val[3] )
 			else
-				# Port ä»¥å¤ã§ã¯æå®å­ã¯ã¨ã©ã¼
+				# Port 以外では指定子はエラー
 				Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
 			end
@@ -999,5 +975,5 @@
         | require
         | factory
-#        | error       # ã¨ã©ã¼åå¾©ãã¤ã³ã  (#513 ç¡éã«ã¼ãã«é¥ãã±ã¼ã¹ãããã®ã§ãããã§ã®ã¨ã©ã¼åå¾©ã¯åããã)
+#        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
 
 celltype_statement_specifier_list
@@ -1016,19 +992,17 @@
 
 alloc_list2
-        : alloc2			{ result = [ val[0] ] }    # åãå£ã®ã¢ã­ã±ã¼ã¿æå®
-        | alloc				{ result = [ val[0] ] }    # å
-é¨ã»ã«ã®ã¢ã­ã±ã¼ã¿æå®
+        : alloc2			{ result = [ val[0] ] }    # 受け口のアロケータ指定
+        | alloc				{ result = [ val[0] ] }    # 内部セルのアロケータ指定
         | alloc_list2 ',' alloc2	{ result << val[2] }
         | alloc_list2 ',' alloc		{ result << val[2] }
 
 alloc2
-        : IDENTIFIER '.' IDENTIFIER '=' initializer    # å
-é¨ã¢ã­ã±ã¼ã¿ (ãããã©åãã¢ã­ã±ã¼ã¿)æå®
+        : IDENTIFIER '.' IDENTIFIER '=' initializer    # 内部アロケータ (デバドラ向きアロケータ)指定
 		{  result = [ :INTERNAL_ALLOC, val[0].val, val[2].val, val[4] ] }
-        | IDENTIFIER '.' IDENTIFIER '<=' initializer   # å¤æ®µãªã¬ã¼ã¢ãã«åãã¢ã­ã±ã¼ã¿æå®
+        | IDENTIFIER '.' IDENTIFIER '<=' initializer   # 多段リレーモデル向きアロケータ指定
 		{  result = [ :RELAY_ALLOC, val[0].val, val[2].val, val[4] ] }
 
 
-#å¼ã³å£ãåãå£
+#呼び口、受け口
 port
         : port_type namespace_signature_name port_name ';'
@@ -1056,5 +1030,5 @@
 
 
-#å±æ§
+#属性
 attribute
         : ATTRIBUTE '{' attribute_declaration_list '}' ';'
@@ -1080,5 +1054,5 @@
 		{
 			val[3].each{ |i|       # i:Decl
-				i.set_kind( :ATTRIBUTE )   # è¨­å®é åºãã
+				i.set_kind( :ATTRIBUTE )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -1099,6 +1073,5 @@
         : STRING_LITERAL
 
-#å
-é¨å¤æ°
+#内部変数
 var
         : VAR '{' var_declaration_list '}' ';'
@@ -1122,5 +1095,5 @@
 		{
 			val[3].each{ |i|       # i:Decl
-				i.set_kind( :VAR )   # è¨­å®é åºãã
+				i.set_kind( :VAR )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -1132,5 +1105,5 @@
         : SIZE_IS  '(' expression ')'	{ result = [:SIZE_IS,val[2]] }
 
-# ãªã¯ã¯ã¤ã¢
+# リクワイア
 require
         : REQUIRE namespace_identifier '.' IDENTIFIER';'                            # mikan namespace #1
@@ -1143,5 +1116,5 @@
 		}
 
-#ãã¡ã¯ããª
+#ファクトリ
 factory
         : factory_head '{' factory_function_list '}' ';'
@@ -1152,5 +1125,5 @@
 
 factory_function_list
-        :                                         # ç©º
+        :                                         # 空
         | factory_function_list factory_function
 
@@ -1164,5 +1137,5 @@
         : IDENTIFIER
 
-arg_list     # factory ã® write é¢æ°ã®ç¬¬ä¸å¼æ°ä»¥é
+arg_list     # factory の write 関数の第三引数以降
         : IDENTIFIER
 		{ result = [ [ :IDENTIFIER, val[0].val ] ] }
@@ -1174,5 +1147,5 @@
 		{ result << [ :STRING_LITERAL, val[2].val ] }
 
-#ã»ã«çæ
+#セル生成
 cell
         : CELL namespace_celltype_name cell_name '{'
@@ -1180,5 +1153,5 @@
           join_list '}' ';'
 		{ result = Cell.end_of_parse true }
-        | CELL namespace_celltype_name cell_name ';'   # oyama ãã­ãã¿ã¤ãå®£è¨
+        | CELL namespace_celltype_name cell_name ';'   # oyama プロトタイプ宣言
 			{ result = Cell.end_of_parse false }
 
@@ -1192,5 +1165,5 @@
 
 join_list
-        :   # ç©ºè¡  061007
+        :   # 空行  061007
         | join_list specified_join
         | join_list reverse_join
@@ -1235,5 +1208,5 @@
 			Cell.new_join( result, true )
 		}
-        | cae_name '=' initializer ';'     # åæåå­ï¼ '{', '}' ãå¯
+        | cae_name '=' initializer ';'     # 初期化子： '{', '}' も可
 		{
 			result = Join.new( val[0].val, nil, val[2] )
@@ -1279,5 +1252,5 @@
         : constant_expression
 
-#è¤åç¨®
+#複合種
 composite_celltype
         : COMPOSITE composite_celltype_name '{' composite_celltype_statement_list '}' ';'
@@ -1299,6 +1272,5 @@
 		{
 			if val[0].kind_of?( Port ) then
-				CompositeCelltype.new_port( val[0] )   # é
-å»¶ãã¦ç»é²
+				CompositeCelltype.new_port( val[0] )   # 遅延して登録
 			end
 		}
@@ -1306,15 +1278,13 @@
 		{
 			if val[3].kind_of?( Port ) then
-				# port ä»¥å¤ val[3] ã«æå¹ãªå¤ãå
-¥ã£ã¦ããªãã®ã§ãä»¥ä¸ã®ã¡ã½ãããé©ç¨ã§ããªã
-				# ç¾ç¶ port, cell ä»¥å¤ã¯æå®å­ãåãä»ããªã
-				# ï¼ãããå°æ¥ä»ã®æãæå®å­ãåãä»ããå¯è½æ§ãããã®ã§ããã®ä½ç½®ã«è¨è¿°ããï¼
+				# port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
+				# 現状 port, cell 以外は指定子を受け付けない
+				# （しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する）
 				val[3].set_specifier( Generator.get_statement_specifier )
-				CompositeCelltype.new_port( val[3] )   # é
-å»¶ãã¦ç»é² (set_specifier å¾)
+				CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
 			elsif val[3].kind_of?( Cell ) then
-				# Cell.end_of_parse ã«ã¦è¨­å®
+				# Cell.end_of_parse にて設定
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1013 unexpected specifier"  )
 			end
@@ -1326,5 +1296,5 @@
         | internal_cell
         | export_join
-#        | error       # ã¨ã©ã¼åå¾©ãã¤ã³ã  (#513 ç¡éã«ã¼ãã«é¥ãã±ã¼ã¹ãããã®ã§ãããã§ã®ã¨ã©ã¼åå¾©ã¯åããã)
+#        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
 
 composite_celltype_statement_specifier_list
@@ -1354,5 +1324,5 @@
 		}
 
-#å±æ§
+#属性
 composite_attribute
         : ATTRIBUTE '{' composite_attribute_declaration_list '}' ';'
@@ -1385,20 +1355,18 @@
 
 internal_join_list
-        :   # ç©ºè¡  061007
+        :   # 空行  061007
         | internal_join_list specified_join
         | internal_join_list external_join
         | internal_join_list reverse_join
 
-external_join  # cell å
-ã«è¨è¿°ããå¼ã³å£ã®å¤é¨çµå
+external_join  # cell 内に記述する呼び口の外部結合
         : internal_cell_elem_name '=>' COMPOSITE '.' export_name ';'
 		{	Cell.external_join( val[0].val, val[4].val, true )	}
         | internal_cell_elem_name '=>' export_name ';'
 		{	Cell.external_join( val[0].val, val[2].val, false )	}
-        # ä»¥åã®ææ³ã§ã¯ãå¼ã³å£å´ã cell ã®å¤ã«è¨è¿°ãã¦ãã
-        # ãã®æã®å®è£
-ã
-
-export_join    # cell å¤ã«è¨è¿°ããåãå£ã®å¤é¨çµå
+        # 以前の文法では、呼び口側も cell の外に記述していた
+        # その時の実装を
+
+export_join    # cell 外に記述する受け口の外部結合
         : export_name '=>' internal_ref_cell_name '.' internal_cell_elem_name ';'
 		{
@@ -1421,5 +1389,5 @@
         : IDENTIFIER
 
-# ãªã¼ã¸ã§ã³
+# リージョン
 region
         : spec_L region_specifier_list spec_R REGION region_name '{'  region_statement '}' ';'
@@ -1436,13 +1404,13 @@
         : IN_THROUGH '(' plugin_name ',' plugin_arg ')'
 		{ Region.new_in_through( val[2].val, val[4].val ) }
-        | IN_THROUGH '(' ')'   # in è¨±å¯
+        | IN_THROUGH '(' ')'   # in 許可
 		{ Region.new_in_through }
         | OUT_THROUGH '(' plugin_name ',' plugin_arg ')'
 		{ Region.new_out_through( val[2].val, val[4].val ) }
-        | OUT_THROUGH '(' ')'  # out è¨±å¯
+        | OUT_THROUGH '(' ')'  # out 許可
 		{ Region.new_out_through() }
         | TO_THROUGH '(' namespace_region_name ',' plugin_name ',' plugin_arg ')'
 		{ Region.new_to_through( val[2], val[4].val, val[6].val ) }
-        | TO_THROUGH '('namespace_region_name ')'  # to è¨±å¯
+        | TO_THROUGH '('namespace_region_name ')'  # to 許可
 		{ Region.new_to_through( val[2], nil, nil ) }
         | NODE
@@ -1471,5 +1439,5 @@
 			if obj.kind_of?( Cell ) then
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G9999 unexpected specifier"  )
 			end
@@ -1490,10 +1458,8 @@
 namespace_region_name
          : :IDENTIFIER
-		{ result = [ val[0].val ] }  # mikan é
-åã§ããå¿
-è¦ã¯ãªã
+		{ result = [ val[0].val ] }  # mikan 配列である必要はない
 #        : namespace_identifier
 
-# æå®å­ã®æ¬å¼§ (in, out ãªã©ã®ã­ã¼ã¯ã¼ãåãæ¿ãã®ããåé¢)
+# 指定子の括弧 (in, out などのキーワード切り替えのため分離)
 spec_L
         : '['  { set_in_specifier }
@@ -1652,6 +1618,5 @@
   }
 
-  # æå®å­ '[]' å
-ã§ã®ã¿ä½¿ç¨ã§ããã­ã¼ã¯ã¼ã
+  # 指定子 '[]' 内でのみ使用できるキーワード
   RESERVED2 = {
     # specifier
@@ -1670,5 +1635,5 @@
     # port (entry)
     'inline' => :INLINE,
-    'ref_desc' => :REF_DESC,   # call ãå¯
+    'ref_desc' => :REF_DESC,   # call も可
 
     # port (call)
@@ -1714,32 +1679,32 @@
   }
 
-  # åå¸°çãªãã¼ãµã®ããã®ã¹ã¿ãã¯
+  # 再帰的なパーサのためのスタック
   @@generator_nest = -1
   @@generator_stack = []
   @@current_locale = []
 
-  # import_C ä¸­ã§ãã
+  # import_C 中である
   @@import_C = false
 
-  # ãã¹ã¦ã®æ§æè§£æãå®äºãã
+  # すべての構文解析が完了した
   @@b_end_all_parse = false
 
-  # tag ãªã struct
+  # tag なし struct
   @@no_struct_tag_num = 0
 
   def self.parse( file_name, plugin = nil, b_reuse = false )
-    # ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ(å¥ãã¼ãµã§èª­ã¿è¾¼ã)
+    # パーサインスタンスを生成(別パーサで読み込む)
     parser = Generator.new
 
-    # plugin ãã import ããã¦ããå ´åã® plugin è¨­å®
+    # plugin から import されている場合の plugin 設定
     parser.set_plugin plugin
 
-    # reuse ãã©ã°ãè¨­å®
+    # reuse フラグを設定
     parser.set_reuse b_reuse
 
-    # cdl ããã¼ã¹
+    # cdl をパース
     parser.parse( [file_name] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     parser.finalize
   end
@@ -1761,5 +1726,5 @@
   def self.get_plugin
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].get_plugin
     else
@@ -1778,5 +1743,5 @@
   def self.is_reuse?
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].is_reuse?
     else
@@ -1808,5 +1773,5 @@
       b_in_string = false
 
-      # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
       TECS_LANG::set_kcode_binary
 
@@ -1818,5 +1783,5 @@
           TECSIO.foreach(file) {|line|
             col = 1
-#            line.rstrip!         æ¹è¡å«ãæå­åãæ±ãããã«ãªã£ãã®ã§ãããã§ç©ºç½ãåãé¤ããªããªã£ã
+#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
 
             until line.empty?
@@ -1824,11 +1789,10 @@
               if b_in_comment
                 case line
-                  # ã³ã¡ã³ãçµäº
+                  # コメント終了
                 when /\A\*\//
                   b_in_comment = false
                 when /\A./
                   ;
-                when /\s+/     # line.rstrip! ãæ­¢ãããã \n ãªã©ã®ç©ºç½æå­ã¨ã¾ã£ã¡ããã«ã¼ã«ãå¿
-è¦ã«ãªã£ã
+                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
                   ;
                 end
@@ -1838,9 +1802,9 @@
                   @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
                   b_in_string = false
-                elsif line =~ /\A.*\\\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
                   string += $&
-                elsif line =~ /\A.*\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
                   string += line
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå)
+                  # この位置では error メソッドは使えない (token 読出し前)
                   puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
                   @@n_error += 1
@@ -1848,58 +1812,58 @@
               else
                 case line
-                # ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+                # 空白、プリプロセスディレクティブ
                 when /\A\s+/
                   ;
-                # è­å¥å­
+                # 識別子
                 when /\A[a-zA-Z_]\w*/
                   word = $&
                   @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-                # 16 é²æ°å®æ°
+                # 16 進数定数
                 when /\A0x[0-9A-Fa-f]+/
                   @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-                # 8 é²æ°å®æ°
+                # 8 進数定数
                 when /\A0[0-7]+/
                   @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-                # æµ®åå°æ°å®æ°
+                # 浮動小数定数
                 when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
                   @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-                # æ´æ°å®æ°
+                # 整数定数
                 when /\A\d+/
                   @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-                # æå­å®æ°
+                # 文字定数
                 when /\A'(?:[^'\\]|\\.)'/
                   @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å
-#                "#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+                # 文字列
+#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #                when /\A"(?:[^"\\]+|\\.)*"/
-                when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
                   @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å (æ¹è¡ãã)
+                # 文字列 (改行あり)
                 when /\A"(?:[^"\\]|\\.)*\\\n$/
                   string = $&
                   b_in_string = true
-                # æå­å (æ¹è¡ãã, escape ãªã)
+                # 文字列 (改行あり, escape なし)
                 when /\A("(?:[^"\\]|\e\.)*)\n$/
                   string = $1 + "\\\n"
                   b_in_string = true
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå) # mikan cdl_error ã§ã¯ãªã
+                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
                   puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
                   @@n_error += 1
-                # å±±æ¬å¼§ã§å²ã¾ããæå­å
+                # 山括弧で囲まれた文字列
                 # when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
-                when /\A<(?:[^>\\]|\\.)*>/   # ããã¯ãã¾ãè¡ãããã 
+                when /\A<(?:[^>\\]|\\.)*>/   # これはうまく行くようだ
                   @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # è¡ã³ã¡ã³ã
+                # 行コメント
                 when /\A\/\/.*$/
-                  # èª­ã¿é£ã°ãã ã
-                # ã³ã¡ã³ãéå§
+                  # 読み飛ばすだけ
+                # コメント開始
                 when /\A\/\*/
                   b_in_comment = true
-                # '>>', '<<' ãªã©
+                # '>>', '<<' など
                 when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
                   @q << [$&, Token.new($&, file, lineno, col)]
                 when /\A::/, /\A=>/, /\A<=/, /\A>=/
                   @q << [$&, Token.new($&, file, lineno, col)]
-                # '(', ')' ãªã©ä¸æå­ã®è¨å·ãã¾ãã¯æªç¥ã®è¨å·
+                # '(', ')' など一文字の記号、または未知の記号
                 when /\A./
                   @q << [$&, Token.new($&, file, lineno, col)]
@@ -1925,5 +1889,5 @@
       }
 
-      # çµäºã®å°
+      # 終了の印
       @q << nil
 
@@ -1945,15 +1909,14 @@
 
       if token[0] == :IDENTIFIER then
-        # TYPE_NAME ãã¼ã¯ã³ã¸ç½®æã
+        # TYPE_NAME トークンへ置換え
         if Namespace.is_typename?( token[1].val ) then
           token[0] = :TYPE_NAME
         elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
-          # æå®å­ã­ã¼ã¯ã¼ãï¼ '[', ']' å
-ã§ã®ã¿æå¹)
+          # 指定子キーワード（ '[', ']' 内でのみ有効)
           token[0] = RESERVED2[ token[1].val.to_s ]
         end
       end
 
-      if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
         locale = @@current_locale[@@generator_nest]
         if token then
@@ -1987,5 +1950,5 @@
   @@n_info = 0
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
   def self.error( msg, *arg )
     locale = nil
@@ -1997,5 +1960,5 @@
 
     msg = TECSMsg.get_error_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -2005,13 +1968,13 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¨ã©ã¼ï¼
+    # import_C の中でのエラー？
     if @@import_C then
       C_parser.error( msg )
     else
 
-      # Node ã®è¨æ¶ãã ä½ç½® (locale) ãä½¿ç¨ããå ´åãå¤æ´ä»¥åã«æ¯ã¹ã
-      # åé¡çºçç®æã¨ç°ãªãä½ç½®ã«ã¨ã©ã¼ãåºããããæ§æè§£æä¸­ã®ã¨ã©ã¼
-      # ã¯ãè§£æä¸­ã®ä½ç½®ãåºåããï¼(new_XXX ã§ owner ãå­è¦ç´ ã®ãã§ã
-      # ã¯ãããã¨ owner ã®è¡çªå·ãåºã¦ãã¾ãç¹ã§ããããçãã¦ãã)
+      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
+      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
+      # は、解析中の位置を出力する．(new_XXX で owner が子要素のチェッ
+      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
 
       if @@b_end_all_parse == false || locale == nil then
@@ -2026,5 +1989,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
   def self.warning( msg, *arg )
     locale = nil
@@ -2036,5 +1999,5 @@
 
     msg = TECSMsg.get_warning_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -2044,5 +2007,5 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¦ã©ã¼ãã³ã°ï¼
+    # import_C の中でのウォーニング？
     if @@import_C then
       C_parser.warning( msg )
@@ -2059,5 +2022,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯
+  # このメソッドは構文解析、意味解析からのみ呼出し可
   def self.info( msg, *arg )
     locale = nil
@@ -2069,5 +2032,5 @@
 
     msg = TECSMsg.get_info_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -2077,5 +2040,5 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¦ã©ã¼ãã³ã°ï¼
+    # import_C の中でのウォーニング？
     if @@import_C then
       C_parser.info( msg )
@@ -2112,5 +2075,5 @@
   end
 
-  #===  '[' specifier å§ã
+  #===  '[' specifier 始め
   def set_in_specifier
     # p "set_in_specifier"
@@ -2118,5 +2081,5 @@
   end
 
-  #=== ']' specifier çµãã
+  #=== ']' specifier 終わり
   def unset_in_specifier
     # p "unset_in_specifier"
@@ -2124,6 +2087,5 @@
   end
 
-  # statement_specifier ã¯æ§æè§£ééä¸­ã§åç
-§ããããã
+  # statement_specifier は構文解釈途中で参照したいため
   @@statement_specifier_stack = []
   def self.add_statement_specifier( ss )
@@ -2142,5 +2104,5 @@
   end
 
-  #=== ãã¹ã¦ã®æ§æè§£æãå®äºãããã¨ãå ±å
+  #=== すべての構文解析が完了したことを報告
   def self.end_all_parse
     @@b_end_all_parse = true
@@ -2150,6 +2112,5 @@
 
 
-# ãã¡ã¤ã« => INCLUDE("header")ã®é
-å
+# ファイル => INCLUDE("header")の配列
 Include = Hash.new {|hash, key| hash[key] = []}
 
@@ -2205,21 +2166,18 @@
 
 #= TECSIO
-#  Ruby2.0(1.9) å¯¾å¿ã«ä¼´ãå°å
-¥ããã¯ã©ã¹
-#  SJIS ä»¥å¤ã§ã¯ãASCII-8BIT ã¨ãã¦å
-¥åãã
+#  Ruby2.0(1.9) 対応に伴い導入したクラス
+#  SJIS 以外では、ASCII-8BIT として入力する
 class TECSIO
-  def self.foreach(file) # ãã­ãã¯å¼æ° { |line| }
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
+  def self.foreach(file) # ブロック引数 { |line| }
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     if $b_no_kcode then
 	  msg = "E".encode $Ruby19_File_Encode
       if( $Ruby19_File_Encode == "Shift_JIS" )
 
-        # Shift JIS ã¯ããã£ãã Windows-31J ã¨ãã¦èª­ã¿è¾¼ã¾ããShift_JIS ã«å¤æãããï¼
-        # ã³ã¡ã³ãç­ã«å«ã¾ãã SJIS ã«ä¸é©åãªæå­ã³ã¼ãã¯ '?' ã¾ãã¯ REPLACEMENT CHARACTER ã«å¤æãããï¼
-        # EUC ã UTF-8 ã§è¨è¿°ããã CDL ãæ··å¨ãã¦ãã¦ããRuby ä¾å¤ãçºçãããã¨ãªãå¦çãé²ãããã¨ãã§ããï¼
-        # æå­ã³ã¼ãæå®ã SJIS ã§ãã£ã¦ãæå­åãªãã©ã«ã®ä¸­ã«ãæå­ã³ã¼ããSJIS ä»¥å¤ã®é ASCII ãå«ã¾ãã¦ããå ´åã
-        # Ruby 1.8 ã® tecsgen ã§ã¯æå­ã³ã¼ãæå®ã«å½±é¿ãªãå¦çããããã®ããRuby 1.9 ä»¥éã§ã¯ '?' ã«ç½®ãæããå¯è½æ§ãããï¼
+        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる．
+        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される．
+        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる．
+        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
+        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある．
 
         mode = "r:Windows-31J"
@@ -2245,17 +2203,17 @@
   end
 
-  #=== æå­ã³ã¼ããç¸éããå ´åä¸è´ããã
-  # msg ã¨ str ã®æå­ã³ã¼ããç¸éããå ´åãstr ã msg ã®æå­ã³ã¼ãã«å¤æãã
-  # å¤æä¸å¯ã®æå­ã³ã¼ãã¯ '?' (utf-8 ã®å ´å U+FFFD (REPLACEMENT CHARACTER )) ã«å¤æ
+  #=== 文字コードが相違する場合一致させる
+  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
+  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
   #
-  # ãã®ã¡ã½ããã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸åºåã§ãä½¿ç¨ããã¦ãããã¨ã«æ³¨æï¼
+  # このメソッドは、エラーメッセージ出力でも使用されていることに注意．
   #
   #msg_enc::Encode | String
   def self.str_code_convert( msg, str )
     if $b_no_kcode == false then
-      return str                          # Ruby V1.8 ã¾ã§
+      return str                          # Ruby V1.8 まで
     end
     if msg.encoding != str.encoding then
-      option = { :invalid => :replace, :undef => :replace }   # ä¾å¤ãçºçãããã'?' ã«å¤æãã(utf-8 ã¯ 0xfffd)
+      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
       # return str.encode( msg.encoding, option )
       str = str.encode( "utf-8", option )
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2019 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -54,16 +39,13 @@
 
 # STAGE:
-# ãã®ã¡ã³ããã³ã¹ç¶æ³ã¯ãããããªã
-#  B    bnf.y.rb ããå¼åºããã
-#  P    parse æ®µéã§å¼åºãããï¼bnf.y.rb ããç´æ¥å¼åºãããããã§ã¯ãªãããæ§ææ¨çæãè¡ãï¼
-#  S    P ã®ä¸­ããå¼åºãããããæ§ææ¨çæããããã§ã¯ãªãæå³ãã§ãã¯ãã
-#  G    ã³ã¼ãçæï¼ãã®æ®µéã§ãæ§ææ¨ã¯å®å
-¨ã§ããï¼ä¸å®å
-¨ãªãã¨ã©ã¼ã§æã¡ãããã¦ããï¼
-#                                                   factory ã®ç¬¬ä¸å¼æ° "format" ã®å¾ãã®å¼æ°
-
-# mikan ä»¥ä¸ã¯ ruby ã® mix in ã§å®ç¾ã§ãããããããªã
-# Nestable ãç¶æ¿ããå ´åãã¯ã©ã¹å¤æ°ã¯ Nestable ã®ãã®ãå
-±æãããï¼å¥ã«ãããã£ãï¼
+# このメンテナンス状況はよろしくない
+#  B    bnf.y.rb から呼出される
+#  P    parse 段階で呼出される（bnf.y.rb から直接呼出されるわけではないが、構文木生成を行う）
+#  S    P の中から呼出されるが、構文木生成するわけではなく意味チェックする
+#  G    コード生成（この段階で、構文木は完全である．不完全ならエラーで打ちきられている）
+#                                                   factory の第一引数 "format" の後ろの引数
+
+# mikan 以下は ruby の mix in で実現できるかもしれない
+# Nestable を継承した場合、クラス変数は Nestable のものが共有される（別にしたかった）
 # class Nestable
 #   @@nest_stack_index = -1
@@ -90,15 +72,13 @@
 #  @name:: Symbol
 #  @global_name:: Symbol
-#  @function_head_list:: NamedList : FuncHead ã®ã¤ã³ã¹ã¿ã³ã¹ãè¦ç´ 
-#  @func_name_to_id::  {String}  :  é¢æ°åãæ·»å­ã¨ããé
-åã§ id ãè¨æ¶ããï¼id ã¯ signature ã®åºç¾é çª (1ããå§ã¾ã)
-#  @context:: string : ã³ã³ãã­ã¹ãå
-#  @b_callback:: bool: callback : ã³ã¼ã«ããã¯ç¨ã®ã·ã°ããã£
-#  @b_deviate:: bool: deviate : é¸è±ï¼pointer level mismatch ãåºããªãï¼
-#  @b_checked_as_allocator_signature:: bool:  ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã¨ãã¦ãã§ãã¯æ¸ã¿
-#  @b_empty:: Bool: ç©º(é¢æ°ãä¸ã¤ããªãç¶æ
-)
-#  @descriptor_list:: nil | { Signature => ParamDecl }  æå¾ã® ParamDecl ããè¨æ¶ããªããã¨ã«æ³¨æ
-#  @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin ã¯çæå¾ã«è¿½å ããã
+#  @function_head_list:: NamedList : FuncHead のインスタンスが要素
+#  @func_name_to_id::  {String}  :  関数名を添字とする配列で id を記憶する．id は signature の出現順番 (1から始まる)
+#  @context:: string : コンテキスト名
+#  @b_callback:: bool: callback : コールバック用のシグニチャ
+#  @b_deviate:: bool: deviate : 逸脱（pointer level mismatch を出さない）
+#  @b_checked_as_allocator_signature:: bool:  アロケータシグニチャとしてチェック済み
+#  @b_empty:: Bool: 空(関数が一つもない状態)
+#  @descriptor_list:: nil | { Signature => ParamDecl }  最後の ParamDecl しか記憶しないことに注意
+#  @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
 
   include PluginModule
@@ -123,5 +103,5 @@
 
   # STAGE: P
-  # ãã®ã¡ã½ããã¯ parse ä¸­ã®ã¿å¼ã³åºããã
+  # このメソッドは parse 中のみ呼び出される
   def self.get_current
     @@current_object
@@ -134,5 +114,5 @@
     @name = name
     Namespace.new_signature( self )
-    set_namespace_path # @NamespacePath ã®è¨­å®
+    set_namespace_path # @NamespacePath の設定
     if "#{Namespace.get_global_name}" == "" then
       @global_name = @name
@@ -158,5 +138,5 @@
     @function_head_list = function_head_list
 
-    # id ãå²ä»ãã
+    # id を割付ける
     id = 1
     function_head_list.get_items.each{ |f|
@@ -180,10 +160,10 @@
   end
 
-  #=== Signature# signature ã®æå®å­ãè¨­å®
+  #=== Signature# signature の指定子を設定
   # STAGE: B
   #spec_list::      [ [ :CONTEXT,  String ], ... ]
   #                     s[0]        s[1]
   def set_specifier_list( spec_list )
-    return if spec_list == nil  # ç©ºãªãã°ä½ãããªã
+    return if spec_list == nil  # 空ならば何もしない
 
     spec_list.each { |s|
@@ -235,13 +215,12 @@
   end
 
-  #=== Signature# é¢æ°åãã signature å
-ã® id ãå¾ã
+  #=== Signature# 関数名から signature 内の id を得る
   def get_id_from_func_name func_name
     @func_name_to_id[ func_name ]
   end
 
-  #=== Signature# context ãå¾ã
-  # context æå­åãè¿ã "task", "non-task", "any"
-  # æªæå®æã®ããã©ã«ãã¨ãã¦ task ãè¿ã
+  #=== Signature# context を得る
+  # context 文字列を返す "task", "non-task", "any"
+  # 未指定時のデフォルトとして task を返す
   def get_context
     if @context then
@@ -252,20 +231,17 @@
   end
 
-  #=== Signature# signaure ã®ãã¹ã¦ã®é¢æ°ã®ãã¹ã¦ã®ãã©ã¡ã¼ã¿ããã©ã
-  #block:: ãã­ãã¯ãå¼æ°ã«åã
-  # ãã­ãã¯ã¯2ã¤ã®å¼æ°ãåãåã  Decl, ParamDecl     ( Decl: é¢æ°ããã )
-  # Port ã¯ã©ã¹ã«ã each_param ãããï¼åãåãï¼
-  def each_param # ãã­ãã¯å¼æ° { |func_decl, param_decl| }
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    return if fha == nil                                # nil ãªãææ³ã¨ã©ã¼ã§æå¹å¤ãè¨­å®ãããªãã£ã
-
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
-    fha.each{ |fh|  # fh: FuncHead                      # é¢æ°é
-åä¸­ã®åé¢æ°é ­é¨
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
-        fd.get_type.get_paramlist.get_items.each{ |par| # ãã¹ã¦ã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦
+  #=== Signature# signaure のすべての関数のすべてのパラメータをたどる
+  #block:: ブロックを引数に取る
+  # ブロックは2つの引数を受け取る  Decl, ParamDecl     ( Decl: 関数ヘッダ )
+  # Port クラスにも each_param がある（同じ働き）
+  def each_param # ブロック引数 { |func_decl, param_decl| }
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
+
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
+    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
+        fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
           pr.call( fd, par )
         }
@@ -274,9 +250,9 @@
   end
 
-  #=== Signature# æ­£å½ãªã¢ã­ã±ã¼ã¿ ã·ã°ããã£ããã¹ããã
-  # alloc, dealloc é¢æ°ãæã¤ãã©ãããç¬¬ä¸å¼ãæ°ããããããæ´æ°ããã¤ã³ã¿ãç¬¬äºå¼ãæ°ãããã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ããªã
+  #=== Signature# 正当なアロケータ シグニチャかテストする
+  # alloc, dealloc 関数を持つかどうか、第一引き数がそれぞれ、整数、ポインタ、第二引き数が、ポインタへのポインタ、なし
   def is_allocator?
 
-    # ä¸åã ããã§ãã¯ãã
+    # 一回だけチェックする
     if @b_checked_as_allocator_signature == true then
       return true
@@ -284,15 +260,13 @@
     @b_checked_as_allocator_signature = true
 
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    if fha == nil then                                  # nil ãªãææ³ã¨ã©ã¼ã§æå¹å¤ãè¨­å®ãããªãã£ã
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    if fha == nil then                                  # nil なら文法エラーで有効値が設定されなかった
       return false
     end
 
     found_alloc = false; found_dealloc = false
-    fha.each{ |fh|  # fh: FuncHead                      # é¢æ°é
-åä¸­ã®åé¢æ°é ­é¨
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
+    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
         func_name = fd.get_name.to_sym 
         if func_name == :alloc then
@@ -303,5 +277,5 @@
                 ! params[0].get_type.get_original_type.kind_of?( IntType ) ||
                 params[0].get_direction != :IN then
-              # ç¬¬ä¸å¼æ°ã int åã§ãªã
+              # 第一引数が int 型でない
               if ! params[0].instance_of?( ParamDecl ) ||
                   ! params[0].get_type.kind_of?( PtrType ) ||
@@ -309,5 +283,5 @@
                   params[0].get_type.get_type.get_type.kind_of?( PtrType ) ||
                   params[0].get_direction != :OUT then
-                # ç¬¬ä¸å¼æ°ããã¤ã³ã¿åã§ããªã
+                # 第一引数がポインタ型でもない
                 cdl_error3( @locale, "S1003 $1: \'alloc\' 1st parameter neither [in] integer type nor [out] double pointer type", @name )
               end
@@ -317,5 +291,5 @@
                 params[1].get_type.get_type.get_type.kind_of?( PtrType ) ||
                 params[0].get_direction != :IN then
-              # (ç¬¬ä¸å¼æ°ãæ´æ°ã§) ç¬¬äºå¼æ°ããã¤ã³ã¿ã§ãªã
+              # (第一引数が整数で) 第二引数がポインタでない
               cdl_error3( @locale, "S1004 $1: \'alloc\' 2nd parameter not [in] double pointer" , @name )
             end
@@ -332,5 +306,5 @@
                 params[0].get_direction != :IN then
               cdl_error3( @locale, "S1006 $1: \'dealloc\' 1st parameter not [in] pointer type" , @name )
-#            elsif params[1] != nil then    # ç¬¬äºå¼ãæ°ã¯ãã§ãã¯ããªã
+#            elsif params[1] != nil then    # 第二引き数はチェックしない
 #              cdl_error3( @locale, "S1007 Error message is changed to empty" )
 #                 cdl_error3( @locale, "S1007 $1: \'dealloc\' cannot has 2nd parameter" , @name )
@@ -354,5 +328,5 @@
   end
 
-  #=== Signature# ã·ã°ããã£ãã©ã°ã¤ã³ (generate æå®å­)
+  #=== Signature# シグニチャプラグイン (generate 指定子)
   def signature_plugin
     plugin_name = @generate[0]
@@ -384,8 +358,6 @@
 end
 
-  #== Signature# å¼æ°ã§åç
-§ããã¦ãã Descriptor åã®ãªã¹ãã
-  #RETURN:: Hash { Signature => ParamDecl }:  è¤æ°ã® ParamDecl ããåç
-§ããã¦ããå ´åãæå¾ã®ãã®ããè¿ããªã
+  #== Signature# 引数で参照されている Descriptor 型のリストを
+  #RETURN:: Hash { Signature => ParamDecl }:  複数の ParamDecl から参照されている場合、最後のものしか返さない
   def get_descriptor_list
     @descriptor_list
@@ -402,19 +374,16 @@
   end
 
-  #== Signature# å¼æ°ã§åç
-§ããã¦ãã Descriptor åã®ãªã¹ããä½æãã
+  #== Signature# 引数で参照されている Descriptor 型のリストを作成する
   def set_descriptor_list
     desc_list = { }
     # p "has_desc #{@name}"
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    if fha == nil then                                  # nil ã®å ´åãèªå·±åç
-§ã«ããã±ã¼ã¹ã¨ä»®å®
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    if fha == nil then                                  # nil の場合、自己参照によるケースと仮定
       @descriptor_list = desc_list
       return desc_list
     end
     fha.each{ |fh|
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
         params = fd.get_type.get_paramlist.get_items
         if params then
@@ -443,12 +412,10 @@
   end
 
-  #=== Signature# å¼æ°ã« Descriptor ããããï¼
+  #=== Signature# 引数に Descriptor があるか？
   def has_descriptor?
     if get_descriptor_list == nil then
-      # end_of_parse ãå¼ã³åºãããåã« has_descriptor? ãå¼ã³åºããã
-      # å¼ã³åºãå
-ã¯ DescriptorType#initialize
-      # ãã®å ´åãåãã·ã°ããã£å
-ã®å¼æ°ã Descriptor åã§ãã
+      # end_of_parse が呼び出される前に has_descriptor? が呼び出された
+      # 呼び出し元は DescriptorType#initialize
+      # この場合、同じシグニチャ内の引数が Descriptor 型である
       return true
     elsif get_descriptor_list.length > 0 then
@@ -459,28 +426,25 @@
   end
 
-  #=== Signature# ã³ã¼ã«ããã¯ãï¼
-  # æå®å­ callback ãæå®ããã¦ããã° true 
+  #=== Signature# コールバックか？
+  # 指定子 callback が指定されていれば true 
   def is_callback?
     @b_callback
   end
 
-  #=== Signature# é¸è±ãï¼
-  # æå®å­ deviate ãæå®ããã¦ããã° true 
+  #=== Signature# 逸脱か？
+  # 指定子 deviate が指定されていれば true 
   def is_deviate?
     @b_deviate
   end
 
-  #=== Signature# ç©ºãï¼
+  #=== Signature# 空か？
   def is_empty?
     @b_empty
   end
 
-  #=== Signature# Push Pop Allocator ãå¿
-è¦ãï¼
-  # Transparent RPC ã®å ´å oneway ãã¤ in ã®é
-å(size_is, count_is, string ã®ããããã§ä¿®é£¾ï¼ããã
+  #=== Signature# Push Pop Allocator が必要か？
+  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾）がある
   def need_PPAllocator?( b_opaque = false )
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
     fha.each{ |fh|
       fd = fh.get_declarator
@@ -508,5 +472,5 @@
 
 module CelltypePluginModule
-  #=== Celltype# ã»ã«ã¿ã¤ããã©ã°ã¤ã³ (generate æå®å­)
+  #=== Celltype# セルタイププラグイン (generate 指定子)
   def celltype_plugin
     plugin_name = @generate[0]
@@ -515,5 +479,5 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ããã©ã°ã¤ã³ããã®ã»ã«ã¿ã¤ãã«é©ç¨
+  #=== Celltype# セルタイププラグインをこのセルタイプに適用
   def apply_plugin( plugin_name, option )
 
@@ -543,5 +507,5 @@
     end
 
-    # æ¢ã«å­å¨ããã»ã«ã« new_cell ãé©ç¨
+    # 既に存在するセルに new_cell を適用
     @cell_list.each{ |cell|
       apply_plugin_cell plugin_object, cell
@@ -583,6 +547,6 @@
 # @factory_list::   Factory[]
 # @ct_factory_list::    Factory[] :    celltype factory
-# @cell_list:: Cell[] : å®ç¾©ã®ã¿ (V1.0.0.2 ä»¥é)
-# @ordered_cell_list:: Cell[] : ID é ã«é åºä»ããããã»ã«ãªã¹ããæé©åä»¥éæå¹ (ãªã³ã¯åä½ãã¨ã«çæãããªãã)
+# @cell_list:: Cell[] : 定義のみ (V1.0.0.2 以降)
+# @ordered_cell_list:: Cell[] : ID 順に順序付けされたセルリスト、最適化以降有効 (リンク単位ごとに生成されなおす)
 # @singleton:: bool
 # @idx_is_id:: bool
@@ -590,7 +554,7 @@
 # @b_need_ptab:: bool: true if having cells in multi-domain
 # @active:: bool
-# @b_reuse:: bool :  reuse æå®ããã¦ import ããã(template ä¸è¦)
-# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin ã¯çæå¾ã«è¿½å ããã
-# @generate_list:: [ [ Symbol, String, Plugin ], ... ]   generate æã§è¿½å ããã generate
+# @b_reuse:: bool :  reuse 指定されて import された(template 不要)
+# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
+# @generate_list:: [ [ Symbol, String, Plugin ], ... ]   generate 文で追加された generate
 #
 # @n_attribute_ro:: int >= 0    none specified
@@ -599,9 +563,9 @@
 # @n_var:: int >= 0
 # @n_var_size_is:: int >= 0     # of [size_is] specified vars # mikan count_is
-# @n_var_omit:: int >= 0        # of [omit] specified vars # mikan var ã® omit ã¯æï¼
+# @n_var_omit:: int >= 0        # of [omit] specified vars # mikan var の omit は有？
 # @n_var_init:: int >= 0        # of vars with initializer
 # @n_call_port:: int >= 0       # dynamic ports are included
 # @n_call_port_array:: int >= 0  # dynamic ports are included
-# @n_call_port_omitted_in_CB:: int >= 0   æé©åã§çç¥ãããå¼ã³å£
+# @n_call_port_omitted_in_CB:: int >= 0   最適化で省略される呼び口
 # @n_call_port_dynamic:: int >= 0  #
 # @n_call_port_array_dynamic:: int >= 0
@@ -611,16 +575,14 @@
 # @n_entry_port_array:: int >= 0
 # @n_entry_port_inline:: int >= 0
-# @n_cell_gen:: int >= 0  çæããã»ã«ã®æ°ï¼ã³ã¼ãçæã®é ­ã§ç®åºããï¼æå³è§£ææ®µéã§ã¯åç
-§ä¸å¯
-# @id_base:: Integer : cell ã® ID ã®æå°å¤(æå¤§å¤ã¯ @id_base + @n_cell)
+# @n_cell_gen:: int >= 0  生成するセルの数．コード生成の頭で算出する．意味解析段階では参照不可
+# @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
 #
-# @b_cp_optimized:: bool : å¼ã³å£æé©åå®æ½
-# @plugin:: PluginObject      ãã®ã»ã«ã¿ã¤ãããã©ã°ã¤ã³ã«ããçæããã CDL ããçæãããå ´åã«æå¹ã
-#                              generate ã®æå®ã¯ @generate ã«ãã©ã°ã¤ã³ãä¿æããã
+# @b_cp_optimized:: bool : 呼び口最適化実施
+# @plugin:: PluginObject      このセルタイプがプラグインにより生成された CDL から生成された場合に有効。
+#                              generate の指定は @generate にプラグインが保持される
 #
-# @included_header:: Hash :  include ãããããããã¡ã¤ã«
-# @domain_roots::Hash { DomainTypeName(Symbol) => [ Region ] }  ãã¡ã¤ã³ã¿ã¤ãåã¨ Region ã®é
-å (optimize.rb ã§è¨­å®)
-#                                               ã«ã¼ããªã¼ã¸ã§ã³ã¯ãã¡ã¤ã³åããnil
+# @included_header:: Hash :  include されたヘッダファイル
+# @domain_roots::Hash { DomainTypeName(Symbol) => [ Region ] }  ドメインタイプ名と Region の配列 (optimize.rb で設定)
+#                                               ルートリージョンはドメイン名が　nil
 
   include PluginModule
@@ -692,11 +654,9 @@
 
     @plugin = Generator.get_plugin
-      # plugin ã®å ´å PluginObject ãè¿ããã
-    # å
-ã® Generator ããå¼åºããã Generator ã®ä¸­ã§ãã¼ã¹ããã³æå³ãã§ãã¯ããã¦ãã
+      # plugin の場合 PluginObject が返される
+    # 元の Generator から呼出された Generator の中でパースおよび意味チェックされている
 
     # if @plugin then
-    #  # plugin çæãããã»ã«ã¿ã¤ãã¯åå©ç¨ã§ã¯ãªã   #833 ä¸å
-·åä¿®æ­£
+    #  # plugin 生成されるセルタイプは再利用ではない   #833 不具合修正
     #  @b_reuse = false
     # else
@@ -715,5 +675,5 @@
 
     Namespace.new_celltype( self )
-    set_namespace_path # @NamespacePath ã®è¨­å®
+    set_namespace_path # @NamespacePath の設定
     set_specifier_list( Generator.get_statement_specifier )
 
@@ -727,7 +687,6 @@
   end
 
-  #== Celltype#ãã¡ã¤ã³ã«ã¼ããè¿ã
-  # @domain_roots ã®èª¬æãåç
-§
+  #== Celltype#ドメインルートを返す
+  # @domain_roots の説明を参照
   def get_domain_roots
     @domain_roots
@@ -736,13 +695,11 @@
   # Celltype# end_of_parse
   def end_of_parse
-    # å±æ§ã»å¤æ°ã®ãã§ãã¯
+    # 属性・変数のチェック
     check_attribute
 
-    # ã¢ã­ã±ã¼ã¿å¼ã³å£ãå
-é¨çæ
+    # アロケータ呼び口を内部生成
     generate_allocator_port
 
-    # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ãå
-é¨ã¢ã­ã±ã¼ã¿ã®è¨­å®
+    # リレーアロケータ、内部アロケータの設定
     @port.each { |p|
       p.set_allocator_instance
@@ -814,7 +771,5 @@
       end
       if a.get_initializer then
-        # ç»é²å¾ã«ãã§ãã¯ãã¦ãåé¡ãªãï¼attr ãåç
-§ã§ããªãã®ã§ãèªå·±åç
-§ããªãï¼
+        # 登録後にチェックしても問題ない（attr を参照できないので、自己参照しない）
         a.get_type.check_init( @locale, a.get_identifier, a.get_initializer, :ATTRIBUTE )
       end
@@ -822,31 +777,28 @@
   end
 
-  #=== Celltype# celltype ã® attribute/var ã®ãã§ãã¯
+  #=== Celltype# celltype の attribute/var のチェック
   # STAGE:  S
   #
-  # ãã®ã¡ã½ããã¯ celltype ã®ãã¼ã¹ãå®äºããæç¹ã§å¼åºãããï¼
+  # このメソッドは celltype のパースが完了した時点で呼出される．
   def check_attribute
-    # attribute ã® size_is æå®ãå¦¥å½ããã§ãã¯
+    # attribute の size_is 指定が妥当かチェック
     (@attribute+@var).each{ |a|
       if a.get_size_is then
         if ! a.get_type.kind_of?( PtrType ) then
-          # size_is ããã¤ã³ã¿åä»¥å¤ã«æå®ããã
+          # size_is がポインタ型以外に指定された
           cdl_error( "S1011 $1: size_is specified for non-pointer type" , a.get_identifier )
         else
 
-          # åç
-§ããå¤æ°ãå­å¨ããè¨ç®å¯è½ãªåããã§ãã¯ãã
-          size = a.get_size_is.eval_const( @name_list )  # C_EXP ã®å¯è½æ§ãã
+          # 参照する変数が存在し、計算可能な型かチェックする
+          size = a.get_size_is.eval_const( @name_list )  # C_EXP の可能性あり
           init = a.get_initializer
           if init then
             if ! init.instance_of?( Array ) then
-              # åæåå­ãé
-åã§ã¯ãªã
+              # 初期化子が配列ではない
               cdl_error( "S1012 $1: unsuitable initializer, need array initializer" , a.get_identifier )
             elsif size.kind_of?( Integer ) && size < init.length then
-              # size_is æå®ãããåæ°ãããåæåå­ã®é
-åè¦ç´ ãå¤ã
+              # size_is 指定された個数よりも初期化子の配列要素が多い
               cdl_error( "S1013 $1: too many initializer, $2 for $3" , a.get_identifier, init.length, size )
-            # elsif a.get_size_is.eval_const( nil ) == nil  # C_EXP ã®å¯è½æ§ãã
+            # elsif a.get_size_is.eval_const( nil ) == nil  # C_EXP の可能性あり
             end
 
@@ -858,5 +810,5 @@
               ( a.get_initializer.instance_of?( Expression ) &&
                 a.get_initializer.eval_const2(@name_list).instance_of?( Array ) ) then
-            # size_is æå®ããã¦ããªããã¤ã³ã¿ã Array ã§åæåããã¦ããããã¨ã©ã¼
+            # size_is 指定されていないポインタが Array で初期化されていたら、エラー
             cdl_error( "S1159 $1: non-size_is pointer cannot be initialized with array initializer" , a.get_identifier )
           end
@@ -870,20 +822,19 @@
   end
 
-  #=== Celltype# ã¢ã­ã±ã¼ã¿å¼ã³å£ãçæ
-  #    send, receive å¼æ°ã®ã¢ã­ã±ã¼ã¿ãå¼åºãããã®å¼ã³å£ãçæ
+  #=== Celltype# アロケータ呼び口を生成
+  #    send, receive 引数のアロケータを呼出すための呼び口を生成
   def generate_allocator_port
     @port.each { |port|
-      # ãã¼ãã®ãã¹ã¦ã®ãã©ã¡ã¼ã¿ãè¾¿ã
+      # ポートのすべてのパラメータを辿る
       port.each_param { |port, fd, par|
-        case par.get_direction                        # å¼æ°ã®æ¹åæå®å­ (in, out, inout, send, receive )
+        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
         when :SEND, :RECEIVE
           if par.get_allocator then
-            cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®åå
-            #           ãã¼ãå          é¢æ°å         ãã©ã¡ã¼ã¿å
-            # alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace ã¢ã­ã±ã¼ã¿å¼ã³å£ã®ã·ã°ããã£ #1
+            cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
+            #           ポート名          関数名         パラメータ名
+            # alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ #1
             alloc_sig_path = par.get_allocator.get_namespace_path
-            array_size = port.get_array_size            # å¼ã³å£ã¾ãã¯åãå£é
-åã®ãµã¤ãº
-            created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # å¼ã³å£ãçæ
+            array_size = port.get_array_size            # 呼び口または受け口配列のサイズ
+            created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
             created_port.set_allocator_port( port, fd, par )
             if port.is_optional? then
@@ -893,5 +844,5 @@
               created_port.set_omit
             end
-            new_port( created_port )                    # ã»ã«ã¿ã¤ãã«æ°ããå¼ã³å£ãè¿½å 
+            new_port( created_port )                    # セルタイプに新しい呼び口を追加
           # else
           #  already error "not found or not signature" in class ParamDecl
@@ -910,6 +861,5 @@
   end
 
-  #=== Celltype# æ°ããå
-é¨å¤æ°
+  #=== Celltype# 新しい内部変数
   #var:: [Decl]
   def new_var( var )
@@ -924,6 +874,5 @@
       @name_list.add_item( i )
 
-      # size_is æå®ãããé
-å? mikan  count_is
+      # size_is 指定された配列? mikan  count_is
       if i.get_size_is then
         @n_var_size_is += 1
@@ -941,5 +890,5 @@
   end
 
-  #=== Celltype# celltype ã®æå®å­ãè¨­å®
+  #=== Celltype# celltype の指定子を設定
   def set_specifier_list( spec_list )
     return if spec_list == nil
@@ -976,11 +925,11 @@
 
   def new_require( ct_or_cell_nsp, ep_name, cp_name )
-    # Require: set_owner ãããã®ããªã
+    # Require: set_owner するものがない
     obj = Namespace.find( ct_or_cell_nsp )    #1
     if obj.instance_of? Celltype then
-      # Celltype åã§æå®
+      # Celltype 名で指定
       ct = obj
     elsif obj.instance_of? Cell then
-      # Cell åã§æå®
+      # Cell 名で指定
       ct = obj.get_celltype
     elsif obj == nil then
@@ -993,9 +942,9 @@
 
     if( ! ct.is_singleton? ) then
-      # ã·ã³ã°ã«ãã³ã§ã¯ãªã
+      # シングルトンではない
       cdl_error( "S1018 $1 : not singleton cell" , obj.get_name )
     end
 
-    # åãå£ãæ¢ã
+    # 受け口を探す
     obj2 = ct.find( ep_name )
     if( ( ! obj2.instance_of? Port ) || obj2.get_port_type != :ENTRY ) then
@@ -1008,5 +957,5 @@
 
     if obj2.get_signature == nil then
-      # signature ãæªå®ç¾©ï¼æ¢ã«ã¨ã©ã¼
+      # signature が未定義：既にエラー
       return
     end
@@ -1014,17 +963,17 @@
     require_call_port_prefix = :_require_call_port
     if cp_name == nil then
-      # é¢æ°åéè¤ãã§ãã¯
+      # 関数名重複チェック
       @require.each{ |req|
         unless req[0].to_s =~ /^#{require_call_port_prefix}/ then
-          next     # ååããã® require ã¯é¢æ°åéè¤ãã§ãã¯ããªã
+          next     # 名前ありの require は関数名重複チェックしない
         end
         port = req[2]
         if port.get_signature == obj2.get_signature then
-          # åã signature ï¼ãã¹ã¦åãé¢æ°åãæã¤ï¼åå¥ã«åºãã®ã§ã¯ãªããã¾ã¨ãã¦ã¨ã©ã¼ã¨ãã
+          # 同じ signature （すべて同じ関数名を持つ）個別に出すのではなく、まとめてエラーとする
           cdl_error( "S1021 $1 : require cannot have same signature with \'$2\'" , obj2.get_name, port.get_name )
           next
         end
         port.get_signature.get_function_head_array.each{ |f|
-          # mikan ããã¯ãnamedList ããã®æ¤ç´¢ã«ãªããªãã®ï¼ï¼å¹çãæªãï¼
+          # mikan ここは、namedList からの検索にならないの？（効率が悪い）
           obj2.get_signature.get_function_head_array.each{ |f2|
             if( f.get_name == f2.get_name ) then
@@ -1042,8 +991,8 @@
       b_has_name = true
     end
-    # require ãè¿½å 
+    # require を追加
     @require << [ cp_name, obj, obj2 ]  # [ lhs:cp_name, rhs:Celltype, rhs:Port ]
 
-    # require port ãè¿½å  (å¼ã³å£ã¨ãã¦è¿½å ããããã ã require ãã»ãããã¦ãã)
+    # require port を追加 (呼び口として追加する。ただし require をセットしておく)
     port = Port.new( cp_name, obj2.get_signature.get_namespace_path, :CALL )
     port.set_require( b_has_name )
@@ -1077,10 +1026,10 @@
   end
 
-  #=== Celltype#dynamic ã®é©åæ§ãã§ãã¯
+  #=== Celltype#dynamic の適合性チェック
   def check_dynamic_join
     return if ! $verbose
     @port.each{ |port|
       signature = port.get_signature
-      next if signature == nil   # ãã§ã«ã¨ã©ã¼
+      next if signature == nil   # すでにエラー
       if port.is_dynamic? then
         dbgPrint( "[DYNAMIC] checking dynamic port: #{@global_name}.#{port.get_name}\n" )
@@ -1133,5 +1082,5 @@
   end
   def find_ref_desc_port signature
-    if signature == nil then  # ãã§ã«ã¨ã©ã¼
+    if signature == nil then  # すでにエラー
       return nil
     end
@@ -1143,6 +1092,6 @@
     return nil
   end
-  #=== Celltype#ãã£ã¹ã¯ãªãã¿åã§ã·ã°ããã£ãä¸è´ã dyn_ref ã«å¯¾å¿ã¥ãå¼æ°ãæ¢ã
-  #dyn_ref::Symbol: :DYNAMIC=ãã£ã¹ã¯ãªãã¿ãå¾ãææ®µã¨ãªãå¼æ°ãæ¢ãï¼:REF_DESC=æ¸¡ãææ®µã¨ãªãå¼æ°ãæ¢ã
+  #=== Celltype#ディスクリプタ型でシグニチャが一致し dyn_ref に対応づく引数を探す
+  #dyn_ref::Symbol: :DYNAMIC=ディスクリプタを得る手段となる引数を探す．:REF_DESC=渡す手段となる引数を探す
   def find_descriptor_param signature, dyn_ref
     param_list = []
@@ -1186,13 +1135,13 @@
   end
 
-  #=== Celltype# celltype ã«æ°ãã cell ãè¿½å 
+  #=== Celltype# celltype に新しい cell を追加
   #cell:: Cell
-  # æ°ããã»ã«ãã»ã«ã¿ã¤ãã«è¿½å ï¼
-  # ã»ã«ã®æ§æè§£éã®æå¾ã§ãã®ã¡ã½ããå¼åºãããï¼
-  # ã·ã³ã°ã«ãã³ã»ã«ãåã linkunit ã«è¤æ°ãªãããã§ãã¯
+  # 新しいセルをセルタイプに追加．
+  # セルの構文解釈の最後でこのメソドを呼出される．
+  # シングルトンセルが同じ linkunit に複数ないかチェック
   def new_cell( cell )
     dbgPrint "Celltype#new_cell( #{cell.get_name} )\n"
-    # Celltype ã§ã¯ Cell ã® set_owner ããªã
-    # ã·ã³ã°ã«ãã³ã§ããã­ãã¿ã¤ãå®£è¨ã§ãªãå ´åãã³ã¼ãçæå¯¾è±¡ãªã¼ã¸ã§ã³ã®å ´å
+    # Celltype では Cell の set_owner しない
+    # シングルトンで、プロトタイプ宣言でない場合、コード生成対象リージョンの場合
     if @singleton  then
       @cell_list.each{ |c|
@@ -1204,21 +1153,21 @@
     @cell_list << cell
 
-    # ãã©ã°ã¤ã³ã«ããçæãããã»ã«ã¿ã¤ãã ?
+    # プラグインにより生成されたセルタイプか ?
     if @plugin then
       @plugin.new_cell cell
     end
 
-    # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã®é©ç¨
+    # セルタイププラグインの適用
     celltype_plugin_new_cell cell
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ãã¯ INIB ãæã¤ãï¼
-  # ã»ã«ã¿ã¤ãã INIB ãæã¤ãã©ãããå¤å®ãã
-  # $rom == false ã®ã¨ã:  INIB ãæããªãï¼ ï¼ãã¹ã¦ã¯ CB ã«ç½®ãããï¼
-  # $rom == true ã®ã¨ããINIB ã«ç½®ããããã®ãä¸ã¤ã§ãå­å¨ããã° INIB ãæã¤
-  #   INIB ã«ç½®ããããã®ã¯
-  #     attribute (omit ã®ãã®ã¯é¤ãï¼ç¾ä»æ§ã§ã¯ rw ã®ãã®ã¯ãªã)
-  #     size_is ãä¼´ã var
-  #     å¼ã³å£ï¼ãã ããæé©åã§ä¸è¦ã¨ãªããã®ã¯é¤ãï¼
+  #=== Celltype# セルタイプは INIB を持つか？
+  # セルタイプが INIB を持つかどうかを判定する
+  # $rom == false のとき:  INIB を持たない． （すべては CB に置かれる）
+  # $rom == true のとき、INIB に置かれるものが一つでも存在すれば INIB を持つ
+  #   INIB に置かれるものは
+  #     attribute (omit のものは除く．現仕様では rw のものはない)
+  #     size_is を伴う var
+  #     呼び口（ただし、最適化で不要となるものは除く）
   def has_INIB?
 
@@ -1234,12 +1183,12 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ãã¯ CB ãæã¤ãï¼
-  # $rom == true ã®ã¨ããããã®ãã®ãç½®ãããï¼ãããã®ä¸ã¤ã§ãå­å¨ããã° CB ãæã¤
-  #   size_is ãæå®ããã¦ããªã var
-  #   rw æå®ããã attribute (ç¾ä»æ§ã§ã¯å­å¨ããªã)
-  # $rom == false ã®ã¨ããããã®ãã®ãç½®ãããï¼ãããã®ä¸ã¤ã§ãå­å¨ããã° CB ãæã¤
+  #=== Celltype# セルタイプは CB を持つか？
+  # $rom == true のとき、いかのものが置かれる．それらの一つでも存在すれば CB を持つ
+  #   size_is が指定されていない var
+  #   rw 指定された attribute (現仕様では存在しない)
+  # $rom == false のとき、いかのものが置かれる．それらの一つでも存在すれば CB を持つ
   #   attribute
   #   var
-  #   å¼ã³å£ï¼ãã ããæé©åã§ä¸è¦ã¨ãªããã®ã¯é¤ãï¼
+  #   呼び口（ただし、最適化で不要となるものは除く）
   def has_CB?
     if $rom then
@@ -1251,11 +1200,10 @@
   end
 
-  #=== Celltype# SET_CB_INIB_POINTER, INITIALIZE_CB ãå¿
-è¦ã
+  #=== Celltype# SET_CB_INIB_POINTER, INITIALIZE_CB が必要か
   def need_CB_initializer?
     @n_var_init > 0 || has_CB? || ( @n_call_port_dynamic && $ram_initializer )
   end
 
-  #=== Celltype# érequire ã®çµåãçæãã
+  #=== Celltype# 逆require の結合を生成する
   def create_reverse_require_join cell
     @port.each{ |p|
@@ -1264,15 +1212,14 @@
   end
 
-  #=== Celltype# singleton ã»ã«ãå¾ã
-  #region:: Region   : singleton ãæ¢ã Region
-  # è·é¢ãæãè¿ããã®ãè¿ã
-  # mikan æ¬å½ã¯ region ã®ç¯å²ã® singleton ãæ¢ãå¿
-è¦ããã
+  #=== Celltype# singleton セルを得る
+  #region:: Region   : singleton を探す Region
+  # 距離が最も近いものを返す
+  # mikan 本当は region の範囲の singleton を探す必要がある
   def get_singleton_cell region
     cell = nil
-    dist = 999999999 # mikan å¶éå¤ï¼ããã¯ååãããã»ã©ãã«ã¤ãï¼
-    # require: celltype ã§æå®
+    dist = 999999999 # mikan 制限値（これは十分すぎるほどデカイが）
+    # require: celltype で指定
     @cell_list.each{ |c|
-      # å°éå¯è½ã§æãè¿ãã»ã«ãæ¢ãï¼è¤æ°ã® singleton ããããããããªãï¼
+      # 到達可能で最も近いセルを探す（複数の singleton があるかもしれない）
       d = region.distance( c.get_region )
       #debug
@@ -1293,5 +1240,5 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãå¾ã
+  #=== Celltype# セルタイププラグインを得る
   def get_celltype_plugin
     if @generate then
@@ -1320,6 +1267,6 @@
   end
 
-  #=== Celltype# ã¢ã¯ãã£ãã§ã¯ãªãã
-  # ãã®ã¡ã½ããã§ã¯ active ã®ä»ã« factory (singleton ã«ããã¦ã¯ FACTORYãå«ã)ããªããã° inactive ã¨ãã
+  #=== Celltype# アクティブではないか
+  # このメソッドでは active の他に factory (singleton においては FACTORYを含む)がなければ inactive とする
   def is_inactive?
     if @active == false && @factory_list.length == 0 &&
@@ -1342,15 +1289,14 @@
   end
 
-  #=== Celltype# ã³ã¼ãçæããå¿
-è¦ããããå¤å®
-  # ã»ã«ã®åæ°ã 0 ãªãã»ã«ã¿ã¤ãã³ã¼ãã¯çæä¸è¦
+  #=== Celltype# コード生成する必要があるか判定
+  # セルの個数が 0 ならセルタイプコードは生成不要
   def need_generate?
     @n_cell_gen > 0
   end
 
-  #=== Celltype# require å¼ã³å£ã®çµåãè¡ã
+  #=== Celltype# require 呼び口の結合を行う
   # STAGE: S
-  # ã»ã«ã¿ã¤ãã® require å¼ã³å£ã«ã¤ãã¦ãçµåãè¡ã
-  # ã»ã«ãçæãããªãããã§ãã¯ãè¡ã
+  # セルタイプの require 呼び口について、結合を行う
+  # セルが生成されないかチェックを行う
   def set_require_join
     @require.each{ |req|
@@ -1368,6 +1314,6 @@
   end
 
-  #=== Celltype# inline åãå£ãããªããï¼
-  # åãå£ãç¡ãå ´åããã¹ã¦ã®åãå£ã inline ã¨ã¯ããªã
+  #=== Celltype# inline 受け口しかないか？
+  # 受け口が無い場合、すべての受け口が inline とはしない
   def is_all_entry_inline?
     @n_entry_port == @n_entry_port_inline && @n_entry_port > 0
@@ -1408,15 +1354,14 @@
 # @n_var:: int >= 0
 # @n_var_size_is:: int >= 0     # of [size_is] specified cells # mikan count_is
-# @n_var_omit:: int >= 0        # of [omit] specified  cells # mikan var ã® omit ã¯æï¼
+# @n_var_omit:: int >= 0        # of [omit] specified  cells # mikan var の omit は有？
 # @n_call_port:: int >= 0
 # @n_call_port_array:: int >= 0
-# @n_call_port_omitted_in_CB:: int >= 0   æé©åã§çç¥ãããå¼ã³å£
+# @n_call_port_omitted_in_CB:: int >= 0   最適化で省略される呼び口
 # @n_entry_port:: int >= 0
 # @n_entry_port_array:: int >= 0
     (indent+1).times { print "  " }
     puts "@n_entry_port_inline #{@n_entry_port_inline}"
-# @n_cell:: int >= 0  ã³ã¼ãçæã®é ­ã§ç®åºããï¼æå³è§£ææ®µéã§ã¯åç
-§ä¸å¯
-# @id_base:: Integer : cell ã® ID ã®æå°å¤(æå¤§å¤ã¯ @id_base + @n_cell)
+# @n_cell:: int >= 0  コード生成の頭で算出する．意味解析段階では参照不可
+# @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
 
   end
@@ -1424,8 +1369,7 @@
 
 class Cell < NSBDNode # < Nestable
-# @name:: Symbol : composite celltype ã®å
-å´ã®ã¤ã³ã¹ã¿ã³ã¹ã§ã¯å¤ã®ã»ã«
-# @global_name:: Symbol : C ã§ä½¿ããååï¼namespace ãå«ãï¼
-# @local_name:: str : cell celltype name { ... } ã® name
+# @name:: Symbol : composite celltype の内側のインスタンスでは外のセル
+# @global_name:: Symbol : C で使える名前（namespace を含む）
+# @local_name:: str : cell celltype name { ... } の name
 # @celltype:: Celltype | CompositeCelltype
 # @join_list:: NamedList
@@ -1434,68 +1378,55 @@
 # @b_prototype:: bool:  prototype specified in current parsing cell. (@b_defined is used to determine whether definition done)
 # @b_duplicate:: bool:  definition duplicate
-# @b_checked::   bool:  set_definition_join ãæ¸ãã§ããå ´å true
-# @require_joined_list:: {cp_name=>true}:  set_require_join ãæ¸ãã§ããå¼ã³å£ã¯ true
+# @b_checked::   bool:  set_definition_join が済んでいる場合 true
+# @require_joined_list:: {cp_name=>true}:  set_require_join が済んでいる呼び口は true
 # @f_ref:: refercenced from others
-# @entry_array_max_subscript:: { @port=>Integer } : åãå£é
-åã®é
-åæ·»æ°ã®æå¤§å¤ï¼æ·»æ°ç¡ãåãå£é
-åå¯¾å¿ï¼
+# @entry_array_max_subscript:: { @port=>Integer } : 受け口配列の配列添数の最大値（添数無し受け口配列対応）
 # @plugin::     Plugin: avialble if cell is generated by plugin generated cdl code.
-# @referenced_port_list:: { Port => Integer } : åãå£ã®åç
-§æ°
-#                                               ãã¹ã¦ã®æå³è§£æ(through, compositeå±é)ãçµãã£ãå¾ã«è¨­å®ãã
-#                                               érequire ãã¼ãã«å¯¾ãã¦è¤æ°ã®çµåããªãããã§ãã¯ãã
-# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin ã¯çæå¾ã«è¿½å ããã
+# @referenced_port_list:: { Port => Integer } : 受け口の参照数
+#                                               すべての意味解析(through, composite展開)が終わった後に設定する
+#                                               逆require ポートに対して複数の結合がないかチェックする
+# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
 # @b_post_code_generated:: Bool: true if generated in tmp_plugin_post_code.cdl
 #
-# composite ã®ããã¤ã³ã¹ã¿ã³ã¹å¤æ°
+# composite のためインスタンス変数
 # @in_composite:: bool : true if in composite celltype
 # @compositecelltypejoin_list:: NamedList : item= CompositeCelltypeJoin ( if @in_composite )
 # @f_cloned:: bool : true if cloned (instantiate of composite consist cell)
-# @my_clone:: Cell : Composite cell ã§ in_composite = true ã®å ´åã®ã¿æå¹ï¼ç´åã® clone ãä¸æè¨æ¶ï¼
-# @cell_list:: Cell[local_name] : Composite cell ã§ clone ããå¾ã®ãªã¹ã cell_list
-# @cell_list2:: [ Cell ] : Composite cell ã§ clone ããå¾ã®ãªã¹ã cell_list
-#                          @cell_list2 ã¯ composite å
-ã§ã®åºç¾é   
+# @my_clone:: Cell : Composite cell で in_composite = true の場合のみ有効（直前の clone を一時記憶）
+# @cell_list:: Cell[local_name] : Composite cell で clone した後のリスト cell_list
+# @cell_list2:: [ Cell ] : Composite cell で clone した後のリスト cell_list
+#                          @cell_list2 は composite 内での出現順  
 #
-# region ã®ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°
-# @region:: Region (å±ããregion)
+# region のためのインスタンス変数
+# @region:: Region (属するregion)
 #
-# allocator ã®ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°
+# allocator のためのインスタンス変数
 # @alloc_list::  [ [ NORMAL_ALLOC, ep_name, func_name, param_name, expr ], ... ]
-#   åãå£å´ã®ã¢ã­ã±ã¼ã¿ã¸ã®çµåãè¨æ¶ãä»¥ä¸ã®ã¡ã½ããã§è¿½å ããã
-#      set_specifier â¦ cell å®ç¾©æã«ã¢ã­ã±ã¼ã¿æå®ããã¦ããå ´å
-#      create_relay_allocator_join â¦ ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®å ´å
+#   受け口側のアロケータへの結合を記憶。以下のメソッドで追加される
+#      set_specifier … cell 定義時にアロケータ指定されている場合
+#      create_relay_allocator_join … リレーアロケータの場合
 #
-# ID ã®ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°ï¼optimize.rb ã«ã¦è¨­å®ï¼
-# @id:: Integer : ã³ã¼ãçæç´åã«è¨­å®  (ãã­ãã¿ã¤ãå®£è¨ã®å ´åã¯ -1 ã®ã¾ã¾æ¾ç½®)
-# @id_specified::Integer : æå®ããã id
+# ID のためのインスタンス変数（optimize.rb にて設定）
+# @id:: Integer : コード生成直前に設定  (プロトタイプ宣言の場合は -1 のまま放置)
+# @id_specified::Integer : 指定された id
 # @restrict_list::{ entry_name => { func_name, [ region_path_str, ... ] } }
 # @restrict_list2::{ entry_name => { func_name, [ domain_root_region, ... ] } }
-# @b_restrict_referenced::Bool: restrict_list ãåç
-§ãã
+# @b_restrict_referenced::Bool: restrict_list が参照れた
 
 =begin
-# Cell ã¯ã©ã¹ã¯ãä»¥ä¸ã®ãã®ãæ±ã
-# 1)æ®éã®ã»ã«
-# 2)composite ã»ã«ã¿ã¤ãã®ã»ã«
-# 3)composite ã»ã«ã¿ã¤ãã®å
-å´ã®ã»ã« (@in_composite)   # composite ã®å
-å´ã® composite ã»ã«ã¿ã¤ãã®ã»ã«ããã
+# Cell クラスは、以下のものを扱う
+# 1)普通のセル
+# 2)composite セルタイプのセル
+# 3)composite セルタイプの内側のセル (@in_composite)   # composite の内側の composite セルタイプのセルもある
 #
-# 2) ã¯ CellOfComposite ã¯ã©ã¹ã¨ãã¦åããã»ãããããããããªã
-#    expand (composite ã»ã«ã®å±é) ã¯ CellOfComposite ã«ã®ã¿å¿
-è¦ãªã¡ã½ããã§ãã
-#    get_real_cell, get_real_port ãªã© @celltype.instance_of?( CompositeCelltype ) ã®å¤å®ããªããã£ãããã
-#    ãã ãåé¢ãã¦ããã¡ã³ããã³ã¹ãã¹ãç¯å²ãåãé¢ããã¦ãã¾ããå¿ãããããªãåé¡ã¨ã®ãã¬ã¼ããªããã
+# 2) は CellOfComposite クラスとして分けたほうがよいかもしれない
+#    expand (composite セルの展開) は CellOfComposite にのみ必要なメソッドである
+#    get_real_cell, get_real_port など @celltype.instance_of?( CompositeCelltype ) の判定がなくすっきりする
+#    ただ、分離しても、メンテナンスすべき範囲が切り離されてしまい、忘れやすくなる問題とのトレードオフかも
 #
-# 3) ã¯ CellInCompoiste ã¯ã©ã¹ã¨ãã¦åããã»ãããããããããªã
-#    @in_composite ã§å¤å®ãã¦ããå¦çãåãé¢ãã (ä¸è¨ 2) ãããåé¢ã¯å®¹æã§ã¯ãªã)
-#    clone_for_composite ã¯ CellInCompoiste ã«ã®ã¿å¿
-è¦ãªã¡ã½ããã§ãã
-#    ãã ããclone å¾ã« Cell, CellOfComposite ã«å¤åããå¿
-è¦ãããã®ã§ãclone ã§ã¯ãªã new ããå®è£
-ã«å¤æ´ããå¿
-è¦ããã
+# 3) は CellInCompoiste クラスとして分けたほうがよいかもしれない
+#    @in_composite で判定している処理を切り離せる (上記 2) よりも分離は容易ではない)
+#    clone_for_composite は CellInCompoiste にのみ必要なメソッドである
+#    ただし、clone 後に Cell, CellOfComposite に変化する必要があるので、clone ではなく new する実装に変更する必要がある
 #
 =end
@@ -1507,11 +1438,8 @@
   @@current_object = nil
 
-  # å®ç¾©ããããã¹ã¦ã®ã»ã«ï¼åºç¾é . namespace ã«å½±é¿ãããªãï¼
-  @@cell_list = []     # composite ã®å
-é¨ã®ã»ã«ãå«ã¾ãªã
-  @@cell_list2 = []    # composite ã®å
-é¨ã®ã»ã«ãå«ã (å
-ã®ã»ã«ãå«ã)
-                       # æå³è§£æå¾ make_cell_list2 ã«ã¦è¨­å®ããã
+  # 定義されたすべてのセル（出現順. namespace に影響されない）
+  @@cell_list = []     # composite の内部のセルを含まない
+  @@cell_list2 = []    # composite の内部のセルを含む (元のセルを含む)
+                       # 意味解析後 make_cell_list2 にて設定される
 
   def self.push
@@ -1533,13 +1461,11 @@
     @region = Region.get_current
 
-    # celltype ã®plugin/å­å¨ããã§ãã¯
+    # celltype のplugin/存在をチェック
     object = Namespace.find( ct_path )    #1
     if object == nil then
-      # mikan celltype ã®ååãä¸å®å
-¨ "::ct1ct2" ã«ãªã
+      # mikan celltype の名前が不完全 "::ct1ct2" になる
       cdl_error( "S1027 \'$1\' celltype not found" , ct_path.get_path_str )
     elsif ! object.instance_of?( Celltype ) && ! object.instance_of?( CompositeCelltype ) then
-      # mikan celltype ã®ååãä¸å®å
-¨
+      # mikan celltype の名前が不完全
       cdl_error( "S1028 \'$1\' not celltype" , ct_path.get_path_str )
     else
@@ -1592,8 +1518,7 @@
     end
 
-    # ãã®æç¹ã§ã¯ãã­ãã¿ã¤ãããå®ç¾©ãåããªãããèªå·±åç
-§ã®ããã«ç»é²
-    # set_f_def ã§ååº¦ç»é²ããªãã
-    # Celltype ã¸ã®ç»é²ã¯ãend_of_parse ã§è¡ã
+    # この時点ではプロトタイプか、定義か分らないが、自己参照のために登録
+    # set_f_def で再度登録しなおす
+    # Celltype への登録は、end_of_parse で行う
     if @in_composite then
       cell_prev = CompositeCelltype.find( name )
@@ -1602,9 +1527,9 @@
       end
     else
-      # cell_prev = Namespace.find( [ name ] )   # è¦ªã¾ã§æãã«ãã
+      # cell_prev = Namespace.find( [ name ] )   # 親まで捜しにいく
       cell_prev = Namespace.get_current.find( name )
       if cell_prev == nil then
         Namespace.new_cell( self )
-        set_namespace_path # @NamespacePath ã®è¨­å®
+        set_namespace_path # @NamespacePath の設定
       end
     end
@@ -1613,9 +1538,9 @@
       if ! cell_prev.instance_of?( Cell ) then
         cdl_error( "S1029 $1 mismatch with previous one" , name )
-        # celltype ãä¸è´ãã¦ããã ?
+        # celltype が一致しているか ?
       elsif get_celltype != cell_prev.get_celltype then
         cdl_error( "S1030 $1: celltype mismatch with previous one" , name )
       else
-        # region ãä¸è´ãã¦ããã?
+        # region が一致しているか?
         if ! cell_prev.get_region.equal? get_region then
           cdl_error( "S1031 $1 region \'$2\' mismatch  with previous one \'$3\'" , name, @region.get_name, cell_prev.get_region.get_name )
@@ -1623,6 +1548,6 @@
 
         @@current_object = cell_prev
-        # ãã®æç¹ã§ã¯ãã¾ã ãã­ãã¿ã¤ãå®£è¨ãå®ç¾©ãåããªã
-        # ä»¥åãå®ç¾©ã§ãã£ã¦ãä»åãå®ç¾©ã®å ´åãéè¤ã¨ã©ã¼ã§ãã
+        # この時点では、まだプロトタイプ宣言か定義か分らない
+        # 以前が定義であって、今回も定義の場合、重複エラーである
       end
     end
@@ -1634,10 +1559,9 @@
     dbgPrint "Cell new_cell: #{@global_name} #{@in_composite} #{self}\n"
 
-    # å
-é¨ã¢ã­ã±ã¼ã¿ã @alloc_list ã«è¿½å 
+    # 内部アロケータを @alloc_list に追加
     if @celltype.instance_of? CompositeCelltype then
       @celltype.get_internal_allocator_list.each{ |cell, cp_internal_name, port_name, fd_name, par_name, ext_alloc_ent|
         nsp = NamespacePath.new( @name, false )
-        rhs = Expression.new( [:OP_DOT, [:IDENTIFIER, nsp], Token.new( ext_alloc_ent.to_s.to_sym, nil, nil, nil ) ] )  #1 æ§æè§£ææ®µéãªã®ã§ locale ä¸è¦
+        rhs = Expression.new( [:OP_DOT, [:IDENTIFIER, nsp], Token.new( ext_alloc_ent.to_s.to_sym, nil, nil, nil ) ] )  #1 構文解析段階なので locale 不要
 
         @alloc_list << [:NORMAL_ALLOC,port_name,nil,fd_name,par_name,rhs]
@@ -1647,25 +1571,25 @@
   end
 
-  #=== Cell# cell ã®å®ç¾©
-  # æ¬ä½(join)ã®å®ç¾©ã®ç´åã«å¼ã³åºããã
+  #=== Cell# cell の定義
+  # 本体(join)の定義の直前に呼び出される
   def self.new_def
     @@current_object.new_def
   end
 
-  #=== Cell# cell ã®å®ç¾©
-  # æ¬ä½(join)ã®å®ç¾©ã®ç´åã«å¼ã³åºããã
-  # ãã®ã¡ã½ããã¯ cell tCelltype Cell { };  '{', '}' ã®é¨åãããå ´åã«å¼åºããã
+  #=== Cell# cell の定義
+  # 本体(join)の定義の直前に呼び出される
+  # このメソッドは cell tCelltype Cell { };  '{', '}' の部分がある場合に呼出される
   def new_def
     set_specifier_list( Generator.get_statement_specifier )
 
-    # prototype æå®å­ãªãã
+    # prototype 指定子ないか
     if ! @b_prototype then
-      # äºéå®ç¾©ã®ãã§ãã¯
+      # 二重定義のチェック
       if @b_defined == true then
         cdl_error( "S1032 $1: duplicate cell" , @name )
         dbgPrint "previous: #{@prev_locale[0]}: line #{@prev_locale[1]} '#{@name}' defined here\n"
 
-        # ã»ã«ã®éè¤å®ç¾©ã¨ã©ã¼ã®å¦ç½®
-        # åã®å®ç¾©ã¯æ¨ã¦ã
+        # セルの重複定義エラーの処置
+        # 前の定義は捨てる
         @join_list = NamedList.new( nil, "in cell '#{@name}'" )
       end
@@ -1680,38 +1604,36 @@
   end
 
-  #===  Cell# æ°ããçµåããã§ãã¯
+  #===  Cell# 新しい結合をチェック
   # STAGE:   P
   #
-  #join::  Join : æ°ããçµå
-  #b_regular:: bool : éå¸¸ã®å ´æ (bnf.y.rb)ãããªãã° true, ããä»¥å¤(allocator, require) ã§ã¯ false
+  #join::  Join : 新しい結合
+  #b_regular:: bool : 通常の場所 (bnf.y.rb)からならば true, それ以外(allocator, require) では false
   def new_join( join, b_regular = false )
     join.set_owner self
 
-    # composite ã®æ°ææ³å¯¾å¿ï¼
-    # composite ã®ä¸­ã®ã»ã«ã§ãattribute ã®å®ç¾©ã§ããå ´å
-    # cell å
-ã® attr_ext = composite.attr; æ§æãå¦ç
+    # composite の新文法対応．
+    # composite の中のセルで、attribute の定義である場合
+    # cell 内の attr_ext = composite.attr; 構文を処理
     if @in_composite then
       if @celltype then
-        if @celltype.find(join.get_name).instance_of?( Decl ) then # mikan a::b ã§æå®ããã¦ãããã®ãã¨ã©ã¼ã«ãªããªããã
+        if @celltype.find(join.get_name).instance_of?( Decl ) then # mikan a::b で指定されていたものがエラーにならないかも
           rhs = join.get_rhs
           if rhs.instance_of? Expression then
             ele = rhs.get_elements
-            if( ele[0]==:IDENTIFIER )then    #  attr = attr_ext ï¼å³è¾ºåé 
-ï¼ãï¼ #1
-              if( CompositeCelltype.has_attribute?(ele[1].get_name ) )then    # mikan a::b.ePort ãã¨ã©ã¼ã«ãªããªããã
-                ident = ele[1].get_name   # å³è¾ºã¯ attributeï¼
+            if( ele[0]==:IDENTIFIER )then    #  attr = attr_ext （右辺単項）か？ #1
+              if( CompositeCelltype.has_attribute?(ele[1].get_name ) )then    # mikan a::b.ePort がエラーにならないかも
+                ident = ele[1].get_name   # 右辺は attribute．
               else
-                # å³è¾ºã¯ attribute ã«ãªãã®ã§ããã°ãå®æ°ã®ã¯ã
-                # å®æ°ã¯ä¸ã¸æ¸¡ã (cell ã® join ã«ãã)
+                # 右辺は attribute にないのであれば、定数のはず
+                # 定数は下へ渡す (cell の join にする)
                 ident = nil
               end
             else
-              if join.get_rhs.eval_const2(nil) == nil then   # å®æ°å¼ã§ã¯ãªããï¼
-                # å³è¾ºããåä¸ã®ã·ã³ãã«ã§ãªãå ´åãç¾ç¶ã¯æ±ããªã
+              if join.get_rhs.eval_const2(nil) == nil then   # 定数式ではないか？
+                # 右辺が、単一のシンボルでない場合、現状は扱えない
                 cdl_error( "S1033 rhs expression is not supported. Only attribute is permitted on current version."  )
                 return
               else
-                # å®æ°ã¯ä¸ã¸æ¸¡ã (cell ã® join ã«ãã)
+                # 定数は下へ渡す (cell の join にする)
                 ident = nil
               end
@@ -1719,7 +1641,5 @@
 
             if ident then
-              # attr = attr; ã®ãããªåç
-§ã¯ã¨ã©ã¼ (a = composite.a ã¨ããå¿
-è¦ããã)
+              # attr = attr; のような参照はエラー (a = composite.a とする必要がある)
               if @celltype.find( ident ) then
                 cdl_error( "S1034 $1 : cannot refer to $2\'s attribute here. Use \'composite.$3\' to refer to composite celltype\'s" , ident, @celltype.get_name, ident )
@@ -1727,18 +1647,18 @@
             end
           elsif rhs.instance_of? Array then
-            if rhs[0] == :COMPOSITE then   # å³è¾ºã¯ composite.attr ã®å½¢å¼
+            if rhs[0] == :COMPOSITE then   # 右辺は composite.attr の形式
               ident = rhs[1].to_sym
             else
-              ident = nil    # å³è¾ºã¯ { 10, -10 } ã®å½¢å¼
+              ident = nil    # 右辺は { 10, -10 } の形式
             end
           else
-            ident = nil      # å³è¾ºã¯ C_EXP ã®å½¢å¼
+            ident = nil      # 右辺は C_EXP の形式
           end
 
-          # ident ãè¦ã¤ãã£ãï¼å³è¾ºã¯åä¸ã® identï¼
+          # ident が見つかった（右辺は単一の ident）
           if ident then
-            # composite ã®æ§ææ³ã®æ§æå¦çã¸æ¸¡ãï¼ã»ã«å¤ã® attr_ext = Cell.attr; æ§æã®å¦çã«æ¸¡ã
+            # composite の旧文法の構文処理へ渡す．セル外の attr_ext = Cell.attr; 構文の処理に渡す
             #                        export_name, internal_cell_name, internal_cell_elem_name
-            decl = CompositeCelltype.new_join( ident, @name, join.get_name, :ATTRIBUTE )  # mikan a::b.ePort ãã¨ã©ã¼ã«ãªããªããã
+            decl = CompositeCelltype.new_join( ident, @name, join.get_name, :ATTRIBUTE )  # mikan a::b.ePort がエラーにならないかも
             if ! decl.instance_of? Decl then
               return
@@ -1748,23 +1668,22 @@
               return
             end
-            # ä»¥ä¸ã®æ§ææ³å®è£
-ã«æ¸¡ãï¼
-            # æ§ææ³ã§ã¯ cell ã«åæå¤ãä¸ãããã¨ã§ãcomposite ã§å±æ§ã®åæå¤ãæå®ãããã¨ãã§ãã
-            # attribute ã§æå®ãããåæå¤ã cell ã®å±æ§ã¨ãã¦å¦çããã
+            # 以下の旧文法実装に渡す．
+            # 旧文法では cell に初期値を与えることで、composite で属性の初期値を指定することができた
+            # attribute で指定された初期値を cell の属性として処理させる
             join.change_rhs( ini )
           else
-            # ident ããªãï¼å®æ°å¼
+            # ident がない．定数式
           end
         else
-          # celltype ã®å±æ§ã¨ãã¦ããã® join ã®ååããªã
-          # ä»¥ä¸ã® join.set_definition ã®ä¸­ã§ã¨ã©ã¼ã¨ãªã
+          # celltype の属性として、この join の名前がない
+          # 以下の join.set_definition の中でエラーとなる
         end
       else
-        return    # celltype ããªãï¼ãã§ã«ã¨ã©ã¼
+        return    # celltype がない．すでにエラー
       end
     elsif join.get_rhs.instance_of? Array then
       rhs = join.get_rhs
       if rhs[0] == :COMPOSITE then
-        # composite ã®ä¸­ã§ãªãã®ã« attr = composite.attr ãä½¿ããã
+        # composite の中でないのに attr = composite.attr が使われた
         cdl_error( "S1035 composite : cannot specify out of composite celltype definition"  )
         return
@@ -1772,14 +1691,13 @@
     end
 
-    # ä»¥ä¸ composite ææ³å¤æ´åããããå¦ç
-
-    # æ¢ã«å·¦è¾ºãåãååã®åæåãå­å¨ãããï¼
-    j = @join_list.get_item( join.get_name )   # mikan NamespacePath ããã¹ãæã£ã¦ãã
-    if j.instance_of? Join then    # mikan ããã§ã¯ j ã Join or Nil ä»¥å¤ã¯ããªãã¯ã
+    # 以下 composite 文法変更前からある処理
+
+    # 既に左辺が同じ名前の初期化が存在するか？
+    j = @join_list.get_item( join.get_name )   # mikan NamespacePath がパスを持っている
+    if j.instance_of? Join then    # mikan ここでは j が Join or Nil 以外は、ないはず
 
       # debug
       dbgPrint "add_array_member: #{@name} port: #{j.get_port_name} rhs: #{j.get_rhs}, #{join.get_port_name} #{join.get_rhs}\n"
-      # å¼ã³å£é
-åï¼ã§ããã¨ä»®å®ãã¦ï¼è¦ç´ ãè¿½å 
+      # 呼び口配列（であると仮定して）要素を追加
       j.add_array_member join
 
@@ -1790,5 +1708,5 @@
     end
 
-    # if get_owner then   # error S1030 çºçæ get_owner ãè¦ã¤ãããªãã¦ä¾å¤ã«ãªã
+    # if get_owner then   # error S1030 発生時 get_owner が見つからなくて例外になる
     #   dbgPrint "Cell#new_join: #{get_owner.get_name}.#{@name}\n"
     # else
@@ -1804,10 +1722,10 @@
   end
 
-  #=== Cell.æ°ããéçµå
+  #=== Cell.新しい逆結合
   def self.new_reverse_join( reverse_join )
     @@current_object.new_reverse_join( reverse_join )
   end
 
-  #=== Cell#æ°ããéçµå
+  #=== Cell#新しい逆結合
   def new_reverse_join( reverse_join )
     dbgPrint( "new_reverse_join name=#{reverse_join.get_name}\n")
@@ -1834,5 +1752,5 @@
   end
 
-  #=== Cell#éçµåããçµåãçæ
+  #=== Cell#逆結合から結合を生成
   # STAGE: S
   def create_reverse_join
@@ -1844,10 +1762,9 @@
 #      @reverse_join_list.get_items.each{ |rj|
       @reverse_join_list.each{ |rj|
-        # éçµåã®æ
-å ±ãå¾ã
+        # 逆結合の情報を得る
         ep_name = rj.get_name
         ep_subscript, cp_cell_nsp, cp_name, cp_subscript = rj.get_rhs_cell_and_port
 
-        # å¼ã³å£å´ã®ã»ã«ã¨ããã®ã»ã«ã¿ã¤ã
+        # 呼び口側のセルと、そのセルタイプ
         if ! @in_composite then
           cell = Namespace.find cp_cell_nsp
@@ -1891,21 +1808,19 @@
   end
 
-  #=== Cell# cell å
-ã«è¨è¿°ããå¼ã³å£ã®å¤é¨çµå
-  # internal_cell_elem_name:: string : å¼ã³å£å
-  # export_name:: string: composite ã®å¤é¨ã«å
-¬éããå¼ã³å£å
-  #  å¼ã³å£ãå¤é¨çµåããï¼
-  #  ãã®ã¡ã½ããã¯ãcomposite ã®ä¸­ã® cell ã§ããå¼ã°ããªãï¼
+  #=== Cell# cell 内に記述する呼び口の外部結合
+  # internal_cell_elem_name:: string : 呼び口名
+  # export_name:: string: composite の外部に公開する呼び口名
+  #  呼び口を外部結合する．
+  #  このメソッドは、composite の中の cell でしか呼ばれない．
   def external_join( internal_cell_elem_name, export_name, b_composite )
 
-    # cCall => composite.cCall; ã§ã¯ãªããï¼
+    # cCall => composite.cCall; ではないか？
     if( b_composite == false )then
-      # cCall => cCall; ã®ãããªå ´å
+      # cCall => cCall; のような場合
       if @celltype.find( export_name ) then
         cdl_error( "S1036 $1 : cannot refer to $2\'s here. Use \'composite.$3\' to refer to composite celltype\'s" , export_name, @celltype.get_name, export_name )
       end
     end
-    # composite ã®æ§ææ³ã«ããããcell å¤ã® cCall = Cell.cCall; ã®æ§æå¦çã«æ¸¡ã
+    # composite の旧文法における、cell 外の cCall = Cell.cCall; の構文処理に渡す
     CompositeCelltype.new_join( export_name, @name,  internal_cell_elem_name, :CALL )
   end
@@ -1919,11 +1834,11 @@
 
   def end_of_parse f_def
-    if @b_prototype then  # prototype æå®å­ãã£ãã?
-      f_def = false       # ãã­ãã¿ã¤ãå®£è¨ã¨ãã
+    if @b_prototype then  # prototype 指定子あったか?
+      f_def = false       # プロトタイプ宣言とする
       @b_prototype = false
     end
     if f_def == false then
-      # cell tCelltype Cell; ã®å½¢å¼ã®å ´å
-      # f_def == true ã®å ´å new_def ã§ãå¼åºããã
+      # cell tCelltype Cell; の形式の場合
+      # f_def == true の場合 new_def で、呼出される
       set_specifier_list( Generator.get_statement_specifier )
     end
@@ -1938,6 +1853,6 @@
   end
 
-  #=== Cell# ãã­ãã¿ã¤ãå®£è¨(false)ãå®ç¾©(true)ããè¨­å®
-  #    ãã®ã¡ã½ããã¯æ§æè§£éã®æå¾ã«å¼åºããã
+  #=== Cell# プロトタイプ宣言(false)か定義(true)かを設定
+  #    このメソッドは構文解釈の最後に呼出される
   #f_def::     bool     false if prototype, true if definition
   def set_f_def f_def
@@ -1948,5 +1863,5 @@
     if ! @in_composite then
       # if @celltype.instance_of? Celltype then
-      if @celltype then  # composite ã§ãå¼ã³ã ã, ã¨ã©ã¼æ nil
+      if @celltype then  # composite でも呼びだす, エラー時 nil
         @celltype.new_cell self
       end
@@ -1959,10 +1874,6 @@
     @f_ref = true
 
-    # composite ã®å
-é¨ã»ã«ãåç
-§ããããã¨ã«ãã
-    # ä»ã®ã¨ããåé¡ãªãããæªåç
-§ã§ããã¹ããã®ã¾ã§åç
-§ããããã¨ã«ãªã
+    # composite の内部セルを参照されたことにする
+    # 今のところ問題ないが、未参照であるべきものまで参照されたことになる
     if @cell_list then
       @cell_list.each{ |cn,cell|
@@ -1972,29 +1883,26 @@
   end
 
-  #=== Cell# cell ã®æå®å­ãè¨­å®
+  #=== Cell# cell の指定子を設定
   # STAGE:  B
   #
-  #    bnf.y.rb ã® statement_specifiler_list
+  #    bnf.y.rb の statement_specifiler_list
   #spec_list::      [ :ALLOCATOR, [ [ :NORMAL_ALLOC, ep_name, subscript, func_name, param_name, expr ], ... ] ]
   #                     s[0]      s[1]   a[0]        a[1]       a[2]        a[3]     a[4]       a[5]
-  #    ã»ã«ã«æå®ãããã¢ã­ã±ã¼ã¿æå®å­
-  #    a[1] ã® subscript ã¯ãã®ã¡ã½ããã®ä¸­ã§ Expression ãã Integer ã«è©ä¾¡ããã
-  #    åãå£å´ã«çæãããã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãå
-é¨çæãã
-  #    å¼ã³å£å´ã¯ Port ã® create_allocator_join ã«ã¦çæ
-  #    ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®å ´å create_relay_allocator_join ã«ã¦çæã
+  #    セルに指定されたアロケータ指定子
+  #    a[1] の subscript はこのメソッドの中で Expression から Integer に評価される
+  #    受け口側に生成されるアロケータ呼び口の結合を内部生成する
+  #    呼び口側は Port の create_allocator_join にて生成
+  #    リレーアロケータの場合 create_relay_allocator_join にて生成す
   def set_specifier_list( spec_list )
-    return if spec_list == nil  # ç©ºãªãã°ä½ãããªã
+    return if spec_list == nil  # 空ならば何もしない
 
     dbgPrint( "set_spec_list: #{@name}\n" )
-    b_generate = false   # generate ãæå®ããã
+    b_generate = false   # generate が指定された
 
     spec_list.each{ |s|
       case s[0]             # statement_specifier
       when :ALLOCATOR       # [allocator(ePort.func.param=allocCell.eA,ePort.func2.param=allocCell.eA)]
-        s[1].each { |a|     # alloc_list : allocator ã®å
-é¨ã® ',' ã§åºåãããé¨åã®é
-å
-          cp_name = :"#{a[0+1]}_#{a[2+1]}_#{a[3+1]}"    # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®ååï¼'=' ã®å·¦è¾ºã '.' ã«å¤ãã¦ '_' ã§é£çµ
+        s[1].each { |a|     # alloc_list : allocator の内部の ',' で区切られた部分の配列
+          cp_name = :"#{a[0+1]}_#{a[2+1]}_#{a[3+1]}"    # アロケータ呼び口の名前：'=' の左辺を '.' に変えて '_' で連結
           # p "#{a[0]} #{a[0+1]} #{a[2+1]} #{a[3+1]} #{cp_name}"
           if a[1+1] then
@@ -2004,6 +1912,6 @@
             subscript = nil
           end
-          # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãçæ
-          join = Join.new( cp_name, subscript, a[4+1] )   # æ§æè§£ææ®µéãªã®ã§ locale ä¸è¦
+          # アロケータ呼び口の結合を生成
+          join = Join.new( cp_name, subscript, a[4+1] )   # 構文解析段階なので locale 不要
           dbgPrint( "new allocator join #{cp_name} #{subscript} #{a[4+1]}\n" )
           Cell.new_join( join )
@@ -2051,6 +1959,6 @@
   def get_allocator_list
 
-    # æå³ãã§ãã¯(set_definition)ããã¦ããªãï¼
-    # relay ã¢ã­ã±ã¼ã¿ã®å ´åãã»ã«ã®æå³ãã§ãã¯ãè¡ããã¦ããªãã¨ã@alloc_list ãå®æããªã
+    # 意味チェック(set_definition)されていない？
+    # relay アロケータの場合、セルの意味チェックが行われていないと、@alloc_list が完成しない
     if @b_checked == false then
       set_definition_join
@@ -2063,7 +1971,7 @@
   end
 
-  #=== id æå®å­ã®å¤ãè¨­å®
-  # ãã®ã¡ã½ããã¯ããã©ã°ã¤ã³ã§ cell ã®çæé åºãå¶å¾¡ãããå ´åã®ããã«è¨­ãã
-  # éå¸¸ã® id æå®å­ã§ã¯ä½¿ã£ã¦ããªã
+  #=== id 指定子の値を設定
+  # このメソッドは、プラグインで cell の生成順序を制御したい場合のために設けた
+  # 通常の id 指定子では使っていない
   def set_specified_id id
     if Integer( id ) != id || id <= 0 then
@@ -2076,5 +1984,5 @@
   end
 
-  #=== Cell# ã»ã«ãã©ã°ã¤ã³ (generate æå®å­)
+  #=== Cell# セルプラグイン (generate 指定子)
   def cell_plugin
     plugin_name = @generate[0]
@@ -2089,5 +1997,5 @@
 
     plClass = load_plugin( plugin_name, CellPlugin )
-    # return if plClass == nil # å¾æ¥ã¨ä»æ§ãå¤ããã®ã§ãç¶ç¶ãã
+    # return if plClass == nil # 従来と仕様が変わるので、継続する
     if $verbose then
       print "new cell plugin: plugin_object = #{plClass.class.name}.new( #{@name}, #{option} )\n"
@@ -2109,12 +2017,11 @@
   end
 
-  #=== Cell# cell ã composite ã»ã«ã¿ã¤ãã®ã»ã«ç¨ã« clone ãã
-  #name::        string : è¦ª cell ã®åå  (cell tComposite cell1 ã§ã® cell1)
-  #global_name:: string : è¦ª cell ã® global_name 
-  #join_array::  Join[] : composite ã® cell ã® join ã§ããã® cell ã«å¯¾å¿ãããã®
-  #ct_name::     string : è¦ªã»ã«ã®ã»ã«ã¿ã¤ãå
-  #region::      Region : å
-ã®ã»ã«ãå±ãã region
-  #ãã®ã¡ã½ããã¯ CompositeCelltype ã® expand ããå¼åºããã
+  #=== Cell# cell を composite セルタイプのセル用に clone する
+  #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
+  #global_name:: string : 親 cell の global_name 
+  #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
+  #ct_name::     string : 親セルのセルタイプ名
+  #region::      Region : 元のセルが属する region
+  #このメソッドは CompositeCelltype の expand から呼出される
   def clone_for_composite( name, global_name, namespacePath, join_array, ct_name, region, plugin, locale )
 
@@ -2125,13 +2032,11 @@
     @my_clone = self.clone
 
-    # clone ããã»ã«ã®å
-é¨ã«æã¤ååæ
-å ±ãèª¿æ´ãã
+    # clone したセルの内部に持つ名前情報を調整する
     @my_clone.set_cloned( name, global_name, namespacePath, join_array, ct_name, region, plugin, locale )
 
-    # @celltype == nil ã¯ä»¥åã«ã»ã«ã¿ã¤ãæªå®ç¾©ã¨ã©ã¼
+    # @celltype == nil は以前にセルタイプ未定義エラー
     if @b_defined == true && @celltype != nil then
       if @celltype.instance_of?( Celltype ) then
-        # celltype ã«ç»é²ï¼ã³ã¼ãçæã®å¯¾è±¡ã¨ãªãï¼
+        # celltype に登録（コード生成の対象となる）
         @celltype.new_cell( @my_clone )
       end
@@ -2141,12 +2046,10 @@
   end
 
-  #=== Cell# clone ãããã»ã«ã®å
-é¨ã«æã¤ååæ
-å ±ãèª¿æ´ãã
-  #name::        string : è¦ª cell ã®åå  (cell tComposite cell1 ã§ã® cell1)
-  #global_name:: string : è¦ª cell ã® global_name
-  #join_array::  Join[] : composite ã® cell ã® join ã§ããã® cell ã«å¯¾å¿ãããã®
-  #parent_ct_name:: string : è¦ªã»ã«ã®ã»ã«ã¿ã¤ãåï¼composite ã»ã«ã¿ã¤ãï¼
-  #  ãã®ã¡ã½ããã¯ããä¸ã® clone_for_composite ããå¼åºãããclone ãããã»ã«ãæ´ãã
+  #=== Cell# clone されたセルの内部に持つ名前情報を調整する
+  #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
+  #global_name:: string : 親 cell の global_name
+  #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
+  #parent_ct_name:: string : 親セルのセルタイプ名（composite セルタイプ）
+  #  このメソッドはすぐ上の clone_for_composite から呼出され、clone されたセルを整える
   def set_cloned( name, global_name, namespacePath, join_array, parent_ct_name, region, plugin, locale )
 
@@ -2165,8 +2068,8 @@
     @f_cloned = true
 
-    # Namespace.new_cell( self )  # mikan namespace å¯¾å¿
-    region.new_cell( self )  # mikan  namespace ã« cell ãç½®ããªããã¨ãä»®å®
-
-    # join_list : NamedList ã® clone ãä½ã
+    # Namespace.new_cell( self )  # mikan namespace 対応
+    region.new_cell( self )  # mikan  namespace に cell を置けないことを仮定
+
+    # join_list : NamedList の clone を作る
     if @celltype then
       dbgPrint "set_cloned: #{@celltype.get_name} #{@name} #{region.get_name}\n"
@@ -2181,6 +2084,6 @@
     @cell_list2 = []
 
-    # ãã®ã»ã«ã®ã°ã­ã¼ãã«åãä¸ãã
-    # C_EXP ã®$id$ ç½®æã¯ãã®ã»ã«ã®ååã«ãªã
+    # このセルのグローバル名を与える
+    # C_EXP の$id$ 置換はこのセルの名前になる
     join_array.each { |j|
       @join_list.change_item j
@@ -2188,7 +2091,6 @@
   end
 
-  #=== clone ãããã»ã«ã composite ã®å ´åãå
-é¨ã»ã«ãå±éãã
-  #self:: clone ãããã»ã«ã§ãªããã°ãªããªã
+  #=== clone されたセルが composite の場合、内部セルを展開する
+  #self:: clone されたセルでなければならない
   def expand_inner
     if ! @f_cloned then
@@ -2196,13 +2098,13 @@
     end
 
-    # clone ãããã¨ããã»ã«ã composit ã»ã«ã¿ã¤ãï¼
+    # clone しようとするセルが composit セルタイプ？
     if @celltype.instance_of?( CompositeCelltype ) then
-      # composite cell ãåå¸°çã«å±é
+      # composite cell を再帰的に展開
       @cell_list, @cell_list2 = @celltype.expand( @name, @global_name, @NamespacePath, @join_list, @region, @plugin, @locale )
     end
   end
 
-  #=== Cell# clone ããã cell ã® join_list ã®å³è¾ºã®å¤æ´
-  #  å¼ã³å£ã®å³è¾ºã® cell ãä»ã® clone ããã cell ã«ç½®æã
+  #=== Cell# clone された cell の join_list の右辺の変更
+  #  呼び口の右辺の cell を他の clone された cell に置換え
   def change_rhs_port cloned_cell_list
 
@@ -2247,9 +2149,9 @@
   end
 
-  #=== Cell# çæãããã»ã«ãï¼
-  # æé©åãã³ã¼ãçæä¸­ã«ãå¯¾è±¡ã¨ãªã region ã«å±ããå ´å true ãè¿ã
+  #=== Cell# 生成されるセルか？
+  # 最適化、コード生成中に、対象となる region に属する場合 true を返す
   def is_generate?
     if $generating_region == nil then
-      # æ§æè§£éãæå³è§£ææ®µéã§å¼ã°ããã¨ä¾å¤çºç
+      # 構文解釈、意味解析段階で呼ばれると例外発生
       raise "is_generate? called before optimizing"
     end
@@ -2263,19 +2165,16 @@
   end
 
-  #=== Cell# composite å
-é¨ã®è¤è£½ãããã»ã«ãï¼
-  # composite å®ç¾©ã®å
-é¨ã®ã»ã« (@in_composite = true) ã§ã¯ãªã
+  #=== Cell# composite 内部の複製されたセルか？
+  # composite 定義の内部のセル (@in_composite = true) ではない
   def is_cloned?
     @f_cloned
   end
 
-  #=== Cell# composite å
-é¨ã®ã»ã«ãï¼
+  #=== Cell# composite 内部のセルか？
   def is_in_composite?
     @in_composite
   end
 
-  #=== Cell# composite ã®ã»ã«ãï¼
+  #=== Cell# composite のセルか？
   def is_of_composite?
     if @celltype.kind_of? CompositeCelltype
@@ -2286,12 +2185,10 @@
   end
 
-  #=== Cell# tmp_plugin_post_code.cdl ã§çæãããã»ã«ãï¼
+  #=== Cell# tmp_plugin_post_code.cdl で生成されたセルか？
   def post_code_generated?
     @b_post_code_generated
   end
 
-  # composite cell ã® port ã«å¯¾å¿ããå
-é¨ã® cell ã® port ã®ååï¼ãªã³ã¯æã«å¿
-è¦ãªååï¼
+  # composite cell の port に対応する内部の cell の port の名前（リンク時に必要な名前）
   def get_real_global_name port_name
     if @celltype.instance_of?( CompositeCelltype ) then
@@ -2321,9 +2218,9 @@
   end
 
-  #=== Cell# ã»ã«ã®åãå£ port_name ã«å¯¾ããå®éã®ã»ã«åãåãå£åã '_' ã§é£çµ
-  #    namespace å + '_' + ã»ã«å + '_' + åãå£å   ï¼ãã®ã»ã«ã composite ãªãã°å±éå¾ã®ã»ã«åãåãå£åï¼
+  #=== Cell# セルの受け口 port_name に対する実際のセル名、受け口名を '_' で連結
+  #    namespace 名 + '_' + セル名 + '_' + 受け口名   （このセルが composite ならば展開後のセル名、受け口名）
   def get_real_global_port_name port_name
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
@@ -2336,7 +2233,5 @@
       }
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port_name )
 
@@ -2344,6 +2239,5 @@
       dbgPrint "   composite join name: #{cj.get_name}  cell: #{cj.get_cell_name}  cell elem: #{cj.get_cell_elem_name}\n"
 
-      # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_global_port_name ãé©ç¨
+      # composite の内部のセルに対し再帰的に get_real_global_port_name を適用
       name = @cell_list[ "#{cj.get_cell_name}" ].get_real_global_port_name( cj.get_cell_elem_name )
       return name
@@ -2357,17 +2251,14 @@
   end
 
-  #=== Cell# PORT (celltype ã®å®ç¾©) ãå¾ã
+  #=== Cell# PORT (celltype の定義) を得る
   def get_real_port( port_name )
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port_name )
 
-      # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_port ãé©ç¨
+      # composite の内部のセルに対し再帰的に get_real_port を適用
       port = @cell_list[ "#{cj.get_cell_name}" ].get_real_port( cj.get_cell_elem_name )
       return port
@@ -2378,20 +2269,17 @@
   end
 
-  #=== Cell# cell ãå¾ã
-  #    composite ã§ãªããã°èªåèªèº«ãè¿ã
+  #=== Cell# cell を得る
+  #    composite でなければ自分自身を返す
   def get_real_cell( port_name )
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       # print "get_real_cell: cell=#{@name} port=#{port_name}\n"
       # pp @cell_list
       cj = @celltype.find_export( port_name )
 
-      # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_port ãé©ç¨
+      # composite の内部のセルに対し再帰的に get_real_port を適用
       cell = @cell_list[ "#{cj.get_cell_name}" ].get_real_cell( cj.get_cell_elem_name )
       return cell
@@ -2412,7 +2300,6 @@
   end
 
-  #=== Cell# åãå£ã®port ã®åç
-§ã«ã¦ã³ããã¢ãããã
-  #port_name:: Symbol  : ãã¼ãå
+  #=== Cell# 受け口のport の参照カウントをアップする
+  #port_name:: Symbol  : ポート名
   def port_referenced port
     if @referenced_port_list[ port ] then
@@ -2422,17 +2309,14 @@
     end
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port.get_name )
 
       dbgPrint " port_referenced: #{@celltype.get_name} #{@name} cj=#{cj&&(cj.get_name)||"nil"}\n"
 
-      if cj then  # æ¢ã«ã¨ã©ã¼
-        # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_port ãé©ç¨
+      if cj then  # 既にエラー
+        # composite の内部のセルに対し再帰的に get_real_port を適用
         cell = @cell_list[ "#{cj.get_cell_name}" ]
         if cell && cell.get_celltype then
@@ -2457,7 +2341,6 @@
   end
 
-  #Cell#å±æ§ã®åæå¤ãå¾ã
-  #attr_name::Symbol  å¿
-ãåæåããã¦ããªãã¨ Ruby ä¾å¤ã¨ãªã
+  #Cell#属性の初期値を得る
+  #attr_name::Symbol  必ず初期化されていないと Ruby 例外となる
   def get_attr_initializer attr_name
     val = @join_list.get_item( attr_name )
@@ -2499,6 +2382,5 @@
   end
 
-  #=== Cell# åãå£é
-åã®æ·»æ°ã®æå¤§å¤ãè¨­å®
+  #=== Cell# 受け口配列の添数の最大値を設定
   def set_entry_port_max_subscript( port, num )
     dbgPrint( "set_entry_port_max_subscript: #{@name}.#{port.get_name}: #{num}\n" )
@@ -2511,15 +2393,11 @@
   end
 
-  #=== Cell# composite ã®å
-å´ã»ã«ã®åãå£é
-åã®æ·»æ°ã®æå¤§å¤ãè¨­å®
+  #=== Cell# composite の内側セルの受け口配列の添数の最大値を設定
   def set_entry_inner_port_max_subscript( port, num )
     if @cell_list == nil then
-      return    # ãã­ãã¿ã¤ãå®£è¨ããããã¦ããªãã¦ãå
-å´ã»ã«ãå±éããã¦ããªããor composite å±éå
-    end
-
-    # composite ã®å
-å´ã®ã»ã«ã«ä¼æ­
+      return    # プロトタイプ宣言しかされていなくて、内側セルが展開されていない　or composite 展開前
+    end
+
+    # composite の内側のセルに伝播
     if @celltype.instance_of? CompositeCelltype then
       dbgPrint "set_entry_inner_port_max_subscript #{@name} #{@port} #{num} cell_list.len=#{@cell_list.length}\n"
@@ -2538,8 +2416,7 @@
   end
 
-  #=== Cell# åãå£é
-åã®æ·»æ°ã®æå¤§å¤ãè¿ã
-  # é·ãã¯ +1 ãã
-  # 1ã¤ããªãå ´åã¯ -1 ãè¿ã
+  #=== Cell# 受け口配列の添数の最大値を返す
+  # 長さは +1 する
+  # 1つもない場合は -1 を返す
   def get_entry_port_max_subscript( port )
     subscript = @entry_array_max_subscript[port]
@@ -2550,14 +2427,13 @@
   end
 
-  #=== Cell# ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®çµåãçæ
+  #=== Cell# リレーアロケータの結合を生成
   # STAGE: S
-  # å¼ã³å£å´ã®çµåãå
-ã«åãå£å´ã®çµåãçæ
+  # 呼び口側の結合を元に受け口側の結合を生成
   def create_relay_allocator_join
 
-    # celltype ããªããã°ãã§ãã¯ããªãï¼æ¢ã«ã¨ã©ã¼ï¼
+    # celltype がなければチェックしない（既にエラー）
     return if @celltype == nil
 
-    # relay allocator ãçæ
+    # relay allocator を生成
     @celltype.get_port_list.each { |p|
       ail = p.get_allocator_instance
@@ -2565,5 +2441,5 @@
         dbgPrint "create_relay_allocator_join: #{@name}, #{p.get_name}\n"
         if p.get_array_size then
-          # mikan relay allocator ã array ã«å¯¾å¿ã§ãã¦ãããã®ã§ã¯ï¼
+          # mikan relay allocator が array に対応できてもよいのでは？
           cdl_error( "S1040 array not supported for relay allocator"  )
           next
@@ -2573,12 +2449,11 @@
           if ai2[0] == :RELAY_ALLOC then
             dbgPrint "create_relay_allocator_join: #{@name}, #{name}\n"
-            # å¼ã³å£å´ã®çµåãåãåºã
+            # 呼び口側の結合を取り出す
             ja = @join_list.get_item( :"#{ai2[3]}_#{ai2[4]}_#{ai2[5]}" )
             if ja == nil then
-              # è¦ã¤ãããªãå ´å
+              # 見つからない場合
               found = false
               
-              # composite å
-ã§å¤é¨ã«çµåããã¦ããã
+              # composite 内で外部に結合されているか
               if @in_composite then
                 @compositecelltypejoin_list.get_items.each { |cj|
@@ -2597,22 +2472,19 @@
                 cdl_error( "S1041 \'$1_$2_$3\': not joined. cannot create internal join for relay allocator" , ai2[3], ai2[4], ai2[5] )
                 print( "      In cell #{get_name}\n" )
-                # join ãæªçµåã§ãããã¨ã®ã¨ã©ã¼ã¯äºåº¦ã§ã (S1043)
+                # join が未結合であることのエラーは二度でる (S1043)
               end
-              next    # æã¡åã
+              next    # 打ち切る
             end
 
             b_export = false
-            # composite å
-ã®ã»ã«ã§ã¨ã¯ã¹ãã¼ãããã¦ããããã§ãã¯
-            #  mikan ã¨ã¯ã¹ãã¼ãå´ã¨ããã¡ãå´ã§ããªã¬ã¼å
-ãä¸è´ããããã§ãã¯ãå¿
-è¦
+            # composite 内のセルでエクスポートされているかチェック
+            #  mikan エクスポート側と、こちら側で、リレー先が一致するかチェックが必要
             if @compositecelltypejoin_list then
-              # export ããã¦ãããèª¿ã¹ã
+              # export されているか調べる
               @compositecelltypejoin_list.get_items.each{ |cj|
-                # å±æ§åã¨ composite ã® export ããååã¯ä¸è´ããã
+                # 属性名と composite の export する名前は一致するか
                 if p.get_name == cj.get_cell_elem_name then
                   print "export : #{p.get_name}\n"
-                  b_export = true    # å±æ§ã¯ export ããã¦ããã®ã§ãã¨ããããæªåæåã¨ã¯ããªã
+                  b_export = true    # 属性は export されているので、とりあえず未初期化とはしない
                   break
                 end
@@ -2621,6 +2493,5 @@
             end
 
-            # mikan é
-å
+            # mikan 配列
             am = nil
             if am then
@@ -2629,12 +2500,10 @@
                 subscript = ja2.get_subscript
                 if b_export == false then
-                  # CompositeCelltype ã®å ´åãå
-å´ã®ã»ã«ã§çæããã
+                  # CompositeCelltype の場合、内側のセルで生成させる
                   join = Join.new( :"#{p.get_name}_#{ai2[1]}_#{ai2[2]}", subscript, rhs, @loacle )
                   # p ( "#{p.get_name}_#{ai2[1]}_#{ai2[2]}", subscript, rhs )
                   new_join( join )
                   join.set_definition( @celltype.find(join.get_name) )
-                  # mikan relay mismatch ãã§ãã¯ãã§ãã¦ããªãï¼ä¸æ¹ãåç
-§ï¼
+                  # mikan relay mismatch チェックができていない（下方を参照）
                 end
                 @alloc_list << [ :NORMAL_ALLOC, p.get_name, subscript, ai2[1], ai2[2], rhs ]
@@ -2642,6 +2511,5 @@
             else
               if b_export == false then
-                # CompositeCelltype ã®å ´åãå
-å´ã®ã»ã«ã§çæããã
+                # CompositeCelltype の場合、内側のセルで生成させる
                 join = Join.new( :"#{p.get_name}_#{ai2[1]}_#{ai2[2]}", nil, ja.get_rhs, @locale )
                 new_join( join )
@@ -2653,6 +2521,5 @@
                                       "#{p.get_name}_#{ai2[1]}_#{ai2[2]}",
                                       "#{ai2[3]}_#{ai2[4]}_#{ai2[5]}" )
-                    # æ¬å½ã¯ composite ã®å¼ã³å£ã¨åãå£ã®éã§è¡ãã¹ãã ããå
-é¨ã§å¤æ®µæ¥ç¶ããã¦ããå ´å
+                    # 本当は composite の呼び口と受け口の間で行うべきだが、内部で多段接続されている場合
                   else
                     dbgPrint "relay success:  #{p.get_name}_#{ai2[1]}_#{ai2[2]}=>#{ai2[3]}_#{ai2[4]}_#{ai2[5]} #{jr.get_rhs_cell2.get_name}.#{jr.get_rhs_port2} \n"
@@ -2669,7 +2536,6 @@
   end
 
-  #=== Cell# @@cell_list2 ãä½ã
-  # @@cell_list2 ã¯ãåºç¾é ã« composite å
-ãå«ãã»ã«ã®ãªã¹ã
+  #=== Cell# @@cell_list2 を作る
+  # @@cell_list2 は、出現順に composite 内を含むセルのリスト
   def self.make_cell_list2
     @@cell_list.each{ |c|
@@ -2679,19 +2545,18 @@
   end
 
-  #=== Cell# @@cell_list2 ãå¾ã
-  # composite å
-ãå«ã (compositeãå«ã)
-  # æå³è§£æå¾ã«ä½æããã
+  #=== Cell# @@cell_list2 を得る
+  # composite 内を含む (compositeも含む)
+  # 意味解析後に作成される
   def self.get_cell_list2
     @@cell_list2
   end
 
-  #=== Cell# @@cell_list ãå¾ã
-  #composite ã®ä¸­ãå«ã¾ãªã
+  #=== Cell# @@cell_list を得る
+  #composite の中を含まない
   def self.get_cell_list
     @@cell_list
   end
 
-  #=== Cell# reverse_join ãçæãã
+  #=== Cell# reverse_join を生成する
   def self.create_reverse_join
     @@cell_list.each{ |c|
@@ -2705,5 +2570,5 @@
   end
 
-  #=== Cell# reverse_require_join ãçæãã
+  #=== Cell# reverse_require_join を生成する
   def self.create_reverse_require_join
     @@cell_list2.each{ |c|
@@ -2711,5 +2576,5 @@
       # if c.is_generate? then
         if ct then
-          # self ã¸ã®å¼ã³å£å´ã®çµåãçæ
+          # self への呼び口側の結合を生成
           ct.create_reverse_require_join c
         end
@@ -2718,21 +2583,16 @@
   end
 
-  #=== Cell# åãå£ã®port ã®åç
-§ã«ã¦ã³ããè¨­å®ãã
-  # self ã¯å¼ã³å
-ã®ã»ã«
-  # å¼ã³å
-ã»ã«ã®åãå£ã®åç
-§ã«ã¦ã³ããã¢ãããã
+  #=== Cell# 受け口のport の参照カウントを設定する
+  # self は呼び元のセル
+  # 呼び先セルの受け口の参照カウントをアップする
   def set_port_reference_count
     @join_list.get_items.each { |j|
       if j.get_definition.instance_of? Port then
         am = j.get_array_member2
-        if am then             # å¼ã³å£é
-å
+        if am then             # 呼び口配列
           am.each { |j2|
-            next if j2 == nil    # optional ã§ä¸é¨ãæ¬ è½ãã¦ããã±ã¼ã¹
+            next if j2 == nil    # optional で一部が欠落しているケース
             cell = j2.get_rhs_cell2
-            next if cell == nil     # å³è¾ºãè¦ã¤ãããªãã£ãï¼æ¢ã«ã¨ã©ã¼
+            next if cell == nil     # 右辺が見つからなかった．既にエラー
             port = cell.get_celltype.find( j2.get_rhs_port2 )
             dbgPrint( "set_port_reference_count: #{@name}.#{j2.get_name} => #{cell.get_name}.#{port.get_name}\n")
@@ -2741,9 +2601,9 @@
         else
           cell = j.get_rhs_cell2
-          next if cell == nil || cell.get_celltype == nil     # å³è¾ºãè¦ã¤ãããªãã£ãï¼æ¢ã«ã¨ã©ã¼
+          next if cell == nil || cell.get_celltype == nil     # 右辺が見つからなかった．既にエラー
           port = cell.get_celltype.find( j.get_rhs_port2 )
           if port == nil then
             dbgPrint "set_port_ref: #{@name}.#{j.get_name} = #{cell.get_name}.#{j.get_rhs_port2}\n"
-            # through ãã©ã°ã¤ã³ã§çæãããã»ã«ã®åãå£ãè¦ã¤ãããªãã±ã¼ã¹ (ã®ããº)
+            # through プラグインで生成されたセルの受け口が見つからないケース (のハズ)
             cdl_error( "entry '$1' not found in '$2' refered from $3.$4", j.get_rhs_port2, cell.get_name, @name, j.get_name )
             next
@@ -2756,20 +2616,18 @@
   end
 
-  #=== Cell# çµå(Join)ã®ãã§ãã¯
-  #     Join ã¯å¼ã³å£ã®çµåã¾ãã¯ attribute ã®åæå
+  #=== Cell# 結合(Join)のチェック
+  #     Join は呼び口の結合または attribute の初期化
   #
-  #  mikan ãã®ã¡ã½ããã¯ãä»¥ä¸ã®ï¼ã¤ã®ãã§ãã¯ãããªãããåå²ããã»ããããé©åãªé·ãã®ã¡ã½ããã«ãªã
-  #  ã»ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®çæ => create_relay_allocator_join
-  #  ã»æªçµåã®å¼ã³å£ã®ãã§ãã¯
-  #  ã»ãã¤ã³ã¿åãé
-åã§åæåãããå ´åã®ãã§ãã¯
-  #  ã»æªåæåã®å±æ§ã®ãã§ãã¯
+  #  mikan このメソッドは、以下の４つのチェックからなるが、分割したほうがより適切な長さのメソッドになる
+  #  ・リレーアロケータの生成 => create_relay_allocator_join
+  #  ・未結合の呼び口のチェック
+  #  ・ポインタ型が配列で初期化される場合のチェック
+  #  ・未初期化の属性のチェック
   def check_join
 
-    # celltype ããªããã°ãã§ãã¯ããªãï¼æ¢ã«ã¨ã©ã¼ï¼
+    # celltype がなければチェックしない（既にエラー）
     return if @celltype == nil
     return if @b_defined == false
-    return if @f_cloned == true    # å
-é¨ã»ã«ã«ã¤ãã¦ã¯ãcomposite ã®å®ç¾©æã«ãã§ãã¯ããã¦ãã
+    return if @f_cloned == true    # 内部セルについては、composite の定義時にチェックされている
 
     # debug
@@ -2779,8 +2637,8 @@
     # end
 
-    # æªçµåã®å¼ã³å£ã®ãã§ãã¯
+    # 未結合の呼び口のチェック
     @celltype.get_port_list.each { |p|
 
-      # å¼ã³å£ã§ãªããã°ããã§ãã¯ããªã
+      # 呼び口でなければ、チェックしない
       next if p.get_port_type != :CALL
 
@@ -2788,18 +2646,17 @@
       dbgPrint "check_join: #{@name} #{get_celltype.get_name} #{p.get_name}\n"
 
-      # çµåãªã¹ãã®ä¸­ããå¼ã³å£åã«ä¸è´ãããã®ãåãã ã
+      # 結合リストの中から呼び口名に一致するものを取りだす
       j = @join_list.get_item( p.get_name )
 
       if j == nil then
-        # æªçµåã®å¼ã³å£
-
-        # composite celltype ã®å
-é¨ã®å ´åãcomposite celltype ã export ããå¼ã³å£ã«çµåããã¦ãããæ¢ã
+        # 未結合の呼び口
+
+        # composite celltype の内部の場合、composite celltype が export する呼び口に結合されているか探す
         found = false
         if @in_composite then
-          # composite celltype ã® export ãããã®ãã¹ã¦ããæ¢ã
-          # ï¼export ãããã®ã®å³è¾ºå¤ããæ¢ãããã« get_item ã§ã¯ãã¡ï¼
+          # composite celltype の export するものすべてから探す
+          # （export するものの右辺値から探すために get_item ではダメ）
           @compositecelltypejoin_list.get_items.each{ |cj|
-            # å¼ã³å£åã¨ composite ã® export ããååã¯ä¸è´ããã
+            # 呼び口名と composite の export する名前は一致するか
             if p.get_name == cj.get_cell_elem_name then
               found = true
@@ -2808,7 +2665,5 @@
         end
 
-        # å¼ã³å£é
-åã®å ´å optional ã§å
-¨ã¦ã®è¦ç´ ãåæåãããªãå ´åã«ãããã¸æ¥ã
+        # 呼び口配列の場合 optional で全ての要素が初期化されない場合に、ここへ来る
         if ! found && ! p.is_require? && ! p.is_optional? then
           if ! p.is_allocator_port? then
@@ -2819,28 +2674,21 @@
         end
       elsif p.get_array_size.kind_of? Integer then
-        # æ·»æ°ããå¼ã³å£é
-åã®å ´åããã¹ã¦ã®æ·»æ°è¦ç´ ãåæåããã¦ããããã§ãã¯ãã
+        # 添数あり呼び口配列の場合、すべての添数要素が初期化されているかチェックする
 
         am = j.get_array_member2
         if( am )then
-          # join ã¯é
-å
-
-          # å¼ã³å£é
-åå®ç¾©ã§ã®é
-åã®å¤§ãã
+          # join は配列
+
+          # 呼び口配列定義での配列の大きさ
           length = p.get_array_size
 
-          # é
-åã®å¤§ãããå¼ã³å£é
-åå®ç¾©ã¨çµåå®ç¾©ã§ä¸è´ãããï¼
+          # 配列の大きさが呼び口配列定義と結合定義で一致するか？
           if am.length != length then
             if ! p.is_optional? || am.length >= length then
-              # optional ã®å ´åãè¦ç´ æ°ãå°ãªãããã®ã¯ OK
+              # optional の場合、要素数が少なすぎるのは OK
               cdl_error( "S1044 $1: array initializer too many or few, $2 for $3" , p.get_name, am.length, length )
             end
 
-            # am ã®è¦ç´ ã« nil ãè¿½å ãã¦ãã (#_CPA_# ã®ã³ã¼ãçææããã®é
-åè¦ç´ æ°åçæ)
+            # am の要素に nil を追加しておく (#_CPA_# のコード生成時、この配列要素数分生成)
             i = am.length
             while i < length
@@ -2850,7 +2698,6 @@
           end
 
-#          # é
-åè¦ç´ ã®æãããªãããã§ãã¯
-#          if am.length < length then  # æºããªãå ´åæ¢ã«ã¨ã©ã¼ã ãè¦ç´ ã®ããç¯å²ã§ãã§ãã¯
+#          # 配列要素の抜けがないかチェック
+#          if am.length < length then  # 満たない場合既にエラーだが要素のある範囲でチェック
 #            length = am.length
 #          end
@@ -2862,5 +2709,5 @@
               end
             else
-              # çæãããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
+              # 生成されないリージョンへの結合かチェック
               if ! @in_composite then
                 am[i].check_region2
@@ -2871,10 +2718,8 @@
 
         # else
-        # join ãéé
-åã§ããã°ãæ¢ã«ã¨ã©ã¼
+        # join が非配列であれば、既にエラー
         end
       elsif j.get_array_member then
-        # æ·»æ°ãªãå¼ã³å£é
-åã®å ´å
+        # 添数なし呼び口配列の場合
         am = j.get_array_member2
         length = am.length
@@ -2889,5 +2734,5 @@
         end
 
-        # çæãããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
+        # 生成されないリージョンへの結合かチェック
         if ! @in_composite then
           am.each { |join|
@@ -2898,8 +2743,7 @@
         end
       else
-        # å¼ã³å£ï¼»é
-åãã§ãªãå ´å
-
-        # çæãããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
+        # 呼び口［配列」でない場合
+
+        # 生成されないリージョンへの結合かチェック
         if ! @in_composite then
           j.check_region2
@@ -2909,11 +2753,10 @@
     }
 
-    # ãã¤ã³ã¿åãé
-åã§åæåãããå ´åã®ãã§ãã¯
+    # ポインタ型が配列で初期化される場合のチェック
     (@celltype.get_attribute_list+@celltype.get_var_list).each { |a|
       if a.get_size_is then
 
         if a.instance_of? CompositeCelltypeJoin then
-          # æ¢ã«ã¨ã©ã¼ã«ãªã£ã¦ãã
+          # 既にエラーになっている
           # cdl_error( "S1047 size_is pointer cannot be exposed for composite attribute"  )
           next
@@ -2925,6 +2768,6 @@
           size = a.get_size_is.eval_const( @join_list, @celltype.get_name_list )
           a.get_type.set_scs( a.get_size_is, nil, nil, nil, false )
-          if( ! size.kind_of? Integer )then               # C_EXP ã®å¯è½æ§ãã
-            # mikan å¤åããã§ã®ã¨ã©ã¼çºçã¯ä¸è¦ãeval_const ã®ä¸­ã§å¤æ°ãå­å¨ããªããåãä¸é©åãªã©ã®ã¨ã©ã¼ã«ãªãã¯ã
+          if( ! size.kind_of? Integer )then               # C_EXP の可能性あり
+            # mikan 多分ここでのエラー発生は不要、eval_const の中で変数が存在しない、型が不適切などのエラーになるはず
             cdl_error( "S1049 $1: size_is arg not constant" , a.get_name )
           else
@@ -2942,5 +2785,5 @@
               end
             else
-              # size_is å¼æ°ãã»ã«ã§æå®ããã¦ãã¦ãåæåå­ãã»ã«ã¿ã¤ãã§æå®ããã¦ããã±ã¼ã¹ã®ãã§ãã¯
+              # size_is 引数がセルで指定されていて、初期化子がセルタイプで指定されているケースのチェック
               ini = a.get_initializer
               if ini.instance_of? Expression
@@ -2957,9 +2800,9 @@
       else
         if ! a.instance_of? CompositeCelltypeJoin then
-          # composite ã¯ size_is æå®ã§ããªã
+          # composite は size_is 指定できない
           if a.get_type.kind_of?( PtrType ) then
             j = @join_list.get_item( a.get_identifier )
             if j && j.get_rhs.instance_of?( Array ) then
-              ## size_is æå®ããã¦ããªããã¤ã³ã¿ã Array ã§åæåããã¦ããããã¨ã©ã¼ã¨ãã
+              ## size_is 指定されていないポインタが Array で初期化されていたら、エラーとする
               cdl_error( "S1169 $1: non-size_is pointer cannot be initialized with array initializer" , a.get_identifier )
             end
@@ -2969,30 +2812,27 @@
     }
 
-    # æªåæåã®å±æ§ããã§ãã¯
+    # 未初期化の属性をチェック
     @celltype.get_attribute_list.each { |a|
       b_init = false
       # self.show_tree 1
-      if a.get_initializer then                               # ã»ã«ã¿ã¤ãã§åæåããã¦ãã
+      if a.get_initializer then                               # セルタイプで初期化されている
         b_init = true
-        # @in_composite ã§ export ããã¦ããå ´åã«ã¯ããã®åæå¤ã¯ä½¿ãããªã
-        # export ããã¦ãããããªãã«é¢ããããåæåããã¦ãããã¨ãä¿è¨¼ããã
-      elsif @join_list.get_item( a.get_name ) then            # ã»ã«ã§åæåããã¦ãã
+        # @in_composite で export されている場合には、この初期値は使われない
+        # export されている、いないに関わらず、初期化されていることが保証される
+      elsif @join_list.get_item( a.get_name ) then            # セルで初期化されている
         b_init = true
       elsif @in_composite && @compositecelltypejoin_list then
-        # å±æ§ã export ããã¦ãããèª¿ã¹ããexport ããã¦ããã°æªåæåã¨ã¯ããªã
-        # mikan ãªãã¢ãµã¼ã
+        # 属性が export されているか調べる。export されていれば未初期化とはしない
+        # mikan リニアサーチ
         @compositecelltypejoin_list.get_items.each{ |cj|
-          # å±æ§åã¨ composite ã® export ããååã¯ä¸è´ããã
+          # 属性名と composite の export する名前は一致するか
           if a.get_name.to_sym == cj.get_cell_elem_name.to_sym then
-            b_init = true    # å±æ§ã¯ export ããã¦ããã®ã§ãã¨ããããæªåæåã¨ã¯ããªã
+            b_init = true    # 属性は export されているので、とりあえず未初期化とはしない
           end
         }
         if b_init then
-          # size_is ã®å¼æ°ããããããããã§ãã¯ãã
-          # å
-é¨ã»ã«ã® size_is ãã¨ã¯ã¹ãã¼ããã size_is ã¨ãããããããã§ãã¯ãã
-          # å
-é¨ã»ã«ã¨ã¨ã¯ã¹ãã¼ãã§ååãå¤ãã¦ããå¯è½æ§ãããã®ã§ãå
-é¨ã»ã«ã® size_is ã®ååãå¤æããä¸ã§ãã§ãã¯ãã
+          # size_is の引数がマッチするかチェックする
+          # 内部セルの size_is をエクスポートする size_is とマッチするかチェックする
+          # 内部セルとエクスポートで名前を変えている可能性があるので、内部セルの size_is の名前を変換した上でチェックする
           if a.get_size_is then
             ### p "attr: get_size_is"
@@ -3000,6 +2840,5 @@
             if cj.get_port_decl.instance_of? Decl then
               ### p "attr: get_size_is 2"
-              # cj_size_is ã¯ãå¤é¨å
-¬éããã attr ã® size_is
+              # cj_size_is は、外部公開される attr の size_is
               cj_size_is = cj.get_port_decl.get_size_is
               if cj_size_is == nil then
@@ -3010,8 +2849,8 @@
               remain = exprs
               inner_to_export = {}
-			  ### exprs ã«å«ã¾ããè­å¥å­ãæãåºããå¯¾å¿ãã export ãããååãæ¢ã
+			  ### exprs に含まれる識別子を抜き出し、対応する export される名前を探す
               while remain != "" && remain != nil
                 ### p "remain ", remain
-                remain =~ /([^\w]*)([_A-Za-z][\w\d]*)/   # å¤æ°åæå­åãåãåºã 
+                remain =~ /([^\w]*)([_A-Za-z][\w\d]*)/   # 変数名文字列を取り出す 
 				if $2 == nil then
 						break
@@ -3020,5 +2859,5 @@
                 remain = $'
                 ### p exprs, $1, $2, $'
-                # size_is ã«å«ã¾ããå¤æ°ã¯ãcomposite ã§ export ããã¦ããã
+                # size_is に含まれる変数は、composite で export されているか
                 cj2 = nil
                 @compositecelltypejoin_list.get_items.each{ |cj2t|
@@ -3033,17 +2872,15 @@
                 if cj2.get_port_decl.instance_of? Decl then
                    decl2 = cj2.get_port_decl
-                   # å
-é¨ã®ååã¨å¤é¨ã®ååã®å¯¾å¿é¢ä¿ãè¨æ¶
+                   # 内部の名前と外部の名前の対応関係を記憶
                    inner_to_export[arg_name] = decl2.get_name
-                # else cj2 ã¯ Port (æ¢ã«ã¨ã©ã¼)
+                # else cj2 は Port (既にエラー)
                 end
               end
-              # å
-é¨ã®ååãå¤é¨ã®ååã§ç½®æ
+              # 内部の名前を外部の名前で置換
               inner_to_export.each{ |arg_name, exp_name|
                 ### p "changing #{arg_name}=>#{exp_name}"
                 # exprs.gsub!( Regexp.new("#{arg_name}[^0-9A-Za-z_]"), exp_name.to_s )
-                exprs.gsub!( Regexp.new("#{arg_name}(\\W)"), exp_name.to_s+"\\1" )  # æå­åæ«å°¾ã«ãªãã±ã¼ã¹
-                exprs.gsub!( Regexp.new("#{arg_name}\\Z"), exp_name.to_s )          # æå­åæ«å°¾ã«ããã±ã¼ã¹
+                exprs.gsub!( Regexp.new("#{arg_name}(\\W)"), exp_name.to_s+"\\1" )  # 文字列末尾にないケース
+                exprs.gsub!( Regexp.new("#{arg_name}\\Z"), exp_name.to_s )          # 文字列末尾にあるケース
               }
               ### p "changed: #{exprs} #{cj_size_is.to_s}"
@@ -3051,5 +2888,5 @@
                 cdl_error( "S1172 \'$1\' size_is argument mismatch with exporting one \'$2\'", a.get_name, cj.get_name )
               end
-            # else cj ã¯ Port (æ¢ã«ã¨ã©ã¼)
+            # else cj は Port (既にエラー)
             end
           end
@@ -3064,15 +2901,14 @@
   end
 
-  #=== Cell# é require ããã§ãã¯ãã
-  # é require æå®ãããåãå£ã«è¤æ°ã®çµåããªãããã§ãã¯ãã
-  # composite ã®å
-é¨ã»ã« (f_cloned=true) ããã§ãã¯ãã
+  #=== Cell# 逆 require をチェックする
+  # 逆 require 指定された受け口に複数の結合がないかチェックする
+  # composite の内部セル (f_cloned=true) もチェックする
   def check_reverse_require
-    # celltype ããªããã°ãã§ãã¯ããªãï¼æ¢ã«ã¨ã©ã¼ï¼
+    # celltype がなければチェックしない（既にエラー）
     return if @celltype == nil
     return if @b_defined == false
 
     # p "check reverse require   #{@name}"
-    # érequire æå®ãããåãå£ã«è¤æ°ã®çµåããªãããã§ãã¯
+    # 逆require 指定された受け口に複数の結合がないかチェック
     @referenced_port_list.each{ |port,count|
       # p port.class, count
@@ -3084,13 +2920,13 @@
   end
 
-  #=== Cell# require å¼ã³å£ã®çµåãè¡ã
+  #=== Cell# require 呼び口の結合を行う
   # STAGE: S
-  #cp_name:: Symbol           : å¼ã³å£å
-  #cell_or_t:: Celltype|Cell  : celltype ã® require ã®å³è¾ºã§æå®ãããã»ã«ã¿ã¤ãã¾ãã¯ã»ã«
-  #port::  Port               : celltype ã® Port ãªãã¸ã§ã¯ã
+  #cp_name:: Symbol           : 呼び口名
+  #cell_or_t:: Celltype|Cell  : celltype の require の右辺で指定されたセルタイプまたはセル
+  #port::  Port               : celltype の Port オブジェクト
   def set_require_join( cp_name, cell_or_ct, port )
 
-    # set_require_join ã¯2åº¦å¼ã³åºããã
-    # 2åº¦ç®ã¯ post ã³ã¼ããçæããå¾       #####  ãã£ããè¦åããï¼éè¤ã¨ã©ã¼ãè¦éãï¼
+    # set_require_join は2度呼び出される
+    # 2度目は post コードを生成した後       #####  いったん見合わせ（重複エラーを見逃す）
     # if @require_joined_list[ cp_name ] then
     #   return
@@ -3109,5 +2945,5 @@
       end
     else
-      # require: cell ã§æå®
+      # require: cell で指定
       cell = cell_or_ct
       if @region.distance( cell.get_region ) == nil then
@@ -3119,5 +2955,5 @@
       cdl_warning( "W1003 $1 : require call port overridden in $2" , cp_name, @name )
     else
-      # require ã® join ãçæ(å¼ã³å£ã®çµå)
+      # require の join を生成(呼び口の結合)
 #      rhs = Expression.new( [ :OP_DOT, [ :IDENTIFIER, Token.new( cell.get_name, nil, nil, nil ) ],
       nsp = NamespacePath.new( cell.get_name, false, cell.get_namespace )
@@ -3132,16 +2968,14 @@
   end
 
-  #=== Cell# Join ã® definition ã®è¨­å®ã¨ãã§ãã¯
+  #=== Cell# Join の definition の設定とチェック
   # STAGE: S
   def set_definition_join
-    return if @celltype == nil    # æ¢ã«ã¨ã©ã¼ï¼æã¡åã
-    return if @b_defined == false # ãã­ãã¿ã¤ãå®£è¨ã®ã¿
-    return if @b_checked == true  # æ¢ã«è¨­å®ï¼ãã§ãã¯ï¼æ¸ã¿
+    return if @celltype == nil    # 既にエラー：打ち切る
+    return if @b_defined == false # プロトタイプ宣言のみ
+    return if @b_checked == true  # 既に設定（チェック）済み
 
     dbgPrint "set_definition_join in #{@name}\n"
 
-    # relay allocator ããã©ã£ã¦åå
-¥ããªããããå
-é ­ã§ @b_checked ã true ã«ãã
+    # relay allocator をたどって再入しないよう、先頭で @b_checked を true にする
     @b_checked = true
 
@@ -3149,10 +2983,7 @@
       check_restrict_list
       
-      # compoiste ã»ã«ã®ã¯ã­ã¼ã³ããããã®ã¯ãset_definition ä¸è¦
-      # å
-ã® join ã¯æ¢ã« definition ããã¦ãã
-      # å
-ã®ã»ã«ã«ããã¦ãä»£å
-¥ãã§ãã¯ããã¦ããã®ã§ãäºéã«ãã§ãã¯(throughé©ç¨)ããã¦ãã¾ã
+      # compoiste セルのクローンされたものは、set_definition 不要
+      # 元の join は既に definition されている
+      # 元のセルにおいて、代入チェックされているので、二重にチェック(through適用)されてしまう
       @join_list.get_items.each{ |join|
         dbgPrint " set_definition_join: checking #{@name}.#{join.get_name}\n"
@@ -3160,7 +2991,7 @@
           port = @celltype.find(join.get_name)
           join.get_array_member2.each { |am|
-            if am == nil then   # æªçµåã®å ´åãã¨ã©ã¼ãã§ãã¯ã¯ check_join
+            if am == nil then   # 未結合の場合、エラーチェックは check_join
               if port && ! port.is_optional? then
-                # ãã¹ãç¨ã«ã¨ã©ã¼ã¡ãã»ã¼ã¸åºå
+                # テスト用にエラーメッセージ出力
                 # cdl_error( "TEMPORAL set_definition_join: uninitialized array member"  )
               end
@@ -3176,22 +3007,18 @@
     end
 
-    # ãªã¬ã¼ join ã¯ through ãã©ã°ã¤ã³çæå¾ã«ããã§ããªã
-    # through å¾ã«çµåå
-ãå
-¥ãæ¿ãããã 
+    # リレー join は through プラグイン生成後にしかできない
+    # through 後に結合先が入れ替えられる 
     create_relay_allocator_join
 
-    # composite ã»ã«ã®å±é
+    # composite セルの展開
     if ! @in_composite && ! @f_cloned && @celltype.instance_of?( CompositeCelltype ) then
-      # composite ã»ã«ã¿ã¤ãå
-ã® composite ã¯å±éããªã
-      # compoiste ã»ã«å±éä¸­ã® composite ã¯å±éããªã (CompositeCelltype::expand å
-ã§åå¸°çã« expnad)
+      # composite セルタイプ内の composite は展開しない
+      # compoiste セル展開中の composite は展開しない (CompositeCelltype::expand 内で再帰的に expnad)
       expand
     end
   end
 
-  #=== Cell# composite ã»ã«ã®å±é
-  # ãã®ã»ã«ã composite ã»ã«ã¿ã¤ã
+  #=== Cell# composite セルの展開
+  # このセルが composite セルタイプ
   def expand
 
@@ -3199,10 +3026,8 @@
     dbgPrint "=====    expanding   #{@name}     =====\n"
 
-    # composite celltype ã® cell ãå±é
+    # composite celltype の cell を展開
     @cell_list, @cell_list2 = @celltype.expand( @name, @global_name, @NamespacePath, @join_list, @region, @plugin, @locale )
 
-    # ãã­ãã¿ã¤ããåç
-§ããã¦ããå ´åãå­ãåç
-§ããã¦ãããã¨ã«ãã
+    # プロトタイプが参照されている場合、子も参照されていることにする
     if @f_ref then
       dbgPrint "expand: set_f_ref\n"
@@ -3211,6 +3036,5 @@
   end
 
-  #=== Cell#å
-é¨ã»ã«ã®åãå£æ·»æ°æå¤§å¤ãè¨­å®
+  #=== Cell#内部セルの受け口添数最大値を設定
   def set_max_entry_port_inner_cell
     if @cell_list == nil then
@@ -3220,5 +3044,5 @@
     dbgPrint "set_max_entry_port_inner_cell name=#{@name} entry_array_max_subscript.len=#{@entry_array_max_subscript.length}\n"
 
-    # ãã­ãã¿ã¤ãå®£è¨ã§è¨­å®ããã¦ãããã®ãåæ ãã
+    # プロトタイプ宣言で設定されていたものを反映する
     @entry_array_max_subscript.each{ |port,name|
       dbgPrint "set_entry_inner_port_max_subscript( #{port}, #{name} )\n"
@@ -3227,5 +3051,5 @@
   end
 
-  #=== Cell#restrict ãè¿½å 
+  #=== Cell#restrict を追加
   def add_restrict( entry_name, func_name, region_name_list )
     if @restrict_list[ entry_name ] == nil then
@@ -3260,8 +3084,7 @@
             else
               cdl_info( "I9999 $1: restrict calling domain to $2, which is same domain as the cell locates", @name, rp.to_s )
-              # restrict ãåããã¡ã¤ã³ãæå®ãã¦ããããã¨ã¨ãã (HRP3)
-              # KernelDoamin å
-ã®ã»ã«ã«å¯¾ããKernelDomain ã« restrict ãã¦ããå ´åã
-              # ç¡æå±çµç±ã§çµåããã¦ããããKernelDomain ããå¼åºããã¨ãæ³å®ããè¨±å¯
+              # restrict を同じドメインを指定してもよいこととする (HRP3)
+              # KernelDoamin 内のセルに対し、KernelDomain に restrict している場合、
+              # 無所属経由で結合されているが、KernelDomain から呼出すことを想定した許可
             end
           else
@@ -3311,6 +3134,6 @@
 
   #=== Cell#get_callable_regions( entry_name, func_name )
-  # func_name=nil ã®å ´åãentry_name ã®å¯å¦ããã§ãã¯æ°ã
-  # nil ãè¿ãå ´åãå¶éããã¦ããªããã¨ãæå³ãã
+  # func_name=nil の場合、entry_name の可否をチェック数る
+  # nil が返る場合、制限されていないことを意味する
   def get_restricted_regions( entry_name, func_name )
     # p "get_restricted_regions #{@name}"
@@ -3327,8 +3150,6 @@
 
   #=== Cell#has_ineffective_restrict_specifier
-  # restrict æå®å­ãæå®ããã¦ãã¦ãåç
-§ããã¦ããªãå ´å true
-  # åç
-§ã¯ãHRPSVCPlugin ã®ã¿
+  # restrict 指定子が指定されていて、参照されていない場合 true
+  # 参照は、HRPSVCPlugin のみ
   def has_ineffective_restrict_specifier
     if @restrict_list.length != 0 && @b_restrict_referenced == false then
@@ -3358,5 +3179,5 @@
       puts "entry array #{port.get_name}: max subscript=#{num}"
     }
-    if @cell_list then   # ããã§ @cell_list ã nil ãªã®ã¯ Bug
+    if @cell_list then   # ここで @cell_list が nil なのは Bug
       (indent+1).times { print "  " }
       puts "cloned cell list:"
@@ -3382,5 +3203,5 @@
           subscript = ""
         end
-        # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãçæ
+        # アロケータ呼び口の結合を生成
         (indent+2).times { print "  " }
         puts "#{cp_name}#{subscript} = #{a[4+1]}"
@@ -3407,8 +3228,8 @@
 # @real_singleton:: bool : has singleton cell in this composite celltype
 # @real_active:: bool : has active cell in this composite celltype
-# @name_list:: NamedList item: Decl (attribute), Port ã¨ã¯ã¹ãã¼ãå®ç¾©
+# @name_list:: NamedList item: Decl (attribute), Port エクスポート定義
 # @internal_allocator_list:: [ [cell, internal_cp_name, port_name, func_name, param_name, ext_alloc_ent], ... ]
-# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin ã¯çæå¾ã«è¿½å ããã
-# @generate_list:: [ [ Symbol, String, Plugin ], ... ]   generate æã§è¿½å ããã generate
+# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
+# @generate_list:: [ [ Symbol, String, Plugin ], ... ]   generate 文で追加された generate
 
   @@nest_stack_index = -1
@@ -3453,5 +3274,5 @@
 
     Namespace.new_compositecelltype( self )
-    set_namespace_path # @NamespacePath ã®è¨­å®
+    set_namespace_path # @NamespacePath の設定
 
     @port_list = []
@@ -3469,5 +3290,5 @@
   # CompositeCelltype#end_of_parse
   def end_of_parse
-    # singleton ã«é¢ãããã§ãã¯
+    # singleton に関するチェック
     if @b_singleton && @real_singleton == nil then
       cdl_warning( "W1004 $1 : specified singleton but has no singleton in this celltype" , @name )
@@ -3478,5 +3299,5 @@
     end
 
-    # active ã«é¢ãããã§ãã¯
+    # active に関するチェック
     if @b_active && @real_active == nil then
       cdl_error( "S1054 $1 : specified active but has no active in this celltype" , @name )
@@ -3485,5 +3306,5 @@
     end
 
-    # @allocator_instance ãè¨­å®ãã
+    # @allocator_instance を設定する
     @name_list.get_items.each{ |n|
       if n.instance_of? Port then
@@ -3492,5 +3313,5 @@
     }
 
-    # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã® entry å´
+    # リレーアロケータの entry 側
     @port_list.each{ |p|
       if p.get_port_type == :ENTRY then
@@ -3506,7 +3327,7 @@
       end
     }
-    # mikan relay ãæ­£ããæãã¦ããããã§ãã¯ããã¦ããªã
-
-    # callback çµå
+    # mikan relay が正しく抜けているかチェックされていない
+
+    # callback 結合
     @cell_list_in_composite.get_items.each{ |c|
       ct = c.get_celltype
@@ -3516,10 +3337,10 @@
     }
 
-    # æå³è§£æ
+    # 意味解析
     @cell_list_in_composite.get_items.each{ |c|
       c.set_definition_join
     }
 
-    # cell ã®æªçµåã®å¼ã³å£ããªãããã§ãã¯
+    # cell の未結合の呼び口がないかチェック
     @cell_list_in_composite.get_items.each{ |c|
       c.check_join
@@ -3527,13 +3348,11 @@
     }
 
-    # å¼ã³å£ã®çµåã«ã¤ãã¦ãexport ã¨å
-é¨çµåã®ä¸¡æ¹ããªãããã§ãã¯
-    # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ãå
-é¨ã¢ã­ã±ã¼ã¿ã®è¨­å®
+    # 呼び口の結合について、export と内部結合の両方がないかチェック
+    # リレーアロケータ、内部アロケータの設定
     @port_list.each{ |p|
       p.check_dup_init
     }
 
-    # ãã¹ã¦ã®ã¨ã¯ã¹ãã¼ãå®ç¾©ã«å¯¾å¿ããå¼ã³å£ãåãå£ãå±æ§ãå­å¨ããããã§ãã¯
+    # すべてのエクスポート定義に対応した呼び口、受け口、属性が存在するかチェック
     @name_list.get_items.each{ |n|
       if( @export_name_list.get_item( n.get_name ) == nil )then
@@ -3542,6 +3361,5 @@
     }
 
-    # å
-é¨ã¢ã­ã±ã¼ã¿ãè¨­å®ãã
+    # 内部アロケータを設定する
     @internal_allocator_list.each{ |cell, cp_internal_name, port_name, fd_name, par_name, ext_alloc_ent|
       res = ext_alloc_ent.get_allocator_rhs_elements( :INTERNAL_ALLOC )
@@ -3564,5 +3382,5 @@
     }
 
-    # composite ãã©ã°ã¤ã³
+    # composite プラグイン
     if @generate then
       celltype_plugin
@@ -3579,5 +3397,5 @@
     cell.set_owner self  # Cell (in_omposite)
     @cell_list_in_composite.add_item( cell )
-    if cell.get_celltype then    # nil ãªãã°ããã§ã«ã»ã«ã¿ã¤ããªãã¨ã©ã¼
+    if cell.get_celltype then    # nil ならば、すでにセルタイプなしエラー
       if cell.get_celltype.is_singleton? then
         @real_singleton = cell
@@ -3601,25 +3419,20 @@
     @cell_list << cell
 
-    # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã®é©ç¨
+    # セルタイププラグインの適用
     celltype_plugin_new_cell cell
   end
 
-  #=== CompositeCelltype# CompositeCelltypeJoin ãä½æ
+  #=== CompositeCelltype# CompositeCelltypeJoin を作成
   # STAGE: B
-  #export_name:: Symbol : å¤é¨ã«å
-¬éããåå
-  #internal_cell_name:: Symbol : å
-é¨ã»ã«å
-  #internal_cell_elem_name:: Symbol : å
-é¨ã»ã«ã®è¦ç´ åï¼å¼ã³å£åãåãå£åãå±æ§åã®ããããï¼
-  #type::  :CALL, :ENTRY, :ATTRIBUTE ã®ããããï¼æ§æè¦ç´ ã¨ãã¦ããã¹ããã®ï¼
-  #RETURN:: Decl | Port : ã¨ã¯ã¹ãã¼ãå®ç¾©
-  # new_join ã¯
-  #   cCall => composite.cCall;     (ã»ã«å
-)
-  #   attr = composite.attr;        (ã»ã«å
-)
-  #   composite.eEnt => cell2.eEnt; (ã»ã«å¤)
-  # ã®æ§æè¦ç´ ã®åºç¾ã«å¯¾ãã¦å¼ã³åºããã
+  #export_name:: Symbol : 外部に公開する名前
+  #internal_cell_name:: Symbol : 内部セル名
+  #internal_cell_elem_name:: Symbol : 内部セルの要素名（呼び口名、受け口名、属性名のいずれか）
+  #type::  :CALL, :ENTRY, :ATTRIBUTE のいずれか（構文要素としてあるべきもの）
+  #RETURN:: Decl | Port : エクスポート定義
+  # new_join は
+  #   cCall => composite.cCall;     (セル内)
+  #   attr = composite.attr;        (セル内)
+  #   composite.eEnt => cell2.eEnt; (セル外)
+  # の構文要素の出現に対して呼び出される
   def new_join( export_name, internal_cell_name,
 		 internal_cell_elem_name, type )
@@ -3634,10 +3447,9 @@
 
     celltype = cell.get_celltype
-    return if celltype == nil	# celltype == nil ãªããã§ã«ã¨ã©ã¼
-
-    # å
-é¨ã»ã«ã®ã»ã«ã¿ã¤ãããå¯¾å¿è¦ç´ ãæ¢ã
-    # ãã®ã¡ã½ããã¯ãæ§æä¸ãå¼ã³å£ãåãå£ãå±æ§ãè¨è¿°ã§ããç®æããå¼åºããã
-    # æ§æä¸ã®å¼åºãä½ç½®ï¼è¨è¿°ä½ç½®ï¼ã¨ãè¦ç´ ãå¯¾å¿ãããã®ããã§ãã¯
+    return if celltype == nil	# celltype == nil ならすでにエラー
+
+    # 内部セルのセルタイプから対応要素を探す
+    # このメソッドは、構文上、呼び口、受け口、属性が記述できる箇所から呼出される
+    # 構文上の呼出し位置（記述位置）と、要素が対応したものかチェック
     obj = celltype.find( internal_cell_elem_name )
     if obj.instance_of?( Decl ) then
@@ -3647,10 +3459,10 @@
       elsif type != :ATTRIBUTE then
         cdl_error( "S1059 \'$1\' : exporting attribute. write in cell or use \'=\' to export attribute" , export_name )
-        # return æ¬¡ã®ã¨ã©ã¼ãé¿ããããã«å¦çç¶è¡ããä»ãå ãã¦ã¿ã
+        # return 次のエラーを避けるために処理続行し、付け加えてみる
       end
     elsif obj.instance_of?( Port ) then
       if obj.get_port_type != type then
         cdl_error( "S1060 \'$1\' : port type mismatch. $2 type is allowed here." , export_name, type )
-        # return æ¬¡ã®ã¨ã©ã¼ãé¿ããããã«å¦çç¶è¡ããä»ãå ãã¦ã¿ã
+        # return 次のエラーを避けるために処理続行し、付け加えてみる
       end
     else
@@ -3660,5 +3472,5 @@
     end
 
-    # ã¨ã¯ã¹ãã¼ãå®ç¾©ã¨ä¸è´ãããã©ãããã§ãã¯
+    # エクスポート定義と一致するかどうかチェック
     obj2 = @name_list.get_item( export_name )
     if( obj2 == nil )then
@@ -3676,5 +3488,5 @@
         elsif obj.get_signature != obj2.get_signature then
           if obj.get_signature != nil && obj2.get_signature != nil then
-            # nil ãªãã°æ¢ã«ã¨ã©ã¼ãªã®ã§å ±åããªã
+            # nil ならば既にエラーなので報告しない
             cdl_error( "S1066 $1 : signature \'$2\' mismatch with previous definition \'$3\'" , export_name, obj.get_signature.get_name, obj2.get_signature.get_name )
           end
@@ -3705,6 +3517,5 @@
     if obj.instance_of?( Decl ) then
       # attribute
-#      # å
-é¨ããå¤é¨ã¸è¤æ°ã®çµåããªãããã§ãã¯
+#      # 内部から外部へ複数の結合がないかチェック
 #      found = false
 #      @attr_list.each{ |a|
@@ -3719,6 +3530,5 @@
     else
       # call/entry port
-#      # å
-é¨ããå¤é¨ã¸è¤æ°ã®çµåããªãããã§ãã¯
+#      # 内部から外部へ複数の結合がないかチェック
 #      found = false
 #      @port_list.each{ |port|
@@ -3733,25 +3543,24 @@
     end
 
-    # join ã @export_name_list ã«ç»é²ï¼éè¤ãã§ãã¯ã¨ã¨ãã«ï¼å¾ã§è¡ããã CompositeCelltypeJoin ã® clone ã«åããï¼
+    # join を @export_name_list に登録（重複チェックとともに，後で行われる CompositeCelltypeJoin の clone に備える）
     if obj.instance_of?( Decl ) && @export_name_list.get_item( export_name ) then
-      # æ¢ã«å­å¨ãããè¿½å ããªããæ°ä»æ§ã§ã¯ã@export_name_list ã«åãååãå«ã¾ãããã¨ãããã
+      # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
     elsif obj.instance_of?( Port ) && obj.get_port_type == :CALL && @export_name_list.get_item( export_name ) then
-      # æ¢ã«å­å¨ãããè¿½å ããªããæ°ä»æ§ã§ã¯ã@export_name_list ã«åãååãå«ã¾ãããã¨ãããã
+      # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
     else
       @export_name_list.add_item( join )
     end
 
-    # export ãããã¼ãã«å«ã¾ãã send/receive ãã©ã¡ã¼ã¿ã®ã¢ã­ã±ã¼ã¿(allocator)å¼ã³å£ãã»ã«ã¨çµå
+    # export するポートに含まれる send/receive パラメータのアロケータ(allocator)呼び口をセルと結合
     if obj2.instance_of? Port then
       obj2.each_param{ |port, fd, par|
-        case par.get_direction                        # å¼æ°ã®æ¹åæå®å­ (in, out, inout, send, receive )
+        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
         when :SEND, :RECEIVE
-          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®åå
-          #            ãã¼ãå         é¢æ°å         ãã©ã¡ã¼ã¿å
+          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
+          #            ポート名         関数名         パラメータ名
           cp_internal_name = :"#{internal_cell_elem_name}_#{fd.get_name}_#{par.get_name}"
 
-          # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ or å
-é¨ã¢ã­ã±ã¼ã¿æå®ããªããã¦ããå ´åãã¢ã­ã±ã¼ã¿å¼ã³å£ãè¿½å ããªã
-          # ãã®æç¹ã§ã¯ get_allocator_instance ã§ã¯å¾ãããªããã tmp ãå¾ã
+          # リレーアロケータ or 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
+          # この時点では get_allocator_instance では得られないため tmp を得る
           if port.get_allocator_instance_tmp then
             found = false
@@ -3761,7 +3570,5 @@
 
                 if s[0] == :INTERNAL_ALLOC then
-                  # å
-é¨ã¢ã­ã±ã¼ã¿ã®å ´å    # mikan ããã¯å
-é¨ã®ã»ã«ã«ç´çµãããå¤é¨ã®ãã¼ãã«æ¹ããã¹ã
+                  # 内部アロケータの場合    # mikan これは内部のセルに直結する。外部のポートに改めるべき
                   @internal_allocator_list << [ cell, cp_internal_name, port.get_name, fd.get_name, par.get_name, s[3] ]
                 end
@@ -3773,5 +3580,5 @@
           end
 
-          # å¤é¨ã¢ã­ã±ã¼ã¿ã®å ´å
+          # 外部アロケータの場合
           new_join( cp_name, internal_cell_name, cp_internal_name, :CALL )
         end
@@ -3779,5 +3586,5 @@
     end
 
-    # ã¨ã¯ã¹ãã¼ãå®ç¾©ãè¿ã
+    # エクスポート定義を返す
     return obj2
   end
@@ -3801,15 +3608,12 @@
     @name_list.add_item port
 
-    # export ãããã¼ãã«å«ã¾ãã send/receive ãã©ã¡ã¼ã¿ã®ã¢ã­ã±ã¼ã¿å¼ã³å£ã® export ãçæãã¦ãã¼ãã«è¿½å 
-    # ãã®æç¹ã§ã¯å
-é¨ã¢ã­ã±ã¼ã¿ãã©ããå¤æ­ã§ããªãã®ã§ãã¨ããããçæãã¦ãã
+    # export するポートに含まれる send/receive パラメータのアロケータ呼び口の export を生成してポートに追加
+    # この時点では内部アロケータかどうか判断できないので、とりあえず生成しておく
     port.each_param { |port, fd, par|
-      case par.get_direction                        # å¼æ°ã®æ¹åæå®å­ (in, out, inout, send, receive )
+      case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
       when :SEND, :RECEIVE
-        #### ãªã¬ã¼ã¢ã­ã±ã¼ã¿ or å
-é¨ã¢ã­ã±ã¼ã¿æå®ããªããã¦ããå ´åãã¢ã­ã±ã¼ã¿å¼ã³å£ãè¿½å ããªã
-        # å
-é¨ã¢ã­ã±ã¼ã¿æå®ããªããã¦ããå ´åãã¢ã­ã±ã¼ã¿å¼ã³å£ãè¿½å ããªã
-        # ãã®æç¹ã§ã¯ get_allocator_instance ã§ã¯å¾ãããªããã tmp ãå¾ã
+        #### リレーアロケータ or 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
+        # 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
+        # この時点では get_allocator_instance では得られないため tmp を得る
         if port.get_allocator_instance_tmp then
           found = false
@@ -3826,15 +3630,14 @@
 
         if par.get_allocator then
-          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®åå
-          #           ãã¼ãå          é¢æ°å         ãã©ã¡ã¼ã¿å
-          alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace ã¢ã­ã±ã¼ã¿å¼ã³å£ã®ã·ã°ããã£
-          array_size = port.get_array_size            # å¼ã³å£ã¾ãã¯åãå£é
-åã®ãµã¤ãº
-          created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # å¼ã³å£ãçæ
+          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
+          #           ポート名          関数名         パラメータ名
+          alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ
+          array_size = port.get_array_size            # 呼び口または受け口配列のサイズ
+          created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
           created_port.set_allocator_port( port, fd, par )
           if port.is_omit? then
             created_port.set_omit
           end
-          new_port( created_port )           # ã»ã«ã¿ã¤ãã«æ°ããå¼ã³å£ãè¿½å 
+          new_port( created_port )           # セルタイプに新しい呼び口を追加
         # else
         #   already error
@@ -3853,5 +3656,5 @@
     attribute.each { |a|
       a.set_owner self   # Decl (CompositeCelltype)
-      # V1.1.0.10 composite ã® attr ã® size_is ã¯å¯ã¨ãªã£ã
+      # V1.1.0.10 composite の attr の size_is は可となった
       # if a.get_size_is then
       #  cdl_error( "S1070 $1: size_is pointer cannot be exposed for composite attribute" , a.get_name )
@@ -3864,5 +3667,5 @@
   end
 
-  #=== CompositeCelltype# érequire ã®çµåãçæãã
+  #=== CompositeCelltype# 逆require の結合を生成する
   def create_reverse_require_join cell
     @name_list.get_items.each{ |n|
@@ -3889,5 +3692,5 @@
     return @name_list.get_item( name )
 
-    # å¾æ¥ä»æ§
+    # 従来仕様
 #    cj = @export_name_list.get_item( name )
 #p "#{name}, #{cj.get_port_decl}"
@@ -3899,19 +3702,18 @@
   end
 
-  #=== CompositeCelltype# export ãã CompositeCelltypeJoin ãå¾ã
+  #=== CompositeCelltype# export する CompositeCelltypeJoin を得る
   #name:: string:
-  # attribute ã®å ´åãåãååã«å¯¾ãè¤æ°å­å¨ããå¯è½æ§ãããããæåã®ãã®ããè¿ããªã
+  # attribute の場合、同じ名前に対し複数存在する可能性があるが、最初のものしか返さない
   def find_export name
     return @export_name_list.get_item( name )
   end
 
-  #=== CompositeCelltype# composite celltype ã® cell ãå±é
-  #name:: string: Composite cell ã®åå
-  #global_name:: string: Composite cell ã® global name (C è¨èªå)
-  #join_list:: NamedList : Composite cell ã«å¯¾ãã Join ã® NamedList
+  #=== CompositeCelltype# composite celltype の cell を展開
+  #name:: string: Composite cell の名前
+  #global_name:: string: Composite cell の global name (C 言語名)
+  #join_list:: NamedList : Composite cell に対する Join の NamedList
   #RETURN:
   # [ { name => cell }, [ cell, ... ] ]
-  #  æ»ãå¤ åã¯ ååâcloneãããå
-é¨ã»ã«ãå¾ãã¯ composite ã®åºç¾é ã®ãªã¹ã
+  #  戻り値 前は 名前⇒cloneされた内部セル、後ろは composite の出現順のリスト
   def expand( name, global_name, namespacePath, join_list, region, plugin, locale )
 
@@ -3922,11 +3724,10 @@
     }
   
-    # å±éã§ clone ãããã»ã«ã®ãªã¹ããå³è¾ºã¯ Cell (composite ã®å ´å composite ãª cell ã® clone)
+    # 展開で clone されたセルのリスト、右辺は Cell (composite の場合 composite な cell の clone)
     clone_cell_list = {}
     clone_cell_list2 = []
     clone_cell_list3 = {}
 
-    #  composite å
-é¨ã®ãã¹ã¦ã® cell ã«ã¤ãã¦
+    #  composite 内部のすべての cell について
     @cell_list_in_composite.get_items.each { |c|
 
@@ -3934,12 +3735,10 @@
       dbgPrint "expand : cell #{c.get_name}\n"
 
-      # Join ã®é
-å
+      # Join の配列
       ja = []
 
-      # CompositeCelltype ã export ããå¼ã³å£ãåãå£ãå±æ§ã®ãªã¹ãã«ã¤ãã¦
+      # CompositeCelltype が export する呼び口、受け口、属性のリストについて
       # @export_name_list.get_items.each{ |cj|	# cj: CompositeCelltypeJoin
-      # æ°ä»æ§ã§ã¯ã@export_name_list ã«å
-¥ã£ã¦ããªã attr ããããã
+      # 新仕様では、@export_name_list に入っていない attr がありうる
       (@port_list+@attr_list).each{ |cj|	# cj: CompositeCelltypeJoin
 
@@ -3947,9 +3746,8 @@
         dbgPrint "        cj : #{cj.get_name}\n"
 
-        # CompositeCelltypeJoin (export) ã®å¯¾è±¡ã»ã«ãï¼
+        # CompositeCelltypeJoin (export) の対象セルか？
         if cj.match?( c ) then
 
-          # å¯¾è±¡ã»ã«å
-ã® CompositeCelltype ã® export ãã Join (attribute ã¾ãã¯ call port)
+          # 対象セル内の CompositeCelltype の export する Join (attribute または call port)
           j = join_list.get_item( cj.get_name )
 
@@ -3962,6 +3760,6 @@
 
           if j then
-            # å¼ã³å£ãå±æ§ã®å ´å
-            #  ComositeCell ç¨ã®ãã®(j) ãå¯¾è±¡ã»ã«ç¨ã« clone (@through_list ãã³ãã¼ããã)
+            # 呼び口、属性の場合
+            #  ComositeCell 用のもの(j) を対象セル用に clone (@through_list もコピーされる)
             # p "expand: cloning Join #{j.get_name} #{@name} #{name}"
             jc = j.clone_for_composite( @name, name, locale )
@@ -3971,9 +3769,8 @@
             # p "cn #{jc.get_name} #{cj.get_cell_elem_name}"
 
-            # å¯¾è±¡ã»ã«ã®å¼ã³å£ã¾ãã¯å±æ§ã®ååã«å¤æ´
+            # 対象セルの呼び口または属性の名前に変更
             jc.change_name( cj.get_cell_elem_name )
 
-            # å¯¾è±¡ã»ã«ã«å¯¾ãã Join ã®é
-å
+            # 対象セルに対する Join の配列
             ja << jc
           end
@@ -3987,5 +3784,5 @@
       dbgPrint "expand : clone #{name}_#{c.get_name}\n"
 
-      # ã»ã«ã® clone ãçæ
+      # セルの clone を生成
 #      clone_cell_list[ "#{name}_#{c.get_name}" ] =  c.clone_for_composite( name, global_name, ja )
       c2 =  c.clone_for_composite( name, global_name, namespacePath, ja, @name, region, plugin, locale )
@@ -3998,5 +3795,5 @@
     clone_cell_list.each { |nm,c|
       dbgPrint "  cloned: #{nm} = #{c.get_global_name}\n"
-      # join ã® owner ã clone ãããã»ã«ã«å¤æ´ãã V1.1.0.25
+      # join の owner を clone されたセルに変更する V1.1.0.25
       c.get_join_list.get_items.each{ |j|
         j.set_cloned( clone_cell_list[ "#{c.get_local_name}" ] )
@@ -4011,5 +3808,5 @@
   end
 
-  #=== CompositeCelltype æå®å­ãªã¹ãã®è¨­å®
+  #=== CompositeCelltype 指定子リストの設定
   def set_specifier_list( spec_list )
     return if spec_list == nil
@@ -4051,6 +3848,5 @@
 
   def get_var_list
-    []   # ç©ºã®é
-åãè¿ã
+    []   # 空の配列を返す
   end
 
@@ -4060,6 +3856,5 @@
 
   #== CompositeCelltype#get_real_celltype
-  # port_name ã«æ¥ç¶ããã¦ããå
-é¨ã®ã»ã«ã¿ã¤ããå¾ã
+  # port_name に接続されている内部のセルタイプを得る
   def get_real_celltype( port_name )
     cj = find_export port_name
@@ -4072,9 +3867,7 @@
   end
 
-  #== CompositeCelltype# generate æå®å­ã®æ
-å ±
-  # CompositeCelltype ã«ã¯ generate ãæå®ã§ããªãã®ã§ nil ãè¿ã
-  # Celltype::@generate ãåç
-§ã®ãã¨
+  #== CompositeCelltype# generate 指定子の情報
+  # CompositeCelltype には generate が指定できないので nil を返す
+  # Celltype::@generate を参照のこと
   def get_celltype_plugin
     nil
@@ -4089,15 +3882,12 @@
   end
 
-  #=== CompositeCelltype# ã¢ã¯ãã£ãã§ã¯ãªã
-  # active ã§ã¯ãªãã«å ããå
-¨ã¦ã®å
-é¨ã»ã«ã®ã»ã«ã¿ã¤ãã inactive ã®å ´åã« inactive
-  # ï¼å
-é¨ã®ã»ã«ã active ã¾ãã¯ factory ãæã£ã¦ããï¼
+  #=== CompositeCelltype# アクティブではない
+  # active ではないに加え、全ての内部セルのセルタイプが inactive の場合に inactive
+  # （内部のセルが active または factory を持っている）
   def is_inactive?
     if @b_active == false then
       @cell_list_in_composite.get_items.each{ |c|
         if c.get_celltype && c.get_celltype.is_inactive? == false then
-          # c.get_celltype == nil ã®å ´åã¯ã»ã«ã¿ã¤ãæªå®ç¾©ã§ãã§ã«ã¨ã©ã¼
+          # c.get_celltype == nil の場合はセルタイプ未定義ですでにエラー
           return false
         end
@@ -4139,5 +3929,5 @@
 
 
-#== æ§æè¦ç´ ï¼å£ãè¡¨ãã¯ã©ã¹ï¼ã»ã«ã¿ã¤ãã®å¼ã³å£ãåãå£ï¼
+#== 構文要素：口を表すクラス（セルタイプの呼び口、受け口）
 class Port < BDNode
 # @name::  str
@@ -4145,18 +3935,13 @@
 # @port_type::  :CALL, :ENTRY
 # @array_size:: nil: not array, "[]": sizeless, Integer: sized array
-# @reverse_require_cell_path:: NamespacePath :     érequireå¼ã³å
-ã»ã«  mikan namespace (å¼ã³å£ã®ã¿æå®å¯è½)
-# @reverse_require_callport_name:: Symbol:  érequireå¼ã³å
-ã»ã«ã®å¼ã³å£å
+# @reverse_require_cell_path:: NamespacePath :     逆require呼び元セル  mikan namespace (呼び口のみ指定可能)
+# @reverse_require_callport_name:: Symbol:  逆require呼び元セルの呼び口名
 #
-# set_allocator_port ã«ãã£ã¦è¨­å®ãããï¼è¨­å®ãããå ´åããã®ãã¼ãã¯ã¢ã­ã±ã¼ã¿ãã¼ãã§ããã
-# @allocator_port:: Port : ãã®å¼ã³å£ãã§ããå
-ã¨ãªã£ãå¼ã³å£ã¾ãã¯åãå£
-# @allocator_func_decl:: Decl : ãã®å¼ã³å£ãã§ããå
-ã¨ãªã£ãå¼ã³å£ã¾ãã¯åãå£ã®é¢æ°
-# @allocator_param_decl:: ParamDecl : ãã®å¼ã³å£ãã§ããå
-ã¨ãªã£ãå¼ã³å£ã¾ãã¯åãå£ã®ãã©ã¡ã¼ã¿
+# set_allocator_port によって設定される．設定された場合、このポートはアロケータポートである。
+# @allocator_port:: Port : この呼び口ができる元となった呼び口または受け口
+# @allocator_func_decl:: Decl : この呼び口ができる元となった呼び口または受け口の関数
+# @allocator_param_decl:: ParamDecl : この呼び口ができる元となった呼び口または受け口のパラメータ
 #
-# set_specifier ã«ãã£ã¦è¨­å®ããã(
+# set_specifier によって設定される(
 # @allocator_instance:: Hash : {"func_param" => [ :RELAY_ALLOC, func_name, param_name, rhs_cp_name, rhs_func_name, rhs_param_name ]}
 #                                               [:INTERNAL_ALLOC, func_name, param_name, rhs_ep_name ]
@@ -4164,28 +3949,25 @@
 #                                                                                    function    parameter   rhs
 #
-# @b_require:: bool : require ã«ããçæããã call port ã®å ´å true
-# @b_has_name:: bool : require : ååããã®ãªã¯ã¯ã¤ã¢å¼ã³å£
-# @b_inline:: bool : entry port ã®ã¿
-# @b_omit:: bool : omit æå®å­ãæå®ããã (call port ã®ã¿)
-# @b_optional:: bool : call port ã®ã¿
-# @b_ref_desc:: bool :  ref_desc ã­ã¼ã¯ã¼ããæå®ããã
-# @b_dynamic:: bool :  dynamic ã­ã¼ã¯ã¼ããæå®ããã (å¼ã³å£ã®ã¿)
+# @b_require:: bool : require により生成された call port の場合 true
+# @b_has_name:: bool : require : 名前ありのリクワイア呼び口
+# @b_inline:: bool : entry port のみ
+# @b_omit:: bool : omit 指定子が指定された (call port のみ)
+# @b_optional:: bool : call port のみ
+# @b_ref_desc:: bool :  ref_desc キーワードが指定された
+# @b_dynamic:: bool :  dynamic キーワードが指定された (呼び口のみ)
 #
 # optimize::
-# @celltype:: å±ããã»ã«ã¿ã¤ã
+# @celltype:: 属するセルタイプ
 #
-# :CALL ã®å ´åã®æé©å
-# @b_VMT_useless:: bool                     # VMT é¢æ°ãã¼ãã«ãä½¿ç¨ããªã
-# @b_skelton_useless:: bool                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
-# @b_cell_unique:: bool                     # å¼ã³å
-ã¯å¯ä¸ã®ã»ã«
-# @only_callee_port:: Port                  # å¯ä¸ã®å¼ã³å
-ãã¼ã
-# @only_callee_cell:: Cell                  # å¯ä¸ã®å¼ã³å
-ã»ã« (@b_PEPDES_in_CB_useless = true ã®ææå¹)
+# :CALL の場合の最適化
+# @b_VMT_useless:: bool                     # VMT 関数テーブルを使用しない
+# @b_skelton_useless:: bool                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
+# @b_cell_unique:: bool                     # 呼び先は唯一のセル
+# @only_callee_port:: Port                  # 唯一の呼び先ポート
+# @only_callee_cell:: Cell                  # 唯一の呼び先セル (@b_PEPDES_in_CB_useless = true の時有効)
 #
-# :ENTRY ã®å ´åã®æé©åï¼å¼ã³å£æé©åã¨åãå¤æ°åãä½¿ç¨ï¼
-# @b_VMT_useless:: bool                     # VMT é¢æ°ãã¼ãã«ãä¸è¦
-# @b_skelton_useless:: bool                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦
+# :ENTRY の場合の最適化（呼び口最適化と同じ変数名を使用）
+# @b_VMT_useless:: bool                     # VMT 関数テーブルが不要
+# @b_skelton_useless:: bool                 # スケルトン関数不要
 
   def initialize( name, sig_path, port_type, array_size = nil, reverse_require_cell_path = nil, reverse_require_entry_port_name = nil )
@@ -4203,6 +3985,5 @@
         @array_size = array_size.eval_const(nil)
       else
-        @array_size = array_size   # ããã¯ã¢ã­ã±ã¼ã¿å¼ã³å£ã®å ´åï¼å
-ã®å¼ã³å£ã§æ¢ã«è©ä¾¡æ¸ã¿ï¼
+        @array_size = array_size   # これはアロケータ呼び口の場合（元の呼び口で既に評価済み）
       end
       if @array_size == nil then
@@ -4219,10 +4000,8 @@
     object = Namespace.find( sig_path )    #1
     if object == nil then
-      # mikan signature ã®ååãä¸å®å
-¨
+      # mikan signature の名前が不完全
       cdl_error( "S1075 \'$1\' signature not found" , sig_path )
     elsif ! object.instance_of?( Signature ) then
-      # mikan signature ã®ååãä¸å®å
-¨
+      # mikan signature の名前が不完全
       cdl_error( "S1076 \'$1\' not signature" , sig_path )
     else
@@ -4231,5 +4010,5 @@
     end
 
-    # érequire
+    # 逆require
     @reverse_require_cell_path       = nil
     @reverse_require_entry_port_name = nil
@@ -4241,11 +4020,10 @@
         @reverse_require_entry_port_name = reverse_require_entry_port_name
 
-        # åãå£é
-åãï¼
+        # 受け口配列か？
         if array_size then
           cdl_error( "S1153 $1: cannot be entry port array for fixed join port", @name )
         end
 
-        # å¼ã³å£ã®ã»ã«ã¿ã¤ããæ¢ã
+        # 呼び口のセルタイプを探す
         ct_or_cell = Namespace.find( @reverse_require_cell_path )  #1
         if ct_or_cell.instance_of? Cell then
@@ -4262,9 +4040,8 @@
 
         if ct == nil then
-          return    # æ¢ã«ã¨ã©ã¼
-        end
-
-        # æ·»ãå­ãªãã®å¼ã³å£é
-åãï¼
+          return    # 既にエラー
+        end
+
+        # 添え字なしの呼び口配列か？
         port = ct.find( @reverse_require_entry_port_name )
         if port == nil || port.get_port_type != :CALL
@@ -4289,27 +4066,24 @@
   end
 
-  #=== Port#æé©åã«é¢ããå¤æ°ããªã»ãããã
-  # Region ãã¨ã«æé©åã®ãããªãããããããããªã»ãããã
+  #=== Port#最適化に関する変数をリセットする
+  # Region ごとに最適化のやりなおしをするため、リセットする
   def reset_optimize
     if @port_type == :CALL then
       # call port optimize
-      @b_VMT_useless = false                     # VMT ä¸è¦ (true ã®æ VMT ãä»ãããã¨ãªãå¼åºã)
-      @b_skelton_useless = false                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
-      @b_cell_unique = false                     # å¯ä¸ã®å¼ã³å
-ã»ã«
-      @only_callee_port = nil                    # å¯ä¸ã®å¼ã³å
-ãã¼ã
-      @only_callee_cell = nil                    # å¯ä¸ã®å¼ã³å
-ã»ã«
+      @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
+      @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
+      @b_cell_unique = false                     # 唯一の呼び先セル
+      @only_callee_port = nil                    # 唯一の呼び先ポート
+      @only_callee_cell = nil                    # 唯一の呼び先セル
     else
       # entry port optimize
       if $unopt || $unopt_entry then
-        # æé©åãªã
-        @b_VMT_useless = false                     # VMT ä¸è¦ (true ã®æ VMT ãä»ãããã¨ãªãå¼åºã)
-        @b_skelton_useless = false                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+        # 最適化なし
+        @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
+        @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
       else
-        # æé©åãã
-        @b_VMT_useless = true                      # VMT ä¸è¦ (true ã®æ VMT ãä»ãããã¨ãªãå¼åºã)
-        @b_skelton_useless = true                  # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+        # 最適化あり
+        @b_VMT_useless = true                      # VMT 不要 (true の時 VMT を介することなく呼出す)
+        @b_skelton_useless = true                  # スケルトン関数不要   (true の時、受け口関数を呼出す)
       end
     end
@@ -4340,10 +4114,9 @@
   end
 
-  #=== Port# ã¢ã­ã±ã¼ã¿ãã¼ãã®è¨­å®
-  #port:: Port : send/receive ã®ãã£ãå¼ã³å£ã¾ãã¯åãå£
-  #fd:: Decl : é¢æ°ã® declarator
-  #par:: ParamDecl : send/receive ã®ãã£ãå¼æ°
-  # ãã®å¼ã³å£ãçæããããã¨ã«ãªã£ãå¼ã³å£ã¾ãã¯åãå£ã®æ
-å ±ãè¨­å®
+  #=== Port# アロケータポートの設定
+  #port:: Port : send/receive のあった呼び口または受け口
+  #fd:: Decl : 関数の declarator
+  #par:: ParamDecl : send/receive のあった引数
+  # この呼び口が生成されるもとになった呼び口または受け口の情報を設定
   def set_allocator_port( port, fd, par )
     @allocator_port = port
@@ -4377,6 +4150,6 @@
   end
 
-  #=== Port# require å¼ã³å£ãååãæã¤ï¼
-  # require éå®
+  #=== Port# require 呼び口が名前を持つ？
+  # require 限定
   def has_name?
     @b_has_name
@@ -4391,5 +4164,5 @@
   end
 
-  #=== Port# omit æå®ããã¦ãã?
+  #=== Port# omit 指定されている?
   def is_omit?
     @b_omit || ( @signature && @signature.is_empty? )
@@ -4400,19 +4173,18 @@
   end
 
-  def set_VMT_useless                     # VMT é¢æ°ãã¼ãã«ãä½¿ç¨ããªã
+  def set_VMT_useless                     # VMT 関数テーブルを使用しない
    @b_VMT_useless = true
   end
 
-  def set_skelton_useless                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+  def set_skelton_useless                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     @b_skelton_useless = true
   end
 
-  def set_cell_unique                     # å¼ã³å
-ã»ã«ã¯ä¸ã¤ã ã
+  def set_cell_unique                     # 呼び先セルは一つだけ
     @b_cell_unique = true
   end
 
-  #=== Port# å¼ã³å£/åãå£ã®æå®å­ã®è¨­å®
-  # inline, allocator ã®æå®
+  #=== Port# 呼び口/受け口の指定子の設定
+  # inline, allocator の指定
   def set_specifier spec_list
     spec_list.each { |s|
@@ -4467,5 +4239,5 @@
         dyn_ref = "ref_desc"
       end
-      if @b_omit then     # is_omit? ã¯ is_empty? ãå«ãã§ããã®ã§ä½¿ããªã
+      if @b_omit then     # is_omit? は is_empty? も含んでいるので使えない
         cdl_error( "S9999 omit cannot be specified with $1", dyn_ref  )
       elsif @signature && @signature.is_empty? then
@@ -4480,8 +4252,6 @@
   end
 
-  #=== Port# ãªã¬ã¼ã¢ã­ã±ã¼ã¿ãå
-é¨ã¢ã­ã±ã¼ã¿ã®ã¤ã³ã¹ã¿ã³ã¹ãè¨­å®
-  # å¼ã³å£ã®åæ¹åç
-§å¯è½ãªããã«ãã»ã«ã¿ã¤ãã®è§£éã®æå¾ã§è¡ã
+  #=== Port# リレーアロケータ、内部アロケータのインスタンスを設定
+  # 呼び口の前方参照可能なように、セルタイプの解釈の最後で行う
   def set_allocator_instance
     if @allocator_instance_tmp == nil then
@@ -4496,6 +4266,6 @@
       case alloc_type
       when :INTERNAL_ALLOC
-        if ! @owner.instance_of? CompositeCelltype then # ãã¹ãé²ãããã« composite ã§ãªããã°ã¨ãã
-          cdl_error( "S1081 self allocator not supported yet"  )   # mikan ããã¯ãµãã¼ãããã¦ããã¯ããè¦èª¿æ» 12/1/15
+        if ! @owner.instance_of? CompositeCelltype then # ミスを防ぐために composite でなければとした
+          cdl_error( "S1081 self allocator not supported yet"  )   # mikan これはサポートされているはず。要調査 12/1/15
           next
         end
@@ -4504,5 +4274,5 @@
         # OK
       when :NORMAL_ALLOC
-        # ããã¸æ¥ãã®ã¯ composite ã®åãå£ã§å³è¾ºã "eEnt.func.param" å½¢å¼ã§æå®ããã¦ããå ´å
+        # ここへ来るのは composite の受け口で右辺が "eEnt.func.param" 形式で指定されていた場合
         cdl_error( "S1174 $1 not suitable for lhs, suitable lhs: 'func.param'", "#{ai[1]}.#{ai[3]}.#{ai[4]}" )
         next
@@ -4511,6 +4281,6 @@
       end
 
-      # '=' å·¦è¾º(func_name,param_name)ã¯å®å¨ããã?
-      if @signature then       # signature = nil ãªãæ¢ã«ã¨ã©ã¼
+      # '=' 左辺(func_name,param_name)は実在するか?
+      if @signature then       # signature = nil なら既にエラー
         fh = @signature.get_function_head( ai[1] )
         if fh == nil then
@@ -4520,5 +4290,5 @@
         decl = fh.get_declarator
         if ! decl.is_function? then
-          next   # æ¢ã«ã¨ã©ã¼
+          next   # 既にエラー
         end
         paramdecl = decl.get_type.get_paramlist.find( ai[2] )
@@ -4537,10 +4307,10 @@
       end
 
-      # éè¤æå®ããªãã?
+      # 重複指定がないか?
       if @allocator_instance[ "#{@name}_#{ai[1]}_#{ai[2]}" ] then
         cdl_error( "S1085 duplicate allocator specifier for \'$1_$2\'" , ai[1], ai[2] )
       end
 
-      # å³è¾ºã®ãã§ãã¯
+      # 右辺のチェック
       case alloc_type
       when :INTERNAL_ALLOC
@@ -4552,10 +4322,10 @@
         end
 
-        ep_name = ele[1]   # ã¢ã­ã±ã¼ã¿åãå£å
+        ep_name = ele[1]   # アロケータ受け口名
         ep = @owner.find ep_name.get_path[0]  # mikan "a::b"
         if ep == nil || ! ep.instance_of?( Port ) || ep.get_port_type != :ENTRY || ! ep.get_signature.is_allocator? then
           cdl_error( "S1175 $1 not found or not allocator entry port for $2" , ep_name, ai[1] )
         end
-        # å³è¾ºãã§ãã¯çµãã
+        # 右辺チェック終わり
         # ai2 = [ :INTERNAL_ALLOC, func_name, param_name, rhs_ep_name ]
         ai2 = [ ai[0], ai[1], ai[2], ep_name ]
@@ -4569,5 +4339,5 @@
           #    ele[0]    ele[1][0]  ele[1][1][0]  ele[1][1][1]        ele[1][2]    ele[2]
           #      name_space_path.Token(1).Token(2) === call_port.func.param
-          #  mikan Expression#analyze_cell_join_expression ã®å¤ç¨®ãä½æãã¦ç½®ãæããã¹ã
+          #  mikan Expression#analyze_cell_join_expression の変種を作成して置き換えるべき
 
           cdl_error( "S1176 rhs not in 'call_port.func.param' form for for $1_$2" , ai[1], ai[2] )   # S1086
@@ -4575,10 +4345,8 @@
         end
         func_name = ele[1][2]; cp_name = ele[1][1][1].get_name; param_name = ele[2].to_sym
-        cp = @owner.find cp_name    # ãªã¬ã¼ããå
-ã®å¼ã³å£
+        cp = @owner.find cp_name    # リレーする先の呼び口
         if cp then
-# mikan cp ãå¼ã³å£ã§ãããã¨ã®ãã§ãã¯ï¼å±æ§ã®å ´åãããï¼
-# mikan åãå£ããåãå£ã¸ã®ãªã¬ã¼ã¸ã®å¯¾å¿ (å¼ã³å£ããå¼ã³å£ã¸ã®ãªã¬ã¼ã¯ããããªã)  <=== ææ³ã«ããããäºé 
-ï¼å¼ã³å£å´ã§ã¢ã­ã±ã¼ã¿ãæ±ºå®ãããï¼
+# mikan cp が呼び口であることのチェック（属性の場合もある）
+# mikan 受け口から受け口へのリレーへの対応 (呼び口から呼び口へのリレーはありえない)  <=== 文法にかかわる事項（呼び口側でアロケータが決定される）
           sig = cp.get_signature
           if sig && @signature then
@@ -4590,5 +4358,5 @@
             decl = fh.get_declarator
             if ! decl.is_function? then
-              next   # æ¢ã«ã¨ã©ã¼
+              next   # 既にエラー
             end
             paramdecl = decl.get_type.get_paramlist.find( param_name )
@@ -4609,5 +4377,5 @@
 
             # else
-            # sig == nil ãªãã°æ¢ã«ã¨ã©ã¼
+            # sig == nil ならば既にエラー
           end
         else
@@ -4620,5 +4388,5 @@
           next
         end
-        # å³è¾ºãã§ãã¯çµãã
+        # 右辺チェック終わり
         # ai2 = [ :RELAY_ALLOC, func_name, param_name, rhs_cp_name, rhs_func_name, rhs_param_name ]
         ai2 = [ ai[0], ai[1], ai[2], cp_name, func_name, param_name ]
@@ -4633,8 +4401,8 @@
   end
 
-  def is_VMT_useless?                     # VMT é¢æ°ãã¼ãã«ãä½¿ç¨ããªã
+  def is_VMT_useless?                     # VMT 関数テーブルを使用しない
     if @port_type == :ENTRY && $unopt_entry == true then
-      # ãã©ã°ã¤ã³ãã $unopt_entry ãè¨­å®ããã±ã¼ã¹ã®ãã
-      # ããã§èª­ã¿åºãã¨ãã«ãfalse ãè¿ã (reset_optimize ã§ã®è¨­å®å¤æ´ã¯éããã)
+      # プラグインから $unopt_entry を設定するケースのため
+      # ここで読み出すときに、false を返す (reset_optimize での設定変更は速すぎる)
       return false
     else
@@ -4643,8 +4411,8 @@
   end
 
-  def is_skelton_useless?                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+  def is_skelton_useless?                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     if @port_type == :ENTRY && $unopt_entry == true then
-      # ãã©ã°ã¤ã³ãã $unopt_entry ãè¨­å®ããã±ã¼ã¹ã®ãã
-      # ããã§èª­ã¿åºãã¨ãã«ãfalse ãè¿ã (reset_optimize ã§ã®è¨­å®å¤æ´ã¯éããã)
+      # プラグインから $unopt_entry を設定するケースのため
+      # ここで読み出すときに、false を返す (reset_optimize での設定変更は速すぎる)
       return false
     else
@@ -4653,16 +4421,12 @@
   end
 
-  def is_cell_unique?                     # å¼ã³å
-ã®ã»ã«ã¯ä¸ã¤ï¼
+  def is_cell_unique?                     # 呼び先のセルは一つ？
     @b_cell_unique
   end
 
-  #=== Port# åãå£æé©åã®è¨­å®
-  # ãã®åãå£ãåç
-§ããå¼ã³å£ã VMT, skelton ãå¿
-è¦ã¨ãã¦ãããã©ãããè¨­å®
-  # ä¸ã¤ã§ãå¼ã³å£ãå¿
-è¦ã¨ãã¦ããï¼ããªãã¡ b_*_useless ã falseï¼å ´åã¯ã
-  # ãã®åãå£ã®æé©åã false ã¨ãã
+  #=== Port# 受け口最適化の設定
+  # この受け口を参照する呼び口が VMT, skelton を必要としているかどうかを設定
+  # 一つでも呼び口が必要としている（すなわち b_*_useless が false）場合は、
+  # この受け口の最適化を false とする
   def set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
     if ! b_VMT_useless then
@@ -4674,9 +4438,8 @@
   end
 
-  #=== Port# å¯ä¸ã®çµåå
-ãè¨­å®
-  # æé©åã§ä½¿ç¨
-  #  b_VMT_useless == true || b_skelton_useless == true ã®æã«è¨­å®ããã
-  #  optional ã®å ´å callee_cell, callee_port ã nil ã¨ãªã
+  #=== Port# 唯一の結合先を設定
+  # 最適化で使用
+  #  b_VMT_useless == true || b_skelton_useless == true の時に設定される
+  #  optional の場合 callee_cell, callee_port が nil となる
   def set_only_callee( callee_port, callee_cell )
     @only_callee_port = callee_port
@@ -4684,7 +4447,6 @@
   end
 
-  #=== Port# å¯ä¸ã®çµåå
-ãã¼ããè¿ã(compositeã®å ´åå®ã»ã«)
-  # optional å¼ã³å£ã§æªçµåã®å ´å nil ãè¿ã
+  #=== Port# 唯一の結合先ポートを返す(compositeの場合実セル)
+  # optional 呼び口で未結合の場合 nil を返す
   def get_real_callee_port
     if @only_callee_cell then
@@ -4693,7 +4455,6 @@
   end
 
-  #=== Port# å¯ä¸ã®çµåå
-ã»ã«ãè¿ã(compositeã®å ´åå®ã»ã«)
-  # optional å¼ã³å£ã§æªçµåã®å ´å nil ãè¿ã
+  #=== Port# 唯一の結合先セルを返す(compositeの場合実セル)
+  # optional 呼び口で未結合の場合 nil を返す
   def get_real_callee_cell
     if @only_callee_cell then
@@ -4710,5 +4471,5 @@
   end
 
-  #=== Port# érequire ã®çµåãçæãã
+  #=== Port# 逆require の結合を生成する
   # STAGE: S
   def create_reverse_require_join cell
@@ -4717,6 +4478,5 @@
     end
 
-    # å¼ã³å
-ã»ã«ãæ¢ã
+    # 呼び元セルを探す
     ct_or_cell = Namespace.find( @reverse_require_cell_path )   # mikan namespace    #1
     if ct_or_cell.instance_of? Cell then
@@ -4724,5 +4484,5 @@
       ct = cell2.get_celltype
       if ct == nil then
-        return    # æ¢ã«ã¨ã©ã¼
+        return    # 既にエラー
       end
     elsif ct_or_cell.instance_of? Celltype then
@@ -4734,9 +4494,9 @@
       ct = ct_or_cell
     else
-      # æ¢ã«ã¨ã©ã¼ï¼ç¡è¦
+      # 既にエラー：無視
       return
     end
 
-    # çµåãçæãã
+    # 結合を生成する
     dbgPrint "create_reverse_require_join #{cell2.get_name}.#{@reverse_require_entry_port_name}[] = #{cell.get_name}.#{@name}"
     nsp = NamespacePath.new( cell.get_name, false, cell.get_namespace )
@@ -4750,22 +4510,19 @@
   end
 
-  #=== Port# signature ã®ãã¹ã¦ã®é¢æ°ã®ãã¹ã¦ã®ãã©ã¡ã¼ã¿ããã©ã
-  #block:: ãã­ãã¯ãå¼æ°ã¨ãã¦åã(ruby ã®ææ³ã§æ¸ããªã)
-  #  ãã­ãã¯ã¯3ã¤ã®å¼æ°ãåãåã(Port, Decl,      ParamDecl)    Decl: é¢æ°ããã
-  # Signature ã¯ã©ã¹ã«ã each_param ãããï¼åãåãï¼
-  def each_param # ãã­ãã¯å¼æ°{  |port, func_decl, param_decl| }
-    return if @signature == nil                         # signature æªå®ç¾©ï¼æ¢ã«ã¨ã©ã¼ï¼
-    fha = @signature.get_function_head_array            # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    return if fha == nil                                # nil ãªãææ³ã¨ã©ã¼ã§æå¹å¤ãè¨­å®ãããªãã£ã
-
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
+  #=== Port# signature のすべての関数のすべてのパラメータをたどる
+  #block:: ブロックを引数として取る(ruby の文法で書かない)
+  #  ブロックは3つの引数を受け取る(Port, Decl,      ParamDecl)    Decl: 関数ヘッダ
+  # Signature クラスにも each_param がある（同じ働き）
+  def each_param # ブロック引数{  |port, func_decl, param_decl| }
+    return if @signature == nil                         # signature 未定義（既にエラー）
+    fha = @signature.get_function_head_array            # 呼び口または受け口のシグニチャの関数配列
+    return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
+
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     port = self
-    fha.each{ |fh|  # fh: FuncHead                      # é¢æ°é
-åä¸­ã®åé¢æ°é ­é¨
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
-        fd.get_type.get_paramlist.get_items.each{ |par| # ãã¹ã¦ã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦
+    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
+        fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
           pr.call( port, fd, par )
         }
@@ -4774,5 +4531,5 @@
   end
 
-  #=== Port# érequireæå®ããã¦ããï¼
+  #=== Port# 逆require指定されている？
   def is_reverse_required?
     @reverse_require_cell_path != nil
@@ -4826,16 +4583,15 @@
 #== Namespace
 #
-# root namespace ã ããRegion ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦çæããã
-# root namespace ã¯ãroot region ãå
-¼ã­ããã
+# root namespace だけ、Region クラスのインスタンスとして生成される
+# root namespace は、root region を兼ねるため
 #
-# @cell_list ã¯ Region ã®å ´åã«ã®ã¿æã¤ (mikan @cell_list é¢é£ã¯ Region ã«ç§»ãã¹ã)
+# @cell_list は Region の場合にのみ持つ (mikan @cell_list 関連は Region に移すべき)
 #
 class Namespace < NSBDNode
-# @name::  Symbol     # root ã®å ´å "::" (String)
+# @name::  Symbol     # root の場合 "::" (String)
 # @global_name:: str
 # @name_list:: NamedList   Signature,Celltype,CompositeCelltype,Cell,Typedef,Namespace
 # @struct_tag_list:: NamedList : StructType
-# @namespace_list:: Namespace[] : Region ã¯ Namespace ã®å­ã¯ã©ã¹ã§ãããå«ã¾ãã
+# @namespace_list:: Namespace[] : Region は Namespace の子クラスであり、含まれる
 # @signature_list:: Sginature[]
 # @celltype_list:: Celltype[]
@@ -4843,17 +4599,16 @@
 # @cell_list:: Cell[]
 # @typedef_list:: Typedef[]
-# @decl_list:: ( Typedef | StructType | EnumType )[]   ä¾å­é¢ä¿ãããå ´åã«åãã¦ãé çªã©ããã«é
-åã«æ ¼ç´ mikan enum
+# @decl_list:: ( Typedef | StructType | EnumType )[]   依存関係がある場合に備えて、順番どおりに配列に格納 mikan enum
 # @const_decl_list:: Decl[]
-# @cache_n_cells:: Integer :  get_n_cells ã®çµæãã­ã£ãã·ã¥ãã
-# @cache_generating_region:: Region :  get_n_cells ã®çµæãã­ã£ãã·ã¥ãããã¦ãããªã¼ã¸ã§ã³
-
-  # mikan namespace ã® push, pop
-
-  # namespace éå±¤ç¨ã®ã¹ã¿ãã¯
+# @cache_n_cells:: Integer :  get_n_cells の結果をキャッシュする
+# @cache_generating_region:: Region :  get_n_cells の結果をキャッシュするしているリージョン
+
+  # mikan namespace の push, pop
+
+  # namespace 階層用のスタック
   @@namespace_stack = []      # @@namespace_stack[0] = "::" (generator.rb)
   @@namespace_sp = -1
 
-  # Generator ãã¹ãç¨ã®ã¹ã¿ãã¯ (namespace éå±¤ç¨ã®ã¹ã¿ãã¯ãå¯¾æ¯ãã)
+  # Generator ネスト用のスタック (namespace 階層用のスタックを対比する)
   @@nest_stack_index = -1
   @@nest_stack = []
@@ -4861,5 +4616,5 @@
   @@root_namespace = nil
 
-  # Generator ãã¹ãç¨ã¹ã¿ãã¯ã® push, pop (ã¯ã©ã¹ã¡ã½ãã)
+  # Generator ネスト用スタックの push, pop (クラスメソッド)
   def self.push
     dbgPrint "push Namespace\n"
@@ -4881,5 +4636,5 @@
   end
 
-  # namespace éå±¤ç¨ã¹ã¿ãã¯ã® push, pop (ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã)
+  # namespace 階層用スタックの push, pop (インスタンスメソッド)
   def push ns
     @@namespace_sp += 1
@@ -4903,5 +4658,5 @@
     if( name == "::" )then
       if( @@root_namespace != nil )then
-        # root ã¯ä¸åã®ã¿çæã§ãã
+        # root は一回のみ生成できる
         raise "try to re-create root namespace"
       end
@@ -4912,5 +4667,5 @@
       if ns.kind_of? Namespace then
         dbgPrint "namespace: re-appear #{@name}\n"
-        # ç»é²æ¸ã¿ namespace ã®åç»é²
+        # 登録済み namespace の再登録
         ns.push ns
         return
@@ -4923,10 +4678,10 @@
     end
 
-    if @@namespace_sp >= 0 then   # root ã¯é¤å¤
+    if @@namespace_sp >= 0 then   # root は除外
       @@namespace_stack[@@namespace_sp].new_namespace( self )
     end
     push self
 
-    @global_name = Namespace.get_global_name    # stack ç»é²å¾åã
+    @global_name = Namespace.get_global_name    # stack 登録後取る
     @name_list = NamedList.new( nil, "symbol in namespace '#{@name}'" )
     @struct_tag_list = NamedList.new( nil, "struct tag" )
@@ -4943,6 +4698,6 @@
     @cache_generating_region = nil
     if @NamespacePath == nil then
-      # root namespace ã®å ´åã¯è¨­å®æ¸ (è¦ª namespace ãè¦ã¤ãããä¾å¤ã«ãªã)
-      set_namespace_path # @NamespacePath ã®è¨­å®
+      # root namespace の場合は設定済 (親 namespace が見つからず例外になる)
+      set_namespace_path # @NamespacePath の設定
     end
   end
@@ -4956,8 +4711,8 @@
   end
 
-  #=== Namespace:: global_name ãå¾ã
-  # parse ä¸­ã®ã¿ãã®ã¡ã½ããã¯ä½¿ãã
+  #=== Namespace:: global_name を得る
+  # parse 中のみこのメソッドは使える
   # STAGE: P
-  def self.get_global_name    # parse ä¸­æå¹
+  def self.get_global_name    # parse 中有効
     if @@namespace_sp <= 0 then
       return ""
@@ -4978,12 +4733,12 @@
   end
 
-  #=== Namespace#ã»ã«ã®åæ°ãå¾ã
-  # å­ region ã linkunit, node æå®ããã¦ããã°ãå«ããªãï¼å¥ã®ãªã³ã¯åä½ï¼
-  # ãã­ãã¿ã¤ãå®£è¨ã®ãã®ã®ã¿ã®åæ°ãå«ããªã
-  # mikan namespace ä¸ã« cell ãç½®ããªãä»æ§ã«ãªãã¨ããã®ã¡ã½ããã¯ Region ã®ãã®ã§ãã
-  # mikan ä¸è¨ã®å ´å instance_of? Namespace ã®æ¡ä»¶å¤å®ã¯ä¸è¦ã¨ãªã
+  #=== Namespace#セルの個数を得る
+  # 子 region が linkunit, node 指定されていれば、含めない（別のリンク単位）
+  # プロトタイプ宣言のもののみの個数を含めない
+  # mikan namespace 下に cell を置けない仕様になると、このメソッドは Region のものでよい
+  # mikan 上記の場合 instance_of? Namespace の条件判定は不要となる
   def get_n_cells
     if @cache_generating_region == $generating_region then
-      # ãã®ã¡ã½ããã¯ç¹°ãè¿ãå¼ã³åºããããããçµæãã­ã£ãã·ã¥ãã
+      # このメソッドは繰り返し呼び出されるため、結果をキャッシュする
       return @cache_n_cells
     end
@@ -4991,5 +4746,5 @@
     count = 0
     @cell_list.each{ |c|
-      # å®ç¾©ããã­ãã¿ã¤ãå®£è¨ã ããã¯ãnew_cell ã®æ®µéã§å¤æ­ã§ããªããããã«ã¦ã³ãããªãã
+      # 定義かプロトタイプ宣言だけかは、new_cell の段階で判断できないため、カウントしなおす
       if c.get_f_def == true then
         # print "get_n_cells: cell: #{c.get_name}\n"
@@ -5002,9 +4757,9 @@
         count += ns.get_n_cells
       else
-        # ns ã¯ Region ã§ãã
+        # ns は Region である
         rt = ns.get_region_type
         # print "get_n_cells: region: #{ns.get_name}: #{rt}\n"
         if rt == :NODE || rt == :LINKUNIT then
-          # å¥ã® linkunit ãªã®ã§å ç®ããªã
+          # 別の linkunit なので加算しない
         else
           count += ns.get_n_cells
@@ -5018,7 +4773,7 @@
   end
 
-  #=== Namespace.find : in_path ã§ç¤ºããããªãã¸ã§ã¯ããæ¢ã
+  #=== Namespace.find : in_path で示されるオブジェクトを探す
   #in_path:: NamespacePath
-  #in_path:: Array : å¤ãå½¢å¼
+  #in_path:: Array : 古い形式
   #  path [ "::", "ns1", "ns2" ]   absolute
   #  path [ "ns1", "ns2" ]         relative
@@ -5035,9 +4790,8 @@
       if name == "::" then
         i = 1
-        name = path[i]   # æ§æçã«å¿
-ãå­å¨
+        name = path[i]   # 構文的に必ず存在
         object = @@root_namespace.find( name )  # root
       else
-        # ç¸å¯¾ãã¹
+        # 相対パス
         i = 0
         object = @@namespace_stack[@@namespace_sp].find_one( name ) # crrent
@@ -5072,10 +4826,8 @@
 
       unless object.kind_of?( Namespace ) then
-        # ã¯ã©ã¹ã¡ã½ããå
-ã§ cdl_error ãå¼ã³åºããã¨ã¯ã§ããªã
-        # ã¾ããåæ¹åç
-§å¯¾å¿å¾ãæ­£ç¢ºãªè¡çªå·ãåºãªãåé¡ãçãã
+        # クラスメソッド内で cdl_error を呼び出すことはできない
+        # また、前方参照対応後、正確な行番号が出ない問題も生じる
         # cdl_error( "S1092 \'$1\' not namespace" , name )
-        # ãã®ã¡ã½ãããã nil ãå¸°ã£ãå ´å "not found" ãåºãã®ã§ãããã§ã¯åºããªã
+        # このメソッドから nil が帰った場合 "not found" が出るので、ここでは出さない
         return nil
       end
@@ -5093,5 +4845,5 @@
   end
 
-  #=== Namespace# namespace ããæ¢ããè¦ã¤ãããªããã°è¦ª namespace ããæ¢ã
+  #=== Namespace# namespace から探す。見つからなければ親 namespace から探す
   def self.find_one( name )
     return @@namespace_stack[@@namespace_sp].find_one( name )
@@ -5101,5 +4853,5 @@
 
     object = find( name )
-    # ããã¯åºãã
+    # これは出すぎ
     # dbgPrint "in '#{@name}' find '#{name}' object #{object ? object.class : "Not found"}\n"
 
@@ -5118,7 +4870,7 @@
 
   def self.find_tag( name )
-    # mikan tag : namespace ã® path ã«å¯¾å¿ããªã
-    # namespace ã®ä¸­ã«ãã£ã¦ããroot namespace ã«ãããã®ã¨è¦ãªããã
-    # ãã£ã¦ ã«ã¬ã³ã namespace ããæ ¹ã«åãã£ã¦æ¢ã
+    # mikan tag : namespace の path に対応しない
+    # namespace の中にあっても、root namespace にあるものと見なされる
+    # よって カレント namespace から根に向かって探す
     i = @@namespace_sp
     while i >= 0
@@ -5196,11 +4948,10 @@
   end
 
-  #=== Namespace# åç
-§ããã¦ããããæªå®ç¾©ã®ã»ã«ãæ¢ã
-  # ãã­ãã¿ã¤ãå®£è¨ã ãã§å®ç¾©ããã¦ããªãã±ã¼ã¹ãã¨ã©ã¼ã¨ãã
-  # ååã®æªçµåã»ã«ã«ã¤ãã¦è­¦åãã
+  #=== Namespace# 参照されているが、未定義のセルを探す
+  # プロトタイプ宣言だけで定義されていないケースをエラーとする
+  # 受動の未結合セルについて警告する
   def check_ref_but_undef
     @cell_list.each { |c|
-      if ! c.get_f_def then   # Namespace ã® @cell_list ã«ã¯ãã­ãã¿ã¤ããå«ã¾ããã±ã¼ã¹ãã
+      if ! c.get_f_def then   # Namespace の @cell_list にはプロトタイプが含まれるケースあり
         if c.get_f_ref then
           c.cdl_error( "S1093 $1 : undefined cell" , c.get_namespace_path.get_path_str )
@@ -5225,6 +4976,5 @@
   end
 
-  #=== Namespace# ã»ã«ã®åãå£ã®åç
-§ã«ã¦ã³ããè¨­å®ãã
+  #=== Namespace# セルの受け口の参照カウントを設定する
   def set_port_reference_count
     @cell_list.each { |c|
@@ -5242,9 +4992,9 @@
 
   def new_structtype( struct )
-    # struct.set_owner self   # StructType (Namespace) # StructType ã¯ BDNode ã§ã¯ãªã
+    # struct.set_owner self   # StructType (Namespace) # StructType は BDNode ではない
     dup = @struct_tag_list.get_item(struct.get_name)
     if dup != nil then
       if struct.same? dup then
-        # åããã®ã typedef ããã
+        # 同じものが typedef された
         # p "#{struct.get_name}"
         return
@@ -5270,10 +5020,10 @@
       if typedef_type.get_type_str == dup_type.get_type_str &&
           typedef_type.get_type_str_post == dup_type.get_type_str_post then
-        # åããã®ã typedef ããã
-        # ããã¸æ¥ãã®ã¯ C ã§é¢æ°ãã¤ã³ã¿ã typedef ãã¦ããã±ã¼ã¹
-        # ä»¥ä¸ã®ããã«äºéã«å®ç¾©ããã¦ããå ´åã¯ type_specifier_qualifier_list ã¨ãã¦æ±ããã
+        # 同じものが typedef された
+        # ここへ来るのは C で関数ポインタを typedef しているケース
+        # 以下のように二重に定義されている場合は type_specifier_qualifier_list として扱われる
         #    typedef long LONG; 
         #    typedef long LONG;
-        # bnf.y.rb ã§ã¯ declarator ã« TYPE_NAME ãè¨±ããªãã®ã§ãããã¸æ¥ããã¨ã¯ãªã
+        # bnf.y.rb では declarator に TYPE_NAME を許さないので、ここへ来ることはない
         # p "#{typedef.get_declarator.get_type.get_type_str} #{typedef.get_name} #{typedef.get_declarator.get_type.get_type_str_post}"
         return
@@ -5316,5 +5066,5 @@
   def new_const_decl( decl )
     decl.set_owner self   # Decl (Namespace:const)
-    if ! decl.is_const? then			# const ä¿®é£¾ãã¦ãããã¨
+    if ! decl.is_const? then			# const 修飾さていること
       if decl.is_type?( PtrType ) then
         cdl_error( "S1094 $1: pointer is not constant. check \'const\'" , decl.get_name )
@@ -5324,10 +5074,10 @@
     elsif ! decl.is_type?( IntType ) && ! decl.is_type?( FloatType ) &&
         ! decl.is_type?( BoolType ) && ! decl.is_type?( PtrType ) then
-                                            # IntType, FloatType ã§ãããã¨
+                                            # IntType, FloatType であること
       cdl_error( "S1096 $1: should be int, float, bool or pointer type" , decl.get_name )
-    elsif decl.get_initializer == nil then   # åæå¤ãæã¤ãã¨
+    elsif decl.get_initializer == nil then   # 初期値を持つこと
       cdl_error( "S1097 $1: has no initializer" , decl.get_name )
-#    elsif decl.get_initializer.eval_const(nil) == nil then  #eval_const ã¯ check_init ã§å¼åºãããã®ã§äºéãã§ãã¯
-#                                            # mikan åæå¤ãåã«å¯¾ãé©åã§ãããã¨
+#    elsif decl.get_initializer.eval_const(nil) == nil then  #eval_const は check_init で呼出されるので二重チェック
+#                                            # mikan 初期値が型に対し適切であること
 #      cdl_error( "S1098 $1: has unsuitable initializer" , decl.get_name )
     else
@@ -5351,5 +5101,5 @@
  ###
 
-  #=== Namespace# ãã¹ã¦ã®ã»ã«ã® require ãã¼ããè¨­å®
+  #=== Namespace# すべてのセルの require ポートを設定
   # STAGE: S
   def set_require_join
@@ -5357,5 +5107,5 @@
       ct.set_require_join
     }
-    # ãã¹ã¦ã® namespace ã«ã¤ãã¦ require ãã¼ããã»ãã
+    # すべての namespace について require ポートをセット
     @namespace_list.each{ |ns|
       ns.set_require_join
@@ -5363,8 +5113,8 @@
   end
 
-  #=== Namespace# Join ã¸ã® definition ã®è¨­å®ã¨ãã§ãã¯
-  # ã»ã«ã¿ã¤ãã«å±ãããã¹ã¦ã®ã»ã«ã«å¯¾ãã¦å®æ½
+  #=== Namespace# Join への definition の設定とチェック
+  # セルタイプに属するすべてのセルに対して実施
   def set_definition_join
-    # celltype ã®ã³ã¼ããçæ
+    # celltype のコードを生成
     @cell_list.each { |c|
       dbgPrint "set_definition_join #{c.get_name}\n"
@@ -5377,7 +5127,7 @@
 
   #=== Namespace# set_max_entry_port_inner_cell
-  # ã»ã«ã¿ã¤ãã«å±ãããã¹ã¦ã®ã»ã«ã«å¯¾ãã¦å®æ½
+  # セルタイプに属するすべてのセルに対して実施
   def set_max_entry_port_inner_cell
-    # celltype ã®ã³ã¼ããçæ
+    # celltype のコードを生成
     @cell_list.each { |c|
       c.set_max_entry_port_inner_cell
@@ -5388,5 +5138,5 @@
   end
 
-  #=== Namespace# ã»ã«ã®çµåããã§ãã¯ãã
+  #=== Namespace# セルの結合をチェックする
   def check_join
     @cell_list.each { |c|
@@ -5400,24 +5150,24 @@
   end
 
-  #== Namespace# ã«ã¼ãã?
-  # ã«ã¼ããã¼ã ã¹ãã¼ã¹ ã¨ ã«ã¼ããªã¼ã¸ã§ã³ã¯åã
+  #== Namespace# ルートか?
+  # ルートネームスペース と ルートリージョンは同じ
   def is_root?
     @name == "::"
   end
 
-  #== Namespace# ã«ã¼ããå¾ã
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¨ã«ã¼ããã¼ã ã¹ãã¼ã¹ã¯åããªãã¸ã§ã¯ã
+  #== Namespace# ルートを得る
+  # ルートリージョンとルートネームスペースは同じオブジェクト
   def self.get_root
     @@root_namespace
   end
 
-  #== Namespace (Region) ã«å±ããã»ã«ã®ãªã¹ã
+  #== Namespace (Region) に属するセルのリスト
   def get_cell_list
     @cell_list
   end
 
-  #== Namespace (Region)# å­ãªã¼ã¸ã§ã³ã®ãªã¹ã
+  #== Namespace (Region)# 子リージョンのリスト
   #
-  # ãªã¼ã¸ã§ã³ã¯ Namespace ã¯ã©ã¹ã§ namespace ã¨ãã¦è¨æ¶ããã¦ãã
+  # リージョンは Namespace クラスで namespace として記憶されている
   def get_region_list
     @namespace_list
@@ -5441,33 +5191,31 @@
 #
 # available if definition is Port
-# @cell_name:: string : å³è¾ºã®ã»ã«ã®åå
-# @cell:: Cell  : å³è¾ºã®ã»ã«
-# @celltype:: Celltype : å³è¾ºã®ã»ã«ã¿ã¤ã
-# @port_name:: string : å³è¾ºã®åãå£å
-# @port:: Port : å³è¾ºã®åãå£
+# @cell_name:: string : 右辺のセルの名前
+# @cell:: Cell  : 右辺のセル
+# @celltype:: Celltype : 右辺のセルタイプ
+# @port_name:: string : 右辺の受け口名
+# @port:: Port : 右辺の受け口
 # @array_member:: rhs array : available only for first appear in the same name
 # @array_member2:: Join array : available only for first appear in the same name
-# @rhs_subscript:: nil : not array, >=0: å³è¾ºã®æ·»æ°
+# @rhs_subscript:: nil : not array, >=0: 右辺の添数
 #
 
 # @through_list::  @cp_through_list + @region_through_list
-#  ä»¥ä¸ã®æ§é ãæã¤ï¼@cp_through_list ã®æ§é ã¯å
-±éï¼
-# @cp_through_list::  å¼ã³å£ã«æå®ããã through
+#  以下の構造を持つ（@cp_through_list の構造は共通）
+# @cp_through_list::  呼び口に指定された through
 #   [ [plugin_name, cell_name, plugin_arg], [plugin_name2, cell_name2, plugin_arg], ... ]
-# @region_through_list::  region ã«æå®ããã through
+# @region_through_list::  region に指定された through
 #   [ [plugin_name, cell_name, plugin_arg, region], [plugin_name2, cell_name2, plugin_arg, region2], ... ]
 #
-# @through_generated_list:: [Plugin_class object, ...]: @through_list ã«å¯¾å¿
-# @region_through_generated_list:: [Plugin_class object, ...]: @region_through_list ã«å¯¾å¿
+# @through_generated_list:: [Plugin_class object, ...]: @through_list に対応
+# @region_through_generated_list:: [Plugin_class object, ...]: @region_through_list に対応
 #
 
   include PluginModule
 
-  #=== Join# åæå
-  #name:: string: ååï¼å±æ§åãå¼ã³å£åï¼
-  #subscript:: Nil=éé
-å, -1="[]", N="[N]"
-  #rhs:: Expression: å³è¾ºã®å¼
+  #=== Join# 初期化
+  #name:: string: 名前（属性名、呼び口名）
+  #subscript:: Nil=非配列, -1="[]", N="[N]"
+  #rhs:: Expression: 右辺の式
   def initialize( name, subscript, rhs, locale = nil )
     # dbgPrint "Join#new: #{name}, #{subscript} #{rhs.eval_const(nil)}\n"
@@ -5481,6 +5229,5 @@
     @name = name
     if subscript.instance_of?( Expression ) then
-       #mikan é
-åæ·»æ°ãæ´æ°ã§ãããã¨ãæªãã§ãã¯
+       #mikan 配列添数が整数であることを未チェック
        @subscript = subscript.eval_const(nil)
        if @subscript == nil then
@@ -5494,8 +5241,7 @@
     @definition = nil
 
-    # é
-åè¦ç´ ãè¨­å®
-    # æ¬å½ã¯ãååºã®è¦ç´ ã®ã¿è¨­å®ããã®ãé©å½
-    # new_join ã§ add_array_member ã®ä¸­ã§ååºè¦ç´ ã® array_member ã«å¯¾ãè¨­å®ãã
+    # 配列要素を設定
+    # 本当は、初出の要素のみ設定するのが適当
+    # new_join で add_array_member の中で初出要素の array_member に対し設定する
     if @subscript == -1 then
       @array_member  = [self]
@@ -5515,10 +5261,9 @@
   end
 
-  #===  Join# å·¦è¾ºã«å¯¾å¿ãã celltype ã®å®ç¾©ãè¨­å®ããã¨ã¨ãã«ãã§ãã¯ãã
+  #===  Join# 左辺に対応する celltype の定義を設定するとともにチェックする
   # STAGE:   S
   #
-  #     ä»£å
-¥å¯è½ããã§ãã¯ãã
-  #definition:: Decl (attribute,varã®æ) ã¾ãã¯ Port (callã®æ) ã¾ãã¯ nil (definition ãè¦ã¤ãããªãã£ãæ)
+  #     代入可能かチェックする
+  #definition:: Decl (attribute,varの時) または Port (callの時) または nil (definition が見つからなかった時)
 
   def set_definition( definition )
@@ -5526,8 +5271,8 @@
     dbgPrint "set_definition: #{@owner.get_name}.#{@name} = #{definition.class}\n"
 
-    # äºéãã§ãã¯ã®é²æ­¢
+    # 二重チェックの防止
     if @definition then
-      # set_definition ãåå¥ã«è¡ãã±ã¼ã¹ã§ãäºéã«è¡ãããå¯è½æ§ãããï¼ç°å¸¸ã§ã¯ãªãï¼
-      # äºéã« set_definition ãå®è¡ãããã¨ through ãäºéã«é©ç¨ããã¦ãã¾ã
+      # set_definition を個別に行うケースで、二重に行われる可能性がある（異常ではない）
+      # 二重に set_definition が実行されると through が二重に適用されてしまう
       # cdl_warning( "W9999 $1, internal error: set_definition duplicate", @name )
       return
@@ -5536,13 +5281,12 @@
     @definition = definition
 
-    # mikan å·¦è¾ºå¤ãå³è¾ºå¤ã®åãã§ãã¯ãªã©
+    # mikan 左辺値、右辺値の型チェックなど
     if @definition.instance_of?( Decl ) then
       check_var_init
     elsif @definition.instance_of?( Port ) then
       check_call_port_init
-      if @definition.get_port_type == :CALL then   # :ENTRY ãªãã¨ã©ã¼ãç¡è¦ããªã
+      if @definition.get_port_type == :CALL then   # :ENTRY ならエラー。無視しない
         check_and_gen_through
-        create_allocator_join  # through ãã©ã°ã¤ã³çæããå¾ã§ãªãã¨ãæ¿å
-¥åã®ã»ã«ã®ã¢ã­ã±ã¼ã¿ãçµåãã¦ãã¾ã
+        create_allocator_join  # through プラグイン生成した後でないと、挿入前のセルのアロケータを結合してしまう
       end
     elsif @definition == nil then
@@ -5553,13 +5297,13 @@
   end
 
-  #=== Join# å¤æ°ã®åæåãã§ãã¯
+  #=== Join# 変数の初期化チェック
   def check_var_init
-    # attribute, var ã®å ´å
+    # attribute, var の場合
     if @definition.get_kind == :ATTRIBUTE then
 #        check_cell_cb_init( definition.get_type, @rhs )
-      # å³è¾ºã§åæåå¯è½ããã§ãã¯
+      # 右辺で初期化可能かチェック
       @definition.get_type.check_init( @locale, @definition.get_identifier, @rhs, :ATTRIBUTE )
     elsif @definition.get_kind == :VAR then
-      # var ã¯åæåã§ããªã
+      # var は初期化できない
       cdl_error( "S1100 $1: cannot initialize var" , @name )
     else
@@ -5569,9 +5313,9 @@
   end
 
-  #=== Join# å¼ã³å£ã®åæåãã§ãã¯
+  #=== Join# 呼び口の初期化チェック
   def check_call_port_init
     ### Port
 
-    # å·¦è¾ºã¯åãå£ãï¼åãå£ãåæåãããã¨ãã¦ããï¼ï¼
+    # 左辺は受け口か（受け口を初期化しようとしている）？
     if @definition.get_port_type == :ENTRY then
       cdl_error( "S1101 \'$1\' cannot initialize entry port" , @name )
@@ -5579,10 +5323,6 @@
     end
 
-#      # é
-åæ·»æ°ã®æ´åæ§ãã§ãã¯
-#      # å¼ã³å£ã®å®ç¾©ã§ãéé
-åãªãæ·»æ°ãªããæ·»æ°ãªãé
-åãªãæ·»æ°ãªããæ·»æ°ããé
-åãªãæ·»æ°ãã
+#      # 配列添数の整合性チェック
+#      # 呼び口の定義で、非配列なら添数なし、添数なし配列なら添数なし、添数あり配列なら添数あり
     as = @definition.get_array_size
     if ( @subscript == nil && as != nil ) then
@@ -5607,23 +5347,21 @@
 #    end
 
-    # mikan Expression ã® get_type ã§åå°åºãããæ¹ãã¹ãã¼ã
-    # mikan '=' ã®å·¦è¾ºãé
-åãã©ããæªãã§ãã¯
-    #(1) '=' ã®å³è¾ºã¯ "Cell.ePort" ã®å½¢å¼ãï¼
-    #     æ¼ç®å­ã¯ "."  ãã¤ "." ã®å·¦è¾ºã :IDENTIFIER
-    #     "." ã®å³è¾ºã¯ãã§ãã¯ä¸è¦ (synatax çã« :IDENTIFIER)
-    #(2) "Cell" ã¯å­å¨ãããï¼ï¼ååãä¸è´ãããã®ã¯ãããï¼
-    #(3) "Cell" ã¯ cell ãï¼
-    #(4) "Cell" ã® celltype ã¯æå¹ãï¼ (ç¡å¹ãªãæ¢ã«ã¨ã©ã¼ï¼
-    #(5) "ePort" ã¯ "Cell" ã® celltype å
-ã«å­å¨ãããï¼
-    #(6) "ePort" ã¯ entry port ãï¼
-    #(7) signature ã¯ä¸è´ããã
-
-    # å³è¾ºããªãï¼ä»¥åã®æ®µéã§ã¨ã©ã¼ï¼
+    # mikan Expression の get_type で型導出させる方がスマート
+    # mikan '=' の左辺が配列かどうか未チェック
+    #(1) '=' の右辺は "Cell.ePort" の形式か？
+    #     演算子は "."  かつ "." の左辺が :IDENTIFIER
+    #     "." の右辺はチェック不要 (synatax 的に :IDENTIFIER)
+    #(2) "Cell" は存在するか？（名前が一致するものはあるか）
+    #(3) "Cell" は cell か？
+    #(4) "Cell" の celltype は有効か？ (無効なら既にエラー）
+    #(5) "ePort" は "Cell" の celltype 内に存在するか？
+    #(6) "ePort" は entry port か？
+    #(7) signature は一致するか
+
+    # 右辺がない（以前の段階でエラー）
     return unless @rhs
 
-    # cCall = composite.cCall; ã®ãã§ãã¯ï¼ãã®å½¢å¼ã¯å±æ§ç¨
-    # å¼ã³å£ã export ããã«ã¯ cCall => composite.cCall; ã®å½¢å¼ãç¨ãã
+    # cCall = composite.cCall; のチェック．この形式は属性用
+    # 呼び口を export するには cCall => composite.cCall; の形式を用いる
     if @rhs.instance_of?( Array ) == true && @rhs[0] == :COMPOSITE then
       cdl_error( "S1107 to export port, use \'cCall => composite.cCall\'"  )
@@ -5633,5 +5371,5 @@
     end
 
-    # å³è¾ºã® Expression ã®è¦ç´ ãåãåºã
+    # 右辺の Expression の要素を取り出す
     ret = @rhs.analyze_cell_join_expression
     if ret == nil then   #1
@@ -5641,13 +5379,11 @@
 
     nsp, @rhs_subscript, @port_name = ret[0], ret[1], ret[2]
-    @cell_name = nsp.get_name     # mikan ns::cellname ã®å½¢å¼ã®èæ
-®
-
-    # composite ã®å®ç¾©ã®ä¸­ãªã object ã¯çµåå
- cell ããè¦ã¤ãããªããã° nil ãè¿ã
-    # composite ã®å®ç¾©å¤ãªã false ãè¿ã
+    @cell_name = nsp.get_name     # mikan ns::cellname の形式の考慮
+
+    # composite の定義の中なら object は結合先 cell か、見つからなければ nil が返る
+    # composite の定義外なら false が返る
     object = CompositeCelltype.find( @cell_name )
     if object == false then
-#     mikan å·¦è¾ºã namespace ã«å¯¾å¿ãã¦ããªãããã path ã«ãã¦ find
+#     mikan 左辺が namespace に対応していないため。 path にして find
       # p nsp.get_path_str, nsp.get_path
       object = Namespace.find( nsp )    #1
@@ -5668,5 +5404,5 @@
       object.set_f_ref
 
-      # å³è¾ºã®ã»ã«ã®ã»ã«ã¿ã¤ã
+      # 右辺のセルのセルタイプ
       celltype = object.get_celltype
 
@@ -5681,9 +5417,8 @@
           cdl_error( "S1113 \'$1\' signature mismatch" , @port_name )
         elsif object2.get_array_size then
-          # åãå£é
-å
+          # 受け口配列
 
           unless @rhs_subscript then
-            # å³è¾ºã«æ·»æ°æå®ããªãã£ã
+            # 右辺に添数指定がなかった
             cdl_error( "S1114 \'$1\' should be array" , @port_name )
           else
@@ -5691,6 +5426,5 @@
             as = object2.get_array_size
             if( as.kind_of?( Integer ) && as <= @rhs_subscript )then
-              # åãå£é
-åã®å¤§ããã«å¯¾ããå³è¾ºã®æ·»æ°ãåããå¤§ãã
+              # 受け口配列の大きさに対し、右辺の添数が同じか大きい
               cdl_error( "S1115 $1[$2]: subscript out of range (< $3)" , @port_name, @rhs_subscript, as )
             else
@@ -5699,6 +5433,5 @@
               @celltype = celltype
               @port = object2
-              # å³è¾ºã®ã»ã«ã®åãå£ object2 ãåç
-§æ¸ã¿ã«ãã
+              # 右辺のセルの受け口 object2 を参照済みにする
               # object2: Port, @definition: Port
               @cell.set_entry_port_max_subscript( @port, @rhs_subscript )
@@ -5710,6 +5443,5 @@
           end
         elsif @rhs_subscript then
-          # åãå£é
-åã§ãªãã®ã«å³è¾ºã§æ·»æ°æå®ããã¦ãã
+          # 受け口配列でないのに右辺で添数指定されている
           cdl_error( "S1116 \'$1\' entry port is not array" , @port_name )
         else
@@ -5719,39 +5451,35 @@
           @celltype = celltype
 
-          # å³è¾ºã®ã»ã« object ã®åãå£ object2 ãåç
-§æ¸ã¿ã«ãã
+          # 右辺のセル object の受け口 object2 を参照済みにする
           # object2: Port, @definition: Port
 
           # debug
           # p "rhs:  #{@cell}  #{@cell.get_name}"
-        end  # end of port (object2) ãã§ãã¯
+        end  # end of port (object2) チェック
 
         #else
-        #  celltype == nil (ãã§ã«ã¨ã©ã¼)
-      end  # end of celltyep ãã§ãã¯
+        #  celltype == nil (すでにエラー)
+      end  # end of celltyep チェック
 
 
       check_region( object )
 
-    end  # end of cell (object) ãã§ãã¯
-
-  end
-
-  #=== Join# ã¢ã­ã±ã¼ã¿ã®çµåãçæ
+    end  # end of cell (object) チェック
+
+  end
+
+  #=== Join# アロケータの結合を生成
   # STAGE: S
-  #cell::  å¼ã³å£ã®çµåå
-ã®ã»ã«
+  #cell::  呼び口の結合先のセル
   #
-  # ããã§ã¯å¼ã³å£å´ã«çæãããã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãçæ
-  # åãå£å´ã¯ Cell ã® set_specifier_list ã§çæ
-  #  a[*] ã®å
-å®¹ã¯ Cell ã® set_specifier_list ãåç
-§
+  # ここでは呼び口側に生成されるアロケータ呼び口の結合を生成
+  # 受け口側は Cell の set_specifier_list で生成
+  #  a[*] の内容は Cell の set_specifier_list を参照
   def create_allocator_join
 
-    cell = get_rhs_cell2   # å³è¾ºã®ã»ã«ãå¾ã
+    cell = get_rhs_cell2   # 右辺のセルを得る
     port = get_rhs_port2
 
-    if( cell && cell.get_allocator_list ) then      # cell == nil ãªãæ¢ã«ã¨ã©ã¼
+    if( cell && cell.get_allocator_list ) then      # cell == nil なら既にエラー
 
       dbgPrint "create_allocator_join: #{@owner.get_name}.#{@name}=>#{cell ? cell.get_name : "nil"}\n"
@@ -5760,6 +5488,6 @@
 
         if( a[0+1] == port && a[1+1] == @rhs_subscript )then
-          # ååã®ä¸è´ãããã®ã®çµåãçæãã
-          # éä¸è¶³ã¯ãå¥éãã§ãã¯ããã
+          # 名前の一致するものの結合を生成する
+          # 過不足は、別途チェックされる
           cp_name = :"#{@name}_#{a[2+1]}_#{a[3+1]}"
           # p "creating allocator join #{cp_name} #{@subscript} #{a[1+1]}"
@@ -5776,9 +5504,8 @@
   end
 
-  #=== Join# ãªã¼ã¸ã§ã³éã®çµåããã§ãã¯
-  # ãªã¼ã¸ã§ã³éã® through ã«ãã @region_through_list ã®ä½æ
-  # å®éã®çæã¯ check_and_gen_through ã§è¡ã
-  # mikan Cell#distance ã¨Region ã¸ãã©ãçãã¾ã§ããã®å¦çã«å
-±éé¨åãå¤ã
+  #=== Join# リージョン間の結合をチェック
+  # リージョン間の through による @region_through_list の作成
+  # 実際の生成は check_and_gen_through で行う
+  # mikan Cell#distance とRegion へたどり着くまでための処理に共通部分が多い
   def check_region( object )
 
@@ -5787,19 +5514,18 @@
     # print "DOMAIN: check_region #{@owner.get_name}.#{@name} => #{object.get_name}\n"
 
-    # ãã©ã°ã¤ã³ã§çæããããªãã§ã¯çæããªã
-    # ãããªãã¨ãã©ã°ã¤ã³çæããããã®ã¨ã®éã§ãç¡éã«çæããã
+    # プラグインで生成されたなかでは生成しない
+    # さもないとプラグイン生成されたものとの間で、無限に生成される
 ##    if Generator.get_nest >= 1 then
-##    if Generator.get_plugin then     # mikan ããã¯å¿
-è¦ï¼ (æå³è§£ææ®µéã§ã®å®è¡ã«ãªãã®ã§ä¸é©å)
+##    if Generator.get_plugin then     # mikan これは必要？ (意味解析段階での実行になるので不適切)
     if @owner.get_plugin.kind_of?( ThroughPlugin ) then
-      # ãã©ã°ã¤ã³çæãããã»ã«ã®å ´åãçµåãã§ãã¯ã®ã¿
+      # プラグイン生成されたセルの場合、結合チェックのみ
       return
     end
 
-    # region ã®ãã§ãã¯
-    r1 = @owner.get_region      # å¼ã³å£ã»ã«ã® region
-    r2 = object.get_region      # åãå£ã»ã«ã® region
-
-    if ! r1.equal? r2 then      # åä¸ region ãªãå¼åºãå¯è½
+    # region のチェック
+    r1 = @owner.get_region      # 呼び口セルの region
+    r2 = object.get_region      # 受け口セルの region
+
+    if ! r1.equal? r2 then      # 同一 region なら呼出し可能
 
       f1 = r1.get_family_line
@@ -5808,8 +5534,6 @@
       len2 = f2.length
 
-      # ä¸ä¸è´ã«ãªãã¨ããï¼å
-å¼ï¼ãæ¢ã
-      i = 1  # i = 0 ã¯ :RootRegion ãªã®ã§å¿
-ãä¸è´
+      # 不一致になるところ（兄弟）を探す
+      i = 1  # i = 0 は :RootRegion なので必ず一致
       while( i < len1 && i < len2 )
         if( f1[i] != f2[i] )then
@@ -5819,6 +5543,5 @@
       end
 
-      sibling_level = i     # å
-å¼ã¨ãªãã¬ãã«ããããã¯ã©ã¡ããä¸æ¹ãçµãã£ãã¬ãã«
+      sibling_level = i     # 兄弟となるレベル、もしくはどちらか一方が終わったレベル
 
       dbgPrint "sibling_level: #{i}\n"
@@ -5833,8 +5556,5 @@
 
 
-      # å¼ã³å´ã«ã¤ãã¦å¼ã³å
-ã®ã¬ãã«ããå
-å¼ã¬ãã«ã¾ã§ï¼out_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 呼び側について呼び元のレベルから兄弟レベルまで（out_through をチェックおよび挿入）
       i = len1 -1
       if b_to_through then
@@ -5860,5 +5580,5 @@
 
         out_through_list.each { |ol|
-          if ol[0] then    # plugin_name ãæå®ããã¦ããªããã°ç»é²ããªã
+          if ol[0] then    # plugin_name が指定されていなければ登録しない
             plugin_arg = CDLString.remove_dquote ol[1]
             through = [ ol[0], :"Join_out_through_", plugin_arg, f1[i], f1[i-1], :OUT_THROUGH, region_count]
@@ -5873,14 +5593,12 @@
       end
 
-      # å
-å¼ã¬ãã«ã«ããã¦ï¼to_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 兄弟レベルにおいて（to_through をチェックおよび挿入）
       if f1[sibling_level] && f2[sibling_level] then
         dbgPrint "going from #{f1[sibling_level].get_name} to #{f2[sibling_level].get_name}\n"
         found = 0
-        region_count = f1[i].next_to_through_count( f2[sibling_level].get_name )   # to_through ã® region ã«ã¦ã³ã
+        region_count = f1[i].next_to_through_count( f2[sibling_level].get_name )   # to_through の region カウント
         f1[sibling_level].get_to_through_list.each { |t|
-          if t[0][0] == f2[sibling_level].get_name then   # region åãä¸è´ããã ?
-            if t[1] then    # plugin_name ãæå®ããã¦ããªããã°ç»é²ããªã
+          if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
+            if t[1] then    # plugin_name が指定されていなければ登録しない
               plugin_arg = CDLString.remove_dquote t[2]
               through = [ t[1], :"Join_to_through__", plugin_arg, f1[sibling_level], f2[sibling_level], :TO_THROUGH, region_count ]
@@ -5905,9 +5623,7 @@
       end
 
-      # åãå´ã«ã¤ãã¦å
-å¼ã¬ãã«ããåãå´ã®ã¬ãã«ã¾ã§ï¼in_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 受け側について兄弟レベルから受け側のレベルまで（in_through をチェックおよび挿入）
       if b_to_through then
-        i = sibling_level + 1      # to_through ãçµãå ´åãæåã® in_through ã¯é©ç¨ããªã
+        i = sibling_level + 1      # to_through を経た場合、最初の in_through は適用しない
       else
         i = sibling_level
@@ -5932,5 +5648,5 @@
         end
         in_through_list.each { |il|
-          if il[0] then    # plugin_name ãæå®ããã¦ããªããã°ç»é²ããªã
+          if il[0] then    # plugin_name が指定されていなければ登録しない
             plugin_arg = CDLString.remove_dquote il[1]
             through = [ il[0], :"Join_in_through_", plugin_arg, f2[i-1], f2[i],:IN_THROUGH, region_count ]
@@ -5945,13 +5661,13 @@
 
 
-  #=== Join# çæããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
-  # å³è¾ºã®ã»ã«ããçæãããªããªã¼ã¸ã§ã³ã«ããã°ã¨ã©ã¼
-  # å³è¾ºã¯ããã©ã°ã¤ã³çæãããã»ã«ãããã°ããããå¯¾è±¡ã¨ãã
+  #=== Join# 生成しないリージョンへの結合かチェック
+  # 右辺のセルが、生成されないリージョンにあればエラー
+  # 右辺は、プラグイン生成されたセルがあれば、それを対象とする
   def check_region2
     lhs_cell = @owner
 
-    # çæããªããªã¼ã¸ã§ã³ã®ã»ã«ã¸ã®çµåãï¼
+    # 生成しないリージョンのセルへの結合か？
     # if join.get_cell && ! join.get_cell.is_generate? then
-    # if get_rhs_cell && ! get_rhs_cell.is_generate? then # composite ã»ã«ããã­ã¿ã¤ãå®£è¨ã®å ´åä¾å¤
+    # if get_rhs_cell && ! get_rhs_cell.is_generate? then # composite セルがプロタイプ宣言の場合例外
     # print "Link root: (caller #{@owner.get_name}) '#{@owner.get_region.get_link_root.get_name}'"
     # print " #{@owner.get_region.get_link_root == get_rhs_region.get_link_root ? "==" : "!="} "
@@ -5966,5 +5682,5 @@
       end
     else
-      # rhs ã®ã»ã«ãå­å¨ããªãã£ã (æ¢ã«ã¨ã©ã¼)
+      # rhs のセルが存在しなかった (既にエラー)
     end
   end
@@ -5974,9 +5690,9 @@
   end
 
-  #=== Join# specifier ãè¨­å®
+  #=== Join# specifier を設定
   # STAGE: B
-  # set_specifier_list ã¯ãjoin ã®è§£æã®æå¾ã§å¼ã³åºããã
-  # through æå®å­ãè¨­å®
-  #  check_and_gen_through ãå¼åºãã¦ãthrough çæ
+  # set_specifier_list は、join の解析の最後で呼び出される
+  # through 指定子を設定
+  #  check_and_gen_through を呼出して、through 生成
   def set_specifier_list( specifier_list )
 
@@ -5986,6 +5702,5 @@
         # set plugin_name
         plugin_name = s[1].to_s
-        plugin_name[0] = "#{plugin_name[/^./].upcase}"     # å
-é ­æå­ãå¤§æå­ã« : ruby ã®ã¯ã©ã¹åã®å¶ç´
+        plugin_name[0] = "#{plugin_name[/^./].upcase}"     # 先頭文字を大文字に : ruby のクラス名の制約
 
         # set cell_name
@@ -5994,5 +5709,5 @@
         # set plugin_arg
         plugin_arg = CDLString.remove_dquote s[2].to_s
-        # plugin_arg = s[2].to_s.gsub( /\A"(.*)/, '\1' )   # åå¾ã® "" ãåãé¤ã
+        # plugin_arg = s[2].to_s.gsub( /\A"(.*)/, '\1' )   # 前後の "" を取り除く
         # plugin_arg.sub!( /(.*)"\z/, '\1' )
 
@@ -6003,8 +5718,8 @@
   end
 
-  #=== Join# through ã®ãã§ãã¯ã¨çæ
-  # new_join ã®ä¸­ã® check_region ã§ region éã® through ã @region_through ã«è¨­å®ããã
-  # set_specifier ã§å¼ã³å£ã®çµåã§æå®ããã through ã @cp_through è¨­å®ããã
-  # ãã®å¾ããã®ã¡ã½ãããå¼ã°ãã
+  #=== Join# through のチェックと生成
+  # new_join の中の check_region で region 間の through が @region_through に設定される
+  # set_specifier で呼び口の結合で指定された through が @cp_through 設定される
+  # その後、このメソッドが呼ばれる
   def check_and_gen_through
 
@@ -6027,9 +5742,8 @@
 
     @through_list = @cp_through_list + @region_through_list
-      # å¾ãã @cp_through_list ã¨ @region_through_list ã«åããããããã®ãããªå®è£
-ã«ãªã£ã
+      # 後から @cp_through_list と @region_through_list に分けたため、このような実装になった
 
     if @through_list then           # nil when the join is not Port
-      len = @through_list.length    # through ãé£æ¥ãã¦ããæ°
+      len = @through_list.length    # through が連接している数
     else
       len = 0
@@ -6042,5 +5756,5 @@
     end
 
-    # é£ç¶ãã through ã«ã¤ãã¦ãåãå£å´ããé ã«ã»ã«ãçæãè§£éãã
+    # 連続した through について、受け口側から順にセルを生成し解釈する
     i = len - 1
     while i >= 0
@@ -6072,5 +5786,5 @@
 
       else
-        # æå¾ã®ã»ã«ã®å ´åãæ¬¡ã®ã»ã«ã®ååããã¼ãå
+        # 最後のセルの場合、次のセルの名前、ポート名
         next_cell      = @cell
         next_port_name = @port_name
@@ -6078,6 +5792,5 @@
 
         if next_cell == nil then
-          # çµåå
-ããªã
+          # 結合先がない
           return
         end
@@ -6085,16 +5798,14 @@
 
       if i >= cp_len then
-        # region_through_list é¨å
-        # region ãã @cell_name.@port_name ã¸ã® through ããªããæ¢ã
+        # region_through_list 部分
+        # region から @cell_name.@port_name への through がないか探す
         # rp = @through_list[i][3].find_cell_port_through_plugin( @cell_name, @port_name ) #762
         rp = @through_list[i][3].find_cell_port_through_plugin( @cell.get_global_name, @port_name, @rhs_subscript )
-           # @through_list[i] ã¨ @region_through_list[i-cp_len] ã¯åã
-        # å
-±ç¨ããªãããã«ããã«ã¯ãè¦ã¤ãããªãã£ããã¨ã«ããã°ãã
+           # @through_list[i] と @region_through_list[i-cp_len] は同じ
+        # 共用しないようにするには、見つからなかったことにすればよい
         # rp = nil
       else
-        # region ä»¥å¤ã®ãã®ã¯å
-±æããªã
-        # å¼ã³å£å´ã«æå®ããã¦ããããplugin_arg ãç°ãªããããããªã
+        # region 以外のものは共有しない
+        # 呼び口側に指定されているし、plugin_arg が異なるかもしれない
         rp = nil
       end
@@ -6106,14 +5817,13 @@
         end
       else
-        # è¦ã¤ãã£ããã®ãå
-±ç¨ãã
+        # 見つかったものを共用する
         @through_generated_list[ i ] = rp
       end
 
       if i >= cp_len then
-        # @through_generated_list ã®ãã¡ @region_through_listã«å¯¾å¿ããé¨å
+        # @through_generated_list のうち @region_through_listに対応する部分
         @region_through_generated_list[ i - cp_len ] = @through_generated_list[ i ]
         if rp == nil then
-          # çæãããã®ã region(@through_list[i][3]) ã®ãªã¹ãã«è¿½å 
+          # 生成したものを region(@through_list[i][3]) のリストに追加
           # @through_list[i][3].add_cell_port_through_plugin( @cell_name, @port_name, @through_generated_list[i] ) #762
           @through_list[i][3].add_cell_port_through_plugin( @cell.get_global_name, @port_name, @rhs_subscript, @through_generated_list[i] )
@@ -6122,10 +5832,9 @@
 
       if i == 0 then
-        # æãå¼ã³å£å´ã®ã»ã«ã¯ãCDL ä¸ã®çµåããªããããåç
-§ããããã¨ã«ãªããªã
-        # mikan namespace å¯¾å¿
+        # 最も呼び口側のセルは、CDL 上の結合がないため、参照されたことにならない
+        # mikan namespace 対応
         # cell = Namespace.find( [ @through_generated_list[0].get_cell_name] )    #1
         if @through_generated_list[0] == nil then
-          return  # plugin_object ã®çæã«å¤±æãã¦ãã
+          return  # plugin_object の生成に失敗している
         end
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
@@ -6151,5 +5860,5 @@
   end
 
-  #=== Join# through ãã©ã°ã¤ã³ãå¼ã³åºãã¦ CDL çæãããã¨ã¨ãã«ãimport ãã
+  #=== Join# through プラグインを呼び出して CDL 生成させるとともに、import する
   def gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name, next_port_subscript, plClass )
 
@@ -6159,5 +5868,5 @@
     plugin_arg            = through[ 2 ]
     if through[ 3 ] then
-      # region éã® through ã®å ´å
+      # region 間の through の場合
       @@start_region      = through[ 3 ]
       if next_cell.get_region.equal? @@start_region then
@@ -6169,8 +5878,8 @@
       @@region_count      = through[ 6 ]
     else
-      # å¼ã³å£ã® through ã®å ´å
-      @@start_region      = @owner.get_region    # å¼ã³å£å´ã»ã«ã® region
-      @@end_region        = next_cell.get_region # æ¬¡ã®ã»ã«ã® region
-      @@through_type      = :THROUGH             # å¼ã³å£ã® through æå®
+      # 呼び口の through の場合
+      @@start_region      = @owner.get_region    # 呼び口側セルの region
+      @@end_region        = next_cell.get_region # 次のセルの region
+      @@through_type      = :THROUGH             # 呼び口の through 指定
       @@region_count      = 0
     end
@@ -6194,7 +5903,6 @@
     @through_generated_list[ i ] = plugin_object
 
-    # Region ã«é¢ããæ
-å ±ãè¨­å®
-    # å¾ããè¿½å ããã®ã§ãnew ã®å¼æ°å¤ã§è¨­å®
+    # Region に関する情報を設定
+    # 後から追加したので、new の引数外で設定
     # plugin_object.set_through_info( start_region, end_region, through_type )
 
@@ -6202,6 +5910,6 @@
   end
 
-  #ãã©ã°ã¤ã³ã¸ã®å¼æ°ã§æ¸¡ããªããã®ããä¸æçã«è¨æ¶ãã¦ãã
-  # ãã©ã°ã¤ã³ã® initialize ã®ä¸­ã§ã³ã¼ã«ããã¯ãã¦è¨­å®ãã
+  #プラグインへの引数で渡さないものを、一時的に記憶しておく
+  # プラグインの initialize の中でコールバックして設定する
   @@plugin_creating_join = nil
   @@start_region = nil
@@ -6210,9 +5918,7 @@
   @@region_count = nil
 
-  #=== Join# ThroughPlugin ã®è¿½å æ
-å ±ãè¨­å®ãã
-  # ãã®ã¡ã½ããã¯ ThroughPlugin#initialize ããå¼ã³åºããã
-  # plugin_object ãçæããéã®å¼æ°ã§ã¯ä¸è¶³ããæ
-å ±ãè¿½å ãã
+  #=== Join# ThroughPlugin の追加情報を設定する
+  # このメソッドは ThroughPlugin#initialize から呼び出される
+  # plugin_object を生成する際の引数では不足する情報を追加する
   def self.set_through_info plugin_object
     plugin_object.set_through_info( @@start_region, @@end_region, @@through_type,
@@ -6226,13 +5932,11 @@
   end
 
-  #=== Join#é
-åæ·»æ°ãå¾ã
-  # @subscript ã®èª¬æãåç
-§ã®ãã¨
+  #=== Join#配列添数を得る
+  # @subscript の説明を参照のこと
   def get_subscript
     @subscript
   end
 
-  def get_cell_name         # åãå£ã»ã«å
+  def get_cell_name         # 受け口セル名
     @cell_name
   end
@@ -6246,42 +5950,39 @@
   end
 
-  #=== Join# å³è¾ºã®å®ã»ã«ãå¾ã
-  #    å®ã»ã«ã¨ã¯ through ã§æ¿å
-¥ããããã®ãcomposite ã®å
-é¨ãªã©å®éã«çµåãããå
-
-  #    ãã®ã¡ã½ããã¯ãget_rhs_port ã¨å¯¾ã«ãªã£ã¦ãã
-  #    ãã®ã¡ã½ããã¯ãæå³è§£ææ®µéã§ã¯å¼ã³åºãã¦ã¯ãªããªã (å¯¾è±¡ã»ã«ã®æå³è§£æãæ¸ãåã«ã¯æ­£ããçµæãè¿ããªã)
+  #=== Join# 右辺の実セルを得る
+  #    実セルとは through で挿入されたもの、composite の内部など実際に結合される先
+  #    このメソッドは　get_rhs_port と対になっている
+  #    このメソッドは、意味解析段階では呼び出してはならない (対象セルの意味解析が済む前には正しい結果を返さない)
   def get_rhs_cell
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
-      # mikan through ã§çæãããã®ã root namespace éå®
+      # mikan through で生成したものが root namespace 限定
       if @through_generated_list[0] then
         # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
-        # cell ã nil ã«ãªãã®ã¯ãã©ã°ã¤ã³ã® get_cell_namespace_path ãæ­£ãããªããã
-        # ãã©ã°ã¤ã³çæã³ã¼ããã¨ã©ã¼ã«ãªã£ã¦ããã
-        # ã§ãã®æªããã©ã°ã¤ã³ãå¤ããã°ãcell == nil ãã¯ãããæ¹ãããã
+        # cell が nil になるのはプラグインの get_cell_namespace_path が正しくないか、
+        # プラグイン生成コードがエラーになっている。
+        # できの悪いプラグインが多ければ、cell == nil をはじいた方がよい。
         return cell.get_real_cell( @through_generated_list[0].get_through_entry_port_name )
       else
-        return nil            # generate ã«å¤±æãã¦ãã
+        return nil            # generate に失敗している
       end
     elsif @cell then
       return @cell.get_real_cell( @port_name )
     else
-      # å³è¾ºãæªå®ç¾©ã®å ´å @cell ã¯ nil (æ¢ã«ã¨ã©ã¼)
+      # 右辺が未定義の場合 @cell は nil (既にエラー)
       return nil
     end
   end
 
-  #=== Join# å³è¾ºã®ã»ã«ãå¾ã
-  # å³è¾ºã®ã»ã«ãå¾ãããã ããcomposite å±éããã¦ããªã
-  # composite å±éããããã®ãå¾ãã«ã¯ get_rhs_cell ãä½¿ã
-  # ãã­ãã¿ã¤ãå®£è¨ããããã¦ããªãå ´åã«ã¯ããã¡ãããä½¿ããªã
-  # ãã®ã¡ã½ããã¯ get_rhs_port2 ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺のセルを得る
+  # 右辺のセルを得る。ただし、composite 展開されていない
+  # composite 展開されたものを得るには get_rhs_cell を使う
+  # プロトタイプ宣言しかされていない場合には、こちらしか使えない
+  # このメソッドは get_rhs_port2 と対になっている
   def get_rhs_cell2
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
-      # mikan through ã§çæãããã®ã root namespace éå®
+      # mikan through で生成したものが root namespace 限定
       # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name ] )
       if @through_generated_list[0] then
@@ -6289,5 +5990,5 @@
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
       else
-        cell = @cell            # generate ã«å¤±æãã¦ãã
+        cell = @cell            # generate に失敗している
       end
     else
@@ -6298,8 +5999,8 @@
   end
 
-  #=== Join# å³è¾ºã®ã»ã«ãå¾ã
-  # through ã¯é©ç¨ããªãããcomposite ã¯å±éããå¾ã®ã»ã«
-  # (æå³è§£æãçµãã£ã¦ããªãã¨ãcomposite å±éãçµãã£ã¦ããªã)
-  # ãã®ã¡ã½ããã¯ get_rhs_port3 ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺のセルを得る
+  # through は適用しないが、composite は展開した後のセル
+  # (意味解析が終わっていないと、composite 展開が終わっていない)
+  # このメソッドは get_rhs_port3 と対になっている
   def get_rhs_cell3
     if @cell then
@@ -6308,13 +6009,13 @@
   end
 
-  #=== Join# å³è¾ºã®ã»ã«ã®ãªã¼ã¸ã§ã³ãå¾ã
-  # å³è¾ºãæªå®ç¾©ã®å ´åãnil ãè¿ã
-  # composite ã®å ´åãå®ã»ã«ã§ã¯ãªã composite cell ã® region ãè¿ã(composite ã¯ãã¹ã¦åã region ã«å±ãã)
-  # composite ã® cell ããã­ãã¿ã¤ãå®£è¨ããã¦ããã¨ã get_rhs_cell/get_real_cell ã¯ ruby ã®ä¾å¤ã¨ãªã
+  #=== Join# 右辺のセルのリージョンを得る
+  # 右辺が未定義の場合、nil を返す
+  # composite の場合、実セルではなく composite cell の region を返す(composite はすべて同じ region に属する)
+  # composite の cell がプロトタイプ宣言されているとき get_rhs_cell/get_real_cell は ruby の例外となる
   def get_rhs_region
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
       if @through_generated_list[0] then
-        # mikan through ã§çæãããã®ã root namespace éå®
+        # mikan through で生成したものが root namespace 限定
         # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
@@ -6323,15 +6024,14 @@
         end
       else
-        return nil       # generate ã«å¤±æãã¦ãã
+        return nil       # generate に失敗している
       end
     elsif @cell then
       return @cell.get_region
     end
-    # å³è¾ºãæªå®ç¾©ã®å ´å @cell ã¯ nil (æ¢ã«ã¨ã©ã¼)
+    # 右辺が未定義の場合 @cell は nil (既にエラー)
     return nil
   end
 
-  def get_cell_global_name  # åãå£ã»ã«åï¼ã³ã³ãã¸ãããªãå±éããå
-å´ã®ã»ã«ï¼
+  def get_cell_global_name  # 受け口セル名（コンポジットなら展開した内側のセル）
 
     # debug
@@ -6347,29 +6047,24 @@
   end
 
-  #===  Join# çµåã®å³è¾ºã®åãå£ã®åå
-  #     namespace å + '_' + ã»ã«å + '_' + åãå£å   ï¼ãã®ã»ã«ã composite ãªãã°å±éå¾ã®ã»ã«åãåãå£åï¼
-  #subscript:: Integer  å¼ã³å£é
-åã®ææ·»æ° ã¾ãã¯ nil å¼ã³å£é
-åã§ãªãæ
-  def get_port_global_name( subscript = nil )  # åãå£åï¼ã³ã³ãã¸ãããªãå±éããå
-å´ã®ã»ã«ï¼
+  #===  Join# 結合の右辺の受け口の名前
+  #     namespace 名 + '_' + セル名 + '_' + 受け口名   （このセルが composite ならば展開後のセル名、受け口名）
+  #subscript:: Integer  呼び口配列の時添数 または nil 呼び口配列でない時
+  def get_port_global_name( subscript = nil )  # 受け口名（コンポジットなら展開した内側のセル）
 
     # debug
     dbgPrint "Cell get_port_global_name:  #{@cell_name}\n"
 
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
 
-      # mikan through ã§çæãããã®ã root namespace éå®
+      # mikan through で生成したものが root namespace 限定
       # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
       cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
 
-      # through ã§æ¿å
-¥ãããã»ã«ã§ãå®éã«æ¥ç¶ãããã»ã«ï¼compositeã®å ´åå
-é¨ã®)ã®åãå£ã® C è¨èªåå
+      # through で挿入されたセルで、実際に接続されるセル（compositeの場合内部の)の受け口の C 言語名前
       return cell.get_real_global_port_name( @through_generated_list[0].get_through_entry_port_name )
     else
 
-      # å®éã«æ¥ç¶ãããã»ã«ã®åãå£ã® C è¨èªåå
+      # 実際に接続されるセルの受け口の C 言語名前
       if @cell then
         return @cell.get_real_global_port_name( @port_name )
@@ -6390,9 +6085,9 @@
   end
 
-  # æ«å°¾æ°å­1 : CDL ã§æå®ããããå³è¾ºã®ã»ã«ãè¿ã
-  def get_rhs_cell1   # get_cell ã¨åã
+  # 末尾数字1 : CDL で指定された、右辺のセルを返す
+  def get_rhs_cell1   # get_cell と同じ
     @cell
   end
-  def get_rhs_port1   # get_port_name åã
+  def get_rhs_port1   # get_port_name 同じ
     @port_name
   end
@@ -6401,31 +6096,24 @@
   end
 
-  #=== Join# å³è¾ºã®ãã¼ããå¾ã
-  #    å³è¾ºã composite ã®å ´åã¯ãå
-é¨ã®ç¹ããã»ã«ã®ãã¼ã, through ã®å ´åã¯æ¿å
-¥ãããã»ã«ã®ãã¼ã
-  #    ãã®ã¡ã½ããã¯ get_rhs_cell ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺のポートを得る
+  #    右辺が composite の場合は、内部の繋がるセルのポート, through の場合は挿入されたセルのポート
+  #    このメソッドは get_rhs_cell と対になっている
   def get_rhs_port
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
-      # through ã§çæãããã»ã«ãæ¢ã
+      # through で生成されたセルを探す
       cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
-      # cell ã®ãã©ã°ã¤ã³ã§çæããããã¼ãåã®ãã¼ããæ¢ã (composite ãªãå
-é¨ã®ç¹ãããã¼ã)
+      # cell のプラグインで生成されたポート名のポートを探す (composite なら内部の繋がるポート)
       return cell.get_real_port( @through_generated_list[0].get_through_entry_port_name )
     else
-      # ãã¼ããè¿ã(composite ãªãå
-é¨ã®ç¹ãããã¼ããè¿ã)
+      # ポートを返す(composite なら内部の繋がるポートを返す)
       return @cell.get_real_port( @port_name )
     end
   end
 
-  #=== Join# å³è¾ºã®é
-åæ·»æ°ãå¾ã
-  #    å³è¾ºã through ã®å ´åã¯æ¿å
-¥ãããã»ã«ã®æ·»æ°
-  #    å³è¾ºã composite ã®å ´åã¯ãå
-é¨ã®ç¹ããã»ã«ã®ãã¼ãã®æ·»æ° (composite ã§ã¯å¤ãããªã)
-  #    ãã®ã¡ã½ããã¯ get_rhs_cell,  ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺の配列添数を得る
+  #    右辺が through の場合は挿入されたセルの添数
+  #    右辺が composite の場合は、内部の繋がるセルのポートの添数 (composite では変わらない)
+  #    このメソッドは get_rhs_cell,  と対になっている
   def get_rhs_subscript
     if @through_list[0] then
@@ -6436,14 +6124,14 @@
   end
 
-  #=== Join# å³è¾ºã®ãã¼ããå¾ã
-  # å³è¾ºã®ãã¼ããå¾ãã
-  # ããã¯ãã­ãã¿ã¤ãå®£è¨ããããã¦ããªãå ´åã«ã¯ããã¡ãããä½¿ããªã
+  #=== Join# 右辺のポートを得る
+  # 右辺のポートを得る。
+  # これはプロトタイプ宣言しかされていない場合には、こちらしか使えない
   def get_rhs_port2
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
       if @through_generated_list[0] then
         port = @through_generated_list[0].get_through_entry_port_name.to_sym
       else
-        port = @port_name    # generate ã«å¤±æãã¦ãã
+        port = @port_name    # generate に失敗している
       end
     else
@@ -6454,6 +6142,6 @@
   end
 
-  #=== Join# å³è¾ºã®ãã¼ããå¾ã
-  # through ã¯é©ç¨ããªãããcomposite ã¯å±éããå¾ã®ã»ã«ã®å¯¾å¿ãããã¼ã
+  #=== Join# 右辺のポートを得る
+  # through は適用しないが、composite は展開した後のセルの対応するポート
   def get_rhs_port3
     if @cell then
@@ -6462,38 +6150,29 @@
   end
 
-  #=== Join# å¼ã³å£é
-åã®2çªç®ä»¥éã®è¦ç´ ãè¿½å ãã
-  #     ä¸çªæåã«å®ç¾©ãããé
-åè¦ç´ ãå
-¨è¦ç´ ã®åæå¤ã®é
-åãæã¤
-  #     ãã®ã¡ã½ããã¯éé
-åã®å ´åãå¼åºãããï¼join éè¤ã¨ã©ã¼ã®å ´åï¼
-  #join2:: Join  å¼ã³å£é
-åè¦ç´ ã® Join
+  #=== Join# 呼び口配列の2番目以降の要素を追加する
+  #     一番最初に定義された配列要素が全要素の初期値の配列を持つ
+  #     このメソッドは非配列の場合も呼出される（join 重複エラーの場合）
+  #join2:: Join  呼び口配列要素の Join
   def add_array_member join2
 
-    # subscript2: join2 ã®å·¦è¾ºæ·»æ°
+    # subscript2: join2 の左辺添数
     subscript2 = join2.get_subscript
 
     if @subscript == nil then		# not array : initialize duplicate
-      # éé
-åã®å ´åãjoin ãéè¤ãã¦ãã
+      # 非配列の場合、join が重複している
       cdl_error( "S1127 \'$1\' duplicate", @name )
       # print "add_array_member2: #{@owner.get_name}\n"
 
     elsif @subscript >= 0 then
-      # æ·»æ°æå®ããã®å ´å
+      # 添数指定ありの場合
       if( subscript2 == nil || subscript2 < 0 ) then
-        # join2 å·¦è¾ºã¯éé
-åã¾ãã¯æ·»æ°ãªã
-        # é
-åãä¸ä¸è´
+        # join2 左辺は非配列または添数なし
+        # 配列が不一致
         cdl_error( "S1128 \'$1\' inconsistent array definition", @name )
       elsif @array_member[subscript2] != nil then
-        # åãæ·»æ°ãæ¢ã«å®ç¾©æ¸ã¿
+        # 同じ添数が既に定義済み
         cdl_error( "S1129 \'$1\' redefinition of subscript $2" ,@name, subscript2 )
       else
-        # æ·»æ°ã®ä½ç½®ã«è¦ç´ ãè¿½å 
+        # 添数の位置に要素を追加
         @array_member[subscript2] = join2.get_rhs
         @array_member2[subscript2] = join2
@@ -6502,16 +6181,12 @@
 
     else
-      # æ·»æ°æå®ãªãã®å ´å
+      # 添数指定なしの場合
       if( subscript2 == nil || subscript2 >= 0 ) then
-        # join2 å·¦è¾ºã¯éé
-åã¾ãã¯æ·»æ°æ
-        # é
-åãä¸ä¸è´
+        # join2 左辺は非配列または添数有
+        # 配列が不一致
         cdl_error( "S1130 \'R1\' inconsistent array definition", @name )
       end
 
-      # æ·»æ°ãªãé
-åã®å ´åãé
-åè¦ç´ ãè¿½å 
+      # 添数なし配列の場合、配列要素を追加
       @array_member  << join2.get_rhs
       @array_member2 << join2
@@ -6537,8 +6212,7 @@
       while i < @array_member2.length
         if @array_member2[i] != self && @array_member[i] != nil then
-          # @array_member2[i] ã nil ã«ãªãã®ã¯ optional ã®æã¨ã
-          # Join ã® initialize ã§ç¡é§ã« @array_member2 ãè¨­å®ããã¦ããå ´å
-          # ç¡é§ã«è¨­å®ããã¦ãããã®ã«ã¤ãã¦ã¯ãåå¸°çã«å¼ã³åºãå¿
-è¦ã¯ãªãï¼clone_for_composite ã§ã¯å¯¾ç­ãã¦ããï¼
+          # @array_member2[i] が nil になるのは optional の時と、
+          # Join の initialize で無駄に @array_member2 が設定されている場合
+          # 無駄に設定されているものについては、再帰的に呼び出す必要はない（clone_for_composite では対策している）
           @array_member2[i].change_name( name )
         end
@@ -6548,5 +6222,5 @@
   end
 
-  # composite cell ãå±éããã»ã«ã®çµåã clone ããã»ã«ã®ååã«å¤æ´
+  # composite cell を展開したセルの結合を clone したセルの名前に変更
   def change_rhs_port( clone_cell_list, celltype )
     dbgPrint "change_rhs_port: name=#{@name}\n"
@@ -6572,20 +6246,15 @@
     dbgPrint "  REWRITE cell_name:  #{@owner.get_name}   #{@cell_name} => #{c.get_global_name}, #{c.get_name}\n"
 
-    # @rhs ã®å
-å®¹ãèª¿æ´ãã¦ããï¼ãã®å
-å®¹ã¯ãsubscript ãé¤ãã¦ãå¾ããä½¿ããã¦ããªãï¼
+    # @rhs の内容を調整しておく（この内容は、subscript を除いて、後から使われていない）
     elements = @rhs.get_elements
-    if elements[0] == :OP_SUBSC then  # å³è¾ºï¼åãå£é
-åï¼
+    if elements[0] == :OP_SUBSC then  # 右辺：受け口配列？
       elements  = elements[1]
     end
 
-    # å³è¾ºããcell.ePort ã®å½¢å¼ã§ãªã
+    # 右辺が　cell.ePort の形式でない
     if elements[0] != :OP_DOT || elements[1][0] != :IDENTIFIER then   #1
       return
     else
-      # ã»ã«åã composite å
-é¨ã®ååãããå¤é¨ã®ååã«å
-¥ãæ¿ãã
+      # セル名を composite 内部の名前から、外部の名前に入れ替える
       # elements[1][1] = Token.new( c.get_name, nil, nil, nil )
       elements[1][1] = NamespacePath.new( c.get_name, false, c.get_namespace )
@@ -6594,5 +6263,5 @@
     @cell_name = c.get_name
     @cell = c
-    # @definition = nil          # @definition ãæå¹ï¼ ãã§ãã¯æ¸ã¿ï¼ã¨ã¯ãããªãï¼
+    # @definition = nil          # @definition が有効： チェック済み（とは、しない）
 
     if @array_member2 then
@@ -6603,8 +6272,7 @@
       i = 0
       while i < @array_member2.length
-        # @array_member2[i] ã nil ã«ãªãã®ã¯ optional ã®æã¨ã
-        # Join ã® initialize ã§ç¡é§ã« @array_member2 ãè¨­å®ããã¦ããå ´å
-        # ç¡é§ã«è¨­å®ããã¦ãããã®ã«ã¤ãã¦ã¯ãåå¸°çã«å¼ã³åºãå¿
-è¦ã¯ãªãï¼clone_for_composite ã§ã¯å¯¾ç­ãã¦ããï¼
+        # @array_member2[i] が nil になるのは optional の時と、
+        # Join の initialize で無駄に @array_member2 が設定されている場合
+        # 無駄に設定されているものについては、再帰的に呼び出す必要はない（clone_for_composite では対策している）
         if @array_member2[i] != self && @array_member[i] != nil then
           dbgPrint "change_rhs array_member #{i}: #{@name}  #{@cell_name}\n"
@@ -6617,12 +6285,10 @@
   end
 
-  #=== Join# composite ã»ã«ç¨ã«ã¯ã­ã¼ã³
-  #cell_global_name:: string : è¦ªã»ã«ã®ã°ã­ã¼ãã«å
-  # å³è¾ºã® C_EXP ã«å«ã¾ãã $id$, $cell$, $ct$ ãç½®æ
-  # ããã§ç½®æããã®ã¯ composite ã® attribute ã® C_EXP ã composite ã»ã«ã¿ã¤ãããã³ã»ã«åã«ç½®æãããã
-  # ï¼å
-é¨ã»ã«ã® C_EXP ãããã§ç½®æãããï¼
-  # @through_list ãªã©ãã³ãã¼ãããã®ã§ããããå¼ã³åºãããåã«ç¢ºå®ããå¿
-è¦ããã
+  #=== Join# composite セル用にクローン
+  #cell_global_name:: string : 親セルのグローバル名
+  # 右辺の C_EXP に含まれる $id$, $cell$, $ct$ を置換
+  # ここで置換するのは composite の attribute の C_EXP を composite セルタイプおよびセル名に置換するため
+  # （内部セルの C_EXP もここで置換される）
+  # @through_list などもコピーされるので、これが呼び出される前に確定する必要がある
   def clone_for_composite( ct_name, cell_name, locale, b_need_recursive = true )
     # debug
@@ -6643,15 +6309,13 @@
 
   def clone_array_member( ct_name, cell_name, prev, locale )
-    # é
-åã®ã³ãã¼ãä½ã
+    # 配列のコピーを作る
     am  = @array_member.clone
     am2 = @array_member2.clone
 
-    # é
-åè¦ç´ ã®ã³ãã¼ãä½ã
+    # 配列要素のコピーを作る
     i = 0
     while i < am2.length
       if @array_member2[i] == prev then
-        # èªåèªèº«ã§ããï¼ã®ã§ãå¼åºãã¨ç¡éåå¸°å¼åºãã¨ãªãï¼
+        # 自分自身である（ので、呼出すと無限再帰呼出しとなる）
         am2[i] = self
         am[i] = am2[i].get_rhs
@@ -6661,5 +6325,5 @@
         am[i] = am2[i].get_rhs
       else
-        # ä»¥åã®ã¨ã©ã¼ã§ array_member2[i] ã¯ nil ã«ãªã£ã¦ãã
+        # 以前のエラーで array_member2[i] は nil になっている
       end
 
@@ -6670,5 +6334,5 @@
     end
 
-    # i = 0 ã¯ãããã§èªåèªèº«ãè¨­å®
+    # i = 0 は、ここで自分自身を設定
     # am2[0] = self
 
@@ -6678,17 +6342,14 @@
   end
 
-  #=== Join# rhs ãå
-¥ãæãã
+  #=== Join# rhs を入れ換える
   #rhs:: Expression | initializer
-  # å³è¾ºãå
-¥ãæããï¼
-  # ãã®ã¡ã½ããã¯ãcomposite ã§ cell ã®å±æ§ã®åæå¤ã attribute ã®å¤ã§ç½®ãæããã®ã«ä½¿ããã
-  # ãã®ã¡ã½ããã¯ composite å
-ã® cell ã®å±æ§ã®åæå¤ãå®æ°ã§ã¯ãªãå¼ã«ãªã£ãå ´åãä¸è¦ã«ãªã
+  # 右辺を入れ換える．
+  # このメソッドは、composite で cell の属性の初期値を attribute の値で置き換えるのに使われる
+  # このメソッドは composite 内の cell の属性の初期値が定数ではなく式になった場合、不要になる
   def change_rhs rhs
     @rhs = rhs
   end
 
-  #=== Join# clone ããã join ã® owner ãå¤æ´
+  #=== Join# clone された join の owner を変更
   def set_cloned( owner )
     dbgPrint "Join#set_cloned: #{@name}  prev owner: #{@owner.get_name} new owner: #{owner.get_name}\n"
@@ -6784,5 +6445,5 @@
 end
 
-#== éçµå
+#== 逆結合
 class ReverseJoin < BDNode
 #@ep_name:: Symbol
@@ -6809,14 +6470,11 @@
 end
 
-# CLASS: CompositeCelltype ç¨ã® Join
-# REM:   CompositeCelltype ã export ãããã®
+# CLASS: CompositeCelltype 用の Join
+# REM:   CompositeCelltype が export するもの
 class CompositeCelltypeJoin < BDNode
-# @export_name:: string     :  CompositeCelltype ã export ããååï¼å¼ã³å£ãåãå£ãå±æ§ï¼
-# @internal_cell_name:: string : CompositeCelltype å
-é¨ã®ã»ã«ã®åå
-# @internal_cell_elem_name:: string : CompositeCelltype å
-é¨ã®ã»ã«ã®å¼ã³å£ãåãå£ãå±æ§ã®åå
-# @cell : Cell : Cell::  internal cell  : CompositeCelltyep å
-é¨ã®ã»ã«ï¼in_compositeã»ã«ï¼
+# @export_name:: string     :  CompositeCelltype が export する名前（呼び口、受け口、属性）
+# @internal_cell_name:: string : CompositeCelltype 内部のセルの名前
+# @internal_cell_elem_name:: string : CompositeCelltype 内部のセルの呼び口、受け口、属性の名前
+# @cell : Cell : Cell::  internal cell  : CompositeCelltyep 内部のセル（in_compositeセル）
 # @port_decl:: Port | Decl
 # @b_pseudo: bool : 
@@ -6833,9 +6491,9 @@
   end
 
-  #=== CompositeCelltypeJoin# CompositeCelltypeJoin ã®å¯¾è±¡ã»ã«ãï¼
-  #cell::  Cell å¯¾è±¡ãã©ãããã§ãã¯ããã»ã«
+  #=== CompositeCelltypeJoin# CompositeCelltypeJoin の対象セルか？
+  #cell::  Cell 対象かどうかチェックするセル
   #
-  #     CompositeCelltypeJoin ã¨ cell ã®ååãä¸è´ããããã§ãã¯ãã
-  #     port_decl ãæå®ãããå ´åã¯ãç¾ç¶ä½¿ããã¦ããªã
+  #     CompositeCelltypeJoin と cell の名前が一致するかチェックする
+  #     port_decl が指定された場合は、現状使われていない
   def match?( cell, port_decl = nil )
 
@@ -6853,6 +6511,6 @@
 
 #    if @cell.equal?( cell ) && ( port_decl == nil || @port_decl.equal?( port_decl ) ) then
-    # ãªã port_decl ãä¸è´ããªããã°ãªããªãã£ããå¿ããã
-    # recursive_composite ã§ååã®ä¸è´ã«å¤æ´   060917
+    # なぜ port_decl が一致しなければならなかったか忘れた。
+    # recursive_composite で名前の一致に変更   060917
     if((@cell.get_name == cell.get_name) && (port_decl == nil || @port_decl.get_name == port_decl.get_name))then
       true
@@ -6886,5 +6544,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def get_port_type
     if @port_decl then
@@ -6908,5 +6566,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def is_require?
     if @port_decl then
@@ -6915,5 +6573,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def is_allocator_port?
     if @port_decl then
@@ -6922,5 +6580,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def is_optional?
     if @port_decl then
@@ -6929,6 +6587,6 @@
   end
 
-  #=== CompositeCelltypeJoin# å³è¾ºã Decl ãªãã°åæåå­ï¼å¼ï¼ãè¿ã
-  # ãã®ã¡ã½ããã¯ Cell ã® check_join ããåæå¤ãã§ãã¯ã®ããã«å¼ã³åºããã
+  #=== CompositeCelltypeJoin# 右辺が Decl ならば初期化子（式）を返す
+  # このメソッドは Cell の check_join から初期値チェックのために呼び出される
   def get_initializer
     if @port_decl.instance_of? Decl then
@@ -6943,13 +6601,12 @@
   end
 
-  #=== CompositeCelltypeJoin# é
-åãµã¤ãºãå¾ã
-  #RETURN:: nil: not array, "[]": å¤§ããæå®ãªã, Integer: å¤§ããæå®ãã
+  #=== CompositeCelltypeJoin# 配列サイズを得る
+  #RETURN:: nil: not array, "[]": 大きさ指定なし, Integer: 大きさ指定あり
   def get_array_size
     @port_decl.get_array_size
   end
 
-  #=== CompositeCelltypeJoin# signature ãå¾ã
-  # @port_decl ã Port ã®æã®ã¿å¼ã³åºãã¦ããã
+  #=== CompositeCelltypeJoin# signature を得る
+  # @port_decl が Port の時のみ呼び出してもよい
   def get_signature
     @port_decl.get_signature
@@ -6994,5 +6651,5 @@
 # @file_name:: string
 # @format:: string
-# @arg_list:: Expression ã® elements ã¨åãå½¢å¼ [ [:IDENTIFIER, String], ... ]
+# @arg_list:: Expression の elements と同じ形式 [ [:IDENTIFIER, String], ... ]
 # @f_celltype:: bool : true: celltype factory, false: cell factory
 
@@ -7005,27 +6662,26 @@
     case name
     when :write
-      # write é¢æ°
+      # write 関数
       @name = name
 
-      # write é¢æ°ã®ç¬¬ä¸å¼æ°ï¼åºåå
-ãã¡ã¤ã«å
-        # å¼ãè©ä¾¡ããï¼éå¸¸åä¸ã®æå­åã§ãããããåä¸ã®æå­åãè¿ãããï¼
+      # write 関数の第一引数：出力先ファイル名
+        # 式を評価する（通常単一の文字列であるから、単一の文字列が返される）
       @file_name = file_name.eval_const(nil).val  # file_name : Expression
       if ! @file_name.instance_of?( String ) then
-        # æå­åå®æ°ã§ã¯ãªãã£ã
+        # 文字列定数ではなかった
         cdl_error( "S1132 $1: 1st parameter is not string(file name)" , @name )
         @file_name = nil
       end
 
-      # write é¢æ°ã®ç¬¬äºå¼æ°ï¼ãã©ã¼ãããæå­å
+      # write 関数の第二引数：フォーマット文字列
       @format    = format.eval_const(nil).val     # format : Expression
-        # å¼ãè©ä¾¡ããï¼éå¸¸åä¸ã®æå­åã§ãããããåä¸ã®æå­åãè¿ãããï¼
+        # 式を評価する（通常単一の文字列であるから、単一の文字列が返される）
       if ! @format.instance_of?( String ) then
-        # æå­åå®æ°ã§ã¯ãªãã£ã
+        # 文字列定数ではなかった
         cdl_error( "S1133 $1: 2nd parameter is not string(fromat)" , @name )
         @format = nil
       end
 
-      # ç¬¬ä¸å¼æ°ä»¥éãå¼æ°ãªã¹ãã¨ãã mikan å¼æ°ã®ãã§ãã¯
+      # 第三引数以降を引数リストとする mikan 引数のチェック
       @arg_list = arg_list
 
@@ -7104,17 +6760,17 @@
 #== DomainType
 #
-# region ã® domain ãè¨æ¶ããã¯ã©ã¹
+# region の domain を記憶するクラス
 class DomainType < Node
-#@name::Symbol : ãã¡ã¤ã³ã¿ã¤ãã®åå ex) HRP2
+#@name::Symbol : ドメインタイプの名前 ex) HRP2
 #@region::Region
 #@plugin_name::Symbol : ex) HRP2Plugin
 #@option::String : ex) "trusted", "nontrusted"
-#@plugin::DomainPlugin ã®å­ã¯ã©ã¹
+#@plugin::DomainPlugin の子クラス
 
   include PluginModule
 
-  # ãã¡ã¤ã³ã«å±ãã region ã® Hash
-  # domain æå®ãä¸åº¦ãè¡ãããªãå ´åããã®ãªã¹ãã¯ç©ºã§ãã
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¯ option = "OutOfDomain" ã§ç»é²ããã (domain æå®ãç¡ããã°ç»é²ãããªã)
+  # ドメインに属する region の Hash
+  # domain 指定が一度も行われない場合、このリストは空である
+  # ルートリージョンは option = "OutOfDomain" で登録される (domain 指定が無ければ登録されない)
   @@domain_regions = { }  # { :domain_type => [ region, ... ] }
 
@@ -7159,7 +6815,6 @@
   end
 
-  #== DomainType ãªã¼ã¸ã§ã³ã® Hash ãå¾ã
-  # @@domain_regions ã®èª¬æåç
-§
+  #== DomainType リージョンの Hash を得る
+  # @@domain_regions の説明参照
   def self.get_domain_regions
     return @@domain_regions
@@ -7174,5 +6829,5 @@
   end
 
-  #== DomainType#ãã¡ã¤ã³ç¨®å¥ãå¾ã
+  #== DomainType#ドメイン種別を得る
   #return::Symbol :kernel, :user, :OutOfDomain
   def get_kind
@@ -7186,28 +6841,28 @@
 end
 
-#== Region ã¯ã©ã¹
+#== Region クラス
 # 
-# Region ã¯ Namespace ãç¶æ¿ãã¦ãã
-# root region ã¯ç¹æ®ã§ãroot namespace ã¨åãã§ãã
+# Region は Namespace を継承している
+# root region は特殊で、root namespace と同じである
 #
-# cell ã¯ region ã«å±ãã
-# region ã«å±ãã cell ã®ãªã¹ãã¯ Namespace ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨ãã¦è¨æ¶ããã
+# cell は region に属する
+# region に属する cell のリストは Namespace クラスのインスタンス変数として記憶される
 #
 class Region < Namespace
 # @name:: string
-# @in_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil ã®æ in ç¦æ­¢
-# @out_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil ã®æ out ç¦æ­¢
+# @in_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 in 禁止
+# @out_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 out 禁止
 # @to_through_list:: [ [ dst_region, plugin_name, plugin_arg ], ... ]
-# @cell_port_throug_plugin_list:: { "#{cell_name}.#{port_name}" => through_generated_list ã®è¦ç´  }
-#    ãã® region ãã cell_name.port_name ã¸ã® through ãã©ã°ã¤ã³ã§çæããããªãã¸ã§ã¯ã
+# @cell_port_throug_plugin_list:: { "#{cell_name}.#{port_name}" => through_generated_list の要素 }
+#    この region から cell_name.port_name への through プラグインで生成されたオブジェクト
 # @region_type::Symbol : :NODE, :LINKUNIT, :DOMAIN, :CLASS
-# @region_type_param::Symbol : domain, class ã®åå. node, linkunit ã§ã¯ nil
-# @link_root:: Region : linkUnit ã®æ ¹ã£ãã¨ãªã region (node, linkunit ãæå®ããã region)
-# @family_line:: [ @region_root, ...,@region_me ]  å®¶ç³»
-# @in_through_count:: Integer :  n çªç®ã® in_through çµå (n>=0)
-# @out_through_count:: Integer : n çªç®ã® out_through çµå (n>=0)
-# @to_through_count:: { :RegionName => Integer }: RegionName ã¸ã® n çªç®ã® to_through çµå (n>=0)
-# @domain_type::DomainType : domain æå®ããã¦ããªãå ´åãnil
-# @domain_root::Region : domain æå®ããã¦ããªã Region (root ã®å ´å nil)
+# @region_type_param::Symbol : domain, class の名前. node, linkunit では nil
+# @link_root:: Region : linkUnit の根っことなる region (node, linkunit が指定された region)
+# @family_line:: [ @region_root, ...,@region_me ]  家系
+# @in_through_count:: Integer :  n 番目の in_through 結合 (n>=0)
+# @out_through_count:: Integer : n 番目の out_through 結合 (n>=0)
+# @to_through_count:: { :RegionName => Integer }: RegionName への n 番目の to_through 結合 (n>=0)
+# @domain_type::DomainType : domain 指定されていない場合、nil
+# @domain_root::Region : domain 指定されていなる Region (root の場合 nil)
 
   @@in_through_list  = []
@@ -7217,16 +6872,15 @@
   @@region_type_param = nil
   @@domain_name = nil
-  @@domain_option = nil    # Token ãå
-¥ã
+  @@domain_option = nil    # Token が入る
 
   @@link_roots = []
 
   def initialize( name )
-    # mikan name ã® Namespace ä¿®é£¾
-    # object = Namespace.find( [ name ] )   # è¦ªã¾ã§æãã«ãã
+    # mikan name の Namespace 修飾
+    # object = Namespace.find( [ name ] )   # 親まで捜しにいく
     if name != "::" then
       object = Namespace.get_current.find( name )    #1
     else
-      # root ãªã¼ã¸ã§ã³
+      # root リージョン
       object = nil
       @@region_type = :NODE
@@ -7265,5 +6919,5 @@
         dbgPrint "Region.new: re-appear #{@name}\n"
 
-        # # Region path ãåååºç¾ã¨ä¸è´ãããï¼
+        # # Region path が前回出現と一致するか？
         # if @@region_stack[ @@region_stack_sp - 1 ] then
         #   my_path = @@region_stack[ @@region_stack_sp - 1 ].get_path_string.to_s + "." + @name.to_s
@@ -7275,8 +6929,8 @@
         # end
 
-        # ååºç¾
+        # 再出現
         # @@region_stack[@@region_stack_sp] = object
 
-        # ååºç¾æã« specifier ãæå®ããã¦ãããï¼
+        # 再出現時に specifier が指定されているか？
         if( @in_through_list.length != 0 || @out_through_list.length != 0 || @to_through_list.length != 0 ||
             @region_type != nil || @domain_type != nil )then
@@ -7286,12 +6940,12 @@
 
       else
-        # ã¨ã©ã¼ç¨ããã¼å®ç¾©
-
-        # ç°ãªãååã®ãªãã¸ã§ã¯ããå®ç¾©æ¸ã¿
+        # エラー用ダミー定義
+
+        # 異なる同名のオブジェクトが定義済み
         cdl_error( "S1141 $1 duplication, previous one : $2" , name, object.class )
-        # @@region_stack[@@region_stack_sp] = self    # ã¨ã©ã¼ææ«å® region
-      end
-    else
-      # ååºç¾
+        # @@region_stack[@@region_stack_sp] = self    # エラー時暫定 region
+      end
+    else
+      # 初出現
       dbgPrint "Region.new: #{@name}\n"
       set_region_family_line
@@ -7346,6 +7000,6 @@
   end
 
-  #== Region ã«ã¼ããªã¼ã¸ã§ã³ãå¾ã
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¯ãã«ã¼ããã¼ã ã¹ãã¼ã¹ã¨åãã§ãã
+  #== Region ルートリージョンを得る
+  # ルートリージョンは、ルートネームスペースと同じである
   def self.get_root
     Namespace.get_root
@@ -7355,5 +7009,5 @@
 
     dbgPrint  "set_region_family_line: Region: #{@name}  \n"
-    # root namespace (root region) ã® region type ã¯ :NODE
+    # root namespace (root region) の region type は :NODE
     if @name == "::" then
       @region_type = :NODE
@@ -7373,7 +7027,6 @@
 
     if @domain_type then
-      # ã«ã¼ããªã¼ã¸ã§ã³ãæåãã @domain_type è¨­å®ããããã¨ã¯ãªãã®
-      # ã§ @owner == nil ãèª¿ã¹ãå¿
-è¦ã¯ãªã
+      # ルートリージョンが最初から @domain_type 設定されることはないの
+      # で @owner == nil を調べる必要はない
       @owner.set_domain_type @domain_type
     end
@@ -7389,12 +7042,9 @@
     @link_root = nil
 
-    # @family_line ãä½æãã
-    # @link_root ãã¿ã¤ãã
-    # (ä¸ä½ã«ãã©ã£ã¦ãã£ã¦ Region ã§ node ã¾ãã¯ linkunit ã®ããããå
-ã«è¦ã¤ãã£ããã®ã @link_root ã¨ãªã)
-    # root namespace ã¯ Region ãã¤ node ãªã®ã§å¿
-ã @link_root ã¯è¦ã¤ãã
-    # mikan: self ã node, linkUnit ã®å ´åãããã§æå¾
-ããã¨ããã«è¨­å®ãããªããããRegion#initialize ã§åè¨­å®
+    # @family_line を作成する
+    # @link_root もみつける
+    # (上位にたどっていって Region で node または linkunit のいずれか先に見つかったものが @link_root となる)
+    # root namespace は Region かつ node なので必ず @link_root は見つかる
+    # mikan: self が node, linkUnit の場合、ここで期待したとおりに設定されないため、Region#initialize で再設定
     obj = self
     while 1
@@ -7407,9 +7057,9 @@
         end
       else
-        # ãããªããã° Namespace
-        # namespace ã®ä¸ã« region ãããå ´å
-      end
-
-      # root namespace ã«ãã©ãçãã°çµã
+        # さもなければ Namespace
+        # namespace の下に region がある場合
+      end
+
+      # root namespace にたどり着けば終り
       break if obj.get_name == "::"
 
@@ -7422,5 +7072,5 @@
   end
 
-  #== Region#ãã¡ã¤ã³ãè¨­å®ãã
+  #== Region#ドメインを設定する
   def set_domain_type domain_type
     if @region_type == :NODE then
@@ -7466,8 +7116,8 @@
   end
 
-  #== Region# domain ã®æ ¹ã£ãã¨ãªã region ãå¾ã
-  # Region ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ã
-  # domain æå®å­ãããã°ããã®ãªã¼ã¸ã§ã³ããã¡ã¤ã³ã«ã¼ãã§ãã
-  # ãªããã°ãè¦ªãªã¼ã¸ã§ã³ã®ãã¡ã¤ã³ã«ã¼ãã¨ãã
+  #== Region# domain の根っことなる region を得る
+  # Region のインスタンスを返す
+  # domain 指定子があれば、そのリージョンがドメインルートである
+  # なければ、親リージョンのドメインルートとする
   def get_domain_root
     @domain_root
@@ -7493,6 +7143,6 @@
   end
 
-  #== Region# ã«ã¼ããªã¼ã¸ã§ã³
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¯ãnamespace ã®ã«ã¼ãã¨åãã¤ã³ã¹ã¿ã³ã¹
+  #== Region# ルートリージョン
+  # ルートリージョンは、namespace のルートと同じインスタンス
   def selfget_root
     Namespace.get_root
@@ -7515,8 +7165,7 @@
   end
 
-  #=== Region# æ§æè§£æä¸­ã® region ãå¾ã
-  # æ§æè§£æä¸­ Namespace (ãããã¯å­ã¯ã©ã¹ã® Region) ã®ä¸ä½ããã©ã£ã¦ Region ãè¦ã¤ãã
-  # cell ã namespace ä¸ã«ãããã¨ãã§ããªããã°ãã«ã¼ããã¾ããå¿
-è¦ã¯ãªã
+  #=== Region# 構文解析中の region を得る
+  # 構文解析中 Namespace (あるいは子クラスの Region) の上位をたどって Region を見つける
+  # cell が namespace 下におくことができなければ、ループをまわす必要はない
   def self.get_current
     # @@region_stack[@@region_stack_sp]
@@ -7531,6 +7180,6 @@
   end
 
-  #=== Region# through ãã©ã°ã¤ã³ã§ããã® region ãã cell_name.port_name ã¸ã®ãã©ã°ã¤ã³ãªãã¸ã§ã¯ããç»é²
-  # mikan namesppace å¯¾å¿ (cell_name)
+  #=== Region# through プラグインで、この region から cell_name.port_name へのプラグインオブジェクトを登録
+  # mikan namesppace 対応 (cell_name)
   def add_cell_port_through_plugin( cell_name, port_name, subscript, through_plugin_object )
     if subscript then
@@ -7553,17 +7202,16 @@
   end
 
-  #=== Region# to_region ã¸ã®è·é¢ï¼unreachable ãªå ´å nil)
-  # mikan Cell#check_region ã¨Region ã¸ãã©ãçãã¾ã§ããã®å¦çã«å
-±éæ§ãé«ã
-  # region#distance ã¯ require ã§ç¨ãããã
+  #=== Region# to_region への距離（unreachable な場合 nil)
+  # mikan Cell#check_region とRegion へたどり着くまでための処理に共通性が高い
+  # region#distance は require で用いられる
   def distance( to_region )
 
-    r1 = self                   # åºçº region
-    r2 = to_region              # ç®ç region
+    r1 = self                   # 出発 region
+    r2 = to_region              # 目的 region
     dist = 0
 
-    if ! r1.equal? r2 then      # åä¸ region ãªãå¼åºãå¯è½
-
-      # mikan namespace å¯¾å¿
+    if ! r1.equal? r2 then      # 同一 region なら呼出し可能
+
+      # mikan namespace 対応
       f1 = r1.get_family_line
       len1 = f1.length
@@ -7571,8 +7219,6 @@
       len2 = f2.length
 
-      # ä¸ä¸è´ã«ãªãã¨ããï¼å
-å¼ï¼ãæ¢ã
-      i = 1  # i = 0 ã¯ :RootRegion ãªã®ã§å¿
-ãä¸è´
+      # 不一致になるところ（兄弟）を探す
+      i = 1  # i = 0 は :RootRegion なので必ず一致
       while( i < len1 && i < len2 )
         if( f1[i] != f2[i] )then
@@ -7582,6 +7228,5 @@
       end
 
-      sibling_level = i     # å
-å¼ã¨ãªãã¬ãã«ããããã¯ã©ã¡ããä¸æ¹ãçµãã£ãã¬ãã«
+      sibling_level = i     # 兄弟となるレベル、もしくはどちらか一方が終わったレベル
 
       # p "sibling_level: #{i}"
@@ -7589,8 +7234,5 @@
       # p "to: #{f2[i].get_name}" if f2[i]
 
-      # å¼ã³å´ã«ã¤ãã¦å¼ã³å
-ã®ã¬ãã«ããå
-å¼ã¬ãã«ã¾ã§ï¼out_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 呼び側について呼び元のレベルから兄弟レベルまで（out_through をチェックおよび挿入）
       i = len1 -1
       while i >= sibling_level
@@ -7615,7 +7257,5 @@
       end
 
-      # å
-å¼ã¬ãã«ã«ããã¦ï¼to_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 兄弟レベルにおいて（to_through をチェックおよび挿入）
       if f1[sibling_level] && f2[sibling_level] then
         dbgPrint "going from #{f1[sibling_level].get_name} to #{f2[sibling_level].get_name}\n"
@@ -7632,5 +7272,5 @@
           found = 0
           f1[sibling_level].get_to_through_list.each { |t|
-            if t[0][0] == f2[sibling_level].get_name then   # region åãä¸è´ããã ?
+            if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
               found = 1
             end
@@ -7643,7 +7283,5 @@
       end
 
-      # åãå´ã«ã¤ãã¦å
-å¼ã¬ãã«ããåãå´ã®ã¬ãã«ã¾ã§ï¼in_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 受け側について兄弟レベルから受け側のレベルまで（in_through をチェックおよび挿入）
       i = sibling_level
       while i < len2
@@ -7756,5 +7394,5 @@
 class Import_C < Node
 
-  # ãããã®ååæå­åã®ãªã¹ã
+  # ヘッダの名前文字列のリスト
   @@header_list = {}
   @@header_list2 = []
@@ -7763,31 +7401,28 @@
   include Importable
 
-  #=== Import_C# import_C ã®çæï¼ããããã¡ã¤ã«ãåè¾¼ãï¼
-  #header:: Token : import_C ã®ç¬¬ä¸å¼æ°æå­åãªãã©ã«ãã¼ã¯ã³
-  #define:: Token : import_C ã®ç¬¬äºå¼æ°æå­åãªãã©ã«ãã¼ã¯ã³
+  #=== Import_C# import_C の生成（ヘッダファイルを取込む）
+  #header:: Token : import_C の第一引数文字列リテラルトークン
+  #define:: Token : import_C の第二引数文字列リテラルトークン
   def initialize( header, define = nil )
     super()
-    # ããããã¡ã¤ã«åæå­åããåå¾ã® "" ãåãé¤ã
+    # ヘッダファイル名文字列から前後の "" を取り除く
     # header = header.to_s.gsub( /\A"(.*)"\z/, '\1' )
     header = CDLString.remove_dquote header.to_s
 
     if define then
-      # åå¾ã® "" ãåãé¤ã
+      # 前後の "" を取り除く
       # def_opt = define.to_s.gsub( /\A"(.*)/, '\1' )
       # def_opt.sub!( /(.*)"\z/, '\1' )
       def_opt = CDLString.remove_dquote define.to_s
 
-      # "," ã -D ã«ç½®ãæã
+      # "," を -D に置き換え
       def_opt = def_opt.gsub( /,/, " -D " )
 
-      # å
-é ­ã« -D ãæ¿å
-¥ # mikan ä¸é©åãª define å
-¥åããã£ãå ´åãCPP æã«ã¨ã©ã¼
+      # 先頭に -D を挿入 # mikan 不適切な define 入力があった場合、CPP 時にエラー
       def_opt = def_opt.gsub( /^/, "-D " )
 
     end
 
-    # ã³ãã³ãã©ã¤ã³æå®ããã DEFINE 
+    # コマンドライン指定された DEFINE 
     $define.each{ |define|
       if $IN_EXERB then
@@ -7813,8 +7448,8 @@
       if found == false then
         begin
-          # ãã¡ã¤ã«ã® stat ãåã£ã¦ã¿ã(ãªããã°ä¾å¤çºç)
+          # ファイルの stat を取ってみる(なければ例外発生)
           File.stat( "#{path}/#{header}" )
 
-          # cdl ãè¦ã¤ãã£ããã¡ã¤ã«ãã¹ã«åè¨­å®
+          # cdl を見つかったファイルパスに再設定
           header_path = "#{path}/#{header}"
           found = true
@@ -7843,15 +7478,15 @@
     }
 
-    # èª­è¾¼ã¿æ¸ã¿ï¼
+    # 読込み済み？
     if( @@header_list[ header ] ) then
-      # ç¬¬äºå¼æ° define ãä»¥åã¨ç°ãªã
+      # 第二引数 define が以前と異なる
       if @@define_list[ header ].to_s != define.to_s then
         cdl_error( "S1143 import_C: arg2: mismatch with previous one"  )
       end
-      # ãããã«ããèª­ã¿è¾¼ã¾ãªã
+      # いずれにせよ読み込まない
       return
     end
 
-    # ãããã®ãªã¹ããè¨é²
+    # ヘッダのリストを記録
     @@header_list[ header ] = header_path
     @@header_list2 << header
@@ -7881,9 +7516,9 @@
     end
 
-    # CPP åºåç¨ tmp ãã¡ã¤ã«å
+    # CPP 出力用 tmp ファイル名
     tmp_header = header.gsub( /\//, "_" )
     tmp_header = "#{$gen}/tmp_#{tmp_header}"
 
-    # CPP ã³ãã³ãã©ã¤ã³ãä½æ
+    # CPP コマンドラインを作成
     cmd = "#{$cpp} #{def_opt} #{include_opt} #{tmp_C}"
 
@@ -7893,8 +7528,8 @@
       end
 
-      # ããªãã­ã»ããµã³ãã³ãã pipe ã¨ãã¦éã
-          # cmd ã¯ cygwin/Linux ã§ã¯ bash(sh) çµç±ã§å®è¡ããã
-          # Exerb çã§ã¯ cmd.exe çµç±ã§å®è¡ããã
-          # ãã®å·®ã¯å¼ãæ°ã® (), $, % ãªã©ã·ã§ã«ã®ç¹å¥ãªæå­ã®è©ä¾¡ã«ç¾ããã®ã§æ³¨æ
+      # プリプロセッサコマンドを pipe として開く
+          # cmd は cygwin/Linux では bash(sh) 経由で実行される
+          # Exerb 版では cmd.exe 経由で実行される
+          # この差は引き数の (), $, % などシェルの特別な文字の評価に現れるので注意
           cpp = IO.popen( cmd, "r:ASCII-8BIT" )
       begin
@@ -7909,5 +7544,5 @@
         print_exception( evar )
       ensure
-        tmp_file.close if tmp_file    # mikan File.open ã«å¤±æããæ tmp_file == nil ã¯ä¿è¨¼ããã¦ãã ?
+        tmp_file.close if tmp_file    # mikan File.open に失敗した時 tmp_file == nil は保証されている ?
         cpp.close
       end
@@ -7917,11 +7552,11 @@
     end
 
-    # C è¨èªã®ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ
+    # C 言語のパーサインスタンスを生成
     c_parser = C_parser.new
 
-    # tmp_header ããã¼ã¹
+    # tmp_header をパース
     c_parser.parse( [tmp_header] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     c_parser.finalize
 
@@ -7984,13 +7619,13 @@
 
 class Import < Node
-# @b_reuse::bool:       åå©ç¨ï¼ã»ã«ã¿ã¤ãã® template çæä¸è¦
-# @b_reuse_real::bool:  å®éã«åå©ç¨
-# @cdl::      string:   import ãã CDL
-# @cdl_path:: string:   CDL ã®ãã¹
-# @b_imported:: bool:   import ããã(ã³ãã³ãã©ã¤ã³æå®ããã¦ããªã)
+# @b_reuse::bool:       再利用．セルタイプの template 生成不要
+# @b_reuse_real::bool:  実際に再利用
+# @cdl::      string:   import する CDL
+# @cdl_path:: string:   CDL のパス
+# @b_imported:: bool:   import された(コマンドライン指定されていない)
 
   include Importable
 
-  # ãããã®ååæå­åã®ãªã¹ã  æ·»å­ï¼expand ãããã¹ãå¤ï¼Import
+  # ヘッダの名前文字列のリスト  添字：expand したパス、値：Import
   @@import_list = {}
 
@@ -8013,7 +7648,7 @@
   end
 
-  #=== Import# import ãè¡ã
-  #cdl::      string   cdl ã¸ã®ãã¹ï¼"" ã§å²ã¾ãã¦ãããã¨ãä»®å®
-  #b_reuse::  bool     true: template ãçæããªã
+  #=== Import# import を行う
+  #cdl::      string   cdl へのパス．"" で囲まれていることを仮定
+  #b_reuse::  bool     true: template を生成しない
   def initialize( cdl, b_reuse = false, b_imported = true )
     Import.push self
@@ -8021,8 +7656,8 @@
     super()
     @@current_import = self
-    # ããããã¡ã¤ã«åæå­åããåå¾ã® "", <> ãåãé¤ãn
+    # ヘッダファイル名文字列から前後の "", <> を取り除くn
     @cdl = cdl.to_s.gsub( /\A["<](.*)[">]\z/, '\1' )
 
-    # ãµã¼ããã¹ããæ¢ã
+    # サーチパスから探す
     found = false
     @cdl_path = ""
@@ -8047,5 +7682,5 @@
     end
 
-    # èª­è¾¼ã¿æ¸ã¿ãªããèª­è¾¼ã¾ãªã
+    # 読込み済みなら、読込まない
     prev = @@import_list[ File.expand_path( @cdl_path ) ]
     if( prev ) then
@@ -8056,23 +7691,23 @@
     end
 
-    # import ãªã¹ããè¨é²
+    # import リストを記録
     @@import_list[ File.expand_path( @cdl_path ) ] = self
 
-    # plugin ãã import ããã¦ããå ´å
+    # plugin から import されている場合
     plugin = Generator.get_plugin
 
-    # ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ(å¥ãã¼ãµã§èª­ã¿è¾¼ã)
+    # パーサインスタンスを生成(別パーサで読み込む)
     parser = Generator.new
 
-    # plugin ãã import ããã¦ããå ´åã® plugin è¨­å®
+    # plugin から import されている場合の plugin 設定
     parser.set_plugin plugin
 
-    # reuse ãã©ã°ãè¨­å®
+    # reuse フラグを設定
     parser.set_reuse @b_reuse_real
 
-    # cdl ããã¼ã¹
+    # cdl をパース
     parser.parse( [@cdl_path] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     parser.finalize
     Import.pop
@@ -8099,6 +7734,6 @@
   end
 
-  #=== cdl ã®ååãè¿ã
-  # å¼æ°ã§æå®ããã¦ãã cdl åãä¸é¨ãã¹ãå«ãå¯è½æ§ããã
+  #=== cdl の名前を返す
+  # 引数で指定されている cdl 名。一部パスを含む可能性がある
   def get_cdl_name
     @cdl
@@ -8106,9 +7741,9 @@
 end
 
-#== generate: signature, celltype, cell ã¸ã®ãã©ã°ã¤ã³ã®ã­ã¼ãã¨é©ç¨
+#== generate: signature, celltype, cell へのプラグインのロードと適用
 class Generate < Node
 #@plugin_name:: Symbol
 #@object_nsp:: NamespacePath
-#@option::         String '"', '"' ã§å²ã¾ãã¦ãã
+#@option::         String '"', '"' で囲まれている
 #@plugin_object:: Plugin
 
@@ -8119,5 +7754,5 @@
     @plugin_name = plugin_name
     @object_nsp = object_nsp
-    option = option.to_s    # option ã¯ Token
+    option = option.to_s    # option は Token
     @option = option
     @plugin_object = nil
@@ -8132,5 +7767,5 @@
       @plugin_object = object.apply_plugin( @plugin_name, @option )
     elsif object then
-      # V1.5.0 ä»¥åã®ä»æ§ã§ã¯ãsignature ã®ã¿å¯è½ã ã£ã
+      # V1.5.0 以前の仕様では、signature のみ可能だった
 #      cdl_error( "S1149 $1 not signature" , signature_nsp )
       cdl_error( "S9999 generate: '$1' neither signature, celltype nor cell", object_nsp )
@@ -8142,15 +7777,14 @@
 end
 
-#== ååç©ºéãã¹
+#== 名前空間パス
 class NamespacePath < Node
 #@b_absolute::Bool
 #@path::[ Symbol,... ]
-#@namespace::Namespace:  @b_absolute == false ã®ã¨ããåºç¹ã¨ãªã namespace
+#@namespace::Namespace:  @b_absolute == false のとき、基点となる namespace
 
   #=== NamespacePath# initialize
-  #ident::Symbol           æåã®åå, ãã ã "::" ã®ã¿ã®å ´åã¯ String
-  #b_absolute:Bool         "::" ã§å§ã¾ã£ã¦ããå ´å true
-  #namespace::Namespace    b_absolute = false ãã¤ãæ§æè§£éæ®µéä»¥å¤ã§å¼ã³åºãå ´åã¯ãå¿
-ãæå®ãããã¨ 
+  #ident::Symbol           最初の名前, ただし "::" のみの場合は String
+  #b_absolute:Bool         "::" で始まっている場合 true
+  #namespace::Namespace    b_absolute = false かつ、構文解釈段階以外で呼び出す場合は、必ず指定すること 
   def initialize( ident, b_absolute, namespace = nil )
     super()
@@ -8178,16 +7812,14 @@
   end
 
-  #=== NamespacePath# append ãã
+  #=== NamespacePath# append する
   #RETURN self
-  # ãã®ã¡ã½ããã¯ãå
-ã® NamespacePath ãªãã¸ã§ã¯ããå¤å½¢ãã¦è¿ã
+  # このメソッドは、元の NamespacePath オブジェクトを変形して返す
   def append!( ident )
     @path << ident
     return self
   end
-  #=== NamespacePath# append ãã
-  # ãã®ã¡ã½ããã¯ãå
-ã® NamespacePath ãªãã¸ã§ã¯ããå¤å½¢ããªã
-  #RETURN:: è¤è£½ãã NamespacePath
+  #=== NamespacePath# append する
+  # このメソッドは、元の NamespacePath オブジェクトを変形しない
+  #RETURN:: 複製した NamespacePath
   def append( ident )
     cl = self.clone
@@ -8205,5 +7837,5 @@
   end
 
-  #=== NamespacePath#ã¯ã­ã¼ã³ãä½æãã¦ååãå¤æ´ãã
+  #=== NamespacePath#クローンを作成して名前を変更する
   def change_name name
     cl = self.clone
@@ -8214,7 +7846,6 @@
   alias :change_name_clone :change_name
 
-  #=== NamespacePath#ååãå¤æ´ãã
-  # ãã®ã¤ã³ã¹ã¿ã³ã¹ãåç
-§ãããã¹ã¦ã«å½±é¿ãä¸ãããã¨ã«æ³¨æ
+  #=== NamespacePath#名前を変更する
+  # このインスタンスを参照するすべてに影響を与えることに注意
   def change_name_no_clone name
     @path[ @path.length - 1 ] = name
@@ -8222,6 +7853,6 @@
   end
 
-  #=== NamespacePath:: path æå­åãå¾ã
-  # CDL ç¨ã® path æå­åãçæ
+  #=== NamespacePath:: path 文字列を得る
+  # CDL 用の path 文字列を生成
   def to_s
     get_path_str
@@ -8252,10 +7883,8 @@
   end
 
-  #=== NamespacePath:: ãã¹ã®é
-åãè¿ã
-  # is_absolute? true ã®å ´åãã«ã¼ãããã®ãã¹
-  #              false ã®å ´åãbase_namespace ããã®ç¸å¯¾
-  # ã«ã¼ã namespace ã®å ´åãé·ãï¼ã®é
-åãè¿ã
+  #=== NamespacePath:: パスの配列を返す
+  # is_absolute? true の場合、ルートからのパス
+  #              false の場合、base_namespace からの相対
+  # ルート namespace の場合、長さ０の配列を返す
   #
   def get_path
@@ -8263,8 +7892,6 @@
   end
 
-  #=== NamespacePath#ãã«ãã¹ã®é
-åãè¿ã
-  # è¿ãããé
-åãæ¸ãæãã¦ã¯ãªããªã
+  #=== NamespacePath#フルパスの配列を返す
+  # 返された配列を書き換えてはならない
   def get_full_path
     if @b_absolute then
@@ -8275,11 +7902,11 @@
   end
 
-  #=== NamespacePath:: ç¸å¯¾ãã¹ã®ãã¼ã¹ã¨ãªã namespace
-  # is_absolute? == false ã®æã®ã¿æå¹ãªå¤ãè¿ã (true ãªã nil)
+  #=== NamespacePath:: 相対パスのベースとなる namespace
+  # is_absolute? == false の時のみ有効な値を返す (true なら nil)
   def get_base_namespace
     @namespace
   end
 
-  #=== NamespacePath:: C è¨èªã°ã­ã¼ãã«åãå¾ã
+  #=== NamespacePath:: C 言語グローバル名を得る
   def get_global_name
     if @b_absolute then
@@ -8299,11 +7926,11 @@
   end
 
-  #=== NamespacePath:: åè§£ãã¦ NamespacePath ã¤ã³ã¹ã¿ã³ã¹ãçæãã
-  #path_str:: String       : namespace ã¾ãã¯ region ã®ãã¹ ex) "::path::A" , "::", "ident"
-  #b_force_absolute:: Bool : "::" ã§å§ã¾ã£ã¦ããªãå ´åã§ãçµ¶å¯¾ãã¹ã«æ±ã
+  #=== NamespacePath:: 分解して NamespacePath インスタンスを生成する
+  #path_str:: String       : namespace または region のパス ex) "::path::A" , "::", "ident"
+  #b_force_absolute:: Bool : "::" で始まっていない場合でも絶対パスに扱う
   #
-  # NamespacePath ã¯éå¸¸æ§æè§£æããã¦ä½æããã
-  # ãã®ã¡ã½ããã¯ããªãã·ã§ã³ãªã©ã§æå®ãããæå­åãåè§£ãã¦ NamespacePath ãçæããã®ã«ç¨ãã
-  # ãã§ãã¯ã¯ããããä¸é©åãªãã¹æå®ã¯ãä¸é©åãª NamespacePath ãçæããã
+  # NamespacePath は通常構文解析されて作成される
+  # このメソッドは、オプションなどで指定される文字列を分解して NamespacePath を生成するのに用いる
+  # チェックはゆるい。不適切なパス指定は、不適切な NamespacePath が生成される
   def self.analyze( path_str, b_force_absolute = false )
 
@@ -8344,5 +7971,5 @@
 end
 
-# ä»¥ä¸åä½ãã¹ãã³ã¼ã
+# 以下単体テストコード
 if $unit_test then
   root_namespace = Namespace.new("::")
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb	(revision 389)
@@ -6,69 +6,54 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# CType ã¯ C_parser ã§å®ç¾©ãããåãæ±ã CIntType, CFloatType ãªã©ã« include ãããã®
-# CIntType ã¯ IntType ãç¶æ¿ãããªã©ãC ã®åã§ã¯ TECS ã®åãç¶æ¿ãã
+# CType は C_parser で定義される型を扱う CIntType, CFloatType などに include するもの
+# CIntType は IntType を継承するなど、C の型では TECS の型を継承する
 module CType
 
-  #=== æ§æè¦ç´  type_specifier ãè¤æ°æå®ããã¦ããå ´åã« merge ãã
-  # merge ã¯ const(CIntType) unsigned(CIntTtype), long(CIntType), ãªã©ã¨ä»ã®åããã¼ã¸ãã
-  # const, unsigned, long ãªã©ã¯ãåä½ã§ int (CIntType) åã«ãªããã
+  #=== 構文要素 type_specifier が複数指定されている場合に merge する
+  # merge は const(CIntType) unsigned(CIntTtype), long(CIntType), などと他の型をマージする
+  # const, unsigned, long などは、単体で int (CIntType) 型になりうる
   #
-  # mikan C ã®ææ³ãå³å¯ã«ã¯ãã§ãã¯ãã¦ããªã  long struct ç­ãã§ãã¦ãã¾ã
+  # mikan C の文法を厳密にはチェックしていない  long struct 等もできてしまう
   def merge another
 
     # p "self: #{self.class} kind_of( IntType ): #{self.kind_of?( IntType )}  another: #{another.class}"
 
-    # signed, unsigned ã Symbol ã¨ãã¦æ¥ãäºã¯ç¡ããªã£ã
+    # signed, unsigned が Symbol として来る事は無くなった
     # if another.instance_of? Symbol then
-    #   # ããã§ Symbol ã¯ :SIGNED, :UNSIGNED ã®ãããã
+    #   # ここで Symbol は :SIGNED, :UNSIGNED のいずれか
     # 
-    #   # CIntType ãï¼
+    #   # CIntType か？
     #   if self.instance_of? CIntType then
     #     self.set_sign another
@@ -84,6 +69,6 @@
           @bit_size = -5  # long long
         else
-          # self ã¯ int åãanother ã® bit_size ã (int ä»¥å¤ã§ããã°)ãã¡ãã«ãã
-          # mikan ä¸è¨ä»¥å¤ã§ ä¸¡æ¹ -3 ã§ãªããã°ãæ¬æ¥ã¨ã©ã¼
+          # self は int 型、another の bit_size が (int 以外であれば)そちらにする
+          # mikan 上記以外で 両方 -3 でなければ、本来エラー
           @bit_size = another.get_bit_size
         end
@@ -91,10 +76,10 @@
 
       if another.get_sign then
-        # another ã§ sign ãæå®ããã¦ããã°ããã¡ãã®ãã®ãæ¡ç¨ãã mikan çç¾ã®ãã§ãã¯
+        # another で sign が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
         @sign = another.get_sign
       end
 
 #      if another.get_qualifier then
-#        # another ã§ qualifier ãæå®ããã¦ããã°ããã¡ãã®ãã®ãæ¡ç¨ãã mikan çç¾ã®ãã§ãã¯
+#        # another で qualifier が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
 #        @qualifier = another.get_qualifier
 #      end
@@ -110,5 +95,5 @@
       return another.merge self
     elsif self.instance_of?( CDefinedType ) then
-      # mikan unsigned ãªã©ã¨ã® merge ã®ä¸æ­£æ¤åº
+      # mikan unsigned などとの merge の不正検出
       if another.is_const? then
         @b_const = true
@@ -135,5 +120,5 @@
     elsif self.instance_of?( CFloatType ) then
       # mikan long double
-      #   TECS ã«ã¯ long double ãè¡¨ç¾ããææ®µããªã (double80_t ãå®ç¾©ããã°ããã?)
+      #   TECS には long double を表現する手段がない (double80_t を定義すればよいか?)
 #      cdl_warning( "C1003 $1 & $2 incompatible (\'long double\' is not supported.). Treated as $3." , self.class, another.class, self.class )
 #      cdl_warning( "W9999 $1 & $2 incompatible (\'long double\' is not supported.). Treated as $3." , self.get_type_str, another.get_type_str, self.get_type_str )
@@ -145,7 +130,6 @@
   end
 
-  #=== qualifier ãè¨­å®ãã
-  #     å
-ã® Type ã¯ã©ã¹ã§ã¯çç¾ãã§ãã¯ããªãï¼TECSã®æ¬æ¥ã®ææ³ã§ã¯éè¤æå®ã§ããªãããï¼
+  #=== qualifier を設定する
+  #     元の Type クラスでは矛盾チェックしない（TECSの本来の文法では重複指定できないため）
   def set_qualifier( qual )
 
@@ -184,5 +168,5 @@
 
   def initialize( bit_size )
-    #p super.class   mikan super.class ã Symbol ã ããªãï¼
+    #p super.class   mikan super.class が Symbol だ、なぜ？
     super( bit_size )
   end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -71,5 +56,5 @@
 
   #=== Expression# to_s
-  # C è¨èªã½ã¼ã¹åãã®æå­åãçæ (globa_name)
+  # C 言語ソース向きの文字列を生成 (globa_name)
   def to_s
     elements_to_s( @elements )
@@ -77,5 +62,5 @@
 
   #=== Expression# to_str
-  # C è¨èªã½ã¼ã¹åãã®æå­åãçæ (globa_name)
+  # C 言語ソース向きの文字列を生成 (globa_name)
   def to_str( name_list, pre, post )
     elements_to_s( @elements, name_list, pre, post )
@@ -83,27 +68,25 @@
 
   #=== Expression#to_CDL_str
-  # CDL è¡¨ç¾ã®æå­åãçæ
+  # CDL 表現の文字列を生成
   def to_CDL_str
     return to_s
   end
 
-  #=== å®æ°å¼ã¨ãã¦è©ä¾¡ãã(ãã©ã¤ãã¦ã¿ã)
+  #=== 定数式として評価する(トライしてみる)
   #
-  # ãã®ã¡ã½ããã¯ãå®æ°å¼ãè©ä¾¡ãã
-  # ã»attribute, var ã®åæåå­
-  # ã»size_is, count_is å¼æ°
-  # ã»é
-åã®æ·»æ°
+  # このメソッドは、定数式を評価する
+  # ・attribute, var の初期化子
+  # ・size_is, count_is 引数
+  # ・配列の添数
   #
-  # name_list(NamedList|Nil): å¼ããåç
-§å¯è½ãªãªã¹ãï¼
-  # NamedList ã®è¦ç´ ã¯  size_is, count_is ã®å¼æ°è©ä¾¡ã®å ´å ParamDecl (é¢æ°ä»®å¼æ°)
+  # name_list(NamedList|Nil): 式から参照可能なリスト．
+  # NamedList の要素は  size_is, count_is の引数評価の場合 ParamDecl (関数仮引数)
   #
-  # name_list2(NamedList|Nil) : NamedList ã®è¦ç´ ã¯ Decl (attribute, var) ã§ããï¼çç¥æ nil
+  # name_list2(NamedList|Nil) : NamedList の要素は Decl (attribute, var) である．省略時 nil
   # 
-  # RETURN: è©ä¾¡ããå®æ°ï¼è©ä¾¡ã§ããªãã£ãå ´åã¯ nil ãè¿ã
+  # RETURN: 評価した定数．評価できなかった場合は nil を返す
   #
-  # åã¯ get_type ã§ãè©ä¾¡ããï¼å®æ°ã¨ãã¦æ±ããããªãã¨ãã«ä½¿ç¨ã§ããï¼
-  # Array ãè¿ãã®ã¯ attr{ int *a = {1, 2, 3}; int *b = a; }; ã® b ã®å³è¾ºãè©ä¾¡ããå ´å
+  # 型は get_type で、評価する（定数として求められないときに使用できる）
+  # Array を返すのは attr{ int *a = {1, 2, 3}; int *b = a; }; の b の右辺を評価した場合
 
   def eval_const( name_list, name_list2 = nil )
@@ -116,26 +99,26 @@
       return val.to_i
     elsif val.kind_of? PointerVal then
-      return val.to_i           # mikan ã¨ã©ã¼ V1008 ãçºçãã¦ãã¾ã
+      return val.to_i           # mikan エラー V1008 が発生してしまう
       # elsif val.kind_of? EnumVal then
       # enum mikan
     else
-      # C_EXP, Array ã¾ãã¯ nil ï¼ãã®ã¾ã¾è¿ã
+      # C_EXP, Array または nil ：そのまま返す
       return val
     end
   end
 
-  #=== å®æ°å¼ã¨ãã¦è©ä¾¡ãã2(ãã©ã¤ãã¦ã¿ã)
+  #=== 定数式として評価する2(トライしてみる)
   #
-  # IntegerVal, FloatVal ããã®ã¾ã¾è¿ãï¼eval_const ã§ã¯ Integer, Float ã«å¤æï¼
+  # IntegerVal, FloatVal をそのまま返す（eval_const では Integer, Float に変換）
   def eval_const2( name_list, name_list2 = nil, nest = 0 )
     val = elements_eval_const( @elements, name_list, name_list2, nest )
   end
 
-  #=== å¼ã®åãè©ä¾¡ãã
+  #=== 式の型を評価する
   #
-  # eval_const ã§å¤ãå¾ãããªãå ´åãåãå°åºå¯è½ã§ããã°åãå¾ã
-  # param ãå«ãã å¼ã¯å®æ°å¤ãæ±ããããªãããåãå¾ããã¨ã¯ã§ãã
-  # æªå®ç¾©å¤æ°ãå«ãã åã¯ãå¾ããã¨ãã§ããªã (ããã¼åå®ç¾©ãè¿ã)
-  def get_type( namedList )        # ååç©ºéã® NamedList ãæå®
+  # eval_const で値が得られない場合、型を導出可能であれば型を得る
+  # param を含んだ式は定数値を求められないが、型を得ることはできる
+  # 未定義変数を含んだ型は、得ることができない (ダミー型定義が返る)
+  def get_type( namedList )        # 名前空間の NamedList を指定
     elements_get_type( @elements, namedList )
   end
@@ -150,5 +133,5 @@
 
   def show_tree( indent )
-    # mikan override ãã¦ãã¾ã£ã print ãå¼åºãæ¹æ³ãããããªãã®ã§ãããã
+    # mikan override してしまった print を呼出す方法がわからないのでこうした
     str = ""
     indent.times { str += "  " }
@@ -158,9 +141,9 @@
 ## private
 
-  #=== å¼ãæå­åã«å¤æ
-  #name_list:: attribute (Celltype::@attribute_list), struct ã® @member_list ãä»®å®ãã¦ãã
+  #=== 式を文字列に変換
+  #name_list:: attribute (Celltype::@attribute_list), struct の @member_list を仮定している
   def elements_to_s( elements, name_list = nil, pre = nil, post = nil )
     if elements.instance_of? Token then
-      return elements.to_s    # OP_DOT, OP_REF ã®å³è¾º
+      return elements.to_s    # OP_DOT, OP_REF の右辺
     end
 
@@ -247,16 +230,16 @@
   end
 
-  #=== Expression# éãã¼ã©ã³ãæå­åå
-  #param_list:: ParamlList  é¢æ°ã®å¼æ°ãªã¹ã
+  #=== Expression# 逆ポーランド文字列化
+  #param_list:: ParamlList  関数の引数リスト
   def get_rpn( param_list = nil, name_list2 = nil )
     return elements_rpn( @elements, param_list, name_list2 )
   end
 
-  #=== Expression# éãã¼ã©ã³ãæå­åå (private)
-  #name_list:: ParamlList  é¢æ°ã®å¼æ°ãªã¹ã
+  #=== Expression# 逆ポーランド文字列化 (private)
+  #name_list:: ParamlList  関数の引数リスト
   def elements_rpn( elements, name_list = nil, name_list2 = nil )
     if elements.instance_of? Token then
       print "rpn: #{elements.to_s}\n"
-      return elements.to_s    # OP_DOT, OP_REF ã®å³è¾º
+      return elements.to_s    # OP_DOT, OP_REF の右辺
     end
 
@@ -354,18 +337,15 @@
   end
 
-  # å®æ°å¼(elements)ãè©ä¾¡ãã
+  # 定数式(elements)を評価する
   #
-  # ãã®ã¡ã½ããã¯ Expression ã¯ã©ã¹ã®ã¡ã½ããã§ããå¿
-è¦ã¯ãªãï¼é¢æ°åã§ããï¼
+  # このメソッドは Expression クラスのメソッドである必要はない（関数化できる）
   #
-  # elements ã¯å¼ã®è¦ç´ 
+  # elements は式の要素
   #
-  # name_list, name_list2 ã¯ eval_const ãåç
-§
+  # name_list, name_list2 は eval_const を参照
   #
-  # RETURN: è©ä¾¡ããå®æ°ãè©ä¾¡ã§ããªãã£ãå ´åã¯ nil ãè¿ã
-
-  MAX_NEST_LEVEL = 64    # ç°¡æã®ã«ã¼ãæ¤åºï¼åç
-§ã®ãã¹ãã 64 ã¾ã§è¨±å¯ããï¼
+  # RETURN: 評価した定数、評価できなかった場合は nil を返す
+
+  MAX_NEST_LEVEL = 64    # 簡易のループ検出（参照のネストを 64 まで許可する）
   def elements_eval_const( elements, name_list, name_list2 = nil, nest = nil )
 
@@ -374,9 +354,7 @@
       nsp = elements[1]
 
-      # #809 ã®ä¿®æ­£ããã (å¥ã®åé¡ãè§£æ±ºãããã¦ããªã)
-      # nest += 1     # åç
-§ãã«ã¼ãã«ãªã£ã¦ããªããã®ãã§ãã¯
-      #               # mikan æ¬å½ã«ã«ã¼ããã¦ãããã©ããã§ã¯ãªããåç´ã«å¤æ°ã®åç
-§ãç¹°ãè¿ãã¦ãããã¨ã§å¤å®ãã¦ãã
+      # #809 の修正しかけ (別の問題が解決しきれていない)
+      # nest += 1     # 参照がループになっていないかのチェック
+      #               # mikan 本当にループしているかどうかではなく、単純に多数の参照を繰り返していることで判定している
       # if nest > MAX_NEST_LEVEL then
       #   cdl_error( "E9999: '$1' too many reference (maybe loop) max=$1" , nsp.to_s, MAX_NEST_LEVEL )
@@ -393,17 +371,16 @@
       end
 
-      # è¦ã¤ãããªããã°å®æ°å®ç¾©ããæ¢ã
+      # 見つからなければ定数定義から探す
       if object == nil then
-        object = Namespace.find( nsp )# mikan namespace ã®å¯¾å¿ #1
-      end
-
-# ãã®å®è£
-ã¯ãããå°ãæ´çãããã¹ã
-# ãããå¼åºãããã®ã¯ãä»¥ä¸ã®å ´å
-#   ã»attribute, var ã®å³è¾ºå¼ã®è©ä¾¡
-#   ã»size_is å¼æ°ã®è©ä¾¡ï¼é¢æ°ãã©ã¡ã¼ã¿ã®å ´åã¨attribute, var ã®å ´åããã
-# ä»¥ä¸ã®ã¨ã©ã¼ãã§ãã¯ã§ã¯ããããããã£ã¡ãã«ãªã£ã¦èª¤ããæ¤åºãããã¨ãã¦ãã
-
-      # IDENTIFIER ã¯è¦ã¤ãããªãã£ãï¼
+        object = Namespace.find( nsp )# mikan namespace の対応 #1
+      end
+
+# この実装は、もう少し整理されるべき
+# これが呼出されるのは、以下の場合
+#   ・attribute, var の右辺式の評価
+#   ・size_is 引数の評価：関数パラメータの場合とattribute, var の場合がある
+# 以下のエラーチェックでは、これらがごっちゃになって誤りを検出しようとしている
+
+      # IDENTIFIER は見つからなかった？
       if object == nil then
         cdl_error( "E1001 $1: not found" , nsp.get_path_str )
@@ -411,6 +388,6 @@
         return nil
       elsif object.instance_of?( Join ) then
-        # Join ã®å ´åï¼ cell ã®ä¸­ã® attribute, var, call ã®ã©ãããè¦ã¤ãã£ã
-        # Decl (attribute, var) ã§ãªãï¼
+        # Join の場合： cell の中の attribute, var, call のどれかが見つかった
+        # Decl (attribute, var) でない？
         if ! object.get_definition.instance_of?( Decl ) then
           cdl_error( "E1002 $1: not constant (port)" , nsp.get_path_str )
@@ -419,8 +396,8 @@
         return object.get_rhs.eval_const2( name_list, name_list2, nest )
       elsif ! object.instance_of?( Decl ) then
-        # Decl ã§ãªãå ´åï¼ å®æ°ã§ããªã
+        # Decl でない場合： 定数でもない
         if ( ! object.instance_of?( ParamDecl ) ) then
-                                                      # mikan paramdecl ã¯ç¡è¦ãã
-                                                      # ParamList ããå¼ã°ããã¨ã
+                                                      # mikan paramdecl は無視する
+                                                      # ParamList から呼ばれたとき
           cdl_error( "E1003 $1: not constant" , nsp.get_path_str )
         else
@@ -432,13 +409,13 @@
         object.referenced
         if object.get_initializer == nil then
-          # åæåå­ã®å­å¨ããªãå¤æ°   # mikan ããã¸ããã®ã¯ãéå¸¸ããããªãã¯ãï¼æªæ¤è¨¼ï¼
+          # 初期化子の存在しない変数   # mikan ここへくるのは、通常ありえないはず（未検証）
           return IntegerVal.new( 0 )
         else
-          # Decl ã®å³è¾ºã®è©ä¾¡
-          # mikan size_is å¼æ°ã«ç¾ããå¤æ°ã®åãé©åãã®ãã§ãã¯ãã
+          # Decl の右辺の評価
+          # mikan size_is 引数に現れる変数の型が適切かのチェックする
           if object.get_initializer.instance_of?( Expression ) || object.get_initializer.instance_of?( C_EXP ) then
             return object.get_initializer.eval_const2( name_list, name_list2, nest )
           else
-            # Array ã®å ´å
+            # Array の場合
             return object.get_initializer
           end
@@ -556,5 +533,5 @@
 # p "val.respond_to?( \"-@\" )=#{val.respond_to?( "-@" )} #{val.class}"
 # p "val.respond_to?( \"~@\" )=#{val.respond_to?( "~@" )}"
-#2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview çã§ã¯ä¾å¤ãçºçãã¦ãã¾ã
+#2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview 版では例外が発生してしまう
       if val.kind_of? IntegerVal then
         return ~ val
@@ -702,6 +679,5 @@
   def elements_get_type( elements, namedList )
     type = elements_get_type_sub( elements, namedList )
-    # è¿ãããæ¹ã DefinedType ã®å ´å å
-ã®åãè¿ã
+    # 返された方が DefinedType の場合 元の型を返す
     if type.kind_of?( DefinedType ) then
       type = type.get_type
@@ -742,24 +718,24 @@
       unless type.kind_of?( PtrType ) then
         cdl_error( "E1013 \'*\': operand is not pointer value"  )
-        return IntType.new( 8 )    # IntType ãè¿ãã¦ãã
+        return IntType.new( 8 )    # IntType を返しておく
       end
       return type.get_referto
 
     when :OP_U_PLUS, :OP_U_MINUS
-      # mikan operand ãé©åãªåããã§ãã¯ãã¦ããªã
+      # mikan operand が適切な型かチェックしていない
       return elements_get_type( elements[1], namedList )
 
     when :OP_ADD, :OP_SUB, :OP_MULT, :OP_DIV, :OP_REMAIN
-      # mikan operand ãé©åãªåããã§ãã¯ãã¦ããªãï¼å·¦è¾ºã®åãæ¡ç¨ãã¦ãã
+      # mikan operand が適切な型かチェックしていない＆左辺の型を採用している
       return elements_get_type( elements[1], namedList )
 
     when :OP_U_TILDE
-      # mikan operand ãæ´æ°ããã§ãã¯ãã¦ããªã
+      # mikan operand が整数かチェックしていない
       return elements_get_type( elements[1], namedList )
     when :OP_AND, :OP_EOR, :OP_OR, :OP_LSFT, :OP_RSFT
-      # mikan operand ãæ´æ°ããã§ãã¯ãã¦ããªã
+      # mikan operand が整数かチェックしていない
       return BoolType.new
     when :OP_U_EXCLAM
-      # mikan operand ãæ´æ°ããã§ãã¯ãã¦ããªã
+      # mikan operand が整数かチェックしていない
       return BoolType.new
 
@@ -771,9 +747,8 @@
   end
 
-  # å¼ã size_is, count_is, string ã®å¼æ°ã§ããå ´åã®æ¹åã®ãã§ãã¯
+  # 式が size_is, count_is, string の引数である場合の方向のチェック
   def elements_check_dir_for_param( elements, namedList, dir, spec )
-   # dir ï¼ å
-ã®å¼æ°ã®æ¹å
-   # direct: size_is ãªã©ã®å¼æ°ã®å¤æ°ã®æ¹å
+   # dir ： 元の引数の方向
+   # direct: size_is などの引数の変数の方向
 
     case elements[0]
@@ -806,5 +781,5 @@
           judge = true if ( direct == :IN || direct == :INOUT )
           req_direct = "in or inout"
-        when :OUT, :RECEIVE     # mikan out ã§ count_is ã®ã¿æå®ããã¦ããå ´å in ã§ãªãã¦ã¯ãªããªã
+        when :OUT, :RECEIVE     # mikan out で count_is のみ指定されている場合 in でなくてはならない
           judge = true if ( direct == :OUT || direct == :INOUT )
           req_direct = "out or inout"
@@ -822,16 +797,13 @@
       return true
 
-    # åé 
-æ¼ç®å­
+    # 単項演算子
     when :OP_U_ASTER, :OP_SIZEOF_EXPR, :OP_SIZEOF_TYPE, :OP_U_PLUS, :OP_U_MINUS, :OP_U_TILDE, :OP_U_EXCLAM, :CAST, :OP_U_AMP, :PARENTHESES,
       elements_check_dir_for_param( elements[1], namedList, dir, spec )
 
-    # 2é 
-æ¼ç®å­
+    # 2項演算子
     when :OP_SUBSC, :OP_DOT, :OP_REF, :OP_MULT, :OP_DIV, :OP_REMAIN, :OP_ADD, :OP_SUB, :OP_LSFT, :OP_RSFT, :OP_LT, :OP_GT, :OP_LE, :OP_GE, :OP_EQ, :OP_NE, :OP_AND, :OP_EOR, :OP_OR, :OP_LAND, :OP_LOR
       return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec )
 
-    # 3é 
-æ¼ç®å­
+    # 3項演算子
     when :OP_CEX
       return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec ) && elements_check_dir_for_param( elements[3], namedList, dir, spec )
@@ -845,5 +817,5 @@
   #Express# get_allocator_rhs_elem
   #alloc_type::Symbol  :NORMAL_ALLOC|:INTERNAL_ALLOC|:RELAY_ALLOC
-  #å¼ãã¢ã­ã±ã¼ã¿æå®å­ã®å³è¾ºã¨ãã¦å¦¥å½ããã§ãã¯ããæ­£ãããã°åè§£ããå¤ãè¿ã
+  #式がアロケータ指定子の右辺として妥当かチェックし、正しければ分解した値を返す
   #return:
   #  :NORMAL_ALLOC      [ cell_nsp, ep_name ]               # rhs = cell_nsp.ep_name    ex) Alloc.eAlloc
@@ -883,5 +855,5 @@
   end
 
-  #Expression#Expression ã®ã¯ã­ã¼ã³ãä½æãã
+  #Expression#Expression のクローンを作成する
   def clone_for_composite
     cl = self.clone
@@ -891,7 +863,7 @@
   end
 
-  #Expression#elements ã®ã¯ã­ã¼ã³ãä½æ
+  #Expression#elements のクローンを作成
   #elements::Array
-  # ãã®ã¡ã½ããã¯ãArray ã®ãã£ã¼ãã³ãã¼ãè¡ã
+  # このメソッドは、Array のディープコピーを行う
   def clone_elements elements
     elements = elements.clone
@@ -910,18 +882,15 @@
   end
 
-  #=== Expression#ã»ã«çµåã®å¼ãè§£æãã
+  #=== Expression#セル結合の式を解析する
   # Cell.eEntry  => [ :OP_DOT, [ :IDENTIFIER, token ], token ]
   # Cell.eEntry[expression] => [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
   # Return: [ NamespacePath(cell_name), Integer(subscript) or nil, Token(port_name)]
   def analyze_cell_join_expression
-    # å³è¾ºã® Expression ã®è¦ç´ ãåãåºã
+    # 右辺の Expression の要素を取り出す
     elements = @elements
-    if elements[0] == :OP_SUBSC then  # å³è¾ºï¼åãå£é
-åï¼
+    if elements[0] == :OP_SUBSC then  # 右辺：受け口配列？
       # elements = [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
-      subscript = elements[2].eval_const(nil)  # åãå£é
-åã®æ·»æ°
-      elements  = elements[1]          # mikan é
-åã ã£ãå ´å
+      subscript = elements[2].eval_const(nil)  # 受け口配列の添数
+      elements  = elements[1]          # mikan 配列だった場合
     else
       subscript = nil
@@ -939,9 +908,9 @@
   end
 
-  #=== Expression# ã»ã«ã¸ã®çµåã®å¼ãçæãã
+  #=== Expression# セルへの結合の式を生成する
   #nsp:: NamespacePath
   #subscript:: Integer
   #port_name:: Symbol
-  # analyze_cell_join_expression ã¨å¯¾ã«ãªã£ã¦ãã
+  # analyze_cell_join_expression と対になっている
   def self.create_cell_join_expression( nsp, subscript, port_name, locale = nil )
     if ! port_name.instance_of?( Symbol ) then
@@ -959,6 +928,6 @@
   end
 
-  #=== Expression#æ´æ°å®æ°ã®å¼ãçæãã
-  #val:: Integer : å¤ï¼ æ´æ°
+  #=== Expression#整数定数の式を生成する
+  #val:: Integer : 値： 整数
   def self.create_integer_constant( val, locale = nil )
     if val != Integer( val ) || val < 0 then
@@ -968,9 +937,9 @@
   end
 
-  #=== Expression#åä¸ã®è­å¥å­ã®å¼ãè§£æãã
+  #=== Expression#単一の識別子の式を解析する
   # Identifier  => [ :IDENTIFIER, token ]
   # Return: NamespacePath(Identifier)
   def analyze_single_identifier
-    # å³è¾ºã® Expression ã®è¦ç´ ãåãåºã
+    # 右辺の Expression の要素を取り出す
     elements = @elements
     if elements[0] == :IDENTIFIER
@@ -982,6 +951,5 @@
 
   #=== Expression#
-  #nsp:: NamespacePath :  åç
-§ãããã®è­å¥å­
+  #nsp:: NamespacePath :  参照するもの識別子
   def self.create_single_identifier( nsp, locale )
     if ! nsp.instance_of?( NamespacePath ) then
@@ -991,7 +959,7 @@
   end
 
-  #=== è©ä¾¡å¯è½ããã§ãã¯ãã
-  #*v:: å¯å¤åå¼æ°ï¼ä»»æã®åï¼
-  # ãã¹ã¦ã BaseVal ã®å­ã¯ã©ã¹ï¼å¤ï¼ã§ããã°ãè©ä¾¡å¯è½ã¨å¤æ­ãã
+  #=== 評価可能かチェックする
+  #*v:: 可変個引数（任意の型）
+  # すべてが BaseVal の子クラス（値）であれば、評価可能と判断する
   def evaluable?( *v )
     v.each{ |val|
@@ -1012,10 +980,10 @@
 
   #c_exp_string::String
-  #b_renew::Bool  : true ãªã C_EXP ã® clone ä½æï¼ã¨ã¹ã±ã¼ãå¦çç­ãããªãï¼
+  #b_renew::Bool  : true なら C_EXP の clone 作成（エスケープ処理等をしない）
   def initialize( c_exp_string, b_renew = false )
     if b_renew then
       @c_exp_string = c_exp_string
     else
-      # åå¾ã® " ãåãé¤ã
+      # 前後の " を取り除く
       # str = c_exp_string.to_s.sub( /^\"(.*)\"$/, "\\1" )
       str = CDLString.remove_dquote c_exp_string.to_s
@@ -1024,10 +992,10 @@
   end
 
-  #=== composite ç¨ã« C_EXP ã clone ãã
+  #=== composite 用に C_EXP を clone する
   #ct_name::
   #cell_name::
-  # composite ã® attribute ã«ç¾ãã C_EXP ãæå­åç½®æãã¦çæããªããï¼
-  # ãã®æå­åç½®æã¯ãæå³è§£éæ®µéã§è¡ãï¼
-  # ä»ã® C_EXP ã®æå­åç½®æã¯ãã³ã¼ãçææ®µéã§è¡ãï¼
+  # composite の attribute に現れる C_EXP を文字列置換して生成しなおす．
+  # この文字列置換は、意味解釈段階で行う．
+  # 他の C_EXP の文字列置換は、コード生成段階で行う．
   def clone_for_composite( ct_name, cell_name, locale )
     dbgPrint "C_EXP: #{ct_name} #{cell_name} #{@c_exp_string}\n"
@@ -1044,7 +1012,7 @@
   end
 
-  #=== C_EXP ãè©ä¾¡ãã
-  # C_EXP ã®å¼ãæ°æå­åãè¿ã
-  # æ¬æ¥ C_EXP ã¯ eval_const ããå¯¾è±¡ã§ã¯ãªãããä¾¿å®ä¸ eval_const ã§å¯¾å¿
+  #=== C_EXP を評価する
+  # C_EXP の引き数文字列を返す
+  # 本来 C_EXP は eval_const する対象ではないが、便宜上 eval_const で対応
   def eval_const( name_list, name_list2 = nil )
      return self
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/gen_xml.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/gen_xml.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/gen_xml.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -80,25 +65,25 @@
 
   def gen_XML( file, nest )
-    # signature ã®ã³ã¼ããçæ
+    # signature のコードを生成
     @signature_list.each { |s|
       s.gen_XML file, nest
     }
 
-    # celltype ã®ã³ã¼ããçæ
+    # celltype のコードを生成
     @celltype_list.each { |t|
       t.gen_XML( file, nest )
     }
 
-    # composite ã®ã³ã¼ããçæ
+    # composite のコードを生成
     @compositecelltype_list.each { |t|
       t.gen_XML( file, nest )
     }
 
-    # cell ã®ã³ã¼ããçæ
+    # cell のコードを生成
     @cell_list.each { |t|
       t.gen_XML( file, nest )
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+    # サブネームスペースのコードを生成
     @namespace_list.each { |n|
       kind = n.instance_of?( Namespace ) ? "namespace" : "region"
@@ -250,11 +235,9 @@
 
 #
-# Celltype ã¨å
-±ç¨å¯è½ãªã¯ãã ããä»¥ä¸ã®ç¹ã®å¤æ´ãå¿
-è¦
-#  @active â @b_active
-#  @singleton â @b_singleton
-#  @attribute â @name_list (Decl)
-#  @port â @name_list (Port)
+# Celltype と共用可能なはずだが、以下の点の変更が必要
+#  @active ⇒ @b_active
+#  @singleton ⇒ @b_singleton
+#  @attribute ⇒ @name_list (Decl)
+#  @port ⇒ @name_list (Port)
 class CompositeCelltype
   def gen_XML file, nest
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2019 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -134,5 +119,5 @@
 end
 
-# celltype_private.h ãçæ
+# celltype_private.h を生成
 
 class Namespace
@@ -141,8 +126,6 @@
 
     begin
-      # root namespace ãªãã° makefile ãåºåãã(å
-¨ã»ã«ã¿ã¤ãã«é¢ãããã®ã ã)
-      # å
-ã«åºåãã
+      # root namespace ならば makefile を出力する(全セルタイプに関わるものだけ)
+      # 先に出力する
       if @name == "::" then
 
@@ -159,5 +142,5 @@
 
       dbgPrint "generating region: #{$generating_region.get_name} namespace=#{@name} gen_dir=#{$gen}\n"
-      # global_tecsgen.h (typedef, struct, const) ã®çæ
+      # global_tecsgen.h (typedef, struct, const) の生成
       gen_global_header
 
@@ -171,15 +154,15 @@
       end
       
-      # signature ã®ã³ã¼ããçæ
+      # signature のコードを生成
       @signature_list.each { |s|
         s.generate
       }
 
-      # celltype ã®ã³ã¼ããçæ
+      # celltype のコードを生成
       @celltype_list.each { |t|
         t.generate
       }
 
-      # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+      # サブネームスペースのコードを生成
       @namespace_list.each { |n|
         n.generate
@@ -187,5 +170,5 @@
 
     rescue => evar
-      # ããã¹ã¿ãã¯ãã¬ã¼ã¹ãåºãã¾ã§ãæéãããããããªãã°ãæ¬¡ãã³ã¡ã³ãã¢ã¦ããã¦ã¿ãã¹ã
+      # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
       cdl_error( "H1001 tecsgen: fatal internal error during code generation"  )
       print_exception( evar )
@@ -200,18 +183,18 @@
 
     begin
-      # global_tecsgen.h (typedef, struct, const) ã®çµããã®ã¬ã¼ãã³ã¼ãçæ
+      # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
       gen_global_header_post
 
-      # signature ã®ã³ã¼ããçæ
+      # signature のコードを生成
       @signature_list.each { |s|
         s.generate_post
       }
 
-      # celltype ã®ã³ã¼ããçæ
+      # celltype のコードを生成
       @celltype_list.each { |t|
         t.generate_post
       }
 
-      # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+      # サブネームスペースのコードを生成
       @namespace_list.each { |n|
         n.generate_post
@@ -227,5 +210,5 @@
   def gen_global_header
 
-    # global_tecs.h ã®çæ
+    # global_tecs.h の生成
     f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
 
@@ -233,5 +216,5 @@
       print_note f
 
-      # ã¬ã¼ãã³ã¼ããåºå
+      # ガードコードを出力
       f.print <<EOT
 #ifndef GLOBAL_TECSGEN_H
@@ -240,7 +223,7 @@
 EOT
 
-      # import_C ã§æå®ãããããããã¡ã¤ã«ã® #include ãåºå
+      # import_C で指定されたヘッダファイルの #include を出力
       if Import_C.get_header_list2.length > 0 then
-        # ããã include ã®åºå
+        # ヘッダ include の出力
         f.printf TECSMsg.get( :IMP_comment ), "#_IMP_#"
         Import_C.get_header_list2.each{ |h|
@@ -253,11 +236,11 @@
     end
 
-    # typedef, struct, enum ãçæ
+    # typedef, struct, enum を生成
     @decl_list.each { |d|
 
-      # d ã¯ Typedef, StructType, EnumType ã®ãããã
+      # d は Typedef, StructType, EnumType のいずれか
       if d.instance_of?( Typedef ) then
 
-        # Typedef ã®å ´åãdeclarator ã® @type ããCType ã§ãªãã
+        # Typedef の場合、declarator の @type が　CType でないか
         if ! d.get_declarator.get_type.kind_of?( CType ) then
           d.gen_gh f
@@ -265,8 +248,8 @@
       elsif ! d.kind_of?( CType ) then
 
-        # CType ã§ã¯ãªã (StructType ã¾ãã¯ EnumType)
+        # CType ではない (StructType または EnumType)
         d.gen_gh f
 #     else
-#       ããã«è©²å½ããã®ã¯ CStructType, CEnumType
+#       ここに該当するのは CStructType, CEnumType
       end
     }
@@ -297,5 +280,5 @@
     end
 
-    # const ãçæ  mikan
+    # const を生成  mikan
     @const_decl_list.each { |d|
       f.printf( "#define %-14s ((%s%s)%s)\n", d.get_global_name,
@@ -310,5 +293,5 @@
   def gen_global_header_post
 
-    # global_tecs.h ãéã
+    # global_tecs.h を開く
     f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
 
@@ -324,10 +307,8 @@
   end
 
-  #=== Makefile.tecsgen, Makefile.templ ã®åºå
-  # å
-¨ã»ã«ã¿ã¤ãåãåºåããé¨åãåºå
-  #    ï¼æ¬ã¡ã½ããã¯ root namespace ã«å¯¾ãã¦å¼åºãï¼
-  #     åã
-ã®ã»ã«ã¿ã¤ãã®ã¡ã¼ã¯ã«ã¼ã«ã¯ Celltype ã¯ã©ã¹ã§åºå
+  #=== Makefile.tecsgen, Makefile.templ の出力
+  # 全セルタイプ名を出力する部分を出力
+  #    （本メソッドは root namespace に対して呼出す）
+  #     個々のセルタイプのメークルールは Celltype クラスで出力
   def gen_makefile
     gen_makefile_template
@@ -339,17 +320,17 @@
     return if $generate_no_template
 
-    ### Makefile.templ ã®çæ
+    ### Makefile.templ の生成
     f = AppFile.open( "#{$gen}/Makefile.templ" )
 
     print_Makefile_note f
 
-    # Makefile ã®å¤æ°ã®åºå
+    # Makefile の変数の出力
     f.printf TECSMsg.get( :MVAR_comment ), "#_MVAR_#"
     f.printf "# fixed variable (unchangeable by config or plugin)\n"
 
-    # TARGET ã®åºå (ç¬¬ä¸å¼æ° $target ã« region åããã³ .exe ãä»å )
+    # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
     target = $target
     if $generating_region != @@root_namespace then
-      # å­ region ã®ãªã³ã¯ã¿ã¼ã²ããã®å ´å
+      # 子 region のリンクターゲットの場合
       target += "-#{$generating_region.get_global_name}"
     end
@@ -433,5 +414,5 @@
 EOT
 
-    # make ã«ã¼ã«ã®åºå
+    # make ルールの出力
     f.printf( TECSMsg.get( :MRUL_comment), "#_MRUL_#" )
 
@@ -461,5 +442,5 @@
     f.print "-include $(GEN_DIR)/Makefile.tecsgen\n"
     if $generating_region.get_n_cells != 0 then
-      # Makefile.depend ã® include
+      # Makefile.depend の include
       f.print "-include $(GEN_DIR)/Makefile.depend\n\n"
 
@@ -471,5 +452,5 @@
       f.print "\nsub_regions:$(TIMESTAMP)\n"
       Region.get_link_roots.each {|region|
-        if region.get_global_name != "" then  # Root region: ãã® Makefile èªèº«
+        if region.get_global_name != "" then  # Root region: この Makefile 自身
           f.print "\tcd #{region.get_global_name}; make all\n"
         end
@@ -478,9 +459,9 @@
     end
 
-    # clean: ã¿ã¼ã²ãã
+    # clean: ターゲット
     f.print "clean :\n"
     if $generating_region == @@root_namespace then
       Region.get_link_roots.each {|region|
-        if region.get_global_name != "" then  # Root region: ãã® Makefile èªèº«
+        if region.get_global_name != "" then  # Root region: この Makefile 自身
           f.print "\tcd #{region.get_global_name}; make clean\n"
         end
@@ -493,5 +474,5 @@
     f.print "\n"
 
-    # tecs: ã¿ã¼ã²ãã
+    # tecs: ターゲット
     if $generating_region == @@root_namespace then
       f.print "tecs : $(PRE_TECSGEN_TARGET) $(TIMESTAMP) $(POST_TECSGEN_TARGET)\n\n"
@@ -504,5 +485,5 @@
     end
 
-    # tecsflow:, tcflow ã¿ã¼ã²ãã
+    # tecsflow:, tcflow ターゲット
     if $generating_region.get_n_cells != 0 || $generating_region == @@root_namespace then
       f.print "#####  TECSFlow targets  #####\n"
@@ -561,5 +542,5 @@
 
   def gen_makefile_tecsgen
-    ### Makefile.tecsgen ã®çæ
+    ### Makefile.tecsgen の生成
     f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
 
@@ -658,7 +639,6 @@
     domain_regions = nil
     DomainType.get_domain_regions.each{ |dt, regions|
-      # domain_type ã¯ä¸ã¤ã®ãã¼ãã«ã¯ãä¸ã¤ãããªãã®ã§ããã®ã«ã¼ãã¯ãå¿
-ãä¸åããåããªã
-        ###   mikan è¤æ°ã®ãã¼ãããããç°ãªã domain_type ãæå®ãããå¯è½æ§ã¯ãã
+      # domain_type は一つのノードには、一つしかないので、このループは、必ず一回しか回らない
+        ###   mikan 複数のノードがあり、異なる domain_type が指定される可能性はある
       domain_regions = regions
       domain_type = dt
@@ -836,14 +816,13 @@
   end
 
-  #=== ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
-  #f::       FILE:   åºåå
-ãã¡ã¤ã«
-  #prepend:: string: åç½®æå­å
-  #append::  string: å¾ç½®æå­å
-  #b_plguin::  bool:   plugin ã«ããçæãããã»ã«ã¿ã¤ããåºå
-  ##b_inline_only::  bool:   true ãªãã° inline ã® entry port ã®ã¿ã®ã»ã«ã¿ã¤ããå«ãã
-  #b_inline_only_or_proc::  bool|Proc:   true ãªãã° inline ã® entry port ã®ã¿ããã¤ã¤ã³ã¢ã¯ãã£ããªã»ã«ã¿ã¤ããå«ãã
-  #                                      Proc ãªãã° Proc ãå®è¡ããçµæ true ãªãã°å«ãã
-  #  namespace "::" ããå¼åºããã
+  #=== すべてのセルタイプの名前を出力
+  #f::       FILE:   出力先ファイル
+  #prepend:: string: 前置文字列
+  #append::  string: 後置文字列
+  #b_plguin::  bool:   plugin により生成されたセルタイプを出力
+  ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
+  #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
+  #                                      Proc ならば Proc を実行した結果 true ならば含める
+  #  namespace "::" から呼出される
   def gen_celltype_names( f, prepend, append, b_plugin, b_inline_only_or_proc = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -865,11 +844,10 @@
   end
 
-  #=== ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
+  #=== すべてのセルタイプの名前を出力
   #region:: Region:
-  # gen_celltype_names ã¨gen_celltype_names_domain ã®ç¸éï¼
-  #   region ã domain_roots ã«å«ãå ´åãåºåããï¼
-  #   ã¾ãã¯ãregion ãå«ã¾ãªãããdomain_roots ãè¤æ°ãã¤ã«ã¼ããªã¼ã¸ã§ã³ã®å ´åãåºåããï¼
-  # ããä»¥å¤ã¯ãgen_celltype_names ã®èª¬æãåç
-§
+  # gen_celltype_names とgen_celltype_names_domain の相違：
+  #   region を domain_roots に含む場合、出力する．
+  #   または、region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する．
+  # それ以外は、gen_celltype_names の説明を参照
   def gen_celltype_names_domain( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -901,11 +879,11 @@
     }
   end
-  #== Namespace#ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
-  # ã»ã«ã¿ã¤ãã³ã¼ãã®ããã®åååºå
-  # gen_celltype_names_domain ã¨ gen_celltype_names_domain2 ã®ç¸é
-  # ã»ã©ããä¸ã¤ã®ãªã¼ã¸ã§ã³ã«ããåºããªã
-  #     domain_roots ã1ã¤ã ãã§ãæå®ãªã¼ã¸ã§ã³ãå«ã
-  #     domain_roots ã2ã¤ä»¥ä¸ã§ãæå®ãªã¼ã¸ã§ã³ãã«ã¼ããªã¼ã¸ã§ã³ 
-  # ã»ãã¡ã¤ã³åãä»å ããªã
+  #== Namespace#すべてのセルタイプの名前を出力
+  # セルタイプコードのための名前出力
+  # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
+  # ・どれか一つのリージョンにしか出さない
+  #     domain_roots が1つだけで、指定リージョンを含む
+  #     domain_roots が2つ以上で、指定リージョンがルートリージョン 
+  # ・ドメイン名を付加しない
   def gen_celltype_names_domain2( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -933,7 +911,7 @@
   end
 
-  #=== Namespace#ãã¹ã¦ã®ã·ã°ããã£ããã©ã
-  def travers_all_signature # ãã­ãã¯å¼æ° { |signature|  }
-    proc = Proc.new    # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°
+  #=== Namespace#すべてのシグニチャをたどる
+  def travers_all_signature # ブロック引数 { |signature|  }
+    proc = Proc.new    # このメソッドのブロック引数
     @signature_list.each{ |sig|
       proc.call sig
@@ -952,7 +930,7 @@
   end
 
-  #=== Namespace#ãã¹ã¦ã®ã»ã«ã¿ã¤ãããã©ã
-  def travers_all_celltype # ãã­ãã¯å¼æ° { |celltype|  }
-    proc = Proc.new    # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°
+  #=== Namespace#すべてのセルタイプをたどる
+  def travers_all_celltype # ブロック引数 { |celltype|  }
+    proc = Proc.new    # このメソッドのブロック引数
     @celltype_list.each{ |ct|
       proc.call ct
@@ -1078,5 +1056,5 @@
   def gen_sh_func_tab f
 
-    # ã·ã°ããã£ãã£ã¹ã¯ãªãã¿ã®åºå
+    # シグニチャディスクリプタの出力
     f.printf TECSMsg.get(:SD_comment), "#_SD_#"
     f.print "struct tag_#{@global_name}_VDES {\n"
@@ -1084,5 +1062,5 @@
     f.print "};\n\n"
 
-    # ã·ã°ããã£é¢æ°ãã¼ãã«ã®åºå
+    # シグニチャ関数テーブルの出力
     f.printf TECSMsg.get(:SFT_comment), "#_SFT_#"
     f.print( "struct tag_#{@global_name}_VMT {\n" )
@@ -1099,5 +1077,5 @@
         len = items.length
       else
-        # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+        # ここで nil になるのは、引数なしの時に void がなかった場合
         items = []
         len = 0
@@ -1129,5 +1107,5 @@
   end
 
-  #=== Signature# é¢æ°ã® ID ã® define ãåºå
+  #=== Signature# 関数の ID の define を出力
   def gen_sh_func_id f
     f.print "/* function id */\n"
@@ -1148,5 +1126,5 @@
   def generate
 
-    if need_generate?    # ã»ã«ã®ãªãã»ã«ã¿ã¤ãã¯çæããªã
+    if need_generate?    # セルのないセルタイプは生成しない
 
       generate_private_header
@@ -1159,10 +1137,10 @@
       generate_makefile
 
-    elsif $generate_all_template   # ãã³ãã¬ã¼ãã³ã¼ãçæãªãã·ã§ã³
+    elsif $generate_all_template   # テンプレートコード生成オプション
 
       generate_template_code
       generate_inline_template_code
 
-      # generate_makefile_template ã¯ Makefile ã«è¿½è¨ãããã®ã ãããå¼ã³åºããªã
+      # generate_makefile_template は Makefile に追記するものだから、呼び出さない
 
     end
@@ -1171,5 +1149,5 @@
 
   def generate_post
-    return if ! need_generate?    # ã»ã«ã®ãªãã»ã«ã¿ã¤ãã¯çæããªã
+    return if ! need_generate?    # セルのないセルタイプは生成しない
 
     generate_private_header_post
@@ -1191,8 +1169,6 @@
     gen_ph_cell_cb_type f
     gen_ph_INIB_as_CB f
-    gen_ph_extern_cell f          # ã»ã«ã¿ã¤ãã°ã«ã³ã¼ãä»¥å¤ã¯åç
-§ããªã
-    gen_ph_typedef_idx f          # mikan åç
-§ãããã®ãã§ãã¦ããªã
+    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
+    gen_ph_typedef_idx f          # mikan 参照するものができていない
     gen_ph_ep_fun_prototype f
     end_extern_C f
@@ -1202,6 +1178,6 @@
 
     if @n_entry_port_inline == 0 then
-      # inline ããªããã° CB_TYPE_ONLY ã¨ãã
-      # inline ããã®å ´åããã£ãã define ãã¦ããã¦ãå¾ã§ãã¹ã¦ undef ãã
+      # inline がなければ CB_TYPE_ONLY とする
+      # inline ありの場合、いったん define しておいて、後ですべて undef する
       ifndef_cb_type_only f
     end
@@ -1229,13 +1205,10 @@
 #    gen_ph_cell_cb_type f
 #    gen_ph_INIB_as_CB f
-#    gen_ph_extern_cell f          # ã»ã«ã¿ã¤ãã°ã«ã³ã¼ãä»¥å¤ã¯åç
-§ããªã
-    # gen_ph_typedef_idx f          # mikan åç
-§ãããã®ãã§ãã¦ããªã
+#    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
+    # gen_ph_typedef_idx f          # mikan 参照するものができていない
 #    gen_ph_ep_fun_prototype f
     gen_ph_ep_skel_prototype f
 
-    #--- CB_TYPE_ONLY ã®å ´åãref_desc, set_desc é¢æ°ã¯å«ããªã (ãã¯ã­åç
-§ãããã)
+    #--- CB_TYPE_ONLY の場合、ref_desc, set_desc 関数は含めない (マクロ参照するため)
     if @n_entry_port_inline == 0 then
       ifndef_cb_type_only f
@@ -1249,5 +1222,5 @@
     endif_macro_only f
 
-    # ç­ç¸®å½¢ãªã©ã®ãã¯ã­åºå
+    # 短縮形などのマクロ出力
     if @n_entry_port_inline == 0 then
       ifndef_cb_type_only f
@@ -1261,6 +1234,6 @@
     gen_ph_test_optional_call_port_abbrev f
     gen_ph_ep_fun_macro f         if @n_entry_port > 0
-    gen_ph_foreach_cell f         # FOREACH ãã¯ã­ã®åºå
-    gen_ph_cb_initialize_macro f   # CB åæåãã¯ã­ã®åºåï¼æ¶è²»ããªãã®ã§ ram_initializer ãã©ã°ã«é¢ãããåºå
+    gen_ph_foreach_cell f         # FOREACH マクロの出力
+    gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力．消費しないので ram_initializer フラグに関わらず出力
     gen_ph_dealloc_code f, ""
     gen_ph_dealloc_code f, "_RESET"
@@ -1309,5 +1282,5 @@
         next if p.get_port_type != :CALL
 
-        # is_...joined ã¯ omit ããã±ã¼ã¹ã§ãåºåããããããomit ãæ¤æ»ããåã«åºå
+        # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
         if p.is_optional? then
           f.print( "#undef is_#{p.get_name}_joined\n" )
@@ -1353,5 +1326,5 @@
   end
 
-  #=== CELLTYPE_tecsgen.c ãçæ
+  #=== CELLTYPE_tecsgen.c を生成
   def generate_cell_code
     fs = { }
@@ -1388,5 +1361,5 @@
     end
 
-    # ãã¹ã¦ã® _tecsgen.c ã«åºå
+    # すべての _tecsgen.c に出力
     print_note f
     gen_cell_private_header f
@@ -1394,5 +1367,5 @@
     gen_cell_ep_des_type f
 
-    # ãã¹ã¦ã® _tecsgen.c ã«åºå
+    # すべての _tecsgen.c に出力
     fs.each{ |r,f2|
       if f == f2 then
@@ -1405,19 +1378,18 @@
     }
 
-    # ä¸ã¤ã® _tecsgen.c ã«åºå
+    # 一つの _tecsgen.c に出力
     gen_cell_skel_fun f
     gen_cell_fun_table f
     gen_cell_var_init f
 
-    # ã»ã«ãã¨ã« _tecsgen.c ã«åºå
+    # セルごとに _tecsgen.c に出力
     gen_cell_ep_vdes fs
     gen_cell_ep_vdes_array fs
-    gen_cell_cb_out_init fs         # INITIALIZE_CB ã§åç
-§ããããã ram_initializer=false ã§ãæ¶ããªã
+    gen_cell_cb_out_init fs         # INITIALIZE_CB で参照されるため ram_initializer=false でも消せない
     gen_cell_cb fs
     gen_cell_extern_mt fs
     gen_cell_ep_des fs
 
-    # ä¸ã¤ã® _tecsgen.c ã«åºå
+    # 一つの _tecsgen.c に出力
     gen_cell_cb_tab f
     if $ram_initializer then
@@ -1481,13 +1453,13 @@
 
   def gen_ph_include f
-    # ã©ã³ã¿ã¤ã ãããã® include
+    # ランタイムヘッダの include
 #    f.printf TECSMsg.get( :IRTH_comment), "#_IRTH_#"
 #    f.print "#include \"tecs.#{$h_suffix}\"\n\n"
 
-    # ã°ã­ã¼ãã«ãããã® include
+    # グローバルヘッダの include
     f.printf TECSMsg.get( :IGH_comment ), "#_IGH_#"
     f.print "#include \"global_tecsgen.#{$h_suffix}\"\n\n"
 
-    # ã·ã°ããã£ãããã® include
+    # シグニチャヘッダの include
     f.printf TECSMsg.get( :ISH_comment ), "#_ISH_#"
     @port.each { |p|
@@ -1507,7 +1479,6 @@
     end
 
-    # æé©åã®ããåç
-§ããã»ã«ã¿ã¤ãã® CB åã®å®ç¾©ãåè¾¼ã
-    # _CB_TYPE_ONLY ãå®ç¾©ããä¸ã§ include ãã
+    # 最適化のため参照するセルタイプの CB 型の定義を取込む
+    # _CB_TYPE_ONLY を定義した上で include する
     f.printf( TECSMsg.get( :ICT_comment ), "#_ICT_#" )
 
@@ -1522,5 +1493,5 @@
 
       if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+        # 最適化コード (optimize) # スケルトン不要など
         p2 = p.get_real_callee_port
         if p2 then
@@ -1531,5 +1502,5 @@
           end
         # else
-          # optional ã§æªçµå
+          # optional で未結合
         end
       end
@@ -1543,5 +1514,5 @@
 #      next if p.get_port_type != :CALL
 #      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-#        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+#        # 最適化コード (optimize) # スケルトン不要など
 #        p2 = p.get_real_callee_port
 #        ct = p2.get_celltype
@@ -1559,5 +1530,5 @@
     return if @singleton
 
-    # ID ã®åºæ°ããã³åæ°ã® define ãåºå
+    # ID の基数および個数の define を出力
     f.printf("#define %-20s %10s  /* %s #_NIDB_# */\n", "#{@global_name}_ID_BASE", "(#{@id_base})", TECSMsg.get(:NIDB_comment))
     f.printf("#define %-20s %10s  /* %s  #_NCEL_# */\n\n", "#{@global_name}_N_CELL", "(#{@n_cell_gen})", TECSMsg.get(:NCEL_comment))
@@ -1567,6 +1538,6 @@
     return if @singleton
 
-    # mikan  æé©å
-    # IDX æ­£å½æ§ãã§ãã¯ãã¯ã­ã®åºå
+    # mikan  最適化
+    # IDX 正当性チェックマクロの出力
     f.printf( TECSMsg.get( :CVI_comment ), "#_CVI_#" )
     if @idx_is_id_act then
@@ -1581,5 +1552,5 @@
     return if @singleton
 
-    # IDX æ­£å½æ§ãã§ãã¯ãã¯ã­ï¼ç­ç¸®å½¢ï¼ã®åºå
+    # IDX 正当性チェックマクロ（短縮形）の出力
     f.printf( TECSMsg.get( :CVIA_comment ), "#_CVIA_#")
     f.print("#define VALID_IDX(IDX)  #{@global_name}_VALID_IDX(IDX)\n\n")
@@ -1587,8 +1558,7 @@
   end
 
-  #=== å¼ã³å£é
-åã®å¤§ãããå¾ããã¯ã­ã®åºå
+  #=== 呼び口配列の大きさを得るマクロの出力
   #
-  #ã»ã«ã¿ã¤ããããã¸å¼ã³å£ã®åæ°ãåºå
+  #セルタイプヘッダへ呼び口の個数を出力
   def gen_ph_n_cp f
 
@@ -1604,10 +1574,8 @@
       end
 
-      if p.get_array_size != "[]" then       # åºå®é·é
-å
+      if p.get_array_size != "[]" then       # 固定長配列
         f.print( "#define N_CP_#{p.get_name}    (#{p.get_array_size})\n" )
         f.print( "#define NCP_#{p.get_name}     (#{p.get_array_size})\n" )
-      else                                   # å¯å¤é·é
-å
+      else                                   # 可変長配列
         if @singleton then
           if has_INIB? then
@@ -1618,5 +1586,5 @@
           f.print( "#define N_CP_#{p.get_name}  (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
           f.print( "#define NCP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
-          # mikan singleton ãªãã°ãåºå®é·åã§ãã
+          # mikan singleton ならば、固定長化できる
         else
           if has_CB? && has_INIB? then
@@ -1632,8 +1600,7 @@
   end
 
-  #=== åãå£é
-åã®å¤§ãããå¾ããã¯ã­ã®åºå
+  #=== 受け口配列の大きさを得るマクロの出力
   #
-  #ã»ã«ã¿ã¤ããããã¸åãå£ã®åæ°ãåºå
+  #セルタイプヘッダへ受け口の個数を出力
   def gen_ph_n_ep f
 
@@ -1641,6 +1608,5 @@
     @port.each { |p|
       next if p.get_port_type != :ENTRY
-      # next if p.is_omit?                       # åãå£é
-åã®åæ°ã¯çç¥ããªã
+      # next if p.is_omit?                       # 受け口配列の個数は省略しない
       next if p.get_array_size == nil
 
@@ -1650,9 +1616,7 @@
       end
 
-      if p.get_array_size != "[]" then       # åºå®é·é
-å
+      if p.get_array_size != "[]" then       # 固定長配列
         f.print( "#define NEP_#{p.get_name}     (#{p.get_array_size})\n" )
-      else                                   # å¯å¤é·é
-å
+      else                                   # 可変長配列
         if @singleton then
           if has_INIB? then
@@ -1662,5 +1626,5 @@
           end
           f.print( "#define NEP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
-          # mikan singleton ãªãã°ãåºå®é·åã§ãã
+          # mikan singleton ならば、固定長化できる
         else
           if has_CB? && has_INIB? then
@@ -1675,5 +1639,5 @@
   end
 
-  #=== optional ãªå¼ã³å£ãçµåããã¦ããããã¹ãããã³ã¼ãã®çæ
+  #=== optional な呼び口が結合されているかテストするコードの生成
   def gen_ph_test_optional_call_port f
     b_comment = false
@@ -1696,5 +1660,5 @@
       next if p.get_port_type != :CALL
       next if ! p.is_optional?
-      # next if p.is_omit?  # omit ã§ã test ã³ã¼ãã¯çæãã
+      # next if p.is_omit?  # omit でも test コードは生成する
 
       if b_comment == false then
@@ -1720,7 +1684,6 @@
       end
 
-      # é¢æ°åã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãã VMT ã®é¢æ°åãæé©åï¼åãå£é¢æ° or åãå£ãã£ã¹ã¯ãªãã¿)
-      # mikan  å
-¨é¨ã¤ãªãã£ã¦ãããã©ããã§ (1) ãå¤å®ãã
+      # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
+      # mikan  全部つながっているかどうかで (1) を判定する
       if ! p.is_VMT_useless? then
         if p.is_dynamic? then
@@ -1734,5 +1697,5 @@
         end
 
-        # æ¨æºã³ã¼ã
+        # 標準コード
         if p.get_array_size == nil then
           if @singleton then
@@ -1742,6 +1705,5 @@
           end
         else
-          # é
-åã®å ´å
+          # 配列の場合
           if @singleton then
             f.print( "\t  ((#{@global_name}_SINGLE_CELL_#{inib_tmp}.#{p.get_name}!=0) \\\n" )
@@ -1753,18 +1715,17 @@
         end
       else
-        # æé©åã³ã¼ã (optimize) # VMT ä¸è¦ï¼é
-åè¦ç´ ãã¹ã¦åãï¼
+        # 最適化コード (optimize) # VMT 不要（配列要素すべて同じ）
         p2 = p.get_real_callee_port
         if p2 then
           ct = p2.get_celltype
           if p.is_skelton_useless? then
-            # åãå£é¢æ°ãç´æ¥å¼åºã
+            # 受け口関数を直接呼出す
             f.print( "\t  (1)\n" )
           else
-            # åãå£ã¹ã±ã«ãã³é¢æ°ãç´æ¥å¼åºã
+            # 受け口スケルトン関数を直接呼出す
             f.print( "\t  (1)\n" )
           end
         else
-          # optional ã§æªçµå
+          # optional で未結合
           f.print( "\t  (0)    /* not joined */\n" )
         end
@@ -1773,5 +1734,5 @@
   end
 
-  #=== optional ãªå¼ã³å£ãçµåããã¦ããããã¹ãããã³ã¼ãã®çæï¼ç­ç¸®å½¢ï¼
+  #=== optional な呼び口が結合されているかテストするコードの生成（短縮形）
   def gen_ph_test_optional_call_port_abbrev f
     b_comment = false
@@ -1780,5 +1741,5 @@
       next if p.get_port_type != :CALL
       next if ! p.is_optional?
-      # next if p.is_omit?  # omit ã§ã test ã³ã¼ãã¯çæãã
+      # next if p.is_omit?  # omit でも test コードは生成する
 
       if b_comment == false then
@@ -1805,11 +1766,11 @@
   end
 
-  #=== CELLCB ã¸ã®ãã¤ã³ã¿ãå¾ããã¯ã­ãåºå
-  #   ã»ã«ã¿ã¤ããããã¸åºå
+  #=== CELLCB へのポインタを得るマクロを出力
+  #   セルタイプヘッダへ出力
   def gen_ph_get_cellcb f
     f.printf( TECSMsg.get( :GCB_comment ), "#_GCB_#" )
     if ( ! has_CB? && ! has_INIB? ) || @singleton then
       f.print( "#define #{@global_name}_GET_CELLCB(idx) ((void *)0)\n" )
-    elsif @idx_is_id_act then   # mikan åä¸ã®ã»ã«ã®å ´åã®æé©å, idx_is_id ã§ãªãå ´å
+    elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
       f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_ptab[(idx) - #{@global_name}_ID_BASE])\n" )
     else
@@ -1818,6 +1779,6 @@
   end
 
-  #=== CELLCB ã¸ã®ãã¤ã³ã¿ãå¾ããã¯ã­ï¼ç­ç¸®å½¢ï¼ãåºå
-  #  ã»ã«ã¿ã¤ããããã¸åºå
+  #=== CELLCB へのポインタを得るマクロ（短縮形）を出力
+  #  セルタイプヘッダへ出力
   def gen_ph_get_cellcb_abbrev f
     f.printf( TECSMsg.get( :GCBA_comment ), "#_GCBA_#" )
@@ -1835,6 +1796,6 @@
   end
 
-  #===  attribute, var ãã¢ã¯ã»ã¹ãããã¯ã­ãåºå
-  #    ã»ã«ã¿ã¤ããããã¸åºå
+  #===  attribute, var をアクセスするマクロを出力
+  #    セルタイプヘッダへ出力
   def gen_ph_attr_access f
     if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
@@ -1846,5 +1807,5 @@
       next if a.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
@@ -1856,5 +1817,5 @@
         f.printf( "%-20s", "#{@global_name}_ATTR_#{a.get_name}" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         if ! a.is_rw? && has_CB? && has_INIB? then
@@ -1887,10 +1848,10 @@
       end
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}()" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}(p_that)" )
@@ -1903,5 +1864,5 @@
           f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(val)" )
           f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name} = (val))\n" )
-          # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+          # mikan ここでは cell ではなく celltype の名前
         else
           f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(p_that,val)" )
@@ -1935,10 +1896,10 @@
       end
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{v.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}(p_that)" )
@@ -1951,10 +1912,10 @@
       next if v.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}()" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}(p_that)" )
@@ -1966,5 +1927,5 @@
         f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(val)" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name}=(val))\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(p_that,val)" )
@@ -1976,5 +1937,5 @@
   end
 
-  #===  attribute/var ã¢ã¯ã»ã¹ãã¯ã­ï¼ç­ç¸®å½¢ï¼ã³ã¼ãã®çæ
+  #===  attribute/var アクセスマクロ（短縮形）コードの生成
   def gen_ph_attr_access_abbrev f
     if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
@@ -1985,5 +1946,5 @@
       next if a.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       f.printf( "%-20s", "ATTR_#{a.get_name}" )
@@ -2003,5 +1964,5 @@
       next if v.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       f.printf( "%-20s", "VAR_#{v.get_name}" )
@@ -2072,9 +2033,9 @@
         delim = ""
 
-        # é¢æ°åã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãã VMT ã®é¢æ°åãæé©åï¼åãå£é¢æ° or åãå£ãã£ã¹ã¯ãªãã¿)
+        # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
         if b_flow then
           f.print( "\t  (p_that)->#{p.get_name}#{subsc}.#{fun.get_name}__T( \\\n" )
         elsif ! p.is_VMT_useless? then
-          # æ¨æºã³ã¼ã
+          # 標準コード
           if @singleton then
             f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}" )
@@ -2084,18 +2045,18 @@
           f.print( "#{subsc}->VMT->#{fun.get_name}__T( \\\n" )
         else
-          # æé©åã³ã¼ã (optimize) # VMT ä¸è¦
+          # 最適化コード (optimize) # VMT 不要
           p2 = p.get_real_callee_port
           if p2 then
             ct = p2.get_celltype
             if p.is_skelton_useless? then
-              # åãå£é¢æ°ãç´æ¥å¼åºã
+              # 受け口関数を直接呼出す
               f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}( \\\n" )
             else
-              # åãå£ã¹ã±ã«ãã³é¢æ°ãç´æ¥å¼åºã
+              # 受け口スケルトン関数を直接呼出す
               f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}_skel( \\\n" )
               # print "skelton: #{@name} #{ct.get_global_name}_#{p2.get_name}\n"
             end
           else
-            # optional ã§æªçµå
+            # optional で未結合
             f.print( "\t  ((#{fun.get_declarator.get_type.get_type.get_type_str} (*)()" )
             f.print( "#{fun.get_declarator.get_type.get_type.get_type_str_post})0)()\n" )
@@ -2107,11 +2068,10 @@
         end
 
-        b_join = true    # optional ã§çµåãã¦ããªãå ´å false
-
-        # åãå£æ
-å ±ã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãæé©åï¼IDX ãªã©)
+        b_join = true    # optional で結合していない場合 false
+
+        # 受け口情報の出力(標準：受け口ディスクリプタ、最適化：IDX など)
         if b_flow then
         elsif ! p.is_skelton_useless? && ! p.is_cell_unique? then
-          # æ¨æºã³ã¼ã
+          # 標準コード
           if @singleton then
             f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}#{subsc}" )
@@ -2122,10 +2082,9 @@
           end
         else
-          # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦
-          c2 = p.get_real_callee_cell               # å¯ä¸ã®ã»ã«(ã§ãªãå ´åããããè¤æ°ã»ã«ãããå ´å)
-          p2 = p.get_real_callee_port               # å¯ä¸ã®ãã¼ã(ã§ãªãå ´åã¯ããªã)
+          # 最適化コード (optimize) # スケルトン不要
+          c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
+          p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
           if p2 then
-            ct = p2.get_celltype                    # å¼ã³å
-ã®ã»ã«ã¿ã¤ã
+            ct = p2.get_celltype                    # 呼び先のセルタイプ
             if ! ct.is_singleton? then
               if ct.has_CB? || ct.has_INIB? then
@@ -2134,6 +2093,6 @@
                   f.print( "\t   #{name_array[7]}" )
                 else
-                  # CELLCB IDX ãæ¸¡ã (æ¨æºã³ã¼ãã¨åãã ããæ±ãåã¯ç°ãªã)
-                  # p.is_skelton_useless? == true/false ã¨ãã«åã
+                  # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
+                  # p.is_skelton_useless? == true/false ともに同じ
                   f.print( "\t   (p_that)#{inib}->#{p.get_name}#{subsc}" )
                 end
@@ -2146,5 +2105,5 @@
             end
           else
-            # optional ã§æªçµå
+            # optional で未結合
             b_join = false
           end
@@ -2163,6 +2122,5 @@
   end
 
-  #=== ref_desc æå®ãããå¼ã³å£ã«å¯¾ãããã£ã¹ã¯ãªãã¿åç
-§é¢æ°ã®çæ
+  #=== ref_desc 指定された呼び口に対するディスクリプタ参照関数の生成
   def gen_ph_ref_desc_func f
     if @n_call_port_ref_desc >0 then
@@ -2219,5 +2177,5 @@
   end
 
-  #=== dynamic æå®ãããå¼ã³å£ã«å¯¾ãããã£ã¹ã¯ãªãã¿è¨­å®é¢æ°ã®çæ
+  #=== dynamic 指定された呼び口に対するディスクリプタ設定関数の生成
   def gen_ph_set_desc_func f
     if @n_call_port_dynamic >0 then
@@ -2291,7 +2249,7 @@
   end
 
-  #=== send/receive ã§åãåã£ãã¡ã¢ãªé åã dealloc ãããã¯ã­ã³ã¼ã
+  #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
   #f:: File
-  #b_undef:: bool : true = #undef ã³ã¼ãã®çæ,  false = #define ã³ã¼ãã®çæ
+  #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
   def  gen_ph_dealloc_code( f, append_name, b_undef = false )
     b_msg = false
@@ -2300,5 +2258,5 @@
 
       p.each_param{ |port, fd, par|
-        case par.get_direction                        # å¼æ°ã®æ¹åæå®å­ (in, out, inout, send, receive )
+        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
         when :SEND
           # next if port.get_port_type == :CALL
@@ -2317,5 +2275,5 @@
         end
 
-        #                      ãã¼ãå         é¢æ°å         ãã©ã¡ã¼ã¿å
+        #                      ポート名         関数名         パラメータ名
         dealloc_func_name = "#{port.get_name}_#{fd.get_name}_#{par.get_name}_dealloc"
         dealloc_macro_name = dealloc_func_name.upcase
@@ -2356,5 +2314,5 @@
     @port.each { |p|
       next if p.get_port_type != :CALL
-      # next if p.is_omit?  å¼ã³åºãã¨ã¨ã©ã¼ãèµ·ããã³ã¼ããçæ
+      # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
 
       p.get_signature.get_function_head_array.each{ |fun|
@@ -2531,5 +2489,5 @@
         f.print( "struct tag_#{@global_name}_CB *" )
       elsif has_INIB? then
-        # f.print( "struct tag_#{@global_name}_INIB *" )  # const ãåºåãã¦ããªã
+        # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
         f.print( "const struct tag_#{@global_name}_INIB *" )
       else
@@ -2567,5 +2525,5 @@
 
         if p.get_array_size then
-          f.print( "#{delim} int_t subscript" )     # mikan singleton æã® ',' ã®å§æ«
+          f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
           delim = ","
         end
@@ -2575,5 +2533,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2596,5 +2554,5 @@
 
   def gen_ph_ep_skel_prototype f
-    # åãå£ã¹ã±ã«ãã³é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ãåºå
+    # 受け口スケルトン関数のプロトタイプ宣言を出力
     if @n_entry_port >0 then
       f.printf( TECSMsg.get( :EPSP_comment ), "#_EPSP_#" )
@@ -2603,6 +2561,6 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # åãå£æé©å
-      if p.is_skelton_useless? then    # åãå£æé©å
+#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
+      if p.is_skelton_useless? then    # 受け口最適化
 #        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
         next
@@ -2623,5 +2581,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2646,5 +2604,5 @@
 
     if ( $rom )then
-      # å®æ°é¨ã¯ ROM, å¤æ°é¨ã¯ RAM
+      # 定数部は ROM, 変数部は RAM
 
       if has_INIB? then
@@ -2680,6 +2638,5 @@
 
     else
-      # å
-¨ã¦ RAM
+      # 全て RAM
       f.printf( TECSMsg.get( :CCTPO_comment ), "#_CCTPO_#" )
 
@@ -2695,6 +2652,6 @@
 
 
-  #===   attribute ã®åå®£è¨åºå
-  #inib_cb::  :INIB ã¾ãã¯ :CB
+  #===   attribute の型宣言出力
+  #inib_cb::  :INIB または :CB
   def gen_cell_cb_type_attribute( f, inib_cb )
     if inib_cb == :INIB && @n_attribute_ro > 0 then
@@ -2729,5 +2686,5 @@
       next if v.is_omit?
       next if v.get_size_is == nil
-      next if $rom && inib_cb == :CB      # size_is æå®ããããã®ã¯ INIB ã«ã®ã¿åºåãã
+      next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
 
       f.print "    "
@@ -2738,5 +2695,5 @@
 
   def gen_cell_cb_type_var f
-    # å¤æ°ã®åºå
+    # 変数の出力
     if @n_var > 0 then
       f.print "    /* var #_VA_# */ \n"
@@ -2746,5 +2703,5 @@
 
       next if v.is_omit?
-      next if v.get_size_is != nil    # size_is æå®ããã var ã¯ attribute ã¸åºåãã
+      next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
 
       f.print "    "
@@ -2760,5 +2717,5 @@
 
   def gen_cell_cb_type_call_port( f, inib_cb )
-    # å¼ã³å£
+    # 呼び口
     if @n_call_port >0 then
       f.print "    /* call port #_TCP_# */\n"
@@ -2785,5 +2742,5 @@
 
         if ! p.is_skelton_useless? then
-          # æ¨æºå½¢
+          # 標準形
           if inib_cb == :INIB && p.is_dynamic? && p.get_array_size != nil && $ram_initializer then
             f.print( "    struct tag_#{p.get_signature.get_global_name}_VDES #{ptr}#{const2}*#{p.get_name;}_init_;\n" )
@@ -2795,13 +2752,11 @@
           end
         else
-          # æé©å skelton é¢æ°ãå¼åºããªã(åãå£é¢æ°ãç´æ¥å¼åºã)
-          # å¼ã³å
-ã»ã«ã¿ã¤ãã® CB ã® IDX å
+          # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
+          # 呼び先セルタイプの CB の IDX 型
           if p.get_real_callee_cell then
             f.print( "    " )
             p.get_real_callee_cell.get_celltype.gen_ph_idx_type f
             f.print( " #{ptr}#{p.get_name;};\n" )
-            # ç¸äºåç
-§ã«åãã¦ãtypedef ããåãä½¿ããªã
+            # 相互参照に備えて、typedef した型を使わない
             # f.print( "    #{p.get_real_callee_cell.get_celltype.get_global_name}_IDX #{ptr}#{p.get_name;};\n" )
             if p.get_array_size == "[]" then
@@ -2809,17 +2764,16 @@
             end
           #else
-          #  optional ã§æªçµå
+          #  optional で未結合
           end
         end
       # else
-        # æé©å ä¸ã¤ããã»ã«ããªãå ´åãåãå£ãã£ã¹ã¯ãªãã¿ã¾ãã¯åãå´ã® IDX ã¯å¼ã³å£é¢æ°ãã¯ã­ã«åãè¾¼ã¾ãã
-      end
-    }
-  end
-
-  #=== Celltype#åãå£é
-åæ·»æ°ãè¨æ¶ããå¤æ°ã®å®ç¾©
+        # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
+      end
+    }
+  end
+
+  #=== Celltype#受け口配列添数を記憶する変数の定義
   def gen_cell_cb_type_entry_port( f, inib_cb )
-    # å¼ã³å£
+    # 呼び口
     if @n_entry_port >0 then
       f.print "    /* call port #_NEP_# */ \n"
@@ -2827,6 +2781,5 @@
 
     @port.each{ |p|
-      # next if p.is_omit?                       # åãå£é
-åã®åæ°ã¯çç¥ããªã
+      # next if p.is_omit?                       # 受け口配列の個数は省略しない
       if p.get_port_type == :ENTRY && p.get_array_size == "[]"
         f.print( "    int_t n_#{p.get_name};\n" )
@@ -2850,5 +2803,5 @@
         f.print "extern #{@global_name}_CB  *const #{@global_name}_CB_ptab[];\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array c
             f.print "extern #{@global_name}_CB  #{name_array[4]};\n"
@@ -2858,5 +2811,5 @@
         f.print "extern #{@global_name}_INIB  *const #{@global_name}_INIB_ptab[];\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array c
             f.print "extern #{@global_name}_INIB  #{name_array[11]};\n"
@@ -2875,5 +2828,5 @@
 
   def gen_ph_INIB_as_CB f
-    # ããã¯ãææãã§ãããæ¬æ¥ãªã INIB ãåºåãã¹ã
+    # ここは、手抜きである。本来なら INIB を出力すべき
     if ! has_CB? && has_INIB? then
       f.printf( TECSMsg.get( :DCI_comment ),  "#_DCI_#" )
@@ -2892,6 +2845,6 @@
   end
 
-  #===  ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ
-  #      singleton ã§ã¯åºåããªã
+  #===  イテレータコード (FOREACH_CELL)の生成
+  #      singleton では出力しない
   def gen_ph_foreach_cell f
 
@@ -2936,5 +2889,5 @@
 
 
-  #===  å¤æ°varåæåã³ã¼ã
+  #===  変数var初期化コード
   #
   def gen_ph_cb_initialize_macro f
@@ -2947,7 +2900,7 @@
         type = v.get_type
         if( type.kind_of? PtrType )then
-          # PtrType ã¯ ArrayType ã«ããæ¿ãã
-
-          # åæåå­ã®è¦ç´ æ°ã¨ãã (å¾ã¯ 0 ã§ãã)
+          # PtrType は ArrayType にすり替える
+
+          # 初期化子の要素数とする (後は 0 である)
           t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
           t2.set_type( type.get_type )
@@ -3005,5 +2958,5 @@
       }
 
-      # dynamic call port ã®åæåã³ã¼ã
+      # dynamic call port の初期化コード
       b_dyn_port = false
       @port.each{ |p|
@@ -3061,5 +3014,5 @@
 
     # else
-    #   ã»ã«ãä¸ã¤ããªããã°åºåããªã
+    #   セルが一つもなければ出力しない
     end
 
@@ -3068,5 +3021,5 @@
 
   def gen_ph_inline f
-    # inline ãã¼ããä¸ã¤ã§ãããã°ãinline.h ã® include
+    # inline ポートが一つでもあれば、inline.h の include
     if @n_entry_port_inline > 0 then
       f.printf( TECSMsg.get( :INL_comment ), "#_INL_#" )
@@ -3120,5 +3073,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_skelton_useless?    # åãå£æé©å
+      if p.is_skelton_useless?    # 受け口最適化
         f.print( "/* #{p.get_name} : omitted by entry port optimize */\n\n" )
         next
@@ -3131,5 +3084,5 @@
         f.print( "    #{@name}_IDX  idx;\n" )
       else
-        # CB ã INIB ãå­å¨ããªã (ã®ã§ãidx ã¨ãã¦æ´æ°ã§åæåãã¦ãã)
+        # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
         f.print( "    int           idx;\n" )
       end
@@ -3149,5 +3102,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_skelton_useless? then    # åãå£æé©å
+      if p.is_skelton_useless? then    # 受け口最適化
         f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
         next
@@ -3168,5 +3121,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -3190,5 +3143,5 @@
         end
 
-        if functype.get_type_str == "void" then # mikan "void" ã® typedef ã«æªå¯¾å¿
+        if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
           f.print "    "
         else
@@ -3233,5 +3186,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_VMT_useless? then    # åãå£æé©å
+      if p.is_VMT_useless? then    # 受け口最適化
         f.print "/* #{p.get_name} : omitted by entry port optimize */\n"
         next
@@ -3259,36 +3212,31 @@
     end
 
-    # ãã®ã»ã«ã¿ã¤ãã®ãã¹ã¦ã®ã»ã«ã«ã¤ãã¦
+    # このセルタイプのすべてのセルについて
     @ordered_cell_list.each{ |c|
-      if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+      if c.is_generate? then                           # 生成対象か？
 
         f = fs[ c.get_region.get_domain_root ]
 
-        # çµåã®ãªã¹ã (NamedList)
+        # 結合のリスト (NamedList)
         jl = c.get_join_list
 
-        # å
-¨ã¦ã®çµåãªã¹ãã«ã¤ãã¦
+        # 全ての結合リストについて
         jl.get_items.each{ |j|
 
-          # å·¦è¾ºã®å®ç¾©ãå¾ã
+          # 左辺の定義を得る
           definition = j.get_definition
 
-          # å¼ã³å£ã§ã¯ãªãï¼ãï¼å±æ§ï¼
+          # 呼び口ではない？　（属性）
           next unless definition.instance_of? Port
 
-          port = find j.get_name # celltype ã® Port (ãã¡ãã«æé©åæ
-å ±ããã)
-          # port = definition    # definition ã¯ composite ã® Port ãå¾ããããã¨ããã
+          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
+          # port = definition    # definition は composite の Port が得られることがある
           next if port.is_cell_unique?
           next if port.is_omit?
 
-          # é
-åè¦ç´ ãå¾ãï¼åãå£é
-åã§ãªããã° nil ãè¿ãï¼
+          # 配列要素を得る（受け口配列でなければ nil が返る）
           am = j.get_array_member2
 
-          # å¼ã³å£é
-åã?
+          # 呼び口配列か?
           if am  then
             i = 0
@@ -3297,5 +3245,5 @@
               if j then
                 if am[i].get_rhs_cell.get_celltype == self then
-                  # åãã»ã«ã¿ã¤ãã¸çµåãã¦ããå ´å(VDES ã§ã¯ type conflict ã«ãªã)
+                  # 同じセルタイプへ結合している場合(VDES では type conflict になる)
                   p = am[i].get_rhs_port
                   des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
@@ -3304,10 +3252,8 @@
                 end
 
-                # å³è¾ºã¯åãå£é
-åãï¼
+                # 右辺は受け口配列か？
                 if j.get_rhs_subscript then
 
-                  # åãå£ã®é
-åæ·»æ°
+                  # 受け口の配列添数
                   subscript = j.get_rhs_subscript
 
@@ -3322,6 +3268,5 @@
                 end
               #else if j == nil
-              #  optioanl ã§é
-åè¦ç´ ãåæåããã¦ããªã
+              #  optioanl で配列要素が初期化されていない
               end
               i += 1
@@ -3330,5 +3275,5 @@
             dbgPrint "me=#{@name} callee=#{j.get_rhs_cell.get_celltype.get_name} #{j.get_cell.get_celltype.get_name} \n"
             if j.get_rhs_cell.get_celltype == self then
-              # åãã»ã«ã¿ã¤ãã¸çµåãã¦ããå ´å(VDES ã§ã¯ type conflict ã«ãªã)
+              # 同じセルタイプへ結合している場合(VDES では type conflict になる)
               p = j.get_rhs_port
               des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
@@ -3338,6 +3283,5 @@
 
             if j.get_rhs_subscript then
-              # åãå£é
-å
+              # 受け口配列
               subscript = j.get_rhs_subscript
               f.printf( "extern %s %s%d;\n",
@@ -3351,6 +3295,5 @@
             end
           end
-          # mikan   cell ã® namespace æªå¯¾å¿ãJoin ã§ Cell ãªãã¸ã§ã¯ããå¼å½ã¦ããå¿
-è¦ãã
+          # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
         }
 
@@ -3362,6 +3305,5 @@
   def gen_cell_ep_vdes_array fs
     if @n_cell_gen >0 then
-      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan å¼ã³å£é
-åãç¡ãå ´åãåºã¦ãã¾ã
+      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口配列が無い場合も出てしまう
     end
 
@@ -3371,5 +3313,5 @@
 
         jl = c.get_join_list
-        # ã«ã¼ããåãå¤æ°ã jl ãã @port ã«å¤æ´
+        # ループを回す変数を jl から @port に変更
         # dynamic, optional 
 #        jl.get_items.each{ |j|
@@ -3382,7 +3324,6 @@
           j = jl.get_item( port.get_name )
 
-          # port = definition    # definition ã¯ composite ã® Port ãå¾ããããã¨ããã
-          # port = find j.get_name # celltype ã® Port (ãã¡ãã«æé©åæ
-å ±ããã)
+          # port = definition    # definition は composite の Port が得られることがある
+          # port = find j.get_name # celltype の Port (こちらに最適化情報がある)
           next if port.is_cell_unique?
           next if port.is_omit?
@@ -3405,6 +3346,5 @@
           if b_array  then
 #          if am then
-            # å·¦è¾ºã¯é
-å
+            # 左辺は配列
             const = ( port.is_dynamic? && ! $ram_initializer ) ? '' : 'const '
             init = ( port.is_dynamic? && $ram_initializer ) ? '_init_' : ''
@@ -3417,10 +3357,8 @@
             else
 
-#              ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©åã®å ´åããã®é
-åã¯åç
-§ãããªã
-              # mikan ãã®ã±ã¼ã¹ããã¹ãããã¦ããªã
+#              スケルトン関数不要最適化の場合、この配列は参照されない
+              # mikan このケースがテストされていない
               f.printf( "#{const}%s_IDX  %s_%s[] = {\n",
-#                        "#{j.get_celltype.get_global_name}",   # å³è¾º composite ã«å¯¾å¿ã§ããªã
+#                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
                         "#{j.get_rhs_cell.get_celltype.get_global_name}",
                         "#{c.get_global_name}",
@@ -3444,6 +3382,5 @@
 
               if j then
-                # åä¸ã»ã«ã¿ã¤ãã®çµåã®å ´åãVDES åã¸ã®ã­ã£ã¹ããå¿
-è¦
+                # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
                 if j.get_rhs_cell.get_celltype == self then
                   definition = j.get_definition
@@ -3455,6 +3392,5 @@
                 
                 if j.get_rhs_subscript then
-                  # å³è¾ºé
-åã®å ´å(æé©åã¯ãªã)
+                  # 右辺配列の場合(最適化はない)
                   subscript = j.get_rhs_subscript
                   f.printf( "    %s%d,\n",
@@ -3465,6 +3401,5 @@
 
                 else
-                  # å³è¾ºéé
-åã®å ´å */
+                  # 右辺非配列の場合 */
                   if ! port.is_skelton_useless? then
                     f.printf( "    %s,\n",
@@ -3477,15 +3412,12 @@
                 end
               else
-                # optional ã§å¼ã³å£é
-åè¦ç´ ãåæåããã¦ããªã
+                # optional で呼び口配列要素が初期化されていない
                 f.printf( "    0,\n" )
               end
             # }
             end
-            # mikan   cell ã® namespace æªå¯¾å¿ãJoin ã§ Cell ãªãã¸ã§ã¯ããå¼å½ã¦ããå¿
-è¦ãã
+            # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
             f.print "};\n"
-            # dynamic ã®å¼ã³å£é
-å
+            # dynamic の呼び口配列
             if port.is_dynamic? && $ram_initializer then
               f.printf( "struct %s * %s_%s[ #{length} ];\n",
@@ -3502,5 +3434,5 @@
   end
 
-  #=== CB ãåæåãããã­ã°ã©ã ã®çæ
+  #=== CB を初期化するプログラムの生成
   def gen_cell_cb_initialize_code f
     if ! need_CB_initializer?
@@ -3534,8 +3466,8 @@
   end
 
-  # === CB/INIB ã®å¤ã§åæåãããå¤æ°ã®åºå
+  # === CB/INIB の外で初期化される変数の出力
   def gen_cell_cb_out_init fs
 
-    # ã»ã«ããªããã°ãåºåããªã
+    # セルがなければ、出力しない
     if @n_cell_gen == 0 then
       return
@@ -3544,7 +3476,5 @@
     fs.each{ |r, f| f.printf( TECSMsg.get( :AVAI_comment ), "#_AVAI_#" ) }
 
-    # attribute, var ã®ãã¤ã³ã¿åã®åç
-§ããé
-åãçæ
+    # attribute, var のポインタ型の参照する配列を生成
     @ordered_cell_list.each{ |c|
       next if  ! c.is_generate?
@@ -3556,7 +3486,5 @@
       jl = c.get_join_list
 
-      # attribute, var ã®ãã¤ã³ã¿å¤æ°ãé
-åã«ããåæåãããå ´åã®ãé
-åãåºå
+      # attribute, var のポインタ変数が配列により初期化される場合の、配列を出力
       av_list = ct.get_attribute_list + ct.get_var_list
       if av_list.length != 0 then
@@ -3574,9 +3502,7 @@
 
             if size then
-              # å¼ãè©ä¾¡ãã(attribute, var ã«å«ã¾ããå¤æ°ãåç
-§å¯è½)
+              # 式を評価する(attribute, var に含まれる変数を参照可能)
               sz = size.eval_const( c.get_join_list, c.get_celltype.get_name_list )
-              # å¼ãçæããªãã (å¤æ°ãå«ã¾ãªãå½¢ã«ãã)  ä¸å®å
-¨ãªå½¢ã§ Token ãçæ (ã¨ã©ã¼çºçããªããã)
+              # 式を生成しなおす (変数を含まない形にする)  不完全な形で Token を生成 (エラー発生しないから)
               size = Expression.new( [:INTEGER_CONSTANT, Token.new(sz, nil, 0, 0)] )
               array_type = ArrayType.new( size )
@@ -3592,5 +3518,5 @@
 								# name_array[3]: cell_CB_INIT
               if !( $ram_initializer && a.get_kind == :VAR ) then
-                # -R (ram initializer ä½¿ç¨) ã®å ´å var ã¯åæåã³ã¼ããåºåããªã
+                # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
                 if( init )then
                   str = " = #{gen_cell_cb_init( f, c, name_array, array_type, init, a.get_identifier, 1, true )}"
@@ -3610,7 +3536,7 @@
   end
 
-  #=== var ã®åæå¤ã® ROM é¨ã¸ã®
+  #=== var の初期値の ROM 部への
   def gen_cell_var_init f
-    # var ã®{ }ã§å²ã¾ããåæå¤æå®ããããèª¿ã¹ã
+    # var の{ }で囲まれた初期値指定があるか調べる
     n_init = 0
     @var.each { |v|
@@ -3630,7 +3556,7 @@
 
           if( org_type.kind_of? PtrType )then
-            # PtrType ã¯ ArrayType ã«ããæ¿ãã
-
-            # åæåå­ã®è¦ç´ æ°ã ãã¨ããï¼å¾ã¯ 0)
+            # PtrType は ArrayType にすり替える
+
+            # 初期化子の要素数だけとする（後は 0)
             t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
             t2.set_type( type.get_type )
@@ -3639,16 +3565,15 @@
           end
 
-          c = @ordered_cell_list[0]   # ä»®ã® cell (å®éã«ã¯ä½¿ãããªã)
+          c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
           name_array = get_name_array( c )
           # f.print "const #{type0.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type0.get_type_str_post} = "
           f.print "const #{type.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type.get_type_str_post} = "
           if org_type.kind_of? StructType then
-            # celltype ã® default ã®åæå¤ãã
+            # celltype の default の初期値あり
             str = gen_cell_cb_init( f, c, name_array, type, init, v.get_identifier, 1, true )
           elsif( org_type.kind_of?( PtrType ) || org_type.kind_of?( ArrayType ) ) then
             str = "{ "
             type = org_type.get_type
-            # mikan ãã¤ã³ã¿ã§ã¯ãªããé
-ååã¨ããªãã¨ããã¤ã³ã¿å¤æ°ã®é åã®åãæãã
+            # mikan ポインタではなく、配列型としないと、ポインタ変数の領域の分、損する
             init.each { |i|
               str += gen_cell_cb_init( f, c, name_array, type, i, v.get_identifier, 1, true )
@@ -3707,5 +3632,5 @@
 
         unless @singleton then
-          # 1 ã¤ã® cell INIB ã®çµãã
+          # 1 つの cell INIB の終わり
           if @b_need_ptab then
             f.print( "};\n\n" )
@@ -3725,5 +3650,5 @@
       end
 
-      # RAM initializer ãä½¿ç¨ããªããã¾ãã¯ ROM åããªã
+      # RAM initializer を使用しない、または ROM 化しない
       if $ram_initializer == false || $rom == false then
         if @singleton then
@@ -3772,5 +3697,5 @@
 
           unless @singleton then
-            # 1 ã¤ã® cell CB ã®çµãã
+            # 1 つの cell CB の終わり
             if @b_need_ptab then
               f.print( "};\n\n" )
@@ -3810,5 +3735,5 @@
         f.print "/* ID to INIB table #_INTAB_# */\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # çæå¯¾è±¡ãã¤ãã«ã¼ãä»¥å¤ã
+          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3819,5 +3744,5 @@
         f.print "#{@global_name}_INIB *const #{@global_name}_INIB_ptab[] ={\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3830,5 +3755,5 @@
         f.print "/* ID to CB table #_CBTAB_# */\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # çæå¯¾è±¡ãã¤ãã«ã¼ãä»¥å¤ã
+          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3839,5 +3764,5 @@
         f.print "#{@global_name}_CB *const #{@global_name}_CB_ptab[] ={\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3851,15 +3776,12 @@
 
 
-  #=== name_array ãçæ
+  #=== name_array を生成
   # IN:   cell  : Cell
-  #       index : CB, INIB é
-åã®æ·»æ°
+  #       index : CB, INIB 配列の添数
   # RETURN: name_array
   #   name_array[0] = @name           # celltype name
   #   name_array[1] = cell.get_name   # cell name
   #   name_array[2] = cell_CB_name    # cell_CB_name
-  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB ã®å¤å´ã§åæåãå¿
-è¦ãªé
-åã®åå
+  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化が必要な配列の名前
   #   name_array[4] = cell_CB_proto   # CB name for prototype
   #   name_array[5] = cell_INIB       # INIB name
@@ -3903,5 +3825,5 @@
       cell_CBP = "&#{cell_INIB_name}"
     else
-      cell_CBP = "NULL"    # CB ã INIB ããªããã° NULL ã«ç½®æ
+      cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
     end
 
@@ -3929,8 +3851,7 @@
   end
 
-  #=== attribute ã¨ size_is æå®ããã var (ãã¤ã³ã¿)ã®åæåãã¼ã¿ãåºå
+  #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
   #
-  # ROM åãµãã¼ãã®æç¡ãããã³åºåå¯¾è±¡ã CB ã INIB ãã«ããåºåãããå
-å®¹ãç°ãªã
+  # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力される内容が異なる
   def gen_cell_cb_attribute( cell, indent, f, name_array, cb_inib )
     ct = self
@@ -3942,11 +3863,10 @@
       f.print "/* attribute(RO) */ \n"
     elsif $rom then  # && cb_inib == CB
-      # CB ã§ rw ã¨ var
+      # CB で rw と var
       return if @n_attribute_rw == 0
       print_indent( f, indent + 1 )
       f.print "/* attribute(RW) */ \n"
     else  # cb_inib == CB && $rom == false
-      # CB ã«å
-¨é¨
+      # CB に全部
       return if @n_attribute_rw == 0 && @n_attribute_ro == 0 && @n_var_size_is == 0
       print_indent( f, indent + 1 )
@@ -3958,5 +3878,5 @@
       next if a.is_omit?
       if cb_inib == :INIB && a.is_rw? == true then
-        # $rom == true ã§ãããããã¸æ¥ãªã
+        # $rom == true でしか、ここへ来ない
         next
       elsif cb_inib == :CB && $rom && ! a.is_rw? then
@@ -3966,11 +3886,11 @@
       j = jl.get_item( a.get_identifier )
       if j then
-        # cell ã®åæå¤æå®ãã
+        # cell の初期値指定あり
         gen_cell_cb_init( f, cell, name_array, a.get_type, j.get_rhs, a.get_identifier, indent + 1 )
       elsif a.get_initializer then
-        # celltype ã® default ã®åæå¤ãã
+        # celltype の default の初期値あり
         gen_cell_cb_init( f, cell, name_array, a.get_type, a.get_initializer, a.get_identifier, indent + 1 )
       else
-        # åæå¤æªæå®
+        # 初期値未指定
         gen_cell_cb_init( f, cell, name_array, a.get_type, nil, a.get_identifier, indent + 1 )
       end
@@ -3978,10 +3898,10 @@
     @var.each{ |v|
       next if v.is_omit?
-      next if v.get_size_is == nil   # size_is æå®ãããå ´å attribute ã®ä¸é¨ã¨ãã¦åºå
+      next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
 
       if v.get_initializer && $ram_initializer == false then
         gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
       else
-        # åæå¤æªæå® ã¾ãã¯ RAM initializer ä½¿ç¨
+        # 初期値未指定 または RAM initializer 使用
         gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
       end
@@ -3989,5 +3909,5 @@
   end
 
-  #=== var ã®åæåãã¼ã¿ãåºå
+  #=== var の初期化データを出力
   def gen_cell_cb_var( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3999,10 +3919,10 @@
 
         next if v.is_omit?
-        next if v.get_size_is      # size_is æå®ãããå ´å attribute ã®ä¸é¨ã¨ãã¦åºå
+        next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
 
         if v.get_initializer && $ram_initializer == false then
           gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
         else
-          # åæå¤æªæå® ã¾ãã¯ RAM initializer ä½¿ç¨
+          # 初期値未指定 または RAM initializer 使用
           gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
         end
@@ -4017,5 +3937,5 @@
   end
 
-  #=== å¼ã³å£ã®åæåã³ã¼ãã®çæ
+  #=== 呼び口の初期化コードの生成
   def gen_cell_cb_call_port( cell, indent, f, name_array, inib_cb )
     jl = cell.get_join_list
@@ -4031,5 +3951,5 @@
         next if p.get_port_type != :CALL
         next if p.is_omit?
-        next if p.is_cell_unique?        # æé©åï¼åä¸ã»ã«ã§å¼ã³å£ãã¯ã­ã«åãè¾¼ã¾ããï¼
+        next if p.is_cell_unique?        # 最適化（単一セルで呼び口マクロに埋め込まれる）
         next if inib_cb == :INIB && p.is_dynamic? && p.get_array_size == nil && ! $ram_initializer
         next if inib_cb == :CB_DYNAMIC && ( ! p.is_dynamic? || p.get_array_size != nil )
@@ -4041,5 +3961,5 @@
         if j == nil then
           dbgPrint "cell_cb_call_port: #{p.get_name} array size=#{p.get_array_size}\n"
-          # optional å¼ã³å£
+          # optional 呼び口
           # cdl_error( "H1003 internal error: cell \'$1\' port \'$2\': initializer not found\n" , cell.get_name, p.get_name )
           # exit( 1 )
@@ -4059,6 +3979,5 @@
             end
             if p.get_array_size == "[]" then
-              # æ·»æ°çç¥ã®å¼ã³å£é
-å
+              # 添数省略の呼び口配列
               print_indent( f, indent + 1 )
               f.printf( "%-40s /* %s #_CCP6_# */\n", "0,", "length of #{p.get_name} (n_#{p.get_name})" )
@@ -4072,6 +3991,5 @@
         am = j.get_array_member2
         if am then
-          # å¼ã³å£é
-åã®å ´å
+          # 呼び口配列の場合
           if inib_cb == :INIB && p.is_dynamic? && p.get_array_size != nil && $ram_initializer then
             f.printf( "%-40s /* #_CCP3_# _init_ */\n",  "#{cell.get_global_name}_#{j.get_name}_init_," )
@@ -4080,12 +3998,10 @@
           f.printf( "%-40s /* #_CCP3B_# */\n",  "#{cell.get_global_name}_#{j.get_name}," )
           if p.get_array_size == "[]" then
-            # æ·»æ°çç¥ã®å¼ã³å£é
-å
+            # 添数省略の呼び口配列
             print_indent( f, indent + 1 )
             f.printf( "%-40s /* %s #_CCP4_# */\n", "#{am.length},", "length of #{p.get_name} (n_#{p.get_name})" )
           end
         else
-          # åä¸ã»ã«ã¿ã¤ãã®çµåã®å ´åãVDES åã¸ã®ã­ã£ã¹ããå¿
-è¦
+          # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
           #print "CCP0/CCP1 #{p.get_name}, #{j.get_rhs_cell.get_celltype.get_name}, #{@name}\n"
           if j.get_rhs_cell.get_celltype == self then
@@ -4099,6 +4015,5 @@
 
           if j.get_rhs_subscript then
-            # åãå£é
-åã®å ´å
+            # 受け口配列の場合
             subscript = j.get_rhs_subscript
             f.printf( "%-40s /* %s #_CCP0_# */\n",
@@ -4107,7 +4022,5 @@
                       p.get_name.to_s + init )
           else
-            # å¼ã³å£é
-åã§ããåãå£é
-åã§ããªã
+            # 呼び口配列でも、受け口配列でもない
             if ! p.is_skelton_useless? then
               f.printf( "%-40s /* %s #_CCP1_# */\n",
@@ -4115,16 +4028,12 @@
                         p.get_name.to_s + init )
             else
-              # ã¹ã±ã«ãã³ä¸è¦æé©åï¼CB (INIB) ã¸ã®ãã¤ã³ã¿ãåãè¾¼ãï¼
-              c = j.get_rhs_cell                    # å¼ã³å
-ã»ã«
-              ct = c.get_celltype                   # å¼ã³å
-ã»ã«ã¿ã¤ã
-              name_array = ct.get_name_array( c )   # å¼ã³å
-ã»ã«ã¿ã¤ãã§ name_array ãå¾ã
+              # スケルトン不要最適化（CB (INIB) へのポインタを埋め込む）
+              c = j.get_rhs_cell                    # 呼び先セル
+              ct = c.get_celltype                   # 呼び先セルタイプ
+              name_array = ct.get_name_array( c )   # 呼び先セルタイプで name_array を得る
               if ct.has_INIB? || ct.has_CB? then
                 f.printf( "%-40s /* %s #_CCP2_# */\n", "#{name_array[7]},", p.get_name )
               else
-                # å¼ã³å
-ã¯ CB ã INIB ãæããªãï¼NULL ã«åæåï¼
+                # 呼び先は CB も INIB も持たない（NULL に初期化）
                 f.printf( "%-40s /* %s #_CCP2B_# */\n", "0,", p.get_name )
               end
@@ -4137,5 +4046,5 @@
   end
 
-  #=== åãå£ã®åæåã³ã¼ãã®çæ
+  #=== 受け口の初期化コードの生成
   def gen_cell_cb_entry_port( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -4146,6 +4055,5 @@
       f.print "/* entry port #_EP_# */ \n"
       @port.each{ |p|
-        # next if p.is_omit?  # åãå£é
-åã®åæ°ã¯çç¥ããªã
+        # next if p.is_omit?  # 受け口配列の個数は省略しない
         if p.get_port_type == :ENTRY && p.get_array_size == "[]"
           print_indent( f, indent + 1 )
@@ -4156,11 +4064,10 @@
   end
 
-  #=== ã»ã«ã® attribute ã®åæå¤ãåºå
+  #=== セルの attribute の初期値を出力
   #
-  #f_get_str:: true ã®å ´åãæå­åãè¿ããfalse ã®å ´åããã¡ã¤ã« f ã«åºåããï¼
-  # æå­åãè¿ãã¨ããæ«å°¾ã« ',' ã¯å«ã¾ããªãï¼
-  # ãã¡ã¤ã«ã¸åºåããã¨ããæ«å°¾ã« ',' ãåºåãããï¼æ§é ä½è¦ç´ ãé
-åè¦ç´ ã®åæå¤ãåºåããã¨ ',' ãäºéã«åºåãããï¼
-  # ãã ãç¾ç¶ã§ã¯ããã¡ã¤ã«ã¸åºåãããã¨ã¯ãªã
+  #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する．
+  # 文字列を返すとき、末尾に ',' は含まれない．
+  # ファイルへ出力するとき、末尾に ',' が出力される．構造体要素、配列要素の初期値を出力すると ',' が二重に出力される．
+  # ただし現状では、ファイルへ出力することはない
   #
   def gen_cell_cb_init( f, cell, name_array, type, init, identifier, indent, f_get_str = false )
@@ -4176,5 +4083,5 @@
 
       if f_get_str then
-        # åæå¤æªæå®
+        # 初期値未指定
         if type.kind_of?( BoolType ) then
           str = "false"   # formerly tecs_false
@@ -4200,5 +4107,5 @@
         return str
       else
-        # åæå¤æªæå®
+        # 初期値未指定
         if type.kind_of?( BoolType ) then
           f.print "    " * indent
@@ -4234,7 +4141,6 @@
     end    
 
-    # ãã®ã¡ã½ããã¯ Celltype ã®ãã®ã§ããå¿
-è¦ã¯ç¡ãï¼ä¸ã«ç¶ãã®ã§ããã«ç½®ãï¼
-    # åæå¤æå®ãã
+    # このメソッドは Celltype のものである必要は無い（上に続くのでここに置く）
+    # 初期値指定あり
     if type.kind_of?( BoolType ) then
       if init.instance_of?( C_EXP ) then
@@ -4302,5 +4208,5 @@
 
       len.times {
-        next if ! init[i]        # mikan ãã®å¦ç½®ã¯é©åï¼
+        next if ! init[i]        # mikan この処置は適切？
         if f_get_str then
           str += gen_cell_cb_init( f, cell, name_array, at, init[i], "#{identifier}[#{i}]", indent + 1, f_get_str )
@@ -4384,6 +4290,5 @@
   end
 
-  #== é¢æ°ãã¼ãã«ã®å¤é¨åç
-§
+  #== 関数テーブルの外部参照
   def gen_cell_extern_mt fs
     fs.each{ |r, f|
@@ -4400,5 +4305,5 @@
   end
 
-  #=== åãå£ãã£ã¹ã¯ãªãã¿ã®å®ç¾©ãçæ
+  #=== 受け口ディスクリプタの定義を生成
   def gen_cell_ep_des fs
     if @n_cell_gen >0 then
@@ -4413,5 +4318,5 @@
       f = fs[ c.get_region.get_domain_root ]
 
-      ct = c.get_celltype     # ct = self ã§ãåã
+      ct = c.get_celltype     # ct = self でも同じ
       jl = c.get_join_list
       name_array = get_name_array( c )
@@ -4422,5 +4327,5 @@
           next if p.get_port_type != :ENTRY
           next if p.is_omit?
-          if p.is_skelton_useless?       # åãå£æé©ån ep_opt
+          if p.is_skelton_useless?       # 受け口最適化n ep_opt
             f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
             next
@@ -4433,6 +4338,5 @@
 
           if len != nil then
-            # åãå£é
-åã®å ´å
+            # 受け口配列の場合
             i = 0
             while i < len
@@ -4519,14 +4423,12 @@
     return if @b_reuse && ! $generate_all_template
     if ! ( @plugin && @plugin.gen_ep_func? ) then
-      return if $generate_no_template     # $generate_all_template ããåªå
-ããã
-
-      # åèã¨ãã¦åºåãããã³ãã¬ã¼ããã¡ã¤ã«ã§ãããã¨ãç¤ºãããã« "_templ" ãä»å ãã
+      return if $generate_no_template     # $generate_all_template より優先される
+
+      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
       fname = "#{$gen}/#{@global_name}_templ.#{$c_suffix}"
     else
-      # Plugin ã«ããçæãããã»ã«ã¿ã¤ãã«ã¤ãã¦ã¯ãååçã«ãã³ãã¬ã¼ãã§ã¯ãªãã
-      # ä¿®æ­£ä¸è¦ãªã»ã«ã¿ã¤ãã®å®è£
-ã³ã¼ããçæããï¼
-      # ãã®ããããã¡ã¤ã«åã« _temp ãä»å ããªã
+      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
+      # 修正不要なセルタイプの実装コードを生成する．
+      # このため、ファイル名に _temp を付加しない
       fname = "#{$gen}/#{@global_name}.#{$c_suffix}"
     end
@@ -4543,5 +4445,5 @@
     gen_template_attr_access f
     gen_template_cp_fun f
-    # gen_template_types f     # 0805503 è¿½å ãã¦ã¿ããããã£ã±ãããã
+    # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
     f.print( " *\n * #[</PREAMBLE>]# */\n\n" )
     f.printf TECSMsg.get( :PAC_comment ), "#_PAC_#"
@@ -4549,5 +4451,5 @@
     gen_template_private_header f
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_preamble( f, @singleton, @name, @global_name )
     end
@@ -4558,5 +4460,5 @@
 
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_postamble( f, @singleton, @name, @global_name )
     end
@@ -4740,6 +4642,6 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      next if b_inline && ! p.is_inline?  # inline ãã¼ã
-      next if ! b_inline && p.is_inline?  # é inline ãã¼ã
+      next if b_inline && ! p.is_inline?  # inline ポート
+      next if ! b_inline && p.is_inline?  # 非 inline ポート
 
       inline_prefix = ""
@@ -4798,5 +4700,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -4819,5 +4721,5 @@
 
         if ( @plugin && @plugin.gen_ep_func? ) then
-          # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+          # このメソッドの引数は plugin.rb の説明を見よ
           @plugin.gen_ep_func_body( f, @singleton, @name, @global_name, p.get_signature.get_global_name, p.get_name, fun.get_name, "#{@global_name}_#{p.get_name}_#{fun.get_name}", functype, items )
 
@@ -4867,14 +4769,12 @@
     if ! ( @plugin && @plugin.gen_ep_func? ) then
       return if @b_reuse && ! $generate_all_template
-      return if $generate_no_template     # $generate_all_template ããåªå
-ããã
-
-      # åèã¨ãã¦åºåãããã³ãã¬ã¼ããã¡ã¤ã«ã§ãããã¨ãç¤ºãããã« "_templ" ãä»å ãã
+      return if $generate_no_template     # $generate_all_template より優先される
+
+      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
       fname = "#{$gen}/#{@global_name}_inline_templ.#{$h_suffix}"
     else
-      # Plugin ã«ããçæãããã»ã«ã¿ã¤ãã«ã¤ãã¦ã¯ãååçã«ãã³ãã¬ã¼ãã§ã¯ãªãã
-      # ä¿®æ­£ä¸è¦ãªã»ã«ã¿ã¤ãã®å®è£
-ã³ã¼ããçæããï¼
-      # ãã®ããããã¡ã¤ã«åã« _temp ãä»å ããªã
+      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
+      # 修正不要なセルタイプの実装コードを生成する．
+      # このため、ファイル名に _temp を付加しない
       fname = "#{$gen}/#{@global_name}_inline.#{$h_suffix}"
     end
@@ -4899,5 +4799,5 @@
 
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_postamble( f, @singleton, @name, @global_name )
     end
@@ -4916,19 +4816,19 @@
       if fa.get_name == :write then
 
-        # åå¾ã® " ãåãé¤ã
+        # 前後の " を取り除く
         # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
         file_name = CDLString.remove_dquote fa.get_file_name
         format = CDLString.remove_dquote fa.get_format
-        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # åã® " ãåãé¤ã
-        # format    = format.sub( /(.*)\"\z/, "\\1" )              # å¾ã® " ãåãé¤ã
+        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
+        # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
         format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
 
 
-        # mikan ä»¥ä¸ã¯ subst_name ã§ç½®æããããã«å¤æ´ãã¹ã
-        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /\$\$/, "\$" )                # $$ ã $ ã«ç½®æ
+        # mikan 以下は subst_name で置換するように変更すべき
+        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
+        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
 
         if file_name[0] != ?/ then
@@ -4942,5 +4842,5 @@
             puts( format )
           end
-          # format ä¸­ã® \n, \r, \t, \f ã¨ \" ãªã©ãç½®æ
+          # format 中の \n, \r, \t, \f と \" などを置換
           fmt = CDLString.escape format
           cfg_file.print( fmt )
@@ -4959,5 +4859,5 @@
     @ordered_cell_list.each{ |c|
 
-      # cell ã®ãã­ãã¿ã¤ãå®£è¨ãªãç¡è¦
+      # cell のプロトタイプ宣言なら無視
       next if ! c.is_generate?
 
@@ -4968,12 +4868,12 @@
         if fa.get_name == :write then
 
-          # åå¾ã® " ãåãé¤ã
+          # 前後の " を取り除く
           # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
           file_name = CDLString.remove_dquote fa.get_file_name
           file_name = subst_name( file_name, name_array )
-          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # åå¾ã® "" ãåãé¤ã
+          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
           format    = CDLString.remove_dquote fa.get_format
-          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # åã® " ãåãé¤ã
-          # format    = format.sub( /(.*)\"\z/, "\\1" )              # å¾ã® " ãåãé¤ã
+          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
+          # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
           format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
 
@@ -4986,10 +4886,10 @@
           end
 
-          na = []     # ã·ã³ãã«ã attribute ã®å¤ã«ç½®ãæããå¾ã®å¼æ°
+          na = []     # シンボルを attribute の値に置き換えた後の引数
           if arg_list then
             arg_list.each { |a|
               case a[0]
-              when :STRING_LITERAL   # æå­åå®æ°
-                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # åå¾ã® "" ãåãé¤ã
+              when :STRING_LITERAL   # 文字列定数
+                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
                 s = CDLString.remove_dquote a[1]
                 s = subst_name( s, name_array )
@@ -4998,13 +4898,12 @@
                 na << s
               when :IDENTIFIER
-                param_name = a[1]    # è­å¥å­ï¼å±æ§ã®ååï¼
+                param_name = a[1]    # 識別子（属性の名前）
                 attr = self.find( param_name )
-                init = attr.get_initializer      # celltype ã§æå®ãããåæå¤
-
-                # cell ã® join ã®ãªã¹ãããååãæ¢ã
+                init = attr.get_initializer      # celltype で指定された初期値
+
+                # cell の join のリストから名前を探す
                 j = c.get_join_list.get_item( param_name )
-                if j then    # param_name ã® cell ã®ã¸ã§ã¤ã³ãããã
-                  init = j.get_rhs                    # cell ã§æå®ãããåæå¤ãåªå
-
+                if j then    # param_name の cell のジョインがあるか
+                  init = j.get_rhs                    # cell で指定された初期値を優先
                 end
 
@@ -5012,5 +4911,5 @@
                                       # file,cell, name_array, type,          init, identifier,       indent, f_get_str
 
-                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # åå¾ã® "" ãåãé¤ã mikan ããã§ç½®æã§ããï¼
+                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい？
                 str = CDLString.remove_dquote str
                 na << str
@@ -5030,5 +4929,5 @@
             end
 
-            # format ä¸­ã® \n, \r, \t, \f ã¨ \" ãªã©ãç½®æ
+            # format 中の \n, \r, \t, \f と \" などを置換
             fmt = CDLString.escape format
             cfg_file.printf( fmt, *na )
@@ -5054,5 +4953,5 @@
     return if $generate_no_template
 
-    # Makefile.templ ã®çæï¼è¿½è¨ï¼
+    # Makefile.templ の生成（追記）
 
     f = AppFile.open( "#{$gen}/Makefile.templ" )
@@ -5062,7 +4961,7 @@
  
 EOT
-# ãã®çæè¦åã¯2ç¹ã§æå³ããªã
-#  ã»$(GEN_DIR) ã« .o ãçæããã«ã¼ã«ããªã
-#  ã»ãã³ãã¬ã¼ãã³ã¼ãããã®ã¾ã¾ãã«ãããã®ã¯ç´ãããã
+# この生成規則は2点で意味がない
+#  ・$(GEN_DIR) に .o を生成するルールがない
+#  ・テンプレートコードをそのままビルドするのは紛らわしい
 # # Celltype: #{@name}
 # $(GEN_DIR)/#{@global_name}_tecsgen.o : $(GEN_DIR)/#{@global_name}_tecsgen.#{$c_suffix}
@@ -5081,10 +4980,10 @@
     headers = [ "$(GEN_DIR)/#{@global_name}_tecsgen.#{$h_suffix}", "$(GEN_DIR)/#{@global_name}_factory.#{$h_suffix}", "$(GEN_DIR)/global_tecsgen.#{$h_suffix}" ]
 
-    # inline åãå£ãæã¤ãï¼
+    # inline 受け口を持つか？
     if @n_entry_port_inline > 0 then
       headers << "#{@global_name}_inline.#{$h_suffix}"
     end
 
-    # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®ããã
+    # 呼び口または受け口のシグニチャのヘッダ
     @port.each { |p|
       next if p.is_omit?
@@ -5111,9 +5010,8 @@
   end
 
-  #=== decl ç¨ã® dealloc ã³ã¼ããçæ
-  #b_reset:: Bool:  ãªã»ããç¨ã® dealloc ã³ã¼ãã®çæ (NULL ãã¤ã³ã¿ã®å ´å dealloc ããªã)
-  # mikan string ä¿®é£¾ããããã¤ã³ã¿ã®å
-ã«ãã¤ã³ã¿ãæ¥ãªãã¨ä»®å®ããã¤ã³ã¿åãæã¤æ§é ä½ã®å¯è½æ§ãæé¤ãã¦ããªã
-  # ãã®ã¡ã½ããã§ã¯ãè¡ãåºåããç´åã« " \\\n" ãåºåããè¡æ«ã§æ¹è¡æå­ãåºåããªã
+  #=== decl 用の dealloc コードを生成
+  #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
+  # mikan string 修飾されたポインタの先にポインタが来ないと仮定。ポインタ型を持つ構造体の可能性を排除していない
+  # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
   def gen_dealloc_code_for_type( f, type, dealloc_func_name, pre, name, post, level, b_reset, count_str = nil )
     type = type.get_original_type
@@ -5144,5 +5042,5 @@
         post2 = ""
         type2 = md.get_type.get_original_type
-        if type2.kind_of? PtrType then   # mikan typedef ãããå
+        if type2.kind_of? PtrType then   # mikan typedef された型
           if type2.get_count then
             count_str = type2.get_count.to_str( members_decl, pre2, post2 )
@@ -5217,8 +5115,6 @@
     end
 
-    # å¼ã³å£ã®çµåå
-ã®ã»ã«ã¿ã¤ãã®ãããï¼æé©åã®å ´åã®ã¿ï¼
-    # çµåå
-ã®åãå£ã inline ã®å ´åãinline ãããã
+    # 呼び口の結合先のセルタイプのヘッダ（最適化の場合のみ）
+    # 結合先の受け口が inline の場合、inline ヘッダも
     @port.each { |p|
       next if p.get_port_type != :CALL
@@ -5226,5 +5122,5 @@
 
       if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+        # 最適化コード (optimize) # スケルトン不要など
         p2 = p.get_real_callee_port
         if p2 then
@@ -5236,5 +5132,5 @@
           headers += ct.get_depend_header_list_( celltype_list )
         #else
-        #  optional ã§æªçµå  
+        #  optional で未結合  
         end
       end
@@ -5244,23 +5140,23 @@
 
 
-  #=== $id$, $ct$, $cb$, $idx$ ç½®æ
+  #=== $id$, $ct$, $cb$, $idx$ 置換
   #
-  #  str ã«ä»¥ä¸ã®ç½®æãè¡ã
-  #-   $ct$ â ã»ã«ã¿ã¤ãå(ct)
-  #-   $cell$ â ã»ã«å(cell)   cell ã nil ãªãã°ä»¥ä¸ã®ç½®æã¯è¡ãããªã
-  #-   $cb$ â CB ã® C è¨èªå(cb)
-  #-   $cbp$ â CB ã¸ã®ãã¤ã³ã¿(cbp)
-  #-   $cb_proto$ â CB ã® C è¨èªåãã­ãã¿ã¤ãå®£è¨ç¨(cb_proto)
-  #-   $id$ â $ct$_$cell_global$    # ct_cell  before or same V1.5.2
-  #-   $idx$ â idx
-  #-   $ID$ â id (æ´æ°ã®çªå·)
-  #-   $ct_global$ â ã»ã«ã¿ã¤ãå(ct)
-  #-   $cell_global$ â ã»ã«å(cell)
-  #-   $$   â $
+  #  str に以下の置換を行う
+  #-   $ct$ ⇒ セルタイプ名(ct)
+  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば以下の置換は行われない
+  #-   $cb$ ⇒ CB の C 言語名(cb)
+  #-   $cbp$ ⇒ CB へのポインタ(cbp)
+  #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
+  #-   $id$ ⇒ $ct$_$cell_global$    # ct_cell  before or same V1.5.2
+  #-   $idx$ ⇒ idx
+  #-   $ID$ ⇒ id (整数の番号)
+  #-   $ct_global$ ⇒ セルタイプ名(ct)
+  #-   $cell_global$ ⇒ セル名(cell)
+  #-   $$   ⇒ $
   def subst_name( str, name_array )
     ct   = name_array[0]    # celltype name
     cell = name_array[1]    # cell name
     cb   = name_array[2]    # cell CB name
-    cb_init = name_array[3] # cell CB INIT, ããã¯ç½®æã«ä½¿ãããªã
+    cb_init = name_array[3] # cell CB INIT, これは置換に使われない
     cb_proto = name_array[4] # cell CB name for prototype
     id   = name_array[6]    # cell ID
@@ -5283,5 +5179,5 @@
       str = str.gsub( /(^|[^\$])\$cell_global\$/, "\\1#{cell_global}" )
     end
-    str = str.gsub( /\$\$/, "\$" )                       # $$ ã $ ã«ç½®æ
+    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
 
     return str
@@ -5290,7 +5186,7 @@
 end
 
-# Appendable Fileï¼è¿½è¨å¯è½ãã¡ã¤ã«ï¼
+# Appendable File（追記可能ファイル）
 class AppFile
-  # éãããã¡ã¤ã«ã®ãªã¹ã
+  # 開いたファイルのリスト
   @@file_name_list = {}
 
@@ -5309,18 +5205,18 @@
     end
 
-    # æ¢ã«éãã¦ãããï¼
+    # 既に開いているか？
     if @@file_name_list[ name ] then
 #2.0
       mode = "a" + mode
-      # è¿½è¨ã¢ã¼ãã§éã
+      # 追記モードで開く
       file = File.open( real_name, mode )
     else
 #2.0
       mode = "w" + mode
-      # æ°è¦ã¢ã¼ãã§éãï¼æ¢ã«ããã°ããµã¤ãºãï¼ã«ããï¼
+      # 新規モードで開く（既にあれば、サイズを０にする）
       file = File.open( real_name, mode )
       @@file_name_list[ name ] = true
     end
-    # File ã¯ã©ã¹ã®ãªãã¸ã§ã¯ããè¿ã
+    # File クラスのオブジェクトを返す
     return file
   end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -77,6 +62,5 @@
 
 #==  Cell_location
-  # tecscde ã®ä½ç½®æ
-å ±
+  # tecscde の位置情報
   class  Cell_location
 
@@ -105,6 +89,5 @@
 
   #==  Join_location
-  # tecscde ã®ä½ç½®æ
-å ±
+  # tecscde の位置情報
   class  Join_location
     @@join_location_list = []
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb	(revision 389)
@@ -6,59 +6,43 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== TECS ã®çæããåå½èªåå¿
-è¦ãªæå­å
-# ç¾ç¶ãã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯è±èªã®ã¿
-# çæãã¡ã¤ã«ã®ã³ã¡ã³ãã¨ãã¦åºåãããæå­å
+#== TECS の生成する各国語化必要な文字列
+# 現状、エラーメッセージは英語のみ
+# 生成ファイルのコメントとして出力される文字列
 class TECSMsg
 
-  #=== TECSMsg#çæãããããããã³ãã¬ã¼ããªã©ã«å«ããã³ã¡ã³ãã®åå¾
-  # CDL ã®æå­ã³ã¼ãã«åããã¦ãæå­ã³ã¼ãå¤æãè¡ã
+  #=== TECSMsg#生成するヘッダやテンプレートなどに含めるコメントの取得
+  # CDL の文字コードに合わせて、文字コード変換を行う
   def self.get( msg )
     str = @@comment[ msg ]
@@ -71,10 +55,10 @@
   end
 
- #=== TECSMsg#ã­ã¼ã«ã©ã¤ãºãããã¨ã©ã¼ã¡ãã»ã¼ã¸ãå¾ã
- #body::String   : "S0001 error message body"  ã®å½¢å¼
- # S0001 ã®é¨åãä½¿ç¨ããã
- # Generator.error2 ããå¼ã³åºããã
+ #=== TECSMsg#ローカライズされたエラーメッセージを得る
+ #body::String   : "S0001 error message body"  の形式
+ # S0001 の部分が使用される
+ # Generator.error2 から呼び出される
  def self.get_error_message( body )
-   body =~ /^[A-Z0-9]+/    # ã¨ã©ã¼çªå·ãåãåºã
+   body =~ /^[A-Z0-9]+/    # エラー番号を取り出す
    num = $&
    if num then
@@ -91,8 +75,8 @@
  end
 
- #=== TECSMsg#ã­ã¼ã«ã©ã¤ãºãããã¦ã©ã¼ãã³ã°ã¡ãã»ã¼ã¸ãå¾ã
- # Generator.warning2 ããå¼ã³åºããã
+ #=== TECSMsg#ローカライズされたウォーニングメッセージを得る
+ # Generator.warning2 から呼び出される
  def self.get_warning_message( body )
-   body =~ /^[A-Z0-9]+/    # ã¦ã©ã¼ãã³ã°çªå·ãåãåºã
+   body =~ /^[A-Z0-9]+/    # ウォーニング番号を取り出す
    num = $&
    msg = @@warning_message[ num.to_sym ]
@@ -105,10 +89,8 @@
  end
 
- #=== TECSMsg#ã­ã¼ã«ã©ã¤ãºãããæ
-å ±ã¡ãã»ã¼ã¸ãå¾ã
- # Generator.info2 ããå¼ã³åºããã
+ #=== TECSMsg#ローカライズされた情報メッセージを得る
+ # Generator.info2 から呼び出される
  def self.get_info_message( body )
-   body =~ /^[A-Z0-9]+/    # æ
-å ±çªå·ãåãåºã
+   body =~ /^[A-Z0-9]+/    # 情報番号を取り出す
    num = $&
    msg = @@info_message[ num.to_sym ]
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -58,20 +43,20 @@
 Other processes are setting ID for each cell and setting domain information
 
-ãã®ãã¡ã¤ã«ã«ã¯ãæå³è§£æããã³ã¼ãçæã®éã§è¡ãã¹ãå¦çãå«ã¾ããï¼
-æé©åããã®ä¸ã¤ã§ããï¼
-ãã®ä»ã«ãã»ã«æ¯ã® ID ä»ãããã¡ã¤ã³ãããè¡ãï¼
-ã³ã¼ãçæå¯¾è±¡ã¨ãªãã»ã«ãå¯¾è±¡ã«å¦çãè¡ããã®ãå«ã¾ããï¼
+このファイルには、意味解析からコード生成の間で行うべき処理が含まれる．
+最適化もその一つである．
+その他に、セル毎の ID 付け、ドメインわけを行う．
+コード生成対象となるセルを対象に処理を行うものが含まれる．
 =end
 
 class Namespace
 
-  #===  åã»ã«ã« ID ï¼æ´æ°å¤ï¼ãå²ä»ãã
+  #===  各セルに ID （整数値）を割付ける
   def set_cell_id_and_domain
-    # celltype ã®åã»ã«ã« ID ãå²ä»ãã
+    # celltype の各セルに ID を割付ける
     @celltype_list.each { |t|
       t.set_cell_id_and_domain
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®åã»ã«ã« ID ãå²ä»ãã
+    # サブネームスペースの各セルに ID を割付ける
     @namespace_list.each { |n|
       n.set_cell_id_and_domain
@@ -80,10 +65,10 @@
 
   def optimize
-    # celltype ã®æé©å
+    # celltype の最適化
     @celltype_list.each { |t|
       t.optimize
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®æé©å
+    # サブネームスペースの最適化
     @namespace_list.each { |n|
       n.optimize
@@ -92,10 +77,10 @@
 
   def reset_optimize
-    # celltype ã®æé©å
+    # celltype の最適化
     @celltype_list.each { |t|
       t.reset_optimize
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®æé©å
+    # サブネームスペースの最適化
     @namespace_list.each { |n|
       n.reset_optimize
@@ -106,5 +91,5 @@
 class Celltype
 
-  ID_BASE = 1               # reset_optimize ã§ãªã»ãããã
+  ID_BASE = 1               # reset_optimize でリセットする
   @@ID_BASE = ID_BASE
 
@@ -114,5 +99,5 @@
   end
 
-  #=== åã»ã«ã« ID ï¼æ´æ°å¤ï¼ãå²ä»ãã
+  #=== 各セルに ID （整数値）を割付ける
   def set_cell_id
 
@@ -122,8 +107,7 @@
 
     if $unique_id then
-      @id_base = @@ID_BASE   # id ãã·ã¹ãã å
-¨ä½ã§é£çªã«ãã
+      @id_base = @@ID_BASE   # id をシステム全体で連番にする
     else
-      @id_base = 1           # base ãå¸¸ã« 1 ããå§ãã
+      @id_base = 1           # base を常に 1 から始める
     end
 
@@ -131,5 +115,5 @@
     no_id_specified_cells = []
 
-    # ãã­ãã¿ã¤ããé¤ããæ°ãæ±ãã
+    # プロトタイプを除いた数を求める
     @cell_list.each{ |c|
       if c.is_generate? then
@@ -148,6 +132,6 @@
     }
 
-    @ordered_cell_list = []   # id = 1 ãæ·»æ° 0 ã«æ ¼ç´ããã
-    # ID æå®ããã¦ããã»ã«ã« id çªå·ãä¸ãã
+    @ordered_cell_list = []   # id = 1 が添数 0 に格納される
+    # ID 指定されているセルに id 番号を与える
     id_specified_cells.each{ |c|
       id = c.get_specified_id
@@ -169,5 +153,5 @@
       end
       @ordered_cell_list[ id - 1 ] = c
-      # éãçªå·ã¨ããå ´åã®ãã @id_base ãå ãã
+      # 通し番号とする場合のため @id_base を加える
       c.set_id( @id_base - 1 + id )
       if $verbose then
@@ -176,5 +160,5 @@
     }
 
-    # ID æå®ããã¦ããªãã»ã«ã« id çªå·ãä¸ãã
+    # ID 指定されていないセルに id 番号を与える
     i = 0
     no_id_specified_cells.each{ |c|
@@ -243,5 +227,5 @@
 
     @domain_roots.each{ |dn, regions|
-      # domain_type ã¯ä¸ã¤ã®ãã¼ãã«ä¸ã¤ãããªãã®ã§ãä¸ã¤ã®è¦ç´ ãç¡æ¡ä»¶ã§åãåºã
+      # domain_type は一つのノードに一つしかないので、一つの要素を無条件で取り出す
       if regions.length > 1 then
         if $verbose then
@@ -259,6 +243,5 @@
   def optimize
 
-    # port ã®åç
-§ããã»ã«ã¿ã¤ãã®æ°ãã»ã«ã®æ°ãæ±ãã
+    # port の参照するセルタイプの数、セルの数を求める
     if $verbose then
       print "=== optimizing celltype #{get_namespace_path.to_s} ===\n"
@@ -271,14 +254,14 @@
   end
 
-  #=== Celltype#å¼ã³å£æé©å
+  #=== Celltype#呼び口最適化
   def optimize_call
     @port.each{ |port|
       next if port.get_port_type != :CALL
       if port.is_omit? then
-        # å¼ã³å£æé©åå®æ½
+        # 呼び口最適化実施
         @b_cp_optimized = true
-        @n_call_port_omitted_in_CB += 1               # CB ã§çç¥ããå¼ã³å£
-        port.set_skelton_useless                      # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
-        port.set_VMT_useless                          # VMT ä¸è¦æé©å (ç´æ¥åãå£é¢æ°ãå¼åºã)
+        @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
+        port.set_skelton_useless                      # スケルトン関数不要最適化
+        port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
         if $verbose then
           print "optimized by omit: port: #{port.get_name} : o\n"
@@ -301,11 +284,8 @@
       end
 
-      port_cells = []    # å¼ã³å
-ã»ã«
-      port_ports = []    # å¼ã³å
-ã®ãã¼ã
-
-      # ã»ã«ã®åç
-§ããã»ã«ãéããï¼ãã¼ããä¸ç·ã«éããï¼
+      port_cells = []    # 呼び先セル
+      port_ports = []    # 呼び先のポート
+
+      # セルの参照するセルを集める（ポートも一緒に集める）
       @cell_list.each{ |cell|
 
@@ -319,14 +299,11 @@
         if j then
           if j.get_array_member2 then
-            # å¼ã³å£é
-åã®å ´åãå
-¨é¨ã®çµåå
-ãéãã
+            # 呼び口配列の場合、全部の結合先を集める
             j.get_array_member2.each { |j2|
               if j2 then
                 port_cells << j2.get_rhs_cell
-                port_ports << j2.get_rhs_port   # å³è¾ºã®ãã¼ã
+                port_ports << j2.get_rhs_port   # 右辺のポート
               else
-                # optional ã§ãããæ·»æ°ã®ã¿åæåããã¦ããªãï¼ãã¹ã¦åæåãããªãå ´åã¯ãä¸ï¼
+                # optional で、ある添数のみ初期化されていない（すべて初期化されない場合は、下）
                 port_cells << nil
                 port_ports << nil
@@ -334,51 +311,41 @@
             }
           else
-            # å
-¨ã¦ã®çµåå
-ãéãã
+            # 全ての結合先を集める
             port_cells << j.get_rhs_cell
-            port_ports << j.get_rhs_port   # å³è¾ºã®ãã¼ã
+            port_ports << j.get_rhs_port   # 右辺のポート
           end
         else
-          # optional ã§åæåããã¦ããªãï¼nil ãè¦ç´ ã«å ãã¦ããï¼
+          # optional で初期化されていない（nil を要素に加えておく）
           port_cells << nil
-          port_ports << nil   # å³è¾ºã®ãã¼ã
+          port_ports << nil   # 右辺のポート
         end
       }
 
-      # éè¤è¦ç´ ãåãé¤ã
+      # 重複要素を取り除く
       port_cells.uniq!
       port_ports.uniq!
 
-      # å¼ã³å£ã®å¼ã³å
-ãä¸ã¤ã®ãã¼ãã ããï¼
+      # 呼び口の呼び先が一つのポートだけか？
       if port_ports.length == 1 then
 
-        # å¼ã³å£é
-åãå¯å¤é·ã®å ´åãæé©åããªã
-             # mikan å¼ã³å£é
-åè¦ç´ æ°ãã¯ã­ä¸å
-·åæ«å®å¯¾ç­
-             # ããæã¾ããä¿®æ­£ã¯ãåãå£ã¸ã®ãã¤ã³ã¿ã¯çç¥ããããé
-ååæ°ã¯åºåãã(#_CP_#, #_TCP_#)
-             # ããã«é
-ååæ°ãå®æ°åã§ããã®ã§ããã°ãå®æ°ãã¯ã­ãåºå (#_NCPA_#)
+        # 呼び口配列が可変長の場合、最適化しない
+             # mikan 呼び口配列要素数マクロ不具合暫定対策
+             # より望ましい修正は、受け口へのポインタは省略するが、配列個数は出力する(#_CP_#, #_TCP_#)
+             # さらに配列個数が定数化できるのであれば、定数マクロを出力 (#_NCPA_#)
         next if port.get_array_size == "[]"
 
-        # å¼ã³å£æé©åå®æ½
+        # 呼び口最適化実施
         @b_cp_optimized = true
 
-        # å¼ã³å
-ãä¸ã¤ã®ã»ã«ã ããï¼
+        # 呼び先が一つのセルだけか？
         if port_cells.length == 1 then
 
-          # å¼ã³å£ã¯ optional ã§åæåããã¦ããªããã¾ãã¯åãå£ã¯é
-åã§ã¯ãªããï¼
+          # 呼び口は optional で初期化されていない、または受け口は配列ではないか？
           if port_ports[0] == nil || port_ports[0].get_array_size == nil then
 
-            @n_call_port_omitted_in_CB += 1               # CB ã§çç¥ããå¼ã³å£
-            port.set_cell_unique                          # ã»ã«ä¸ã¤ã ãæé©å
-            port.set_skelton_useless                      # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
-            port.set_VMT_useless                          # VMT ä¸è¦æé©å (ç´æ¥åãå£é¢æ°ãå¼åºã)
+            @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
+            port.set_cell_unique                          # セル一つだけ最適化
+            port.set_skelton_useless                      # スケルトン関数不要最適化
+            port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
 
             if $verbose then
@@ -386,5 +353,5 @@
             end
           else
-            port.set_VMT_useless                          # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ°ãå¼åºã)
+            port.set_VMT_useless                          # VMT 不要最適化 (スケルトン関数を呼出す)
 
             if $verbose then
@@ -393,13 +360,11 @@
           end
 
-        else  # å¼ã³å
-ãè¤æ°ã®ã»ã«ï¼åä¸ã®ãã¼ãï¼
-
-          # å¼ã³å£ã¯ optional ã§åæåããã¦ããªããã¾ãã¯åãå£ã¯é
-åã§ã¯ãªããï¼
+        else  # 呼び先が複数のセル（単一のポート）
+
+          # 呼び口は optional で初期化されていない、または受け口は配列ではないか？
           if port_ports[0] == nil || port_ports[0].get_array_size == nil then
             if ! @singleton then
-              port.set_skelton_useless                    # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
-              port.set_VMT_useless                        # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ° or åãå£é¢æ°ãå¼åºã)
+              port.set_skelton_useless                    # スケルトン関数不要最適化
+              port.set_VMT_useless                        # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
 
               if $verbose then
@@ -407,5 +372,5 @@
               end
             else
-              port.set_VMT_useless                           # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ° or åãå£é¢æ°ãå¼åºã)
+              port.set_VMT_useless                           # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
 
               if $verbose then
@@ -417,5 +382,5 @@
 
         port.set_only_callee( port_ports[0], port_cells[0] )
-           # set_cell_unique ã§ãªãå ´å cell ã¯æå³ããªã
+           # set_cell_unique でない場合 cell は意味がない
 
       end
@@ -426,18 +391,16 @@
   end
 
-  #=== Celltype#åãå£æé©å
-  # optimize_entry ã¯ãå¼ã³å£æé©åã®çµæãä½¿ç¨ãã¦ãã
+  #=== Celltype#受け口最適化
+  # optimize_entry は、呼び口最適化の結果を使用している
   def optimize_entry
-    # åãå£æé©åã®è¨­å®
+    # 受け口最適化の設定
     @port.each{ |port|
       next if port.get_port_type != :CALL
 
-      # å¼ã³å£å´ã®æé©åç¶æ
-
+      # 呼び口側の最適化状態
       b_VMT_useless     = port.is_VMT_useless?
       b_skelton_useless = port.is_skelton_useless?
 
-      # ã»ã«ã®åç
-§ããã»ã«ãéããï¼ãã¼ããä¸ç·ã«éããï¼
+      # セルの参照するセルを集める（ポートも一緒に集める）
       @cell_list.each{ |cell|
 
@@ -449,21 +412,19 @@
         j = jl.get_item( port.get_name )
 
-        if j then    # optional ã§çµåããã¦ããªãå ´å nil
+        if j then    # optional で結合されていない場合 nil
           if j.get_array_member2 then
-            # å¼ã³å£é
-å
+            # 呼び口配列
             j.get_array_member2.each { |j2|
               if j2 then
-                port2 = j2.get_rhs_port   # å³è¾ºã®ãã¼ã
-                # åãå£å´ã®æé©åå¯è½æ§ãè¨­å®
+                port2 = j2.get_rhs_port   # 右辺のポート
+                # 受け口側の最適化可能性を設定
                 port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
               #else
-              #  optional ã§å¼ã³å£é
-åè¦ç´ ãåæåããã¦ããªã
+              #  optional で呼び口配列要素が初期化されていない
               end
             }
           else
-            port2 = j.get_rhs_port      # å³è¾ºã®ãã¼ã
-            # åãå£å´ã®æé©åå¯è½æ§ãè¨­å®
+            port2 = j.get_rhs_port      # 右辺のポート
+            # 受け口側の最適化可能性を設定
             port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
           end
@@ -473,12 +434,12 @@
   end
 
-  #Celltype# ãªã»ãããã
+  #Celltype# リセットする
   def reset_optimize
-    @@ID_BASE = ID_BASE      # æ¬å½ã¯ä¸åã ãã§ãã
-    @id_base = 1             # set_cell_id ã§ãªã»ãããããã®ã§ä¸è¦
-
-    @b_cp_optimized = false  # å¼ã³å£æé©å
-    @n_call_port_omitted_in_CB = 0 # å¼ã³å£æé©åã«ããä¸çæã¨ãªã£ããã¼ãã®æ°
-    @n_cell_gen = 0          # çæã»ã«åæ°
+    @@ID_BASE = ID_BASE      # 本当は一回だけでよい
+    @id_base = 1             # set_cell_id でリセットされるので不要
+
+    @b_cp_optimized = false  # 呼び口最適化
+    @n_call_port_omitted_in_CB = 0 # 呼び口最適化により不生成となったポートの数
+    @n_cell_gen = 0          # 生成セル個数
     @port.each{ |p|
       p.reset_optimize
@@ -488,9 +449,9 @@
   end
 
-  #Celltype# ãããã¯ include ããã¦ããã
-  #hname::Symbol : ãããå
-  #RETURN:: bool_t: false ã¤ã³ã¯ã«ã¼ãããã¦ããªããtrue ã¤ã³ã¯ã«ã¼ãããã¦ãã
-  # #_ISH_#, #_ICT_# ã§ããããåãè¾¼ã¾ãã¦ããããã§ãã¯ãã
-  # false ãè¿ã£ãå ´åãhname ã¯ç»é²ããã¦ãæ¬¡åã®å¼ã³åºãã§ã¯ true ãè¿ã
+  #Celltype# ヘッダは include されているか
+  #hname::Symbol : ヘッダ名
+  #RETURN:: bool_t: false インクルードされていない、true インクルードされている
+  # #_ISH_#, #_ICT_# でヘッダが取り込まれているかチェックする
+  # false が返った場合、hname は登録されて、次回の呼び出しでは true が返る
   def header_included?( hname )
     if @included_header[ hname ] == nil then
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 389)
@@ -6,55 +6,40 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== Plugin ã¯ã©ã¹
-# ThroughPlugin, SignaturePlugin, CelltypePlugin ã« include ãã
+#== Plugin クラス
+# ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
 class Plugin < Node
-#@error_backlog:: [msg1, msg2, ... ]   @locale ãè¨­å®ãããåã«çºçããã¨ã©ã¼
+#@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
 
   PluginArgProc = {
@@ -65,10 +50,10 @@
     super
     @b_silent = false
-    @locale = nil       # set_locale ãå¼ã³åºãããã¾ã§ nil ã¨ãªã
+    @locale = nil       # set_locale が呼び出されるまで nil となる
     @error_backlog = []
   end
 
   #=== Plugin#cdl_error
-  # set_locale ãå¼ã³åºãããã¾ã§ @error_backlog ã«ä¿å­ãä¿çãã
+  # set_locale が呼び出されるまで @error_backlog に保存し保留する
   def cdl_error *arg
     if @locale then
@@ -79,8 +64,8 @@
   end
 
-  #=== locale ãè¨­å®ãã
-  # Node ã¯ initialize ã§ locale ãè¨­å®ããããplugin ã¯ parse ã¨ã¯
-  # ç°ãªãã¿ã¤ãã³ã° new ããããããlocale ãåè¨­å®ãã
-  # ãã®ã¡ã½ããã2åº¦å¼ã³åºãã¨ @error_backlog ã®ã¨ã©ã¼ã2åº¦åºåããã¦ãã¾ã
+  #=== locale を設定する
+  # Node は initialize で locale を設定するが、plugin は parse とは
+  # 異なるタイミング new されるため、locale を再設定する
+  # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
   def set_locale locale
     @locale = locale
@@ -90,33 +75,31 @@
   end
 
-### æ§æè§£é ã¾ãã¯ æå³è§£ææ®µéã§å¼ã³åºãããã¡ã½ãã ###
-# generate æå®å­ã®å ´åãæ§æè§£éæ¬¡ç¬¬(end_of_parseã§)å¼ã³åºããã
-# generate æã®å ´åãåºç¾æ¬¡ç¬¬å¼ã³åºããã
-  ### æå³è§£ææ®µéã§å¼ã³åºãããã¡ã½ãã ### <<< ã³ã¡ã³ãèª¤ã (V1.4.2)
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+### 構文解釈 または 意味解析段階で呼び出されるメソッド ###
+# generate 指定子の場合、構文解釈次第(end_of_parseで)呼び出される
+# generate 文の場合、出現次第呼び出される
+  ### 意味解析段階で呼び出されるメソッド ### <<< コメント誤り (V1.4.2)
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
   def gen_cdl_file file
   end
 
 
-### ã³ã¼ãçæ®µéã§å¼ã³åºãããã¡ã½ãã ###
-  #=== ãã©ã°ã¤ã³ã¯ gen_ep_func ãæä¾ããã
-  # gen_ep_func å®ç¾©   â ãã³ãã¬ã¼ãã§ã¯ãªããã»ã«ã¿ã¤ãã³ã¼ã(tCelltype.c)ãçæ 
-  # gen_ep_func æªå®ç¾© â ãã³ãã¬ã¼ã(tCelltype_templ.c)ãçæ
+### コード生段階で呼び出されるメソッド ###
+  #=== プラグインは gen_ep_func を提供するか
+  # gen_ep_func 定義   ⇒ テンプレートではない、セルタイプコード(tCelltype.c)を生成 
+  # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
   def gen_ep_func?
     self.class.method_defined?( :gen_ep_func_body )
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã§ããã°ããã©ã°ã¤ã³ã¯ã»ã«ã¿ã¤ãã³ã¼ããçæããªã (éå¸¸éããã³ãã¬ã¼ããçæãã)
-  #      gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã« (tCelltype.c)
+  #===  受け口関数の本体(C言語)を生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #     このメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
+  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル (tCelltype.c)
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -130,55 +113,50 @@
 #  end
 
-  #===  åãå£é¢æ°ã® preamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã preamble é¨ã«åºåãã
-  #      gen_cdl_file ã®ä¸­ã§ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の preamble (C言語)を生成する
+  #     必要なら preamble 部に出力する
+  #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def gen_preamble( file, b_singleton, ct_name, global_ct_name )
-    # ããã©ã«ãã§ã¯ä½ãåºåããªã
-  end
-
-  #===  åãå£é¢æ°ã® postamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã postamble é¨ã«åºåãã
-  #      gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+    # デフォルトでは何も出力しない
+  end
+
+  #===  受け口関数の postamble (C言語)を生成する
+  #     必要なら postamble 部に出力する
+  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def gen_postamble( file, b_singleton, ct_name, global_ct_name )
-    # ããã©ã«ãã§ã¯ä½ãåºåããªã
-  end
-
-  #=== gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«æ°ããã»ã«ãçæããã
-  # ã©ã®ã»ã«ã¿ã¤ããã¯ cell.get_celltype ã§åãã
+    # デフォルトでは何も出力しない
+  end
+
+  #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
+  # どのセルタイプかは cell.get_celltype で分かる
   #
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def new_cell cell
-    # ããã©ã«ãã§ã¯ä½ãããªã
-  end
-
-### ãã©ã°ã¤ã³å¼æ°ã®è§£é ###
+    # デフォルトでは何もしない
+  end
+
+### プラグイン引数の解釈 ###
   def parse_plugin_arg
     arg = @plugin_arg_str.dup
 
-    # æ¹è¡ãæ¶ã
+    # 改行を消す
     arg.gsub!( /\\\n/, "" )
 
     while arg != ""
 
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
-      #  è­å¥å­åå¾
+      #  識別子取得
       if arg =~ /\A[a-zA-Z_]\w*/ then
         ident = $~.to_s    # 
@@ -189,5 +167,5 @@
       end
       
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
@@ -199,37 +177,37 @@
       end
 
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
-      # å³è¾ºæå­å
-      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || ã«ã [,$] ã«ãã§ããªãã£ã
+      # 右辺文字列
+      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
         rhs = $1
         remain = $'
       # elsif arg =~ /\A(.*?)\s*$/ then
-      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || ã«ã [,$] ã«ãã§ããªãã£ã
+      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
         rhs = $1
         remain = $'
@@ -237,5 +215,5 @@
         rhs = $1
         remain = $'
-        # åã®ç©ºç½èª­ã¿é£ã°ã
+        # 前の空白読み飛ばす
         rhs.sub!( /\A\s*(.*)\s*\z/, '\1')
       elsif arg =~ /\A(.*?)\s*\z/ then
@@ -247,14 +225,14 @@
       end
 
-      # 0æå­ã®æå­åã to_sym ããã¨ä¾å¤çºçããã®ã§ç©ºç½æå­ã¨ãã
+      # 0文字の文字列を to_sym すると例外発生するので空白文字とする
       if rhs == "" then
         rhs = " "
       end
 
-      arg = remain         # arg ã®æ®ãã®é¨å
-      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # åã®ç©ºç½èª­ã¿é£ã°ã
-
-      # \ ãå¤ã
-      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ããã§ $' ãå¤ãããã¨ã«æ³¨æï¼
+      arg = remain         # arg の残りの部分
+      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
+
+      # \ を外す
+      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意！
       # print "parse_plugin_arg:  #{ident} #{rhs}\n"
       @plugin_arg_list[ ident ] = rhs
@@ -265,9 +243,9 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ°ããã§ãã¯ãã
-  # @plugin_arg_check_proc_tab ã«å¾ã£ã¦ãã©ã°ã¤ã³å¼æ°ããã§ãã¯ããã
-  # å¤ãç¨æ³ï¼å­ã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ãããå¼æ°è­å¥å­ãæ­£ããããã§ãã¯ãã
-  #ident:: string: å¼æ°è­å¥å­
-  #rhs:: string: å³è¾ºæå­å
+  #=== プラグイン引数をチェックする
+  # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
+  # 古い用法：子クラスでオーバーライドし、引数識別子が正しいかチェックする
+  #ident:: string: 引数識別子
+  #rhs:: string: 右辺文字列
   def check_plugin_arg( ident, rhs )
 
@@ -294,5 +272,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã®ã¡ãã»ã¼ã¸åºå
+  #=== プラグインのメッセージ出力
   def print_msg( msg )
     if @b_silent == true then
@@ -302,5 +280,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° silent
+  #=== プラグイン引数 silent
   def set_silent rhs
     if rhs == "true" || rhs == nil then
@@ -310,11 +288,11 @@
 end
 
-#== åºåæå­åã utf-8 ããåºåãã¡ã¤ã«ã« convert ãã
-# tecsgen ã®ã½ã¼ã¹ã³ã¼ãã¯ utf-8 ã§è¨è¿°ããã¦ãã
-# ããããåºåãã¡ã¤ã«ã®æå­ã³ã¼ãã«å¤æãã¦åºåãã
+#== 出力文字列を utf-8 から出力ファイルに convert する
+# tecsgen のソースコードは utf-8 で記述されている
+# これを、出力ファイルの文字コードに変換して出力する
 #
-# generate.rb ã§åºåãããã®ã¯ message.rb ã§å¤æãã¦ãã
-# generate.rb ã§åºåãããã®ã¯ APPFile ã¯ã©ã¹ãä½¿ç¨ãã¦ãã
-# mikan: CFile ã§åºåãããã®ã« factory ã§è¿½è¨ã§ããªã (cdl ãã¡ã¤ã«ã®å ´åãè¿½è¨ã§ãã¦ãæå³ããªã)
+# generate.rb で出力するものは message.rb で変換している
+# generate.rb で出力するものは APPFile クラスを使用している
+# mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
 class CFile
   def self.open( path, mode )
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb	(revision 389)
@@ -6,52 +6,37 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== ãã©ã°ã¤ã³ãã­ã¼ãããå´ã®ã¢ã¸ã¥ã¼ã«
+#== プラグインをロードする側のモジュール
 # @@loaded_plugin_list:: {Symbol=>Integer}
 module PluginModule
@@ -59,13 +44,13 @@
   @@loaded_plugin_list = {}
 
-  #=== ãã©ã°ã¤ã³ãã­ã¼ããã
+  #=== プラグインをロードする
   # return:: PluginClass
-  # V1.4.1 ã¾ã§ return:: true : æåã false : å¤±æ
+  # V1.4.1 まで return:: true : 成功、 false : 失敗
   #
-  # #{plugin_name}.rb ãã­ã¼ãããplugin_name ã¯ã©ã¹ã®ãªãã¸ã§ã¯ããçæããï¼
-  # plugin_name ã MultiPlugin ã®å ´åãget_plugin ã«ãããsuperClass ã®ãã©ã°ã¤ã³ãªãã¸ã§ã¯ããã­ã¼ãããï¼
+  # #{plugin_name}.rb をロードし、plugin_name クラスのオブジェクトを生成する．
+  # plugin_name が MultiPlugin の場合、get_plugin により、superClass のプラグインオブジェクトをロードする．
   #
-  # ãã§ã«ã­ã¼ãããã¦ãããã®ã¯ãéè¤ãã¦ã­ã¼ãããªã
-  # load æã®ä¾å¤ã¯ãã®ã¡ã½ããã®ä¸­ã§ã­ã£ããããã¦ false ãè¿ããã
+  # すでにロードされているものは、重複してロードしない
+  # load 時の例外はこのメソッドの中でキャッチされて false が返される
   def load_plugin( plugin_name, superClass )
 
@@ -77,5 +62,5 @@
           print( "load '#{plugin_name}.rb'\n" )
         end
-        # "#{plugin_name}.rb" ãã­ã¼ãï¼ã·ã¹ãã ç¨ã§ã¯ãªãã®ã§ãfatal ã¨ã©ã¼ã«ããªãï¼
+        # "#{plugin_name}.rb" をロード（システム用ではないので、fatal エラーにしない）
         if require_tecsgen_lib( "#{plugin_name}.rb", false ) == false then
           cdl_error( "P2001 $1.rb : fail to load plugin" , plugin_name )
@@ -108,11 +93,11 @@
       return nil
     end
-    # ããã¸ã¯æ¥ãªã
+    # ここへは来ない
     return nil
   end
 
-  #=== ãã©ã°ã¤ã³ã® gen_cdl_file ãå¼ã³ãã¦ cdl ãã¡ã¤ã«ãçæãããè§£éãè¡ã
+  #=== プラグインの gen_cdl_file を呼びして cdl ファイルを生成させ、解釈を行う
   def generate_and_parse plugin_object
-    if plugin_object == nil     # ãã©ã°ã¤ã³ã®ã­ã¼ãã«å¤±æãã¦ããï¼æ¢ã«ã¨ã©ã¼ï¼
+    if plugin_object == nil     # プラグインのロードに失敗している（既にエラー）
       return
     end
@@ -123,6 +108,6 @@
     elsif @@loaded_plugin_list[ plugin_name ] == nil then
       #raise "#{plugin_name} might have different name "
-      ## ãã©ã°ã¤ã³ã®ãã¡ã¤ã«åã¨ããã©ã°ã¤ã³ã®ã¯ã©ã¹åãç¸éããå ´å
-      #MultiPlugin ã® get_plugin ã§è¿ãããã±ã¼ã¹ã§ã¯ nil ã«ãªã£ã¦ãã
+      ## プラグインのファイル名と、プラグインのクラス名が相違する場合
+      #MultiPlugin の get_plugin で返されたケースでは nil になっている
       @@loaded_plugin_list[ plugin_name ] = 0
     end
@@ -157,6 +142,6 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã CDL ã® POST ã³ã¼ããçæ
-  # tmp_plugin_post_code.cdl ã¸ã®åºå
+  #=== プラグインが CDL の POST コードを生成
+  # tmp_plugin_post_code.cdl への出力
   def self.gen_plugin_post_code file
     dbgPrint "PluginModule #{@@loaded_plugin_list}\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb	(revision 389)
@@ -6,63 +6,45 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# mikan ruby ã® symbol ã¨æå­åã®ä½¿ãåããã©ããã¦ããã¾ããããªããã¨ãæã
-ããã®ã§ name.to_sym ãå
-¥ãããã¨ã«ãã
+# mikan ruby の symbol と文字列の使い分けがどうしてもうまくいかないことが時々あるので name.to_sym を入れることにした
 
 #== Node
 #
-# Node ã®ç´æ¥ã®å­ã¯ã©ã¹ï¼ C_EXP, Type, BaseVal, BDNode(ã»ã¨ãã©ã®ãã®ã¯ BDNode ã®å­ã¯ã©ã¹)
-# Node ã« (BDNodeã«ã) å
-¥ããªããã®: Token, Import, Import_C, Generate
+# Node の直接の子クラス： C_EXP, Type, BaseVal, BDNode(ほとんどのものは BDNode の子クラス)
+# Node に (BDNodeにも) 入らないもの: Token, Import, Import_C, Generate
 #
-# owner ãæããªããã®ã Node ã¨ãªã
-# ã¨ã©ã¼ã¯ãcdl_error ãéãã¦å ±åãã (æå³è§£æãæ§æè§£æå¾ã«è¡ãããå ´åã«ã¯ãè¡çªå·ãæ­£ããåºåã§ãã
+# owner を持たないものが Node となる
+# エラーは、cdl_error を通じて報告する (意味解析が構文解析後に行われる場合には、行番号が正しく出力できる
 # 
 
@@ -74,18 +56,18 @@
   end
 
-  #=== ã¨ã©ã¼ãåºåãã
+  #=== エラーを出力する
   def cdl_error( message, *arg )
     Generator.error2( @locale, message, *arg )
   end
 
-  #=== ã¨ã©ã¼ãåºåãã
-  #locale:: Array(locale info) : æ§æè§£æä¸­ã¯ç¡è¦ããã
+  #=== エラーを出力する
+  #locale:: Array(locale info) : 構文解析中は無視される
   def cdl_error2( locale, message, *arg )
     Generator.error2( locale, message, *arg )
   end
 
-  #=== ã¨ã©ã¼ãåºåãã
+  #=== エラーを出力する
   #locale:: Array(locale info)
-  # æ§æè§£æä¸­ cdl_error2 ã§ã¯ locale ãç¡è¦ããããããå¥ã« locale ãåºåãã
+  # 構文解析中 cdl_error2 では locale が無視されるため、別に locale を出力する
   def cdl_error3( locale, message, *arg )
     Generator.error(  message, *arg )
@@ -93,22 +75,20 @@
   end
 
-  #=== ã¦ã©ã¼ãã³ã°åºåãã
+  #=== ウォーニング出力する
   def cdl_warning( message, *arg )
     Generator.warning2( @locale, message, *arg )
   end
 
-  #=== ã¦ã©ã¼ãã³ã°åºåãã
+  #=== ウォーニング出力する
   def cdl_warning2( locale, message, *arg )
     Generator.warning2( locale, message, *arg )
   end
 
-  #=== æ
-å ±ãè¡¨ç¤ºãã
+  #=== 情報を表示する
   def cdl_info( message, *arg )
     Generator.info2( @locale, message, *arg )
   end
 
-  #=== æ
-å ±ãè¡¨ç¤ºãã
+  #=== 情報を表示する
   def cdl_info2( locale, message, *arg )
     Generator.info2( locale, message, *arg )
@@ -128,11 +108,10 @@
 end
 
-#== åæ¹å Node (Bi Direction Node)
+#== 双方向 Node (Bi Direction Node)
 #
-#  Node ã®å­ã¯ã©ã¹
-#  owner Node ããåç
-§ããã¦ãããã® (owner ã¸ã®ãªã³ã¯ãåãåºãã)
+#  Node の子クラス
+#  owner Node から参照されているもの (owner へのリンクも取り出せる)
 #
-#  get_owner ã§å¾ããããã®
+#  get_owner で得られるもの
 #    FuncHead => Signature
 #    Decl => Namespace(const), Typedef(typedef),
@@ -140,5 +119,5 @@
 #            Struct(member), ParamDecl(parameter), FuncHead(funchead)
 #    Signature, Celltype, CompositeCelltype, Typedef => Namespace
-#,   Namespace => Namespace, Generator.class (root Namespace ã®å ´å)
+#,   Namespace => Namespace, Generator.class (root Namespace の場合)
 #    Cell => Region, CompositeCelltype(in_composite)
 #    Port => Celltype, Composite
@@ -150,12 +129,12 @@
 #    ParamList => FuncHead
 #    Expression => Namespace
-#    å¤§åã®ãã®ã¯ new_* ã¡ã½ããã§ owner Node ã«ä¼éããã
-#    ãã®ã¡ã½ãããå¼ã³åºãããã¨ãã« owner Node ãè¨é²ããã
-#    new_* ããªããã®ï¼
+#    大半のものは new_* メソッドで owner Node に伝達される
+#    そのメソッドが呼び出されたときに owner Node が記録される
+#    new_* がないもの：
 #            Decl(parameter), ParamDecl, ParamList, FuncHead, Expression 
 #
-#    Expression ã¯ãowner Node ã¨ãªããã®ãå¤ãããããæ¹é ãå°é£ã§ãããã
-#    Expression ãå®ç¾©ãããã¨ãã® Namespace ã owner Node ã¨ãã
-#    StructType ã¯ Type ã®ä¸ç¨®ãªã®ã§ owner ãæããªã
+#    Expression は、owner Node となるものが多くあるが、改造が困難であるため
+#    Expression が定義されたときの Namespace を owner Node とする
+#    StructType は Type の一種なので owner を持たない
 #
 class BDNode < Node
@@ -173,5 +152,5 @@
   end
 
-  #=== owner ãè¨­å®ãã
+  #=== owner を設定する
   def set_owner owner
     dbgPrint "set_owner: #{owner.class.name}\n"
@@ -179,7 +158,6 @@
   end
 
-  #=== owner ãå¾ã
-  # class ã®èª¬æãåç
-§
+  #=== owner を得る
+  # class の説明を参照
   def get_owner
     if @owner == nil
@@ -190,5 +168,5 @@
 end
 
-#== Namespace åãæã¤ BDNode
+#== Namespace 名を持つ BDNode
 # Namespace(Region), Signature, Celltype, CompositeCelltype, Cell
 class NSBDNode < BDNode
@@ -198,6 +176,6 @@
   end
 
-  #=== å±ãã namespace ãå¾ã
-  # owner ã namespace ã«ãã©ãçãã¾ã§ä¸ã«ãã©ã
+  #=== 属する namespace を得る
+  # owner を namespace にたどり着くまで上にたどる
   def get_namespace
     if @owner.kind_of? Namespace
@@ -206,5 +184,5 @@
       return @owner.get_namespace
     else
-      # @owner == nil ãªã "::"
+      # @owner == nil なら "::"
       if @name != "::" then
         raise "non-root namespace has no owner #{self.class.name}##{@name} #{self}"
@@ -223,5 +201,5 @@
   end
 
-  #=== NamespacePath ãå¾ã
+  #=== NamespacePath を得る
   def get_namespace_path
     return @NamespacePath
@@ -232,5 +210,5 @@
       return @import.is_imported?
     else
-      return false    # mikan: ä»® @import ã nil ã«ãªãã±ã¼ã¹ãè¿½æ±ã§ãã¦ããªã
+      return false    # mikan: 仮 @import が nil になるケースが追求できていない
     end
   end
@@ -239,8 +217,7 @@
 class NamedList
 #  @names:: {} of items
-#  @items:: [] of items : item ã® CLASS ã¯ get_name ã¡ã½ãããæã¤ãã¨ get_name ã®æ»ãå¤ã¯ Symbol ã§ãªãã¦ã¯ãªããªã
-#                         NamedList ã clone_for_composite ããå ´åã¯ãitem ã«ãã¡ã½ãããå¿
-è¦
-#  @type:: string	ã¨ã©ã¼ã¡ãã»ã¼ã¸
+#  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
+#                         NamedList を clone_for_composite する場合は、item にもメソッドが必要
+#  @type:: string	エラーメッセージ
 
   def initialize( item, type )
@@ -251,6 +228,6 @@
   end
 
-  #=== è¦ç´ ãå ãã
-  # parse ããæç¹ã§å ãããã¨(å ´æãè¨æ¶ãã)
+  #=== 要素を加える
+  # parse した時点で加えること(場所を記憶する)
   def add_item( item )
 
@@ -311,7 +288,7 @@
   end
 
-  #=== composite cell ã clone ããæã«è¦ç´ (JOIN) ã® clone ãã
+  #=== composite cell を clone した時に要素(JOIN) の clone する
   #
-  # mikan ãã®ã¡ã½ããã¯ Join ã«ç¹åããã¦ããã®ã§ NamedList ããåé¢ãã¹ã
+  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
   def clone_for_composite( ct_name, cell_name, locale )
     cl = self.clone
@@ -320,8 +297,7 @@
   end
 
-  #=== clone ããã NamedList ã¤ã³ã¹ã¿ã³ã¹ã®åç
-§ãããã®(item)ã clone
+  #=== clone された NamedList インスタンスの参照するもの(item)を clone
   #
-  # mikan ãã®ã¡ã½ããã¯ Join ã«ç¹åããã¦ããã®ã§ NamedList ããåé¢ãã¹ã
+  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
   def set_cloned( ct_name, cell_name, locale )
     items = []
@@ -385,6 +361,6 @@
 end
 
-#== é¢æ°é ­é¨
-# signature ã«ç»é²ãããé¢æ°
+#== 関数頭部
+# signature に登録される関数
 class FuncHead <BDNode
 #  @declarator:: Decl
@@ -431,13 +407,12 @@
   end
 
-  #=== FuncHead# é¢æ°ã®ååãè¿ã
+  #=== FuncHead# 関数の名前を返す
   def get_name
     return @declarator.get_name
   end
 
-  #=== FuncHead# é¢æ°ã®æ»ãå¤ã®åãè¿ã
-  # types.rb ã«å®ç¾©ããã¦ããå
-  # é¢æ°ãããã®å®ç¾©ã¨ãã¦ä¸å®å
-¨ãªå ´å nil ãè¿ã
+  #=== FuncHead# 関数の戻り値の型を返す
+  # types.rb に定義されている型
+  # 関数ヘッダの定義として不完全な場合 nil を返す
   def get_return_type
     if is_function? then
@@ -446,8 +421,7 @@
   end
 
-  #=== FuncHead# é¢æ°ã®å¼æ°ã®ãªã¹ããè¿ã
-  # ParamList ãè¿ã
-  # é¢æ°ãããã®å®ç¾©ã¨ãã¦ä¸å®å
-¨ãªå ´å nil ãè¿ã
+  #=== FuncHead# 関数の引数のリストを返す
+  # ParamList を返す
+  # 関数ヘッダの定義として不完全な場合 nil を返す
   def get_paramlist
     if is_function? then
@@ -463,30 +437,29 @@
 end
 
-#=== å®£è¨
-# @kind ã§ç¤ºãããåç¨®ã®å®£è¨
+#=== 宣言
+# @kind で示される各種の宣言
 class Decl < BDNode
 
 # @identifer:: String
-# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=ãã®ä»)
-#                set_kind ã«ã¦è¨­å®ããã
+# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
+#                set_kind にて設定される
 # @type:: ArrayType, FuncType, PtrType, IntType, StructType
 #         VoidType, FloatType, DefinedType, BoolType
 # @initializer:: constant_expression, mikan { initlist }
-# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureã®é¢æ°å®ç¾©)
+# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
 # @b_referenced:: bool
 #
-# ä»¥ä¸ã¯ã@kind ã :VAR, :ATTRIBUTE ã®ã¨ãã«æå¹
-# @rw:: bool     # å¤ãææ³ã§ã¯ attr ã«æå®å¯è½ã ã£ãï¼æ¶ãã«ã¯ generate ã®ä¿®æ­£ãå¿
-è¦ï¼
+# 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
+# @rw:: bool     # 古い文法では attr に指定可能だった（消すには generate の修正も必要）
 # @omit:: bool
-# @choice_list:: [String]  attr åæå¤ã®é¸æè¢
-# ä»¥ä¸ã¯ã@kind ã :VAR, :ATTRIBUTE, :MEMBER ã®ã¨ãã«æå¹
+# @choice_list:: [String]  attr 初期値の選択肢
+# 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
 # @size_is:: Expression or nil unless specified
-# ä»¥ä¸ã¯ã@kind ã :MEMBER ã®ã¨ãã«æå¹
+# 以下は、@kind が :MEMBER のときに有効
 # @count_is:: Expression or nil unless specified
-#             attr, var ã®å ´åãcount_is ã¯æå®ã§ããªã
+#             attr, var の場合、count_is は指定できない
 # @string:: Expression, -1 (length not specified) or nil (not specified)
 #
-# mikan  ParamDecl ã ãå¥ã«è¨­ããããMemberDecl, AttrDecl ãªã©ãåããã¹ãã(ï¼)
+# mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(？)
 
   def initialize( identifier )
@@ -518,13 +491,12 @@
   end
 
-  #== Decl ã®æå³çèª¤ãããã§ãã¯ãã
+  #== Decl の意味的誤りをチェックする
   def check
     # return nil if @type == nil
 
-    # æ§é ä½ã¿ã°ãã§ãã¯ï¼ãã¤ã³ã¿åããæ§é ä½ãåç
-§ããã¦ããå ´åã¯ãã¿ã°ã®å­å¨ããã§ãã¯ããªãï¼
+    # 構造体タグチェック（ポインタ型から構造体が参照されている場合は、タグの存在をチェックしない）
     @type.check_struct_tag @kind
 
-    # åã®ãã§ãã¯ãè¡ã
+    # 型のチェックを行う
     res = @type.check
     if res then
@@ -532,5 +504,5 @@
     end
 
-    # ä¸è¦ã®åæåå­ããã§ãã¯ãã
+    # 不要の初期化子をチェックする
     if @initializer then
       case @kind
@@ -538,7 +510,6 @@
         cdl_error( "S2003 $1: $2 cannot have initializer" , @identifier, @kind.to_s.downcase )
       when :VAR, :ATTRIBUTE, :CONSTANT
-        # p @initializer  ããã§ã¯ä»£å
-¥å¯è½ãã©ããããã§ãã¯ããªã
-        # :VAR, :ATTRIBUTE, :CONSTANT ã¯ããããã§ãã§ãã¯ãã
+        # p @initializer  ここでは代入可能かどうか、チェックしない
+        # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
         # return @type.check_init( @identifier, @initializer, @kind )
       else
@@ -558,9 +529,9 @@
   end
 
-  #== ãã¤ã³ã¿ã¬ãã«ãå¾ã
-  # æ»ãå¤ï¼
-  #   éãã¤ã³ã¿å¤æ°   = 0
-  #   ãã¤ã³ã¿å¤æ°     = 1
-  #   äºéãã¤ã³ã¿å¤æ° = 2
+  #== ポインタレベルを得る
+  # 戻り値：
+  #   非ポインタ変数   = 0
+  #   ポインタ変数     = 1
+  #   二重ポインタ変数 = 2
   def get_ptr_level
     level = 0
@@ -570,6 +541,5 @@
         level += 1
         type = type.get_referto
-#      elsif type.kind_of?( ArrayType ) then  # æ·»æ°ãªãé
-åã¯ãã¤ã³ã¿ã¨ã¿ãªã
+#      elsif type.kind_of?( ArrayType ) then  # 添数なし配列はポインタとみなす
 #        if type.get_subscript == nil then
 #          level += 1
@@ -578,6 +548,5 @@
 #          break
 #        end
-        # mikan ãã¤ã³ã¿ã®æ·»æ°ããé
-åã®ãã¤ã³ã¿ã¬ãã«ã¯ï¼ã§ããï¼
+        # mikan ポインタの添数あり配列のポインタレベルは０でよい？
       elsif type.kind_of?( DefinedType ) then
         type = type.get_type
@@ -602,5 +571,5 @@
       @type = type
     else
-      @type.set_type( type )             # èã«è¨­å®
+      @type.set_type( type )             # 葉に設定
     end
   end
@@ -744,25 +713,21 @@
 end
 
-# é¢æ°ãã©ã¡ã¼ã¿ã®å®£è¨
+# 関数パラメータの宣言
 class ParamDecl < BDNode
 
 # @declarator:: Decl:  Token, ArrayType, FuncType, PtrType
 # @direction:: :IN, :OUT, :INOUT, :SEND, :RECEIVE
-# @size:: Expr   (size_is å¼æ°)
-# @count:: Expr   (count_is å¼æ°)
-# @max:: Expr (size_is ã®ç¬¬äºå¼æ°)
+# @size:: Expr   (size_is 引数)
+# @count:: Expr   (count_is 引数)
+# @max:: Expr (size_is の第二引数)
 # @b_nullable:: Bool : nullable 
-# @string:: Expr or -1(if size not specified) ï¼string å¼æ°ï¼
+# @string:: Expr or -1(if size not specified) （string 引数）
 # @allocator:: Signature of allocator
-# @b_ref:: bool : size_is, count_is, string_is å¼æ°ã¨ãã¦åç
-§ããã¦ãã
+# @b_ref:: bool : size_is, count_is, string_is 引数として参照されている
 #
-# 1. é¢æ°åã§ãªããã¨
-# 2. ï¼æ¬¡å
-ä»¥ä¸ã®é
-åã§ãã£ã¦æãå
-å´ä»¥å¤ã®æ·»æ°ããããã¨
-# 3. in, out, ..., size_is, count_is, ... ã®éè¤æå®ããªããã¨
-# 4. ãã¤ã³ã¿ã¬ãã«ãé©åãªãã¨
+# 1. 関数型でないこと
+# 2. ２次元以上の配列であって最も内側以外の添数があること
+# 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
+# 4. ポインタレベルが適切なこと
 
   def initialize( declarator, specifier, param_specifier )
@@ -831,8 +796,6 @@
         end
       when :MAX_IS
-        # max_is ã¯ãå
-é¨çãªãã® bnf.y.rb åç
-§
-        # size_is ã§éè¤ãã§ãã¯ããã
+        # max_is は、内部的なもの bnf.y.rb 参照
+        # size_is で重複チェックされる
         @max = i[1]
       when :NULLABLE
@@ -854,6 +817,5 @@
     end
 
-    # mikan ãã¤ã³ã¿ã®é
-åï¼æ·»æ°æï¼ã®ã¬ãã«ãï¼
+    # mikan ポインタの配列（添数有）のレベルが０
     ptr_level = @declarator.get_ptr_level
 
@@ -898,5 +860,5 @@
       cdl_error( "S2014 $1 need pointer or more pointer" , @declarator.get_identifier )
     elsif ptr_level > max_level then
-      # note: æ§æè§£ææ®µéã§å®è¡ã®ãã get_current å¯
+      # note: 構文解析段階で実行のため get_current 可
       if Signature.get_current == nil || Signature.get_current.is_deviate? == false then
         cdl_warning( "W3003 $1 pointer level mismatch" , @declarator.get_identifier )
@@ -910,5 +872,5 @@
 
     if ptr_level > 0 then
-      # size_is, count_is, string ãã»ãã
+      # size_is, count_is, string をセット
       if @direction == :RECEIVE && ptr_level > 1 then
         type.get_type.set_scs( @size, @count, @string, @max, @b_nullable )
@@ -920,6 +882,5 @@
 #type.show_tree 1
 
-      # ãã¤ã³ã¿ãæãã¦ããå
-ã®ãã¼ã¿åãå¾ã
+      # ポインタが指している先のデータ型を得る
       i = 0
       t2 = type
@@ -936,5 +897,5 @@
 # p t2.is_const?
 
-      # const ä¿®é£¾ãé©åããã§ãã¯
+      # const 修飾が適切かチェック
       if @direction == :IN then
         if ! t2.is_const? then
@@ -947,5 +908,5 @@
       end
     else
-      # éãã¤ã³ã¿ã¿ã¤ã
+      # 非ポインタタイプ
       if @size != nil || @count != nil || @string != nil || @max != nil || @b_nullable then
         type.set_scs( @size, @count, @string, @max, @b_nullable )
@@ -1019,12 +980,8 @@
   end
 
-  #=== PPAllocator ãå¿
-è¦ã
-  # Transparent RPC ã®å ´å in ã§ size_is, count_is, string ã®ãããããæå®ããã¦ããå ´å oneway ã§ã¯ PPAllocator ãå¿
-è¦
-  # Transparent PC ã§ oneway ãã©ããã¯ãããã§ã¯å¤æ­ããªãã®ã§å¥éå¤æ­ãå¿
-è¦
-  # Opaque RPC ã®å ´å size_is, count_is, string ã®ãããããæå®ããã¦ããå ´åãPPAllocator ãå¿
-è¦
+  #=== PPAllocator が必要か
+  # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator が必要
+  # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断が必要
+  # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator が必要
   def need_PPAllocator?( b_opaque = false )
     if ! b_opaque then
@@ -1073,5 +1030,5 @@
 end
 
-# é¢æ°ãã©ã¡ã¼ã¿ãªã¹ã
+# 関数パラメータリスト
 class ParamList < BDNode
 # @param_list:: NamedList : item: ParamDecl
@@ -1086,5 +1043,5 @@
 
   def add_param( paramdecl )
-    return if paramdecl == nil    # æ¢ã«ã¨ã©ã¼
+    return if paramdecl == nil    # 既にエラー
 
     @param_list.add_item( paramdecl )
@@ -1096,13 +1053,12 @@
   end
 
-  #=== size_is, count_is, string ã®å¼æ°ã®å¼ããã§ãã¯
-  # å¤æ°ã¯åæ¹åç
-§å¯è½ãªãããé¢æ°é ­é¨ã®æ§æè§£éãçµãã£ãå¾ã«ãã§ãã¯ãã
+  #=== size_is, count_is, string の引数の式をチェック
+  # 変数は前方参照可能なため、関数頭部の構文解釈が終わった後にチェックする
   def check_param
     @param_list.get_items.each { |i|
-      next if i == nil                      # i == nil : ã¨ã©ã¼æ
+      next if i == nil                      # i == nil : エラー時
 
       if i.get_type.class == VoidType then
-        # åä¸ã® void åã¯ããã«ã¯ããªã
+        # 単一の void 型はここにはこない
         cdl_error( "S2027 '$1' parameter cannot be void type", i.get_name )
       end
@@ -1111,6 +1067,6 @@
       if size then
         val = size.eval_const( @param_list )
-        if val == nil then			# å®æ°å¼ã§ãªããï¼
-          # mikan å¤æ°ãå«ãå¼ï¼åä¸ã®å¤æ°ã®ã¿ OK
+        if val == nil then			# 定数式でないか？
+          # mikan 変数を含む式：単一の変数のみ OK
           type = size.get_type( @param_list )
           unless type.kind_of?( IntType ) then
@@ -1150,6 +1106,6 @@
       if count then
         val = count.eval_const( @param_list )
-        if val == nil then			# å®æ°å¼ã§ãªããï¼
-          # mikan å¤æ°ãå«ãå¼ï¼åä¸ã®å¤æ°ã®ã¿ OK
+        if val == nil then			# 定数式でないか？
+          # mikan 変数を含む式：単一の変数のみ OK
           type = count.get_type( @param_list )
           unless type.kind_of?( IntType ) then
@@ -1170,6 +1126,6 @@
       if string != -1 && string then
         val = string.eval_const( @param_list )
-        if val == nil then			# å®æ°å¼ã§ãªããï¼
-          # mikan å¤æ°ãå«ãå¼ï¼åä¸ã®å¤æ°ã®ã¿ OK
+        if val == nil then			# 定数式でないか？
+          # mikan 変数を含む式：単一の変数のみ OK
           type = string.get_type( @param_list )
           unless type.kind_of?( IntType ) then
@@ -1195,8 +1151,6 @@
   end
 
-  #=== Push Pop Allocator ãå¿
-è¦ãï¼
-  # Transparent RPC ã®å ´å (oneway ãã¤) in ã®é
-å(size_is, count_is, string ã®ããããã§ä¿®é£¾ï¼ããã
+  #=== Push Pop Allocator が必要か？
+  # Transparent RPC の場合 (oneway かつ) in の配列(size_is, count_is, string のいずれかで修飾）がある
   def need_PPAllocator?( b_opaque = false )
     @param_list.get_items.each { |i|
@@ -1212,6 +1166,6 @@
   end
 
-  #== ParamList# æå­åå
-  #b_name:: Bool: ãã©ã¡ã¼ã¿åãå«ãã
+  #== ParamList# 文字列化
+  #b_name:: Bool: パラメータ名を含める
   def to_str( b_name )
     str = "("
@@ -1236,8 +1190,8 @@
 end
 
-#== CDL ã®æå­åãªãã©ã«ãæ±ãããã®ã¯ã©ã¹
-# CDL ã®æå­åãªãã©ã«ãã®ãã®ã§ã¯ãªã
+#== CDL の文字列リテラルを扱うためのクラス
+# CDL の文字列リテラルそのものではない
 class CDLString
-  # ã¨ã¹ã±ã¼ãæå­ãå¤æ
+  # エスケープ文字を変換
   def self.escape str
     str = str.dup
@@ -1251,9 +1205,9 @@
     str.gsub!( /(\\[Xx][0-9A-Fa-f]{1,2})/, '{printf \"\\1\"}' )
     str.gsub!( /(\\[0-7]{1,3})/, '{printf \"\\1\"}' )
-    str.gsub!( /\\(.)/, "\\1" )   # mikan æªå®ç¾©ã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãå¤æãã¦ãã¾ã (gcc V3.4.4 ã§ã¯è­¦åãåºããã)
+    str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
     return str
   end
 
-  #=== CDLString#åå¾ã® " ãåãé¤ã
+  #=== CDLString#前後の " を取り除く
   def self.remove_dquote str
     s = str.sub( /\A"/, "" )
@@ -1263,12 +1217,12 @@
 end
 
-#== CDL ã®åæåå­ãæ±ãããã®ã¯ã©ã¹
-# CDL ã®åæåå­ãã®ãã®ã§ã¯ãªã
+#== CDL の初期化子を扱うためのクラス
+# CDL の初期化子そのものではない
 class CDLInitializer
-  #=== åæåå­ã®ã¯ã­ã¼ã³
-  # åæåå­ã¯ Expression, C_EXP, Array ã®ãããã
+  #=== 初期化子のクローン
+  # 初期化子は Expression, C_EXP, Array のいずれか
   def self.clone_for_composite( rhs, ct_name, cell_name, locale )
     if rhs.instance_of? C_EXP then
-      # C_EXP ã® clone ãä½ãã¨ã¨ãã«ç½®æ
+      # C_EXP の clone を作るとともに置換
       rhs = rhs.clone_for_composite( ct_name, cell_name, locale )
     elsif rhs.instance_of? Expression then
@@ -1282,9 +1236,8 @@
   end
 
-  #=== åæåå­ï¼é
-åï¼ã®ã¯ã­ã¼ã³
-  # è¦ç´ ã¯ clone_for_composite ãæã¤ãã®ã ã
+  #=== 初期化子（配列）のクローン
+  # 要素は clone_for_composite を持つものだけ
   def self.clone_for_compoiste_array( array, ct_name, cell_name, locale )
-    # "compoiste.identifier" ã®å ´å (CDL ã¨ãã¦ã¯èª¤ã)
+    # "compoiste.identifier" の場合 (CDL としては誤り)
     if array[0] == :COMPOSITE then
       return array.clone
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecs_lang.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecs_lang.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecs_lang.rb	(revision 389)
@@ -6,59 +6,44 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== è¨èªã«é¢ããå¤æ°ãè¨­å®
-# ã¡ãã»ã¼ã¸ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿ãè¡ã (èª­ã¿è¾¼ã¿ã«å¤±æããå ´åãããã©ã«ãã®æå­ã³ã¼ãã«å¤æ´ãã)
+#== 言語に関する変数を設定
+# メッセージファイルの読み込みも行う (読み込みに失敗した場合、デフォルトの文字コードに変更する)
 class TECS_LANG
-  # ããã·ã¥ã®ã¿ã°ã¯ case insensitive ã®ãããå¤§æå­ã®æå­åã¨ãã
+  # ハッシュのタグは case insensitive のため、大文字の文字列とする
   CHARSET_ALIAS = {
     "UJIS" => :eucJP,
     "UTF-8" => :utf8,
-    "EUCJP" => :eucJP,   # ä»¥ä¸ case insensitive ã«ãããã
+    "EUCJP" => :eucJP,   # 以下 case insensitive にするため
     "SJIS" => :sjis,
     "UTF8" => :utf8,
@@ -67,5 +52,5 @@
   LANG_ALIAS = {
     "C" => :en_US,
-    "EN_US" => :en_US,   # ä»¥ä¸ case insensitive ã«ãããã
+    "EN_US" => :en_US,   # 以下 case insensitive にするため
     "JA_JP" => :ja_JP
   }
@@ -75,6 +60,6 @@
   }
 
-  #=== LANG ã®ãã¼ã¹
-  #lang::String  "ja_JP.eucJP@cjknarrow", "C" ãªã©
+  #=== LANG のパース
+  #lang::String  "ja_JP.eucJP@cjknarrow", "C" など
   #RETURN:: [ :ja_JP, :eucJP, :cjknarrow ]
   def self.parse_lang( lang )
@@ -82,7 +67,6 @@
 
     lang_terri = $1.to_sym if $1 != nil && $1 != ""
-    # set_kcode_binary ã«ãããC.UTF-8 ã®ã¿ãç¹å¥æ±ãããå¿
-è¦ããªããªã£ã
-    # if lang_terri == :C then    # LANG=C.* ã¯ããã¹ã¦ 1 byte æå­ã³ã¼ãã¨ãã¦æ±ã
+    # set_kcode_binary により、C.UTF-8 のみを特別扱いする必要がなくなった
+    # if lang_terri == :C then    # LANG=C.* は、すべて 1 byte 文字コードとして扱う
     #  codeset = nil
     #  modifier = nil
@@ -94,9 +78,9 @@
   end
 
-  #=== lang, charset ã®å¥æè§£æ±ºããã³å¦¥å½æ§ã®ãã§ãã¯
-  #lang::Symbol    : :en_US, :ja_JP ãªã©
-  #charset::Symbol : :eucJP, :utf8 ãªã©
+  #=== lang, charset の別明解決および妥当性のチェック
+  #lang::Symbol    : :en_US, :ja_JP など
+  #charset::Symbol : :eucJP, :utf8 など
   #RETURN:
-  #  [ lang, charset, result ]::ããresult = false ã®å ´å lang, charset ã¯ä¸é©å
+  #  [ lang, charset, result ]::　　result = false の場合 lang, charset は不適切
   def self.resolve_alias_and_check( lang, charset )
     if LANG_ALIAS[ lang.to_s.upcase ] then
@@ -122,6 +106,6 @@
   end
 
-  #=== codepage ãåãåºã
-  #codepage ã¯3ï½5æ¡ã®æ´æ°ã¨ãã¦ä»®å®
+  #=== codepage を取り出す
+  #codepage は3～5桁の整数として仮定
   def self.get_win_codepage
     cmd_pipe = IO.popen('cmd /c chcp','r')
@@ -132,5 +116,5 @@
   end
 
-  #=== codepage ãã LANG ã®è¨­å®æå­åã«å¤æ
+  #=== codepage から LANG の設定文字列に変換
   def self.codepage_to_lang cp
     if cp == "932" then
@@ -141,16 +125,16 @@
   end
 
-  #=== è¨èªãæå­ã³ã¼ãã«é¢ããå¤æ°ãè¨­å®
-  # ä»¥ä¸ã®é ã«ãã§ãã¯ãããä¸çªæå¾ã«è¨­å®ãããå¤ãæ¡ç¨ããã
-  #   ã»ããã©ã«ã
-  #   ã»codepage  (exerb çã§ TERM æªè¨­å®ã¾ãã¯ TERM=cygwin ã®å ´åã®ã¿)
-  #   ã»LANG ç°å¢å¤æ°
-  #   ã»TECSGEN_LANG ç°å¢å¤æ°
-  #   ã»TECSGEN_FILE_LANG ç°å¢å¤æ° (ãã¡ã¤ã«ã®æå­ã³ã¼ãã®ã¿)
-  #   ã»-k ãªãã·ã§ã³ (ãã¡ã¤ã«ã®æå­ã³ã¼ãã®ã¿)
+  #=== 言語、文字コードに関する変数を設定
+  # 以下の順にチェックされ、一番最後に設定された値が採用される
+  #   ・デフォルト
+  #   ・codepage  (exerb 版で TERM 未設定または TERM=cygwin の場合のみ)
+  #   ・LANG 環境変数
+  #   ・TECSGEN_LANG 環境変数
+  #   ・TECSGEN_FILE_LANG 環境変数 (ファイルの文字コードのみ)
+  #   ・-k オプション (ファイルの文字コードのみ)
   def self.set_lang_var
 
     if $IN_EXERB && ( ENV[ 'TERM' ] == nil || ENV[ 'TERM' ] == "cygwin" ) then
-      # exerb çã§ç«¯æ« cygwin ã®æã¯ codepage ã®ã¿ãè¦ã
+      # exerb 版で端末 cygwin の時は codepage のみを見る
       cp = get_win_codepage
       lang = codepage_to_lang cp
@@ -160,6 +144,6 @@
 
     elsif ENV[ 'LANG' ]then
-      # é exerb çã§ã¯ LANG ç°å¢å¤æ°ãè¦ã
-      # cygwin console ã§ã¯ codepage ã«å¾ã£ã¦åºåããæ¹ãå¹³åãªãã
+      # 非 exerb 版では LANG 環境変数を見る
+      # cygwin console では codepage に従って出力した方が平和なため
 
       $LANG_FILE, $CHARSET_FILE, *dum = self.parse_lang( ENV[ 'LANG' ] )
@@ -181,5 +165,5 @@
   end
 
-  #=== -k ãªãã·ã§ã³ãããã¡ã¤ã«ç¨ã®è¨èªãæå­ã³ã¼ãå¤æ°ãè¨­å®
+  #=== -k オプションからファイル用の言語、文字コード変数を設定
   def self.set_lang_by_option
     if $kcode == nil
@@ -211,10 +195,9 @@
   end
 
-  #=== Kconv ã¯ã©ã¹ç¨ã®å¤æ°ãè¨­å®
-  # è¨èªæ
-å ±ãã Kconv ã«é¢ããå¤æ°ãè¨­å®
+  #=== Kconv クラス用の変数を設定
+  # 言語情報から Kconv に関する変数を設定
   def self.set_kconv_var
 
-    # æå­ã³ã¼ãã®è¨­å®
+    # 文字コードの設定
     case $CHARSET_FILE           # string: "EUC" | "SJIS" | "NONE" | "UTF8"
     when :eucJP
@@ -251,13 +234,13 @@
     end
 
-    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  ãã®ãã¡ã¤ã«ã®æå­ã³ã¼ãï¼ãªãã·ã§ã³ã§ã¯ãªãå®æ°ï¼
+    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード（オプションではなく定数）
     $KCONV_TECSGEN = Kconv::UTF8 # const: 
-    set_kcode $KCODE_TECSGEN     # ãã®ãã¡ã¤ã«ã®æå­ã³ã¼ããè¨­å®
-  end
-
-  #=== ä¸æçã« KCODE ã BINARY ã«å¤æ´ãã
-  # EUC ã UTF8 ã§èª­ã¿è¾¼ãã å ´åã«æå­åºåããèª¤ãåé¡ã®å¯¾å¿
-  # ã³ã¡ã³ãã®èª­ã¿é£ã°ããèª¤ãç¹ãåé¡
-  # ãã ããSJIS ã®å ´åã¯ãã¨ã¹ã±ã¼ãæå­ã®åé¡ããããããå¤æ´ããªã
+    set_kcode $KCODE_TECSGEN     # このファイルの文字コードを設定
+  end
+
+  #=== 一時的に KCODE を BINARY に変更する
+  # EUC を UTF8 で読み込んだ場合に文字区切りを誤る問題の対応
+  # コメントの読み飛ばしを誤る点が問題
+  # ただし、SJIS の場合は、エスケープ文字の問題があるため、変更しない
   def self.set_kcode_binary
 
@@ -273,6 +256,5 @@
   end
 
-  #=== ä¸æçãªã KCODE ã®å¤æ´ãå
-ã«æ»ã
+  #=== 一時的なあ KCODE の変更を元に戻す
   def self.reset_kcode
     set_kcode $KCODE_BACK
@@ -280,10 +262,10 @@
 
   #####
-  # $LANG_FILE        è¨èª (C ã¯ en_US ã«å¤æããã)
-  # $LANG_CONSOLE     è¨èª (C ã¯ en_US ã«å¤æããã)
-  # $CHARSET_FILE     ãã¡ã¤ã«ã®æå­ã³ã¼ã
-  # $CHARSET_CONSOLE  ã³ã³ã½ã¼ã«æå­ã³ã¼ã
-
-  # ããã©ã«ãã®è¨­å®ï¼æ­£è¦åæ¸ã¿ã®ãã¨ï¼
+  # $LANG_FILE        言語 (C は en_US に変換される)
+  # $LANG_CONSOLE     言語 (C は en_US に変換される)
+  # $CHARSET_FILE     ファイルの文字コード
+  # $CHARSET_CONSOLE  コンソール文字コード
+
+  # デフォルトの設定（正規化済みのこと）
   $LANG_FILE_DEFAULT  = :en_US
   $CHARSET_FILE_DEFAULT = nil
@@ -296,11 +278,11 @@
   $CHARSET_CONSOLE = $CHARSET_CONSOLE_DEFAULT
 
-  # -k ã§æå®å¯è½ãªã³ã¼ã
+  # -k で指定可能なコード
   $CODE_TYPE_ARRAY = [ "euc", "sjis", "none", "utf8" ]
 
-  # è¨èªãæ±ºå®ãã
+  # 言語を決定する
   self.set_lang_var
 
-  # è¨èªãã³ã¼ãã®ãã§ãã¯ã¨æ­£è¦å
+  # 言語、コードのチェックと正規化
   lang_file, charset_file, res =
     self.resolve_alias_and_check( $LANG_FILE, $CHARSET_FILE )
@@ -316,5 +298,5 @@
   end
 
-  # ã¡ãã»ã¼ã¸ã¢ã¸ã¥ã¼ã«ãã­ã¼ã
+  # メッセージモジュールをロード
   if require_tecsgen_lib( "tecslib/messages/messages_console_#{lang_console}.rb", false ) == false then
     require_tecsgen_lib( "tecslib/messages/messages_console_#{$LANG_CONSOLE_DEFAULT}.rb" )
@@ -330,5 +312,5 @@
   end
 
-  # Kconv ã¯ã©ã¹ã®ããã®å¤æ°ãè¨­å®
+  # Kconv クラスのための変数を設定
   self.set_kconv_var 
 
@@ -337,5 +319,5 @@
   dbgPrint "Ruby19_File_Encode=#{$Ruby19_File_Encode}\n"
 
-  #=== åä½ãã¹ãå®è¡
+  #=== 単体テスト実行
   if $unit_test then
     print "unit test: set_lang_var\n"
@@ -350,6 +332,6 @@
 end
 
-#= Console ã¯ã©ã¹
-# æå­ã³ã¼ããå¤æãã
+#= Console クラス
+# 文字コードを変換する
 class Console
   def self.print str
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -56,8 +41,8 @@
 class TECSGEN
 
-  @@b_post_coded = false     # ãã¹ãã³ã¼ãçæéå§å¾ true
-
-  #=== import ãã¹ (-I) ãæ«å°¾ã«è¿½å 
-  # æ¢ã«ç»é²æ¸ã¿ã§ããã°ãè¿½å ããªã
+  @@b_post_coded = false     # ポストコード生成開始後 true
+
+  #=== import パス (-I) を末尾に追加
+  # 既に登録済みであれば、追加しない
   def self.add_import_path path
     if $import_path.index( path ) == nil then
@@ -67,7 +52,7 @@
   end
 
-  #=== EXEB çã®ãã¹ã®èª¿æ´
-  # ç°å¢å¤æ° TECSPATH ã cygwin ã¹ã¿ã¤ã«ã ã¨ãexerb çã§ã¯æ±ããªã
-  # $import_path ã¨ $TECSPATH ãèª¿æ´ãã
+  #=== EXEB 版のパスの調整
+  # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
+  # $import_path と $TECSPATH を調整する
   def self.adjust_exerb_path
     if $IN_EXERB then
@@ -76,5 +61,5 @@
       paths = []
       $import_path.each{ |path|
-        # cygpath ã¯ '..' ãç°¡ç´ãã¦ãã¾ãã®ã§ãnew_tecspath ã§ç½®æãã
+        # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
         # paths << cygpath( path, path )
         paths << path.sub( pattern, new_tecspath )
@@ -87,7 +72,7 @@
   end
 
-  #=== $(TECSPATH) ã¸ã®ç½®æ
-  #path::String   : ENV[ 'TECSPATH' ] ã«ä¸è´ããé¨åãããã°ã "$(TECSPATH)" ã«ç½®æ
-  #b_global::Bool : true ãªã gsub ã§ç½®æãfalse ãªã sub ã§ç½®æ
+  #=== $(TECSPATH) への置換
+  #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
+  #b_global::Bool : true なら gsub で置換。false なら sub で置換
   def self.subst_tecspath( path, b_global = false )
     tp = $tecspath.dup
@@ -104,7 +89,7 @@
   end
 
-  #=== path ã¯çµ¶å¯¾ãã¹ã?
+  #=== path は絶対パスか?
   #path:: String   :
-  # '/' ã¾ãã¯ '$' ã§å§ã¾ãå ´åãçµ¶å¯¾ãã¹ã¨å¤å®ãã
+  # '/' または '$' で始まる場合、絶対パスと判定する
   def self.is_absolute_path?( path )
     pa = path[0..0]; pa2 = path[0..1]
@@ -118,5 +103,5 @@
   end
 
-  #=== tecsgen ã®ããã©ã«ããè¨­å®
+  #=== tecsgen のデフォルトを設定
   def self.set_default_config
     Makefile::set_default_config
@@ -124,8 +109,7 @@
 
   ###
-  #== Makefile.templ ã®åºåå
-å®¹ãè¿½å ãå¤æ´ããããã®æä½
+  #== Makefile.templ の出力内容を追加、変更するための操作
   module Makefile
-    # åºå®ããã¦ããå¤æ°(add_var ã§å¤æ´ã§ããªã)
+    # 固定されている変数(add_var で変更できない)
     @@fixed_vars = { :INCLUDES => nil, :DEFINES => nil, :TARGET_BASE => nil, :BASE_DIR => nil }
     @@config_mode = false
@@ -142,11 +126,11 @@
     @@lines = []
 
-    #=== OTHER_OBJS ã«è¿½å ãã
+    #=== OTHER_OBJS に追加する
     def self.add_obj obj
       @@objs << obj
     end
-    #=== è¿½å ããå¤æ°
-    # ãã©ã°ã¤ã³ããã¯ãããã©ã«ãå¤ãå¤æ´ã§ãã
-    # config ã«ãã
+    #=== 追加する変数
+    # プラグインからは、デフォルト値を変更できる
+    # config により
     def self.add_var( var, val, comment = nil )
       if @@fixed_vars[ var ]
@@ -161,36 +145,36 @@
       end
     end
-    #=== LDFLAGS ã«è¿½å ãã
+    #=== LDFLAGS に追加する
     def self.add_ldflag ldflag
       @@ldflags += " " + ldflag
     end
-    #=== ãµã¼ããã¹ãè¿½å ãã
-    # CFLAGS, vpath ã«è¿½å ãã
+    #=== サーチパスを追加する
+    # CFLAGS, vpath に追加する
     def self.add_search_path path
       @@search_path << path
     end
-    #=== PRE_TECSGEN_TARGET ã«è¿½å ãã
-    # PRE_TECSGEN_TARGET ã« target ãè¿½å ãã
+    #=== PRE_TECSGEN_TARGET に追加する
+    # PRE_TECSGEN_TARGET に target を追加する
     def self.add_pre_tecsgen_target target
       @@pre_tecsgen_target << pre_tecsgen_target
     end
-    #=== POST_TECSGEN_TARGET ã«è¿½å ãã
-    # POST_TECSGEN_TARGET ã« target ãè¿½å ãã
+    #=== POST_TECSGEN_TARGET に追加する
+    # POST_TECSGEN_TARGET に target を追加する
     def self.add_post_tecsgen_target target
       @@post_tecsgen_target << pre_tecsgen_target
     end
-    #=== è¿½å ããå¤æ°
+    #=== 追加する変数
     def self.add_line( line )
       @@lines << line.to_s + "\n"
     end
 
-    def self.get_objs  # Array ãè¿ã
+    def self.get_objs  # Array を返す
       return @@objs.uniq
     end
-    def self.get_vars  # Array ãè¿ã
+    def self.get_vars  # Array を返す
       if RUBY_VERSION >= '1.9' then
         return (@@vars.keys + @@vars_default.keys).sort.uniq
       else
-        # V1.8 ã§ã¯ãSymbol ã® sort ãã§ããªãã®ã§ãä¸æ¦ String ã«ç½®æãã
+        # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
         return (@@vars.keys + @@vars_default.keys).map{|s| s.to_s }.sort.uniq.map!{|s| s.to_sym }
       end
@@ -202,23 +186,23 @@
       return @@var_comments[ var ]
     end
-    def self.get_ldflags  # String ãè¿ã
+    def self.get_ldflags  # String を返す
       return @@ldflags
     end
-    def self.get_search_path  # Array ãè¿ã
+    def self.get_search_path  # Array を返す
       return @@search_path.uniq
     end
-    def self.get_pre_tecsgen_target  # Array ãè¿ã
+    def self.get_pre_tecsgen_target  # Array を返す
       return @@pre_tecsgen_target.uniq
     end
-    def self.get_post_tecsgen_target  # Array ãè¿ã
+    def self.get_post_tecsgen_target  # Array を返す
       return @@post_tecsgen_target.uniq
     end
-    def self.get_lines  # ä»å ããè¡ãå¾ã
+    def self.get_lines  # 付加する行を得る
       return @@lines.uniq
     end
 
-    #=== TECSGEN ã®ããã©ã«ãè¨­å®ãè¡ã
+    #=== TECSGEN のデフォルト設定を行う
     # Makefile 
-    # @@fixed_vars ã§å®ç¾©ããã¦ããå¤æ°ã¯ãå¤æ´ã§ãããå®æ°å®ç¾©ããã¦ãã
+    # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
     def self.set_default_config
       add_var( "TARGET", "$(TARGET_BASE).exe", "default target name"  )
@@ -241,9 +225,9 @@
 
   def syntax_analisys argv
-    # ã«ã¼ã namespace (region) ãçæ
+    # ルート namespace (region) を生成
     @root_namespace = Region.new("::")
 
-    ####  æ§æè§£æ (post ã³ã¼ããé¤ã) ####
-    # ãã¹ã¦ã® cdl ã import ãã
+    ####  構文解析 (post コードを除く) ####
+    # すべての cdl を import する
     argv.each{ |f|
       dbgPrint( "## Import: #{f}\n")
@@ -251,7 +235,7 @@
     }
 
-    # ãã¹ã¦ã®æ§æè§£éãå®äºãããã¨ã®å ±å
-    #   å®éã«ã¯ãå¾ãããã©ã°ã¤ã³ã®çæãã CDL ã®ãã¼ã¹ãè¡ããã
-    #   ã¨ã©ã¼è¡æ°ã®æ±ºå®æ¹æ³ã®å¤æ´ã®ããã«è¡ã
+    # すべての構文解釈が完了したことの報告
+    #   実際には、後からプラグインの生成する CDL のパースが行われる
+    #   エラー行数の決定方法の変更のために行う
     Generator.end_all_parse
     dbgPrint( "## End all parse (except Post Code)\n")
@@ -262,5 +246,5 @@
   # other objects (signature, celltype, typedef, etc ) are checked while syntax analisys
   def semantics_analisys_1
-    ####  æå³è§£æï¼ (post ã³ã¼ããé¤ã) ####
+    ####  意味解析１ (post コードを除く) ####
     dbgPrint( "## Creating reverse join \n")
     Cell.create_reverse_join
@@ -270,16 +254,16 @@
     Celltype.check_dynamic_join
 
-    #0 set_definition_join ã¯2åå¼ã³åºãããï¼1åç®ï¼
+    #0 set_definition_join は2回呼び出される（1回目）
     dbgPrint( "## Checking all join\n")
     @root_namespace.set_definition_join
-    # @root_namespace.set_require_join                   ### ãã£ããè¦åãããéè¤ã¨ã©ã¼ãè¦éã
-    # through ãã©ã°ã¤ã³ã§çæãããã»ã«ã«ã require ãçæã§ãã (set_definition_join ã®å¾ãã§å®æ½)
-
-    ####  post ã³ã¼ãã®çæã¨æ§æè§£æ ####
-    @@b_post_coded = true     # ãã¹ãã³ã¼ãçæéå§å¾ true
-    # å¼æ°ããªããã°ããã©ã°ã¤ã³ã®ãã¹ãã³ã¼ããåºåããªã
+    # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
+    # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
+
+    ####  post コードの生成と構文解析 ####
+    @@b_post_coded = true     # ポストコード生成開始後 true
+    # 引数がなければ、プラグインのポストコードを出力しない
     if ARGV.length > 0 then
       dbgPrint( "## Generating Post Code\n")
-      # ãã©ã°ã¤ã³ã®ãã¹ãã³ã¼ãã®åºåã¨ import
+      # プラグインのポストコードの出力と import
       tmp_file_name = "#{$gen}/tmp_plugin_post_code.cdl"
       file = nil
@@ -291,5 +275,5 @@
 
       if file then
-        # through ãã©ã°ã¤ã³ã®ãã¹ãã³ã¼ãçæ
+        # through プラグインのポストコード生成
         PluginModule.gen_plugin_post_code file
 
@@ -304,12 +288,11 @@
     end
 
-    ####  æå³è§£æï¼ (post ã³ã¼ã) ####
+    ####  意味解析１ (post コード) ####
     dbgPrint( "## Creating reverse join (for post code) \n")
     Cell.create_reverse_join
 
-    # Join ã®å®ç¾©ã®è¨­å®ã¨ãã§ãã¯
-    #0 # åæ¹åç
-§å¯¾å¿
-    #0 set_definition_join ã¯2åå¼ã³åºãããï¼2åç®ï¼  post_code ã§çæããã
+    # Join の定義の設定とチェック
+    #0 # 前方参照対応
+    #0 set_definition_join は2回呼び出される（2回目）  post_code で生成された
     dbgPrint( "## Checking all join (for cells generated by Post Code\n")
     @root_namespace.set_definition_join
@@ -317,21 +300,18 @@
 
     dbgPrint( "## Set require join\n")
-    @root_namespace.set_require_join   # mikan post ã®åã«ã
-    # ãã¹ãã³ã¼ãã§çæãããã»ã«ã® require ã®join ãçæ
-    # mikan require ã§ through ãé©ç¨ããã¦ããã¹ãã³ã¼ããå¿
-è¦ã¨ãªã£ã¦ãåºåãããªã
+    @root_namespace.set_require_join   # mikan post の前にも
+    # ポストコードで生成されたセルの require のjoin を生成
+    # mikan require で through が適用されて、ポストコードが必要となっても出力されない
   end # semantics_analisys_1
 
   def semantics_analisys_2
-    ####  æå³è§£æï¼ ####
+    ####  意味解析２ ####
     Cell.make_cell_list2
     dbgPrint( "## Set fixed join\n")
     Cell.create_reverse_require_join
-    # create_reverse_require_join ã¯ set_detinition_join ã«åãè¾¼ããã¨ãã§ããªã
-        # namespace ã«ä¾å­ããªãåºç¾é ã§è¡ã
-        # mikan through ãã©ã°ã¤ã³ãé©ç¨ãããã¹ãã³ã¼ãã«å½±é¿ãä¸ããå ´åãèæ
-®ã§ãã¦ããªã
-        # mikan post code ã«å½±é¿ã®ãããã®ã§ããã°ãæ©ãã« reverse_require_join ã®çµåãå¿
-è¦
+    # create_reverse_require_join は set_detinition_join に埋め込むことができない
+        # namespace に依存しない出現順で行う
+        # mikan through プラグインが適用されポストコードに影響を与える場合が考慮できていない
+        # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合が必要
     dbgPrint( "## Setting port reference count\n")
     @root_namespace.set_port_reference_count
@@ -340,5 +320,5 @@
     @root_namespace.check_join
 
-    # mikan ãã©ã°ã¤ã³ã§çæãããã³ã³ãã¼ãã³ãã® set_def_and_check_join
+    # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
 
     dbgPrint( "## Checking referenced but undefined cell\n")
@@ -347,5 +327,5 @@
 
   def optimize_and_generate
-    #### Region link root ãã¨ã«ãªããã£ãã¤ãºããã³çæ ####
+    #### Region link root ごとにオプティマイズおよび生成 ####
     Region.get_link_roots.each { |region|
 
@@ -369,6 +349,6 @@
       end
 
-      # ã»ã«ãä¸ã¤ããªããã°çæããªã
-      # ã»ã«ã®çæããªãå ´å
+      # セルが一つもなければ生成しない
+      # セルの生成がない場合
       if region.get_n_cells == 0 then
         if $region_list.length > 0 then
@@ -400,13 +380,12 @@
 
       dbgPrint( "## Unset optimize variables\n")
-      @root_namespace.reset_optimize   # æé©åããªã»ãããã
+      @root_namespace.reset_optimize   # 最適化をリセットする
 
       if Generator.get_n_error == 0 then
-        # ã¨ã©ã¼ãçºçãã¦ããããè¨­å®ããªã
+        # エラーが発生していたら、設定しない
         dbgPrint( "## Set cell id\n")
-        @root_namespace.set_cell_id_and_domain      # ã»ã«ã® ID ã¨ãã¡ã¤ã³æ
-å ±ãè¨­å®ï¼linkunit æ¯ã«0ããã¤ããï¼
-
-        # ã¨ã©ã¼ãçºçãã¦ããããæé©åã¯å®æ½ããªã
+        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定（linkunit 毎に0からつける）
+
+        # エラーが発生していたら、最適化は実施しない
         if ! $unopt then
           dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
@@ -416,5 +395,5 @@
 
       if $show_tree then
-        # ã¨ã©ã¼ãçºçãã¦ãã¦ãè¡¨ç¤ºï¼ã¨ã©ã¼çºçæã¯æé©åããã¦ããªãã®ã§æ³¨æï¼
+        # エラーが発生していても表示（エラー発生時は最適化されていないので注意）
         print "##### show_tree LinkRegion=#{region.get_name} #####\n"
         @root_namespace.show_tree(0)
@@ -422,5 +401,5 @@
       end
 
-      # æ§æè§£éãæå³è§£æã§ã¨ã©ã¼çºçãã¦ããããã³ã¼ãçæãããªã
+      # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
       if Generator.get_n_error != 0 then
         print_report
@@ -428,5 +407,5 @@
       end
 
-      #### ã³ã¼ãçæ ####
+      #### コード生成 ####
       begin
         dbgPrint( "## Generating: Link Region=#{@root_namespace.get_name}\n")
@@ -435,5 +414,5 @@
         @root_namespace.generate_post
       rescue
-        # éå¸¸ããã¸ã¯æ¥ãªã (generate, generate_post ã§å¦ç½®ããã)
+        # 通常ここへは来ない (generate, generate_post で処置される)
         Generator.error( "G9999 fail to generate" )
       end
@@ -453,8 +432,8 @@
     }
 
-    # update ãã
-    # APPFile ã§çæããããã¡ã¤ã«ã¯ãããå¤åãããã°ãããã§æ´æ°ãã
-    # ã³ã¼ãçææ®µéã§ã¨ã©ã¼ãçºçããã°ãæ´æ°ããªã
-    # CFile ã§çæããããã®ã¯ãæ´æ°ããã¦ãã
+    # update する
+    # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
+    # コード生成段階でエラーが発生すれば、更新しない
+    # CFile で生成されたものは、更新されている
     if Generator.get_n_error == 0 then
       begin
@@ -477,7 +456,6 @@
   def dump_tecsgen_rbdmp
     dbgPrint "dump_tecsgen_rbdmp 0:\n"
-    #### unjoin_plugin å¾ã«è¡ãå¿
-è¦ããããããã³ã¼ãçæå¾ã«ãã³ããè¡ã
-    #### Region link root ãã¨ã«ãªããã£ãã¤ãºãã¦ãã³ã ####
+    #### unjoin_plugin 後に行う必要があるため、コード生成後にダンプを行う
+    #### Region link root ごとにオプティマイズしてダンプ ####
     Namespace.get_root.unjoin_plugin
     Namespace.get_root.find_plugin 0, []
@@ -497,6 +475,6 @@
 
       dbgPrint "dump_tecsgen_rbdmp 2: Region.path_str: #{region.get_namespace_path.get_path_str}\n"
-      # ã»ã«ãä¸ã¤ããªããã°çæããªã
-      # ã»ã«ã®çæããªãå ´å
+      # セルが一つもなければ生成しない
+      # セルの生成がない場合
       if region.get_n_cells == 0 then
         # if $region_list.length > 0 then
@@ -522,13 +500,12 @@
       dbgPrint "dump_tecsgen_rbdmp 4: Region.path_str: #{region.get_namespace_path.get_path_str}\n"
       dbgPrint( "## Unset optimize variables\n")
-      @root_namespace.reset_optimize   # æé©åããªã»ãããã
+      @root_namespace.reset_optimize   # 最適化をリセットする
 
       #  if Generator.get_n_error == 0 then
-      #   # ã¨ã©ã¼ãçºçãã¦ããããããã¸ã¯æ¥ãªã
+      #   # エラーが発生していたら、ここへは来ない
          dbgPrint( "## Set cell id\n")
-        @root_namespace.set_cell_id_and_domain      # ã»ã«ã® ID ã¨ãã¡ã¤ã³æ
-å ±ãè¨­å®ï¼linkunit æ¯ã«0ããã¤ããï¼
-
-        # ã¨ã©ã¼ãçºçãã¦ããããæé©åã¯å®æ½ããªã
+        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定（linkunit 毎に0からつける）
+
+        # エラーが発生していたら、最適化は実施しない
         if ! $unopt then
           dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tecsinfo.rb	(revision 389)
@@ -6,55 +6,39 @@
 #   Copyright (C) 2017-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# TECS æ
-å ±ã»ã«ã®çæ
+# TECS 情報セルの生成
 module TECSInfo
-  # region ã¯ Link root ã®ãã¨
+  # region は Link root のこと
   def self.print_info f, region
     # p "region: "+ region.get_name.to_s
@@ -67,8 +51,6 @@
     Type.reset_print_info
 
-    # mikan å
-¨é¨çæããã®ã§ã¯ãªããregion ä¸ã®ã»ã«ã®ã»ã«ã¿ã¤ãã¨ãããããåç
-§ãããã·ã°ããã£ãã»ã«ã¿ã¤ãã«éå®ãã¦åºåãã¹ã
-    # ããããæå³è§£æå¾ã«åºåãããããããã¯å®¹æã§ã¯ãªãï¼æé©åã¨ã³ã¼ãçæã¯ããªã³ã¯ã«ã¼ããã¨ã«è¡ãããï¼
+    # mikan 全部生成するのではなく、region 下のセルのセルタイプと、そこから参照されるシグニチャ、セルタイプに限定して出力すべき
+    # しかし、意味解析後に出力するため、これは容易ではない．最適化とコード生成は、リンクルートごとに行われる．
     Namespace.print_info f, indent
     region.get_link_root.print_info f, indent
@@ -90,9 +72,8 @@
 
 class Namespace
-  # RootRegion ã¨ LinkRegion ã¯åã Region ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã§ãã
-  # å­ãã¼ã ã¹ãã¼ã¹ã¯ Namespace ã¯ã©ã¹ã®ãå­ãªã¼ã¸ã§ã³ã¯ Region ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã§ãã
-  # ããã¯ãæå³è§£ææ®µéã§å¼ã³åºãããããããªã³ã¯ã¦ããããã¨ã«åºãããããã¨ãã§ããªã
-  # åºããããã«ã¯ã2ãã¹ã«ããå¿
-è¦ããã
+  # RootRegion と LinkRegion は同じ Region クラスのオブジェクトである
+  # 子ネームスペースは Namespace クラスの、子リージョンは Region クラスのオブジェクトである
+  # これは、意味解析段階で呼び出されるため、リンクユニットごとに出しわけることができない
+  # 出しわけるには、2パスにする必要がある
   def print_info_ns_sub f, indent
     if @name == "::" then
@@ -151,5 +132,5 @@
     }
     @namespace_list.each { |ns|
-      if ns.instance_of? Namespace then   # region ãå«ããªã
+      if ns.instance_of? Namespace then   # region を含めない
         ns.print_info_ns f, indent
       end
@@ -161,5 +142,5 @@
   end
 
-  #=== Namespace# æ§é ä½ã¡ã³ãã¼ã®ãªãã»ããå®ç¾©
+  #=== Namespace# 構造体メンバーのオフセット定義
   def print_struct_define f
     f.print "\n/***** Offset of members of structures  *****/\n"
@@ -184,5 +165,5 @@
     }
     @namespace_list.each { |ns|
-      if ns.instance_of? Namespace then   # region ãå«ããªã
+      if ns.instance_of? Namespace then   # region を含めない
         ns.print_celltype_define_offset f
       end
@@ -197,5 +178,5 @@
     }
     @namespace_list.each { |ns|
-      if ns.instance_of? Namespace then   # region ãå«ããªã
+      if ns.instance_of? Namespace then   # region を含めない
         ns.print_celltype_define f
       end
@@ -210,5 +191,5 @@
     }
     @namespace_list.each { |ns|
-      if ns.instance_of? Namespace then   # region ãå«ããªã
+      if ns.instance_of? Namespace then   # region を含めない
         ns.print_call_define f
       end
@@ -223,5 +204,5 @@
     }
     @namespace_list.each { |ns|
-      if ns.instance_of? Namespace then   # region ãå«ããªã
+      if ns.instance_of? Namespace then   # region を含めない
         ns.print_entry_define f
       end
@@ -415,6 +396,5 @@
 
   def print_define_offset f
-    # intptr_t ã«ä¸åã­ã£ã¹ãããã®ã¯ 64bit çãèéãã¦ã®ãã¨ï¼ããã 32bit ã¨ãã¦ããã®ã§ 4GB ãè¶
-ããæ§é ä½ç­ã¯æ±ããªã
+    # intptr_t に一回キャストするのは 64bit 版を考量してのこと．しかし 32bit としているので 4GB を超える構造体等は扱えない
     if @n_cell_gen > 0 then
       f.print <<EOT
@@ -453,5 +433,5 @@
 // #include "#{@global_name}_tecsgen.h"   // no cell exist
 EOT
-      # çæãããªãã»ã«ã¿ã¤ã
+      # 生成されないセルタイプ
       @attribute.each{ |decl|
         f.printf "#define OFFSET_OF_%-30s  (%s)\n", "#{@global_name}_#{decl.get_name}", "0xffffffff"
@@ -641,6 +621,5 @@
         red = "(void *)0"
       end
-      # mikan åãå£é
-å
+      # mikan 受け口配列
       f.print <<EOT
 #{indent}cell nTECSInfo::tRawEntryDescriptorInfo #{@global_name}_#{port.get_name}RawEntryDescriptorInfo {
@@ -795,5 +774,5 @@
 
   def print_info f, indent
-    # Type ã® info ã¯ãæå¾ã«ã¾ã¨ãã¦åºåããã®ã§ãããã§ã¯è¨é²ããã ã
+    # Type の info は、最後にまとめて出力するので、ここでは記録するだけ
     if @@typeinfo_printed[ get_ID_str ] then
       return
@@ -821,8 +800,8 @@
 
   def print_info_post f, indent
-    if self.class.superclass == Type then     # è¦ªã¯ã©ã¹ã Type ã®å ´å types.rb ã®ã¯ã©ã¹
+    if self.class.superclass == Type then     # 親クラスが Type の場合 types.rb のクラス
       type_name = self.class.name
     else
-      type_name = self.class.superclass.name  # ctypes.rb ã®ã¯ã©ã¹ (è¦ªã¯ã©ã¹ã types.rb ã®ã¯ã©ã¹)
+      type_name = self.class.superclass.name  # ctypes.rb のクラス (親クラスが types.rb のクラス)
     end
     # p "type: #{type_name}, #{self.class.name}"
@@ -856,7 +835,7 @@
   end
 
-  #=== Type# åæå­åã®è­å¥å­å
-  #åæå­åã«å«ã¾ããè­å¥å­ã¨ãã¦ç¨ãããã¨ã®ã§ããªãæå­ãç¨ãããã¨ã®ã§ããæå­åã«ç½®ãæãã
-  # ç©ºç½ => __
+  #=== Type# 型文字列の識別子化
+  #型文字列に含まれる識別子として用いることのできない文字を用いることのできる文字列に置き換える
+  # 空白 => __
   # * => _Ptr_
   # [] => _Array_
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tool_info.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tool_info.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/tool_info.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -307,6 +292,5 @@
 
 #==  Cell_location
-  # tecscde ã®ä½ç½®æ
-å ±
+  # tecscde の位置情報
   class  Cell_location
 
@@ -335,6 +319,5 @@
 
   #==  Join_location
-  # tecscde ã®ä½ç½®æ
-å ±
+  # tecscde の位置情報
   class  Join_location
     @@join_location_list = []
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb	(revision 389)
@@ -6,63 +6,45 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--  
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#= HasType: @type ãå
-é¨ã«æã¤åã®ããã®ã¢ã¸ã¥ã¼ã«
+#= HasType: @type を内部に持つ型のためのモジュール
 #  @b_cloned::Bool  : true if @type is cloned
 #
-# ãã®ã¢ã¸ã¥ã¼ã«ã¯ DefinedType, PtrType, ArrayType ã« include ããã
-# æ¬å½ã¯ typedef ãããæã® Decl ã®è¦ç´ ã®ã¿ clone ããã°ããã®ã ããget_type, get_original_type ã§
-# åãåºãããã¨ããset_scs, set_qualifier ãããã¨ãã«ç¡æ¡ä»¶ã§ clone ãã (ç¡é§ã«ã¡ã¢ãªãä½¿ç¨ãã)
-# ãã ããclone ããã®ã¯ä¸åã®ã¿ã§ãã (äºå clone ããã¨å¥ã®åãåç
-§ãã¦ãã¾ã)
+# このモジュールは DefinedType, PtrType, ArrayType に include される
+# 本当は typedef された時の Decl の要素のみ clone すればよいのだが、get_type, get_original_type で
+# 取り出されたとき、set_scs, set_qualifier されたときに無条件で clone する (無駄にメモリを使用する)
+# ただし、clone するのは一回のみである (二回 clone すると別の型を参照してしまう)
 #
-# initialize ã§ clone ãã¦ããå
-±æããã¦ããã¨ãã« clone ãããªã
+# initialize で clone しても、共有されているときに clone されない
 #
 module HasType
@@ -71,5 +53,5 @@
   end
 
-  #=== HasType# @type ãã¯ã­ã¼ã³ãã
+  #=== HasType# @type をクローンする
   def clone_type
 #    if @b_cloned == false then
@@ -131,6 +113,6 @@
   end
 
-  #=== size_is, count_is, string ãè¨­å®
-  # æ´¾çã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ãããï¼ããã©ã«ãã§ã¯ã¨ã©ã¼ï¼
+  #=== size_is, count_is, string を設定
+  # 派生クラスでオーバーライドする（デフォルトではエラー）
   def set_scs( size, count, string, max = nil, b_nullable = false )
     str = ""
@@ -170,38 +152,31 @@
   end
 
-  #=== åããã§ãã¯
-  #    æ­£å½ãªåå®ç¾©ãã©ããããã§ãã¯ãã
+  #=== 型をチェック
+  #    正当な型定義かどうか、チェックする
   def check
-    # åã«èª¤ããããã°ãã¨ã©ã¼æå­åãè¿ã
-  end
-
-  #=== struct ã® tag ããã§ãã¯
-  #    æ­£å½ãªåå®ç¾©ãã©ããããã§ãã¯ãã
-  #kind:: Decl ã® @kind ãåç
-§
+    # 型に誤りがあれば、エラー文字列を返す
+  end
+
+  #=== struct の tag をチェック
+  #    正当な型定義かどうか、チェックする
+  #kind:: Decl の @kind を参照
   def check_struct_tag kind
-    # tag ãå­å¨ããªããã°ã¨ã©ã¼ãåºåãã
-    # é
-ååã§ã¯ãè¦ç´ ã®åãåå¸°çã«ãã§ãã¯
-    # ãã¤ã³ã¿åã§ã¯ãæãå
-ã® tag ãã§ãã¯ã¯ããªã
-    # é¢æ°åã§ã¯ãã©ã¡ã¼ã¿ãªã¹ãã®ãã¹ã¦ã«ã¤ãã¦è¡ã
-  end
-
-  #===  åæåå¯è½ããã§ãã¯
-  #     attribute ãªã©åæåå¯è½ããã§ãã¯ããï¼åã«å¯¾ãæ­£å½ãªåæåå­ãä¸ãããã¦ãããï¼
-  #ident::        string                è¢«ä»£å
-¥å¤æ°å½
+    # tag が存在しなければエラーを出力する
+    # 配列型では、要素の型を再帰的にチェック
+    # ポインタ型では、指す先の tag チェックはしない
+    # 関数型ではパラメータリストのすべてについて行う
+  end
+
+  #===  初期化可能かチェック
+  #     attribute など初期化可能かチェックする（型に対し正当な初期化子が与えられているか）
+  #ident::        string                被代入変数命
   #initialize::   Expression, Array of initializer or C_EXP
-  #               ä»£å
-¥å¤ãC_EXP ãä¸ããããã®ã¯ IntType ã®å ´åã®ã¿
+  #               代入値、C_EXP が与えられるのは IntType の場合のみ
   #kind::         symbol (:ATTRIBUTE, :VAR, :CONSTNAT )
-  #attribute::    NameList              kind == :VAR ã®ã¨ãåç
-§ã§ãã attribute
+  #attribute::    NameList              kind == :VAR のとき参照できる attribute
   #
-  #     locale ãç¬¬ä¸å¼æ°ã¨ãã¦åãã®ã¯ãä»¥ä¸ã®çç±ã«ããã
-  #     ãã®ã¡ã½ããã¯ãå¤æ°ã¸ã®ä»£å
-¥ãè¡ããããè¡ãã«å¯¾ãã¦å¼ã³åºããããã
-  #     Type ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãå¤æ°ãå®ç¾©ããããè¡ããè¨æ¶ãã¦ããã
+  #     locale を第一引数として取るのは、以下の理由による。
+  #     このメソッドは、変数への代入が行われる「行」に対して呼び出されるが、
+  #     Type クラスのインスタンスは、変数が定義された「行」を記憶している。
   #
   # STAGE: S
@@ -210,52 +185,45 @@
   end
 
-  #=== const_val ãæå®ã®åã«ã­ã£ã¹ããã
-  # æ´¾çã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ããã¦ããªãã¨ã¨ã©ã¼
+  #=== const_val を指定の型にキャストする
+  # 派生クラスでオーバーライドしていないとエラー
   def cast( const_val )
     cdl_error( "T1004 cannot cast to $1" , self.class )
   end
 
-  #=== åãä¸è´ãããã®ãã§ãã¯
-  # ååã®å­é¢ã§ãã§ãã¯ï¼
-  # typedef ãããåãå­é¢ã§ä¸è´ãè¦ããããå
-ã®åãåãã§ãååãç°ãªãã°ä¸ä¸è´ã¨ãªã
+  #=== 型が一致するかのチェック
+  # 型名の字面でチェック．
+  # typedef された型も字面で一致を見るため、元の型が同じでも型名が異なれば不一致となる
   def equal? type2
     return ( get_type_str == type2.get_type_str ) && ( get_type_str_post == type2.get_type_str_post )
   end
 
-  #=== bit size ãå¾ã
-  # IntType, FloatType ä»¥å¤ã¯0
+  #=== bit size を得る
+  # IntType, FloatType 以外は0
   def get_bit_size
     return 0
   end
 
-  #=== å
-ã®åãå¾ã
-  # typedef ãããåã®å ´åããã®å
-ã®åãè¿ã.
-  # ããä»¥å¤ã¯ãèªåèªèº«ãè¿ãï¼
-  # (DefinedType ã§ã¯æ¬ã¡ã½ããããªã¼ãã¼ã©ã¤ãããã)
+  #=== 元の型を得る
+  # typedef された型の場合、その元の型を返す.
+  # それ以外は、自分自身を返す．
+  # (DefinedType では本メソッドがオーバーライドされる)
   def get_original_type
     return self
   end
 
-  #=== å
-é¨ã«ãã¤ã³ã¿åãæã¤
-  # ãã¤ã³ã¿åãã¾ãã¯ãã¤ã³ã¿åã¡ã³ããæã¤æ§é ä½ãã¾ãã¯è¦ç´ ããã¤ã³ã¿åãæã¤é
-å
+  #=== 内部にポインタ型を持つ
+  # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つ配列
   def has_pointer?
     false
   end
 
-  #=== size_is, count_is, string æå®ããããã¤ã³ã¿ãæã¤ã
-  # size_is, count_is, string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ããããè¦ç´ ã«æã¤é
-å
+  #=== size_is, count_is, string 指定されたポインタを持つか
+  # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つ配列
   def has_sized_pointer?
     false
   end
   
-  #=== é·ãæå®ã®ãªã string ãæã¤
-  # ãªãæå®ã®ãªã string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ãããè¦ç´ ã«æã¤é
-å
+  #=== 長さ指定のない string を持つ
+  # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つ配列
   def has_unsized_string?
     false
@@ -281,5 +249,5 @@
     @type_name = type_name
 
-    # mikan type_name ã path ã«ãªã£ã¦ããªãããæ«å®
+    # mikan type_name が path になっていないため暫定
     @typedef = Namespace.find( [ type_name ] )  #1
 
@@ -317,5 +285,5 @@
   end
 
-  #=== qualifier(const, volatile) ã®è¨­å®
+  #=== qualifier(const, volatile) の設定
   def set_qualifier( qualifier )
     clone_type
@@ -338,6 +306,6 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
-    nil    # typedef ã®æ®µéã§æå³ãã§ãã¯ããã¦ãã
+  def check	# 意味的誤りがあれば、文字列を返す
+    nil    # typedef の段階で意味チェックされている
   end
 
@@ -346,22 +314,18 @@
   end
 
-  #=== å
-é¨ã«ãã¤ã³ã¿åãæã¤
-  # ãã¤ã³ã¿åãã¾ãã¯ãã¤ã³ã¿åã¡ã³ããæã¤æ§é ä½ãã¾ãã¯è¦ç´ ããã¤ã³ã¿åãæã¤é
-å
+  #=== 内部にポインタ型を持つ
+  # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つ配列
   def has_pointer?
     @type.has_pointer?
   end
 
-  #=== size_is, count_is, string æå®ããããã¤ã³ã¿ãæã¤ã
-  # size_is, count_is, string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ããããè¦ç´ ã«æã¤é
-å
+  #=== size_is, count_is, string 指定されたポインタを持つか
+  # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つ配列
   def has_sized_pointer?
     @type.has_sized_pointer?
   end
   
-  #=== é·ãæå®ã®ãªã string ãæã¤
-  # ãªãæå®ã®ãªã string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ãããè¦ç´ ã«æã¤é
-å
+  #=== 長さ指定のない string を持つ
+  # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つ配列
   def has_unsized_string?
     @type.has_unsized_string?
@@ -383,5 +347,5 @@
 class VoidType < Type
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
@@ -408,5 +372,5 @@
 class BoolType < Type
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
@@ -458,5 +422,5 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
@@ -466,16 +430,14 @@
     if val.instance_of?( Expression ) then
       val = val.eval_const2( nil, attribute )
-      # è©ä¾¡ã®çµæ C_EXP ã Array ã¨ãªãå¯è½æ§ããã
-    end
-
-    if val.instance_of? Token then    # StringVal å°å
-¥ã«ããããã¯ã Token ã¯æ¥ãªãã¯ã
-      # val ã Token ã®å ´å == ã®å³è¾ºã String ã ã¨ã¨ã©ã¼ãèµ·ãã (#198)
+      # 評価の結果 C_EXP や Array となる可能性がある
+    end
+
+    if val.instance_of? Token then    # StringVal 導入により、もはや Token は来ないはず
+      # val が Token の場合 == の右辺が String だとエラーを起こす (#198)
       cdl_error2( locale, "T1009 $1: $2: not integer" , ident, val )
       return
     elsif val.is_a? C_EXP then
-      # #192 var ã attribute ãåç
-§ããattribute ã®å³è¾ºã C_EXP ã®å ´å
-      # const ã®å³è¾ºã C_EXP ã®å ´åã
+      # #192 var が attribute を参照し、attribute の右辺が C_EXP の場合
+      # const の右辺が C_EXP の場合も
       return
     elsif val.kind_of? FloatVal then
@@ -521,8 +483,8 @@
   end
 
-  #=== IntType# æå¤§å¤ãæå°å¤ããã§ãã¯ãã¦ã¯ãªãããã
-  # ã­ã£ã¹ãæ¼ç®ãè¡ã
-  #in_val:: IntegerVal, FloatVal:  ãã®åã«ã­ã£ã¹ãããå¤
-  #from_type:: Symbol:  :IntType, :FloatType  IntType ã®å ´åã¯ãããæ°ã§ã¯ãªãããFloatType ã®å ´åã¯æå¤§å¤ã§ã¯ãªãã
+  #=== IntType# 最大値、最小値をチェックしてクリップする
+  # キャスト演算を行う
+  #in_val:: IntegerVal, FloatVal:  この型にキャストする値
+  #from_type:: Symbol:  :IntType, :FloatType  IntType の場合はビット数でクリップ、FloatType の場合は最大値でクリップ
   def check_and_clip( in_val, from_type = :IntType )
     bit_size = get_bit_size
@@ -533,7 +495,7 @@
     if get_max && val > get_max then
       if from_type == :IntType then
-        rval = ((1 << bit_size)-1) & val   # bit æ°ã§ã¯ãªãã
+        rval = ((1 << bit_size)-1) & val   # bit 数でクリップ
       else
-        rval = get_max                         # æå¤§å¤ã§ã¯ãªãã (FloatType)
+        rval = get_max                         # 最大値でクリップ (FloatType)
       end
       cdl_warning( "W2003 $1: too large to cast to $2, clipped($3)" , in_val, get_type_str, rval )
@@ -546,5 +508,5 @@
       if @sign == :SIGNED || @sign == nil then
         cdl_warning( "W2004 $1: too small to cast to $2, clipped($3)" , in_val, get_type_str, rval )
-      else    # @sign == :UNSIGNED || @sign == nil (char ã®å ´å)
+      else    # @sign == :UNSIGNED || @sign == nil (char の場合)
         cdl_warning( "W2005 $1: negative value for unsigned: convert to $2" , in_val, rval )
       end
@@ -558,5 +520,5 @@
     if @sign == :SIGNED || @sign == nil then
       if @bit_size == -1 then
-        bit_sz = 8   # char_t ã¯ãæç¬¦å·ã«æ±ã
+        bit_sz = 8   # char_t は、有符号に扱う
       else
         bit_sz = @bit_size
@@ -576,5 +538,5 @@
     if @bit_size == -1 then
       if @sign == nil then
-        return 255   # char_t ã¯ãç¡ç¬¦å·ã«æ±ã
+        return 255   # char_t は、無符号に扱う
       else
         bit_sz = 8
@@ -600,5 +562,5 @@
   end
 
-  #=== IntType# C è¨èªã«ãããååï¼ä¿®é£¾å­ä»ãï¼
+  #=== IntType# C 言語における型名（修飾子付き）
   def get_type_str
     str = super
@@ -620,20 +582,20 @@
 
     case @bit_size
-    when -1      # char_t å
+    when -1      # char_t 型
       if @sign == :SIGNED then
         sign = "s"
       end
       str = "#{str}#{sign}char_t"
-    when -11     # char å(obsolete)
+    when -11     # char 型(obsolete)
       str = "#{str}#{signL}char"
-    when -2      # short å
+    when -2      # short 型
       str = "#{str}#{signL}short"
-    when -3      # int å
+    when -3      # int 型
       str = "#{str}#{signL}int"
-    when -4      # long å
+    when -4      # long 型
       str = "#{str}#{signL}long"
-    when -5      # long long å
+    when -5      # long long 型
       str = "#{str}#{signL}long long"
-    when 8, 16, 32, 64, 128     # int16, int32, int64, int128 å
+    when 8, 16, 32, 64, 128     # int16, int32, int64, int128 型
       str = "#{str}#{sign}int#{@bit_size}_t"
     end
@@ -642,19 +604,17 @@
   end
 
-  #=== IntType# C è¨èªã«ãããååï¼å¾ç½®æå­åï¼
+  #=== IntType# C 言語における型名（後置文字列）
   def get_type_str_post
     ""
   end
 
-  #=== IntType#bit_size ãå¾ã
-  #    è¿ãããå¤ã¯ @bit_size ã®ä»æ§ãåç
-§
+  #=== IntType#bit_size を得る
+  #    返される値は @bit_size の仕様を参照
   def get_bit_size
     return @bit_size
   end
 
-  #=== IntType# sign ãå¾ã
-  # @sign ã®èª¬æãåç
-§
+  #=== IntType# sign を得る
+  # @sign の説明を参照
   def get_sign
     @sign
@@ -676,20 +636,19 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
 
-  # mikan Float åã® C_EXP å¯¾å¿ (generate.rb ã«ãå¤æ´å¿
-è¦)
+  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
   def check_init( locale, ident, initializer, kind, attribute = nil )
-    # åã«å¯¾ããåæå¤ã«èª¤ããããã°ãã¨ã©ã¼æå­åãè¿ã
+    # 型に対する初期値に誤りがあれば、エラー文字列を返す
     val = initializer
     if val.instance_of?( Expression ) then
       val = val.eval_const2( nil, attribute )
-      # è©ä¾¡ã®çµæ C_EXP ã Array ã¨ãªãå¯è½æ§ããã
+      # 評価の結果 C_EXP や Array となる可能性がある
     end
 
     if val.instance_of? Token then
-      # val ã Token ã®å ´å == ã®å³è¾ºã String ã ã¨ã¨ã©ã¼ãèµ·ãã
+      # val が Token の場合 == の右辺が String だとエラーを起こす
       cdl_error2( locale, "T1018 $1: $2: not number" , ident, val )
       return
@@ -774,14 +733,14 @@
 #  @members_decl:: NamedList
 #  @definition:: StructType
-#  @b_has_pointer_member:: bool : ã¡ã³ãã«ãã¤ã³ã¿åããã
-#  @b_has_sized_pointer_member:: bool : ã¡ã³ãã«ãã¤ã³ã¿åããã
-#  @b_has_unsized_string_member:: bool : ã¡ã³ãã«ãã¤ã³ã¿åããã
-#  @b_hasTag:: bool : ã¿ã°ããã
-#  @member_types_symbol:: Symbol : tag ãç¡ãæã®ã¿è¨­å® (ããä»¥å¤ã§ã¯ nil)
+#  @b_has_pointer_member:: bool : メンバにポインタ型がある
+#  @b_has_sized_pointer_member:: bool : メンバにポインタ型がある
+#  @b_has_unsized_string_member:: bool : メンバにポインタ型がある
+#  @b_hasTag:: bool : タグがある
+#  @member_types_symbol:: Symbol : tag が無い時のみ設定 (それ以外では nil)
 
   @@structtype_current_stack = []
   @@structtype_current_sp = -1
 
-  # tag ãªã struct
+  # tag なし struct
   @@no_struct_tag_num = 0
   @@no_tag_struct_list = {}
@@ -811,10 +770,10 @@
     if @b_define then
       @members_decl = NamedList.new( nil, "in struct #{@tag}" )
-      # if @tag then    ç»é²ã¿ã¤ãã³ã°ãçµããã«å¤æ´ V1.0.2.19
+      # if @tag then    登録タイミングを終わりに変更 V1.0.2.19
       #  Namespace.new_structtype( self )
       # end
     else
       @definition = Namespace.find_tag( @tag )
-      # check_struct_tag ã«ç§»ã V1.0.2.19
+      # check_struct_tag に移す V1.0.2.19
       # if @definition == nil then
       #  cdl_error( "T1021 \'$1\': struct not defined" , @tag )
@@ -841,12 +800,11 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
 
-  #=== æ§é ä½ã®ã¿ã°ããã§ãã¯
-  #  declarator ã®æç¹ã§ãã§ãã¯ãã
-  #kind:: Decl ã® @kind ãåç
-§
+  #=== 構造体のタグをチェック
+  #  declarator の時点でチェックする
+  #kind:: Decl の @kind を参照
   def check_struct_tag kind
     if @tag == nil
@@ -860,6 +818,5 @@
   end
 
-  # mikan Float åã® C_EXP å¯¾å¿ (generate.rb ã«ãå¤æ´å¿
-è¦)
+  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
   def check_init( locale, ident, initializer, kind, attribute = nil )
 
@@ -870,5 +827,5 @@
     end
 
-    # åæåå­ãå¼ã®å ´åãåï¼ã¿ã°ï¼ãä¸è´ããããã§ãã¯
+    # 初期化子が式の場合、型（タグ）が一致するかチェック
     if initializer.instance_of?( Expression ) then
       t = initializer.get_type( attribute )
@@ -906,5 +863,5 @@
 
   def end_of_parse()
-    if @members_decl == nil   # @b_define = false ã¾ãã¯ã¡ã³ãã¼ã®ãªãæ§é ä½ï¼ã¨ã©ã¼ï¼
+    if @members_decl == nil   # @b_define = false またはメンバーのない構造体（エラー）
       return
     end
@@ -932,5 +889,5 @@
       string = md.get_string
       if string == -1 then
-        # é·ãæå®ãªã
+        # 長さ指定なし
       elsif string then
         val = string.eval_const( @members_decl )
@@ -970,10 +927,10 @@
 
     if @b_hasTag then
-      # typedef struct tag StructType; ã®å½¢å¼ã®å ´å
-      # struct ã®æ¬ä½ã¯ãå¥ã«çæããã
+      # typedef struct tag StructType; の形式の場合
+      # struct の本体は、別に生成される
       return "#{str}struct #{@tag}"
 
     else
-      # typedef struct { int a; } StructType; ã®å½¢å¼ã®å ´å
+      # typedef struct { int a; } StructType; の形式の場合
       str += "struct {"
       @members_decl.get_items.each{ |i|
@@ -1026,7 +983,7 @@
   end
 
-  #=== åãæ§é ä½ãã©ãããã§ãã¯ãã
-  # tag ã®ãã§ãã¯ã¯è¡ããªã
-  # ãã¹ã¦ã®ã¡ã³ãã®ååã¨åãä¸è´ãããã¨ãç¢ºèªãã
+  #=== 同じ構造体かどうかチェックする
+  # tag のチェックは行わない
+  # すべてのメンバの名前と型が一致することを確認する
   def same? another
     md = another.get_members_decl
@@ -1118,19 +1075,18 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
-    if @type.class == ArrayType then	# é
-åãè¿ãé¢æ°
+  def check	# 意味的誤りがあれば、文字列を返す
+    if @type.class == ArrayType then	# 配列を返す関数
       return "function returning array"
-    elsif @type.class == FuncType then	# é¢æ°ãè¿ãé¢æ°
+    elsif @type.class == FuncType then	# 関数を返す関数
       return "function returning function"
     end
-    return @type.check   # é¢æ°ã® return ããåã®ãã§ãã¯
-
-    # ãã©ã¡ã¼ã¿ã®åã®ãã§ãã¯ã¯ ParamList#check_param ã§è¡ã
+    return @type.check   # 関数の return する型のチェック
+
+    # パラメータの型のチェックは ParamList#check_param で行う
   end
 
   def check_struct_tag kind
     @type.check_struct_tag kind
-    # ParamDecl ã§ããã§ãã¯ãããã®ã§ãããã§ã¯ãã§ãã¯ããªã
+    # ParamDecl でもチェックされるので、ここではチェックしない
     # @paramlist.check_struct_tag kind
   end
@@ -1149,8 +1105,8 @@
   end
 
-  #=== return type ãè¿ã
+  #=== return type を返す
   #
-  # return type ãè¿ã
-  # get_return_type ã¨ãã¹ãã ã£ã
+  # return type を返す
+  # get_return_type とすべきだった
   def get_type
     @type
@@ -1162,5 +1118,5 @@
 
   def get_type_str_post
-    # åã ããè¿ã (ä»®å¼æ°ã®ååãå«ããªã)
+    # 型だけを返す (仮引数の名前を含めない)
     @paramlist.to_str( false )
   end
@@ -1190,8 +1146,6 @@
   end
 
-  #=== Push Pop Allocator ãå¿
-è¦ãï¼
-  # Transparent RPC ã®å ´å oneway ãã¤ in ã®é
-å(size_is, count_is, string ã®ããããã§ä¿®é£¾ï¼ããã
+  #=== Push Pop Allocator が必要か？
+  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾）がある
   def need_PPAllocator?( b_opaque = false )
     if @b_oneway || b_opaque then
@@ -1202,5 +1156,5 @@
   end
 
-  #=== ãã©ã¡ã¼ã¿ã in, inout, out, send, receive ãæã¤ã
+  #=== パラメータが in, inout, out, send, receive を持つか
   def has_in?
     @has_in
@@ -1219,10 +1173,9 @@
   end
 
-  #=== å
-¥åæ¹åã®ãã©ã¡ã¼ã¿ãæã¤ã
+  #=== 入力方向のパラメータを持つか
   def has_inward?
     @has_in || @has_inout || @has_send
   end
-  #=== åºåæ¹åã®ãã©ã¡ã¼ã¿ãæã¤ã
+  #=== 出力方向のパラメータを持つか
   def has_outward?
     @has_inout || @has_out || @has_receive
@@ -1266,5 +1219,5 @@
   end
 
-  #=== Array#qualifier(const, volatile) ã®è¨­å®
+  #=== Array#qualifier(const, volatile) の設定
   def set_qualifier( qualifier )
     clone_type
@@ -1273,12 +1226,10 @@
   end
 
-  # é
-åè¦ç´ ã const ãªã const
+  # 配列要素が const なら const
   def is_const?
     @type.is_const?
   end
 
-  # é
-åè¦ç´ ã volatile ãªã volatile
+  # 配列要素が volatile なら volatile
   def is_volatile?
     @type.is_volatile?
@@ -1306,11 +1257,8 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
-    if @type.class == FuncType then		# é¢æ°ã®é
-å
+  def check	# 意味的誤りがあれば、文字列を返す
+    if @type.class == FuncType then		# 関数の配列
       return "array of function"
-    elsif @type.class == ArrayType then	# æ·»æ°ãªãé
-åã®é
-å
+    elsif @type.class == ArrayType then	# 添数なし配列の配列
       unless @type.get_subscript then
         return "subscript not specified"
@@ -1318,6 +1266,5 @@
     end
 
-    return @type.check    # é
-åè¦ç´ ã®åããã§ãã¯
+    return @type.check    # 配列要素の型をチェック
   end
 
@@ -1328,5 +1275,5 @@
   def check_init( locale, ident, initializer, kind, attribute = nil )
     if ( initializer.instance_of?( Array ) ) then
-      # è¦ç´ æ°ãæå®ããã¦ããå ´åãåæåè¦ç´ æ°ããã§ãã¯
+      # 要素数が指定されている場合、初期化要素数をチェック
       if @subscript then
         n_sub = @subscript.eval_const( nil )
@@ -1381,5 +1328,5 @@
 #  @size:: Expr, or nil if not specified
 #  @count:: Expr, or nil if not specified
-#  @string:: Expr or -1(if size not specified) ï¼string å¼æ°ï¼, or nil if not specified
+#  @string:: Expr or -1(if size not specified) （string 引数）, or nil if not specified
 
   include HasType
@@ -1398,6 +1345,5 @@
       @type = type
     else
-      @type.set_type( type )	# æå
-ã® type ãè¨­å®
+      @type.set_type( type )	# 枝先の type を設定
     end
   end
@@ -1421,5 +1367,5 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     return nil if @type == nil
     @type.check
@@ -1427,6 +1373,5 @@
 
   def check_struct_tag kind
-    if kind != :MEMBER  # æ§é ä½ã¡ã³ãã¼ã®å ´åããã¤ã³ã¿ã®å
-ã®æ§é ä½ã¿ã°ããã§ãã¯ããªã
+    if kind != :MEMBER  # 構造体メンバーの場合、ポインタの先の構造体タグをチェックしない
       @type.check_struct_tag kind
     end
@@ -1445,5 +1390,5 @@
           if ( t1.class == t2.class ) && ( t1.get_bit_size == t2.get_bit_size ) then
           elsif ( t1.kind_of?( CDefinedType) || t2.kind_of?( CDefinedType ) )&& t1.get_type_str == t2.get_type_str && t1.get_type_str_post && t2.get_type_str_post then
-            # int8_t ãªã©ããä¸æ¹ã¯ .h ã«å®ç¾©ããã¦ããã±ã¼ã¹
+            # int8_t などが、一方は .h に定義されているケース
           else
             cdl_error2( locale, "T1032 $1: incompatible pointer type" , ident )
@@ -1456,5 +1401,5 @@
         end
       elsif val.kind_of? StringVal then
-        # æå­åå®æ°
+        # 文字列定数
         # mikan L"wide string"
         if @type.get_bit_size != -1 && @type.get_bit_size != -11 then  # -1: char_t
@@ -1500,7 +1445,7 @@
     @b_nullable = b_nullable
 
-    # string ã¯æãå·¦å´ã® ptr ã«ä½ç¨ãã
+    # string は最も左側の ptr に作用する
     if @type.kind_of?( PtrType ) then
-      # ptr_level ã 2 ä»¥ä¸ã§ãããã¨ã¯ ParamDecl#initializer ã§ãã§ãã¯ããã
+      # ptr_level が 2 以上であることは ParamDecl#initializer でチェックされる
       clone_type
       @type.set_scs( nil, nil, string, nil, false )
@@ -1549,5 +1494,5 @@
   end
 
-  #=== PtrType# size_is ã®æå¤§å¤
+  #=== PtrType# size_is の最大値
   def get_max
     @max
@@ -1612,6 +1557,6 @@
 end
 
-#==  DescriptorType ã¯ã©ã¹
-# åççµåã§æ¸¡ããã¹ã¯ãªãã¿å
+#==  DescriptorType クラス
+# 動的結合で渡すデスクリプタ型
 class DescriptorType < Type
   # @sinagure_nsp::NamespacePath
@@ -1643,5 +1588,5 @@
     case kind
     when :PARAMETER
-      # å¼æ°ã¯åæåã§ããªã
+      # 引数は初期化できない
     else
       cdl_error2( locale, "T9999 Descriptor cannot be used for $1", kind)
@@ -1677,5 +1622,5 @@
 end
 
-# ä»¥ä¸åä½ãã¹ãã³ã¼ã
+# 以下単体テストコード
 if $unit_test then
   puts( "===== Unit Test: IntType ===== (types.rb)")
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/unjoin_plugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/unjoin_plugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/unjoin_plugin.rb	(revision 389)
@@ -6,57 +6,41 @@
 #   Copyright (C) 2008-2019 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# Marshal.dump ã§ä¸é½åãªäºé 
-ã¸ã®å¯¾ç­
-# Proc ã¯ _dump_data ãå®ç¾©ããã¦ããªããããå®ç¾©ããï¼
-# plugin é¢ä¿ã¯ãtecsflow ã« Plugin ã¯ã©ã¹ãå­å¨ããªããããæ¶ãã¦ããï¼
-
-# Proc ã¯ãMarshal.dump ãããã¨ãã§ããªããã _dump_data ãå®ç¾©
+# Marshal.dump で不都合な事項への対策
+# Proc は _dump_data が定義されていないため、定義する．
+# plugin 関係は、tecsflow に Plugin クラスが存在しないため、消しておく．
+
+# Proc は、Marshal.dump することができないため _dump_data を定義
 class Proc
   def _dump_data
@@ -86,5 +70,5 @@
 
     if kind_of? Expression then
-      # print   # Expression ã§ã¯ print ãå¥ã«å®ç¾©ããã¦ãã
+      # print   # Expression では print が別に定義されている
       get_elements.each{|ele|
         ele.find_plugin_1 level+1, object_list
@@ -103,5 +87,5 @@
     end
 
-    object_list.push self                 ##### ãããã return ä¸å¯
+    object_list.push self                 ##### ここから return 不可
 
     if (kind_of? Plugin) || (kind_of? HRPSVCPlugin) then
@@ -136,5 +120,5 @@
       }
     end
-    object_list.pop                       ##### ããã¾ã§ return ä¸å¯
+    object_list.pop                       ##### ここまで return 不可
   end
 end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb	(revision 389)
@@ -6,63 +6,47 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#= BaseVal æ´æ°ãæµ®åå°æ°ãªã©ã®å¤ãæ±ãã¯ã©ã¹ã®åºåºã¯ã©ã¹
+#= BaseVal 整数、浮動小数などの値を扱うクラスの基底クラス
 #
-# TECS ã® CDL ã§æ±ãå¤ã¯ãä»¥ä¸ã«åé¡ããã
-# ã»æ´æ°
-# ã»æµ®åå°æ°
-# ã»æå­å
-# ã»ãã¼ã«å¤
-# éæåï¼æ§é ä½ãé
-åï¼ã¨ C_EXP ã¯ããã§ã¯æ±ããªã
+# TECS の CDL で扱う値は、以下に分類される
+# ・整数
+# ・浮動小数
+# ・文字列
+# ・ブール値
+# 集成型（構造体、配列）と C_EXP はここでは扱わない
 #
-# ãã®ã¯ã©ã¹ã§å®ç¾©æ¸ã¿ã®æ¼ç®å­ã¯ãã¨ã©ã¼ã¨ãªã
-# åã«ããæ¼ç®å¯è½ãªå ´åãæ¼ç®å­ããªã¼ãã¼ã©ã¤ããã
+# このクラスで定義済みの演算子は、エラーとなる
+# 型により演算可能な場合、演算子をオーバーライドする
 #
 class BaseVal < Node
@@ -160,12 +144,11 @@
 end
 
-#= Pointer å¤ (IntegerVal ã® Pointer ç)
+#= Pointer 値 (IntegerVal の Pointer 版)
 #
-# ãã¤ã³ã¿å¤ã¯ãCDL ã§ç´æ¥çæããããã¨ã¯ãªã
-# æ´æ°å¤ã®ã­ã£ã¹ãæ¼ç®ã«ããçæããã
+# ポインタ値は、CDL で直接生成されることはない
+# 整数値のキャスト演算により生成される
 class PointerVal < BaseVal
-#@int_val:: IntegerVal: IntegerVal ã§ãªãã¦ã¯ãªããªã
-#@ptr_type:: PtrType: ãã¤ã³ã¿ã®æãå
-ã®å
+#@int_val:: IntegerVal: IntegerVal でなくてはならない
+#@ptr_type:: PtrType: ポインタの指す先の型
 
   def initialize( int_val, ptr_type )
@@ -175,7 +158,6 @@
   end
 
-  #=== ãã¤ã³ã¿ã®æãå
-ã®åãå¾ã
-  # PointerVal å°ç¨ã®ã¡ã½ãã
+  #=== ポインタの指す先の型を得る
+  # PointerVal 専用のメソッド
   def get_type
     @ptr_type
@@ -183,6 +165,5 @@
 
   def cast type
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       val = t.check_and_clip( @int_val, :IntType )
@@ -213,5 +194,5 @@
 end
 
-#= IntegerVal: æ´æ°å¤ãæ±ãã¯ã©ã¹
+#= IntegerVal: 整数値を扱うクラス
 class IntegerVal < BaseVal
 #@val:: Integer: value
@@ -250,5 +231,5 @@
   def / val
     if val.kind_of? FloatVal then
-      v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+      v2 = val.to_f   # to_f を2回評価しない
       if v2 == 0.0 then
         cdl_error( "V1009 / : divieded by zero"  )
@@ -257,5 +238,5 @@
       return FloatVal.new( @val.to_f / v2 )
     else
-      v2 = val.to_i   # to_i ã2åè©ä¾¡ããªã
+      v2 = val.to_i   # to_i を2回評価しない
       if v2 == 0 then
         cdl_error( "V1010 / : divieded by zero"  )
@@ -267,5 +248,5 @@
   def % val
     if val.kind_of? FloatVal then
-      v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+      v2 = val.to_f   # to_f を2回評価しない
       if v2 == 0.0 then
         cdl_error( "V1011 % : divieded by zero"  )
@@ -274,5 +255,5 @@
       return FloatVal.new( @val.to_f % v2 )
     else
-      v2 = val.to_i   # to_i ã2åè©ä¾¡ããªã
+      v2 = val.to_i   # to_i を2回評価しない
       if v2 == 0 then
         cdl_error( "V1012 % : divieded by zero"  )
@@ -360,6 +341,5 @@
   end
   def cast( type )
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       val = t.check_and_clip( @val, :IntType )
@@ -395,5 +375,5 @@
 end
 
-#= BoolVal: bool å¤ãæ±ãã¯ã©ã¹
+#= BoolVal: bool 値を扱うクラス
 class BoolVal < BaseVal
 #@val:: bool: true, false
@@ -437,6 +417,5 @@
   end
   def cast( type )
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if @val then
       val = 1
@@ -478,5 +457,5 @@
 end
 
-#= FloatVal: å®æ°å¤ãæ±ãã¯ã©ã¹
+#= FloatVal: 実数値を扱うクラス
 class FloatVal < BaseVal
 #@val:: Float
@@ -496,5 +475,5 @@
   end
   def / val
-    v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+    v2 = val.to_f   # to_f を2回評価しない
     if v2 == 0.0 then
       cdl_error( "V1017 / : divieded by zero"  )
@@ -504,5 +483,5 @@
   end
   def % val
-    v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+    v2 = val.to_f   # to_f を2回評価しない
     if v2 == 0.0 then
       cdl_error( "V1018 % : divieded by zero"  )
@@ -536,6 +515,5 @@
   end
   def cast( type )
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       val = t.check_and_clip( @val, :FloatType )
@@ -565,5 +543,5 @@
 end
 
-#= æå­åãªãã©ã«ãæ±ãã¯ã©ã¹
+#= 文字列リテラルを扱うクラス
 class StringVal < BaseVal
 #@str:: Token:
@@ -573,13 +551,12 @@
     super()
     @str = str
-    @specifier = spec   # mikan L"str" wide æå­åæªå¯¾å¿
+    @specifier = spec   # mikan L"str" wide 文字列未対応
   end
 
   #===
   #
-  # string ã® cast ã¯ã§ããªã mikan ãã¤ã³ã¿åã¸ã® cast ã¯ã§ããã¹ã
+  # string の cast はできない mikan ポインタ型への cast はできるべき
   def cast type
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       cdl_error( "V1022 string cannot cast to integer"  )
@@ -598,5 +575,5 @@
 
   def val
-    @str.to_s   # Token ã§æ±ããã¦ããåæ® (val ãåãåºã)
+    @str.to_s   # Token で扱われていた名残 (val を取り出す)
   end
 end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_en_US.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_en_US.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_en_US.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -58,5 +43,5 @@
 
 ###
-# ã¨ã©ã¼ã¡ãã»ã¼ã¸
+# エラーメッセージ
 @@error_message = {}
 
@@ -1073,5 +1058,5 @@
 
 ###
-# warning ã¡ãã»ã¼ã¸
+# warning メッセージ
 @@warning_message = {}
 
@@ -1184,5 +1169,5 @@
 
 ###
-# info ã¡ãã»ã¼ã¸
+# info メッセージ
 @@info_message = {}
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_ja_JP.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_ja_JP.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_console_ja_JP.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -58,791 +43,717 @@
 
 ###
-# ã¨ã©ã¼ã¡ãã»ã¼ã¸
+# エラーメッセージ
 @@error_message = {}
 
 ### C_parser.y.rb
 # B1001 need parameter name"
-@@error_message[ :"B1001" ] = "ãã©ã¡ã¼ã¿åãå¿
-è¦ã§ã" 
+@@error_message[ :"B1001" ] = "パラメータ名が必要です" 
 
 # B1002 while open or reading \'$1\'"
-@@error_message[ :"B1002" ] = "\'$1\' ã®ãªã¼ãã³ã¾ãã¯èª­ã¿è¾¼ã¿ã«å¤±æãã¾ãã" 
+@@error_message[ :"B1002" ] = "\'$1\' のオープンまたは読み込みに失敗しました" 
 
 # B1003 Unexpected EOF"
-@@error_message[ :"B1003" ] = "äºæããªã EOF ã§ã"
+@@error_message[ :"B1003" ] = "予期しない EOF です"
 
 # B1004 syntax error near \'$1\'"
-@@error_message[ :"B1004" ] = "\'$1\' ä»è¿ã®æ§æã¨ã©ã¼ã§ã"
+@@error_message[ :"B1004" ] = "\'$1\' 付近の構文エラーです"
 
 ### ctypes.rb
 # C1001 $1: mismatch, suitable for integer types"
-@@error_message[ :"C1001" ] = "$1: æ´åãã¦ãã¾ãã, ããã¯æ´æ°åã«é©ãã¦ãã¾ã"
+@@error_message[ :"C1001" ] = "$1: 整合していません, それは整数型に適しています"
 
 # C1002 $1 not compatible with previous one $2"
-@@error_message[ :"C1002" ] = "$1 ã¯ããä»¥åã®ãã®ã§ãã $2 ã¨ä¸¡ç«ãã¾ãã"
+@@error_message[ :"C1002" ] = "$1 はそれ以前のものである $2 と両立しません"
 
 # C1003 $1 & $2 incompatible  (\'long double\' not support)"
-@@error_message[ :"C1003" ] = "$1 åã³ $2 ã¯ä¸¡ç«ãã¾ãã (\'long double\' ã¯æªãµãã¼ã)"
+@@error_message[ :"C1003" ] = "$1 及び $2 は両立しません (\'long double\' は未サポート)"
 
 # C1004 $1: qualifier respecified. previous one: $2"
-@@error_message[ :"C1004" ] = "$1: ä¿®é£¾å­ãååº¦æå®ããã¾ãã. ãã®åã®ä¿®é£¾å­: $2"
+@@error_message[ :"C1004" ] = "$1: 修飾子が再度指定されました. その前の修飾子: $2"
 
 ### expression.rb
 # E1001 $1: not found"
-@@error_message[ :"E1001" ] = "$1: è¦ã¤ããã¾ãã"
+@@error_message[ :"E1001" ] = "$1: 見つかりません"
 
 # E1002 $1: not constant (port)"
-@@error_message[ :"E1002" ] = "$1: å®æ°ã§ã¯ããã¾ãã (port)"
+@@error_message[ :"E1002" ] = "$1: 定数ではありません (port)"
 
 # E1003 $1: not constant"
-@@error_message[ :"E1003" ] = "$1: å®æ°ã§ã¯ããã¾ãã"
+@@error_message[ :"E1003" ] = "$1: 定数ではありません"
 
 # E1004 cannot evaluate \'[]\' operator"
-@@error_message[ :"E1004" ] = "\'[]\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1004" ] = "\'[]\' 演算子を評価できません"
 
 # E1005 cannot evaluate \'.\' operator"
-@@error_message[ :"E1005" ] = "\'.\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1005" ] = "\'.\' 演算子を評価できません"
 
 # E1006 cannot evaluate \'->\' operator"
-@@error_message[ :"E1006" ] = "\'->\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1006" ] = "\'->\' 演算子を評価できません"
 
 # E1007 cannot evaluate \'sizeof\' operator"
-@@error_message[ :"E1007" ] = "\'sizeof\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1007" ] = "\'sizeof\' 演算子を評価できません"
 
 # E1008 cannot evaluate \'sizeof\' operator"
-@@error_message[ :"E1008" ] = "\'sizeof\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1008" ] = "\'sizeof\' 演算子を評価できません"
 
 # E1009 cannot evaluate \'&\' operator"
-@@error_message[ :"E1009" ] = "\'&\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1009" ] = "\'&\' 演算子を評価できません"
 
 # E1010 cannot evaluate \'*\' operator"
-@@error_message[ :"E1010" ] = "\'*\' æ¼ç®å­ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1010" ] = "\'*\' 演算子を評価できません"
 
 # E1011 cannot evaluate unary + for $1"
-@@error_message[ :"E1011" ] = "$1 ã«å¯¾ããåé 
-ã® + ãè©ä¾¡ã§ãã¾ãã"
+@@error_message[ :"E1011" ] = "$1 に対する単項の + を評価できません"
 
 # E1012 $1: not found in parameter list"
-@@error_message[ :"E1012" ] = "$1: ãã©ã¡ã¼ã¿ãªã¹ãã®ä¸­ã«è¦ã¤ããã¾ãã"
+@@error_message[ :"E1012" ] = "$1: パラメータリストの中に見つかりません"
 
 # E1013 \'*\': operand is not pointer value"
-@@error_message[ :"E1013" ] = "\'*\': ãªãã©ã³ãã¯ãã¤ã³ã¿å¤ã§ã¯ããã¾ãã"
+@@error_message[ :"E1013" ] = "\'*\': オペランドはポインタ値ではありません"
 
 # E1014 $1: elements_get_type: sorry not supported"
-@@error_message[ :"E1014" ] = "$1: elements_get_type: ç³ãè¨³ããã¾ããï¼ãµãã¼ãããã¦ãã¾ãã"
+@@error_message[ :"E1014" ] = "$1: elements_get_type: 申し訳ありません．サポートされていません"
 
 # E1015 \'$1\': direction mismatch for $2, $3 required"
-@@error_message[ :"E1015" ] = "\'$1\': $2 ã«å¯¾ããæ¹åãæ´åãã¦ãã¾ããï¼$3 ãå¿
-è¦ã§ã"
+@@error_message[ :"E1015" ] = "\'$1\': $2 に対する方向が整合していません．$3 が必要です"
 
 # E1016 $1: elements_check_dir_for_param: sorry not supported"
-@@error_message[ :"E1016" ] = "$1: elements_check_dir_for_param: ç³ãè¨³ããã¾ããï¼ãµãã¼ãããã¦ãã¾ãã"
+@@error_message[ :"E1016" ] = "$1: elements_check_dir_for_param: 申し訳ありません．サポートされていません"
 
 # E1017 $1: rhs not \'Cell.ePort\' form"
-@@error_message[ :"E1017" ] = "$1: å³è¾ºã \'Cell.ePort\' å½¢å¼ã§ã¯ããã¾ãã"
+@@error_message[ :"E1017" ] = "$1: 右辺が \'Cell.ePort\' 形式ではありません"
 
 # E1018 $1: namespace cannot be specified"
-@@error_message[ :"E1018" ] = "$1: namespace ãæå®ã§ãã¾ãã"
+@@error_message[ :"E1018" ] = "$1: namespace を指定できません"
 
 # E1019 $1: rhs not in 'allocator_entry_port' form"
-@@error_message[ :"E1019" ] = "$1: å³è¾ºã 'allocator_entry_port' å½¢å¼ã§ã¯ããã¾ãã"
+@@error_message[ :"E1019" ] = "$1: 右辺が 'allocator_entry_port' 形式ではありません"
 
 # E1020 rhs not in 'call_port.func.param' form for $1_$2"
-@@error_message[ :"E1020" ] = "å³è¾ºã 'call_port.func.param' å½¢å¼ã§ããã¾ãã ($1_$2)"
+@@error_message[ :"E1020" ] = "右辺が 'call_port.func.param' 形式でありません ($1_$2)"
 
 ### bnf.y.rb
 # G1001 need specifier for \'$1\'"
-@@error_message[ :"G1001" ] = "\'$1\' ã«å¯¾ããæå®å­ãå¿
-è¦ã§ã"
+@@error_message[ :"G1001" ] = "\'$1\' に対する指定子が必要です"
 
 # G1002 need parameter name"
-@@error_message[ :"G1002" ] = "ãã©ã¡ã¼ã¿åãå¿
-è¦ã§ã"
+@@error_message[ :"G1002" ] = "パラメータ名が必要です"
 
 # G1003 need parameter name"
-@@error_message[ :"G1003" ] = "ãã©ã¡ã¼ã¿åãå¿
-è¦ã§ã"
+@@error_message[ :"G1003" ] = "パラメータ名が必要です"
 
 # G1004 impossible array type 0"
-@@error_message[ :"G1004" ] = "ããå¾ãªãé
-åå 0 ã§ã"
+@@error_message[ :"G1004" ] = "あり得ない配列型 0 です"
 
 # G1005 impossible array type 1"
-@@error_message[ :"G1005" ] = "ããå¾ãªãé
-åå 1 ã§ã"
+@@error_message[ :"G1005" ] = "あり得ない配列型 1 です"
 
 # G1006 impossible array type 2"
-@@error_message[ :"G1006" ] = "ããå¾ãªãé
-åå 2 ã§ã"
+@@error_message[ :"G1006" ] = "あり得ない配列型 2 です"
 
 # G1007 impossible array type 3"
-@@error_message[ :"G1007" ] = "ããå¾ãªãé
-åå 3 ã§ã"
+@@error_message[ :"G1007" ] = "あり得ない配列型 3 です"
 
 # G1008 impossible function type"
-@@error_message[ :"G1008" ] = "ããå¾ãªãé¢æ°åã§ã"
+@@error_message[ :"G1008" ] = "あり得ない関数型です"
 
 # G1009 unexpected specifier"
-@@error_message[ :"G1009" ] = "äºæããªãæå®å­ã§ã"
+@@error_message[ :"G1009" ] = "予期しない指定子です"
 
 # G1010 Not function"
-@@error_message[ :"G1010" ] = "é¢æ°ã§ã¯ããã¾ãã"
+@@error_message[ :"G1010" ] = "関数ではありません"
 
 # G1011 Not function"
-@@error_message[ :"G1011" ] = "é¢æ°ã§ã¯ããã¾ãã"
+@@error_message[ :"G1011" ] = "関数ではありません"
 
 # G1012 $1 : cannot put specifier here"
-@@error_message[ :"G1012" ] = "$1 : ããã«æå®å­ãç½®ããã¨ã¯ã§ãã¾ãã"
+@@error_message[ :"G1012" ] = "$1 : ここに指定子を置くことはできません"
 
 # G1013 unexpected specifier"
-@@error_message[ :"G1013" ] = "äºæããªãæå®å­ã§ã"
+@@error_message[ :"G1013" ] = "予期しない指定子です"
 
 # G1014 while open or reading \'$1\'"
-@@error_message[ :"G1014" ] = "\'$1\' ã®ãªã¼ãã³ã¾ãã¯èª­ã¿è¾¼ã¿ã«å¤±æãã¾ãã"
+@@error_message[ :"G1014" ] = "\'$1\' のオープンまたは読み込みに失敗しました"
 
 # G1015 Unexpected EOF"
-@@error_message[ :"G1015" ] = "äºæããªã EOF ã§ã"
+@@error_message[ :"G1015" ] = "予期しない EOF です"
 
 # G1016 syntax error near \'$1\'"
-@@error_message[ :"G1016" ] = "\'$1\' ä»è¿ã®æ§æã¨ã©ã¼ã§ã"
+@@error_message[ :"G1016" ] = "\'$1\' 付近の構文エラーです"
 
 ### plugin.rb
 # P1001 plugin arg: cannot find identifier in $1"
-@@error_message[ :"P1001" ] = "plugin arg: $1 ã®ä¸­ã«è­å¥å­ãè¦ã¤ãããã¨ãã§ãã¾ãã"
+@@error_message[ :"P1001" ] = "plugin arg: $1 の中に識別子を見つけることができません"
 
 # P1002 plugin arg: expecting \'=\' not \'$1\'"
-@@error_message[ :"P1002" ] = "plugin arg: \'$1\' ã§ã¯ãªã \'=\' ãå¿
-è¦ã§ã"
+@@error_message[ :"P1002" ] = "plugin arg: \'$1\' ではなく \'=\' が必要です"
 
 # P1003 plugin arg: unexpected $1"
-@@error_message[ :"P1003" ] = "plugin arg: äºæããªã $1 ã§ã"
+@@error_message[ :"P1003" ] = "plugin arg: 予期しない $1 です"
 
 # P1004 $1: unknown plugin argument\'s identifier\n  $2 are acceptable for RPCPlugin."
-@@error_message[ :"P1004" ] = "$1: ä¸æãªãã©ã°ã¤ã³å¼æ°ã®è­å¥å­\n  $2 ã RPC ãã©ã°ã¤ã³ã«å¯¾ãã¦åãå
-¥ãå¯è½ã§ã"
+@@error_message[ :"P1004" ] = "$1: 不明なプラグイン引数の識別子\n  $2 が RPC プラグインに対して受け入れ可能です"
 
 ### pluginModule.rb
 # P2001 $1.rb : fail to load plugin"
-@@error_message[ :"P2001" ] = "$1.rb : ãã©ã°ã¤ã³ã®èª­ã¿è¾¼ã¿ã«å¤±æãã¾ãã"
+@@error_message[ :"P2001" ] = "$1.rb : プラグインの読み込みに失敗しました"
 
 # P2002 $1: not kind of $2"
-@@error_message[ :"P2002" ] = "$1: $2 ã®ä¸ç¨®ã§ã¯ããã¾ãã"
+@@error_message[ :"P2002" ] = "$1: $2 の一種ではありません"
 
 # P2003 $1: load failed"
-@@error_message[ :"P2003" ] = "$1: èª­ã¿è¾¼ã¿ã«å¤±æãã¾ãã"
+@@error_message[ :"P2003" ] = "$1: 読み込みに失敗しました"
 
 # P2004 $1: open error \'$2\'"
-@@error_message[ :"P2004" ] = "$1: ãªã¼ãã³ã¨ã©ã¼ \'$2\' ãçºçãã¾ãã"
+@@error_message[ :"P2004" ] = "$1: オープンエラー \'$2\' が発生しました"
 
 # P2005 $1: plugin error in gen_through_cell_code "
-@@error_message[ :"P2005" ] = "$1: gen_through_cell_code å
-ã®ãã©ã°ã¤ã³ã¨ã©ã¼ãçºçãã¾ãã"
+@@error_message[ :"P2005" ] = "$1: gen_through_cell_code 内のプラグインエラーが発生しました"
 
 # P2006 $1: close error \'$2\'"
-@@error_message[ :"P2006" ] = "$1: \'$2\' ã®ã¯ã­ã¼ãºã¨ã©ã¼ãçºçãã¾ãã"
+@@error_message[ :"P2006" ] = "$1: \'$2\' のクローズエラーが発生しました"
 
 # P2007 $1: fail to generate post code"
-@@error_message[ :"P2007" ] = "$1: ãã¹ãã³ã¼ãã®çæã«å¤±æãã¾ãã"
+@@error_message[ :"P2007" ] = "$1: ポストコードの生成に失敗しました"
 
 ### componentobj.rb
 # S1001 context specifier duplicate"
-@@error_message[ :"S1001" ] = "ã³ã³ãã­ã¹ãæå®å­ãéè¤ãã¦ãã¾ã"
+@@error_message[ :"S1001" ] = "コンテキスト指定子が重複しています"
 
 # S1002 \'$1\': unknown specifier for signature"
-@@error_message[ :"S1002" ] = "\'$1\': ã·ã°ããã£ã«å¯¾ããä¸æãªæå®å­ã§ã"
+@@error_message[ :"S1002" ] = "\'$1\': シグニチャに対する不明な指定子です"
 
 # S1003 $1: \'alloc\' 1st parameter neither [in] integer type nor [out] double pointer type
-@@error_message[ :"S1003" ] = "$1: \'alloc\' é¢æ°ã®ç¬¬1ãã©ã¡ã¼ã¿ã in ã®æ´æ°åã§ã out ã®äºéãã¤ã³ã¿åã§ãããã¾ããï¼"
+@@error_message[ :"S1003" ] = "$1: \'alloc\' 関数の第1パラメータが in の整数型でも out の二重ポインタ型でもありません．"
 
 # S1004 $1: \'alloc\' 2nd parameter not [in] double pointer"
-@@error_message[ :"S1004" ] = "$1: \'alloc\' é¢æ°ã®ç¬¬2ãã©ã¡ã¼ã¿ã in ã®ãã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1004" ] = "$1: \'alloc\' 関数の第2パラメータが in のポインタへのポインタではありません．"
 
 # S1005 $1: \'alloc\' has no parameter, unsuitable for allocator signature"
-@@error_message[ :"S1005" ] = "$1: \'alloc\' é¢æ°ããã©ã¡ã¼ã¿ãæã£ã¦ãã¾ããï¼ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã«å¯¾ãã¦ä¸é©å½ã§ãï¼"
+@@error_message[ :"S1005" ] = "$1: \'alloc\' 関数がパラメータを持っていません．アロケータシグニチャに対して不適当です．"
 
 # S1006 $1: \'dealloc\' 1st parameter not [in] pointer type"
-@@error_message[ :"S1006" ] = "$1: \'dealloc\' é¢æ°ã®ç¬¬1ãã©ã¡ã¼ã¿ã in ã®ãã¤ã³ã¿åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1006" ] = "$1: \'dealloc\' 関数の第1パラメータが in のポインタ型ではありません．"
 
 # S1007 "
      # S1007 $1: \'dealloc\' cannot has 2nd parameter"
-# @@error_message[ :"S1007" ] = "$1: \'dealloc\' é¢æ°ã¯ç¬¬2ãã©ã¡ã¼ã¿ãæã¤ãã¨ãã§ãã¾ããï¼"
+# @@error_message[ :"S1007" ] = "$1: \'dealloc\' 関数は第2パラメータを持つことができません．"
 
 # S1008 $1: \'dealloc\' has no parameter, unsuitable for allocator signature"
-@@error_message[ :"S1008" ] = "$1: \'dealloc\' é¢æ°ããã©ã¡ã¼ã¿ãæã£ã¦ãã¾ããï¼ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã«å¯¾ãã¦ä¸é©å½ã§ãï¼"
+@@error_message[ :"S1008" ] = "$1: \'dealloc\' 関数がパラメータを持っていません．アロケータシグニチャに対して不適当です．"
 
 # S1009 $1: \'alloc\' function not found, unsuitable for allocator signature"
-@@error_message[ :"S1009" ] = "$1: \'alloc\' é¢æ°ãè¦ã¤ããã¾ããï¼ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã«å¯¾ãã¦ä¸é©å½ã§ãï¼"
+@@error_message[ :"S1009" ] = "$1: \'alloc\' 関数が見つかりません．アロケータシグニチャに対して不適当です．"
 
 # S1010 $1: \'dealloc\' function not found, unsuitable for allocator signature"
-@@error_message[ :"S1010" ] = "$1: \'dealloc\' é¢æ°ãè¦ã¤ããã¾ããï¼ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã«å¯¾ãã¦ä¸é©å½ã§ãï¼"
+@@error_message[ :"S1010" ] = "$1: \'dealloc\' 関数が見つかりません．アロケータシグニチャに対して不適当です．"
 
 # S1011 $1: size_is specified for non-pointer type"
-@@error_message[ :"S1011" ] = "$1: éãã¤ã³ã¿åã«å¯¾ãã¦ size_is ãæå®ããã¾ãã"
+@@error_message[ :"S1011" ] = "$1: 非ポインタ型に対して size_is が指定されました"
 
 # S1012 $1: unsuitable initializer, need array initializer"
-@@error_message[ :"S1012" ] = "$1: ä¸é©å½ãªåæåå­ã§ãï¼é
-åã®åæåå­ãå¿
-è¦ã§ãï¼"
+@@error_message[ :"S1012" ] = "$1: 不適当な初期化子です．配列の初期化子が必要です．"
 
 # S1013 $1: too many initializer, $2 for $3"
-@@error_message[ :"S1013" ] = "$1: åæåå­ãå¤ããã¾ãï¼$3 ã¨ããã¨ããã $2 ã¨ãã¾ããï¼"
+@@error_message[ :"S1013" ] = "$1: 初期化子が多すぎます．$3 とするところを $2 としました．"
 
 # S1014 generate specifier duplicate"
-@@error_message[ :"S1014" ] = "generate æå®å­ãéè¤ãã¾ããï¼"
+@@error_message[ :"S1014" ] = "generate 指定子が重複しました．"
 
 # S1015 $1 cannot be specified for composite"
-@@error_message[ :"S1015" ] = "$1 ã¯è¤åã»ã«ã«å¯¾ãã¦æå®ã§ãã¾ããï¼"
+@@error_message[ :"S1015" ] = "$1 は複合セルに対して指定できません．"
 
 # S1016 $1 not found"
-@@error_message[ :"S1016" ] = "$1 ãè¦ã¤ããã¾ãã"
+@@error_message[ :"S1016" ] = "$1 が見つかりません"
 
 # S1017 $1 : neither celltype nor cell"
-@@error_message[ :"S1017" ] = "$1 : ã»ã«ã¿ã¤ãã§ãã»ã«ã§ãããã¾ãã"
+@@error_message[ :"S1017" ] = "$1 : セルタイプでもセルでもありません"
 
 # S1018 $1 : not singleton cell"
-@@error_message[ :"S1018" ] = "$1 : ã·ã³ã°ã«ãã³ã»ã«ã§ã¯ããã¾ãã"
+@@error_message[ :"S1018" ] = "$1 : シングルトンセルではありません"
 
 # S1019 \'$1\' : not entry port"
-@@error_message[ :"S1019" ] = "\'$1\' : åãå£ã§ã¯ããã¾ãã"
+@@error_message[ :"S1019" ] = "\'$1\' : 受け口ではありません"
 
 # S1020 \'$1\' : required port cannot be array"
-@@error_message[ :"S1020" ] = "\'$1\' : è¦æ±ãããå£(port)ã¯é
-åã«åºæ¥ã¾ããï¼"
+@@error_message[ :"S1020" ] = "\'$1\' : 要求された口(port)は配列に出来ません．"
 
 # S1021 $1 : require cannot have same signature with \'$2\'"
-@@error_message[ :"S1021" ] = "$1 : ãªã¯ã¯ã¤ã¢ã¯ \'$2\' ã¨åãã·ã°ããã£ãæã¤ãã¨ãåºæ¥ã¾ããï¼"
+@@error_message[ :"S1021" ] = "$1 : リクワイアは \'$2\' と同じシグニチャを持つことが出来ません．"
 
 # S1022 $1.$2 : \'$3\' conflict function name in $4.$5"
-@@error_message[ :"S1022" ] = "$1.$2 : \'$3\' ã¯ $4.$5 ã«ãããé¢æ°åã¨è¡çªãã¦ãã¾ãï¼"
+@@error_message[ :"S1022" ] = "$1.$2 : \'$3\' は $4.$5 における関数名と衝突しています．"
 
 # S1023 $1: fail to new"
-@@error_message[ :"S1023" ] = "$1: new ã«å¤±æãã¾ããï¼"
+@@error_message[ :"S1023" ] = "$1: new に失敗しました．"
 
 # S1024 $1: multiple cell for singleton celltype"
-@@error_message[ :"S1024" ] = "$1: ã·ã³ã°ã«ãã³ã»ã«ã¿ã¤ãã«å¯¾ãè¤æ°ã®ã»ã«ãå­å¨ãã¾ãï¼"
+@@error_message[ :"S1024" ] = "$1: シングルトンセルタイプに対し複数のセルが存在します．"
 
 # S1025 not found reachable cell for require \'$1\' in celltype \'$2\'"
-@@error_message[ :"S1025" ] = "ã»ã«ã¿ã¤ã \'$2\' å
-ã®ãªã¯ã¯ã¤ã¢ \'$1\' ã¸å°éå¯è½ãªã»ã«ãè¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1025" ] = "セルタイプ \'$2\' 内のリクワイア \'$1\' へ到達可能なセルが見つかりません．"
 
 # S1026 required cell \'$1\' not reachable"
-@@error_message[ :"S1026" ] = "å¿
-è¦ã¨ãããã»ã« \'$1\' ã¯å°éå¯è½ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1026" ] = "必要とされるセル \'$1\' は到達可能ではありません．"
 
 # S1027 \'$1\' celltype not found"
-@@error_message[ :"S1027" ] = "ã»ã«ã¿ã¤ã \'$1\' ãè¦ã¤ããã¾ãã"
+@@error_message[ :"S1027" ] = "セルタイプ \'$1\' が見つかりません"
 
 # S1028 \'$1\' not celltype"
-@@error_message[ :"S1028" ] = "\'$1\' ã¯ã»ã«ã¿ã¤ãã§ã¯ããã¾ãã"
+@@error_message[ :"S1028" ] = "\'$1\' はセルタイプではありません"
 
 # S1029 $1 mismatch with previous one"
-@@error_message[ :"S1029" ] = "$1 ãããä»¥åã®ãã®ã¨æ´åãã¦ãã¾ãã"
+@@error_message[ :"S1029" ] = "$1 がそれ以前のものと整合していません"
 
 # S1030 $1: celltype mismatch with previous one"
-@@error_message[ :"S1030" ] = "$1: ã»ã«ã¿ã¤ããããä»¥åã®ãã®ã¨æ´åãã¦ãã¾ãã"
+@@error_message[ :"S1030" ] = "$1: セルタイプがそれ以前のものと整合していません"
 
 # S1031 $1 region \'$2\' mismatch  with previous one \'$3\'"
-@@error_message[ :"S1031" ] = "ã»ã« $1 ã®ãªã¼ã¸ã§ã³ \'$2\' ã¯ããä»¥åã®ãªã¼ã¸ã§ã³ \'$3\' ã¨æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1031" ] = "セル $1 のリージョン \'$2\' はそれ以前のリージョン \'$3\' と整合していません．"
 
 # S1032 $1: duplicate cell"
-@@error_message[ :"S1032" ] = "$1: ã»ã«ãéè¤ãã¦ãã¾ã"
+@@error_message[ :"S1032" ] = "$1: セルが重複しています"
 
 # S1033 rhs expression is not supported. Only attribute is permitted on current version."
-@@error_message[ :"S1033" ] = "å³è¾ºå¼ã¯ãµãã¼ãããã¦ãã¾ããï¼å±æ§ã®ã¿ãç¾å¨ã®ãã¼ã¸ã§ã³ã§ä½¿ç¨ã§ãã¾ãï¼"
+@@error_message[ :"S1033" ] = "右辺式はサポートされていません．属性のみが現在のバージョンで使用できます．"
 
 # S1034 $1 : cannot refer to $2\'s attribute here. Use \'composite.$3\' to refer to composite celltype\'s"
-@@error_message[ :"S1034" ] = "$1 : ããã§ã¯ $2 ã®å±æ§ãåç
-§ã§ãã¾ãã. è¤åã»ã«ã¿ã¤ãã®å±æ§ãåç
-§ãããã \'composite.$3\' ããä½¿ããã ããï¼"
+@@error_message[ :"S1034" ] = "$1 : ここでは $2 の属性を参照できません. 複合セルタイプの属性を参照するため \'composite.$3\' をお使いください．"
 
 # S1035 composite : cannot specify out of composite celltype definition"
-@@error_message[ :"S1035" ] = "composite : è¤åã»ã«ã¿ã¤ãå®ç¾©ã®å¤å´ã§ã¯æå®ã§ãã¾ããï¼"
+@@error_message[ :"S1035" ] = "composite : 複合セルタイプ定義の外側では指定できません．"
 
 # S1036 $1 : cannot refer to $2\'s here. Use \'composite.$3\' to refer to composite celltype\'s"
-@@error_message[ :"S1036" ] = "$1 : ããã§ã¯$2ã®ãã®ãåç
-§ã§ãã¾ããï¼è¤åã»ã«ã¿ã¤ãã®ãã®ãåç
-§ãããã \'composite.$3\' ããä½¿ããã ããï¼"
+@@error_message[ :"S1036" ] = "$1 : ここでは$2のものを参照できません．複合セルタイプのものを参照するため \'composite.$3\' をお使いください．"
 
 # S1037 $1: celltype plugin fail to new_cell"
-@@error_message[ :"S1037" ] = "$1: ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã new_cell ã«å¤±æãã¾ããï¼"
+@@error_message[ :"S1037" ] = "$1: セルタイププラグインが new_cell に失敗しました．"
 
 # S1038 $1.$2: self allocator not supported for array entry port"
-@@error_message[ :"S1038" ] = "$1.$2: ã»ã«ãã¢ã­ã±ã¼ã¿ã¯åãå£é
-åã«å¯¾ãã¦ãµãã¼ãããã¦ãã¾ããï¼"
+@@error_message[ :"S1038" ] = "$1.$2: セルフアロケータは受け口配列に対してサポートされていません．"
 
 # S1039 \'$1\': unknown specifier for cell"
-@@error_message[ :"S1039" ] = "\'$1\': ã»ã«ã«å¯¾ããä¸æãªæå®å­ã§ãï¼"
+@@error_message[ :"S1039" ] = "\'$1\': セルに対する不明な指定子です．"
 
 # S1040 array not supported for relay allocator"
-@@error_message[ :"S1040" ] = "é
-åã¯ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã«å¯¾ãã¦ãµãã¼ãããã¦ãã¾ããï¼"
+@@error_message[ :"S1040" ] = "配列はリレーアロケータに対してサポートされていません．"
 
 # S1041 \'$1_$2_$3\': not joined. cannot create internal join for relay allocator"
-@@error_message[ :"S1041" ] = "\'$1_$2_$3\': çµåããã¾ãã. ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã«å¯¾ãã¦å
-é¨çµåãçæã§ãã¾ããï¼"
+@@error_message[ :"S1041" ] = "\'$1_$2_$3\': 結合されません. リレーアロケータに対して内部結合を生成できません．"
 
 # S1042 call port \'$1\' not initialized in cell \'$2\'"
-@@error_message[ :"S1042" ] = "å¼ã³å£ \'$1\' ã¯ã»ã« \'$2\' ã®ä¸­ã§åæåããã¾ããï¼"
+@@error_message[ :"S1042" ] = "呼び口 \'$1\' はセル \'$2\' の中で初期化されません．"
 
 # S1043 call port \'$1\' not initialized in cell \'$2\'. this call port is created by tecsgen. check allocator specifier"
-@@error_message[ :"S1043" ] = "å¼ã³å£ \'$1\' ã¯ã»ã« \'$2\' ã®ä¸­ã§åæåããã¾ããï¼ãã®å¼ã³å£ã¯ tecsgen ã«ããçæããã¾ãï¼ã¢ã­ã±ã¼ã¿æå®å­ãç¢ºèªãã¦ãã ããï¼"
+@@error_message[ :"S1043" ] = "呼び口 \'$1\' はセル \'$2\' の中で初期化されません．この呼び口は tecsgen により生成されます．アロケータ指定子を確認してください．"
 
 # S1044 $1: array initializer too many or few, $2 for $3"
-@@error_message[ :"S1044" ] = "$1: é
-åã®åæåå­ãå¤ããããã¾ãã¯å°ãªããã¾ãï¼$3 ã¨ããã¨ããã $2 ã«ãã¾ããï¼"
+@@error_message[ :"S1044" ] = "$1: 配列の初期化子が多すぎるかまたは少なすぎます．$3 とするところを $2 にしました．"
 
 # S1045 $1[$2]: not initialized"
-@@error_message[ :"S1045" ] = "$1[$2]: åæåããã¾ããï¼"
+@@error_message[ :"S1045" ] = "$1[$2]: 初期化されません．"
 
 # S1046 $1[$2]: not initialized"
-@@error_message[ :"S1046" ] = "$1[$2]: åæåããã¾ãã"
+@@error_message[ :"S1046" ] = "$1[$2]: 初期化されません"
 
 # S1047 size_is pointer cannot be exposed for composite attribute"
-@@error_message[ :"S1047" ] = "size_is ãæå®ããããã¤ã³ã¿å¤æ°ã¯ï¼è¤åã»ã«ã¿ã¤ãã®å±æ§åã«é¢ãã¦ã¯ï¼å¤é¨ã¸å
-¬éãããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1047" ] = "size_is を指定されたポインタ変数は，複合セルタイプの属性名に関しては，外部へ公開することができません．"
 
 # S1048 $1: size_is specified for non-pointer type"
-@@error_message[ :"S1048" ] = "$1: size_is ãéãã¤ã³ã¿åã«å¯¾ãã¦æå®ããã¾ããï¼"
+@@error_message[ :"S1048" ] = "$1: size_is が非ポインタ型に対して指定されました．"
 
 # S1049 $1: size_is arg not constant"
-@@error_message[ :"S1049" ] = "$1: size_is å¼æ°ãå®æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1049" ] = "$1: size_is 引数が定数ではありません．"
 
 # S1050 unsuitable initializer, need array initializer"
-@@error_message[ :"S1050" ] = "ä¸é©å½ãªåæåå­ã§ãï¼é
-åã®åæåå­ãå¿
-è¦ã§ãï¼"
+@@error_message[ :"S1050" ] = "不適当な初期化子です．配列の初期化子が必要です．"
 
 # S1051 too many initializer for array, $1 for $2"
-@@error_message[ :"S1051" ] = "é
-åã«å¯¾ããåæåå­ãå¤ããã¾ãï¼$2 ã¨ããã¨ããã $1 ã«ãã¾ããï¼"
+@@error_message[ :"S1051" ] = "配列に対する初期化子が多すぎます．$2 とするところを $1 にしました．"
 
 # S1052 attribute \'$1\' not initialized in cell \'$2\'"
-@@error_message[ :"S1052" ] = "å±æ§ \'$1\' ã¯ã»ã« \'$2\' ã®ä¸­ã§åæåããã¾ããï¼"
+@@error_message[ :"S1052" ] = "属性 \'$1\' はセル \'$2\' の中で初期化されません．"
 
 # S1053 $1 must be singleton. inner cell \'$2\' is singleton"
-@@error_message[ :"S1053" ] = "$1 ã¯ã·ã³ã°ã«ãã³ã§ããå¿
-è¦ãããã¾ãï¼å
-é¨ã»ã« \'$2\' ã¯ã·ã³ã°ã«ãã³ã§ãï¼"
+@@error_message[ :"S1053" ] = "$1 はシングルトンである必要があります．内部セル \'$2\' はシングルトンです．"
 
 # S1054 $1 : specified active but has no active in this celltype"
-@@error_message[ :"S1054" ] = "$1 : ã¢ã¯ãã£ãã«æå®ããã¾ãããï¼ãã®ã»ã«ã¿ã¤ãã®ä¸­ã«ã¯ã¢ã¯ãã£ããªã»ã«ãããã¾ããï¼"
+@@error_message[ :"S1054" ] = "$1 : アクティブに指定されましたが，このセルタイプの中にはアクティブなセルがありません．"
 
 # S1055 $1 must be active. inner cell \'$2\' is active"
-@@error_message[ :"S1055" ] = "$1 ã¯ active ã§ããå¿
-è¦ãããã¾ã. å
-é¨ã»ã« \'$2\' ãã¢ã¯ãã£ãã§ãï¼"
+@@error_message[ :"S1055" ] = "$1 は active である必要があります. 内部セル \'$2\' がアクティブです．"
 
 # S1056 $1 : cannot export, nothing designated"
-@@error_message[ :"S1056" ] = "$1 : å¤é¨ã«å
-¬éãããã¨ãã§ãã¾ããï¼ä½ãæå®ããã¦ãã¾ããï¼"
+@@error_message[ :"S1056" ] = "$1 : 外部に公開することができません．何も指定されていません．"
 
 # S1057 $1 not found in $2"
-@@error_message[ :"S1057" ] = "$1 ã $2 ã®ä¸­ã«è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1057" ] = "$1 が $2 の中に見つかりません．"
 
 # S1058 \'$1\' : cannot export var"
-@@error_message[ :"S1058" ] = "\'$1\' : å¤æ°ãå¤é¨ã«å
-¬éãããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1058" ] = "\'$1\' : 変数を外部に公開することができません．"
 
 # S1059 \'$1\' : exporting attribute. write in cell or use \'=\' to export attribute"
-@@error_message[ :"S1059" ] = "\'$1\' : å±æ§ãå
-¬éãã¦ãã¾ã. ã»ã«ã®ä¸­ã«è¨è¿°ãããã¾ãã¯å±æ§ã®å
-¬éã®ããã« \'=\' ãä½¿ã£ã¦ä¸ããï¼"
+@@error_message[ :"S1059" ] = "\'$1\' : 属性を公開しています. セルの中に記述するかまたは属性の公開のために \'=\' を使って下さい．"
 
 # S1060 \'$1\' : port type mismatch. $2 type is allowed here."
-@@error_message[ :"S1060" ] = "\'$1\' : å£(port)ã®åãæ´åãã¦ãã¾ãã. ããã§ã¯ $2 åãä½¿ç¨ã§ãã¾ãï¼"
+@@error_message[ :"S1060" ] = "\'$1\' : 口(port)の型が整合していません. ここでは $2 型が使用できます．"
 
 # S1061 \'$1\' : not defined"
-@@error_message[ :"S1061" ] = "\'$1\' : å®ç¾©ããã¦ãã¾ããï¼"
+@@error_message[ :"S1061" ] = "\'$1\' : 定義されていません．"
 
 # S1062 $1 has no export definition"
-@@error_message[ :"S1062" ] = "$1 ã«ã¯å¤é¨å®ç¾©ãããã¾ããï¼"
+@@error_message[ :"S1062" ] = "$1 には外部定義がありません．"
 
 # S1063 $1 is port but previously defined as an attribute"
-@@error_message[ :"S1063" ] = "$1 ã¯å£(port)ã§ããããããåã«å±æ§ã¨ãã¦å®ç¾©ããã¾ããï¼"
+@@error_message[ :"S1063" ] = "$1 は口(port)ですがそれより前に属性として定義されました．"
 
 # S1064 $1 : type \'$2$3\' mismatch with pprevious definition\'$4$5\'"
-@@error_message[ :"S1064" ] = "$1 : å \'$2$3\' ã¯ããä»¥åã®å®ç¾© \'$4$5\' ã¨æ´åãã¦ã¾ããï¼"
+@@error_message[ :"S1064" ] = "$1 : 型 \'$2$3\' はそれ以前の定義 \'$4$5\' と整合してません．"
 
 # S1065 $1 : port type $2 mismatch with previous definition $3"
-@@error_message[ :"S1065" ] = "$1 : å£(port)å $2 ã¯ããä»¥åã®å®ç¾© $3 ã¨æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1065" ] = "$1 : 口(port)型 $2 はそれ以前の定義 $3 と整合していません．"
 
 # S1066 $1 : signature \'$2\' mismatch with previous definition \'$3\'"
-@@error_message[ :"S1066" ] = "$1 : ã·ã°ããã£ \'$2\' ã¯ããä»¥åã®å®ç¾© \'$3\' ã¨æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1066" ] = "$1 : シグニチャ \'$2\' はそれ以前の定義 \'$3\' と整合していません．"
 
 # S1067 $1 : array size mismatch with previous definition"
-@@error_message[ :"S1067" ] = "$1 : é
-åã®ãµã¤ãºãããä»¥åã®å®ç¾©ã¨æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1067" ] = "$1 : 配列のサイズがそれ以前の定義と整合していません．"
 
 # S1068 $1 : optional specifier mismatch with previous definition"
-@@error_message[ :"S1068" ] = "$1 : ãªãã·ã§ãã«ãªæå®å­ãããä»¥åã®å®ç¾©ã¨æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1068" ] = "$1 : オプショナルな指定子がそれ以前の定義と整合していません．"
 
 # S1069 $1 is an attribute but previously defined as a port"
-@@error_message[ :"S1069" ] = "$1 ã¯å±æ§ã§ããããããåã«å£(port)ã¨ãã¦å®ç¾©ããã¾ããï¼"
+@@error_message[ :"S1069" ] = "$1 は属性ですがそれより前に口(port)として定義されました．"
 
 # S1070 $1: size_is pointer cannot be exposed for composite attribute"
-@@error_message[ :"S1070" ] = "$1: size_is ãæå®ããããã¤ã³ã¿å¤æ°ã¯ï¼è¤åã»ã«ã¿ã¤ãã®å±æ§åã«é¢ãã¦ã¯ï¼å
-¬éãããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1070" ] = "$1: size_is を指定されたポインタ変数は，複合セルタイプの属性名に関しては，公開することができません．"
 
 # S1071 $1 cannot be specified for composite"
-@@error_message[ :"S1071" ] = "$1 ã¯è¤åã»ã«ã«å¯¾ãã¦æå®ã§ãã¾ããï¼"
+@@error_message[ :"S1071" ] = "$1 は複合セルに対して指定できません．"
 
 # S1072 $1: entry port: sizeless array not supported in current version"
-@@error_message[ :"S1072" ] = "$1: åãå£: ç¾å¨ã®çã§ã¯ãµã¤ãºæªæå®ã®é
-åã¯ãµãã¼ãããã¦ãã¾ããï¼"
+@@error_message[ :"S1072" ] = "$1: 受け口: 現在の版ではサイズ未指定の配列はサポートされていません．"
 
 # S1073 Not constant expression $1"
-@@error_message[ :"S1073" ] = "$1 ã¯å®æ°å¼ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1073" ] = "$1 は定数式ではありません．"
 
 # S1074 Not Integer $1"
-@@error_message[ :"S1074" ] = "$1 ã¯æ´æ°ã§ã¯ããã¾ãã"
+@@error_message[ :"S1074" ] = "$1 は整数ではありません"
 
 # S1075 \'$1\' signature not found"
-@@error_message[ :"S1075" ] = "\'$1\' ã·ã°ããã£ãè¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1075" ] = "\'$1\' シグニチャが見つかりません．"
 
 # S1076 \'$1\' not signature"
-@@error_message[ :"S1076" ] = "\'$1\' ã¯ã·ã°ããã£ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1076" ] = "\'$1\' はシグニチャではありません．"
 
 # S1077 inline: cannot be specified for call port"
-@@error_message[ :"S1077" ] = "inline: å¼ã³å£ã«å¯¾ãã¦æå®ã§ãã¾ããï¼"
+@@error_message[ :"S1077" ] = "inline: 呼び口に対して指定できません．"
 
 # S1078 optional: cannot be specified for entry port"
-@@error_message[ :"S1078" ] = "optional: åãå£ã«å¯¾ãã¦æå®ã§ãã¾ããï¼"
+@@error_message[ :"S1078" ] = "optional: 受け口に対して指定できません．"
 
 # S1079 allocator: cannot be specified for call port"
-@@error_message[ :"S1079" ] = "allocator: å¼ã³å£ã«å¯¾ãã¦æå®ã§ãã¾ããï¼"
+@@error_message[ :"S1079" ] = "allocator: 呼び口に対して指定できません．"
 
 # S1080 duplicate allocator specifier"
-@@error_message[ :"S1080" ] = "ã¢ã­ã±ã¼ã¿æå®å­ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"S1080" ] = "アロケータ指定子が重複しています．"
 
 # S1081 self allocator not supported yet"
-@@error_message[ :"S1081" ] = "ã»ã«ãã¢ã­ã±ã¼ã¿ã¯ã¾ã ãµãã¼ãããã¦ãã¾ãã"
+@@error_message[ :"S1081" ] = "セルフアロケータはまだサポートされていません"
 
 # S1082 function \'$1\' not found in signature"
-@@error_message[ :"S1082" ] = "é¢æ° \'$1\' ãã·ã°ããã£ã§è¦ã¤ããã¾ãã"
+@@error_message[ :"S1082" ] = "関数 \'$1\' がシグニチャで見つかりません"
 
 # S1083 \'$1\' not found in function \'$2\'"
-@@error_message[ :"S1083" ] = "\'$1\' ãé¢æ° \'$2\' ã§è¦ã¤ããã¾ãã"
+@@error_message[ :"S1083" ] = "\'$1\' が関数 \'$2\' で見つかりません"
 
 # S1084 \'$1\' in function \'$2\' is not send or receive"
-@@error_message[ :"S1084" ] = "\'$2\' å
-ã® \'$1\' ãåºæ¬æå®å­ send ã¾ãã¯ receive ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1084" ] = "\'$2\' 内の \'$1\' が基本指定子 send または receive ではありません．"
 
 # S1085 duplicate allocator specifier for \'$1_$2\'"
-@@error_message[ :"S1085" ] = "\'$1_$2\' ã«å¯¾ããéè¤ããã¢ã­ã±ã¼ã¿æå®å­ã§ãï¼"
+@@error_message[ :"S1085" ] = "\'$1_$2\' に対する重複したアロケータ指定子です．"
 
 # S1086 rhs not call_port.func.param for $1_$2"
-@@error_message[ :"S1086" ] = "$1_$2 ã«å¯¾ãã¦ not call_port.func.param ã®å½¢å¼ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1086" ] = "$1_$2 に対して not call_port.func.param の形式ではありません．"
 
 # S1087 function \'$1\' not found in signature \'$2\'"
-@@error_message[ :"S1087" ] = "é¢æ° \'$1\' ãã·ã°ããã£ \'$2\' ã®ä¸­ã«è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1087" ] = "関数 \'$1\' がシグニチャ \'$2\' の中に見つかりません．"
 
 # S1088 \'$1\' not found in function \'$2\'"
-@@error_message[ :"S1088" ] = "\'$1\' ãé¢æ° \'$2\' ã®ä¸­ã«è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1088" ] = "\'$1\' が関数 \'$2\' の中に見つかりません．"
 
 # S1089 relay allocator send/receive mismatch between $1.$2 and $3_$4.$5"
-@@error_message[ :"S1089" ] = "ãªã¬ã¼ã¢ã­ã±ã¼ã¿ send/receive ã¯ $1.$2 åã³ $3_$4.$5 ã®éã§æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1089" ] = "リレーアロケータ send/receive は $1.$2 及び $3_$4.$5 の間で整合していません．"
 
 # S1090 \'$1\' in function \'$2\' is not send or receive"
-@@error_message[ :"S1090" ] = "é¢æ° \'$2\' å
-ã® \'$1\' ã send ã¾ãã¯ receive ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1090" ] = "関数 \'$2\' 内の \'$1\' が send または receive ではありません．"
 
 # S1091 call port \'$1\' not found in celltype $2"
-@@error_message[ :"S1091" ] = "å¼ã³å£ \'$1\' ãã»ã«ã¿ã¤ã $2 ã®ä¸­ã«è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1091" ] = "呼び口 \'$1\' がセルタイプ $2 の中に見つかりません．"
 
 # S1092 \'$1\' not namespace"
-@@error_message[ :"S1092" ] = "\'$1\' ã¯ãã¼ã ã¹ãã¼ã¹ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1092" ] = "\'$1\' はネームスペースではありません．"
 
 # S1093 $1 : undefined cell"
-@@error_message[ :"S1093" ] = "$1 : æªå®ç¾©ã®ã»ã«ã§ã"
+@@error_message[ :"S1093" ] = "$1 : 未定義のセルです"
 
 # S1094 $1: pointer is not constant. check \'const\'"
-@@error_message[ :"S1094" ] = "$1: ãã¤ã³ã¿ãå®æ°ã§ã¯ããã¾ããï¼\'const\' ãç¢ºèªãã¦ãã ãã"
+@@error_message[ :"S1094" ] = "$1: ポインタが定数ではありません．\'const\' を確認してください"
 
 # S1095 $1: not constant"
-@@error_message[ :"S1095" ] = "$1: å®æ°ã§ã¯ããã¾ãã"
+@@error_message[ :"S1095" ] = "$1: 定数ではありません"
 
 # S1096 $1: should be int, float, bool or pointer type"
-@@error_message[ :"S1096" ] = "$1: int, float, bool ã¾ãã¯ãã¤ã³ã¿åã§ããå¿
-è¦ãããã¾ã"
+@@error_message[ :"S1096" ] = "$1: int, float, bool またはポインタ型である必要があります"
 
 # S1097 $1: has no initializer"
-@@error_message[ :"S1097" ] = "$1: åæåå­ãæã£ã¦ãã¾ãã"
+@@error_message[ :"S1097" ] = "$1: 初期化子を持っていません"
 
 # S1098 $1: has unsuitable initializer"
-@@error_message[ :"S1098" ] = "$1: ä¸é©å½ãªåæåå­ãããã¾ãï¼"
+@@error_message[ :"S1098" ] = "$1: 不適当な初期化子があります．"
 
 # S1099 array subscript not constant"
-@@error_message[ :"S1099" ] = "é
-åæ·»æ°ãå®æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1099" ] = "配列添数が定数ではありません．"
 
 # S1100 $1: cannot initialize var"
-@@error_message[ :"S1100" ] = "$1: å¤æ°ãåæåã§ãã¾ããï¼"
+@@error_message[ :"S1100" ] = "$1: 変数を初期化できません．"
 
 # S1101 \'$1\' cannot initialize entry port"
-@@error_message[ :"S1101" ] = "\'$1\' åãå£ãåæåã§ãã¾ããï¼"
+@@error_message[ :"S1101" ] = "\'$1\' 受け口を初期化できません．"
 
 # S1102 $1: must specify array subscript here"
-@@error_message[ :"S1102" ] = "$1: ããã§ã¯é
-åæ·»æ°ãæå®ããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S1102" ] = "$1: ここでは配列添数を指定する必要があります．"
 
 # S1103 $1: need array subscript"
-@@error_message[ :"S1103" ] = "$1: é
-åæ·»æ°ãå¿
-è¦ã§ãï¼"
+@@error_message[ :"S1103" ] = "$1: 配列添数が必要です．"
 
 # S1104 $1: need array subscript number. ex. \'[0]\'"
-@@error_message[ :"S1104" ] = "$1: é
-åæ·»æ°ã®æ°å¤ãå¿
-è¦ã§ãï¼(ä¾) \'[0]\'"
+@@error_message[ :"S1104" ] = "$1: 配列添数の数値が必要です．(例) \'[0]\'"
 
 # S1105 $1: cannot specify array subscript here"
-@@error_message[ :"S1105" ] = "$1: ããã§ã¯é
-åæ·»æ°ãæå®ãããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1105" ] = "$1: ここでは配列添数を指定することができません．"
 
 # S1106 $1: cannot specify array subscript number. use \'[]\'"
-@@error_message[ :"S1106" ] = "$1: é
-åæ·»æ°ã®æ°å¤ãæå®ãããã¨ãåºæ¥ã¾ããï¼\'[]\' ããä½¿ããã ããï¼"
+@@error_message[ :"S1106" ] = "$1: 配列添数の数値を指定することが出来ません．\'[]\' をお使いください．"
 
 # S1107 to export port, use \'cCall => composite.cCall\'"
-@@error_message[ :"S1107" ] = "å£(port)ãå¤é¨ã«å
-¬éãããã, \'cCall => composite.cCall\' ããä½¿ããã ããï¼"
+@@error_message[ :"S1107" ] = "口(port)を外部に公開するため, \'cCall => composite.cCall\' をお使いください．"
 
 # S1108 $1: rhs not \'Cell.ePort\' form"
-@@error_message[ :"S1108" ] = "$1: å³è¾ºã \'Cell.ePort\' ã®å½¢å¼ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1108" ] = "$1: 右辺が \'Cell.ePort\' の形式ではありません．"
 
 # S1109 \'$1\' not found"
-@@error_message[ :"S1109" ] = "\'$1\' ãè¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1109" ] = "\'$1\' が見つかりません．"
 
 # S1110 \'$1\' not cell"
-@@error_message[ :"S1110" ] = "\'$1\' ã»ã«ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1110" ] = "\'$1\' セルではありません．"
 
 # S1111 \'$1\' not found"
-@@error_message[ :"S1111" ] = "\'$1\' ãè¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1111" ] = "\'$1\' が見つかりません．"
 
 # S1112 \'$1\' not entry port"
-@@error_message[ :"S1112" ] = "\'$1\' åãå£ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1112" ] = "\'$1\' 受け口ではありません．"
 
 # S1113 \'$1\' signature mismatch"
-@@error_message[ :"S1113" ] = "\'$1\' ã·ã°ããã£ãæ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1113" ] = "\'$1\' シグニチャが整合していません．"
 
 # S1114 \'$1\' should be array"
-@@error_message[ :"S1114" ] = "\'$1\' é
-åã§ããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S1114" ] = "\'$1\' 配列である必要があります．"
 
 # S1115 $1[$2]: subscript out of range (< $3)"
-@@error_message[ :"S1115" ] = "$1[$2]: é
-åã®æ·»æ°ãç¯å²å¤ã®å¤ã§ãï¼(< $3)"
+@@error_message[ :"S1115" ] = "$1[$2]: 配列の添数が範囲外の値です．(< $3)"
 
 # S1116 \'$1\' entry port is not array"
-@@error_message[ :"S1116" ] = "\'$1\' åãå£ãé
-åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1116" ] = "\'$1\' 受け口が配列ではありません．"
 
 # S1117 \'$1\' not in celltype"
-@@error_message[ :"S1117" ] = "\'$1\' ã¯ã»ã«ã¿ã¤ãå
-ã«ããã¾ããï¼"
+@@error_message[ :"S1117" ] = "\'$1\' はセルタイプ内にありません．"
 
 # S1118 $1: going out from region \'$2\' not permitted"
-@@error_message[ :"S1118" ] = "$1: ãªã¼ã¸ã§ã³ $2 ãã out ãããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1118" ] = "$1: リージョン $2 から out することができません．"
 
 # S1119 $1: going from region \'$2\' to \'$3\' not permitted"
-@@error_message[ :"S1119" ] = "$1: ãªã¼ã¸ã§ã³ $2 ãããªã¼ã¸ã§ã³ $3ã¸çµåã§ãã¾ããï¼"
+@@error_message[ :"S1119" ] = "$1: リージョン $2 からリージョン $3へ結合できません．"
 
 # S1120 $1: going in to region \'$2\' not permitted"
-@@error_message[ :"S1120" ] = "$1: ãªã¼ã¸ã§ã³ \'$2\' ã¸ in ãããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1120" ] = "$1: リージョン \'$2\' へ in することができません．"
 
 # S1121 \'$1\' in region \'$2\' cannot be directly joined $3 in  $4"
-@@error_message[ :"S1121" ] = "ãªã¼ã¸ã§ã³ \'$2\' å
-ã® \'$1\' ã¯ç´æ¥ $4 å
-ã® $3 ã«çµåã§ãã¾ããï¼"
+@@error_message[ :"S1121" ] = "リージョン \'$2\' 内の \'$1\' は直接 $4 内の $3 に結合できません．"
 
 # S1122 $1 : not port: \'through\' can be specified only for port"
-@@error_message[ :"S1122" ] = "$1 :å£(port) ã§ã¯ããã¾ãã: \'through\' ã¯å£(port)ã«å¯¾ãã¦ã®ã¿æå®ã§ãã¾ãï¼"
+@@error_message[ :"S1122" ] = "$1 :口(port) ではありません: \'through\' は口(port)に対してのみ指定できます．"
 
 # S1123 $1 : not port: \'through\' can be specified only for port"
-@@error_message[ :"S1123" ] = "$1 :å£(port) ã§ã¯ããã¾ãã: \'through\' ã¯å£(port)ã«å¯¾ãã¦ã®ã¿æå®ã§ãã¾ãï¼"
+@@error_message[ :"S1123" ] = "$1 :口(port) ではありません: \'through\' は口(port)に対してのみ指定できます．"
 
 # S1124 $1: plugin function failed: \'get_through_entry_port_name\'"
-@@error_message[ :"S1124" ] = "$1: ãã©ã°ã¤ã³é¢æ°ãå¤±æãã¾ããï¼: \'get_through_entry_port_name\'"
+@@error_message[ :"S1124" ] = "$1: プラグイン関数が失敗しました．: \'get_through_entry_port_name\'"
 
 # S1125 $1: not generated cell \'$2\'"
-@@error_message[ :"S1125" ] = "$1: çæãããã»ã« \'$2\' ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1125" ] = "$1: 生成されたセル \'$2\' ではありません．"
 
 # S1126 $1: fail to new"
-@@error_message[ :"S1126" ] = "$1: new ã«å¤±æãã¾ããï¼"
+@@error_message[ :"S1126" ] = "$1: new に失敗しました．"
 
 # S1127 \'$1\' duplicate"
-@@error_message[ :"S1127" ] = "\'$1\' ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"S1127" ] = "\'$1\' が重複しています．"
 
 # S1128 \'$1\' inconsistent array definition"
-@@error_message[ :"S1128" ] = "\'$1\' ã¯ä¸è²«ããªãé
-åå®ç¾©ã§ãï¼"
+@@error_message[ :"S1128" ] = "\'$1\' は一貫しない配列定義です．"
 
 # S1129 \'$1\' redefinition of subscript $1"
-@@error_message[ :"S1129" ] = "\'$1\' ã¯é
-åæ·»æ° $1 ã®åå®ç¾©ã§ãï¼"
+@@error_message[ :"S1129" ] = "\'$1\' は配列添数 $1 の再定義です．"
 
 # S1130 \'$1\' inconsistent array definition"
-@@error_message[ :"S1130" ] = "\'$1\' ã¯ä¸è²«ããªãé
-åå®ç¾©ã§ãï¼"
+@@error_message[ :"S1130" ] = "\'$1\' は一貫しない配列定義です．"
 
 # S1131 \'$1.$2\' has duplicate initializer"
-@@error_message[ :"S1131" ] = "\'$1.$2\' ã«ã¯éè¤ããåæåå­ãããã¾ãï¼"
+@@error_message[ :"S1131" ] = "\'$1.$2\' には重複した初期化子があります．"
 
 # S1132 $1: 1st parameter is not string(file name)"
-@@error_message[ :"S1132" ] = "$1: ç¬¬1ãã©ã¡ã¼ã¿ã string(ãã¡ã¤ã«å) ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1132" ] = "$1: 第1パラメータが string(ファイル名) ではありません．"
 
 # S1133 $1: 2nd parameter is not string(fromat)"
-@@error_message[ :"S1133" ] = "$1: ç¬¬2ãã©ã¡ã¼ã¿ã string(ãã¡ã¤ã«å) ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1133" ] = "$1: 第2パラメータが string(ファイル名) ではありません．"
 
 # S1134 $1: unknown factory function"
-@@error_message[ :"S1134" ] = "$1: ä¸æãªãã¡ã¯ããªé¢æ°ã§ãï¼"
+@@error_message[ :"S1134" ] = "$1: 不明なファクトリ関数です．"
 
 # S1135 celltype factory can\'t have parameter(s)"
-@@error_message[ :"S1135" ] = "ã»ã«ã¿ã¤ããã¡ã¯ããªã¯ãã©ã¡ã¼ã¿ãæã¤ãã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1135" ] = "セルタイプファクトリはパラメータを持つことができません．"
 
 # S1136 \'$1\': not found"
-@@error_message[ :"S1136" ] = "\'$1\': è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1136" ] = "\'$1\': 見つかりません．"
 
 # S1137 \'$1\': not attribute"
-@@error_message[ :"S1137" ] = "\'$1\': å±æ§ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1137" ] = "\'$1\': 属性ではありません．"
 
 # S1138 internal error Factory.check_arg()"
-@@error_message[ :"S1138" ] = "Factory.check_arg() ã®å
-é¨ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"S1138" ] = "Factory.check_arg() の内部エラーです．"
 
 # S1139 $1: region path mismatch. previous path: $2"
-@@error_message[ :"S1139" ] = "$1: ãªã¼ã¸ã§ã³ãã¹ãæ´åãã¦ãã¾ããï¼ä»¥åã®ãã¹: $2"
+@@error_message[ :"S1139" ] = "$1: リージョンパスが整合していません．以前のパス: $2"
 
 # S1140 $1: region specifier must place at first appearence"
-@@error_message[ :"S1140" ] = "$1: ãªã¼ã¸ã§ã³æå®å­ã¯æåã«é
-ç½®ããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S1140" ] = "$1: リージョン指定子は最初に配置する必要があります．"
 
 # S1141 $1 duplication, previous one : $2"
-@@error_message[ :"S1141" ] = "$1 ãéè¤ãã¦ãã¾ã, ä»¥åã®å¤ : $2"
+@@error_message[ :"S1141" ] = "$1 が重複しています, 以前の値 : $2"
 
 # S1142 $1 not found in search path"
-@@error_message[ :"S1142" ] = "$1 ãæ¤ç´¢ãã¹ã®ä¸­ã«è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1142" ] = "$1 が検索パスの中に見つかりません．"
 
 # S1143 import_C: arg2: mismatch with previous one"
-@@error_message[ :"S1143" ] = "import_C: arg2: ä»¥åã®ãã®ã¨æ´åãã¦ãã¾ããï¼"
+@@error_message[ :"S1143" ] = "import_C: arg2: 以前のものと整合していません．"
 
 # S1144 $1: temporary C source: open error"
-@@error_message[ :"S1144" ] = "$1: ä¸æçãª C ã½ã¼ã¹: ãªã¼ãã³ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"S1144" ] = "$1: 一時的な C ソース: オープンエラーです．"
 
 # S1145 $1: temporary C source: writing error"
-@@error_message[ :"S1145" ] = "$1: ä¸æçãª C ã½ã¼ã¹: æ¸è¾¼ã¿ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"S1145" ] = "$1: 一時的な C ソース: 書込みエラーです．"
 
 # S1146 $1: error occured while CPP"
-@@error_message[ :"S1146" ] = "$1: CPP å®è¡ä¸­ã«ã¨ã©ã¼ãçºçãã¾ããï¼"
+@@error_message[ :"S1146" ] = "$1: CPP 実行中にエラーが発生しました．"
 
 # S1147 $1: popen for CPP failed"
-@@error_message[ :"S1147" ] = "$1: CPPã«å¯¾ãã popen ãå¤±æãã¾ããï¼"
+@@error_message[ :"S1147" ] = "$1: CPPに対する popen が失敗しました．"
 
 # S1148 $1 not found in search path"
-@@error_message[ :"S1148" ] = "$1 ãæ¤ç´¢ãã¹ã®ä¸­ã«è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1148" ] = "$1 が検索パスの中に見つかりません．"
 
 # S1149 $1 not signature"
-@@error_message[ :"S1149" ] = "$1 ã·ã°ããã£ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1149" ] = "$1 シグニチャではありません．"
 
 # S1150 $1: fail to new"
-@@error_message[ :"S1150" ] = "$1: new ã«å¤±æãã¾ããï¼"
+@@error_message[ :"S1150" ] = "$1: new に失敗しました．"
 
 # S1151 $1: not namespace"
-@@error_message[ :"S1151" ] = "$1: ãã¼ã ã¹ãã¼ã¹ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1151" ] = "$1: ネームスペースではありません．"
 
 # S1152 $1: call port cannot have fixed join"
-@@error_message[ :"S1152" ] = "$1: å¼ã³å£ã¯åºå®çµåãæã¤ãã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S1152" ] = "$1: 呼び口は固定結合を持つことができません．"
 
 # "S1153 $1: cannot be entry port array for fixed join port"
-@@error_message[ :"S1153" ] = "$1: åºå®çµåã®å£ã«å¯¾ããåãå£é
-åã¯ããå¾ã¾ããï¼"
+@@error_message[ :"S1153" ] = "$1: 固定結合の口に対する受け口配列はあり得ません．"
 
 # "S1154 $1: must be singleton celltype for fixed join"
-@@error_message[ :"S1154" ] = "$1: åºå®çµåã«å¯¾ããã·ã³ã°ã«ãã³ã»ã«ã¿ã¤ãã§ããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S1154" ] = "$1: 固定結合に対するシングルトンセルタイプである必要があります．"
 
 # "S1155 $1: not celltype or not found"
-@@error_message[ :"S1155" ] = "$1: ã»ã«ã¿ã¤ãã§ã¯ãªããã¾ãã¯è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1155" ] = "$1: セルタイプではないかまたは見つかりません．"
 
 # "S1156 $1: not call port or not found"
-@@error_message[ :"S1156" ] = "$1: å¼ã³å£ã§ã¯ãªããã¾ãã¯è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1156" ] = "$1: 呼び口ではないかまたは見つかりません．"
 
 # "S1157 $1: sized array or not array"
-@@error_message[ :"S1157" ] = "$1: ãµã¤ãºæå®ãããé
-åãã¾ãã¯é
-åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S1157" ] = "$1: サイズ指定された配列かまたは配列ではありません．"
 
 # "S1158 $1: singleton cell not found for fixed join"
-@@error_message[ :"S1158" ] = "$1: ã·ã³ã°ã«ãã³ã»ã«ãåºå®çµåã«å¯¾ãã¦è¦ã¤ããã¾ããï¼"
+@@error_message[ :"S1158" ] = "$1: シングルトンセルが固定結合に対して見つかりません．"
 
 # S1159 $1: non-size_is pointer cannot be initialized with array initializer"
-@@error_message[ :"S1159" ] = "$1: size_is æå®ããã¦ããªããã¤ã³ã¿ã¯ãé
-ååæåå­ã§åæåã§ãã¾ãã"
+@@error_message[ :"S1159" ] = "$1: size_is 指定されていないポインタは、配列初期化子で初期化できません"
 
 # S1160 $1 must be constant for id"
-@@error_message[ :"S1160" ] = "$1 id ã¯å®æ°ã§ãªããã°ãªãã¾ãã"
+@@error_message[ :"S1160" ] = "$1 id は定数でなければなりません"
 
 # S1161 $1 must be constant for id"
-@@error_message[ :"S1161" ] = "$1 id ã¯å®æ°ã§ãªããã°ãªãã¾ãã"
+@@error_message[ :"S1161" ] = "$1 id は定数でなければなりません"
 
 # S1162 $1: id cannot be 0"
-@@error_message[ :"S1162" ] = "$1: id ã« 0 ãæå®ã§ãã¾ãã"
+@@error_message[ :"S1162" ] = "$1: id に 0 を指定できません"
 
 # S1163 generate specifier duplicate"
-@@error_message[ :"S1163" ] = "generate æå®å­ãéè¤ãã¦ãã¾ã"
+@@error_message[ :"S1163" ] = "generate 指定子が重複しています"
 
 # S1164 '$1' set_specified_id: id not positive integer '$2'"
-@@error_message[ :"S1164" ] = "'$1' id ãæ­£æ´æ°ã§ããã¾ãã '$2'"
+@@error_message[ :"S1164" ] = "'$1' id が正整数でありません '$2'"
 
 # S1165 '$1' set_specified_id: id duplicate"
-@@error_message[ :"S1165" ] = "'$1' id æå®å­ãéè¤ãã¦ãã¾ã"
+@@error_message[ :"S1165" ] = "'$1' id 指定子が重複しています"
 
 # S1166 $1: fail to new"
-@@error_message[ :"S1166" ] = "$1: ãã©ã°ã¤ã³ã®çæã«å¤±æãã¾ãã"
+@@error_message[ :"S1166" ] = "$1: プラグインの生成に失敗しました"
 
 # S1167 \'$1\': relay mismatch \'$2\'"
-@@error_message[ :"S1167" ] = "\'$1\': ãªã¬ã¼ã«ããããã¾ãã \'$2\'"
+@@error_message[ :"S1167" ] = "\'$1\': リレーにマッチしません \'$2\'"
 
 # S1168 too many initializer for array, $1 for $2"
-@@error_message[ :"S1168" ] = "é
-ååæåå­ãå¤ããã¾ã $1 for $2"
+@@error_message[ :"S1168" ] = "配列初期化子が多すぎます $1 for $2"
 
 # S1169 $1: non-size_is pointer cannot be initialized with array initializer"
-@@error_message[ :"S1169" ] = "$1: size_is æå®ããã¦ããªããã¤ã³ã¿ã«é
-ååæåå­ãæå®ã§ãã¾ãã"
+@@error_message[ :"S1169" ] = "$1: size_is 指定されていないポインタに配列初期化子を指定できません"
 
 # S1170 \'$1\' has size_is but export attr \'$2\' doesn't have"
-@@error_message[ :"S1170" ] = "\'$1\' ã« size_is æå®ããã¦ãã¾ããã¨ã¯ã¹ãã¼ããã \'$2\' ã«æå®ããã¦ãã¾ãã"
+@@error_message[ :"S1170" ] = "\'$1\' に size_is 指定されていますがエクスポートする \'$2\' に指定されていません"
 
 # S1171 \'$1\' size_is argument of \'$2\' not exported"
-@@error_message[ :"S1171" ] = "\'$1\' \'$2\' size_is å¼æ°ãã¨ã¯ã¹ãã¼ãããã¦ãã¾ãã"
+@@error_message[ :"S1171" ] = "\'$1\' \'$2\' size_is 引数がエクスポートされていません"
 
 # S1172 \'$1\' size_is argument mismatch with exporting one \'$2\'"
-@@error_message[ :"S1172" ] = "\'$1\' size_is å¼æ°ãã¨ã¯ã¹ãã¼ãããã¦ãã \'$2\' ã¨ä¸è´ãã¾ãã"
+@@error_message[ :"S1172" ] = "\'$1\' size_is 引数がエクスポートされている \'$2\' と一致しません"
 
 # S1173 $1: allocator mismatch from $2's allocator"
-@@error_message[ :"S1173" ] = "$1: ã¢ã­ã±ã¼ã¿ã $2' ã®ã¢ã­ã±ã¼ã¿ã¨ä¸è´ãã¾ãã"
+@@error_message[ :"S1173" ] = "$1: アロケータが $2' のアロケータと一致しません"
 
 # S1174 $1 not suitable for lhs, suitable lhs: 'func.param'"
-@@error_message[ :"S1174" ] = "$1 å·¦è¾ºãä¸é©åã§ããé©åãªå·¦è¾ºã¯ 'func.param' ã®å½¢å¼ã§ã"
+@@error_message[ :"S1174" ] = "$1 左辺が不適切です。適切な左辺は 'func.param' の形式です"
 
 # S1175 $1 not found or not allocator entry port for $2"
-@@error_message[ :"S1175" ] = "$1  $2 ã®ã¢ã­ã±ã¼ã¿åãå£ãè¦å½ãããªãããã¢ã­ã±ã¼ã¿åãå£ã§ã¯ããã¾ãã"
+@@error_message[ :"S1175" ] = "$1  $2 のアロケータ受け口が見当たらないか、アロケータ受け口ではありません"
 
 # S1176 rhs not in 'call_port.func.param' form for $1_$2"
-@@error_message[ :"S1176" ] = "å³è¾ºã 'call_port.func.param' å½¢å¼ã§ããã¾ãã ($1_$2)"
+@@error_message[ :"S1176" ] = "右辺が 'call_port.func.param' 形式でありません ($1_$2)"
 
 # S1177 cannot specify 'through' in composite in current version"
-@@error_message[ :"S1177" ] = "ç¾å¨ã®ãã¼ã¸ã§ã³ã§ã¯ãã³ã³ãã¸ããã»ã«ã« 'through'ãæå®ã§ãã¾ãã"
+@@error_message[ :"S1177" ] = "現在のバージョンでは、コンポジットセルに 'through'を指定できません"
 
 # S1178 $1 region type specifier duplicate, previous $2"
-@@error_message[ :"S1178" ] = "$1 ãªã¼ã¸ã§ã³ã¿ã¤ãæå®å­ãéè¤ãã¦ãã¾ããä»¥åã¯ $2 ã§ãã"
+@@error_message[ :"S1178" ] = "$1 リージョンタイプ指定子が重複しています。以前は $2 でした"
 
 ### syntaxobj.rb
 # S2001 \'$1\' duplicate $2"
-@@error_message[ :"S2001" ] = "\'$1\': éè¤ãã¦ãã¾ã ($2)"
+@@error_message[ :"S2001" ] = "\'$1\': 重複しています ($2)"
 
 # S2002 $1: $2"
@@ -850,18 +761,14 @@
 
 # S2003 $1: $2 cannot have initializer"
-@@error_message[ :"S2003" ] = "$1: $2 ã¯åæåå­ããã¤ãã¨ãã§ãã¾ããï¼"
+@@error_message[ :"S2003" ] = "$1: $2 は初期化子をもつことができません．"
 
 # S2004 $1: array subscript must be specified or omit"
-@@error_message[ :"S2004" ] = "$1: é
-åæ·»æ°ã¯æå®ããããã¾ãã¯çç¥ãããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S2004" ] = "$1: 配列添数は指定されるかまたは省略される必要があります．"
 
 # S2005 $1: array subscript must be specified"
-@@error_message[ :"S2005" ] = "$1: é
-åæ·»æ°ã¯æå®ãããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S2005" ] = "$1: 配列添数は指定される必要があります．"
 
 # S2006 \'$1\' function"
-@@error_message[ :"S2006" ] = "\'$1\' é¢æ°ã§ãï¼"
+@@error_message[ :"S2006" ] = "\'$1\' 関数です．"
 
 # S2007 \'$1\' $2"
@@ -869,78 +776,75 @@
 
 # S2008 $1: inconsitent with previous one"
-@@error_message[ :"S2008" ] = "$1: ä»¥åã®ãã®ã¨ä¸è²«ãã¦ãã¾ããï¼"
+@@error_message[ :"S2008" ] = "$1: 以前のものと一貫していません．"
 
 # S2009 $1: not found or not signature"
-@@error_message[ :"S2009" ] = "$1: è¦ã¤ãããªããã¾ãã¯ã·ã°ããã£ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2009" ] = "$1: 見つからないかまたはシグニチャではありません．"
 
 # S2010 $1: not allocator signature"
-@@error_message[ :"S2010" ] = "$1: ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2010" ] = "$1: アロケータシグニチャではありません．"
 
 # S2011 size_is duplicate"
-@@error_message[ :"S2011" ] = "size_is ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"S2011" ] = "size_is が重複しています．"
 
 # S2012 count_is duplicate"
-@@error_message[ :"S2012" ] = "count_is ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"S2012" ] = "count_is が重複しています．"
 
 # S2013 string duplicate"
-@@error_message[ :"S2013" ] = "string ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"S2013" ] = "string が重複しています．"
 
 # S2014 $1 need pointer or more pointer"
-@@error_message[ :"S2014" ] = "$1 ã¯ä¸ã¤ä»¥ä¸ã®ãã¤ã³ã¿ãå¿
-è¦ã§ãï¼"
+@@error_message[ :"S2014" ] = "$1 は一つ以上のポインタが必要です．"
 
 # S2015 $1 must be const for \'in\' parameter $2"
-@@error_message[ :"S2015" ] = "'$1' ã¯ \'in\' ãã©ã¡ã¼ã¿ $2 ã«å¯¾ãã¦å®æ°ã§ããå¿
-è¦ãããã¾ãï¼"
+@@error_message[ :"S2015" ] = "'$1' は \'in\' パラメータ $2 に対して定数である必要があります．"
 
 # S2016 $1 can not be const for $2 parameter"
-@@error_message[ :"S2016" ] = "'$1' ã¯ $2 ãã©ã¡ã¼ã¿ã«å¯¾ãã¦å®æ°æå®ã§ãã¾ããï¼ "
+@@error_message[ :"S2016" ] = "'$1' は $2 パラメータに対して定数指定できません． "
 
 # S2017 size_is argument is not integer type"
-@@error_message[ :"S2017" ] = "size_is å¼æ°ãæ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2017" ] = "size_is 引数が整数型ではありません．"
 
 # S2018 \'$1\' size_is parameter not integer"
-@@error_message[ :"S2018" ] = "\'$1\' size_is ãã©ã¡ã¼ã¿ã¯æ´æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2018" ] = "\'$1\' size_is パラメータは整数ではありません．"
 
 # S2019 \'$1\' size_is parameter negative or zero"
-@@error_message[ :"S2019" ] = "\'$1\' size_is ãã©ã¡ã¼ã¿ãè² æ°ã¾ãã¯ã¼ã­ã§ãï¼"
+@@error_message[ :"S2019" ] = "\'$1\' size_is パラメータが負数またはゼロです．"
 
 # S2020 count_is argument is not integer type"
-@@error_message[ :"S2020" ] = "count_is å¼æ°ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2020" ] = "count_is 引数は整数型ではありません．"
 
 # S2021 \'$1\' count_is parameter not integer"
-@@error_message[ :"S2021" ] = "\'$1\' count_is ãã©ã¡ã¼ã¿ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2021" ] = "\'$1\' count_is パラメータは整数型ではありません．"
 
 # S2022 \'$1\' count_is parameter negative or zero"
-@@error_message[ :"S2022" ] = "\'$1\' count_is ãã©ã¡ã¼ã¿ã¯è² æ°ã¾ãã¯ã¼ã­ã§ãï¼"
+@@error_message[ :"S2022" ] = "\'$1\' count_is パラメータは負数またはゼロです．"
 
 # S2023 string argument is not integer type"
-@@error_message[ :"S2023" ] = "string å¼æ°ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2023" ] = "string 引数は整数型ではありません．"
 
 # S2024 \'$1\' string parameter not integer"
-@@error_message[ :"S2024" ] = "\'$1\' string ãã©ã¡ã¼ã¿ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"S2024" ] = "\'$1\' string パラメータは整数型ではありません．"
 
 # S2025 \'$1\' string parameter negative or zero"
-@@error_message[ :"S2025" ] = "\'$1\' string ãã©ã¡ã¼ã¿ã¯è² æ°ã¾ãã¯ã¼ã­ã§ãï¼"
+@@error_message[ :"S2025" ] = "\'$1\' string パラメータは負数またはゼロです．"
 
 # S2026 '$1' nullable specified for non-pointer type"
-@@error_message[ :"S2026" ] = "'$1' ãã¤ã³ã¿åä»¥å¤ã« nullable ãæå®ããã¾ãã"
+@@error_message[ :"S2026" ] = "'$1' ポインタ型以外に nullable が指定されました"
 
 # S2027 '$1' parameter cannot be void type"
-@@error_message[ :"S2027" ] = "'$1' å¼æ°ã void åã«ã§ãã¾ãã"
+@@error_message[ :"S2027" ] = "'$1' 引数を void 型にできません"
 
 # S2028 '$1' max (size_is 2nd parameter) not constant"
-@@error_message[ :"S2028" ] = "'$1' max (size_is ã®ç¬¬äºå¼æ°)ãå®æ°ã§ããã¾ãã"
+@@error_message[ :"S2028" ] = "'$1' max (size_is の第二引数)が定数でありません"
 
 # S2029 '$1' max (size_is 2nd parameter) negative or zero, or not integer"
-@@error_message[ :"S2029" ] = "'$1' max (size_is ã®ç¬¬äºå¼æ°) ãè² ãã¼ã­ã¾ãã¯æ´æ°ã§ã¯ããã¾ãã"
+@@error_message[ :"S2029" ] = "'$1' max (size_is の第二引数) が負、ゼロまたは整数ではありません"
 
 # S2030 '$1' both size_is and max are const. size_is larger than max"
-@@error_message[ :"S2030" ] = "'$1' size_is max ã®ä¸¡æ¹ãå®æ°ã§. size_is ã®æ¹ã max ãè¶
-ãã¦ãã¾ã"
+@@error_message[ :"S2030" ] = "'$1' size_is max の両方が定数で. size_is の方が max を超えています"
 
 ### optimize.rb
 # S3001 $1: id too large $2 (max=$3)"
-@@error_message[ :"S3001" ] = "$1: id ã« $2 ã¯å¤§ãããã¾ã (æå¤§å¤ã¯$3)"
+@@error_message[ :"S3001" ] = "$1: id に $2 は大きすぎます (最大値は$3)"
 
 # S3002 $1: id too large $2 (max=$3)"
@@ -948,138 +852,133 @@
 
 # S3003 $1: id number '$2' conflict with $3"
-@@error_message[ :"S3003" ] = "$1: id çªå· '$2' ã¯ $3 ã¨è¡çªãã¦ãã¾ã"
+@@error_message[ :"S3003" ] = "$1: id 番号 '$2' は $3 と衝突しています"
 
 ### types.rb
 # T1001 const duplicate"
-@@error_message[ :"T1001" ] = "const ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"T1001" ] = "const が重複しています．"
 
 # T1002 volatile duplicate"
-@@error_message[ :"T1002" ] = "volatile ãéè¤ãã¦ãã¾ãï¼"
+@@error_message[ :"T1002" ] = "volatile が重複しています．"
 
 # T1003 $1: unsuitable specifier for $2"
-@@error_message[ :"T1003" ] = "$1: $2 ã«å¯¾ããä¸é©åãªæå®å­ã§ãï¼"
+@@error_message[ :"T1003" ] = "$1: $2 に対する不適切な指定子です．"
 
 # T1004 cannot cast to $1"
-@@error_message[ :"T1004" ] = "$1 ã¸ã­ã£ã¹ãã§ãã¾ããï¼"
+@@error_message[ :"T1004" ] = "$1 へキャストできません．"
 
 # T1005 \'$1\' not defined"
-@@error_message[ :"T1005" ] = "\'$1\' ã¯å®ç¾©ããã¦ãã¾ããï¼"
+@@error_message[ :"T1005" ] = "\'$1\' は定義されていません．"
 
 # T1006 \'$1\' not type name. expecting type name here"
-@@error_message[ :"T1006" ] = "\'$1\' ã¯ååã§ã¯ããã¾ããï¼ããã¯ååãå¿
-è¦ã§ãï¼"
+@@error_message[ :"T1006" ] = "\'$1\' は型名ではありません．ここは型名が必要です．"
 
 # T1007 $1: void type variable cannot have initializer"
-@@error_message[ :"T1007" ] = "$1: void åå¤æ°ã¯åæåå­ããã¤ãã¨ãã§ãã¾ããï¼"
+@@error_message[ :"T1007" ] = "$1: void 型変数は初期化子をもつことができません．"
 
 # T1008 ambigous signed or unsigned"
-@@error_message[ :"T1008" ] = "ç¬¦å·ä»ãã§ãããã¾ãã¯ç¬¦å·ç¡ãã§ããããææ§ã§ãï¼"
+@@error_message[ :"T1008" ] = "符号付きであるかまたは符号無しであるかが曖昧です．"
 
 # T1009 $1: $2: not integer"
-@@error_message[ :"T1009" ] = "$1: $2: æ´æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1009" ] = "$1: $2: 整数ではありません．"
 
 # T1010 $1: initializer is not constant"
-@@error_message[ :"T1010" ] = "$1: åæåå­ã¯å®æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1010" ] = "$1: 初期化子は定数ではありません．"
 
 # T1011 $1: need cast to assign float to integer"
-@@error_message[ :"T1011" ] = "$1: æµ®åå°æ°ç¹åããæ´æ°åã¸å²ãå½ã¦ã®ããã«ã­ã£ã¹ããå¿
-è¦ã§ãï¼"
+@@error_message[ :"T1011" ] = "$1: 浮動小数点型から整数型へ割り当てのためにキャストが必要です．"
 
 # T1012 $1: $2: not integer"
-@@error_message[ :"T1012" ] = "$1: $2: æ´æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1012" ] = "$1: $2: 整数ではありません．"
 
 # T1013 $1: too large (max=$2)"
-@@error_message[ :"T1013" ] = "$1: å¤ãå¤§ãããã¾ã (max=$2)"
+@@error_message[ :"T1013" ] = "$1: 値が大きすぎます (max=$2)"
 
 # T1014 $1: too large negative value (min=-$2)"
-@@error_message[ :"T1014" ] = "$1: è² æ°ã®çµ¶å¯¾å¤ãå¤§ãããã¾ãï¼(min=-$2)"
+@@error_message[ :"T1014" ] = "$1: 負数の絶対値が大きすぎます．(min=-$2)"
 
 # T1015 $1: negative value for unsigned"
-@@error_message[ :"T1015" ] = "$1: ç¬¦å·ç¡ãæ´æ°åã«å¯¾ãè² æ°å¤ãä½¿ç¨ããã¦ãã¾ãï¼"
+@@error_message[ :"T1015" ] = "$1: 符号無し整数型に対し負数値が使用されています．"
 
 # T1016 $1: too large (max=$2)"
-@@error_message[ :"T1016" ] = "$1: å¤ãå¤§ãããã¾ãï¼(max=$2)"
+@@error_message[ :"T1016" ] = "$1: 値が大きすぎます．(max=$2)"
 
 # T1017 $1: unsuitable initializer for scalar type"
-@@error_message[ :"T1017" ] = "$1: ã¹ã«ã©ã¼åã«å¯¾ããä¸é©å½ãªåæåå­ã§ãï¼"
+@@error_message[ :"T1017" ] = "$1: スカラー型に対する不適当な初期化子です．"
 
 # T1018 $1: $2: not number"
-@@error_message[ :"T1018" ] = "$1: $2: æ°å¤ã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1018" ] = "$1: $2: 数値ではありません．"
 
 # T1019 $1: initializer is not constant"
-@@error_message[ :"T1019" ] = "$1: åæåå­ã¯å®æ°ã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1019" ] = "$1: 初期化子は定数ではありません．"
 
 # T1020 $1: unsuitable initializer for scalar type"
-@@error_message[ :"T1020" ] = "$1: ã¹ã«ã©ã¼åã«å¯¾ããä¸é©å½ãªåæåå­ã§ãï¼"
+@@error_message[ :"T1020" ] = "$1: スカラー型に対する不適当な初期化子です．"
 
 # T1021 \'$1\': struct not defined"
-@@error_message[ :"T1021" ] = "\'$1\': æ§é ä½ãå®ç¾©ããã¦ãã¾ããï¼"
+@@error_message[ :"T1021" ] = "\'$1\': 構造体が定義されていません．"
 
 # T1022 struct $1: not defined"
-@@error_message[ :"T1022" ] = "æ§é ä½ $1: å®ç¾©ããã¦ãã¾ããï¼"
+@@error_message[ :"T1022" ] = "構造体 $1: 定義されていません．"
 
 # T1023 struct $1: not defined"
-@@error_message[ :"T1023" ] = "æ§é ä½ $1: å®ç¾©ããã¦ãã¾ããï¼"
+@@error_message[ :"T1023" ] = "構造体 $1: 定義されていません．"
 
 # T1024 $1: unsuitable initializer for struct"
-@@error_message[ :"T1024" ] = "$1: æ§é ä½ã«å¯¾ããä¸é©å½ãªåæåå­ã§ãï¼"
+@@error_message[ :"T1024" ] = "$1: 構造体に対する不適当な初期化子です．"
 
 # T1025 size_is argument is not integer type"
-@@error_message[ :"T1025" ] = "size_is å¼æ° ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1025" ] = "size_is 引数 は整数型ではありません．"
 
 # T1026 count_is argument is not integer type"
-@@error_message[ :"T1026" ] = "count_is å¼æ° ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1026" ] = "count_is 引数 は整数型ではありません．"
 
 # T1027 string argument is not integer type"
-@@error_message[ :"T1027" ] = "string å¼æ°ã¯æ´æ°åã§ã¯ããã¾ããï¼"
+@@error_message[ :"T1027" ] = "string 引数は整数型ではありません．"
 
 # T1028 $1: cannot initialize function pointer"
-@@error_message[ :"T1028" ] = "$1: é¢æ°ãã¤ã³ã¿ãåæåãããã¨ã¯ã§ãã¾ããï¼"
+@@error_message[ :"T1028" ] = "$1: 関数ポインタを初期化することはできません．"
 
 # T1029 oneway function cannot return type \'$1$2\', \'void\' or \'ER\' is permitted"
-@@error_message[ :"T1029" ] = "ä¸æ¹åé¢æ°ã¯å \'$1$2\' ãè¿ããã¨ãã§ãã¾ããï¼\'void\' ã¾ãã¯ \'ER\' ãä½¿ç¨ã§ãã¾ãï¼"
+@@error_message[ :"T1029" ] = "一方向関数は型 \'$1$2\' を返すことができません．\'void\' または \'ER\' が使用できます．"
 
 # T1030 oneway function cannot have $1 parameter for \'$2\'"
-@@error_message[ :"T1030" ] = "ä¸æ¹åé¢æ°ã¯ \'$2\' ã®ããã« $1 ãã©ã¡ã¼ã¿ãæã¤ãã¨ãã§ãã¾ããï¼"
+@@error_message[ :"T1030" ] = "一方向関数は \'$2\' のために $1 パラメータを持つことができません．"
 
 # T1031 $1: unsuitable initializer for array"
-@@error_message[ :"T1031" ] = "$1: é
-åã«å¯¾ããä¸é©å½ãªåæåå­ã§ãï¼"
+@@error_message[ :"T1031" ] = "$1: 配列に対する不適当な初期化子です．"
 
 # T1032 $1: incompatible pointer type"
-@@error_message[ :"T1032" ] = "$1: äºææ§ã®ãªããã¤ã³ã¿åã§ãï¼"
+@@error_message[ :"T1032" ] = "$1: 互換性のないポインタ型です．"
 
 # T1033 $1: need cast to assign integer to pointer"
-@@error_message[ :"T1033" ] = "$1: æ´æ°åããã¤ã³ã¿ã¸å²ãå½ã¦ãããã«ã¯ã­ã£ã¹ããå¿
-è¦ã§ãï¼"
+@@error_message[ :"T1033" ] = "$1: 整数型をポインタへ割り当てるためにはキャストが必要です．"
 
 # T1034 $1: unsuitable string constant"
-@@error_message[ :"T1034" ] = "$1: ä¸é©å½ãªæå­åå®æ°ã§ãï¼"
+@@error_message[ :"T1034" ] = "$1: 不適当な文字列定数です．"
 
 # T1035 $1: unsuitable initializer for pointer"
-@@error_message[ :"T1035" ] = "$1: ãã¤ã³ã¿ã«å¯¾ããä¸é©å½ãªåæåå­ã§ãï¼"
+@@error_message[ :"T1035" ] = "$1: ポインタに対する不適当な初期化子です．"
 
 # T1036 $1: unsuitable initializer for pointer"
-@@error_message[ :"T1036" ] = "$1: ãã¤ã³ã¿ã«å¯¾ããä¸é©å½ãªåæåå­ã§ãï¼"
+@@error_message[ :"T1036" ] = "$1: ポインタに対する不適当な初期化子です．"
 
 # T1037 $1: not number"
-@@error_message[ :"T1037" ] = "$1: æ°å¤ã§ã¯ããã¾ãã"
+@@error_message[ :"T1037" ] = "$1: 数値ではありません"
 
 # T1038 $1: initializer type mismatch. '$2' & '$3'"
-@@error_message[ :"T1038" ] = "$1: åæåå­ã®åãä¸è´ãã¾ãã. '$2' ã¨ '$3'"
+@@error_message[ :"T1038" ] = "$1: 初期化子の型が一致しません. '$2' と '$3'"
 
 # T1039 $1: struct tag mismatch $2 and $3"
-@@error_message[ :"T1039" ] = "$1: æ§é ä½ã¿ã°ã $2 ã¨ $3 ã§ä¸è´ãã¾ãã"
+@@error_message[ :"T1039" ] = "$1: 構造体タグが $2 と $3 で一致しません"
 
 # T1040 $1 specified for void pointer type"
-@@error_message[ :"T1040" ] = "$1 void ãã¤ã³ã¿åã«æå®ããã¾ãã"
+@@error_message[ :"T1040" ] = "$1 void ポインタ型に指定されました"
 
 ### gen_xml.rb
 # T2001 fail to create XML file $1"
-@@error_message[ :"T2001" ] = "XML ãã¡ã¤ã« $1 ã®çæã«å¤±æãã¾ãã"
+@@error_message[ :"T2001" ] = "XML ファイル $1 の生成に失敗しました"
 
 # TEMPORAL set_definition_join: uninitialized array member"
-@@error_message[ :"TEMPORAL" ] = "set_definition_join: é
-åã¡ã³ããåæåããã¦ãã¾ããï¼"
+@@error_message[ :"TEMPORAL" ] = "set_definition_join: 配列メンバが初期化されていません．"
 
 # V1001 $1: unable for $2"
@@ -1087,88 +986,88 @@
 
 # V1002 $1: cannot cast to bool (implicitly)"
-@@error_message[ :"V1002" ] = "$1: ãã¼ã«åã¸ã®(æé»çãª)ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1002" ] = "$1: ブール型への(暗黙的な)キャストを行うことができません．"
 
 # V1003 $1: cannot cast to integer (implicitly)"
-@@error_message[ :"V1003" ] = "$1: æ´æ°åã¸ã®(æé»çãª)ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1003" ] = "$1: 整数型への(暗黙的な)キャストを行うことができません．"
 
 # V1004 $1: cannot cast to float (implicitly)"
-@@error_message[ :"V1004" ] = "$1: æµ®åå°æ°ç¹åã¸ã®(æé»çãª)ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1004" ] = "$1: 浮動小数点型への(暗黙的な)キャストを行うことができません．"
 
 # V1005 Cannot cast pointer to float"
-@@error_message[ :"V1005" ] = "ãã¤ã³ã¿åãæµ®åå°æ°ç¹åã¸ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1005" ] = "ポインタ型を浮動小数点型へキャストを行うことができません．"
 
 # V1006 pointer value cannot cast to $1"
-@@error_message[ :"V1006" ] = "ãã¤ã³ã¿å¤ã¯ $1 ã¸ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1006" ] = "ポインタ値は $1 へキャストを行うことができません．"
 
 # V1007 convert pointer value to bool"
-@@error_message[ :"V1007" ] = "ãã¤ã³ã¿å¤ããã¼ã«åã¸å¤æãã¾ããï¼"
+@@error_message[ :"V1007" ] = "ポインタ値をブール型へ変換しました．"
 
 # V1008 convert pointer value to integer without cast"
-@@error_message[ :"V1008" ] = "ãã¤ã³ã¿å¤ãã­ã£ã¹ãç¡ãã§æ´æ°åã¸å¤æãã¾ããï¼"
+@@error_message[ :"V1008" ] = "ポインタ値をキャスト無しで整数型へ変換しました．"
 
 # V1009 / : divieded by zero"
-@@error_message[ :"V1009" ] = "/ : ã¼ã­é¤ç®ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"V1009" ] = "/ : ゼロ除算エラーです．"
 
 # V1010 / : divieded by zero"
-@@error_message[ :"V1010" ] = "/ : ã¼ã­é¤ç®ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"V1010" ] = "/ : ゼロ除算エラーです．"
 
 # V1011 % : divieded by zero"
-@@error_message[ :"V1011" ] = "% : ã¼ã­é¤ç®ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"V1011" ] = "% : ゼロ除算エラーです．"
 
 # V1012 % : divieded by zero"
-@@error_message[ :"V1012" ] = "% : ã¼ã­é¤ç®ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"V1012" ] = "% : ゼロ除算エラーです．"
 
 # V1013 integer value cannot cast to $1"
-@@error_message[ :"V1013" ] = "æ´æ°å¤ã¯ $1 ã¸ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1013" ] = "整数値は $1 へキャストを行うことができません．"
 
 # V1014 comparing bool value with \'$1\'"
-@@error_message[ :"V1014" ] = "ãã¼ã«å¤ã \'$1\' ã¨æ¯è¼ãã¾ããï¼"
+@@error_message[ :"V1014" ] = "ブール値を \'$1\' と比較しました．"
 
 # V1015 comparing bool value with \'$1\'"
-@@error_message[ :"V1015" ] = "ãã¼ã«å¤ã \'$1\' ã¨æ¯è¼ãã¾ããï¼"
+@@error_message[ :"V1015" ] = "ブール値を \'$1\' と比較しました．"
 
 # V1016 bool value cannot cast to $1"
-@@error_message[ :"V1016" ] = "ãã¼ã«å¤ã¯ $1 ã¸ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1016" ] = "ブール値は $1 へキャストを行うことができません．"
 
 # V1017 / : divieded by zero"
-@@error_message[ :"V1017" ] = "/ : ã¼ã­é¤ç®ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"V1017" ] = "/ : ゼロ除算エラーです．"
 
 # V1018 % : divieded by zero"
-@@error_message[ :"V1018" ] = "% : ã¼ã­é¤ç®ã¨ã©ã¼ã§ãï¼"
+@@error_message[ :"V1018" ] = "% : ゼロ除算エラーです．"
 
 # V1019 floating value cannot cast to $1"
-@@error_message[ :"V1019" ] = "æµ®åå°æ°ç¹å¤ã¯ $1 ã¸ã®ã­ã£ã¹ããè¡ããã¨ãã§ãã¾ããï¼"
+@@error_message[ :"V1019" ] = "浮動小数点値は $1 へのキャストを行うことができません．"
 
 # V1020 convert floating value to bool without cast"
-@@error_message[ :"V1020" ] = "æµ®åå°æ°ç¹å¤ãã­ã£ã¹ãç¡ãã§ãã¼ã«åã¸å¤æãã¾ããï¼"
+@@error_message[ :"V1020" ] = "浮動小数点値をキャスト無しでブール型へ変換しました．"
 
 # V1021 convert floating value to integer without cast"
-@@error_message[ :"V1021" ] = "æµ®åå°æ°ç¹åãã­ã£ã¹ãç¡ãã§æ´æ°åã¸å¤æãã¾ããï¼"
+@@error_message[ :"V1021" ] = "浮動小数点型をキャスト無しで整数型へ変換しました．"
 
 # V1022 string cannot cast to integer"
-@@error_message[ :"V1022" ] = "æå­åã¯æ´æ°åã«ã­ã£ã¹ãã§ãã¾ãã"
+@@error_message[ :"V1022" ] = "文字列は整数型にキャストできません"
 
 # V1023 string cannot cast to float"
-@@error_message[ :"V1023" ] = "æå­åã¯æµ®åå°æ°ç¹åã«ã­ã£ã¹ãã§ãã¾ãã"
+@@error_message[ :"V1023" ] = "文字列は浮動小数点型にキャストできません"
 
 # V1024 string cannot cast to pointer"
-@@error_message[ :"V1024" ] = "æå­åã¯ãã¤ã³ã¿åã«ã­ã£ã¹ãã§ãã¾ãã"
+@@error_message[ :"V1024" ] = "文字列はポインタ型にキャストできません"
 
 # V1025 string cannot cast to $1"
-@@error_message[ :"V1025" ] = "æå­åã¯ $1 ã«ã­ã£ã¹ãã§ãã¾ãã"
+@@error_message[ :"V1025" ] = "文字列は $1 にキャストできません"
 
 ###
-# warning ã¡ãã»ã¼ã¸
+# warning メッセージ
 @@warning_message = {}
 
 ### componentobj.rb
 # W1001 \'$1\': unknown context type. usually specifiy task, non-task or any"
-@@warning_message[ :"W1001" ] = "\'$1\': ä¸æãªã³ã³ãã­ã¹ãåã§ãï¼éå¸¸ task, non-task ã¾ãã¯ any ãæå®ãã¦ä¸ããï¼"
+@@warning_message[ :"W1001" ] = "\'$1\': 不明なコンテキスト型です．通常 task, non-task または any を指定して下さい．"
 
 # W1002 $1: non-active celltype has no entry port & factory"
-@@warning_message[ :"W1002" ] = "$1: éã¢ã¯ãã£ããªã»ã«ã¿ã¤ããåãå£åã³ãã¡ã¯ããªãæã£ã¦ãã¾ããï¼"
+@@warning_message[ :"W1002" ] = "$1: 非アクティブなセルタイプが受け口及びファクトリを持っていません．"
 
 # W1003 $1 : require call port overridden in $2"
-@@warning_message[ :"W1003" ] = "$1 : ãªã¯ã¯ã¤ã¢å¼ã³å£ã $2 ã§ãªã¼ãã¼ã©ã¤ãããã¾ããï¼"
+@@warning_message[ :"W1003" ] = "$1 : リクワイア呼び口が $2 でオーバーライドされました．"
 
 # W1004 $1 : specified singleton but has no singleton in this celltype"
@@ -1176,105 +1075,99 @@
 
 # W1005 $1 : idx_is_id is ineffective for composite celltype"
-@@warning_message[ :"W1005" ] = "$1 : idx_is_id ã¯è¤åã»ã«ã¿ã¤ãã«å¯¾ãã¦ã¯ç¡å¹ã§ãï¼"
+@@warning_message[ :"W1005" ] = "$1 : idx_is_id は複合セルタイプに対しては無効です．"
 
 # W1006 $1 : only prototype, unused and undefined cell"
-@@warning_message[ :"W1006" ] = "$1 : ãã­ãã¿ã¤ãã®ã¿ï¼æªä½¿ç¨ï¼ãã¤æªå®ç¾©ã®ã»ã«ã§ãï¼"
+@@warning_message[ :"W1006" ] = "$1 : プロトタイプのみ，未使用，かつ未定義のセルです．"
 
 # W1007 $1 : non-active cell has no entry join and no factory"
-@@warning_message[ :"W1007" ] = "$1 : éã¢ã¯ãã£ãã»ã«ã«åãå£ã®çµååã³ãã¡ã¯ããªãããã¾ããï¼"
+@@warning_message[ :"W1007" ] = "$1 : 非アクティブセルに受け口の結合及びファクトリがありません．"
 
 # W1008 $1: reuse designation mismatch with previous import"
-@@warning_message[ :"W1008" ] = "$1: åä½¿ç¨ã®æç¤ºãä»¥åã®ã¤ã³ãã¼ãã®ã¨æ´åãã¾ããï¼"
+@@warning_message[ :"W1008" ] = "$1: 再使用の指示が以前のインポートのと整合しません．"
 
 # "W1009 $1: fixed join entry port has multi join"
-@@warning_message[ :"W1009" ] = "$1: åºå®çµååãå£ãè¤æ°ã®çµåãæã£ã¦ãã¾ãï¼"
+@@warning_message[ :"W1009" ] = "$1: 固定結合受け口が複数の結合を持っています．"
 
 ### types.rb
 # W2001 signed int$1_t: obsolete. use int$2_t"
-@@warning_message[ :"W2001" ] = "signed int$1_t: æ¨å¥¨ããã¾ããï¼int$2_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W2001" ] = "signed int$1_t: 推奨されません．int$2_t をお使いください．"
 
 # W2002 unsinged int$1_t: obsolete. use uint$2_t"
-@@warning_message[ :"W2002" ] = "unsinged int$1_t: æ¨å¥¨ããã¾ããï¼uint$2_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W2002" ] = "unsinged int$1_t: 推奨されません．uint$2_t をお使いください．"
 
 # W2003 $1: too large to cast to $2, clipped($3)"
-@@warning_message[ :"W2003" ] = "$1: $2 ã¸ã­ã£ã¹ãããã®ã«å¤§ãããã¾ãï¼åãè©°ãã¾ãã($3)"
+@@warning_message[ :"W2003" ] = "$1: $2 へキャストするのに大きすぎます．切り詰めました($3)"
 
 # W2004 $1: too small to cast to $2, clipped($3)"
-@@warning_message[ :"W2004" ] = "$1: $2 ã¸ã­ã£ã¹ãããã®ã«å°ãããã¾ãï¼åãè©°ãã¾ãã($3)"
+@@warning_message[ :"W2004" ] = "$1: $2 へキャストするのに小さすぎます．切り詰めました($3)"
 
 # W2005 $1: negative value for unsigned: convert to $2"
-@@warning_message[ :"W2005" ] = "$1: ç¬¦å·ç¡ãæ´æ°åã«å¯¾ãã¦è² æ°å¤ã§ã : $2 ã¸å¤æãã¾ããï¼"
+@@warning_message[ :"W2005" ] = "$1: 符号無し整数型に対して負数値です : $2 へ変換しました．"
 
 ### syntaxobj.rb
 # W3001 $1: duplicate"
-@@warning_message[ :"W3001" ] = "$1: éè¤ãã¦ãã¾ãï¼"
+@@warning_message[ :"W3001" ] = "$1: 重複しています．"
 
 # W3002 $1: this string might cause buffer over run"
-@@warning_message[ :"W3002" ] = "$1: ãã®æå­åã¯ãããã¡ã¼ãªã¼ãã¼ã©ã³ãå¼ãèµ·ããããããã¾ããï¼"
+@@warning_message[ :"W3002" ] = "$1: この文字列はバッファーオーバーランを引き起こすかもしれません．"
 
 # W3003 $1 pointer level mismatch"
-@@warning_message[ :"W3003" ] = "$1 ãã¤ã³ã¿ã¼ã¬ãã«ã®ä¸æ´åã§ãï¼"
+@@warning_message[ :"W3003" ] = "$1 ポインターレベルの不整合です．"
 
 # W3004 $1 pointer type has returned. specify deviate or stop return pointer"
-@@error_message[ :"W3004" ] = "$1 ãã¤ã³ã¿åãè¿ããã¾ãããdeviate ãæå®ããããã¤ã³ã¿ãè¿ãã®ãæ­¢ãã¦ãã ãã"
+@@error_message[ :"W3004" ] = "$1 ポインタ型が返されました。deviate を指定するかポインタを返すのを止めてください"
 
 # W3005 '$1' size_is always lower than max. max is ignored"
-@@error_message[ :"W3005" ] = "'$1' size_is ã¯å¸¸ã« max ããå°ãã. max ã¯ç¡è¦ããã¾ã"
+@@error_message[ :"W3005" ] = "'$1' size_is は常に max より小さい. max は無視されます"
 
 ### bnf.y.rb
 # W5001 bool: obsolete type. use bool_t"
-@@warning_message[ :"W5001" ] = "bool: æ¨å¥¨ãããªããã¼ã¿åã§ãï¼bool_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5001" ] = "bool: 推奨されないデータ型です．bool_t をお使いください．"
 
 # W5002 float: obsolete type. use float32_t"
-@@warning_message[ :"W5002" ] = "float: æ¨å¥¨ãããªããã¼ã¿åã§ãï¼float32_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5002" ] = "float: 推奨されないデータ型です．float32_t をお使いください．"
 
 # W5003 double: obsolete type. use double64_t"
-@@warning_message[ :"W5003" ] = "double: æ¨å¥¨ãããªããã¼ã¿åã§ãï¼double64_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5003" ] = "double: 推奨されないデータ型です．double64_t をお使いください．"
 
 # W5004 char: obsolete type. use char_t"
-@@warning_message[ :"W5004" ] = "char: æ¨å¥¨ãããªããã¼ã¿åã§ãï¼char_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5004" ] = "char: 推奨されないデータ型です．char_t をお使いください．"
 
 # W5005 int8: obsolete. use int8_t"
-@@warning_message[ :"W5005" ] = "int8: æ¨å¥¨ããã¾ããï¼int8_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5005" ] = "int8: 推奨されません．int8_t をお使いください．"
 
 # W5006 int16: obsolete. use int16_t"
-@@warning_message[ :"W5006" ] = "int16: æ¨å¥¨ããã¾ããï¼int16_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5006" ] = "int16: 推奨されません．int16_t をお使いください．"
 
 # W5007 int32: obsolete. use int32_t"
-@@warning_message[ :"W5007" ] = "int32: æ¨å¥¨ããã¾ããï¼int32_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5007" ] = "int32: 推奨されません．int32_t をお使いください．"
 
 # W5008 int64: obsolete. use int64_t"
-@@warning_message[ :"W5008" ] = "int64: æ¨å¥¨ããã¾ããï¼int64_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5008" ] = "int64: 推奨されません．int64_t をお使いください．"
 
 # W5009 int64: obsolete. use int64_t"
-@@warning_message[ :"W5009" ] = "int64: æ¨å¥¨ããã¾ããï¼int64_t ããä½¿ããã ããï¼"
+@@warning_message[ :"W5009" ] = "int64: 推奨されません．int64_t をお使いください．"
 
 # W5010 need 'void' for no parameter"
-@@warning_message[ :"W5010" ] = "ãã©ã¡ã¼ã¿ãå­å¨ããªãå ´å 'void' ãå¿
-è¦ã§ã"
+@@warning_message[ :"W5010" ] = "パラメータが存在しない場合 'void' が必要です"
 
 # W5011 need 'void' for no parameter"
-@@warning_message[ :"W5011" ] = "ãã©ã¡ã¼ã¿ãå­å¨ããªãå ´å 'void' ãå¿
-è¦ã§ã"
+@@warning_message[ :"W5011" ] = "パラメータが存在しない場合 'void' が必要です"
 
 ### C_parser.y.rb
 # W6001 need 'void' for no parameter"
-@@warning_message[ :"W6001" ] = "ãã©ã¡ã¼ã¿ãå­å¨ããªãå ´å 'void' ãå¿
-è¦ã§ã"
+@@warning_message[ :"W6001" ] = "パラメータが存在しない場合 'void' が必要です"
 
 # W6002 need 'void' for no parameter"
-@@warning_message[ :"W6002" ] = "ãã©ã¡ã¼ã¿ãå­å¨ããªãå ´å 'void' ãå¿
-è¦ã§ã"
+@@warning_message[ :"W6002" ] = "パラメータが存在しない場合 'void' が必要です"
 
 # W6003 need 'void' for no parameter"
-@@warning_message[ :"W6003" ] = "ãã©ã¡ã¼ã¿ãå­å¨ããªãå ´å 'void' ãå¿
-è¦ã§ã"
+@@warning_message[ :"W6003" ] = "パラメータが存在しない場合 'void' が必要です"
 
 # W6004 need 'void' for no parameter"
-@@warning_message[ :"W6004" ] = "ãã©ã¡ã¼ã¿ãå­å¨ããªãå ´å 'void' ãå¿
-è¦ã§ã"
+@@warning_message[ :"W6004" ] = "パラメータが存在しない場合 'void' が必要です"
 
 ###
-# info ã¡ãã»ã¼ã¸
+# info メッセージ
 @@info_message = {}
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_en_US.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_en_US.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_en_US.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -62,6 +47,6 @@
 
 # MSg.note
-# @@comment[ :note ] = " * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ããèªåçæããã¾ãã
-#  * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ã¯ãæå³ããã¦ãã¾ãã
+# @@comment[ :note ] = " * このファイルは tecsgen により自動生成されました
+#  * このファイルを編集して使用することは、意図されていません
 # "
 @@comment[ :note ] = " * This file was automatically generated by tecsgen.
@@ -70,6 +55,6 @@
 
 # @@comment[ :preamble_note ] = "/* #[<PREAMBLE>]#
-#  * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
-#  * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+#  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+#  * tecsmerge によるマージに使用されます
 # "
 @@comment[ :preamble_note ] = "/* #[<PREAMBLE>]#
@@ -79,5 +64,5 @@
 
 # @@comment[ :postamble_note ] = "/* #[<POSTAMBLE>]#
-#  *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+#  *   これより下に非受け口関数を書きます
 #  * #[</POSTAMBLE>]#*/
 # "
@@ -88,9 +73,9 @@
 
 # @@comment[ :template_note ] = "/*
-#  * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ãããã³ãã¬ã¼ãã¨ãã¦èªåçæããã¾ãã
-#  * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ãæå³ããã¦ãã¾ãã
-#  * tecsgen ã®åå®è¡ã«ããä¸æ¸ãããã¦ãã¾ããããéå¸¸
+#  * このファイルは tecsgen によりテンプレートとして自動生成されました
+#  * このファイルを編集して使用することが意図されていますが
+#  * tecsgen の再実行により上書きされてしまうため、通常
 #  *   gen/%s_templ.c => src/%s.c
-#  * ã®ããã«åå, ãã©ã«ããå¤æ´ãã¦ããä¿®æ­£ãã¾ã
+#  * のように名前, フォルダを変更してから修正します
 #  */
 # "
@@ -104,9 +89,9 @@
 
 # @@comment[ :inline_template_note ] = "/*
-#  * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ãããã³ãã¬ã¼ãã¨ãã¦èªåçæããã¾ãã
-#  * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ãæå³ããã¦ãã¾ãã
-#  * tecsgen ã®åå®è¡ã«ããä¸æ¸ãããã¦ãã¾ããããéå¸¸
+#  * このファイルは tecsgen によりテンプレートとして自動生成されました
+#  * このファイルを編集して使用することが意図されていますが
+#  * tecsgen の再実行により上書きされてしまうため、通常
 #  *   gen/%s_inline_template.h => src/%s_inline.h
-#  * ã®ããã«åå, ãã©ã«ããå¤æ´ãã¦ããä¿®æ­£ãã¾ã
+#  * のように名前, フォルダを変更してから修正します
 #  */
 # "
@@ -119,9 +104,9 @@
 "
 
-# @@comment[ :Makefile_note ] = "# ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ããèªåçæããã¾ãã
-# # Makefile.temp ã¯ gen ã®ä¸ã¤ä¸ã®ãã£ã¬ã¯ããªã«ç§»ãã¦ä½¿ç¨ãã¾ã
+# @@comment[ :Makefile_note ] = "# このファイルは tecsgen により自動生成されました
+# # Makefile.temp は gen の一つ上のディレクトリに移して使用します
 # #  % mv Makefile.temp Makefile
 # # 
-# # clean ã®ããã©ã«ãåä½ã¯ $(GEN_DIR)/Makefile.* ãåé¤ãã¾ã
+# # clean のデフォルト動作は $(GEN_DIR)/Makefile.* を削除します
 # 
 # "
@@ -138,231 +123,220 @@
 "
 
-# @@comment[ :oneway_ercd_note ] = "/* oneway ã®å ´å E_OK ããè¿ãã¾ãã */"
+# @@comment[ :oneway_ercd_note ] = "/* oneway の場合 E_OK しか返せません */"
 @@comment[ :oneway_ercd_note ] = "/* Oneway function always returns E_OK. */"
 
-# @@comment[ :ercd_note ] = "/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */"
+# @@comment[ :ercd_note ] = "/* エラー処理コードをここに記述します */"
 @@comment[ :ercd_note ] = "/* Write error processing code here */"
 
-# @@comment[ :IMP_comment ] = "\n/* import_C ã«ãã import ãããããã %s */\n"
+# @@comment[ :IMP_comment ] = "\n/* import_C により import されるヘッダ %s */\n"
 @@comment[ :IMP_comment ] = "\n/* header imported by import_C %s */\n"
 
-# @@comment[ :MVAR_comment ] = "# å¤æ° %s\n"
+# @@comment[ :MVAR_comment ] = "# 変数 %s\n"
 @@comment[ :MVAR_comment ] = "# var %s\n"
 
-# @@comment[ :MRUL_comment ] = "# ã«ã¼ã« %s\n"
+# @@comment[ :MRUL_comment ] = "# ルール %s\n"
 @@comment[ :MRUL_comment ] = "# Rule %s\n"
 
-# @@comment[ :TCM_comment ] = "# ãã³ãã¬ã¼ãã³ã¼ãã§ã¡ã¼ã¯ãã¦ã¿ãå ´å %s\n"
+# @@comment[ :TCM_comment ] = "# テンプレートコードでメークしてみる場合 %s\n"
 @@comment[ :TCM_comment ] = "# in case build with template code %s\n"
 
-# @@comment[ :MDEP_comment ] = "\n# depend ã include %s\n"
+# @@comment[ :MDEP_comment ] = "\n# depend を include %s\n"
 @@comment[ :MDEP_comment ] = "\n# include dependcy %s\n"
 
-# @@comment[ :SDI_comment ] = "/* ã·ã°ããã£ãã£ã¹ã¯ãªãã¿åç
-§ããã %s */\n"
+# @@comment[ :SDI_comment ] = "/* シグニチャディスクリプタ参照ヘッダ %s */\n"
 @@comment[ :SDI_comment ] = "/* descriptor referencing signature header %s */\n"
 
-# @@comment[ :SD_comment ] = "/* ã·ã°ããã£ãã£ã¹ã¯ãªãã¿ %s */\n"
+# @@comment[ :SD_comment ] = "/* シグニチャディスクリプタ %s */\n"
 @@comment[ :SD_comment ] = "/* signature descriptor %s */\n"
 
-# @@comment[ :SFT_comment ] = "/* ã·ã°ããã£é¢æ°ãã¼ãã« %s */\n"
+# @@comment[ :SFT_comment ] = "/* シグニチャ関数テーブル %s */\n"
 @@comment[ :SFT_comment ] = "/* signature function table %s */\n"
 
-# @@comment[ :SDES_comment ] = "/* ã·ã°ããã£ãã£ã¹ã¯ãªãã¿(åççµåç¨) %s */\n"
+# @@comment[ :SDES_comment ] = "/* シグニチャディスクリプタ(動的結合用) %s */\n"
 @@comment[ :SDES_comment ] = "/* signature descriptor %s for dynamic join */\n"
 
-# @@comment[ :IRTH_comment ] = "/* ã©ã³ã¿ã¤ã ããã %s */\n"
-
-# @@comment[ :UDF_comment ] = "/* inline ã®ããã® undef %s */\n"
+# @@comment[ :IRTH_comment ] = "/* ランタイムヘッダ %s */\n"
+
+# @@comment[ :UDF_comment ] = "/* inline のための undef %s */\n"
 @@comment[ :UDF_comment ] = "/* undef for inline %s */\n"
 
-# @@comment[ :IGH_comment ] = "/* ã°ã­ã¼ãã«ããã %s */\n"
+# @@comment[ :IGH_comment ] = "/* グローバルヘッダ %s */\n"
 @@comment[ :IGH_comment ] = "/* global header %s */\n"
 
-# @@comment[ :ISH_comment ] = "/* ã·ã°ããã£ããã %s */\n"
+# @@comment[ :ISH_comment ] = "/* シグニチャヘッダ %s */\n"
 @@comment[ :ISH_comment ] = "/* signature header %s */\n"
 
-# @@comment[ :ICT_comment ] = "/* æé©åã®ããåç
-§ããã»ã«ã¿ã¤ãã® CB åã®å®ç¾©ãåè¾¼ã %s */\n"
+# @@comment[ :ICT_comment ] = "/* 最適化のため参照するセルタイプの CB 型の定義を取込む %s */\n"
 @@comment[ :ICT_comment ] = "/* to get the definition of CB type of referenced celltype for optimization %s */\n"
 
-# @@comment[ :NIDB_comment ] = "ID ã®ãã¼ã¹ "
+# @@comment[ :NIDB_comment ] = "ID のベース "
 @@comment[ :NIDB_comment ] = "ID Base "
 
-# @@comment[ :NCEL_comment ] = "ã»ã«ã®åæ°"
+# @@comment[ :NCEL_comment ] = "セルの個数"
 @@comment[ :NCEL_comment ] = " number of cells"
 
-# @@comment[ :CVI_comment ] = "/* IDXã®æ­£å½æ§ãã§ãã¯ãã¯ã­ %s */\n"
+# @@comment[ :CVI_comment ] = "/* IDXの正当性チェックマクロ %s */\n"
 @@comment[ :CVI_comment ] = "/* IDX validation macro %s */\n"
 
-# @@comment[ :CVIA_comment ] = "/* IDXã®æ­£å½æ§ãã§ãã¯ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
+# @@comment[ :CVIA_comment ] = "/* IDXの正当性チェックマクロ（短縮形） %s */\n"
 @@comment[ :CVIA_comment ] = "/* IDX validation macro (abbrev.) %s */\n"
 
-# @@comment[ :NCPA_comment ] = "/* å¼ã³å£é
-åã®å¤§ãããå¾ããã¯ã­ %s */\n"
+# @@comment[ :NCPA_comment ] = "/* 呼び口配列の大きさを得るマクロ %s */\n"
 @@comment[ :NCPA_comment ] = "/* call port array size macro %s */\n"
 
-# @@comment[ :NEPA_comment ] = "/* åãå£é
-åã®å¤§ãããå¾ããã¯ã­ %s */\n"
+# @@comment[ :NEPA_comment ] = "/* 受け口配列の大きさを得るマクロ %s */\n"
 @@comment[ :NEPA_comment ] = "/* entry port array size macro %s */\n"
 
-# @@comment[ :TOCP_comment ] = "/* optional å¼ã³å£ããã¹ããããã¯ã­ %s */\n"
+# @@comment[ :TOCP_comment ] = "/* optional 呼び口をテストするマクロ %s */\n"
 @@comment[ :TOCP_comment ] = "/* optional call port test macro %s */\n"
 
-# @@comment[ :TOCPA_comment ] = "/* optional å¼ã³å£ããã¹ããããã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
+# @@comment[ :TOCPA_comment ] = "/* optional 呼び口をテストするマクロ（短縮形） %s */\n"
 @@comment[ :TOCPA_comment ] = "/* optional call port test macro (abbrev) %s */\n"
 
-# @@comment[ :GCB_comment ] = "\n/* ã»ã«CBãå¾ããã¯ã­ %s */\n"
+# @@comment[ :GCB_comment ] = "\n/* セルCBを得るマクロ %s */\n"
 @@comment[ :GCB_comment ] = "\n/* celll CB macro %s */\n"
 
-# @@comment[ :GCBA_comment ] = "\n/* ã»ã«CBãå¾ããã¯ã­(ç­ç¸®å½¢) %s */\n"
+# @@comment[ :GCBA_comment ] = "\n/* セルCBを得るマクロ(短縮形) %s */\n"
 @@comment[ :GCBA_comment ] = "\n/* cell CB macro (abbrev) %s */\n"
 
-# @@comment[ :CCT_comment ] = "/* CELLCB å(ç­ç¸®å½¢) %s */\n"
+# @@comment[ :CCT_comment ] = "/* CELLCB 型(短縮形) %s */\n"
 @@comment[ :CCT_comment ] = "/* CELLCB type (abbrev) %s */\n"
 
-# @@comment[ :CTIXA_comment ] = "/* ã»ã«ã¿ã¤ãã®IDXå(ç­ç¸®å½¢) %s */\n"
+# @@comment[ :CTIXA_comment ] = "/* セルタイプのIDX型(短縮形) %s */\n"
 @@comment[ :CTIXA_comment ] = "/* celltype IDX type (abbrev) %s */\n"
 
-# @@comment[ :AAM_comment ] = "\n/* å±æ§ã¢ã¯ã»ã¹ãã¯ã­ %s */\n"
+# @@comment[ :AAM_comment ] = "\n/* 属性アクセスマクロ %s */\n"
 @@comment[ :AAM_comment ] = "\n/* attr access  %s */\n"
 
-# @@comment[ :VAM_comment ] = "\n/* var ã¢ã¯ã»ã¹ãã¯ã­ %s */\n"
+# @@comment[ :VAM_comment ] = "\n/* var アクセスマクロ %s */\n"
 @@comment[ :VAM_comment ] = "\n/* var access macro %s */\n"
 
-# @@comment[ :AAMA_comment ] = "\n/* å±æ§ã¢ã¯ã»ã¹ãã¯ã­(ç­ç¸®å½¢) %s */\n"
+# @@comment[ :AAMA_comment ] = "\n/* 属性アクセスマクロ(短縮形) %s */\n"
 @@comment[ :AAMA_comment ] = "\n/* attr access macro (abbrev) %s */\n"
 
-# @@comment[ :VAMA_comment ] = "\n/* var ã¢ã¯ã»ã¹ãã¯ã­(ç­ç¸®å½¢) %s */\n"
+# @@comment[ :VAMA_comment ] = "\n/* var アクセスマクロ(短縮形) %s */\n"
 @@comment[ :VAMA_comment ] = "\n/* var access macro (abbrev) %s */\n"
 
-# @@comment[ :CPM_comment ] = " /* å¼ã³å£é¢æ°ãã¯ã­ %s */\n"
+# @@comment[ :CPM_comment ] = " /* 呼び口関数マクロ %s */\n"
 @@comment[ :CPM_comment ] = " /* call port function macro %s */\n"
 
-# @@comment[ :CPMA_comment ] = "/* å¼ã³å£é¢æ°ãã¯ã­ï¼ç­ç¸®å½¢ï¼%s */\n"
+# @@comment[ :CPMA_comment ] = "/* 呼び口関数マクロ（短縮形）%s */\n"
 @@comment[ :CPMA_comment ] = "/* call port function macro (abbrev) %s */\n"
 
-# @@comment[ :EPM_comment ] = "\n/* åãå£é¢æ°ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
+# @@comment[ :EPM_comment ] = "\n/* 受け口関数マクロ（短縮形） %s */\n"
 @@comment[ :EPM_comment ] = "\n/* entry port function macro (abbrev) %s */\n"
 
-# @@comment[ :CRD_comment ] = "\n/* ãã£ã¹ã¯ãªãã¿åç
-§é¢æ° %s */\n"
+# @@comment[ :CRD_comment ] = "\n/* ディスクリプタ参照関数 %s */\n"
 @@comment[ :CRD_comment ] = "/* refer to descriptor function %s */\n"
 
-# @@comment[ :CRDA_comment ] = "\n/* ãã£ã¹ã¯ãªãã¿åç
-§ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
+# @@comment[ :CRDA_comment ] = "\n/* ディスクリプタ参照マクロ（短縮形） %s */\n"
 @@comment[ :CRDA_comment ] = "\n/* refer to descriptor macro (abbrev) %s */\n"
 
-# @@comment[ :SDF_comment ] = "/* ãã£ã¹ã¯ãªãã¿è¨­å®é¢æ° %s */\n"
+# @@comment[ :SDF_comment ] = "/* ディスクリプタ設定関数 %s */\n"
 @@comment[ :SDF_comment ] = "/* set descriptor function %s */\n"
 
-# @@comment[ :SDMA_comment ] = "\n/* ãã£ã¹ã¯ãªãã¿è¨­å®ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
+# @@comment[ :SDMA_comment ] = "\n/* ディスクリプタ設定マクロ（短縮形） %s */\n"
 @@comment[ :SDMA_comment ] = "\n/* set descriptor macro (abbrev) %s */\n"
 
-# @@comment[ :CTIX_comment ] = "\n/* ã»ã«ã¿ã¤ãã®IDXå %s */\n"
+# @@comment[ :CTIX_comment ] = "\n/* セルタイプのIDX型 %s */\n"
 @@comment[ :CTIX_comment ] = "\n/* celltype IDX type %s */\n"
 
-# @@comment[ :EPP_comment ] = "\n/* åãå£é¢æ°ãã­ãã¿ã¤ãå®£è¨ %s */\n"
+# @@comment[ :EPP_comment ] = "\n/* 受け口関数プロトタイプ宣言 %s */\n"
 @@comment[ :EPP_comment ] = "\n/* prototype declaration of entry port function %s */\n"
 
-# @@comment[ :EPSP_comment ] = "\n/* åãå£ã¹ã±ã«ãã³é¢æ°ãã­ãã¿ã¤ãå®£è¨ï¼VMTä¸è¦æé©åã«ããåç
-§ãããã®ï¼ %s */\n"
+# @@comment[ :EPSP_comment ] = "\n/* 受け口スケルトン関数プロトタイプ宣言（VMT不要最適化により参照するもの） %s */\n"
 @@comment[ :EPSP_comment ] = "\n/* prototype declaration of entry port function (referenced when VMT useless optimise enabled) %s */\n"
 
-# @@comment[ :INL_comment ] = "/* inline ãããã® include %s */\n"
+# @@comment[ :INL_comment ] = "/* inline ヘッダの include %s */\n"
 @@comment[ :INL_comment ] = "/*  include inline header %s */\n"
 
-# @@comment[ :CIP_comment ] = "/* ã»ã« INIB åå®£è¨ %s */\n"
+# @@comment[ :CIP_comment ] = "/* セル INIB 型宣言 %s */\n"
 @@comment[ :CIP_comment ] = "/* cell INIB type definition %s */\n"
 
-# @@comment[ :CCTPA_comment ] = "/* ã»ã« CB åå®£è¨ %s */\n"
+# @@comment[ :CCTPA_comment ] = "/* セル CB 型宣言 %s */\n"
 @@comment[ :CCTPA_comment ] = "/* cell CB type definition %s */\n"
 
-# @@comment[ :CCDP_comment ] = "/* ã»ã« CB (ããã¼)åå®£è¨ %s */\n"
+# @@comment[ :CCDP_comment ] = "/* セル CB (ダミー)型宣言 %s */\n"
 @@comment[ :CCDP_comment ] = "/* cell CB (dummy) type definition %s */\n"
 
-# @@comment[ :CCTPO_comment ] = "/* ã»ã« CB åå®£è¨ %s */\n"
+# @@comment[ :CCTPO_comment ] = "/* セル CB 型宣言 %s */\n"
 @@comment[ :CCTPO_comment ] = "/* cell CB type definition %s */\n"
 
-# @@comment[ :SCP_comment ] = "/* ã·ã³ã°ã«ãã³ã»ã« CB ãã­ãã¿ã¤ãå®£è¨ %s */\n"
+# @@comment[ :SCP_comment ] = "/* シングルトンセル CB プロトタイプ宣言 %s */\n"
 @@comment[ :SCP_comment ] = "/* singleton cell CB prototype declaration %s */\n"
 
-# @@comment[ :DCI_comment ] = "\n/* CB ã¯å­å¨ããªããINIB ã CB ã®ä»£ããã«ä½¿ç¨ããããã® define %s */\n"
+# @@comment[ :DCI_comment ] = "\n/* CB は存在しない。INIB を CB の代わりに使用するための define %s */\n"
 @@comment[ :DCI_comment ] = "\n/* CB not exist. CB corresponding to INIB %s */\n"
 
-# @@comment[ :FEC_comment ] = "/* ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ %s */\n"
+# @@comment[ :FEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成 %s */\n"
 @@comment[ :FEC_comment ] = "/* iteration code (FOREACH_CELL) %s */\n"
 
-# @@comment[ :DAL_comment ] = "/* deallocate ãã¯ã­ %s */\n"
+# @@comment[ :DAL_comment ] = "/* deallocate マクロ %s */\n"
 @@comment[ :DAL_comment ] = "/* deallocate macro %s */\n"
 
-# @@comment[ :NFEC_comment ] = "/* ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ(CB,INIB ã¯å­å¨ããªã) %s */\n"
+# @@comment[ :NFEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成(CB,INIB は存在しない) %s */\n"
 @@comment[ :NFEC_comment ] = "/* iteration code (FOREACH_CELL) (niether CB, nor NIB exit) %s */\n"
 
-# @@comment[ :CIM_comment ] = "/* CB åæåãã¯ã­ %s */\n"
+# @@comment[ :CIM_comment ] = "/* CB 初期化マクロ %s */\n"
 @@comment[ :CIM_comment ] = "/* CB initialize macro %s */\n"
 
-# @@comment[ :EDT_comment ] = "/* åãå£ãã£ã¹ã¯ãªãã¿å %s */\n"
+# @@comment[ :EDT_comment ] = "/* 受け口ディスクリプタ型 %s */\n"
 @@comment[ :EDT_comment ] = "/* entry port descriptor type %s */\n"
 
-# @@comment[ :EPSF_comment ] = "/* åãå£ã¹ã±ã«ãã³é¢æ° %s */\n"
+# @@comment[ :EPSF_comment ] = "/* 受け口スケルトン関数 %s */\n"
 @@comment[ :EPSF_comment ] = "/* entry port skelton function %s */\n"
 
-# @@comment[ :EPSFT_comment ] = "/* åãå£ã¹ã±ã«ãã³é¢æ°ãã¼ãã« %s */\n"
+# @@comment[ :EPSFT_comment ] = "/* 受け口スケルトン関数テーブル %s */\n"
 @@comment[ :EPSFT_comment ] = "/* entry port skelton function table %s */\n"
 
-# @@comment[ :CPEPD_comment ] = "/* å¼ã³å£ã®åç
-§ããåãå£ãã£ã¹ã¯ãªãã¿(å®éã®åã¨ç¸éããå®ç¾©) %s */\n"
+# @@comment[ :CPEPD_comment ] = "/* 呼び口の参照する受け口ディスクリプタ(実際の型と相違した定義) %s */\n"
 @@comment[ :CPEPD_comment ] = "/* entry port descriptor referenced by call port (differ from actual definition) %s */\n"
 
-# @@comment[ :CPA_comment ] = "/* å¼ã³å£é
-å %s */\n"
+# @@comment[ :CPA_comment ] = "/* 呼び口配列 %s */\n"
 @@comment[ :CPA_comment ] = "/* call port array %s */\n"
 
-# @@comment[ :CIC_comment ] = "/* CB åæåã³ã¼ã %s */\n"
+# @@comment[ :CIC_comment ] = "/* CB 初期化コード %s */\n"
 @@comment[ :CIC_comment ] = "/* CB initialize code %s */\n"
 
-# @@comment[ :AVAI_comment ] = "/* å±æ§ã»å¤æ°ã®é
-å %s */\n"
+# @@comment[ :AVAI_comment ] = "/* 属性・変数の配列 %s */\n"
 @@comment[ :AVAI_comment ] = "/* array of attr/var %s */\n"
 
-# @@comment[ :AVI_comment ] = "/* å¤æ°(æ§é ä½ãé
-å)åæå¤ %s */\n"
+# @@comment[ :AVI_comment ] = "/* 変数(構造体、配列)初期値 %s */\n"
 @@comment[ :AVI_comment ] = "/* var (struct, array) initial value %s */\n"
 
-# @@comment[ :INIB_comment ] = "/* ã»ã« INIB %s */\n"
+# @@comment[ :INIB_comment ] = "/* セル INIB %s */\n"
 @@comment[ :INIB_comment ] = "/* cell INIB %s */\n"
 
-# @@comment[ :CB_comment ] = "/* ã»ã« CB %s */\n"
+# @@comment[ :CB_comment ] = "/* セル CB %s */\n"
 @@comment[ :CB_comment ] = "/* cell CB %s */\n"
 
-# @@comment[ :EPD_comment ] = "/* åãå£ãã£ã¹ã¯ãªãã¿ %s */\n"
+# @@comment[ :EPD_comment ] = "/* 受け口ディスクリプタ %s */\n"
 @@comment[ :EPD_comment ] = "/* entry port descriptor %s */\n"
 
-# @@comment[ :PAC_comment ] = "/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã %s */\n"
+# @@comment[ :PAC_comment ] = "/* プロトタイプ宣言や変数の定義をここに書きます %s */\n"
 @@comment[ :PAC_comment ] = "/* Put prototype declaration and/or variale definition here %s */\n"
 
-# @@comment[ :CAAM_comment ] = " *\n * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ %s\n"
+# @@comment[ :CAAM_comment ] = " *\n * 属性アクセスマクロ %s\n"
 @@comment[ :CAAM_comment ] = " *\n * attr access macro %s\n"
 
-# @@comment[ :CAAMI_comment ] = " *\n * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ %s\n"
+# @@comment[ :CAAMI_comment ] = " *\n * 属性アクセスマクロ %s\n"
 @@comment[ :CAAMI_comment ] = " *\n * attr access macro %s\n"
 
-# @@comment[ :TYP_comment ] = " *\n * å %s\n * CELLCB å  : %s\n * CELLIDX å : %s\n"
+# @@comment[ :TYP_comment ] = " *\n * 型 %s\n * CELLCB 型  : %s\n * CELLIDX 型 : %s\n"
 @@comment[ :TYP_comment ] = " *\n * type %s\n * CELLCB type  : %s\n * CELLIDX type : %s\n"
 
-# @@comment[ :TCPF_comment ] = " * å¼ã³å£é¢æ° %s\n"
+# @@comment[ :TCPF_comment ] = " * 呼び口関数 %s\n"
 @@comment[ :TCPF_comment ] = " * call port function %s\n"
 
-# @@comment[ :TEPF_comment ] = "/* åãå£é¢æ° %s */\n"
+# @@comment[ :TEPF_comment ] = "/* 受け口関数 %s */\n"
 @@comment[ :TEPF_comment ] = "/* entry port function %s */\n"
 
-# @@comment[ :TEFB_comment ] = "\t/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã %s */\n"
+# @@comment[ :TEFB_comment ] = "\t/* ここに処理本体を記述します %s */\n"
 @@comment[ :TEFB_comment ] = "\t/* Put statements here %s */\n"
 
-# @@comment[ :MCPP_comment ] = "/* ã»ã« CB ãã­ãã¿ã¤ãå®£è¨ %s */\n"
+# @@comment[ :MCPP_comment ] = "/* セル CB プロトタイプ宣言 %s */\n"
 @@comment[ :MCPP_comment ] = "/* cell CB prototype declaration %s */\n"
 
-# @@comment[ :MCPB_comment ] = "/* ã»ã« CB ãã­ãã¿ã¤ãå®£è¨ %s */\n"
+# @@comment[ :MCPB_comment ] = "/* セル CB プロトタイプ宣言 %s */\n"
 @@comment[ :MCPB_comment ] = "/* cell CB prototype declaration %s */\n"
 end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_ja_JP.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_ja_JP.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/messages/messages_file_ja_JP.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -62,136 +47,122 @@
 
 # MSg.note
-@@comment[ :note ] = " * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ããèªåçæããã¾ãã
- * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ã¯ãæå³ããã¦ãã¾ãã
+@@comment[ :note ] = " * このファイルは tecsgen により自動生成されました
+ * このファイルを編集して使用することは、意図されていません
 "
 
 @@comment[ :preamble_note ] = "/* #[<PREAMBLE>]#
- * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
- * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+ * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+ * tecsmerge によるマージに使用されます
 "
 
 @@comment[ :postamble_note ] = "/* #[<POSTAMBLE>]#
- *   ããããä¸ã«éåãå£é¢æ°ãæ¸ãã¾ã
+ *   これより下に非受け口関数を書きます
  * #[</POSTAMBLE>]#*/
 "
 
 @@comment[ :template_note ] = "/*
- * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ãããã³ãã¬ã¼ãã¨ãã¦èªåçæããã¾ãã
- * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ãæå³ããã¦ãã¾ãã
- * tecsgen ã®åå®è¡ã«ããä¸æ¸ãããã¦ãã¾ããããéå¸¸
+ * このファイルは tecsgen によりテンプレートとして自動生成されました
+ * このファイルを編集して使用することが意図されていますが
+ * tecsgen の再実行により上書きされてしまうため、通常
  *   gen/%s_templ.c => src/%s.c
- * ã®ããã«åå, ãã©ã«ããå¤æ´ãã¦ããä¿®æ­£ãã¾ã
+ * のように名前, フォルダを変更してから修正します
  */
 "
 
 @@comment[ :inline_template_note ] = "/*
- * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ãããã³ãã¬ã¼ãã¨ãã¦èªåçæããã¾ãã
- * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ãæå³ããã¦ãã¾ãã
- * tecsgen ã®åå®è¡ã«ããä¸æ¸ãããã¦ãã¾ããããéå¸¸
+ * このファイルは tecsgen によりテンプレートとして自動生成されました
+ * このファイルを編集して使用することが意図されていますが
+ * tecsgen の再実行により上書きされてしまうため、通常
  *   gen/%s_inline_template.h => src/%s_inline.h
- * ã®ããã«åå, ãã©ã«ããå¤æ´ãã¦ããä¿®æ­£ãã¾ã
+ * のように名前, フォルダを変更してから修正します
  */
 "
 
-@@comment[ :Makefile_note ] = "# ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ããèªåçæããã¾ãã
-# Makefile.temp ã¯ gen ã®ä¸ã¤ä¸ã®ãã£ã¬ã¯ããªã«ç§»ãã¦ä½¿ç¨ãã¾ã
+@@comment[ :Makefile_note ] = "# このファイルは tecsgen により自動生成されました
+# Makefile.temp は gen の一つ上のディレクトリに移して使用します
 #  % mv Makefile.temp Makefile
 # 
-# clean ã®ããã©ã«ãåä½ã¯ $(GEN_DIR)/Makefile.* ãåé¤ãã¾ã
+# clean のデフォルト動作は $(GEN_DIR)/Makefile.* を削除します
 #
-# ãã®ãã¡ã¤ã«ã¯ GNU make ã§ gcc ãç¨ã POSIX ç°å¢ã§åä½ããã¢ã¸ã¥ã¼ã«ããã«ãããã®ã«é©åãªããã«çæããã¦ãã¾ã
-# vpath, CFLAGS, OTHER_OBJS ãªã©ãèª¿æ´ããå¿
-è¦ãããããããã¾ãã
-# ä»ã®ç°å¢ãã¿ã¼ã²ããã®å ´åããã®ãã¡ã¤ã«ãå
-ã«å¤æ´ããå¿
-è¦ãããã¾ã
+# このファイルは GNU make で gcc を用い POSIX 環境で動作するモジュールをビルドするのに適切なように生成されています
+# vpath, CFLAGS, OTHER_OBJS などを調整する必要があるかもしれません
+# 他の環境やターゲットの場合、このファイルを元に変更する必要があります
 
 "
 
-@@comment[ :oneway_ercd_note ] = "/* oneway ã®å ´å E_OK ããè¿ãã¾ãã */"
-@@comment[ :ercd_note ] = "/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿°ãã¾ã */"
+@@comment[ :oneway_ercd_note ] = "/* oneway の場合 E_OK しか返せません */"
+@@comment[ :ercd_note ] = "/* エラー処理コードをここに記述します */"
 
-@@comment[ :IMP_comment ] = "\n/* import_C ã«ãã import ãããããã %s */\n"
-@@comment[ :MVAR_comment ] = "# å¤æ° %s\n"
-@@comment[ :MRUL_comment ] = "# ã«ã¼ã« %s\n"
-@@comment[ :TCM_comment ] = "# ãã³ãã¬ã¼ãã³ã¼ãã§ã¡ã¼ã¯ãã¦ã¿ãå ´å %s \n"
-@@comment[ :MDEP_comment ] = "\n# depend ã include %s\n"
-@@comment[ :SDI_comment ] = "/* ã·ã°ããã£ãã£ã¹ã¯ãªãã¿åç
-§ããã %s */\n"
-@@comment[ :SD_comment ] = "/* ã·ã°ããã£ãã£ã¹ã¯ãªãã¿ %s */\n"
-@@comment[ :SFT_comment ] = "/* ã·ã°ããã£é¢æ°ãã¼ãã« %s */\n"
-@@comment[ :SDES_comment ] = "/* ã·ã°ããã£ãã£ã¹ã¯ãªãã¿(åççµåç¨) %s */\n"
-# @@comment[ :IRTH_comment ] = "/* ã©ã³ã¿ã¤ã ããã %s */\n"
-@@comment[ :UDF_comment ] = "/* inline ã®ããã® undef %s */\n"
-@@comment[ :IGH_comment ] = "/* ã°ã­ã¼ãã«ããã %s */\n"
-@@comment[ :ISH_comment ] = "/* ã·ã°ããã£ããã %s */\n"
-@@comment[ :ICT_comment ] = "/* æé©åã®ããåç
-§ããã»ã«ã¿ã¤ãã® CB åã®å®ç¾©ãåè¾¼ã %s */\n"
-@@comment[ :NIDB_comment ] = "ID ã®ãã¼ã¹ "
-@@comment[ :NCEL_comment ] = "ã»ã«ã®åæ°"
-@@comment[ :CVI_comment ] = "/* IDXã®æ­£å½æ§ãã§ãã¯ãã¯ã­ %s */\n"
-@@comment[ :CVIA_comment ] = "/* IDXã®æ­£å½æ§ãã§ãã¯ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
-@@comment[ :NCPA_comment ] = "/* å¼ã³å£é
-åã®å¤§ãããå¾ããã¯ã­ %s */\n"
-@@comment[ :NEPA_comment ] = "/* åãå£é
-åã®å¤§ãããå¾ããã¯ã­ %s */\n"
-@@comment[ :TOCP_comment ] = "/* optional å¼ã³å£ããã¹ããããã¯ã­ %s */\n"
-@@comment[ :TOCPA_comment ] = "/* optional å¼ã³å£ããã¹ããããã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
-@@comment[ :GCB_comment ] = "\n/* ã»ã«CBãå¾ããã¯ã­ %s */\n"
-@@comment[ :GCBA_comment ] = "\n/* ã»ã«CBãå¾ããã¯ã­(ç­ç¸®å½¢) %s */\n"
-@@comment[ :CCT_comment ] = "/* CELLCB å(ç­ç¸®å½¢) %s */\n"
-@@comment[ :CTIXA_comment ] = "/* ã»ã«ã¿ã¤ãã®IDXå(ç­ç¸®å½¢) %s */\n"
-@@comment[ :AAM_comment ] = "\n/* å±æ§ã¢ã¯ã»ã¹ãã¯ã­ %s */\n"
-@@comment[ :VAM_comment ] = "\n/* var ã¢ã¯ã»ã¹ãã¯ã­ %s */\n"
-@@comment[ :AAMA_comment ] = "\n/* å±æ§ã¢ã¯ã»ã¹ãã¯ã­(ç­ç¸®å½¢) %s */\n"
-@@comment[ :VAMA_comment ] = "\n/* var ã¢ã¯ã»ã¹ãã¯ã­(ç­ç¸®å½¢) %s */\n"
-@@comment[ :CPM_comment ] = " /* å¼ã³å£é¢æ°ãã¯ã­ %s */\n"
-@@comment[ :CPMA_comment ] = "/* å¼ã³å£é¢æ°ãã¯ã­ï¼ç­ç¸®å½¢ï¼%s */\n"
-@@comment[ :EPM_comment ] = "\n/* åãå£é¢æ°ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
-@@comment[ :CRD_comment ] = "/* ãã£ã¹ã¯ãªãã¿åç
-§é¢æ° %s */\n"
-@@comment[ :CRDA_comment ] = "\n/* ãã£ã¹ã¯ãªãã¿åç
-§ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
-@@comment[ :SDF_comment ] = "/* ãã£ã¹ã¯ãªãã¿è¨­å®é¢æ° %s */\n"
-@@comment[ :SDMA_comment ] = "\n/* ãã£ã¹ã¯ãªãã¿è¨­å®ãã¯ã­ï¼ç­ç¸®å½¢ï¼ %s */\n"
-@@comment[ :CTIX_comment ] = "\n/* ã»ã«ã¿ã¤ãã®IDXå %s */\n"
-@@comment[ :EPP_comment ] = "\n/* åãå£é¢æ°ãã­ãã¿ã¤ãå®£è¨ %s */\n"
-@@comment[ :EPSP_comment ] = "\n/* åãå£ã¹ã±ã«ãã³é¢æ°ãã­ãã¿ã¤ãå®£è¨ï¼VMTä¸è¦æé©åã«ããåç
-§ãããã®ï¼ %s */\n"
-@@comment[ :INL_comment ] = "/* inline ãããã® include %s */\n"
-@@comment[ :CIP_comment ] = "/* ã»ã« INIB åå®£è¨ %s */\n"
-@@comment[ :CCTPA_comment ] = "/* ã»ã« CB åå®£è¨ %s */\n"
-@@comment[ :CCDP_comment ] = "/* ã»ã« CB (ããã¼)åå®£è¨ %s */\n"
-@@comment[ :CCTPO_comment ] = "/* ã»ã« CB åå®£è¨ %s */\n"
-@@comment[ :SCP_comment ] = "/* ã·ã³ã°ã«ãã³ã»ã« CB ãã­ãã¿ã¤ãå®£è¨ %s */\n"
-@@comment[ :DCI_comment ] = "\n/* CB ã¯å­å¨ããªããINIB ã CB ã®ä»£ããã«ä½¿ç¨ããããã® define %s */\n"
-@@comment[ :FEC_comment ] = "/* ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ %s */\n"
-@@comment[ :DAL_comment ] = "/* deallocate ãã¯ã­ %s */\n"
-@@comment[ :NFEC_comment ] = "/* ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ(CB,INIB ã¯å­å¨ããªã) %s */\n"
-@@comment[ :CIM_comment ] = "/* CB åæåãã¯ã­ %s */\n"
-@@comment[ :EDT_comment ] = "/* åãå£ãã£ã¹ã¯ãªãã¿å %s */\n"
-@@comment[ :EPSF_comment ] = "/* åãå£ã¹ã±ã«ãã³é¢æ° %s */\n"
-@@comment[ :EPSFT_comment ] = "/* åãå£ã¹ã±ã«ãã³é¢æ°ãã¼ãã« %s */\n"
-@@comment[ :CPEPD_comment ] = "/* å¼ã³å£ã®åç
-§ããåãå£ãã£ã¹ã¯ãªãã¿(å®éã®åã¨ç¸éããå®ç¾©) %s */\n"
-@@comment[ :CPA_comment ] = "/* å¼ã³å£é
-å %s */\n"
-@@comment[ :CIC_comment ] = "/* CB åæåã³ã¼ã %s */\n"
-@@comment[ :AVAI_comment ] = "/* å±æ§ã»å¤æ°ã®é
-å %s */\n"
-@@comment[ :AVI_comment ] = "/* å¤æ°(æ§é ä½ãé
-å)åæå¤ %s */\n"
-@@comment[ :INIB_comment ] = "/* ã»ã« INIB %s */\n"
-@@comment[ :CB_comment ] = "/* ã»ã« CB %s */\n"
-@@comment[ :EPD_comment ] = "/* åãå£ãã£ã¹ã¯ãªãã¿ %s */\n"
-@@comment[ :PAC_comment ] = "/* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã %s */\n"
-@@comment[ :CAAM_comment ] = " *\n * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ %s\n"
-@@comment[ :CAAMI_comment ] = " *\n * å±æ§ã¢ã¯ã»ã¹ãã¯ã­ %s\n"
-@@comment[ :TYP_comment ] = " *\n * å %s\n * CELLCB å  : %s\n * CELLIDX å : %s\n"
-@@comment[ :TCPF_comment ] = " * å¼ã³å£é¢æ° %s\n"
-@@comment[ :TEPF_comment ] = "/* åãå£é¢æ° %s */\n"
-@@comment[ :TEFB_comment ] = "\t/* ããã«å¦çæ¬ä½ãè¨è¿°ãã¾ã %s */\n"
-@@comment[ :MCPP_comment ] = "/* CB ãã­ãã¿ã¤ãå®£è¨ %s */\n"
-@@comment[ :MCPB_comment ] = "/* CB ãã­ãã¿ã¤ãå®£è¨ %s */\n"
+@@comment[ :IMP_comment ] = "\n/* import_C により import されるヘッダ %s */\n"
+@@comment[ :MVAR_comment ] = "# 変数 %s\n"
+@@comment[ :MRUL_comment ] = "# ルール %s\n"
+@@comment[ :TCM_comment ] = "# テンプレートコードでメークしてみる場合 %s \n"
+@@comment[ :MDEP_comment ] = "\n# depend を include %s\n"
+@@comment[ :SDI_comment ] = "/* シグニチャディスクリプタ参照ヘッダ %s */\n"
+@@comment[ :SD_comment ] = "/* シグニチャディスクリプタ %s */\n"
+@@comment[ :SFT_comment ] = "/* シグニチャ関数テーブル %s */\n"
+@@comment[ :SDES_comment ] = "/* シグニチャディスクリプタ(動的結合用) %s */\n"
+# @@comment[ :IRTH_comment ] = "/* ランタイムヘッダ %s */\n"
+@@comment[ :UDF_comment ] = "/* inline のための undef %s */\n"
+@@comment[ :IGH_comment ] = "/* グローバルヘッダ %s */\n"
+@@comment[ :ISH_comment ] = "/* シグニチャヘッダ %s */\n"
+@@comment[ :ICT_comment ] = "/* 最適化のため参照するセルタイプの CB 型の定義を取込む %s */\n"
+@@comment[ :NIDB_comment ] = "ID のベース "
+@@comment[ :NCEL_comment ] = "セルの個数"
+@@comment[ :CVI_comment ] = "/* IDXの正当性チェックマクロ %s */\n"
+@@comment[ :CVIA_comment ] = "/* IDXの正当性チェックマクロ（短縮形） %s */\n"
+@@comment[ :NCPA_comment ] = "/* 呼び口配列の大きさを得るマクロ %s */\n"
+@@comment[ :NEPA_comment ] = "/* 受け口配列の大きさを得るマクロ %s */\n"
+@@comment[ :TOCP_comment ] = "/* optional 呼び口をテストするマクロ %s */\n"
+@@comment[ :TOCPA_comment ] = "/* optional 呼び口をテストするマクロ（短縮形） %s */\n"
+@@comment[ :GCB_comment ] = "\n/* セルCBを得るマクロ %s */\n"
+@@comment[ :GCBA_comment ] = "\n/* セルCBを得るマクロ(短縮形) %s */\n"
+@@comment[ :CCT_comment ] = "/* CELLCB 型(短縮形) %s */\n"
+@@comment[ :CTIXA_comment ] = "/* セルタイプのIDX型(短縮形) %s */\n"
+@@comment[ :AAM_comment ] = "\n/* 属性アクセスマクロ %s */\n"
+@@comment[ :VAM_comment ] = "\n/* var アクセスマクロ %s */\n"
+@@comment[ :AAMA_comment ] = "\n/* 属性アクセスマクロ(短縮形) %s */\n"
+@@comment[ :VAMA_comment ] = "\n/* var アクセスマクロ(短縮形) %s */\n"
+@@comment[ :CPM_comment ] = " /* 呼び口関数マクロ %s */\n"
+@@comment[ :CPMA_comment ] = "/* 呼び口関数マクロ（短縮形）%s */\n"
+@@comment[ :EPM_comment ] = "\n/* 受け口関数マクロ（短縮形） %s */\n"
+@@comment[ :CRD_comment ] = "/* ディスクリプタ参照関数 %s */\n"
+@@comment[ :CRDA_comment ] = "\n/* ディスクリプタ参照マクロ（短縮形） %s */\n"
+@@comment[ :SDF_comment ] = "/* ディスクリプタ設定関数 %s */\n"
+@@comment[ :SDMA_comment ] = "\n/* ディスクリプタ設定マクロ（短縮形） %s */\n"
+@@comment[ :CTIX_comment ] = "\n/* セルタイプのIDX型 %s */\n"
+@@comment[ :EPP_comment ] = "\n/* 受け口関数プロトタイプ宣言 %s */\n"
+@@comment[ :EPSP_comment ] = "\n/* 受け口スケルトン関数プロトタイプ宣言（VMT不要最適化により参照するもの） %s */\n"
+@@comment[ :INL_comment ] = "/* inline ヘッダの include %s */\n"
+@@comment[ :CIP_comment ] = "/* セル INIB 型宣言 %s */\n"
+@@comment[ :CCTPA_comment ] = "/* セル CB 型宣言 %s */\n"
+@@comment[ :CCDP_comment ] = "/* セル CB (ダミー)型宣言 %s */\n"
+@@comment[ :CCTPO_comment ] = "/* セル CB 型宣言 %s */\n"
+@@comment[ :SCP_comment ] = "/* シングルトンセル CB プロトタイプ宣言 %s */\n"
+@@comment[ :DCI_comment ] = "\n/* CB は存在しない。INIB を CB の代わりに使用するための define %s */\n"
+@@comment[ :FEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成 %s */\n"
+@@comment[ :DAL_comment ] = "/* deallocate マクロ %s */\n"
+@@comment[ :NFEC_comment ] = "/* イテレータコード (FOREACH_CELL)の生成(CB,INIB は存在しない) %s */\n"
+@@comment[ :CIM_comment ] = "/* CB 初期化マクロ %s */\n"
+@@comment[ :EDT_comment ] = "/* 受け口ディスクリプタ型 %s */\n"
+@@comment[ :EPSF_comment ] = "/* 受け口スケルトン関数 %s */\n"
+@@comment[ :EPSFT_comment ] = "/* 受け口スケルトン関数テーブル %s */\n"
+@@comment[ :CPEPD_comment ] = "/* 呼び口の参照する受け口ディスクリプタ(実際の型と相違した定義) %s */\n"
+@@comment[ :CPA_comment ] = "/* 呼び口配列 %s */\n"
+@@comment[ :CIC_comment ] = "/* CB 初期化コード %s */\n"
+@@comment[ :AVAI_comment ] = "/* 属性・変数の配列 %s */\n"
+@@comment[ :AVI_comment ] = "/* 変数(構造体、配列)初期値 %s */\n"
+@@comment[ :INIB_comment ] = "/* セル INIB %s */\n"
+@@comment[ :CB_comment ] = "/* セル CB %s */\n"
+@@comment[ :EPD_comment ] = "/* 受け口ディスクリプタ %s */\n"
+@@comment[ :PAC_comment ] = "/* プロトタイプ宣言や変数の定義をここに書きます %s */\n"
+@@comment[ :CAAM_comment ] = " *\n * 属性アクセスマクロ %s\n"
+@@comment[ :CAAMI_comment ] = " *\n * 属性アクセスマクロ %s\n"
+@@comment[ :TYP_comment ] = " *\n * 型 %s\n * CELLCB 型  : %s\n * CELLIDX 型 : %s\n"
+@@comment[ :TCPF_comment ] = " * 呼び口関数 %s\n"
+@@comment[ :TEPF_comment ] = "/* 受け口関数 %s */\n"
+@@comment[ :TEFB_comment ] = "\t/* ここに処理本体を記述します %s */\n"
+@@comment[ :MCPP_comment ] = "/* CB プロトタイプ宣言 %s */\n"
+@@comment[ :MCPB_comment ] = "/* CB プロトタイプ宣言 %s */\n"
 
 end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1AlarmPlugin.rb	(revision 389)
@@ -6,68 +6,52 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class ATK1AlarmPlugin < CelltypePlugin
 #@celltype:: Celltype
-#@option:: String     :ãªãã·ã§ã³æå­å
-
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+#@option:: String     :オプション文字列
+
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
 #  end
@@ -76,10 +60,8 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã®å ´åãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã®ã¡ã½ãããå®ç¾©æ¸ã¿ã®å ´åãï¼ãã³ãã¬ã¼ãã§ã¯ãªããå¤æ´ããå¿
-è¦ã®ãªãï¼ã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
+  #     このメソッドが定義済みの場合、（テンプレートではなく、変更する必要のない）セルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -190,5 +172,5 @@
   file2.close
 
-  # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+  # 追記するために AppFile を使う（文字コード変換されない）
   file = AppFile.open( "#{$gen}/tAlarm_tecsgen.#{$c_suffix}" )
   file.print "\n/* Generated by ATK1AlarmPlugin */\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1DelayTaskPlugin.rb	(revision 389)
@@ -6,68 +6,52 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class ATK1DelayTaskPlugin < CelltypePlugin
 #@celltype:: Celltype
-#@option:: String     :ãªãã·ã§ã³æå­å
+#@option:: String     :オプション文字列
 
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
 #  end
@@ -83,10 +67,8 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã®å ´åãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã®ã¡ã½ãããå®ç¾©æ¸ã¿ã®å ´åãï¼ãã³ãã¬ã¼ãã§ã¯ãªããå¤æ´ããå¿
-è¦ã®ãªãï¼ã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
+  #     このメソッドが定義済みの場合、（テンプレートではなく、変更する必要のない）セルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -102,5 +84,5 @@
   def gen_factory file
 
-    # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+    # 追記するために AppFile を使う（文字コード変換されない）
     file2 = AppFile.open( "#{$gen}/tDelayTaskBody_factory.#{$h_suffix}" )
     file2.print "\n/* Generated by ATK1DelayTaskPlugin */\n\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1EventPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1EventPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1EventPlugin.rb	(revision 389)
@@ -6,63 +6,45 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id
 #++
 
-#== ATK1 Event celltype ãã©ã°ã¤ã³ã¯ã©ã¹
+#== ATK1 Event celltype プラグインクラス
 class ATK1EventPlugin < CelltypePlugin
-#@@instancies:: []     :ã»ã«å®ä½ç¾¤
+#@@instancies:: []     :セル実体群
 @@instancies = []
 
-  #===  åæå
-  #      å
-¨ã¦ã®ã»ã«ã®å®ä½ãæå³è§£æå¾ã«åç
-§ããå¿
-è¦ãããããã«
-  #      åæåæã« singleton ã® instancies ã«æ ¼ç´ãã
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #===  初期化
+  #      全てのセルの実体を意味解析後に参照する必要があるために
+  #      初期化時に singleton の instancies に格納する
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
@@ -70,9 +52,9 @@
   end
 
-  #===  cellã®çæ
+  #===  cellの生成
   def new_cell cell
   end
 
-  #===  æå³è§£æå®è¡å¾ã®ã³ã¼ãçæ
+  #===  意味解析実行後のコード生成
   def self.gen_post_code file
 
@@ -83,5 +65,5 @@
   end
 
-  #===  OILãã¡ã¤ã«åºå
+  #===  OILファイル出力
   def gen_oil_code file
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ISRPlugin.rb	(revision 389)
@@ -6,68 +6,52 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class ATK1ISRPlugin < CelltypePlugin
 #@celltype:: Celltype
-#@option:: String     :ãªãã·ã§ã³æå­å
+#@option:: String     :オプション文字列
 
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
 #  end
@@ -76,10 +60,8 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã®å ´åãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã®ã¡ã½ãããå®ç¾©æ¸ã¿ã®å ´åãï¼ãã³ãã¬ã¼ãã§ã¯ãªããå¤æ´ããå¿
-è¦ã®ãªãï¼ã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
+  #     このメソッドが定義済みの場合、（テンプレートではなく、変更する必要のない）セルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -116,5 +98,5 @@
       end
 
-      # ENTRY (entryã¯tecsgenã®äºç´èªã®ããNumberãä»å )
+      # ENTRY (entryはtecsgenの予約語のためNumberを付加)
       join = cell.get_join_list.get_item( :entryNumber )
       if join then
@@ -152,5 +134,5 @@
   file2.close
 
-  # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+  # 追記するために AppFile を使う（文字コード変換されない）
   file = AppFile.open( "#{$gen}/tISR_tecsgen.#{$c_suffix}" )
   file.print "\n/* Generated by ATK1ISRPlugin */\n"
@@ -165,6 +147,5 @@
 #if defined( OMIT_ISR1_ENTRY )
 EOT
-          file.print "/* ISR1å
-¥ãå£æªçææã¯æ¬é¢æ°ãå²è¾¼ã¿é¢æ°æå®ãã  */\n"
+          file.print "/* ISR1入り口未生成時は本関数を割込み関数指定する  */\n"
           file.print <<EOT
 #pragma INTERRUPT  #{cell.get_name}
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1KernelPlugin.rb	(revision 389)
@@ -6,69 +6,53 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class ATK1KernelPlugin < CelltypePlugin
 #@celltype:: Celltype
-#@option:: String     :ãªãã·ã§ã³æå­å
+#@option:: String     :オプション文字列
   @@cell_list = []
 
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
 #  end
@@ -85,10 +69,8 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã®å ´åãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã®ã¡ã½ãããå®ç¾©æ¸ã¿ã®å ´åãï¼ãã³ãã¬ã¼ãã§ã¯ãªããå¤æ´ããå¿
-è¦ã®ãªãï¼ã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
+  #     このメソッドが定義済みの場合、（テンプレートではなく、変更する必要のない）セルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -184,5 +166,5 @@
     file2.close
 
-    # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+    # 追記するために AppFile を使う（文字コード変換されない）
     file2 = AppFile.open( "#{$gen}/tKernel_tecsgen.#{$c_suffix}" )
     file2.print "\n/* Generated by ATK1KernelPlugin */\n\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1ResourcePlugin.rb	(revision 389)
@@ -6,68 +6,52 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class ATK1ResourcePlugin < CelltypePlugin
 #@celltype:: Celltype
-#@option:: String     :ãªãã·ã§ã³æå­å
+#@option:: String     :オプション文字列
 
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
 #  end
@@ -76,10 +60,8 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã®å ´åãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã®ã¡ã½ãããå®ç¾©æ¸ã¿ã®å ´åãï¼ãã³ãã¬ã¼ãã§ã¯ãªããå¤æ´ããå¿
-è¦ã®ãªãï¼ã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
+  #     このメソッドが定義済みの場合、（テンプレートではなく、変更する必要のない）セルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ATK1TaskPlugin.rb	(revision 389)
@@ -6,68 +6,52 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project TECS-WG
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class ATK1TaskPlugin < CelltypePlugin
 #@celltype:: Celltype
-#@option:: String     :ãªãã·ã§ã³æå­å
-
-  #signature::     Celltype        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+#@option:: String     :オプション文字列
+
+  #signature::     Celltype        シグニチャ（インスタンス）
   def initialize( celltype, option )
     super
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
 #  end
@@ -83,10 +67,8 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã®å ´åãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã®ã¡ã½ãããå®ç¾©æ¸ã¿ã®å ´åãï¼ãã³ãã¬ã¼ãã§ã¯ãªããå¤æ´ããå¿
-è¦ã®ãªãï¼ã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     このメソッドが未定義の場合、ジェネレータは受け口関数のテンプレートを生成する
+  #     このメソッドが定義済みの場合、（テンプレートではなく、変更する必要のない）セルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -218,5 +200,5 @@
   file2.close
 
-  # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+  # 追記するために AppFile を使う（文字コード変換されない）
   file = AppFile.open( "#{$gen}/tTask_tecsgen.#{$c_suffix}" )
   file.print "\n/* Generated by ATK1TaskPlugin */\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/C2TECSBridgePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/C2TECSBridgePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/C2TECSBridgePlugin.rb	(revision 389)
@@ -6,57 +6,42 @@
 #   Copyright (C) 2008-2015 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== C => TECS åãå£å¼ã³åºãã®ãã©ã°ã¤ã³
+#== C => TECS 受け口呼び出しのプラグイン
 class C2TECSBridgePlugin < SignaturePlugin
-#@signature:: Signature   ãã©ã°ã¤ã³ã®å¯¾è±¡ã¨ãªãã·ã°ããã£
-#@option:: String   '"', '"' ã§å²ã¾ããæå­å
-
-  # ãã©ã°ã¤ã³å¼æ°åã¨ Proc
+#@signature:: Signature   プラグインの対象となるシグニチャ
+#@option:: String   '"', '"' で囲まれた文字列
+
+  # プラグイン引数名と Proc
   C2TECSBridgePluginArgProc = {
     "prefix" => Proc.new { |obj,rhs| obj.set_prefix rhs },
@@ -68,5 +53,5 @@
   @@signature_list = { }
 
-  #signature::     Signature        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Signature        シグニチャ（インスタンス）
   def initialize( signature, option )
     super
@@ -100,18 +85,16 @@
   end
 
-  #=== å¾ãã®ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã®ã³ã¼ããçæ
+  #=== 後ろのコードを生成
+  #プラグインの後ろのコードを生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     éå¸¸ã§ããã°ãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -212,13 +195,13 @@
   end
 
-  #===  set_prefix - prefix ãã©ã°ã¤ã³ãªãã·ã§ã³
+  #===  set_prefix - prefix プラグインオプション
   def set_prefix rhs
     @prefix = rhs.to_s
   end
-  #===  set_suffix - suffix ãã©ã°ã¤ã³ãªãã·ã§ã³
+  #===  set_suffix - suffix プラグインオプション
   def set_suffix rhs
     @suffix = rhs.to_s
   end
-  #===  set_header_name - header_name ãã©ã°ã¤ã³ãªãã·ã§ã³
+  #===  set_header_name - header_name プラグインオプション
   def set_header_name rhs
     @header_name = "#{$gen}/" + rhs.to_s
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CellPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CellPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CellPlugin.rb	(revision 389)
@@ -6,73 +6,57 @@
 #   Copyright (C) 2008-2011 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class CellPlugin < Plugin
 
   #=== CellPlugin# initialize
-  #cell::     Cell        ã»ã«ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
-  # ãã®ã¡ã½ããã¯ãã»ã«ã®æ§æè§£æãçµãã£ãã¨ããã§å¼ã³åºããã
-  # ãã®æ®µéã§ã¯æå³è§£æãçµãã£ã¦ããªã
+  #cell::     Cell        セル（インスタンス）
+  # このメソッドは、セルの構文解析が終わったところで呼び出される
+  # この段階では意味解析が終わっていない
   def initialize( cell, option )
     super()
     @cell = cell
     @plugin_arg_str = CDLString.remove_dquote option
-    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # åå¾ã® "" ãåãé¤ã
+    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
     @plugin_arg_list = {}
   end
 
-  #=== å¾ãã® CDL ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CelltypePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CelltypePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CelltypePlugin.rb	(revision 389)
@@ -6,60 +6,44 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class CelltypePlugin < Plugin
 
-  #celltype::     Celltype        ã»ã«ã¿ã¤ãï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #celltype::     Celltype        セルタイプ（インスタンス）
   def initialize( celltype, option )
     super()
     @celltype = celltype
-    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # åå¾ã® "" ãåãé¤ã
+    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
     @plugin_arg_str = CDLString.remove_dquote option
@@ -67,25 +51,24 @@
   end
 
-  #=== æ°ããã»ã«
-  #cell::        Cell            ã»ã«
+  #=== 新しいセル
+  #cell::        Cell            セル
   #
-  # celltype ãã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã»ã«ãçæããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã«å¯¾ããæ°ããã»ã«ã®å ±å
+  # celltype プラグインを指定されたセルタイプのセルが生成された
+  # セルタイププラグインに対する新しいセルの報告
   def new_cell( cell )
   end
 
 
-  #=== tCelltype_factory.h ã«æ¿å
-¥ããã³ã¼ããçæãã
-  # file ä»¥å¤ã®ä»ã®ãã¡ã¤ã«ã«ãã¡ã¯ããªã³ã¼ããçæãã¦ããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã¿å¼ã³åºããã
+  #=== tCelltype_factory.h に挿入するコードを生成する
+  # file 以外の他のファイルにファクトリコードを生成してもよい
+  # セルタイププラグインが指定されたセルタイプのみ呼び出される
   def gen_factory file
   end
 
-  #=== å¾ãã® CDL ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CompositePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CompositePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/CompositePlugin.rb	(revision 389)
@@ -6,60 +6,44 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== CompositeCelltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== CompositeCelltype プラグインの共通の親クラス
 class CompositePlugin < Plugin
 
-  #celltype::     CompositeCelltype        ã»ã«ã¿ã¤ãï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #celltype::     CompositeCelltype        セルタイプ（インスタンス）
   def initialize( celltype, option )
     super()
     @celltype = celltype
-    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # åå¾ã® "" ãåãé¤ã
+    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
     @plugin_arg_str = CDLString.remove_dquote option
@@ -67,17 +51,17 @@
   end
 
-  #=== æ°ããã»ã«
-  #cell::        Cell            ã»ã«
+  #=== 新しいセル
+  #cell::        Cell            セル
   #
-  # celltype ãã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã»ã«ãçæããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã«å¯¾ããæ°ããã»ã«ã®å ±å
+  # celltype プラグインを指定されたセルタイプのセルが生成された
+  # セルタイププラグインに対する新しいセルの報告
   def new_cell( cell )
   end
 
-  #=== å¾ãã® CDL ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/DomainPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/DomainPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/DomainPlugin.rb	(revision 389)
@@ -6,103 +6,78 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== ãã¡ã¤ã³ãã©ã°ã¤ã³ã®è¦ªã¯ã©ã¹
+#== ドメインプラグインの親クラス
 class DomainPlugin < Plugin
 
-  #== domain æå®ããããªã¼ã¸ã§ã³ãå®ç¾©ããã
-  # region ã§ domain æå®ããã£ã
-  #domain_type_name::Symbol : domain æå®å­ã®ç¬¬ä¸å¼æ°
-  #option::String : domain æå®å­ã®ç¬¬äºå¼æ°
+  #== domain 指定されたリージョンが定義された
+  # region で domain 指定があった
+  #domain_type_name::Symbol : domain 指定子の第一引数
+  #option::String : domain 指定子の第二引数
   def initialize( region, domain_type_name, option )
     super()
   end
 
-  #== çµå join ã«ãã©ã°ã¤ã³ãæ¿å
-¥ãã
-  #join::Join : çµåã«é¢ããæ
-å ±
-  #return::[ plugin_name::String, option::String ]: æ¿å
-¥ãããã©ã°ã¤ã³ã æ¿å
-¥ãããã®ããªããã° nil ãè¿ã
+  #== 結合 join にプラグインを挿入する
+  #join::Join : 結合に関する情報
+  #return::[ plugin_name::String, option::String ]: 挿入するプラグイン。 挿入するものがなければ nil を返す
   #return::(1) [ plugin_name, option ] or (2) [[ plugin_name, option ], ...], or [] or nil:  (2): not supported now
-  #   nil: region éã®çµåç¦æ­¢, []: region éã®çµåå¯(ãã©ã°ã¤ã³æ¿å
-¥ç¡ã)
-  #   [ plugin_name, option ]: *_through( plugin_name, option ) æå®ããã®ã¨åç­
+  #   nil: region 間の結合禁止, []: region 間の結合可(プラグイン挿入無し)
+  #   [ plugin_name, option ]: *_through( plugin_name, option ) 指定したのと同等
   #
-  # region éã® through ãæå®ããã¦ããå ´åãout_through, to_through
-  # ã§ã¯ããããã«ãã£ã¦æå®ããããã©ã°ã¤ã³ã®å¾ãã«ãin_through ã®å ´å
-  # in_through ãã©ã°ã¤ã³ã®åã«æ¿å
-¥ããã
+  # region 間の through が指定されている場合、out_through, to_through
+  # では、それらによって指定されたプラグインの後ろに、in_through の場合
+  # in_through プラグインの前に挿入される
   #
-  # ãã®ã¡ã½ãããå¼åºãããæç¹ã§ã¯ Join#get_rhs_cell ãªã©æå³è§£æå¾
-  # ã«ããå¼ã³åºããªãã¡ã½ãããå¼åºãã¦ããæå¹ãªå¤ã¯å¾ãããªã
+  # このメソッドが呼出された時点では Join#get_rhs_cell など意味解析後
+  # にしか呼び出せないメソッドを呼出しても、有効な値は得られない
   #
   def add_through_plugin( join, current_region, next_region, through_type )
-    # join.get_owner:Cell  å·¦è¾ºã®ã»ã«
-    # join.get_definition:Port å¼ã³å£
-    # join.get_subscript:Integer or nil å¼ã³å£é
-åã®æ·»æ° (Join::@subscript ã®èª¬æåç
-§)
-    # join.get_cell:Cell å³è¾ºã®ã»ã«
-    # join.get_port_name:Symbol åãå£
-    # get_rhs_subscript:Integer or nil åãå£é
-åã®æ·»æ° (Join::@rhs_subscript ã®èª¬æåç
-§)
+    # join.get_owner:Cell  左辺のセル
+    # join.get_definition:Port 呼び口
+    # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
+    # join.get_cell:Cell 右辺のセル
+    # join.get_port_name:Symbol 受け口
+    # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
     # return []
     return nil
   end
 
-  #== require ãçµåå¯è½ãï¼
+  #== require が結合可能か？
   def joinable?(current_region, next_region, through_type )
     return false
   end
 
-  #== ãã¡ã¤ã³ç¨®å¥ãè¿ã
+  #== ドメイン種別を返す
   #return::Symbol :kernel, :user, :OutOfDomain
   def get_kind
@@ -110,6 +85,6 @@
   end
 
-  #== factory çæ
-  # DomainPlugin ã® factory ã¯ç¹å®ã®ãã¡ã¤ã«ã¸ã®åºåãæ³å®ããã¦ããªã
+  #== factory 生成
+  # DomainPlugin の factory は特定のファイルへの出力が想定されていない
   def gen_factory
   end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2AlarmHandlerPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2012 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #
 #   $Id$
@@ -56,6 +41,5 @@
 #require "HRP2KernelObjectPlugin"
 require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRP2AlarmHandlerPlugin < HRP2KernelObjectPlugin
     @@ep = [:eStartAlarm, :eStopAlarm, :eManageAlarm, :eReferAlarm ]
@@ -71,7 +55,7 @@
         name_array = @celltype.get_name_array cell
         cell_CBP = name_array[8]    # CBP
-        # CRE_XXXã®çæ
+        # CRE_XXXの生成
         if (cell.get_region.get_region_type != :DOMAIN) || (cell.get_region.get_param != :KERNEL_DOMAIN)
-            # ç¡æå± or ã¦ã¼ã¶ãã¡ã¤ã³ã«å±ããå ´å
+            # 無所属 or ユーザドメインに属する場合
                 raise "alarm handler #{val[:id]} must belong to kernel domain."
         else
@@ -86,5 +70,5 @@
     end
 
-    #tAlarmã®åãå£ãªã¹ã 
+    #tAlarmの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2CyclicHandlerPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -56,6 +41,5 @@
 require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRP2CyclicHandlerPlugin < HRP2KernelObjectPlugin
     @@ep = [:eStartCyclic, :eStopCyclic, :eManageCyclic, :eReferCyclic ]
@@ -71,7 +55,7 @@
         name_array = @celltype.get_name_array cell
         cell_CBP = name_array[8]    # CBP
-        # CRE_XXXã®çæ
+        # CRE_XXXの生成
         if (cell.get_region.get_region_type != :DOMAIN) || (cell.get_region.get_param != :KERNEL_DOMAIN)
-            # ç¡æå± or ã¦ã¼ã¶ãã¡ã¤ã³ã«å±ããå ´å
+            # 無所属 or ユーザドメインに属する場合
                 raise "cyclic handler #{val[:id]} must belong to kernel domain."
         else
@@ -86,5 +70,5 @@
     end
 
-    #tCyclicHandlerã®åãå£ãªã¹ã 
+    #tCyclicHandlerの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2DataqueuePlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -60,9 +45,8 @@
     @@ep = [:eSendDataqueue, :eReceiveDataqueue, :eManageDataqueue, :eReferDataqueue ]
     #=== HRP2DataqueuePlugin#print_cfg_cre
-    # CRE_DTQã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_DTQの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         file.print tab
@@ -70,13 +54,12 @@
     end
     #=== HRP2DataqueuePlugin#print_cfg_sac
-    # SAC_DTQã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_DTQの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         file.puts "SAC_DTQ(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
     end
-    #tDataqueueã®åãå£ãªã¹ã 
+    #tDataqueueの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2EventflagPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -60,9 +45,8 @@
     @@ep = [:eSetEventflag, :eWaitEventflag, :eManageEventflag, :eReferEventflag ]
     #=== HRP2EventflagPlugin#print_cfg_cre
-    # CRE_FLGã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_FLGの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         file.print tab
@@ -70,13 +54,12 @@
     end
     #=== HRP2EventflagPlugin#print_cfg_sac
-    # SAC_FLGã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_FLGの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         file.puts "SAC_FLG(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
     end
-    #tEventflagã®åãå£ãªã¹ã 
+    #tEventflagの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2FixedSizeMemoryPoolPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -60,9 +45,8 @@
     @@ep = [:eSendFixedSizeMemoryPool, :eReceiveFixedSizeMemoryPool, :eManageFixedSizeMemoryPool, :eReferFixedSizeMemoryPool ]
     #=== HRP2FixedSizeMemoryPoolPlugin#print_cfg_cre
-    # CRE_MPFã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_MPFの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         file.print tab
@@ -70,13 +54,12 @@
     end
     #=== HRP2FixedSizeMemoryPoolPlugin#print_cfg_sac
-    # SAC_MPFã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_MPFの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         file.puts "SAC_MPF(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
     end
-    #tFixedSizeMemoryPoolã®åãå£ãªã¹ã 
+    #tFixedSizeMemoryPoolの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2HandlerPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -56,6 +41,5 @@
 require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRP2HandlerPlugin < HRP2KernelObjectPlugin
     @@ep = [:eStartAlarm, :eStopAlarm, :eManageAlarm, :eReferAlarm ]
@@ -73,9 +57,9 @@
         name_array = @celltype.get_name_array cell
         cell_CBP = name_array[8]    # CBP
-        # CRE_XXXã®çæ
+        # CRE_XXXの生成
         domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
         # if (cell.get_region.get_region_type != :DOMAIN) || (cell.get_region.get_param != :KERNEL_DOMAIN)
         if (domainOption == "OutOfDomain") || (domainOption != "trusted")
-            # ç¡æå± or ã¦ã¼ã¶ãã¡ã¤ã³ã«å±ããå ´å
+            # 無所属 or ユーザドメインに属する場合
                 raise "#{@plugin_arg_str.to_s.downcase} handler #{val[:id]} must belong to kernel domain."
         elsif @plugin_arg_str == "ALARM"
@@ -127,5 +111,5 @@
 
 =begin
-    #tAlarmã®åãå£ãªã¹ã 
+    #tAlarmの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2KernelObjectPlugin.rb	(revision 389)
@@ -6,52 +6,37 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# Regionã¯ã©ã¹ã«ã¡ã½ãããè¿½å 
+# Regionクラスにメソッドを追加
 =begin
 class Region
@@ -70,5 +55,5 @@
 =end
 
-# Cellã¯ã©ã¹ã«ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨ã¡ã½ãããè¿½å 
+# Cellクラスにインスタンス変数とメソッドを追加
 =begin
 class Cell
@@ -86,5 +71,5 @@
     end
 
-    # set_referenced_cellã«ããã»ãããã
+    # set_referenced_cellにしたほうがよい
     # def set_referenced_region( region, port_name )
     def set_referenced_cell( cell, port_name )
@@ -140,23 +125,21 @@
 =end
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRP2KernelObjectPlugin < CelltypePlugin
     # @@obj_hash = {}
 
     #@celltype:: Celltype
-    #@option:: String     :ãªãã·ã§ã³æå­å
+    #@option:: String     :オプション文字列
     def initialize( celltype, option )
         super
-        # ããããã®ã«ã¼ãã«ãªãã¸ã§ã¯ããè§£æå¯¾è±¡ã»ã«ã¿ã¤ãã«è¿½å 
+        # それぞれのカーネルオブジェクトを解析対象セルタイプに追加
         HRP2KernelObjectPlugin.set_celltype(celltype)
     end
   
     #=== HRP2KernelObjectPlugin#print_cfg_cre
-    # åç¨®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®CRE_*ã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # 各種カーネルオブジェクトのCRE_*の出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         raise "called virtual method print_cfg_cre in #{@celltype.get_name} plugin"
@@ -164,9 +147,8 @@
   
     #=== HRP2KernelObjectPlugin#print_cfg_sac
-    # åç¨®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®SAC_*ã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿
+    # 各種カーネルオブジェクトのSAC_*の出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ
     def print_cfg_sac(file, val, acv)
         raise "called virtual method print_cfg_sac in #{@celltype.get_name} plugin"
@@ -174,5 +156,5 @@
   
     #=== HRP2KernelObjectPlugin#get_entry_ports_name_list
-    # ã«ã¼ãã«ãªãã¸ã§ã¯ãã®åç¨®ã¢ã¯ã»ã¹ã®ç¨®å¥ã®åãå£åãåå¾
+    # カーネルオブジェクトの各種アクセスの種別の受け口名を取得
     def get_entry_ports_name_list()
         raise "called virtual method get_entry_ports_name_list in #{@celltype.get_name} plugin"
@@ -186,6 +168,6 @@
         puts "===== begin #{@celltype.get_name.to_s} plugin ====="
 
-        # å¯¾è±¡ã¨ãªããã¹ã¦ã®ã»ã«ã«ã¤ãã¦ãåãå£ã«çµåããã¦ãã
-        # ã»ã«ã®æå±ãã¡ã¤ã³ãè§£æ
+        # 対象となるすべてのセルについて、受け口に結合されている
+        # セルの所属ドメインを解析
         if !HRP2KernelObjectPlugin.isChecked()
             HRP2KernelObjectPlugin.check_referenced_cells()
@@ -194,5 +176,5 @@
         end
 
-        # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+        # 追記するために AppFile を使う（文字コード変換されない）
         file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
         file2.print "\n/* Generated by #{self.class.name} */\n\n"
@@ -201,6 +183,5 @@
             if cell.is_generate?
                 puts "===== begin check my domain #{cell.get_name} ====="
-                # attrã®å¤ãããã·ã¥ã«å
-¥ãã
+                # attrの値をハッシュに入れる
                 val = {}
                 @celltype.get_attribute_list.each{ |a|
@@ -209,10 +190,10 @@
                         val[a.get_name] = []
                         if j = cell.get_join_list.get_item(a.get_name)
-                            # ã»ã«çææã«åæåããå ´å
+                            # セル生成時に初期化する場合
                             j.get_rhs.each { |elem|
                                 val[a.get_name] << elem.to_s
                             }
                         elsif i = a.get_initializer
-                            # ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+                            # セルタイプの初期化値を使う場合
                             i.each { |elem|
                                 val[a.get_name] << elem.to_s
@@ -223,8 +204,8 @@
                     else
                         if j = cell.get_join_list.get_item(a.get_name)
-                            # ã»ã«çææã«åæåããå ´å
+                            # セル生成時に初期化する場合
                             val[a.get_name] = j.get_rhs.to_s
                         elsif i = a.get_initializer
-                            # ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+                            # セルタイプの初期化値を使う場合
                             val[a.get_name] = i.to_s
                         else
@@ -233,6 +214,6 @@
                     end
                 }
-                # generate.rbãåèã«
-                # $id$ãç½®æ
+                # generate.rbを参考に
+                # $id$を置換
                 if val[:id].nil? != true
                     puts val[:id]
@@ -240,5 +221,5 @@
                     val[:id] = @celltype.subst_name( val[:id], @celltype.get_name_array( cell ) )
                 end
-                # $cbp$ã®ä»£ãã
+                # $cbp$の代わり
                 index = cell.get_id - @celltype.get_id_base
                 cell_CB_name = "#{@celltype.get_global_name}_CB_tab[#{index}]"
@@ -246,9 +227,9 @@
                 cell_domain_type = cell.get_region.get_domain_root.get_domain_type
 
-                # CRE_XXX/DEF_XXXã®çæ
+                # CRE_XXX/DEF_XXXの生成
                 if cell_domain_type.get_option.to_s != "OutOfDomain"
-                    # ä¿è­·ãã¡ã¤ã³ã«å±ããå ´å
+                    # 保護ドメインに属する場合
                     if !HRP2KernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
-                        # ãã®ä¿è­·ãã¡ã¤ã³ã®.cfgãçæããã¦ããªãå ´å
+                        # その保護ドメインの.cfgが生成されていない場合
                         HRP2KernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
                         puts "~~~~~ #{cell_domain_root.get_name.to_s} is registered!"
@@ -271,5 +252,5 @@
                     file3.close
                 else
-                    # ç¡æå±ã®å ´å
+                    # 無所属の場合
                     puts "~~~~~ #{cell_domain_root.get_name.to_s} is OutOfDomain"
                     print_cfg_cre(file2, cell, val, "")
@@ -277,5 +258,5 @@
 
                 puts "===== end check my domain #{cell.get_name} ====="
-                # SAC_XXXã®çæ
+                # SAC_XXXの生成
                 if !val[:accessPattern].nil?
                     puts "===== begin check regions #{cell.get_name} ====="
@@ -284,11 +265,11 @@
 
                     #ep = [ :eTaskActivate, :eTaskControl, :eTaskManage, :eTaskRefer ]
-                    #åã«ã¼ãã«ãªãã¸ã§ã¯ãã®åãå£åãåå¾
+                    #各カーネルオブジェクトの受け口名を取得
                     # ep = get_entry_ports_name_list()
                     i = 0
                     acv = []
-                    # ã¢ã¯ã»ã¹è¨±å¯ãã¯ã¿ã®çæ
+                    # アクセス許可ベクタの生成
                     val[:accessPattern].each { |acptnx|
-                        # ã¢ã¯ã»ã¹è¨±å¯ãã¿ã¼ã³ã®çæ
+                        # アクセス許可パターンの生成
                         if acptnx != "OMIT"
                             acv << acptnx
@@ -309,14 +290,14 @@
                     p acv
 
-                    #åç¨®SACã®çæ
+                    #各種SACの生成
                     domainOption = cell_domain_type.get_option
                     # if cell.get_region.get_region_type == :DOMAIN
                     if domainOption != "OutOfDomain"
-                        # ä¿è­·ãã¡ã¤ã³ã«å±ããå ´å
+                        # 保護ドメインに属する場合
                         file3 = AppFile.open( "#{$gen}/tecsgen_#{cell.get_region.get_name.to_s}.cfg" )
                         print_cfg_sac(file3, val, acv)
                         file3.close
                     else
-                        # ç¡æå±ã®å ´å
+                        # 無所属の場合
                         print_cfg_sac(file2, val, acv)
                     end
@@ -331,6 +312,6 @@
     end
 
-    # ã«ã¼ãã«ãªãã¸ã§ã¯ãã»ã«ã¿ã¤ãã®ç®¡ç
-    # HRP2KernelObjectPluginã¯ã©ã¹ã«å¯¾ãã¦ã¡ã½ããå¼åºããè¡ããã¨ãæ³å®
+    # カーネルオブジェクトセルタイプの管理
+    # HRP2KernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
     @@checked = false
     @@celltype_list = []
@@ -355,5 +336,5 @@
                 printf "===== check call port : "
                 # p p.get_name.to_s
-                next if j.nil? # æªçµåã®å ´å
+                next if j.nil? # 未結合の場合
                 if @@celltype_list.include?(j.get_celltype)
                     # j.get_cell.set_referenced_region(cell.get_region)
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2ObjectPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -70,9 +55,8 @@
 
     #=== HRP2SemaphorePlugin#print_cfg_cre
-    # CRE_SEMã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_SEMの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         if @@api.has_key?(@plugin_arg_str) == false
@@ -88,9 +72,8 @@
     end
     #=== HRP2SemaphorePlugin#print_cfg_sac
-    # SAC_SEMã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_SEMの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         if @@api.has_key?(@plugin_arg_str) == false
@@ -104,5 +87,5 @@
 
 =begin
-    #tSemaphoreã®åãå£ãªã¹ã 
+    #tSemaphoreの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Plugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Plugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2Plugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -54,7 +39,6 @@
 
 #
-# åã¡ã½ããã®å½¹å²ãã¯ãDomainPlugin.rb ãåç
-§ã®ãã¨
-# HRP2ã«ã¼ãã«ç¨ãã¡ã¤ã³ãã©ã°ã¤ã³
+# 各メソッドの役割りは、DomainPlugin.rb を参照のこと
+# HRP2カーネル用ドメインプラグイン
 class HRP2Plugin < DomainPlugin
 
@@ -71,19 +55,15 @@
     else
       cdl_error( "HRPPlugin: '$1' is unacceptable domain kind, specify 'trusted' or 'nontrusted'", option )
-      @option = "trusted"   # ã¨ãããã trusted ãè¨­å®ãã¦ãã
+      @option = "trusted"   # とりあえず trusted を設定しておく
     end
   end
 
   def add_through_plugin( join, current_region, next_region, through_type )
-    # join.get_owner:Cell  å·¦è¾ºã®ã»ã«
-    # join.get_definition:Port å¼ã³å£
-    # join.get_subscript:Integer or nil å¼ã³å£é
-åã®æ·»æ° (Join::@subscript ã®èª¬æåç
-§)
-    # join.get_cell:Cell å³è¾ºã®ã»ã«
-    # join.get_port_name:Symbol åãå£
-    # get_rhs_subscript:Integer or nil åãå£é
-åã®æ·»æ° (Join::@rhs_subscript ã®èª¬æåç
-§)
+    # join.get_owner:Cell  左辺のセル
+    # join.get_definition:Port 呼び口
+    # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
+    # join.get_cell:Cell 右辺のセル
+    # join.get_port_name:Symbol 受け口
+    # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
     # return []
     print "HRP2Plugin: add_through_plugin: #{current_region.get_name}=>#{next_region.get_name}, #{join.get_owner.get_name}.#{join.get_definition.get_name}=>#{join.get_cell.get_name}.#{join.get_port_name}, #{through_type}\n"
@@ -102,8 +82,7 @@
 
     if HRP2KernelObjectPlugin.include_celltype?(join.get_cell.get_celltype)
-        # çµåå
-ãã«ã¼ãã«ãªãã¸ã§ã¯ãã»ã«
+        # 結合先がカーネルオブジェクトセル
         # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
-        # ä½ãããªãthrough
+        # 何もしないthrough
         puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
         return []
@@ -113,7 +92,6 @@
     # elsif next_domain.nil?
     elsif next_domain.get_option.to_s == "OutOfDomain"
-    #     # çµåå
-ãç¡æå±
-    #     # ä½ãããªãthrough
+    #     # 結合先が無所属
+    #     # 何もしないthrough
     #     # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         puts "***** nil"
@@ -122,16 +100,16 @@
     #elsif @start_region.get_param != :KERNEL_DOMAIN && @end_region.get_param == :KERNEL_DOMAIN
     elsif current_domain.get_option.to_s != "trusted" && next_domain.get_option.to_s == "trusted"
-        # ã¦ã¼ã¶ãã¡ã¤ã³ããã«ã¼ãã«ãã¡ã¤ã³ã¸ã®çµå
+        # ユーザドメインからカーネルドメインへの結合
         # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         puts "***** svc"
         return [ :HRP2SVCPlugin, "" ]
     elsif current_domain != next_domain
-        # ã¦ã¼ã¶ãã¡ã¤ã³ããå¥ã®ã¦ã¼ã¶ãã¡ã¤ã³ã¸ã®çµå
+        # ユーザドメインから別のユーザドメインへの結合
         # @plugin_body = HRP2RPCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         puts "***** rpc"
         return [ :HRP2RPCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
     else
-        # ãã®ä»
-        # ä½ãããªãthrough
+        # その他
+        # 何もしないthrough
         # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         print "warning: at HRP2 Join Check"
@@ -142,5 +120,5 @@
   end
 
-  #== ãã¡ã¤ã³ç¨®å¥ãè¿ã
+  #== ドメイン種別を返す
   #return::Symbol :kernel, :user, :OutOfDomain
   def get_kind
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PostHook.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PostHook.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PostHook.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -64,7 +49,7 @@
 
     def generate
-        # ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ã»ã«ã¿ã¤ãã¯ã¡ã¢ãªä¿è­·ããªã
+        # カーネルオブジェクトのセルタイプはメモリ保護しない
 #=begin
-        # TODO: ãã¹ãã®ããã«ç¡å¹å
+        # TODO: テストのために無効化
         if HRP2KernelObjectPlugin.include_celltype?( @celltype )
             puts "nothing is generated for kernel object component"
@@ -75,5 +60,5 @@
         rlist = @celltype.get_region_list
         if @celltype.is_singleton?
-            # singletonã®å ´å
+            # singletonの場合
             puts "<singleton>"
 
@@ -83,8 +68,8 @@
                 file = AppFile.open( "#{$gen}/tecsgen_#{rlist[0].get_param.to_s}.cfg" )
             end
-            # ã»ã«ç®¡çãã­ãã¯ã¨ã¹ã±ã«ãã³ã®ã¡ã¢ãªä¿è­·
+            # セル管理ブロックとスケルトンのメモリ保護
             file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
             if !@celltype.is_all_entry_inline?
-                # ã»ã«ã¿ã¤ãã³ã¼ãã®ã¡ã¢ãªä¿è­·
+                # セルタイプコードのメモリ保護
                 file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
             end
@@ -93,28 +78,28 @@
 
         else
-            # singletonã§ãªãå ´å
+            # singletonでない場合
             puts "<non-singleton>"
 
-            # ã¹ã±ã«ãã³ã¨ã»ã«ã¿ã¤ãã³ã¼ãã®ä¿è­·
+            # スケルトンとセルタイプコードの保護
             if (rlist.length == 1) && 
                 (@celltype.get_n_cell_gen == @celltype.get_n_cell_gen_r( rlist[0] ))
-                # æå±ããä¿è­·ãã¡ã¤ã³ã1ã¤ã®å ´å
+                # 所属する保護ドメインが1つの場合
                 puts "<private celltype>"
                 file = AppFile.open( "#{$gen}/tecsgen_#{rlist[0].get_param.to_s}.cfg" )
             else
-                # ç¡æå± or æå±ããä¿è­·ãã¡ã¤ã³ãè¤æ°ã®å ´å
+                # 無所属 or 所属する保護ドメインが複数の場合
                 puts "<shared celltype>"
                 file = AppFile.open( "#{$gen}/tecsgen.cfg" )
             end
 
-            # ã¹ã±ã«ãã³ã®ã¡ã¢ãªä¿è­·
+            # スケルトンのメモリ保護
             file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
             if !@celltype.is_all_entry_inline?
-                # ã»ã«ã¿ã¤ãã³ã¼ãã®ã¡ã¢ãªä¿è­·
+                # セルタイプコードのメモリ保護
                 file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
             end
             file.close
 
-            # ã»ã«ç®¡çãã­ãã¯ã®ä¿è­·
+            # セル管理ブロックの保護
             rlist.each { |reg|
                 file = AppFile.open( "#{$gen}/tecsgen_#{reg.get_param.to_s}.cfg" )
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2PriorityDataqueuePlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2012 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -58,9 +43,8 @@
     @@ep = [:eSendPriorityDataqueue, :eReceivePriorityDataqueue, :eManagePriorityDataqueue, :eReferPriorityDataqueue ]
     #=== HRP2PriorityDataqueuePlugin#print_cfg_cre
-    # CRE_PDQã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_PDQの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         file.print tab
@@ -68,13 +52,12 @@
     end
     #=== HRP2PriorityDataqueuePlugin#print_cfg_sac
-    # SAC_PDQã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_PDQの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         file.puts "SAC_PDQ(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
     end
-    #tPriorityDataqueueã®åãå£ãªã¹ã 
+    #tPriorityDataqueueの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2RPCPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -57,27 +42,20 @@
 # require_tecsgen_lib "GenParamCopy.rb"
 
-#= Transparent RPC ãã©ã°ã¤ã³
-# Transparent RPC ãã£ã³ãã«ãçæãã
-# ãã©ã°ã¤ã³å¼æ°ã¯ä»¥ä¸ã® RPCPluginArgProc ãåç
-§
-
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-# ãããå©ç¨ããå ´åãä»¥ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿
-è¦ããã
+#= Transparent RPC プラグイン
+# Transparent RPC チャンネルを生成する
+# プラグイン引数は以下の RPCPluginArgProc を参照
+
+# mikan through plugin: namespace が考慮されていない
+# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 #
-# RPCãç¨ãããã¡ã¤ã³ééä¿¡ã®
-# throughãã©ã°ã¤ã³
-# HRP2ãã¡ã¤ã³ãã©ã°ã¤ã³ã«ãã£ã¦æ¿å
-¥ããã
+# RPCを用いたドメイン間通信の
+# throughプラグイン
+# HRP2ドメインプラグインによって挿入される
 #
 class HRP2RPCPlugin < ThroughPlugin
@@ -86,13 +64,11 @@
   # include GenParamCopy
 
-  # RPCPlugin å°ç¨ã®ãªãã·ã§ã³
-  TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # è¤è£½ãä½ã£ã¦å
-ãå¤æ´ããªãããã«ãã
+  # RPCPlugin 専用のオプション
+  TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
   TransparentRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
   TransparentRPCPluginArgProc[ "semaphoreCelltype"  ] = Proc.new { |obj,rhs| obj.set_semaphoreCelltype rhs }
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
@@ -101,6 +77,5 @@
     initialize_transparent_marshaler cell_name
 
-    # ãªãã·ã§ã³ï¼GenTransparentMarshaler åç
-§
+    # オプション：GenTransparentMarshaler 参照
     @plugin_arg_check_proc_tab = TransparentRPCPluginArgProc
     parse_plugin_arg
@@ -112,5 +87,5 @@
       if @PPAllocatorSize == nil then
         cdl_error( "PPAllocatorSize must be speicified for oneway [in] array" )
-        # @PPAllocatorSize = 0   # ä»®ã« 0 ã¨ãã¦ãã (cdl ã®æ§æã¨ã©ã¼ãé¿ãããã)
+        # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
       end
     end
@@ -119,8 +94,7 @@
 #      if func_decl.get_type.is_oneway? then
 #        if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then
-#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan æå­åã®é
-å
+#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列の配列
 #        elsif param_decl.get_string == -1 then
-#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan é·ãæªæå®æå­å
+#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
 #        end
 #      end
@@ -128,10 +102,10 @@
   end
 
-  #=== plugin ã®å®£è¨ã³ã¼ã (celltype ã®å®ç¾©) çæ
+  #=== plugin の宣言コード (celltype の定義) 生成
   def gen_plugin_decl_code( file )
 
     ct_name = "#{@ct_name}_#{@channelCelltype}"
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ ct_name ] == nil then
       @@generated_celltype[ ct_name ] = [ self ]
@@ -166,6 +140,5 @@
 
     f = CFile.open( @rpc_channel_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -223,10 +196,10 @@
 };
 EOT
-    # mikan stackSize option & ææ° tecs_package å¯¾å¿
+    # mikan stackSize option & 最新 tecs_package 対応
 
     f.close
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -235,5 +208,5 @@
     gen_plugin_decl_code( file )
 
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_name]
     # cell = Namespace.find( path )
@@ -258,6 +231,6 @@
     indent_str = "  " * nest
 
-    # #473 ãè§£æ±ºãããå ´åãcomposite ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã«å¤æ´ãã¹ã
-    # ã¢ã­ã±ã¼ã¿ã®æå®ããããï¼
+    # #473 が解決された場合、composite リレーアロケータに変更すべき
+    # アロケータの指定があるか？
     if cell.get_allocator_list.length > 0 then
 
@@ -269,8 +242,7 @@
 
         file.print delim
-        delim = ",\n#{indent_str}           "        # æçµè¡ã«ã¯åºããªã
-
-        if subsc then        # é
-åæ·»æ°
+        delim = ",\n#{indent_str}           "        # 最終行には出さない
+
+        if subsc then        # 配列添数
           subsc_str = '[#{subsc}]'
         else
@@ -278,5 +250,5 @@
         end
 
-        eport = "eThroughEntry" #RPCã®åãå£åã«å¤æ´
+        eport = "eThroughEntry" #RPCの受け口名に変更
         file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
       end
@@ -321,5 +293,5 @@
 
 
-  #=== ãã©ã°ã¤ã³å¼æ° noClientSemaphore ã®ãã§ãã¯
+  #=== プラグイン引数 noClientSemaphore のチェック
   def set_noClientSemaphore rhs
     rhs = rhs.to_sym
@@ -333,5 +305,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° semaphoreCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 semaphoreCelltype のチェック
   def set_semaphoreCelltype rhs
     @semaphoreCelltype = rhs.to_sym
@@ -343,6 +315,6 @@
   end
 
-  #=== NamespacePath ãå¾ã
-  # çæããã»ã«ã® namespace path ãçæãã
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
   def get_cell_namespace_path
 #    nsp = @region.get_namespace.get_namespace_path
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SVCPlugin.rb	(revision 389)
@@ -6,67 +6,47 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-# ãããå©ç¨ããå ´åãä»¥ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿
-è¦ããã
+# mikan through plugin: namespace が考慮されていない
+# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 class SVCManage
-    # TODO: ããã©ã«ãã®æ¡å¼µãµã¼ãã¹ã³ã¼ã«åãäºç´ãã¦ãã
-    # ããã©ã«ãã®æ¡å¼µãµã¼ãã¹ã³ã¼ã«ï¼syslogãªã©ï¼ãã³ã³ãã¼ãã³ãåããã¾ã§
+    # TODO: デフォルトの拡張サービスコール分を予約しておく
+    # デフォルトの拡張サービスコール（syslogなど）もコンポーネント化するまで
     @@id = 20
     @@func_ids = {}
@@ -94,14 +74,12 @@
 
 #
-# æ¡å¼µãµã¼ãã¹ã³ã¼ã«ãç¨ãããã¡ã¤ã³ééä¿¡ã®
-# throughãã©ã°ã¤ã³
-# HRP2ãã¡ã¤ã³ãã©ã°ã¤ã³ã«ãã£ã¦æ¿å
-¥ããã
+# 拡張サービスコールを用いたドメイン間通信の
+# throughプラグイン
+# HRP2ドメインプラグインによって挿入される
 #
 class HRP2SVCPlugin < ThroughPlugin
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   @@generated_celltype_header = {}
 
@@ -117,6 +95,6 @@
   end
 
-  #=== NamespacePath ãå¾ã
-  # çæããã»ã«ã® namespace path ãçæãã
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
   def get_cell_namespace_path
 #    nsp = @region.get_namespace.get_namespace_path
@@ -127,5 +105,5 @@
   def gen_plugin_decl_code( file )
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
     if @@generated_celltype[ @ct_name_body ] == nil then
@@ -145,5 +123,5 @@
     end
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @ct_name ] == nil then
         @@generated_celltype[ @ct_name ] = [ self ]
@@ -156,6 +134,6 @@
 EOT
         else
-            # TODO inlineã«ããæ¹ãå¹çããããï¼tecsgenã®çæããããããã¡ã¤ã«ã®
-            # èª­è¾¼é ã®ããã«ã¨ã©ã¼ã¨ãªã
+            # TODO inlineにした方が効率がよいが，tecsgenの生成したヘッダファイルの
+            # 読込順のためにエラーとなる
         file2.print <<EOT
 celltype #{@ct_name} {
@@ -174,5 +152,5 @@
 
 =begin
-    # TODO: send. receive å¯¾å¿
+    # TODO: send. receive 対応
     send_receive = []
     if @signature != nil then
@@ -206,5 +184,5 @@
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -215,16 +193,16 @@
 
     if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_name]  # mikan namespace
     # cell = Namespace.find( path )
     # cell = Namespace.find( @next_cell.get_namespace_path )
 
-    ##### ã¯ã©ã¤ã¢ã³ãå´ã®ã»ã«ã®çæ #####
+    ##### クライアント側のセルの生成 #####
     # file.print "[domain(HRP2, \"trusted\")]"
     nest = @start_region.gen_region_str_pre file
     nest_str = "  " * nest
 
-    # ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã«ã®çæ
-    # æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºã
+    # クライアント側チャンネルの生成
+    # 拡張サービスコール呼出し
     file.print <<EOT
 #{nest_str}  //  Client Side Channel
@@ -237,5 +215,5 @@
     file.print "\n\n"
 
-    ##### ãµã¼ãã¼å´ã®ã»ã«ã®çæ #####
+    ##### サーバー側のセルの生成 #####
     nest = @end_region.gen_region_str_pre file
     nest_str = "  " * nest
@@ -246,6 +224,6 @@
     end
 
-    # ãµã¼ãã¼å´ãã£ã³ãã«ã®çæ 
-    # æ¡å¼µãµã¼ãã¹ã³ã¼ã«æ¬ä½
+    # サーバー側チャンネルの生成 
+    # 拡張サービスコール本体
     file.print <<EOT
 
@@ -266,5 +244,5 @@
     else
 
-    ##### ã¯ã©ã¤ã¢ã³ãå´ã®ã»ã«ã®çæ #####
+    ##### クライアント側のセルの生成 #####
     nest = @start_region.gen_region_str_pre file
     nest_str = "  " * nest
@@ -275,6 +253,6 @@
     end
 
-    # ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã«ã®çæ
-    # æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºã
+    # クライアント側チャンネルの生成
+    # 拡張サービスコール呼出し
     file.print <<EOT
 #{nest_str}  //  Client Side Channel
@@ -291,10 +269,8 @@
    end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     éå¸¸ã§ããã°ãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -309,5 +285,5 @@
 
     if !HRP2KernelObjectPlugin.include_celltype?(@next_cell.get_celltype)
-        # æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºã
+        # 拡張サービスコール呼出し
         if ! func_type.get_type.kind_of?( VoidType ) then
             file.print( "  #{func_type.get_type_str}  retval;\n" )
@@ -321,5 +297,5 @@
     p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
   }else{
-     /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+     /* エラー処理コードをここに記述 */
   }
 
@@ -372,5 +348,5 @@
         end
 
-        # æ¡å¼µãµã¼ãã¹ã³ã¼ã«æ¬ä½
+        # 拡張サービスコール本体
         if new_func
             file2 = AppFile.open( "#{$gen}/#{@ct_name_body}.c" )
@@ -381,14 +357,14 @@
 #                 file2.print <<EOT
 # /*
-#  * ãã®ãã¡ã¤ã«ã¯ tecsgen ã«ããèªåçæããã¾ãã
-#  * ãã®ãã¡ã¤ã«ãç·¨éãã¦ä½¿ç¨ãããã¨ã¯ãæå³ããã¦ãã¾ãã
+#  * このファイルは tecsgen により自動生成されました
+#  * このファイルを編集して使用することは、意図されていません
 #  */
 # /* #[<PREAMBLE>]#
-#  * #[<...>]# ãã #[</...>]# ã§å²ã¾ããã³ã¡ã³ãã¯ç·¨éããªãã§ãã ãã
-#  * tecsmerge ã«ãããã¼ã¸ã«ä½¿ç¨ããã¾ã
+#  * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
+#  * tecsmerge によるマージに使用されます
 #  *
 #  * #[</PREAMBLE>]# */
 # 
-# /* ãã­ãã¿ã¤ãå®£è¨ãå¤æ°ã®å®ç¾©ãããã«æ¸ãã¾ã #_PAC_# */
+# /* プロトタイプ宣言や変数の定義をここに書きます #_PAC_# */
 # #include "#{@ct_name_body}_tecsgen.h"
 # 
@@ -418,5 +394,5 @@
       p_cellcb = #{@ct_name_body}_GET_CELLCB(idx);
     }else{
-       /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+       /* エラー処理コードをここに記述 */
     }
 #else
@@ -474,5 +450,5 @@
             file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
             file2.print "\n/* Generated by HRP2SVCPlugin */\n\n"
-            # TODO: ã¹ã¿ãã¯ãµã¤ãºã¯é©å½
+            # TODO: スタックサイズは適当
             file2.print <<EOT
 KERNEL_DOMAIN{
@@ -490,5 +466,5 @@
         end
     else
-        # ã«ã¼ãã«ãã¡ã¤ã³ã®ã»ã«ã¯ç¹å¥ãªãã¨ã¯ä½ãããï¼æ®éã«å¼ã³åºã
+        # カーネルドメインのセルは特別なことは何もせず，普通に呼び出す
         super
     end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2SemaphorePlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2011 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -59,9 +44,8 @@
     @@ep = [:eSignalSemaphore, :eWaitSemaphore, :eManageSemaphore, :eReferSemaphore ]
     #=== HRP2SemaphorePlugin#print_cfg_cre
-    # CRE_SEMã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_SEMの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         file.print tab
@@ -69,13 +53,12 @@
     end
     #=== HRP2SemaphorePlugin#print_cfg_sac
-    # SAC_SEMã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_SEMの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         file.puts "SAC_SEM(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
     end
-    #tSemaphoreã®åãå£ãªã¹ã 
+    #tSemaphoreの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRP2TaskPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -55,9 +40,8 @@
 #require "HRP2KernelObjectPlugin"
 require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRP2TaskPlugin < HRP2KernelObjectPlugin
     # @@ep = [:eActivateTask, :eControlTask, :eManageTask, :eReferTask ]
-    # ATT_MODãçææ¸ã¿ãã©ãã
+    # ATT_MODを生成済みかどうか
     @@generate_memory_module = false
 
@@ -71,9 +55,9 @@
         #val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_global_name.to_s}" )
         #val[:id] = @celltype.subst_name( val[:id], @celltype.get_name_array( cell ) )
-        # $cbp$ã®ä»£ãã
+        # $cbp$の代わり
         index = cell.get_id - @celltype.get_id_base
         #cell_CB_name = "#{@celltype.get_global_name}_pCB_tab[#{index}]"
         cell_CB_name = "#{index}"
-        # CRE_XXX/DEF_XXXã®çæ
+        # CRE_XXX/DEF_XXXの生成
         dbgPrint "assign task plugin\n"
         domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
@@ -81,7 +65,7 @@
 # cell.show_tree 1
         if domainOption != "OutOfDomain"
-            # ä¿è­·ãã¡ã¤ã³ã«å±ããå ´å
+            # 保護ドメインに属する場合
             if domainOption == "trusted"
-                # ã«ã¼ãã«ãã¡ã¤ã³
+                # カーネルドメイン
                 if val[:userStackSize] != "OMIT"
                     raise "system task cannot have user stack."
@@ -92,5 +76,5 @@
 EOT
             else
-                # ã¦ã¼ã¶ãã¡ã¤ã³
+                # ユーザドメイン
                 if val[:userStackSize] == "OMIT"
                     raise "user task must have user stack."
@@ -109,9 +93,9 @@
             end
         else
-            # ç¡æå±ã®å ´å
+            # 無所属の場合
             raise "task #{val[:id]} must belong to a domain."
         end
    
-        # ä¾å¤ç¨ã®ãçæ
+        # 例外用のを生成
         file.print <<EOT
 #{tab}DEF_TEX(#{val[:id]}, { #{val[:exceptionAttribute]}, tTask_start_exception });
@@ -124,5 +108,5 @@
 
 =begin
-    #tTaskã®åãå£ãªã¹ã 
+    #tTaskの受け口リスト 
     def get_entry_ports_name_list()
         @@ep
@@ -130,7 +114,7 @@
 =end
     # 
-    #  ATT_MODã®çæ
-    #  gen_factoryå®è¡æã«ã¯ï¼ãã¹ã¦ã®ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãçææ¸ã¿ã®ã¯ããªã®ã§ï¼
-    #  ã«ã¼ãã«APIã³ã¼ãã®ã¡ã¢ãªä¿è­·ãçç¥ã§ããï¼
+    #  ATT_MODの生成
+    #  gen_factory実行時には，すべてのセルタイププラグインを生成済みのはずなので，
+    #  カーネルAPIコードのメモリ保護を省略できる．
     #
     def gen_factory file
@@ -140,22 +124,21 @@
 
             Cell.get_cell_list2.each { |cell|
-                # ãã¹ã¦ã®ã»ã«ãèµ°æ»ãã¦ã»ã«ã¿ã¤ãããã§ãã¯
+                # すべてのセルを走査してセルタイプをチェック
                 ct = cell.get_celltype
                 if ct.class == Celltype && check_celltype_list.include?( ct ) == false
-                    # ãã§ãã¯æ¸ã¿ã»ã«ã¿ã¤ãã«ç»é²
+                    # チェック済みセルタイプに登録
                     check_celltype_list << ct
 
-                    # æªãã§ãã¯ã®ã»ã«ã¿ã¤ãã ã£ãå ´å
+                    # 未チェックのセルタイプだった場合
                     # puts "check for ATT_MOD : #{ct.classget_global_name}"
                     puts "check for ATT_MOD : #{ct.get_global_name}"
                         
-                    # ã«ã¼ãã«APIã®ã³ã¼ãï¼ãã¼ã¿ã¯ã¡ã¢ãªä¿è­·ããªã
+                    # カーネルAPIのコード，データはメモリ保護しない
                     next if HRP2KernelObjectPlugin.include_celltype?( ct )
 
-                    # å¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã®ã³ã¼ãï¼ãã¼ã¿ã¯ã¡ã¢ãªä¿è­·ããªã
+                    # 必要のないセルタイプのコード，データはメモリ保護しない
                     next if ! ct.need_generate?
 
-                    # HRP2ã®ãã¡ã¤ã³ãªã¼ã¸ã§ã³ãåå¾
+                    # HRP2のドメインリージョンを取得
                     regions = ct.get_domain_roots
                     regions_hrp2 = regions[ :HRP2 ]
@@ -166,10 +149,9 @@
                     puts ""
 
-                    # ã»ã«ç®¡çãã­ãã¯ã¨ã¹ã±ã«ãã³ã®ã¡ã¢ãªä¿è­·
-                    # gen_celltype_names_domain ç¸å½ã®å¦ç
+                    # セル管理ブロックとスケルトンのメモリ保護
+                    # gen_celltype_names_domain 相当の処理
                     if regions_hrp2.include?( Region.get_root ) == false && regions_hrp2.length > 1
-                        # ãã¡ã¤ã³ãè¤æ°ã§ï¼OutOfDomainã«ã»ã«ãå­å¨ããªãã»ã«ã¿ã¤ãã®å ´å
-                        # å
-±æã®ã»ã«ç®¡çãã­ãã¯ã¨ã¹ã±ã«ãã³ã³ã¼ããç»é²ãã
+                        # ドメインが複数で，OutOfDomainにセルが存在しないセルタイプの場合
+                        # 共有のセル管理ブロックとスケルトンコードを登録する
                         file = AppFile.open( "#{$gen}/tecsgen.cfg" )
                         file.print "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");\n"
@@ -188,18 +170,17 @@
                     }
 
-                    # ã»ã«ã¿ã¤ãã³ã¼ãããªãå ´åã¯ã¹ã­ãã
+                    # セルタイプコードがない場合はスキップ
                     next if ct.is_all_entry_inline? && ! ct.is_active?
 
-                    # ã»ã«ã¿ã¤ãã³ã¼ãã®ã¡ã¢ãªä¿è­·
-                    # gen_celltype_names_domain2 ç¸å½ã®å¦ç
+                    # セルタイプコードのメモリ保護
+                    # gen_celltype_names_domain2 相当の処理
                     if regions_hrp2.include?( Region.get_root ) == true || regions_hrp2.length > 1
-                        # OutOfDomainã«ã»ã«ãå­å¨ããã»ã«ã¿ã¤ãã®å ´å
-                        # ã¾ãã¯ï¼è¤æ°ã®ãã¡ã¤ã³ã«ã»ã«ãå­å¨ããã»ã«ã¿ã¤ãã®å ´å
-                        # ã»ã«ã¿ã¤ãã³ã¼ããå
-±æããããã«ç»é²ãã
+                        # OutOfDomainにセルが存在するセルタイプの場合
+                        # または，複数のドメインにセルが存在するセルタイプの場合
+                        # セルタイプコードを共有するように登録する
                         file = AppFile.open( "#{$gen}/tecsgen.cfg" )
                     else
-                        # OutOfDomainã§ãªãåä¸ã®ãã¡ã¤ã³ã«ã»ã«ãå­å¨ããã»ã«ã¿ã¤ãã®å ´å
-                        # ã»ã«ã¿ã¤ãã³ã¼ããå°æããããã«ç»é²ãã
+                        # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
+                        # セルタイプコードを専有するように登録する
                         file = AppFile.open( "#{$gen}/tecsgen_#{regions_hrp2[0].get_namespace_path.get_global_name}.cfg" )
                     end
@@ -208,5 +189,5 @@
                     file.close
                 else
-                    # ä½ãããªã
+                    # 何もしない
                 end
             }
@@ -214,5 +195,5 @@
             @@generate_memory_module = true
         else
-            # ä½ãããªã
+            # 何もしない
         end
     end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPHandlerPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPHandlerPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPHandlerPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #++
@@ -55,6 +40,5 @@
 
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRPHandlerPlugin < HRPKernelObjectPlugin
 
@@ -78,13 +62,13 @@
             val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
         end
-        # $cbp$ã®ä»£ãã
+        # $cbp$の代わり
         index = cell.get_id - @celltype.get_id_base
         #cell_CB_name = "#{@celltype.get_global_name}_CB_tab[#{index}]"
         name_array = cell.get_celltype.get_name_array cell
         cell_CBP = name_array[8]
-        # CRE_XXXã®çæ
+        # CRE_XXXの生成
         domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
         if (domainOption == "OutOfDomain") || (domainOption != "kernel")
-            # ç¡æå± or ã¦ã¼ã¶ãã¡ã¤ã³ã«å±ããå ´å
+            # 無所属 or ユーザドメインに属する場合
                 raise "#{@plugin_arg_str.to_s.downcase} handler #{val[:id]} must belong to kernel domain."
         elsif @plugin_arg_str == "CONFIG_INT"
@@ -125,6 +109,6 @@
             # nothing to do
         elsif @plugin_arg_str == "ISR"
-            # kernel.cdl ã® tISR ã§ accessPattern1 ï½ accessPattern4 ãå®ç¾©ããã¦ããã¨ãã®åæ®ã
-            # accessPattern1 ãå®ç¾©ããã¦ããªãå ´åããããã¸ã¯æ¥ãªãï¼å¾©æ´»ããã¨ãã«åãã¦æ®ãã¦ããï¼
+            # kernel.cdl の tISR で accessPattern1 ～ accessPattern4 が定義されているときの名残。
+            # accessPattern1 が定義されていない場合、こここへは来ない．復活したときに備えて残しておく．
             # file.puts "SAC_#{@plugin_arg_str}(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
             puts "*** Unsupported *** SAC_#{@plugin_arg_str}(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectManager.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectManager.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectManager.rb	(revision 389)
@@ -5,47 +5,32 @@
 #   Copyright (C) 2015-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #
 #   $Id$
@@ -77,5 +62,5 @@
     def initialize()
         # 
-        #  æ¬ã¯ã©ã¹ã¯ã¤ã³ã¹ã¿ã³ã¹ãæããªãä»®æ³çãªã¯ã©ã¹ã§ãã
+        #  本クラスはインスタンスを持たない仮想的なクラスである
         #
         raise "class #{self.class.name} shall not have instances"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPKernelObjectPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #
@@ -54,30 +39,28 @@
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRPKernelObjectPlugin < CelltypePlugin
     # @@obj_hash = {}
 
     #@celltype:: Celltype
-    #@option:: String     :ãªãã·ã§ã³æå­å
+    #@option:: String     :オプション文字列
     def initialize( celltype, option )
         super
         #
-        #  ããããã®ã«ã¼ãã«ãªãã¸ã§ã¯ããè§£æå¯¾è±¡ã»ã«ã¿ã¤ãã«è¿½å 
-        #  ç®çï¼
-        #   - ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ã»ã«ãã¡ã¢ãªä¿è­·å¯¾è±¡å¤ã¨ãã
-        #    - ã«ã¼ãã«ãªãã¸ã§ã¯ãæ¬ä½ã®ç®¡çã¯TECSã§ãªãOSã§å®æ½ãããã
-        #   - ã«ã¼ãã«ãªãã¸ã§ã¯ãã®ã»ã«ã¸ã®ã¢ã¯ã»ã¹ãç´æ¥é¢æ°å¼åºã
-        #   ãã¨ãã
-        #    - ã·ã¹ãã ãµã¼ãã¹å¼åºãã¯OSãæä¾ãããã
+        #  それぞれのカーネルオブジェクトを解析対象セルタイプに追加
+        #  目的：
+        #   - カーネルオブジェクトのセルをメモリ保護対象外とする
+        #    - カーネルオブジェクト本体の管理はTECSでなくOSで実施するため
+        #   - カーネルオブジェクトのセルへのアクセスを直接関数呼出し
+        #   　とする
+        #    - システムサービス呼出しはOSが提供するため
         HRPKernelObjectPlugin.set_celltype(celltype)
     end
   
     #=== HRPKernelObjectPlugin#print_cfg_cre
-    # åç¨®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®CRE_*ã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # 各種カーネルオブジェクトのCRE_*の出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         raise "called virtual method print_cfg_cre in #{@celltype.get_name} plugin"
@@ -85,9 +68,8 @@
   
     #=== HRPKernelObjectPlugin#print_cfg_sac
-    # åç¨®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®SAC_*ã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿
+    # 各種カーネルオブジェクトのSAC_*の出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ
     def print_cfg_sac(file, val, acv)
         raise "called virtual method print_cfg_sac in #{@celltype.get_name} plugin"
@@ -95,8 +77,7 @@
   
     #
-    #  ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã®æ¬ä½ã¡ã½ãã
-    #   - éçAPIã®çæ
-    #  file:: FILE:     åºåå
-ãã¡ã¤ã«
+    #  セルタイププラグインの本体メソッド
+    #   - 静的APIの生成
+    #  file:: FILE:     出力先ファイル
     #
     def gen_factory file
@@ -104,8 +85,7 @@
 
         #
-        # å¯¾è±¡ã¨ãªããã¹ã¦ã®ã»ã«ã«ã¤ãã¦ãåãå£ã«çµåããã¦ãã
-        # ã»ã«ã®æå±ãã¡ã¤ã³ãè§£æ
-        #  - çæãã¹ãcfgãã¡ã¤ã«åãåå¾ããããã«å¿
-è¦
+        # 対象となるすべてのセルについて、受け口に結合されている
+        # セルの所属ドメインを解析
+        #  - 生成すべきcfgファイル名を取得するために必要
         #
         if !HRPKernelObjectPlugin.isChecked()
@@ -115,5 +95,5 @@
         end
 
-        # è¿½è¨ããããã« AppFile ãä½¿ãï¼æå­ã³ã¼ãå¤æãããªãï¼
+        # 追記するために AppFile を使う（文字コード変換されない）
         file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
         file2.print "\n/* Generated by #{self.class.name} */\n\n"
@@ -123,5 +103,5 @@
                 dbgPrint "===== begin check my domain #{cell.get_name} =====\n"
                 #
-                #  ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ãï¼valã«ã³ãã¼
+                #  カーネルオブジェクトの属性を，valにコピー
                 #
                 val = {}
@@ -131,10 +111,10 @@
                         val[a.get_name] = []
                         if j = cell.get_join_list.get_item(a.get_name)
-                            # ã»ã«çææã«åæåããå ´å
+                            # セル生成時に初期化する場合
                             j.get_rhs.each { |elem|
                                 val[a.get_name] << elem.to_s
                             }
                         elsif i = a.get_initializer
-                            # ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+                            # セルタイプの初期化値を使う場合
                             i.each { |elem|
                                 val[a.get_name] << elem.to_s
@@ -145,8 +125,8 @@
                     else
                         if j = cell.get_join_list.get_item(a.get_name)
-                            # ã»ã«çææã«åæåããå ´å
+                            # セル生成時に初期化する場合
                             val[a.get_name] = j.get_rhs.to_s
                         elsif i = a.get_initializer
-                            # ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+                            # セルタイプの初期化値を使う場合
                             val[a.get_name] = i.to_s
                         else
@@ -155,19 +135,19 @@
                     end
                 }
-                # generate.rbãåèã«
-                # $id$ãç½®æ
+                # generate.rbを参考に
+                # $id$を置換
                 if val[:id].nil? != true
                     name_array = @celltype.get_name_array( cell )
                     val[:id]   = @celltype.subst_name( val[:id], name_array )
                 end
-                # $cbp$ã®ä»£ãã
+                # $cbp$の代わり
                 cell_domain_root = cell.get_region.get_domain_root
                 cell_domain_type = cell.get_region.get_domain_root.get_domain_type
 
-                # CRE_XXX/DEF_XXXã®çæ
+                # CRE_XXX/DEF_XXXの生成
                 if cell_domain_type.get_option.to_s != "OutOfDomain"
-                    # ä¿è­·ãã¡ã¤ã³ã«å±ããå ´å
+                    # 保護ドメインに属する場合
                     if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
-                        # ãã®ä¿è­·ãã¡ã¤ã³ã®.cfgãçæããã¦ããªãå ´å
+                        # その保護ドメインの.cfgが生成されていない場合
                         HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
                         dbgPrint "~~~~~ #{cell_domain_root.get_name.to_s} is registered!\n"
@@ -189,5 +169,5 @@
                     file3.close
                 else
-                    # ç¡æå±ã®å ´å
+                    # 無所属の場合
                     dbgPrint "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
                     # print "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
@@ -197,5 +177,5 @@
                     else
 #                      if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
-#                        # ãã®ä¿è­·ãã¡ã¤ã³ã®.cfgãçæããã¦ããªãå ´å
+#                        # その保護ドメインの.cfgが生成されていない場合
 #                        HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
 #                        file2.puts "INCLUDE(\"#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg\");\n"
@@ -211,5 +191,5 @@
 
                 #
-                # SAC_XXXã®çæ
+                # SAC_XXXの生成
                 #
                 if !val[:accessPattern1].nil?
@@ -224,6 +204,5 @@
                     acv_tmp = []
                     domain_roots = HRPPlugin.get_inter_domain_join_roots cell
-                    # çµåå
-ã»ã«ã®ãã¡ã¤ã³ãå ãã
+                    # 結合先セルのドメインを加える
                     if cell_domain_type.get_kind != :OutOfDomain then
                       domain_roots << cell_domain_root
@@ -237,7 +216,5 @@
                       when :OutOfDomain
                         if cell_domain_type.get_kind == :OutOfDomain then
-                          # å¼ã³å
-ããå¼ã³å
-ã OutOfDomain ã®å ´å
+                          # 呼び元も、呼び先も OutOfDomain の場合
                           acv_tmp << "TACP_SHARED"
                         end
@@ -246,7 +223,5 @@
                     acv_tmp.uniq!
                     if acv_tmp.length == 0 then
-                      # å¼ã³å
-ã»ã«ãç¡æå±ãã¤ãå¼ã³å
-ãç¡æå±ã®ã¿ãã¾ãã¯çµåç¡ãã®å ´å
+                      # 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
                       acv_tmp = [ "TACP_SHARED" ]
                     end
@@ -265,5 +240,5 @@
                                 when :user
                                   if dr.get_namespace_path != cell.get_region.get_domain_root.get_namespace_path
-                                    # ä»ã®ã¦ã¼ã¶ã¼ãã¡ã¤ã³ããã®çµå
+                                    # 他のユーザードメインからの結合
                                     if( b_warn == false ) then
                                       cdl_error( "HRP9999 '$1': kernel object joined from other user domain. kernel object joined from multi-user-domain must be placed out of domain", cell.get_name )
@@ -273,9 +248,8 @@
                                 when :OutOfDomain
                                   if( b_info == false ) then
-                                    # ç¡æå±ããã®çµå
+                                    # 無所属からの結合
                                     # cdl_error( "HRP9999 kernel object joined from out of domain" )
                                     if cell_domain_type.get_kind == :OutOfDomain
-                                      # ãã®æ
-å ±ã¯ãä¸è¦ã¨å¤æ­ãã (ç¡æå±ããç¡æå±ã¸çµåãããã¨ãã¢ã¯ã»ã¹è¨±å¯ãã¯ã¿ãè¨­å®ãããªã)
+                                      # この情報は、不要と判断する (無所属から無所属へ結合があると、アクセス許可ベクタが設定されない)
                                       # cdl_info2( cell.get_locale, "HRP9999 '$1': kernel object joined from out of domain, access vector is not set", cell.get_name )
                                       b_info = true
@@ -289,9 +263,7 @@
                             else
                               # p "OutOfDomainCell"
-                              # ç¡æå±ã®ã»ã«
-                              # çµåå
-ãã¡ã¤ã³ã«è¨±å¯ãã
-                              # çµåå
-ã«ç¡æå±ã®ã»ã«ãããã¨ãTACP_SHARED ãè¨­å®ããã. ãã­ã¼è§£æãã¦ãã¡ã¤ã³ãç¹å®ã§ããã®ããããã¹ãä»æ§
+                              # 無所属のセル
+                              # 結合元ドメインに許可する
+                              # 結合元に無所属のセルがあると、TACP_SHARED が設定される. フロー解析してドメインを特定できるのが、あるべき仕様
                             end
                             if acp == "OMIT"
@@ -300,14 +272,14 @@
                         end
                     }
-                    #åç¨®SACã®çæ
+                    #各種SACの生成
                     domainOption = cell_domain_type.get_option
                     # p "domain_root ", cell.get_region.get_domain_root.get_name
                     if domainOption != "OutOfDomain" || cell.get_region.get_domain_root.get_name != "::"
-                        # ä¿è­·ãã¡ã¤ã³ã«å±ããå ´å
+                        # 保護ドメインに属する場合
                         file3 = AppFile.open( "#{$gen}/tecsgen_#{cell.get_region.get_name.to_s}.cfg" )
                         print_cfg_sac(file3, val, acv)
                         file3.close
                     else
-                        # ç¡æå±ã®å ´å
+                        # 無所属の場合
                         print_cfg_sac(file2, val, acv)
                     end
@@ -321,6 +293,6 @@
     end
 
-    # ã«ã¼ãã«ãªãã¸ã§ã¯ãã»ã«ã¿ã¤ãã®ç®¡ç
-    # HRPKernelObjectPluginã¯ã©ã¹ã«å¯¾ãã¦ã¡ã½ããå¼åºããè¡ããã¨ãæ³å®
+    # カーネルオブジェクトセルタイプの管理
+    # HRPKernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
     @@checked = false
     @@celltype_list = []
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPObjectPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPObjectPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPObjectPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
@@ -69,9 +54,8 @@
 
     #=== HRPObjectPlugin#print_cfg_cre
-    # CRE_XXXã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # tab :: string:   ã¤ã³ãã³ãç¨ã®tab
+    # CRE_XXXの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # tab :: string:   インデント用のtab
     def print_cfg_cre(file, cell, val, tab)
         if @@api.has_key?(@plugin_arg_str) == false
@@ -81,5 +65,5 @@
             params = @@api[@plugin_arg_str]
             if @plugin_arg_str == "MUTEX" && ((val[:attribute] =~ /\bTA_CEILING\b/)==nil)
-              slice_end = -2   # :ceilingPriority ãå¤ã
+              slice_end = -2   # :ceilingPriority を外す
             else
               slice_end = -1
@@ -94,9 +78,8 @@
     end
     #=== HRPObjectPlugin#print_cfg_sac
-    # SAC_XXXã®åºå
-    # file:: FILE:     åºåå
-ãã¡ã¤ã«
-    # val :: string:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    # acv :: string:   ã¢ã¯ã»ã¹ãã¯ã¿    
+    # SAC_XXXの出力
+    # file:: FILE:     出力先ファイル
+    # val :: string:   カーネルオブジェクトの属性の解析結果
+    # acv :: string:   アクセスベクタ    
     def print_cfg_sac(file, val, acv)
         if @@api.has_key?(@plugin_arg_str) == false
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2014-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
@@ -56,7 +41,6 @@
 require_tecsgen_lib "HRPKernelObjectManager.rb"
 #
-# åã¡ã½ããã®å½¹å²ãã¯ãDomainPlugin.rb ãåç
-§ã®ãã¨
-# HRPã«ã¼ãã«ç¨ãã¡ã¤ã³ãã©ã°ã¤ã³
+# 各メソッドの役割りは、DomainPlugin.rb を参照のこと
+# HRPカーネル用ドメインプラグイン
 class HRPPlugin < DomainPlugin
   
@@ -72,19 +56,15 @@
     else
       cdl_error( "HRPPlugin: '$1' is unacceptable domain kind, specify 'kernel' or 'user'", option )
-      @option = "kernel"   # ã¨ãããã kernel ãè¨­å®ãã¦ãã
+      @option = "kernel"   # とりあえず kernel を設定しておく
     end
   end
 
   def add_through_plugin( join, current_region, next_region, through_type )
-    # join.get_owner:Cell  å·¦è¾ºã®ã»ã«
-    # join.get_definition:Port å¼ã³å£
-    # join.get_subscript:Integer or nil å¼ã³å£é
-åã®æ·»æ° (Join::@subscript ã®èª¬æåç
-§)
-    # join.get_cell:Cell å³è¾ºã®ã»ã«
-    # join.get_port_name:Symbol åãå£
-    # get_rhs_subscript:Integer or nil åãå£é
-åã®æ·»æ° (Join::@rhs_subscript ã®èª¬æåç
-§)
+    # join.get_owner:Cell  左辺のセル
+    # join.get_definition:Port 呼び口
+    # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
+    # join.get_cell:Cell 右辺のセル
+    # join.get_port_name:Symbol 受け口
+    # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
     # return []
     dbgPrint "MyDomainPlugin: add_through_plugin: #{current_region.get_name}=>#{next_region.get_name}, #{join.get_owner.get_name}.#{join.get_definition.get_name}=>#{join.get_cell.get_name}.#{join.get_port_name}, #{through_type}\n"
@@ -110,8 +90,7 @@
                                                  get_real_celltype(join.get_rhs_port1).
                                                  get_global_name)                #oyama: get_name => get_global_name 
-        # çµåå
-ãã«ã¼ãã«ãªãã¸ã§ã¯ãã»ã«
+        # 結合先がカーネルオブジェクトセル
         # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
-        # ä½ãããªãthrough
+        # 何もしないthrough
         # puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
         return []
@@ -121,7 +100,6 @@
     # elsif next_domain.nil?
     elsif next_domain.get_option.to_s == "OutOfDomain"
-    #     # çµåå
-ãç¡æå±
-    #     # ä½ãããªãthrough
+    #     # 結合先が無所属
+    #     # 何もしないthrough
     #     # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         # puts "***** nil"
@@ -129,10 +107,10 @@
     #elsif @start_region.get_param != :KERNEL_DOMAIN && @end_region.get_param == :KERNEL_DOMAIN
     elsif current_domain.get_option.to_s != "kernel" && next_domain.get_option.to_s == "kernel"
-        # ã¦ã¼ã¶ãã¡ã¤ã³ããã«ã¼ãã«ãã¡ã¤ã³ã¸ã®çµå
+        # ユーザドメインからカーネルドメインへの結合
         # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         # puts "***** svc"
         return [ :HRPSVCPlugin, "" ]
     elsif current_domain != next_domain
-        # å¥ã®ã¦ã¼ã¶ãã¡ã¤ã³ã¸ã®çµå
+        # 別のユーザドメインへの結合
         # @plugin_body = HRP2RPCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         # puts "***** rpc"
@@ -141,6 +119,6 @@
         return [ :HRPRPCPlugin, "noClientSemaphore=false,PPAllocatorSize=256" ]
     else
-        # ãã®ä»
-        # ä½ãããªãthrough
+        # その他
+        # 何もしないthrough
         # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
         dbgPrint "warning: at HRP Join Check"
@@ -156,5 +134,5 @@
   end
 
-  #== ãã¡ã¤ã³ç¨®å¥ãè¿ã
+  #== ドメイン種別を返す
   #return::Symbol :kernel, :user, :OutOfDomain
   def get_kind
@@ -165,12 +143,12 @@
   end
 
-  # ATT_MODãçææ¸ã¿ãã©ãã                   # 2017.8.27
+  # ATT_MODを生成済みかどうか                   # 2017.8.27
   @@generate_memory_module = false
 
-  @@include_extsvc_fncd = false  # 17.07.26 æ«å®
+  @@include_extsvc_fncd = false  # 17.07.26 暫定
   # 
-  #  ATT_MODã®çæ
-  #  gen_factoryå®è¡æã«ã¯ï¼ãã¹ã¦ã®ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãçææ¸ã¿ã®ã¯ããªã®ã§ï¼
-  #  ã«ã¼ãã«APIã³ã¼ãã®ã¡ã¢ãªä¿è­·ãçç¥ã§ããï¼
+  #  ATT_MODの生成
+  #  gen_factory実行時には，すべてのセルタイププラグインを生成済みのはずなので，
+  #  カーネルAPIコードのメモリ保護を省略できる．
   #
   def gen_factory
@@ -187,8 +165,7 @@
     if @@generate_memory_module == false
 
-      # INCLUDE ãåºå
-      #  ãã¹ã¦ã®ãã¡ã¤ã³ã«å¯¾ãã cfg ãå
-ã«çæãã¦ãã
-      #  ããããã¡ã¤ã³ã«å±ããã«ã¼ãã«ãªãã¸ã§ã¯ãããã¢ã¸ã¥ã¼ã«ããªãå ´åã§ããcfg ãåºåããã
+      # INCLUDE を出力
+      #  すべてのドメインに対する cfg を先に生成しておく
+      #  もし、ドメインに属するカーネルオブジェクトも、モジュールもない場合でも、cfg が出力される
       regions = DomainType.get_domain_regions[ :HRP ]
       file = AppFile.open( "#{$gen}/tecsgen.cfg" )
@@ -219,25 +196,24 @@
 
       # 
-      #  ATT_MODã®çæ
+      #  ATT_MODの生成
       #
       Cell.get_cell_list2.each { |cell|
-        # ãã¹ã¦ã®ã»ã«ãèµ°æ»ãã¦ã»ã«ã¿ã¤ãããã§ãã¯
+        # すべてのセルを走査してセルタイプをチェック
         ct = cell.get_celltype
         if ct.class == Celltype && check_celltype_list.include?( ct ) == false
-          # ãã§ãã¯æ¸ã¿ã»ã«ã¿ã¤ãã«ç»é²
+          # チェック済みセルタイプに登録
           check_celltype_list << ct
 
-          # æªãã§ãã¯ã®ã»ã«ã¿ã¤ãã ã£ãå ´å
+          # 未チェックのセルタイプだった場合
           # puts "check for ATT_MOD : #{ct.classget_global_name}"
           # puts "check for ATT_MOD : #{ct.get_global_name}"
 
-          # ã«ã¼ãã«APIã®ã³ã¼ãï¼ãã¼ã¿ã¯ã¡ã¢ãªä¿è­·ããªã # HRP3 oyama delete by Takada's request
+          # カーネルAPIのコード，データはメモリ保護しない # HRP3 oyama delete by Takada's request
           # next if HRPKernelObjectManager.include_celltype?( ct.get_name )
 
-          # å¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã®ã³ã¼ãï¼ãã¼ã¿ã¯ã¡ã¢ãªä¿è­·ããªã
+          # 必要のないセルタイプのコード，データはメモリ保護しない
           next if ! ct.need_generate?
 
-          # HRPã®ãã¡ã¤ã³ãªã¼ã¸ã§ã³ãåå¾
+          # HRPのドメインリージョンを取得
           regions = ct.get_domain_roots
           regions_hrp = regions[ :HRP ]
@@ -248,10 +224,9 @@
           # puts ""
 
-          # ã»ã«ç®¡çãã­ãã¯ã¨ã¹ã±ã«ãã³ã®ã¡ã¢ãªä¿è­·
-          # gen_celltype_names_domain ç¸å½ã®å¦ç
+          # セル管理ブロックとスケルトンのメモリ保護
+          # gen_celltype_names_domain 相当の処理
           if regions_hrp.include?( Region.get_root ) == false && regions_hrp.length > 1
-            # ãã¡ã¤ã³ãè¤æ°ã§ï¼OutOfDomainã«ã»ã«ãå­å¨ããªãã»ã«ã¿ã¤ãã®å ´å
-            # å
-±æã®ã»ã«ç®¡çãã­ãã¯ã¨ã¹ã±ã«ãã³ã³ã¼ããç»é²ãã
+            # ドメインが複数で，OutOfDomainにセルが存在しないセルタイプの場合
+            # 共有のセル管理ブロックとスケルトンコードを登録する
             file = AppFile.open( "#{$gen}/tecsgen.cfg" )
             file.printf "%-60s/* HRPPlugin 003 */\n", "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");"
@@ -270,18 +245,17 @@
           }
 
-          # ã»ã«ã¿ã¤ãã³ã¼ãããªãå ´åã¯ã¹ã­ãã
+          # セルタイプコードがない場合はスキップ
           next if ct.is_all_entry_inline? && ! ct.is_active?
 
-          # ã»ã«ã¿ã¤ãã³ã¼ãã®ã¡ã¢ãªä¿è­·
-          # gen_celltype_names_domain2 ç¸å½ã®å¦ç
+          # セルタイプコードのメモリ保護
+          # gen_celltype_names_domain2 相当の処理
           if regions_hrp.include?( Region.get_root ) == true || regions_hrp.length > 1
-            # OutOfDomainã«ã»ã«ãå­å¨ããã»ã«ã¿ã¤ãã®å ´å
-            # ã¾ãã¯ï¼è¤æ°ã®ãã¡ã¤ã³ã«ã»ã«ãå­å¨ããã»ã«ã¿ã¤ãã®å ´å
-            # ã»ã«ã¿ã¤ãã³ã¼ããå
-±æããããã«ç»é²ãã
+            # OutOfDomainにセルが存在するセルタイプの場合
+            # または，複数のドメインにセルが存在するセルタイプの場合
+            # セルタイプコードを共有するように登録する
             file = AppFile.open( "#{$gen}/tecsgen.cfg" )
           else
-            # OutOfDomainã§ãªãåä¸ã®ãã¡ã¤ã³ã«ã»ã«ãå­å¨ããã»ã«ã¿ã¤ãã®å ´å
-            # ã»ã«ã¿ã¤ãã³ã¼ããå°æããããã«ç»é²ãã
+            # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
+            # セルタイプコードを専有するように登録する
             file = AppFile.open( "#{$gen}/tecsgen_#{regions_hrp[0].get_global_name}.cfg" )
           end
@@ -290,5 +264,5 @@
           file.close
         else
-          # ä½ãããªã
+          # 何もしない
         end
       }
@@ -296,5 +270,5 @@
       @@generate_memory_module = true
     else
-      # ä½ãããªã
+      # 何もしない
     end
   end
@@ -309,5 +283,5 @@
       @@inter_domain_join_set[ rhs_cell ] = []
     end
-    # å·¦è¾ºã®ãã¡ã¤ã³ã«ã¼ããè¨é²
+    # 左辺のドメインルートを記録
     @@inter_domain_join_set[ rhs_cell ] << join
   end
@@ -339,6 +313,5 @@
     cell_domain_root = cell.get_region.get_domain_root
     if cell_domain_root.get_domain_type.get_kind != :OutOfDomain then
-      domain_roots << cell.get_region.get_domain_root  # çµåå
-ã®ãã¡ã¤ã³ãå«ãã
+      domain_roots << cell.get_region.get_domain_root  # 結合先のドメインも含める
     end
     domain_roots.each{ |dr|
@@ -364,7 +337,5 @@
     }
     if acv == "" then
-      # å¼ã³å
-ã»ã«ãç¡æå±ãã¤ãå¼ã³å
-ãç¡æå±ã®ã¿ãã¾ãã¯çµåç¡ãã®å ´å
+      # 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
       acv = "TACP_SHARED"
     end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
@@ -56,8 +41,8 @@
 require_tecsgen_lib "lib/GenParamCopy.rb"
 
-#= HRPRPCPlugin ãã©ã°ã¤ã³
-# ã¹ã«ã¼ãã©ã°ã¤ã³ (through)
-# ã»OpaqueMarshalerPlugin ãä½¿ç¨ãã¦ãã¼ã·ã£ã©ã»ã«ã¿ã¤ããçæãã
-# ã»ãã¼ã·ã£ã©ãTDRããã£ã³ãã«ãã¡ãã»ã¼ã¸ãããã¡ãçæãã
+#= HRPRPCPlugin プラグイン
+# スループラグイン (through)
+# ・OpaqueMarshalerPlugin を使用してマーシャラセルタイプを生成する
+# ・マーシャラ、TDR、チャンネル、メッセージバッファを生成する
 #
 class HRPRPCPlugin < ThroughPlugin
@@ -66,14 +51,12 @@
   include GenParamCopy
 
-  # RPCPlugin å°ç¨ã®ãªãã·ã§ã³
-  HRPRPCPluginArgProc = RPCPluginArgProc.dup  # è¤è£½ãä½ã£ã¦å
-ãå¤æ´ããªãããã«ãã
+  # RPCPlugin 専用のオプション
+  HRPRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
   HRPRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
   HRPRPCPluginArgProc[ "semaphoreCelltype"  ] = Proc.new { |obj,rhs| obj.set_semaphoreCelltype rhs }
   @@isFirstInstance = true
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
@@ -82,6 +65,5 @@
     initialize_opaque_marshaler
 
-    # ãªãã·ã§ã³ï¼GenOpaqueMarshaler åç
-§
+    # オプション：GenOpaqueMarshaler 参照
     @plugin_arg_check_proc_tab = HRPRPCPluginArgProc
     parse_plugin_arg
@@ -99,5 +81,5 @@
       if @PPAllocatorSize == nil then
         cdl_error( "HRP9999 PPAllocatorSize must be speicified for pointer argments" )
-        # @PPAllocatorSize = 0   # ä»®ã« 0 ã¨ãã¦ãã (cdl ã®æ§æã¨ã©ã¼ãé¿ãããã)
+        # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
       end
     elsif @PPAllocatorSize then
@@ -109,8 +91,7 @@
 #      if func_decl.get_type.is_oneway? then
 #        if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then
-#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan æå­åã®é
-å
+#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列の配列
 #        elsif param_decl.get_string == -1 then
-#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan é·ãæªæå®æå­å
+#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
 #        end
 #      end
@@ -118,11 +99,8 @@
 
     # 
-    #  tecsgen/tecs/rpcã«includeãã¹ãéã
-    #  #include "tecs_rpc.h" ãå®ç¾ããããã«å¿
-è¦
-    #    å¤§å±±:åé¤ Makefile.tecsgen ã« vpath, INCLUDES ãå
-¥ããã®ã¯ããããªãèã
-    #             TECSGEN.add_search_path ã§ Makefile_templ ã«å
-¥ããã®ããã
+    #  tecsgen/tecs/rpcにincludeパスを通す
+    #  #include "tecs_rpc.h" を実現するために必要
+    #    大山:削除 Makefile.tecsgen に vpath, INCLUDES を入れるのは、よくない考え
+    #             TECSGEN.add_search_path で Makefile_templ に入れるのがよい
     # if @@isFirstInstance
     #     f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
@@ -134,10 +112,10 @@
   end
 
-  #=== plugin ã®å®£è¨ã³ã¼ã (celltype ã®å®ç¾©) çæ
+  #=== plugin の宣言コード (celltype の定義) 生成
   def gen_plugin_decl_code( file )
 
     ct_name = "#{@ct_name}_#{@channelCelltype}"
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ ct_name ] == nil then
       @@generated_celltype[ ct_name ] = [ self ]
@@ -148,6 +126,5 @@
 
     f = CFile.open( @rpc_channel_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -177,5 +154,5 @@
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -229,9 +206,9 @@
 EOT
 
-    ##### ã¯ã©ã¤ã¢ã³ãå´ã®ã»ã«ã®çæ #####
+    ##### クライアント側のセルの生成 #####
     nest = @start_region.gen_region_str_pre file
     nest_str = "  " * nest
 
-    # ã»ããã©ã®çæ
+    # セマフォの生成
     if @b_noClientSemaphore == false then
       file.print <<EOT
@@ -243,8 +220,6 @@
     end
 
-    # ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (tMessageBufferCEP)ã®çæ
-    # ãã£ã³ãã«ã¯å¿
-ããªã¼ã¸ã§ã³ä¸ã«ããã®ã§ã '::' ã§ã¤ãªã (ã§ãªããã°ãã«ã¼ããªã¼ã¸ã§ã³ã«ãªãããã§ãã¯ãå¿
-è¦ï¼
+    # クライアント側チャンネル (tMessageBufferCEP)の生成
+    # チャンネルは必ずリージョン下にあるので、 '::' でつなぐ (でなければ、ルートリージョンにないかチェックが必要）
 
     file.print <<EOT
@@ -263,5 +238,5 @@
 EOT
 
-    # ã»ããã©ã®çµåæ
+    # セマフォの結合文
     if @b_noClientSemaphore == false then
       semaphore = "#{nest_str}    cLockChannel = #{@serverChannelCell}_Semaphore.eSemaphore;\n"
@@ -270,7 +245,7 @@
     end
 
-    ### ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (ãã¼ã·ã£ã©+TDR)ã®çæ ###
+    ### クライアント側チャンネル (マーシャラ+TDR)の生成 ###
     cell = @next_cell
-    # ã¢ã­ã±ã¼ã¿ã®æå®ããããï¼
+    # アロケータの指定があるか？
     if cell.get_allocator_list.length > 0 then
 
@@ -288,8 +263,7 @@
 
         file.print delim
-        delim = ",\n"        # æçµè¡ã«ã¯åºããªã
-
-        if subsc then        # é
-åæ·»æ°
+        delim = ",\n"        # 最終行には出さない
+
+        if subsc then        # 配列添数
           subsc_str = '[#{subsc}]'
         else
@@ -297,5 +271,5 @@
         end
 
-        eport = "eThroughEntry" #RPCã®åãå£åã«å¤æ´
+        eport = "eThroughEntry" #RPCの受け口名に変更
         file.print nest_str
         file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}"
@@ -316,9 +290,9 @@
 #{clientErrorHandler_str}#{semaphore}#{nest_str}  };
 EOT
-    ### END: ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (ãã¼ã·ã£ã©+TDR)ã®çæ ###
+    ### END: クライアント側チャンネル (マーシャラ+TDR)の生成 ###
     @start_region.gen_region_str_post file
     file.print "\n\n"
 
-    ##### ãµã¼ãã¼å´ã®ã»ã«ã®çæ #####
+    ##### サーバー側のセルの生成 #####
     nest = @end_region.gen_region_str_pre file
     nest_str = "  " * nest
@@ -336,5 +310,5 @@
     end
 
-    # ãµã¼ãã¼å´ãã£ã³ãã« (tMessageBufferCEP)
+    # サーバー側チャンネル (tMessageBufferCEP)
     if @PPAllocatorSize then
       alloc_cell =<<EOT
@@ -358,5 +332,5 @@
 EOT
 
-    # ãµã¼ãã¼å´TDR
+    # サーバー側TDR
     file.print <<EOT
 
@@ -373,5 +347,5 @@
     end
 
-    # ãµã¼ãã¼å´ãã£ã³ãã« (ã¢ã³ãã¼ã·ã£ã©)
+    # サーバー側チャンネル (アンマーシャラ)
     file.print <<EOT
 #{alloc_cell}
@@ -383,5 +357,5 @@
 EOT
 
-    # ãµã¼ãã¼å´ã¿ã¹ã¯ã¡ã¤ã³
+    # サーバー側タスクメイン
     file.print <<EOT
 
@@ -392,5 +366,5 @@
 EOT
 
-    # ãµã¼ãã¼å´ã¿ã¹ã¯
+    # サーバー側タスク
     file.print <<EOT
 
@@ -407,5 +381,5 @@
 
 
-  #=== ãã©ã°ã¤ã³å¼æ° noClientSemaphore ã®ãã§ãã¯
+  #=== プラグイン引数 noClientSemaphore のチェック
   def set_noClientSemaphore rhs
     rhs = rhs.to_sym
@@ -419,5 +393,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° semaphoreCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 semaphoreCelltype のチェック
   def set_semaphoreCelltype rhs
     @semaphoreCelltype = rhs.to_sym
@@ -429,6 +403,6 @@
   end
 
-  #=== NamespacePath ãå¾ã
-  # çæããã»ã«ã® namespace path ãçæãã
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
   def get_cell_namespace_path
 #    nsp = @region.get_namespace.get_namespace_path
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPSVCPlugin.rb	(revision 389)
@@ -6,73 +6,53 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
 #++
 
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-# ãããå©ç¨ããå ´åãä»¥ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿
-è¦ããã
+# mikan through plugin: namespace が考慮されていない
+# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 class SVCManage
     #
-    #  @@id: TECSã®ãã©ã°ã¤ã³ã§çæããæ¡å¼µãµã¼ãã¹ã³ã¼ã«ã«å²ãå½ã¦ãid
-    #        å®éã®æ¡å¼µãµã¼ãã¹ã³ã¼ã«IDã¯ï¼TFN_TECSGEN_ORIGINã§ä¸é§ã
-    #        å±¥ãããå¤ã¨ãªã
-    #        TFN_TECSGEN_ORIGINã¯ï¼hrp3/include/extsvc_fncode.h ã§å®ç¾©
-    #        ããã
-    #  @@func_ids: æ¡å¼µãµã¼ãã¹ã³ã¼ã«ã®é¢æ°åã¨æ¡å¼µãµã¼ãã¹ã³ã¼ã«IDã
-    #  ãããå¯¾å¿ã¥ããããã·ã¥
+    #  @@id: TECSのプラグインで生成した拡張サービスコールに割り当てるid
+    #        実際の拡張サービスコールIDは，TFN_TECSGEN_ORIGINで下駄を
+    #        履かせた値となる
+    #        TFN_TECSGEN_ORIGINは，hrp3/include/extsvc_fncode.h で定義
+    #        される
+    #  @@func_ids: 拡張サービスコールの関数名と拡張サービスコールIDを
+    #  　　　対応づけるハッシュ
     #
     @@id = 0
@@ -80,5 +60,5 @@
     def initialize()
         # 
-      #  æ¬ã¯ã©ã¹ã¯ã¤ã³ã¹ã¿ã³ã¹ãæããªãä»®æ³çãªã¯ã©ã¹ã§ãã
+      #  本クラスはインスタンスを持たない仮想的なクラスである
         #
         raise "class #{self.class.name} shall not have instances"
@@ -105,28 +85,23 @@
 
 #
-#  æ¡å¼µãµã¼ãã¹ã³ã¼ã«ãç¨ãããã¡ã¤ã³ééä¿¡ã®
-#  throughãã©ã°ã¤ã³
-#  HRPãã¡ã¤ã³ãã©ã°ã¤ã³ã«ãã£ã¦æ¿å
-¥ããã
-#  åææ¡ä»¶: å¼åºãå
-ãã«ã¼ãã«ãªãã¸ã§ã¯ããã©ããã®å¤å®ã¯HRPãã¡ã¤ã³ãã©ã°ã¤ã³
-#  ãããããã§å®æ½ãããããï¼ããã§ã¯å¤å®ããªããã¨ã¨ãã
+#  拡張サービスコールを用いたドメイン間通信の
+#  throughプラグイン
+#  HRPドメインプラグインによって挿入される
+#  前提条件: 呼出し先がカーネルオブジェクトかどうかの判定はHRPドメインプラグイン
+#  　　　　　で実施されるため，ここでは判定しないこととした
 #
 class HRPSVCPlugin < ThroughPlugin
 
-  NUM_SVC_ARG_MAX = 5              # HRP3 ã®æ¡å¼µãµã¼ãã¹ã³ã¼ã«ã§æ±ããã¨ã®ã§ããå¼æ°ã®æå¤§åæ°
-
-  @@generated_celltype ={}    # ã»ã«ã¿ã¤ãã®éè¤æé¤ç¨
-  @@generated_cell = {}       # ã»ã«ã®éè¤æé¤ç¨
+  NUM_SVC_ARG_MAX = 5              # HRP3 の拡張サービスコールで扱うことのできる引数の最大個数
+
+  @@generated_celltype ={}    # セルタイプの重複排除用
+  @@generated_cell = {}       # セルの重複排除用
 
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
 
-    # åãå£é
-åã®å ´åãé
-åæ·»æ°ãã¨ã«å¥ã®ã»ã«ã¿ã¤ãã¨ãã
-    # ã»ã«ã¿ã¤ããã·ã³ã°ã«ãã³åãããããã
-    # ãããªãã¨ãã»ã«ãè­å¥ããå¼æ°ãæ¸¡ãå¿
-è¦ããããNUM_SVC_ARG_MAX(5) ã¤ããæ¸¡ããªãå¼æ°ã®ä¸ã¤ãæ¶è²»ãããã¨ã«ãªãããã
+    # 受け口配列の場合、配列添数ごとに別のセルタイプとする
+    # セルタイプをシングルトン化したいため。
+    # さもないと、セルを識別する引数を渡す必要があり、NUM_SVC_ARG_MAX(5) つしか渡せない引数の一つを消費することになるため。
     if @next_cell_port_subscript then
       subscript = "__" + @next_cell_port_subscript.to_s
@@ -145,6 +120,6 @@
   end
 
-  #=== NamespacePath ãå¾ã
-  # çæããã»ã«ã® namespace path ãçæãã
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
   def get_cell_namespace_path
 #    nsp = @region.get_namespace.get_namespace_path
@@ -155,5 +130,5 @@
   def gen_plugin_decl_code( file )
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @ct_name_body ] == nil then
         @@generated_celltype[ @ct_name_body ] = [ self ]
@@ -177,5 +152,5 @@
     file.print "import( \"#{$gen}/#{@ct_name_body}.cdl\" );\n"
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @ct_name ] == nil then
         @@generated_celltype[ @ct_name ] = [ self ]
@@ -197,5 +172,5 @@
 
 =begin
-    # TODO: send. receive å¯¾å¿
+    # TODO: send. receive 対応
     send_receive = []
     if @signature != nil then
@@ -229,5 +204,5 @@
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -236,16 +211,16 @@
     # gen_plugin_decl_code( file )  this is called from super.
 
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_name]  # mikan namespace
     # cell = Namespace.find( path )
     # cell = Namespace.find( @next_cell.get_namespace_path )
 
-    ##### ã¯ã©ã¤ã¢ã³ãå´ã®ã»ã«ã®çæ #####
+    ##### クライアント側のセルの生成 #####
     # file.print "[domain(HRP, \"kernel\")]"
     nest = @start_region.gen_region_str_pre file
     nest_str = "  " * nest
 
-    # ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã«ã®çæ
-    # æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºã
+    # クライアント側チャンネルの生成
+    # 拡張サービスコール呼出し
     file.print <<EOT
 /* HRPSVC0003 */
@@ -259,5 +234,5 @@
     file.print "\n\n"
 
-    ##### ãµã¼ãã¼å´ã®ã»ã«ã®çæ #####
+    ##### サーバー側のセルの生成 #####
     # print "######  #{@cell_name_body} ... #{@ct_name_body} #{@@generated_cell[ @ct_name_body ].class}  #####\n"
 
@@ -274,6 +249,6 @@
       end
 
-      # ãµã¼ãã¼å´ãã£ã³ãã«ã®çæ 
-      # æ¡å¼µãµã¼ãã¹ã³ã¼ã«æ¬ä½
+      # サーバー側チャンネルの生成 
+      # 拡張サービスコール本体
       file.print <<EOT
 
@@ -295,17 +270,14 @@
       file2.close
 
-      # callee_cell ã®get_restricted_regions ãå¼ã³åºãã¦ãã
-      # restrict ãåç
-§ãããå°ãã¤ãããã
+      # callee_cell のget_restricted_regions を呼び出しておく
+      # restrict が参照された印をつけるため
       @callee_cell.get_restricted_regions( :dummy_entry_name, :dummy_func_name )
     end
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     éå¸¸ã§ããã°ãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -320,7 +292,7 @@
 
         #
-        #  æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºãå´ã®é¢æ°çæ
+        #  拡張サービスコール呼出し側の関数生成
         #
-        #  å®æå½¢ã®ã¤ã¡ã¼ã¸
+        #  完成形のイメージ
         #  
         # ER_UINT
@@ -332,5 +304,5 @@
         #       p_cellcb = tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_GET_CELLCB(idx);
         #   }else{
-        #       /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+        #       /* エラー処理コードをここに記述 */
         #   }
         # 
@@ -389,7 +361,7 @@
 
         #
-        #  æ¡å¼µãµã¼ãã¹ã³ã¼ã«æ¬ä½å´ã®é¢æ°çæ
+        #  拡張サービスコール本体側の関数生成
         #
-        #  å®æå½¢ã®ã¤ã¡ã¼ã¸
+        #  完成形のイメージ
         #  
         # ER_UINT
@@ -401,5 +373,5 @@
         #       p_cellcb = tHRPSVCPlugin_<Sig>SVCBody_<Cell>_<Entry>_GET_CELLCB(idx);
         #   }else{
-        #       /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+        #       /* エラー処理コードをここに記述 */
         #   }
         # 
@@ -436,12 +408,10 @@
 
             # 
-            #  ã¨ã©ã¼ãã§ãã¯å¦çã®çæ
+            #  エラーチェック処理の生成
             #
 
             # 
-            #  å¼åºãå
-ãã¡ã¤ã³ã®ãã§ãã¯
-            #   * private method: gen_caller_check_codeåç
-§
+            #  呼出し元ドメインのチェック
+            #   * private method: gen_caller_check_code参照
             #
             generated_check_code = gen_caller_check_code(func_name)
@@ -450,11 +420,9 @@
 
             # 
-            #  ãã©ã¡ã¼ã¿ã«ãã¤ã³ã¿ãå­å¨ããå ´åï¼å¼åºãå
-ã¿ã¹ã¯ã«å¯¾ãã
-            #  ã¢ã¯ã»ã¹æ¨©ã®ãã§ãã¯å¦çãåºåãã
-            #  â» cdmidãã«ã¼ãã«ãã¡ã¤ã³(æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºãä¸­ã®ã¦ã¼ã¶
-            #    ãã¡ã¤ã³ãå«ã)ã§ããã°prb_memã®å¦çãã¹ã­ãããï¼åæ®µã®
-            #    æ¡å¼µãµã¼ãã¹ã³ã¼ã«ã®ã¿prb_memãå¼åºãå
-ã¿ã¹ã¯ã«çºè¡ãã
+            #  パラメータにポインタが存在する場合，呼出し元タスクに対する
+            #  アクセス権のチェック処理を出力する
+            #  ※ cdmidがカーネルドメイン(拡張サービスコール呼出し中のユーザ
+            #    ドメインを含む)であればprb_memの処理をスキップし，初段の
+            #    拡張サービスコールのみprb_memを呼出し元タスクに発行する
             #
             num = 0
@@ -465,12 +433,10 @@
                     if param.get_type.get_referto.kind_of?(IntType) then
                         case param.get_type.get_referto.get_bit_size
-                        when -11, -1, 8   # char, char_t, int8_t (ç¡ç¬¦å·å«ã)
+                        when -11, -1, 8   # char, char_t, int8_t (無符号含む)
                         #
-                        #  charãã¼ã¿ã®å ´åï¼ALIGN_TYPEã¯å¿
-ãTRUE
-                        #  ã¨ãªãã®ã§ï¼ã¨ã©ã¼ãã§ãã¯ãçç¥
-                        #  charåã®@bit_sizeã¯-11
-                        #  tecsgen/tecslib/core/types.rbãåç
-§
+                        #  charデータの場合，ALIGN_TYPEは必ずTRUE
+                        #  となるので，エラーチェックを省略
+                        #  char型の@bit_sizeは-11
+                        #  tecsgen/tecslib/core/types.rbを参照
                         #
                           align_check_str = ""
@@ -479,11 +445,8 @@
                     if param.get_direction == :IN then
                         #
-                        #  å
-¥å([in])ã®ãã¤ã³ã¿ãã©ã¡ã¼ã¿ã¯ï¼å¼åºãå
-ã¿ã¹ã¯ã«
-                        #  TPM_READ(èª­åºãå¯è½)ã®ã¢ã¯ã»ã¹æ¨©ãå¿
-è¦
+                        #  入力([in])のポインタパラメータは，呼出し元タスクに
+                        #  TPM_READ(読出し可能)のアクセス権が必要
                         #
-                        # äºéãã¤ã³ã¿ãä¸å¯ã®ãããsize_is ã¨ string ãåæã«è¨­å®ããããã¨ã¯ãªã
+                        # 二重ポインタが不可のため、size_is と string が同時に設定されることはない
                         prb_func = "prb_mem"
                         if param.get_size then
@@ -507,16 +470,13 @@
                     elsif param.get_direction == :OUT || param.get_direction == :INOUT then
                         #
-                        #  åºå([out])ã®ãã¤ã³ã¿ãã©ã¡ã¼ã¿ã¯ï¼å¼åºãå
-ã¿ã¹ã¯ã«
-                        #  TPM_WRITE(æ¸è¾¼ã¿å¯è½)ã®ã¢ã¯ã»ã¹æ¨©ãå¿
-è¦
+                        #  出力([out])のポインタパラメータは，呼出し元タスクに
+                        #  TPM_WRITE(書込み可能)のアクセス権が必要
                         #
                         prb_func = "prb_mem"
                         if param.get_size then
                           size_str = param.get_size.to_s
-                        elsif param.get_string then          # å¼æ°ãªãã® string ã¯ãªã
+                        elsif param.get_string then          # 引数なしの string はない
                           size_str = param.get_string.to_s
-                          # prb_func = "prb_str"             # out, inout ã®å ´åãå¿
-ãé åãç¢ºä¿ãã. prb_mem ãç¨ãã
+                          # prb_func = "prb_str"             # out, inout の場合、必ず領域を確保する. prb_mem を用いる
                         else
                           size_str = "1"
@@ -535,7 +495,6 @@
 
             # 
-            #  å¼åºãå
-ãã«ã¼ãã«ãã¡ã¤ã³ã®ã¿è¨±å¯ããã¦ããå ´åï¼
-            #  ãã¹ã¦ã®ã¦ã¼ã¶ãã¡ã¤ã³ããã®å¼åºãã«å¯¾ãï¼E_OACVãè¿ã
+            #  呼出し元がカーネルドメインのみ許可されている場合，
+            #  すべてのユーザドメインからの呼出しに対し，E_OACVを返す
             #
             if user_cannot_callable
@@ -545,7 +504,6 @@
             if check_code != ""
                 # 
-                #  å¼åºãå
-ãã«ã¼ãã«ãã¡ã¤ã³ã®å ´åï¼ã¢ã¯ã»ã¹æ¨©ã®ãã§ãã¯
-                #  å¦çãã¹ã­ããããã
+                #  呼出し元がカーネルドメインの場合，アクセス権のチェック
+                #  処理をスキップさせる
                 #
                 file2.print <<eot
@@ -557,5 +515,5 @@
 
             # 
-            #  æ¡å¼µãµã¼ãã¹ã³ã¼ã«æ¬ä½(æ¬æ¥ã®åãå£é¢æ°)ãå¼ã³åºã
+            #  拡張サービスコール本体(本来の受け口関数)を呼び出す
             #
             file2.print"    #{retval_assign}#{@call_port_name}_#{func_name}("
@@ -580,5 +538,5 @@
 
             # 
-            #  æ¡å¼µãµã¼ãã¹ã³ã¼ã«ã®ç»é²
+            #  拡張サービスコールの登録
             #
             file2 = AppFile.open( "#{$gen}/tecsgen.cfg" )
@@ -593,9 +551,7 @@
 
             # 
-            #  æ¡å¼µãµã¼ãã¹ã³ã¼ã«ç»é²ã«å¿
-è¦ãªæ
-å ±ããããã«åºå
-            #   - æ¡å¼µãµã¼ãã¹ã³ã¼ã«å¼åºãæã®ãã§ãã¯ã§ä½¿ç¨ããã¹ã¿ãã¯ãµã¤ãºãåºå
-            #   - æ¡å¼µãµã¼ãã¹ã³ã¼ã«ã¨ãã¦ç»é²ããé¢æ°åã®externå®£è¨ãåºå
+            #  拡張サービスコール登録に必要な情報をヘッダに出力
+            #   - 拡張サービスコール呼出し時のチェックで使用するスタックサイズを出力
+            #   - 拡張サービスコールとして登録する関数名のextern宣言を出力
             #
             file2 = AppFile.open( "#{$gen}/#{@ct_name_body}_factory.h" )
@@ -627,17 +583,16 @@
   private
   # 
-  #  æ¡å¼µãµã¼ãã¹ã³ã¼ã«æ¬ä½ã«ãããï¼å¼åºãå
-ãã§ãã¯ã®ã³ã¼ãã
-  #  åºåãã
-  #  gen_ep_func_body ããã®ã¿å¼ã³åºããã
-  #  å¼æ°: å¯¾è±¡ã®é¢æ°å
-  #  è¿ãå¤: ä¸è¨ã®ããã·ã¥
-  #    {"check_code"=>åºåããã¨ã©ã¼ãã§ãã¯ã³ã¼ã, 
-  #     "user_cannot_callable"=>ã¦ã¼ã¶ãã¡ã¤ã³ãå¼åºãä¸å¯è½ãã©ããã®ãã©ã°}
+  #  拡張サービスコール本体における，呼出し元チェックのコードを
+  #  出力する
+  #  gen_ep_func_body からのみ呼び出される
+  #  引数: 対象の関数名
+  #  返り値: 下記のハッシュ
+  #    {"check_code"=>出力するエラーチェックコード, 
+  #     "user_cannot_callable"=>ユーザドメインが呼出し不可能かどうかのフラグ}
   #
   def gen_caller_check_code(func_name)  
     dbgPrint "gen_caller_check_code(func_name): #{@callee_cell.get_name}\n"
       # 
-      #  ã¨ã©ã¼ãã§ãã¯å¦ç
+      #  エラーチェック処理
       #
       check_code = ""
@@ -647,26 +602,25 @@
 
       # 
-      #  å¼åºãå
-ãã¡ã¤ã³ã®ãã§ãã¯å¦ç
-      #  callable_domains: æ¡å¼µãµã¼ãã¹ã³ã¼ã«ãå¼åºãå¯è½ãªãã¡ã¤ã³ã®ãªã¹ã
-      #    - ç¡æå±ã®ã»ã«ããçµåããã¦ããå ´åï¼ãã¹ã¦ã®ã»ã«ã«å¯¾ãã¦ï¼
-      #    ãcallable?ããã§ãã¯ãï¼å¼åºãå¯è½ãªãã¹ã¦ã®ãã¡ã¤ã³ãè¿ã
-      #    - ç¡æå±ä»¥å¤ã®ã»ã«ããçµåããã¦ããå ´åï¼ãã®ã»ã«ã«å¯¾ãã¦
-      #      callable?ããã§ãã¯ãï¼å¼åºãå¯è½ã§ããã°ï¼ãã®ãã¡ã¤ã³ãè¿ã
+      #  呼出し元ドメインのチェック処理
+      #  callable_domains: 拡張サービスコールを呼出し可能なドメインのリスト
+      #    - 無所属のセルから結合されている場合，すべてのセルに対して，
+      #    　callable?をチェックし，呼出し可能なすべてのドメインを返す
+      #    - 無所属以外のセルから結合されている場合，そのセルに対して
+      #      callable?をチェックし，呼出し可能であれば，そのドメインを返す
       #
       callable_domains = []
       @@generated_celltype[ @ct_name_body ].each { |svcplugin|
           if svcplugin.get_caller_cell.get_region.get_domain_root.get_domain_type.get_option == "OutOfDomain"
-              # ç¡æå±ãã¤ active ãªå ´åããrestrict ã«å¾ã
+              # 無所属かつ active な場合も、restrict に従う
               # if svcplugin.get_caller_cell.get_celltype.is_active?
               #    #
-              #    #  ç¡æå±ãã¤activeãªã»ã«ã¯ãTECSããå­å¨ãèªè­ããã¦ããªãã®ã
-              #    #  å«ãä»»æã®ãã¡ã¤ã³ããå¼ã³åºãããå¯è½æ§ãå­å¨ãã
+              #    #  無所属かつactiveなセルは、TECSから存在が認識されていないのを
+              #    #  含む任意のドメインから呼び出される可能性も存在する
               #    #
               #    caller_unrestricted = true
               # else
               #     # 
-              #     #  ç¡æå±ããæ¥ç¶ããã¦ããå ´åã¯ï¼ãã¹ã¦ã®ã»ã«ã®
-              #     #  restrictããã§ãã¯
+              #     #  無所属から接続されている場合は，すべてのセルの
+              #     #  restrictをチェック
               #     #
               #     Cell.get_cell_list2.each { |cell|
@@ -680,5 +634,5 @@
               # end
 
-              # restrict æå®ãããå ´åã«ã¯ãããã«å¾ãããããªããã°ããã§ãã¯ããªã
+              # restrict 指定がある場合には、それに従う。さもなければ、チェックしない
               callable_domains = @callee_cell.get_restricted_regions( get_callee_ep_name, func_name )
               if callable_domains == nil then
@@ -695,14 +649,12 @@
           elsif svcplugin.get_caller_cell.callable?( svcplugin.get_callee_cell, svcplugin.get_callee_ep_name, func_name )
               # 
-              #  ç¹å®ã®ãã¡ã¤ã³ããæ¥ç¶ããã¦ããå ´åã¯ï¼å¼åºãå
-ã»ã«ã®
-              #  restrictããã§ãã¯
+              #  特定のドメインから接続されている場合は，呼出し元セルの
+              #  restrictをチェック
               #
               callable_domains << svcplugin.get_caller_cell.get_region.get_domain_root
           else
               # 
-              #  ç¡æå±ããçµåããã¦ãããï¼ç¹å®ã®å¼åºãå
-ãã¡ã¤ã³ã«ã¢ã¯ã»ã¹æ¨©
-              #  ããªãå ´åï¼callable_domainsã¯ç©ºã¨ãªã
+              #  無所属から結合されておらず，特定の呼出し元ドメインにアクセス権
+              #  がない場合，callable_domainsは空となる
               #
               # pp "#{svcplugin.get_caller_cell.get_name} cannot call #{svcplugin.get_callee_cell.get_name}_#{svcplugin.get_callee_ep_name}_#{func_name}"
@@ -716,10 +668,10 @@
 
       # 
-      #  éè¤ãåé¤
+      #  重複を削除
       #
       callable_domains.uniq!
       # 
-      #  ç¡æå±ã«å¯¾ãããã¡ã¤ã³ãã§ãã¯ã¯å®æ½ããªã
-      #  ã«ã¼ãã«ãã¡ã¤ã³ã«å¯¾ãããã¡ã¤ã³ãã§ãã¯ã¯å®æ½ããªã
+      #  無所属に対するドメインチェックは実施しない
+      #  カーネルドメインに対するドメインチェックは実施しない
       #
       callable_domains = callable_domains.select { |domain|
@@ -730,6 +682,6 @@
       # pp callable_domains.map{|domain| domain.get_name }
       # 
-      #  ãã¹ã¦ã®ã¦ã¼ã¶ãã¡ã¤ã³ããå¼åºãå¯è½ãªå ´åï¼ãã¡ã¤ã³ãã§ãã¯ã¯
-      #  å®æ½ããªã
+      #  すべてのユーザドメインから呼出し可能な場合，ドメインチェックは
+      #  実施しない
       #
       all_domain_regions = DomainType.get_domain_regions[:HRP].select { |reg|
@@ -745,12 +697,11 @@
 
       # 
-      #  å¼åºãå
-ãã¡ã¤ã³ã®ãã§ãã¯å¦çæ¬ä½ã®çæ
+      #  呼出し元ドメインのチェック処理本体の生成
       #
       if callable_domains.length == 0
         dbgPrint "callable_domain.length = 0\n"
           # 
-          #  ã¦ã¼ã¶ãã¡ã¤ã³ããå¼åºãä¸å¯è½ãªå ´åã¯
-          #  åå¥ã®ã¨ã©ã¼ãã§ãã¯ã¯ããï¼åç­ç¡ç¨ã§E_OACVãè¿ã
+          #  ユーザドメインから呼出し不可能な場合は
+          #  個別のエラーチェックはせず，問答無用でE_OACVを返す
           #
           user_cannot_callable = true
@@ -758,6 +709,6 @@
         dbgPrint "callable_domain.length = 1\n"
           # 
-          #  å¼åºãå¯è½ãªã¦ã¼ã¶ãã¡ã¤ã³ãåä¸ã®å ´åã¯
-          #  cdmid != <domainå> ã®å½¢å¼ã§ãã§ãã¯ãã
+          #  呼出し可能なユーザドメインが単一の場合は
+          #  cdmid != <domain名> の形式でチェックする
           #
           check_code += "\t/* HRPSVC0012.1 */\n"
@@ -766,7 +717,7 @@
         dbgPrint "callable_domain.length > 1 && not all_domains \n"
           # 
-          #  å¼åºãå¯è½ãªã¦ã¼ã¶ãã¡ã¤ã³ãè¤æ°ã®å ´åã¯
-          #  TACP(cdmid) & (TACP(<domainå>) | ...) != 0U
-          #  ã®å½¢å¼ã§ãã§ãã¯ãã
+          #  呼出し可能なユーザドメインが複数の場合は
+          #  TACP(cdmid) & (TACP(<domain名>) | ...) != 0U
+          #  の形式でチェックする
           #
           check_code += "\t/* HRPSVC0012.2 */\n"
@@ -779,6 +730,6 @@
       if check_code != ""
           # 
-          #  å¼åºãå¯è½ãªã¦ã¼ã¶ãã¡ã¤ã³ã®ãã§ãã¯ãããå ´åã¯
-          #  ã¨ã©ã¼ã³ã¼ããè¿ãããã®ã³ã¼ããåºåãã
+          #  呼出し可能なユーザドメインのチェックがある場合は
+          #  エラーコードを返すためのコードを出力する
           #
           check_code += <<EOS
@@ -793,5 +744,5 @@
 
   #---------------------------------------------------------#
-  #=== ã·ã°ããã£ã®ãã§ãã¯
+  #=== シグニチャのチェック
   def check_signature signature
     signature.get_function_head_array.each{ |fh|
@@ -806,7 +757,7 @@
     }
   end
-  #=== æ»ãå¤ã®åã®ãã§ãã¯
-  # ER, ER_UINT ã¯æ¨å¥¨ãããå
-  # æ´æ°ããã¼ã«ãvoid ã¯å¯è½ãä»ã¯ä¸å¯
+  #=== 戻り値の型のチェック
+  # ER, ER_UINT は推奨される型
+  # 整数、ブール、void は可能、他は不可
   def check_return_type signature, fh, type
     ot = type.get_original_type
@@ -820,5 +771,5 @@
     end
   end
-  #=== å¼æ°ã®åã®ãã§ãã¯
+  #=== 引数の型のチェック
   def check_param signature, fh, param
     type = param.get_type
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPTaskPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPTaskPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPTaskPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
@@ -55,6 +40,5 @@
 require_tecsgen_lib "HRPKernelObjectPlugin.rb"
 require_tecsgen_lib "HRPKernelObjectManager.rb"
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class HRPTaskPlugin < HRPKernelObjectPlugin
     ##
@@ -69,20 +53,19 @@
     end
 
-    # # ATT_MODãçææ¸ã¿ãã©ãã                   # 2017.8.27
+    # # ATT_MODを生成済みかどうか                   # 2017.8.27
     # @@generate_memory_module = false
 
     #
-    #  CRE_TSKã®åºå
-    #  file:: FILE:     åºåå
-ãã¡ã¤ã«
-    #  cell :: Cell ã¿ã¹ã¯ã»ã«ã¤ã³ã¹ã¿ã³ã¹
-    #  val :: Hash {attr => string}:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    #  tab :: string: ã¿ã
+    #  CRE_TSKの出力
+    #  file:: FILE:     出力先ファイル
+    #  cell :: Cell タスクセルインスタンス
+    #  val :: Hash {attr => string}:   カーネルオブジェクトの属性の解析結果
+    #  tab :: string: タブ
     #
     def print_cfg_cre(file, cell, val, tab)
         val[:id] = val[:id].gsub( /(^|[^\$])\$id\$/, "\\1#{@celltype.get_name.to_s}_#{cell.get_name.to_s}" )
-        # $cbp$ã®ä»£ãã
+        # $cbp$の代わり
         cell_IDX = @celltype.get_name_array(cell)[7]
-        # CRE_TSKã®çæ
+        # CRE_TSKの生成
         dbgPrint "assign task plugin\n"
         domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
@@ -91,5 +74,5 @@
             if val[:systemStackSize] == "0"
                 # 
-                #  ã·ã¹ãã ã¹ã¿ãã¯ã®å®ç¾©ãçç¥
+                #  システムスタックの定義を省略
                 #
                 file.print <<EOT
@@ -98,5 +81,5 @@
             else
                 # 
-                #  ã·ã¹ãã ã¹ã¿ãã¯ã®å®ç¾©ãè¿½å 
+                #  システムスタックの定義を追加
                 #
                 file.print <<EOT
@@ -106,5 +89,5 @@
         else
             #
-            #  ç¡æå±ã®ã¿ã¹ã¯ã¯å­å¨ãã¦ã¯ãªããªãããï¼ã¨ã©ã¼ã¨ãã
+            #  無所属のタスクは存在してはならないため，エラーとする
             #
             raise "task #{val[:id]} must belong to a domain."
@@ -113,9 +96,8 @@
 
     #
-    #  SAC_TSKã®åºå
-    #  file:: FILE:     åºåå
-ãã¡ã¤ã«
-    #  val :: Hash {attr => string}:   ã«ã¼ãã«ãªãã¸ã§ã¯ãã®å±æ§ã®è§£æçµæ
-    #  acv :: Hash {accessPatternx => string}:   ã¢ã¯ã»ã¹è¨±å¯ãã¯ã¿
+    #  SAC_TSKの出力
+    #  file:: FILE:     出力先ファイル
+    #  val :: Hash {attr => string}:   カーネルオブジェクトの属性の解析結果
+    #  acv :: Hash {accessPatternx => string}:   アクセス許可ベクタ
     #
     def print_cfg_sac(file, val, acv)
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/Mruby2CBridgePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/Mruby2CBridgePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/Mruby2CBridgePlugin.rb	(revision 389)
@@ -5,47 +5,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCellPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCellPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCellPlugin.rb	(revision 389)
@@ -6,56 +6,40 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 class MrubyBridgeCellPlugin < CellPlugin
 
-  # ãã©ã°ã¤ã³å¼æ°å => Proc
+  # プラグイン引数名 => Proc
   MrubyBridgePluginArgProc = { 
       "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
@@ -75,7 +59,7 @@
 
   #=== CellPlugin# initialize
-  #cell::     Cell        ã»ã«ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
-  # ãã®ã¡ã½ããã¯ãã»ã«ã®æ§æè§£æãçµãã£ãã¨ããã§å¼ã³åºããã
-  # ãã®æ®µéã§ã¯æå³è§£æãçµãã£ã¦ããªã
+  #cell::     Cell        セル（インスタンス）
+  # このメソッドは、セルの構文解析が終わったところで呼び出される
+  # この段階では意味解析が終わっていない
   def initialize( cell, option )
     dbgPrint "  #{self.class.name}: initialzie=#{cell.get_name} option=#{option}\n"
@@ -91,5 +75,5 @@
 
     @plugin_arg_str = CDLString.remove_dquote option
-    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # åå¾ã® "" ãåãé¤ã
+    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
     @plugin_arg_list = {}
@@ -104,6 +88,5 @@
     port_list = ct.get_port_list
     if @exclude_port.length > 0 then
-      # ãã®å®è£
-ã§ã¯ãå­å¨ããªã port ãæå®ããã¦ããã§ãã¯ã§ããªã
+      # この実装では、存在しない port を指定されてもチェックできない
       # print "MRBBridgeCellPlugin: exclude list\n"
       port_list.each{ |port|
@@ -193,6 +176,6 @@
   end
 
-  #=== å¾ãã® CDL ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File: 
   def self.gen_post_code( file )
@@ -210,5 +193,5 @@
 
   def self.gen_post_code_body file
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
     dbgPrint "#{self.name}: gen_post_code_body\n"
@@ -216,5 +199,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° ignoreUnsigned
+  #=== プラグイン引数 ignoreUnsigned
   def set_ignoreUnsigned rhs
     if rhs == "true" || rhs == nil then
@@ -223,5 +206,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° exclude_port
+  #=== プラグイン引数 exclude_port
   def set_exclude_port rhs
     ports = rhs.split ','
@@ -239,5 +222,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° exclude_port_func
+  #=== プラグイン引数 exclude_port_func
   def set_exclude_port_func rhs
     port_funcs = rhs.split ','
@@ -269,5 +252,5 @@
     }
   end
-  #=== ãã©ã°ã¤ã³å¼æ° auto_exclude
+  #=== プラグイン引数 auto_exclude
   def set_auto_exclude rhs
     # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCelltypePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCelltypePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCelltypePlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -67,9 +52,8 @@
 
 #
-##== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+##== celltype プラグインの共通の親クラス
 #class MrubyBridgeCelltypePlugin < CelltypePlugin
 #
-#  # ãã©ã°ã¤ã³å¼æ°å => Proc
+#  # プラグイン引数名 => Proc
 #  MrubyBridgePluginArgProc = { 
 #      "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
@@ -85,5 +69,5 @@
 #  @@count = 1
 #
-#  #celltype::     Celltype        ã»ã«ã¿ã¤ãï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+#  #celltype::     Celltype        セルタイプ（インスタンス）
 #  def initialize( celltype, option )
 #    dbgPrint "#{self.class.name}: initialzie: #{celltype.get_name}\n"
@@ -107,15 +91,15 @@
 #  end
 #
-#  #=== æ°ããã»ã«
-#  #cell::        Cell            ã»ã«
+#  #=== 新しいセル
+#  #cell::        Cell            セル
 #  #
-#  # celltype ãã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã»ã«ãçæããã
-#  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã«å¯¾ããæ°ããã»ã«ã®å ±å
-#  # generate æã«ããå¼ã³åºãããå ´åãããã¾ã§ã«å®ç¾©ããã cell ã«ã¤ãã¦ã¯ãinitialize ã®ã¿ã¤ãã³ã°ã§å¼ã³åºããã
+#  # celltype プラグインを指定されたセルタイプのセルが生成された
+#  # セルタイププラグインに対する新しいセルの報告
+#  # generate 文により呼び出された場合、それまでに定義された cell については、initialize のタイミングで呼び出される
 #  def new_cell( cell )
 #    dbgPrint "MrubyBridgeCelltypePlugin: new_cell: #{cell.get_name}\n"
 #
-#    return if @cell_list.include? cell   # ãã®è¡ã¯ãæ¬æ¥ä¸è¦ã®ã¯ã
-#    if TECSGEN.post_coded?               # post_code ä»¥éã®ã»ã«ã¯å¯¾è±¡ããå¤ã
+#    return if @cell_list.include? cell   # この行は、本来不要のはず
+#    if TECSGEN.post_coded?               # post_code 以降のセルは対象から外す
 #      cdl_info( "I9999 MrubyBridgeCelltypePlugin: $1 is excluded because cell generated after post_coded", cell.get_name )
 #      return
@@ -160,13 +144,13 @@
 #  end
 #
-#### æå³è§£ææ®µéã§å¼ã³åºãããã¡ã½ãã ###
-#  #===  CDL ãã¡ã¤ã«ã®çæ
-#  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-#  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-#  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-#  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-#  #file::        FILE       çæãããã¡ã¤ã«
+#### 意味解析段階で呼び出されるメソッド ###
+#  #===  CDL ファイルの生成
+#  #      typedef, signature, celltype, cell のコードを生成
+#  #      重複して生成してはならない
+#  #      すでに生成されている場合は出力しないこと。
+#  #      もしくは同名の import により、重複を避けること。
+#  #file::        FILE       生成するファイル
 #  def gen_cdl_file file
-##   ãã®æ®µéã§å¼ã³ã ãã¨ generate æãå¼ã³åºãããåã®ã»ã«ã®ã¿ã®åºåã¨ãªã
+##   この段階で呼びだすと generate 文が呼び出される前のセルのみの出力となる
 #    
 ##    dbgPrint "MrubyBridgeCelltypePlugin: gen_cdl_file: #{@celltype.get_name}\n"
@@ -189,8 +173,7 @@
 #  end
 #
-#  #=== tCelltype_factory.h ã«æ¿å
-¥ããã³ã¼ããçæãã
-#  # file ä»¥å¤ã®ä»ã®ãã¡ã¤ã«ã«ãã¡ã¯ããªã³ã¼ããçæãã¦ããã
-#  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã¿å¼ã³åºããã
+#  #=== tCelltype_factory.h に挿入するコードを生成する
+#  # file 以外の他のファイルにファクトリコードを生成してもよい
+#  # セルタイププラグインが指定されたセルタイプのみ呼び出される
 #  def gen_factory file
 #  end
@@ -200,16 +183,16 @@
 #  end
 #
-#  #=== å¾ãã® CDL ã³ã¼ããçæ
-#  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+#  #=== 後ろの CDL コードを生成
+#  #プラグインの後ろの CDL コードを生成
 #  #file:: File: 
 #  def self.gen_post_code( file )
 #    dbgPrint "#{self.name}: gen_post_code_body\n"
 #    print "#{self.name}: gen_post_code_body\n"
-##    ãã®æ®µéã§çæããã¨ãåããã¹ãã³ã¼ãã§åºåããã mruby ã®åæåã³ã¼ãã«åæ ãããªã
+##    この段階で生成すると、同じポストコードで出力される mruby の初期化コードに反映されない
 #    
-##    # MrubyBridgeCelltypePlugin ã®çæãã generate æã¯ã
+##    # MrubyBridgeCelltypePlugin の生成する generate 文は、
 ##    fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_post.cdl"
 ##    f2 = File.open( fn2, "w" )
-##    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+##    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
 ##    dbgPrint "MrubyBridgeCelltypePlugin: gen_post_code\n"
 ##    f2.print "/* '#{self.name}' post code */\n"
@@ -229,7 +212,7 @@
 #  end
 #
-#  #=== ãã©ã°ã¤ã³å¼æ° 
-#
-#  #=== ãã©ã°ã¤ã³å¼æ° ignoreUnsigned
+#  #=== プラグイン引数 
+#
+#  #=== プラグイン引数 ignoreUnsigned
 #  def set_ignoreUnsigned rhs
 #    if rhs == "true" || rhs == nil then
@@ -266,5 +249,5 @@
 #  end
 #
-#  #=== ãã©ã°ã¤ã³å¼æ° exclude_port_func
+#  #=== プラグイン引数 exclude_port_func
 #  def set_exclude_port_func rhs
 #    port_funcs = rhs.split ','
@@ -297,5 +280,5 @@
 #  end
 #
-#  #=== ãã©ã°ã¤ã³å¼æ° auto_exclude
+#  #=== プラグイン引数 auto_exclude
 #  def set_auto_exclude rhs
 #    # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCompositePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCompositePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeCompositePlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgePlugin.rb	(revision 389)
@@ -5,56 +5,40 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #
 
-#== MrubyBridgePlugin ã¯ã©ã¹
+#== MrubyBridgePlugin クラス
 class MrubyBridgePlugin < MultiPlugin
   def self.get_plugin superClass
-    # case when (ã¤ã¾ãã¯ ===) ã§ã¯ãæå¾
-ããããã«ä¸è´ããªãæ¨¡æ§
+    # case when (つまりは ===) では、期待したように一致しない模様
     if superClass == SignaturePlugin then
       dbgPrint "MrubyBridgePlugin: SignaturePlugin"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MrubyBridgeSignaturePlugin.rb	(revision 389)
@@ -5,47 +5,32 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -53,34 +38,34 @@
 
 # Todo:
-# çæãããã®
+# 生成するもの
 #  gen_cdl_file
-#    ããªãã¸åæåã»ã«ã¿ã¤ã (ã·ã°ããã£ãã¨)
-#       @@init_celltypes ã«è¨é²
-#    ããªãã¸ã»ã«ã¿ã¤ã (ã·ã°ããã£ãã¨)
-#       @@celltypes ã«è¨é²
-#    æ§é ä½ã»ã«ã¿ã¤ã
-#       @@struct_list ã«è¨é²
+#    ブリッジ初期化セルタイプ (シグニチャごと)
+#       @@init_celltypes に記録
+#    ブリッジセルタイプ (シグニチャごと)
+#       @@celltypes に記録
+#    構造体セルタイプ
+#       @@struct_list に記録
 #  new_cell
-#    TECS åæåã»ã«(ãã­ãã¿ã¤ãå®£è¨)
-#       @@VM_init_cells ã«è¨é²
-#       @@VM_struct_list ã«è¨é²
-#       @@VM_ptr_list ã«è¨é²
+#    TECS 初期化セル(プロトタイプ宣言)
+#       @@VM_init_cells に記録
+#       @@VM_struct_list に記録
+#       @@VM_ptr_list に記録
 #  gen_post_code
-#    æ§é ä½åæåã»ã«
-#    ãã¤ã³ã¿åæåã»ã«
-#    TECS åæåã»ã«
+#    構造体初期化セル
+#    ポインタ初期化セル
+#    TECS 初期化セル
 #
-#   ep_func ã®ä½æ
-#     signature, ãã¤ã³ã¿ãæ§é ä½ â¦ åæååãå£ï¼mruby VM ã¸ã®ç»é²
-#     ãã¤ã³ã¿
-#   preamble ã®ä½æ
-#     ãã¤ã³ã¿ãæ§é ä½ â¦ ã¢ã¯ã»ã¹ç¨ã³ã¼ãã®çæ
-#     signature â¦ ããªãã¸é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨
-#   postamble ã®ä½æ
-#     signature â¦ ããªãã¸é¢æ°ã®å®ç¾©
+#   ep_func の作成
+#     signature, ポインタ、構造体 … 初期化受け口＝mruby VM への登録
+#     ポインタ
+#   preamble の作成
+#     ポインタ、構造体 … アクセス用コードの生成
+#     signature … ブリッジ関数のプロトタイプ宣言
+#   postamble の作成
+#     signature … ブリッジ関数の定義
 
 class MrubyBridgeSignaturePlugin < SignaturePlugin
 
-  # ãã©ã°ã¤ã³å¼æ°å => Proc
+  # プラグイン引数名 => Proc
   MrubyBridgePluginArgProc = { 
       "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
@@ -92,15 +77,12 @@
   @@b_no_banner = false         #
   @@b_gen_post_code_by_dependent = false  # true if gen_post_code is called by MrubyBridgeCellPlugin
-  @@celltypes = { }             # {celltype_name => [ BridgePlugin ã®ã¤ã³ã¹ã¿ã³ã¹ã®é
-å }
-  @@init_celltypes = { }        # {celltype_name => [ BridgePlugin ã®ã¤ã³ã¹ã¿ã³ã¹ã®é
-å }
+  @@celltypes = { }             # {celltype_name => [ BridgePlugin のインスタンスの配列 }
+  @@init_celltypes = { }        # {celltype_name => [ BridgePlugin のインスタンスの配列 }
   @@struct_list = { }           # {struct_name=>StructType}
-  @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP ã®å¯¾å¿ãããã®}
+  @@ptr_list = { }              # {ptr_celltype_name=> @@TYPE_MAP の対応するもの}
   @@VM_list = { }               # VM_name => true
-  @@VM_celltypes = {  }             # VM_name => { @celltype_name => ã»ã«ã®é
-å }
+  @@VM_celltypes = {  }             # VM_name => { @celltype_name => セルの配列 }
   @@VM_struct_list = { }           # {name=>StructType}
-  @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP ã®å¯¾å¿ãããã®} }
+  @@VM_ptr_list = { }              # { VM_name => {name=> @@TYPE_MAP の対応するもの} }
   @@TYPE_MAP = {           # type_str   class             GET_SET
     :char_t            => [:char_t,    "Char",     :Char,  :INT   ],
@@ -119,5 +101,5 @@
 
     :int               => [:int,       "Int",      :Int,  :INT   ], 
-    :char              => [:char,      "Char",     :Char, :INT   ],    # char ã¯ char_t ã¨ãã¦æ±ã
+    :char              => [:char,      "Char",     :Char, :INT   ],    # char は char_t として扱う
     :short             => [:short,     "Short",    :Int,  :INT   ],
     :long              => [:long,      "Long",     :Int,  :INT   ],
@@ -141,7 +123,7 @@
   # included  or excluded functions
 
-  ### ã­ã¼ããããæç¹ã§å®è¡ããã ###
-
-  # -I ã« $(TECSPATH)/mruby ãè¿½å 
+  ### ロードされた時点で実行される ###
+
+  # -I に $(TECSPATH)/mruby を追加
   # TECSGEN::Makefile.add_obj "$(MRUBY_MAIN_OBJ)"
   TECSGEN::Makefile.add_ldflag "-lmruby -L$(MRUBYPATH)/lib -lm"
@@ -150,6 +132,6 @@
   # TECSGEN::Makefile.add_var "MRUBY_MAIN_OBJ", "$(_TECS_OBJ_DIR)tecs_mruby.o", "CHANGE this if your have your main"
 
-  #=== ãã©ã°ã¤ã³ã¤ã³ã¹ã¿ã³ã¹ã®åæå
-  # æ»ãå¤ãå¼æ°ã®åãä½¿ç¨å¯è½ãªãã®ããã§ãã¯ãã
+  #=== プラグインインスタンスの初期化
+  # 戻り値、引数の型が使用可能なものかチェックする
   #
   def initialize( signature, option )
@@ -184,5 +166,5 @@
 
     if signature.get_function_head_array == nil then
-      return   # ä»¥åã«ææ³ã¨ã©ã¼çºç
+      return   # 以前に文法エラー発生
     end
 
@@ -281,8 +263,6 @@
         when FloatType
         when PtrType
-          ttype_org = type_org.get_type       # ãã¤ã³ã¿ã®æãã¦ããå
-ã®å
-          ttype = ttype_org.get_original_type # ä¸è¨ã® typedef ããã¦ããå ´åãå
-ã®å
+          ttype_org = type_org.get_type       # ポインタの指している先の型
+          ttype = ttype_org.get_original_type # 上記の typedef されている場合、元の型
           register_ptr_type ttype_org, fh
 
@@ -340,5 +320,5 @@
   end
 
-  #=== æ§é ä½ã®ã¡ã³ãã¼ã®åã®ãã§ãã¯
+  #=== 構造体のメンバーの型のチェック
   def check_struct_member struct_type, fh
     #p "tag name:#{struct_type.get_name}"
@@ -349,5 +329,5 @@
         cdl_info( "MRI9999 tagless-struct cannot be handled, $1 automatcally excluded", fh.get_name )
         @auto_exclude_list[ fh.get_name ] = fh
-        return  # ç»é²ããªãããã«æã¡åã
+        return  # 登録しないように打ち切る
       else
         cdl_error( "MRB10007 tagless-struct cannot be handled")
@@ -363,5 +343,5 @@
                     d.get_name, d.get_type.get_type_str + d.get_type.get_type_str_post, fh.get_name )
           @auto_exclude_list[ fh.get_name ] = fh
-          return  # ç»é²ããªãããã«æã¡åã
+          return  # 登録しないように打ち切る
         else
           cdl_error( "MRB1006 $1: type $2 not allowed for struct member", d.get_name, d.get_type.get_type_str + d.get_type.get_type_str_post )
@@ -400,20 +380,20 @@
       return
     end
-    tstr = ttype.get_type_str.sub( /const /, "" )    # const ã¯ç¡è¦
-    tstr = tstr.sub( /volatile /, "" )               # volatile ãç¡è¦
+    tstr = ttype.get_type_str.sub( /const /, "" )    # const は無視
+    tstr = tstr.sub( /volatile /, "" )               # volatile も無視
     if @b_ignoreUnsigned then
-      tstr = tstr.sub( /unsigned /, "" )             # volatile ãç¡è¦
-      tstr = tstr.sub( /uint/, "int" )               # volatile ãç¡è¦
-      tstr = tstr.sub( /[cs]char/, "char" )          # volatile ãç¡è¦
+      tstr = tstr.sub( /unsigned /, "" )             # volatile も無視
+      tstr = tstr.sub( /uint/, "int" )               # volatile も無視
+      tstr = tstr.sub( /[cs]char/, "char" )          # volatile も無視
     end
     return @@TYPE_MAP[ tstr.to_sym ]
   end
 
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã³ã¼ããçæ
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell コードを生成
+  #file::        FILE       生成するファイル
   def gen_cdl_file(file)
 
-    # ããªãã¸ã»ã«ã¿ã¤ãã®çæ
+    # ブリッジセルタイプの生成
     if @@celltypes[ @celltype_name ] == nil then
       @@celltypes[ @celltype_name ] = [ self ]
@@ -458,5 +438,5 @@
 EOT
 
-      # æ§é ä½ã»ã«ã¿ã¤ãã®çæ
+      # 構造体セルタイプの生成
       @struct_list.each{ |name, sttype|
         if @@struct_list[ name ] == nil then
@@ -479,6 +459,6 @@
   end
 
-  #=== gen_cdl_file ã§å®ç¾©ããã»ã«ã¿ã¤ãã« æ°ããã»ã«ãå®ç¾©ããã
-  # cell ã®ã»ã«ã¿ã¤ãã®ååã¯ @celltype_name
+  #=== gen_cdl_file で定義したセルタイプに 新しいセルが定義された
+  # cell のセルタイプの名前は @celltype_name
   def new_cell cell
     if cell.get_celltype.get_name != @celltype_name then
@@ -499,5 +479,5 @@
       file = CFile.open( initializer_celltype_cdl, "w" )
 
-      # TECS åæåã»ã«(ãã­ãã¿ã¤ãå®£è¨)
+      # TECS 初期化セル(プロトタイプ宣言)
       print_msg "  MrubyBridgePlugin: join your VM's cInitialize to #{vm_name}_TECSInitializer.eInitialize\n"
 
@@ -544,6 +524,6 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã CDL ã® POST ã³ã¼ããçæ
-  # tmp_plugin_post_code.cdl ã¸ã®åºå
+  #=== プラグインが CDL の POST コードを生成
+  # tmp_plugin_post_code.cdl への出力
   def self.gen_post_code file
     dbgPrint "#{self.name}: gen_post_code\n"
@@ -580,5 +560,5 @@
 # EOT
 
-# gen_post_code ã§çæãã celltype ã¯ gen_ep_func ãå¼ã³åºãããªã #847
+# gen_post_code で生成した celltype は gen_ep_func が呼び出されない #847
 #    @@struct_list.each{ |name,sttype|
 #      file.print <<EOT
@@ -649,8 +629,8 @@
   end
 
-  ####### ä»¥ä¸ã³ã¼ãçææ®µé ######
-
-  #===  åãå£é¢æ°ã®æ¬ä½ã³ã¼ããçæï¼é ­é¨ã¨æ«å°¾ã¯å¥éåºåï¼
-  #ct_name:: Symbol    (ãã©ã°ã¤ã³ã§çæããã) ã»ã«ã¿ã¤ãå ï¼Symbol ã¨ãã¦éããã¦ãã
+  ####### 以下コード生成段階 ######
+
+  #===  受け口関数の本体コードを生成（頭部と末尾は別途出力）
+  #ct_name:: Symbol    (プラグインで生成された) セルタイプ名 ．Symbol として送られてくる
   def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
     if @@celltypes[ ct_name ] then
@@ -756,9 +736,7 @@
   end
 
-  #===  åãå£é¢æ°ã® preamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã preamble é¨ã«åºåãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の preamble (C言語)を生成する
+  #     必要なら preamble 部に出力する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -805,6 +783,6 @@
 
   def gen_preamble_instance( file, b_singleton, ct_name, global_ct_name )
-    # ã#1005  MrubyBridgePlugin-test ã®ãã«ãã«å¤±æãã«ã¦è¿½å 
-    # ã#1004 idx_is_id ã true ã®å ´å(domain ã®å ´åã¯æªæå®ã§ã true) ã® CBP ã®ãã­ãã¿ã¤ãå®£è¨ãã«ã¦ä¸è¦ã«ãªãè¦è¾¼ã¿
+    # 「#1005  MrubyBridgePlugin-test のビルドに失敗」にて追加
+    # 「#1004 idx_is_id が true の場合(domain の場合は未指定でも true) の CBP のプロトタイプ宣言」にて不要になる見込み
     nsp = NamespacePath.new( :nMruby, true )
     nsp.append! ct_name
@@ -1250,11 +1228,10 @@
     if( param.get_size ) then
       sz_str = param.get_size.to_s
-    elsif param.get_string then      # mikan ã¨ãããã size_is ã¨ string ã®åææå® (äºéãã¤ã³ã¿) ã¯ãªã
+    elsif param.get_string then      # mikan とりあえず size_is と string の同時指定 (二重ポインタ) はなし
       sz_str = param.get_string.to_s
     else
       sz_str = "1"
     end
-    # unsigned åã®å ´åã«ã¯ cast ãå¿
-è¦
+    # unsigned 型の場合には cast が必要
     if ttype.get_original_type.get_type_str != param.get_type.get_type.get_type_str then
       cast_str = "(#{param.get_type.get_type_str})"
@@ -1286,5 +1263,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° ignoreUnsigned
+  #=== プラグイン引数 ignoreUnsigned
   def set_ignoreUnsigned rhs
     if rhs == "true" || rhs == nil then
@@ -1292,5 +1269,5 @@
     end
   end
-  #=== ãã©ã°ã¤ã³å¼æ° include
+  #=== プラグイン引数 include
   def set_include rhs
     funcs = rhs.split ','
@@ -1310,5 +1287,5 @@
     }
   end
-  #=== ãã©ã°ã¤ã³å¼æ° exclude
+  #=== プラグイン引数 exclude
   def set_exclude rhs
     funcs = rhs.split ','
@@ -1323,5 +1300,5 @@
     }
   end
-  #=== ãã©ã°ã¤ã³å¼æ° auto_exclude
+  #=== プラグイン引数 auto_exclude
   def set_auto_exclude rhs
     if rhs == "false" then
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MultiPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MultiPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/MultiPlugin.rb	(revision 389)
@@ -6,56 +6,40 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== MultiPlugin ã¯ã©ã¹
+#== MultiPlugin クラス
 class MultiPlugin < Node
   def self.get_plugin superClass
-    # case when (ã¤ã¾ãã¯ ===) ã§ã¯ãæå¾
-ããããã«ä¸è´ããªãæ¨¡æ§
+    # case when (つまりは ===) では、期待したように一致しない模様
     if superClass == SignaturePlugin then
       return SignaturePlugin
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/NotifierPlugin.rb	(revision 389)
@@ -11,47 +11,32 @@
 #
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
@@ -65,61 +50,48 @@
 class NotifierPlugin < CelltypePlugin
 
-	# ---------- ã¢ããã¿é¢æ°ã®çæ -------------
+	# ---------- アダプタ関数の生成 -------------
 	#
-	# siHandlerBodyã®åãå£é¢æ°ã¯ï¼ã¿ã¤ã ã¤ãã³ãéç¥ã®éç¥å
-ã¨ãã¦ç´æ¥æå®ãã
-	# ãã¨ã¯ã§ããªãï¼ã·ã°ããã£ãä¸è´ãã¦ããªããã¨ãçç±ã§ããï¼ãã®ããï¼ã¢ã
-	# ãã¿ã¨ãã¦åä½ããé¢æ°ãçæãï¼ã«ã¼ãã«ããã®å¼åºããTECSã®å¼åºãã«å¤æã§
-	# ããããã«ããå¿
-è¦ãããï¼
+	# siHandlerBodyの受け口関数は，タイムイベント通知の通知先として直接指定する
+	# ことはできない．シグネチャが一致していないことが理由である．このため，アダ
+	# プタとして動作する関数を生成し，カーネルからの呼出しをTECSの呼出しに変換で
+	# きるようにする必要がある．
 	#
-	# åºæ¬çã«ã¯ï¼åãå£æ¯ã«ã¢ããã¿é¢æ°ãçæããã°ååã§ããï¼ãããï¼ããã§ã¯
-	# ã¡ã¢ãªæ¶è²»éãä¸å¿
-è¦ã«å¢å ãã¦ãã¾ãï¼ããã§ï¼éç¥å
-é¢æ°ã«intptr_tåã®å¼æ°
-	# ãæ¸¡ãããã¨ã«çç®ãï¼é¢æ°ã®"ä¸è¬å"ãå³ãï¼ããªãã¡åãå£ã®ããå±æ§(ãã
-	# ã§ã¯ï¼çµåå
-ã®ã»ã«ï¼æ·»å­ãªã©ãæã)ãï¼ã¢ããã¿é¢æ°ã®å¼æ°ã¨ãã¦åãåãã
-	# ããã«ãï¼1åã®ã¢ããã¿é¢æ°ã2åä»¥ä¸ã®çµåã«å¯¾ãç¨ãããã¨ãã§ããããã«
-	# ããï¼
+	# 基本的には，受け口毎にアダプタ関数を生成すれば十分である．しかし，これでは
+	# メモリ消費量が不必要に増加してしまう．そこで，通知先関数にintptr_t型の引数
+	# を渡せることに着目し，関数の"一般化"を図る．すなわち受け口のある属性(ここ
+	# では，結合先のセル，添字などを指す)を，アダプタ関数の引数として受け取れる
+	# ようにし，1個のアダプタ関数を2個以上の結合に対し用いることができるように
+	# する．
 	#
-	# ã¢ããã¿é¢æ°ã®å±æ§ã«ã¤ãã¦æ´çããã¨ï¼
-	#  - åãå£é¢æ° - ä¸è¬åãè¡ãã¨ï¼å®è¡æã³ã¹ããå¤§ããå¢å¤§ãã¦ãã¾ããã¨ã
-	#    ç¢ºèªããã¦ããï¼ãã®ããï¼ä¸è¬åã¯è¡ããªãï¼EntryPropertyã«ãå«ããªãï¼
-	#  - ã»ã«ã¤ã³ããã¯ã¹ - CELLIDXåã§ï¼åã®è¦å®ã¯ãªããï¼"ããã¤ã³ã¿å¤ã¦ããã£ãã
-	#    æ´æ°å¤ã¦ããã£ããããã" (TECS 5.3.6) ããï¼ã¤ã³ããã¯ã¹ããã¤ã³ã¿ãã
-	#    ãã¨ãåããï¼ã¤ã³ããã¯ã¹ã ã¨ããã¨ï¼ãã®å¤ã¯ã»ã«CBã®ã¢ãã¬ãã·ã³ã°ã«
-	#    ä½¿ç¨ãããã®ã§ï¼intptr_tã«åã¾ãç­ã§ããï¼ãã¤ã³ã¿ã®å ´åï¼å½ç¶intptr_t
-	#    ã«åã¾ãï¼
-	#  - åãå£é
-åã®æ·»å­ - int_tï¼åæ§ã«intptr_tã«åã¾ãç­ã§ããï¼
-	# ãããã®ãã¡ï¼ã»ã«ã¤ã³ããã¯ã¹ã¨åãå£é
-åã®æ·»å­ã¯ãã©ã¡ã¼ã¿ã«å«ãããã¨ã
-	# ã§ãããã§ãããï¼ä¸¡æ¹ã¯ç¡çã§ããï¼
-	# ä¸¡æ¹ãæ ¼ç´ããé
-åãçæãï¼ãã®é
-åã®è¦ç´ ã¸ã®ãã¤ã³ã¿ãæ¸¡ãããã«ããã¨ã
-	# ãé¸æè¢ãå¯è½ã§ãããï¼å®è¡éåº¦ãåªå
-ããããã«ï¼ãã®æ¹æ³ã¯ã¨ããªãã£ãï¼
+	# アダプタ関数の属性について整理すると，
+	#  - 受け口関数 - 一般化を行うと，実行時コストが大きく増大してしまうことが
+	#    確認されている．このため，一般化は行わない．EntryPropertyにも含めない．
+	#  - セルインデックス - CELLIDX型で，型の規定はないが，"ホ゜インタ値て゛あったり
+	#    整数値て゛あったりする。" (TECS 5.3.6) より，インデックスかポインタある
+	#    ことが分かる．インデックスだとすると，この値はセルCBのアドレッシングに
+	#    使用されるので，intptr_tに収まる筈である．ポインタの場合，当然intptr_t
+	#    に収まる．
+	#  - 受け口配列の添字 - int_t．同様にintptr_tに収まる筈である．
+	# これらのうち，セルインデックスと受け口配列の添字はパラメータに含めることが
+	# できそうであるが，両方は無理である．
+	# 両方を格納した配列を生成し，その配列の要素へのポインタを渡すようにするとい
+	# う選択肢も可能であるが，実行速度を優先するために，この方法はとらなかった．
 	#
-	# ãã®ããï¼ä¸è¬åã¯ä»¥ä¸ã®ãã¿ã¼ã³ã«åé¡ãã¦è¡ãï¼
+	# このため，一般化は以下のパターンに分類して行う．
 	#
-	# 1. ã»ã«ã¤ã³ããã¯ã¹ã®ã¿ä¸è¬åï¼ã»ã«ã¤ã³ããã¯ã¹ã®ãã¿ã¼ã³æ°ãåãå£é
-åã®
-	#    æ·»å­ã®ãã¿ã¼ã³æ°ããå¤ããï¼ãããã¯åãå£ãé
-åã§ãªãå ´åã«è¡ãããï¼
-	# 2. åãå£é
-åã®æ·»å­ã®ã¿ä¸è¬åï¼ãã®å ´åï¼ã»ã«ãã¨ã«ç°ãªãé¢æ°ãç¨ããï¼
+	# 1. セルインデックスのみ一般化．セルインデックスのパターン数が受け口配列の
+	#    添字のパターン数より多いか，あるいは受け口が配列でない場合に行われる．
+	# 2. 受け口配列の添字のみ一般化．この場合，セルごとに異なる関数を用いる．
 	#
-	# ããããï¼ååãå£é¢æ°ã«ã¤ãã¦ï¼ã¢ããã¿é¢æ°ã®çæåæ°ã¯ï¼
-	#         O(min{ã»ã«ã¤ã³ããã¯ã¹ã®ãã¿ã¼ã³æ°, æ·»å­ã®ãã¿ã¼ã³æ°})
-	# ã¨ãªãï¼
+	# これより，各受け口関数について，アダプタ関数の生成個数は，
+	#         O(min{セルインデックスのパターン数, 添字のパターン数})
+	# となる．
 	#
-	# ãã©ã°ã¤ã³ã§ã®å¦çãã¯ã³ãã¹ã§è¡ãããã«ï¼tecsgen.cfgã§ã¯ã¢ããã¿é¢æ°ãç´
-	# æ¥æå®ããã®ã§ã¯ãªãï¼ä»£ããã«ã¢ããã¿é¢æ°ãè¡¨ããã¯ã­ãä½¿ç¨ããï¼ãã®
-	# ãã¯ã­ã¯ã¢ããã¿é¢æ°ãã³ãã«ã¨å¼ã¶ãã¨ã«ããï¼
-	# ã¢ããã¿é¢æ°ãã³ãã«ã¯ï¼æ¬¡ã®2åã®è¦ç´ ããæãï¼
-	#  - ã¢ããã¿é¢æ°ã¸ã®ã®ãã¤ã³ã¿
-	#  - ã¢ããã¿é¢æ°ã®å¼æ°
+	# プラグインでの処理をワンパスで行うために，tecsgen.cfgではアダプタ関数を直
+	# 接指定するのではなく，代わりにアダプタ関数を表すマクロを使用する．この
+	# マクロはアダプタ関数ハンドルと呼ぶことにする．
+	# アダプタ関数ハンドルは，次の2個の要素から成る．
+	#  - アダプタ関数へののポインタ
+	#  - アダプタ関数の引数
 	#
 	#   $Id$
@@ -128,18 +100,13 @@
 	class AdapterGenerator
 
-		# çµåå
-ã«é¢ããå±æ§ãå«ãï¼ã»ã«ï¼åãå£é
-åã®æ·»å­ããæãï¼
-		# åä¸ã®EntryPropertyã¨ãªãçµåã¯ï¼å
-¨ãåãæ¹æ³ã§ãã®åãå£é¢æ°ãå¼ã³
-		# åºããï¼
+		# 結合先に関する属性を含む．セル，受け口配列の添字から成る．
+		# 同一のEntryPropertyとなる結合は，全く同じ方法でその受け口関数を呼び
+		# 出せる．
 		# @private
 		class EntryProperty
-			# @return [Cell] åãå£å´ã®ã»ã«ï¼
+			# @return [Cell] 受け口側のセル．
 			attr_reader :cell
 
-			# @return [Integer, nil] åãå£é
-åã®æ·»å­ï¼é
-åã§ãªãå ´åã¯nilï¼
+			# @return [Integer, nil] 受け口配列の添字．配列でない場合はnil．
 			attr_reader :subscript
 
@@ -153,6 +120,5 @@
 			end
 
-			# åå¤æ§ã®å®ç¾©ï¼Hashã®ã­ã¼ã¨ãã¦ä½¿ç¨ããã®ã«å¿
-è¦ï¼
+			# 同値性の定義．Hashのキーとして使用するのに必要．
 			def eql?(o) @cell == o.cell && @subscript == o.subscript end
 			def hash() @cell.hash ^ @subscript.hash end
@@ -161,11 +127,10 @@
 		# @private
 		class EntryPort
-			# @param [Port] port çµåå
-ã®ã»ã«ã®ã»ã«ã¿ã¤ãã®åãå£ï¼
+			# @param [Port] port 結合先のセルのセルタイプの受け口．
 			def initialize(port, prefix)
 				@port = port
 				@global_name = "#{prefix}_#{@port.get_celltype.get_global_name}_#{@port.get_name}"
 
-				# åãå£é¢æ°åï¼siHandlerBodyãæ³å®ãã¦ããã®ã§ï¼é¢æ°åã¯mainã§åºå®ã§ããï¼
+				# 受け口関数名．siHandlerBodyを想定しているので，関数名はmainで固定である．
 				@entry_fn_name = "#{@port.get_celltype.get_global_name}_#{@port.get_name}_main"
 
@@ -174,5 +139,5 @@
 			end
 
-			# @return [String] ã°ã­ã¼ãã«ã«ä¸æ(ãªãã®ã¨ãã¦æ±ãããã)ãªè­å¥å­ï¼
+			# @return [String] グローバルに一意(なものとして扱えるよう)な識別子．
 			attr_reader :global_name
 
@@ -180,7 +145,7 @@
 			attr_reader :port
 
-			# æå®ããEntryPropertyã«å¯¾å¿ããã¢ããã¿é¢æ°ãã³ãã«ãåå¾ããï¼
+			# 指定したEntryPropertyに対応するアダプタ関数ハンドルを取得する．
 			# @param [EntryProperty] ep
-			# @return [String] ã¢ããã¿é¢æ°ãã³ãã«ï¼
+			# @return [String] アダプタ関数ハンドル．
 			# @private
 			def adapter_handle_for_entry_property(ep)
@@ -192,15 +157,12 @@
 			end
 
-			# çµåå
-ã®æ
-å ±ã«å¿ããã¢ããã¿é¢æ°ãã½ã¼ã¹ã»ãããã¼ã«åºåããï¼
-			# ä¸è¬åæå®ã¯ï¼`cell`ã¾ãã¯`subscript`ã®ä¸æ¹ã®ã¿è¡ããã¨ãã§ããï¼
+			# 結合先の情報に応じたアダプタ関数をソース・ヘッダーに出力する．
+			# 一般化指定は，`cell`または`subscript`の一方のみ行うことができる．
 			#
 			# @param [AdapterGenerator] context
-			# @param [String] fn_name é¢æ°åï¼
-			# @param [Cell, Symbol] cell ã»ã«ï¼ã»ã«ã«ã¤ãã¦ä¸è¬åããå ´åã¯ `:generic`
-			# @param [Integer, Symbol, nil] subscript æ·»å­ï¼æ·»å­ã«ã¤ãã¦ä¸è¬åããå ´åã¯ `:generic`
-			# @param [Celltype] å¼ã³å
-ã®ã»ã«ã¿ã¤ããcell==:generic ã®å ´åã®ã¿æå¹
+			# @param [String] fn_name 関数名．
+			# @param [Cell, Symbol] cell セル．セルについて一般化する場合は `:generic`
+			# @param [Integer, Symbol, nil] subscript 添字．添字について一般化する場合は `:generic`
+			# @param [Celltype] 呼び先のセルタイプ、cell==:generic の場合のみ有効
 			# @private
 			def generate_inner(context, fn_name, cell, subscript, callee_ct=nil)
@@ -213,6 +175,5 @@
 				ct = @port.get_celltype
 
-				# ã·ã³ã°ã«ãã³ã»ã«ã¿ã¤ãä»¥å¤ã§ã¯ï¼CELLIDXã®æå®ãå¿
-è¦ï¼
+				# シングルトンセルタイプ以外では，CELLIDXの指定が必要．
 				unless ct.is_singleton?
 					if cell == :generic
@@ -220,5 +181,5 @@
 						# params << "(CELLIDX)extinf"
 					else
-						# ã»ã«ã®CELLIDXãå¾ã
+						# セルのCELLIDXを得る
 						if ct.has_INIB? || ct.has_CB?
 							params << ct.get_name_array(cell)[7]
@@ -229,6 +190,5 @@
 				end
 
-				# åãå£é
-åã®æ·»å­ï¼
+				# 受け口配列の添字．
 				if @port.get_array_size
 					if subscript == :generic
@@ -248,6 +208,6 @@
 			end
 
-			# æå®ããJoinã«å¯¾å¿ããã¢ããã¿é¢æ°ãã³ãã«ãåå¾ããï¼
-			# @return [Array] ã¢ããã¿é¢æ°ãã³ãã«ï¼
+			# 指定したJoinに対応するアダプタ関数ハンドルを取得する．
+			# @return [Array] アダプタ関数ハンドル．
 			def make_adapter_handle(join)
 				prop = EntryProperty.from_join(join)
@@ -259,5 +219,5 @@
 			end
 
-			# ã½ã¼ã¹ã»ãããã¼ã®è¨è¿°ãçæããï¼
+			# ソース・ヘッダーの記述を生成する．
 			# @param [AdapterGenerator] context
 			def generate(context)
@@ -273,18 +233,17 @@
 				no_cellidx = false
 				if !(ct.has_INIB? || ct.has_CB?)
-					# CB, INIBæé©åã«ããï¼CB, INIBãä¸¡æ¹ä¸è¦ã«ãªã£ãã±ã¼ã¹ï¼
-					# CELLIDXãä¸è¦ã§ããã®ã§ï¼ã»ã«ã«ã¤ãã¦ä¸è¬åãã¦ãæå³
-					# ã¯ãªãã®ã§ï¼æ·»å­ã«ããä¸è¬åãé¸æããï¼
+					# CB, INIB最適化により，CB, INIBが両方不要になったケース．
+					# CELLIDXが不要であるので，セルについて一般化しても意味
+					# はないので，添字による一般化を選択する．
 					generalize_by_cell_idx = false
 					no_cellidx = true
 
-					# å
-¨ã¦ã®ã»ã«ãåä¸è¦ããï¼
+					# 全てのセルを同一視する．
 					cells = { @props[0].cell => @props }
 
 					header_file.print " * No INIB & CB: generalized by subscript\n"
 				elsif @port.get_array_size
-					# ä¸è¬åãã¿ã¼ã³ã®åé¡ãè¡ãããã«ï¼åãå£å´ã»ã«ãæ·»å­ã®
-					# ãã¿ã¼ã³æ°ãåæãã¦ï¼æé©ãªæ¹ãé¸æããï¼
+					# 一般化パターンの分類を行うために，受け口側セルや添字の
+					# パターン数を分析して，最適な方を選択する．
 					generalize_by_cell_idx = cells.length >= subscripts.length
 					if generalize_by_cell_idx
@@ -294,5 +253,5 @@
 					end
 				else
-					# å¸¸ã«CELLIDXã§ä¸è¬å
+					# 常にCELLIDXで一般化
 					generalize_by_cell_idx = true
 					header_file.print " * non-array entry port: generalized by cell\n"
@@ -302,11 +261,10 @@
 
 				if generalize_by_cell_idx
-					# CELLIDXã«ã¤ãã¦ä¸è¬å
+					# CELLIDXについて一般化
 					subscripts.each { |subscript, props|
 						if subscript
 							fn_name = "#{@global_name}_adap_#{subscript}"
 						else
-							# åãå£é
-åã§ãªãå ´å
+							# 受け口配列でない場合
 							fn_name = "#{@global_name}_adap"
 						end
@@ -318,5 +276,5 @@
 							handle = adapter_handle_for_entry_property(prop)
 
-							# ã»ã«ã®CELLIDXãå¾ã
+							# セルのCELLIDXを得る
 							if ct.has_INIB? || ct.has_CB?
 								idx = ct.get_name_array(prop.cell)[7]
@@ -329,8 +287,8 @@
 					}
 				else
-					# æ·»å­ã«ã¤ãã¦ä¸è¬å
+					# 添字について一般化
 					cells.each { |cell, props|
 						if no_cellidx
-							# CB/INIB ãªã
+							# CB/INIB なし
 							fn_name = "#{@global_name}_adap"
 						else
@@ -358,6 +316,6 @@
 		attr :header_file
 
-		# @param [String] celltype_name ãã³ãã©é¢æ°ã®ã»ã«ã¿ã¤ãï¼
-		# @param [String] prefix ååè¡çªãé²ãããã®ãã¬ãã£ãã¯ã¹ï¼
+		# @param [String] celltype_name ハンドラ関数のセルタイプ．
+		# @param [String] prefix 名前衝突を防ぐためのプレフィックス．
 		def initialize(celltype_name, prefix)
 			@celltype_name = celltype_name
@@ -369,6 +327,6 @@
 
 		# ===AdapterGenerator#make_adapter_handle===
-		# æå®ããçµåã®å¼åºããè¡ãããã®ã¢ããã¿é¢æ°ãã³ãã«ãçæããï¼
-		# @return [Array] ã¢ããã¿é¢æ°ãã³ãã«ï¼
+		# 指定した結合の呼出しを行うためのアダプタ関数ハンドルを生成する．
+		# @return [Array] アダプタ関数ハンドル．
 		def make_adapter_handle(join)
 			entry_port = @entry_ports[join.get_rhs_port]
@@ -382,5 +340,5 @@
 
 		# ===AdapterGenerator#finish===
-		# ååãå£ã«å¯¾ãï¼ã¢ããã¿é¢æ°ãçæããï¼
+		# 各受け口に対し，アダプタ関数を生成する．
 		def finish
 			@source_file = AppFile.open( "#{$gen}/#{@celltype_name}.c" )
@@ -392,9 +350,9 @@
 	        @header_file.print "\n/* Generated by #{self.class.name} */\n\n"
 
-			# NotifierPluginãä½¿ç¨ããã»ã«ã¿ã¤ããè¤æ°ããå ´åï¼ããããã«
-			# å¯¾ãAdapterGenerator#finishãå¼ã³åºãããï¼tTimeEventHandler.hã«
-			# ç¶ãã¦æ¸ãè¾¼ãã§ãã¾ãã¨ï¼ãããã¼ã¬ã¼ãã®é¢ä¿ã§2åç®ä»¥éã®è¨è¿°
-			# ãèª­ã¿è¾¼ã¾ããªããªã£ã¦ãã¾ãï¼ãã®ããï¼ãã¡ã¤ã«å + ã»ã«ã¿ã¤ãå
-			# ã¨ããå°ãç¹æ®ãªãããã¼ã¬ã¼ããç¨ããï¼
+			# NotifierPluginを使用するセルタイプが複数ある場合，それぞれに
+			# 対しAdapterGenerator#finishが呼び出される．tTimeEventHandler.hに
+			# 続けて書き込んでしまうと，ヘッダーガードの関係で2回目以降の記述
+			# が読み込まれなくなってしまう．このため，ファイル名 + セルタイプ名
+			# という少し特殊なヘッダーガードを用いる．
 			header_guard = "#{@celltype_name}_H_#{@prefix}"
 
@@ -402,16 +360,12 @@
 	        @header_file.print "\#define #{header_guard}\n\n"
 
-	        # ã«ã¼ãã«ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ãå®è¡ããéï¼ãã³ãã©åãå£ã®ã»ã«ã¿ã¤ã
-	        # ã®ã»ã«CBã®å®ç¾©ãå¿
-è¦ãªå ´åãããï¼
+	        # カーネルコンフィギュレータを実行する際，ハンドラ受け口のセルタイプ
+	        # のセルCBの定義が必要な場合がある．
 	        @header_file.print "\#include \"#{@celltype_name}_aux.h\"\n\n"
 
-			# çµåå
-ã®ã»ã«ã¿ã¤ãã®å®ç¾©ã¯ï¼èªåã®ã»ã«ã®tecsgen.hãããå
-ã«
-			# èª­ã¿è¾¼ã¾ãªããã°ãªããªããï¼ãã®ãã©ã°ã¤ã³ãè¤æ°å®è¡ãããã¨ï¼
-			# é åºãå´©ãã¦ãã¾ãï¼ããã§ï¼çµåå
-ã®ã»ã«ã¿ã¤ãã®å®ç¾©ã¯ããä¸ã¤ã®
-			# ãããã¼ãã¡ã¤ã«(tCelltypeName_aux.h)ããèª­ã¿è¾¼ãããã«ããï¼
+			# 結合先のセルタイプの定義は，自分のセルのtecsgen.hよりも先に
+			# 読み込まなければならないが，このプラグインが複数実行されると，
+			# 順序が崩れてしまう．そこで，結合先のセルタイプの定義はもう一つの
+			# ヘッダーファイル(tCelltypeName_aux.h)から読み込むようにする．
 			aux_header_file = AppFile.open( "#{$gen}/#{@celltype_name}_aux.h" )
 	        aux_header_file.print "\n/* Generated by #{self.class.name} */\n\n"
@@ -424,6 +378,5 @@
 			cb_type_only_guard = "#{@celltype_name}_AUX_H_#{@prefix}_CB_TYPE_ONLY"
 
-			# çµåå
-ã®ã»ã«ã¿ã¤ãã®å®ç¾©ãèª­ã¿è¾¼ã
+			# 結合先のセルタイプの定義を読み込む
 			aux_header_file.print "#ifndef TOPPERS_CB_TYPE_ONLY\n"
 		    aux_header_file.print "#define TOPPERS_CB_TYPE_ONLY\n"
@@ -456,5 +409,5 @@
 	end
 
-	# ------ éç¥ã®ãã³ãã©ã®ç¨®é¡ã®å®ç¾© -------
+	# ------ 通知のハンドラの種類の定義 -------
 
 	class Handler
@@ -466,8 +419,8 @@
 	end
 
-	# éå¸¸ã®ãã³ãã©
+	# 通常のハンドラ
 	EVENT_HANDLER = Handler::new("ciNotificationHandler")
 
-	# ã¨ã©ã¼ãã³ãã© (éå¸¸ã®ãã³ãã©ãå¤±æããå ´åã«å¼ã³åºããã)
+	# エラーハンドラ (通常のハンドラが失敗した場合に呼び出される)
 	ERROR_HANDLER = Handler::new("ciErrorNotificationHandler")
 
@@ -492,9 +445,8 @@
 	end
 
-	# ------ éç¥ã®å±æ§ã®å®ç¾© -------
+	# ------ 通知の属性の定義 -------
 	#
-	# ãã³ãã©ã¿ã¤ãã«åè´ããªãå±æ§ãæå®ãããå ´åã«
-	# ã¨ã©ã¼ãåºåã§ãããããå
-¨ã¦ã®å±æ§ãããã§åæããã
+	# ハンドラタイプに合致しない属性が指定された場合に
+	# エラーを出力できるよう、全ての属性をここで列挙する。
 
 	SETVAR_ADDR_ATTR =   HandlerAttribute::new("setVariableAddress")
@@ -512,5 +464,5 @@
 	]
 
-	# ------ ãã³ãã©ã¿ã¤ãã®å®ç¾© -------
+	# ------ ハンドラタイプの定義 -------
 
 	class BaseHandlerType
@@ -526,9 +478,8 @@
 
 	    #=== NotifierPlugin#BaseHandlerType#validate_join
-	    # æå®ããã»ã«ã®çµåå
-ãããã®ãã³ãã©ã¿ã¤ãã«è©²å½ããããæ¤è¨¼
-	    # handler:: Handler : ãã³ãã©
-	    # cell:: Cell : ã»ã«
-	    # join:: Join : çµå (declarationãPortã§ãããã®)
+	    # 指定したセルの結合先が、このハンドラタイプに該当するかを検証
+	    # handler:: Handler : ハンドラ
+	    # cell:: Cell : セル
+	    # join:: Join : 結合 (declarationがPortであるもの)
 		def validate_join(handler, cell, join)
         return !generate_attr_map(handler, cell).nil?
@@ -536,11 +487,11 @@
 
 	    #=== NotifierPlugin#BaseHandlerType#generate_attr_map
-	    # æå®ããã»ã«ã®å±æ§ã¨ãæ¢ç¥ã®HandlerAttributeã®ãããã³ã°ã
-	    # çæããHash<HandlerAttribute, Join> (åå±æ§ã¨ããã«å¯¾å¿ãã
-	    # Join(declarationãDeclã®ãã®)ãè¡¨ãHash)ããããã¯ã
-		# ãããã³ã°ãè¡ããªãå ´å(å±æ§ã®ä¸è¶³ãéå°)ã¯nilãè¿ãã
+	    # 指定したセルの属性と、既知のHandlerAttributeのマッピングを
+	    # 生成し、Hash<HandlerAttribute, Join> (各属性とそれに対応する
+	    # Join(declarationがDeclのもの)を表すHash)、あるいは、
+		# マッピングが行えない場合(属性の不足、過剰)はnilを返す。
 	    #
-	    # handler:: Handler : ãã³ãã©
-	    # cell:: Cell : ã»ã«
+	    # handler:: Handler : ハンドラ
+	    # cell:: Cell : セル
 		def generate_attr_map(handler, cell)
 			map = {}
@@ -552,20 +503,17 @@
 				join = join_list.get_item(attr_name.to_sym)
 
-				# ãã®ã»ã«ã¿ã¤ãã«ããã¦å¿
-é ã®å±æ§ã?
+				# このセルタイプにおいて必須の属性か?
 				is_required = @required_attributes.include?(known_attr)
 
-				# å±æ§ã®æå®ãä¸è¶³ãã¦ãã? or éå°?
-				# æ³¨: ãã³ãã©ã¿ã¤ãã®å¤å¥ã«ã¯ãã»ã«ã§å¤ãæå®ããã¦ããã
-				#     ãèæ
-®ããããã»ã«ã¿ã¤ãã§åæå¤ãæå®ããã¦ãã¦ãã
-				#     ããã¯ãã³ãã©ã¿ã¤ãã®æ±ºå®ã«å½±é¿ããªãã
+				# 属性の指定が不足している? or 過剰?
+				# 注: ハンドラタイプの判別には、セルで値が指定されているか
+				#     が考慮される。セルタイプで初期値が指定されていても、
+				#     それはハンドラタイプの決定に影響しない。
 				return nil if join.nil? != !is_required
 
-				# å¿
-è¦ã®ãªãå±æ§ã§ãããæå®ãããã¦ããªãã®ã§é£ã°ã
+				# 必要のない属性であり、指定もされていないので飛ばす
 				next if join.nil?
 
-				# TODO: attrã®çµåã§ãããã¨ãæ¤è¨¼
+				# TODO: attrの結合であることを検証
 
 				map[known_attr] = join
@@ -576,6 +524,6 @@
 
 	    #=== NotifierPlugin#BaseHandlerType#gen_cfg_handler_type
-	    # ã¿ã¤ã ã¤ãã³ãã®éç¥ã®ç¨®é¡ãè¡¨ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¨è¿°ãçæããStringã¾ãã¯nilãè¿ã
-	    # handler:: Handler : ãã³ãã©
+	    # タイムイベントの通知の種類を表すコンフィギュレータの記述を生成し、Stringまたはnilを返す
+	    # handler:: Handler : ハンドラ
 		def gen_cfg_handler_type(handler)
         	raise "called abstract method gen_cfg_handler_type"
@@ -583,11 +531,11 @@
 
 	    #=== NotifierPlugin#BaseHandlerType#gen_cfg_handler_parameters
-	    # ã¿ã¤ã ã¤ãã³ãã®éç¥ã®å¼æ°ãè¡¨ãã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®è¨è¿°ãçæããString[]ãè¿ã
-	    # handler:: Handler : ãã³ãã©
-	    # join:: Join : çµå (declarationãPortã§ãããã®)
+	    # タイムイベントの通知の引数を表すコンフィギュレータの記述を生成し、String[]を返す
+	    # handler:: Handler : ハンドラ
+	    # join:: Join : 結合 (declarationがPortであるもの)
 	    # attrMap:: Hash<HandlerAttribute, Join> :
-	    #     åå±æ§ã¨ããã«å¯¾å¿ããJoin (declarationãDeclã®ãã®)
-	    # cell:: Cell : ã»ã«
-		# adpt_gen:: AdapterGenerator : ã¢ããã¿é¢æ°ãçæãããªãã¸ã§ã¯ã
+	    #     各属性とそれに対応するJoin (declarationがDeclのもの)
+	    # cell:: Cell : セル
+		# adpt_gen:: AdapterGenerator : アダプタ関数を生成するオブジェクト
 		def gen_cfg_handler_parameters(handler, join, attrMap, cell, adpt_gen)
         	return nil
@@ -595,7 +543,6 @@
 
 	    #=== NotifierPlugin#BaseHandlerType#might_fail
-	    # éç¥ã®éãã¨ã©ã¼ãçºçãããã®çµæã¨ã©ã¼éç¥ãå¼ã¶å¿
-è¦ãçãã
-	    # ãã©ãããè¿ãã
+	    # 通知の際、エラーが発生し、その結果エラー通知を呼ぶ必要が生じる
+	    # かどうかを返す。
 		def might_fail
 			return false
@@ -613,12 +560,12 @@
 			id_attr = join.get_rhs_cell.get_celltype.find(:id)
 			if id_attr_join
-				# ã»ã«çææã«åæåããå ´å
+				# セル生成時に初期化する場合
 				id = id_attr_join.get_rhs.to_s
 			else
-				# ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+				# セルタイプの初期化値を使う場合
 				id = id_attr.get_initializer.to_s
 			end
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = taskCell.get_celltype.get_name_array(taskCell)
 			id = taskCell.get_celltype.subst_name(id, name_array)
@@ -673,5 +620,5 @@
 			var_value = attrMap[SETVAR_VALUE_ATTR].get_rhs.to_s
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = cell.get_celltype.get_name_array(cell)
 			var_addr = cell.get_celltype.subst_name(var_addr, name_array)
@@ -702,5 +649,5 @@
 			var_addr = attrMap[SETVAR_ADDR_ATTR].get_rhs.to_s
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = cell.get_celltype.get_name_array(cell)
 			var_addr = cell.get_celltype.subst_name(var_addr, name_array)
@@ -729,5 +676,5 @@
 			var_addr = attrMap[INCVAR_ADDR_ATTR].get_rhs.to_s
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = cell.get_celltype.get_name_array(cell)
 			var_addr = cell.get_celltype.subst_name(var_addr, name_array)
@@ -753,12 +700,12 @@
 			id_attr = join.get_rhs_cell.get_celltype.find(:id)
 			if id_attr_join
-				# ã»ã«çææã«åæåããå ´å
+				# セル生成時に初期化する場合
 				id = id_attr_join.get_rhs.to_s
 			else
-				# ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+				# セルタイプの初期化値を使う場合
 				id = id_attr.get_initializer.to_s
 			end
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = semaphoreCell.get_celltype.get_name_array(semaphoreCell)
 			id = semaphoreCell.get_celltype.subst_name(id, name_array)
@@ -793,13 +740,13 @@
 			id_attr = join.get_rhs_cell.get_celltype.find(:id)
 			if id_attr_join
-				# ã»ã«çææã«åæåããå ´å
+				# セル生成時に初期化する場合
 				id = id_attr_join.get_rhs.to_s
 			else
-				# ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+				# セルタイプの初期化値を使う場合
 				id = id_attr.get_initializer.to_s
 			end
 			flg_pattern = attrMap[SETFLG_FLAG_ATTR].get_rhs.to_s
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = eventflagCell.get_celltype.get_name_array(eventflagCell)
 			id = eventflagCell.get_celltype.subst_name(id, name_array)
@@ -834,12 +781,12 @@
 			id_attr = join.get_rhs_cell.get_celltype.find(:id)
 			if id_attr_join
-				# ã»ã«çææã«åæåããå ´å
+				# セル生成時に初期化する場合
 				id = id_attr_join.get_rhs.to_s
 			else
-				# ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+				# セルタイプの初期化値を使う場合
 				id = id_attr.get_initializer.to_s
 			end
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = dataqueueCell.get_celltype.get_name_array(dataqueueCell)
 			id = dataqueueCell.get_celltype.subst_name(id, name_array)
@@ -868,5 +815,5 @@
 			sent_value = attrMap[SNDDTQ_VALUE_ATTR].get_rhs.to_s
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			name_array = cell.get_celltype.get_name_array(cell)
 			sent_value = cell.get_celltype.subst_name(sent_value, name_array)
@@ -910,14 +857,13 @@
 		end
 		def gen_cfg_handler_parameters(handler, join, attrMap, cell, adpt_gen)
-			# tTimeEventHandlerã®çµåå
-ãåå¾
+			# tTimeEventHandlerの結合先を取得
 			handler_cell = join.get_rhs_cell
 	    	call_join = handler_cell.get_join_list.get_item(:ciHandlerBody)
 
-			# çµåããã¦ããªãå ´åã¯tecsgenãã¨ã©ã¼ãåºãã¯ããªã®ã§ããã§ã¯
-			# ã¨ã©ã¼ã«ããç¡è¦ããï¼
+			# 結合されていない場合はtecsgenがエラーを出すはずなのでここでは
+			# エラーにせず無視する．
 			return [] unless call_join
 
-			# ã¢ããã¿é¢æ°ãã³ãã«ãåå¾
+			# アダプタ関数ハンドルを取得
 			adapter_handle = adpt_gen.make_adapter_handle(call_join)
         	return [adapter_handle[1], adapter_handle[0]]
@@ -953,10 +899,10 @@
 
     #@celltype:: Celltype
-    #@option:: String     :ãªãã·ã§ã³æå­å
+    #@option:: String     :オプション文字列
     def initialize( celltype, option )
     	super
     	@plugin_arg_check_proc_tab = NotifierPluginArgProc
     	@plugin_arg_str = option
-    	@plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # åå¾ã® "" ãåãé¤ã
+    	@plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     	@plugin_arg_str.sub!( /(.*)"\z/, '\1' )
     	@factory = nil
@@ -996,19 +942,18 @@
         kernelCfg.print "\#include \"tTimeEventHandler.h\"\n"
 
-		# ã¢ããã¿é¢æ°ãçæããæºå
+		# アダプタ関数を生成する準備
 		@adpt_gen = AdapterGenerator.new("tTimeEventHandler", @celltype.get_global_name)
 
-    	# å±æ§ç½®æãè¡ãããã¨ãæ¤è¨¼ããã
-    	# ããã§è¡ãã®ã¯ãfactoryã§æå®ãããå±æ§åã
-    	# å­å¨ãããã¨ãç¢ºèªããããªããã°ã¨ã©ã¼ãåºåãããã¨ã®ã¿ã§ããã
-    	# ã»ã«ãã¨ã®å¦çã®æä¸­ã«ã¨ã©ã¼ãåºåãããã¨ãå¯è½ã§ã¯ãããã
-    	# ããããã¨ã»ã«ã¿ã¤ãå´ã®åé¡ã§ããã®ã«ãããããããã»ã«ãã¨ã«
-    	# ã¨ã©ã¼ãè¡¨ç¤ºããã¦ãã¾ãã
+    	# 属性置換が行えることを検証する。
+    	# ここで行うのは、factoryで指定された属性名が
+    	# 存在することを確認し、しなければエラーを出力することのみである。
+    	# セルごとの処理の最中にエラーを出力することも可能ではあるが、
+    	# そうするとセルタイプ側の問題であるのにもかかわらず、セルごとに
+    	# エラーが表示されてしまう。
     	# {{attribute_name}} -> attribute_value
     	@factory.scan(/\{\{([a-zA-Z0-9_]*?)\}\}/) { |match|
     		name = $1.to_sym
 
-    		# {{_handler_params_}} ã¯ãã³ãã©ã«é¢ããæå®ããã©ã°ã¤ã³å
-ã§å¤ãçæããã
+    		# {{_handler_params_}} はハンドラに関する指定。プラグイン内で値が生成される
     		next if name == :_handler_params_
 
@@ -1024,5 +969,5 @@
         }
 
-		# ã¢ããã¿é¢æ°ã®çæãå®äºããã
+		# アダプタ関数の生成を完了させる
 		@adpt_gen.finish
 
@@ -1039,12 +984,12 @@
     	handler_flag = nil
 
-		# ignoreErrorsãåå¾
+		# ignoreErrorsを取得
 		ignoreErrors_attr_join = cell.get_join_list.get_item(:ignoreErrors)
 		ignoreErrors_attr = cell.get_celltype.find(:ignoreErrors)
 		if ignoreErrors_attr_join
-			# ã»ã«çææã«åæåããå ´å
+			# セル生成時に初期化する場合
 			ignoreErrors = ignoreErrors_attr_join.get_rhs.to_s
 		else
-			# ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+			# セルタイプの初期化値を使う場合
 			ignoreErrors = ignoreErrors_attr.get_initializer.to_s
 		end
@@ -1058,5 +1003,5 @@
 		end
 
-    # ãã¡ã¤ã³æå®ç¨æå­å
+    # ドメイン指定用文字列
     pre_text  = ""
     post_text = "\n"
@@ -1064,5 +1009,5 @@
  
     	[EVENT_HANDLER, ERROR_HANDLER].each { |handler|
-    		# å¼ã³å£ã®çµåãåå¾
+    		# 呼び口の結合を取得
     		call_join = cell.get_join_list.get_item(handler.call_port_name.to_sym)
         domain_root = cell.get_region.get_domain_root
@@ -1078,5 +1023,5 @@
         end
 
-	    	# ãã³ãã©ã¿ã¤ããå¤å¥ãã
+	    	# ハンドラタイプを判別する
 	    	matches = HANDLER_TYPES.select { |handler_type|
 	    		handler_type.validate_join(handler, cell, call_join)
@@ -1088,8 +1033,8 @@
         end
 
-			# æåã«è¦ã¤ãã£ãæå¹ãªãã³ãã©ã¿ã¤ããä½¿ç¨
+			# 最初に見つかった有効なハンドラタイプを使用
 	    	ht = matches[0]
 
-      # ãã¡ã¤ã³ãã©ã°ã¤ã³ãæå®ããã¦ããå ´åãæå±ãã¡ã¤ã³ã®ãã§ãã¯
+      # ドメインプラグインが指定されている場合、所属ドメインのチェック
       domain_root = cell.get_region.get_domain_root
       if domain_root.get_domain_type then
@@ -1119,5 +1064,5 @@
               end
               dbgPrint "#{self.class.name}: match pattern 2.\n"
-		        when NullHandlerType.new  # ã¨ã©ã¼éç¥ãæå®ãã¦ããªã
+		        when NullHandlerType.new  # エラー通知を指定していない
               dbgPrint "#{self.class.name}: match pattern 3.\n"
             end
@@ -1140,8 +1085,8 @@
       end
 
-			# éç¥ãã³ãã©ã§ãã¨ã©ã¼ãçºçããã¯ãããªããã®ã«ãã¨ã©ã¼ãã³ãã©ãæå®ããã¦ããã
-			# ãããã¯ãã®éã®ãã¿ã¼ã³ãæ¤åºããã
-			# (handler_flagãnilã§ããå ´åããã³ãã©ã¿ã¤ããä¸æã§ãããã¨ã©ã¼ãçºçãããä¸æ
-			#  ãªãããæ¤åºã¯è¡ããªãã)
+			# 通知ハンドラで「エラーが発生するはずがない」のに「エラーハンドラが指定されている」
+			# もしくはその逆のパターンを検出する。
+			# (handler_flagがnilである場合、ハンドラタイプが不明であり、エラーが発生するか不明
+			#  なため、検出は行わない。)
     		if handler == ERROR_HANDLER && !ht.is_a?(NullHandlerType) && !event_handler_might_fail
 	    		cdl_error2( cell.get_locale, "NTF1004 cell $1: handler type $2 which never raises an error was inferred for the normal notification handler, but an error notification handler was specified.",
@@ -1158,5 +1103,5 @@
 	    	end
 
-			# éç¥æ¹æ³ã®éçAPIè¨è¿°ãçæãã
+			# 通知方法の静的API記述を生成する
 	    	handler_flag = ht.gen_cfg_handler_type(handler)
 	    	handler_flags << handler_flag if handler_flag
@@ -1172,5 +1117,5 @@
     	}
 
-		# $id$ç­ã®ç½®æ
+		# $id$等の置換
 		name_array = cell.get_celltype.get_name_array(cell)
 		handler_args.collect! { |e|
@@ -1182,6 +1127,6 @@
 		}
 
-    	# tecsgen.cfgã®è¨è¿°ãçæããã
-    	# factoryã«å¯¾ãããã©ã¡ã¼ã¿ç½®æãè¡ãã
+    	# tecsgen.cfgの記述を生成する。
+    	# factoryに対し、パラメータ置換を行う。
     	# {{attribute_name}} -> attribute_value
     	text = @factory.gsub(/\{\{([a-zA-Z0-9_]*?)\}\}/) { |match|
@@ -1189,5 +1134,5 @@
 			subst_attr = cell.get_celltype.find(name)
 
-			# {{_handler_params_}} ã¯ãã³ãã©ã®æå®ã«ç½®æããã
+			# {{_handler_params_}} はハンドラの指定に置換する。
 			if name == :_handler_params_
 		    	args_joined = handler_flags.join(' | ')
@@ -1200,6 +1145,6 @@
 
 			unless subst_attr
-				# å±æ§ãè¦ã¤ãããªãã¨ããã¨ã©ã¼ã¯ãã§ã«å ±åããã¦ããã®ã§
-				# ããã§ã¯ããã¼å¤ãè¿ãã¦ããã ãã§ããã
+				# 属性が見つからないというエラーはすでに報告されているので
+				# ここではダミー値を返しておくだけである。
 				next ""
 			end
@@ -1207,16 +1152,16 @@
 			subst_attr_join = cell.get_join_list.get_item(name)
 			if subst_attr_join
-				# ã»ã«çææã«åæåããå ´å
+				# セル生成時に初期化する場合
 				subst = subst_attr_join.get_rhs.to_s
 			else
-				# ã»ã«ã¿ã¤ãã®åæåå¤ãä½¿ãå ´å
+				# セルタイプの初期化値を使う場合
 				subst = subst_attr.get_initializer.to_s
 			end
 
-			# $id$ç­ã®ç½®æ
+			# $id$等の置換
 			cell.get_celltype.subst_name(subst, name_array)
       }
 
-     # åºå (CRE_xxx)
+     # 出力 (CRE_xxx)
      kernelCfg.print pre_text
      kernelCfg.print indent, text, "\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueMarshalerPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueMarshalerPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueMarshalerPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -54,5 +39,5 @@
 
 #== OpaqueMarshaler
-# OpaqueRPC ç¨ã®ãã¼ã·ã£ã©ãã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ããçæããã·ã°ããã£ãã©ã°ã¤ã³
+# OpaqueRPC 用のマーシャラ、アンマーシャラセルタイプを生成するシグニチャプラグイン
 
 require_tecsgen_lib "lib/GenOpaqueMarshaler.rb"
@@ -76,6 +61,5 @@
     # check_PPAllocator
     if @signature.need_PPAllocator?(true) then
-      @PPAllocatorSize = 1    # PPAllocatorã®å¿
-è¦æ§æã®ããã«è¨­å® (ãµã¤ãºã¯ä½¿ãããªã)
+      @PPAllocatorSize = 1    # PPAllocatorの必要性有のために設定 (サイズは使われない)
       necessity = "Necessary"
     else
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/OpaqueRPCPlugin.rb	(revision 389)
@@ -6,57 +6,39 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 require_tecsgen_lib "lib/GenOpaqueMarshaler.rb"
@@ -68,12 +50,10 @@
   include GenParamCopy
 
-  # OpaqueRPCPlugin å°ç¨ã®ãªãã·ã§ã³
-  OpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # è¤è£½ãä½ã£ã¦å
-ãå¤æ´ããªãããã«ãã
+  # OpaqueRPCPlugin 専用のオプション
+  OpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
   OpaqueRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
@@ -98,11 +78,10 @@
     gen_marshaler_celltype
 
-    # ãã£ã³ãã« composite ã»ã«ã¿ã¤ãã®çæ
-    #  ããã§çæããã CDL ãã¡ã¤ã«ã¯ãtecsgen ãç´æ¥ import ããã®ã§ã¯ãªã
-    #  ã»ã«ã³ã¼ãã® CDL ãã import ããã
+    # チャンネル composite セルタイプの生成
+    #  ここで生成された CDL ファイルは、tecsgen が直接 import するのではなく
+    #  セルコードの CDL から import される
 
     f = CFile.open( @rpc_client_channel_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -142,6 +121,5 @@
 
     f = CFile.open( @rpc_server_channel_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -173,5 +151,5 @@
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -180,5 +158,5 @@
     gen_plugin_decl_code( file )
 
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_name]  # mikan namespace
     # cell = Namespace.find( path )
@@ -191,9 +169,9 @@
 EOT
 
-    ##### ã¯ã©ã¤ã¢ã³ãå´ã®ã»ã«ã®çæ #####
+    ##### クライアント側のセルの生成 #####
     nest = @start_region.gen_region_str_pre file
     nest_str = "  " * nest
 
-    # ã»ããã©ã®çæ
+    # セマフォの生成
     if @b_noClientSemaphore == false then
       file.print <<EOT
@@ -206,5 +184,5 @@
     end
 
-    # ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (TINET, Socket ãªã©)ã®çæ
+    # クライアント側チャンネル (TINET, Socket など)の生成
     file.print <<EOT
 #{nest_str}  //  Client Side Channel
@@ -216,5 +194,5 @@
 EOT
 
-    # ã»ããã©ã®çµåæ
+    # セマフォの結合文
     if @b_noClientSemaphore == false then
       semaphore = "#{nest_str}    cLockChannel = #{@serverChannelCell}_Semaphore.eSemaphore;\n"
@@ -223,6 +201,6 @@
     end
 
-    ### ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (ãã¼ã·ã£ã©+TDR)ã®çæ ###
-    # ã¢ã­ã±ã¼ã¿ã®æå®ããããï¼
+    ### クライアント側チャンネル (マーシャラ+TDR)の生成 ###
+    # アロケータの指定があるか？
     if cell.get_allocator_list.length > 0 then
 
@@ -240,8 +218,7 @@
 
         file.print delim
-        delim = ",\n"        # æçµè¡ã«ã¯åºããªã
-
-        if subsc then        # é
-åæ·»æ°
+        delim = ",\n"        # 最終行には出さない
+
+        if subsc then        # 配列添数
           subsc_str = '[#{subsc}]'
         else
@@ -249,5 +226,5 @@
         end
 
-        eport = "eThroughEntry" #RPCã®åãå£åã«å¤æ´
+        eport = "eThroughEntry" #RPCの受け口名に変更
         file.print nest_str
         file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}"
@@ -269,10 +246,10 @@
 
 EOT
-    ### END: ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (ãã¼ã·ã£ã©+TDR)ã®çæ ###
+    ### END: クライアント側チャンネル (マーシャラ+TDR)の生成 ###
 
     @start_region.gen_region_str_post file
     file.print "\n\n"
 
-    ##### ãµã¼ãã¼å´ã®ã»ã«ã®çæ #####
+    ##### サーバー側のセルの生成 #####
     nest = @end_region.gen_region_str_pre file
     nest_str = "  " * nest
@@ -295,5 +272,5 @@
     end
 
-    # ãµã¼ãã¼å´ãã£ã³ãã« (TINET, Socket ãªã©)
+    # サーバー側チャンネル (TINET, Socket など)
     file.print <<EOT
 
@@ -304,5 +281,5 @@
 EOT
 
-    # ãµã¼ãã¼å´ãã£ã³ãã« (ã¢ã³ãã¼ã·ã£ã©+TDR)
+    # サーバー側チャンネル (アンマーシャラ+TDR)
     file.print <<EOT
 
@@ -314,5 +291,5 @@
 EOT
 
-    # ãµã¼ãã¼å´ã¿ã¹ã¯ã¡ã¤ã³
+    # サーバー側タスクメイン
     file.print <<EOT
 
@@ -323,5 +300,5 @@
 EOT
 
-    # ãµã¼ãã¼å´ã¿ã¹ã¯
+    # サーバー側タスク
     file.print <<EOT
 
@@ -337,5 +314,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° noClientSemaphore ã®ãã§ãã¯
+  #=== プラグイン引数 noClientSemaphore のチェック
   def set_noClientSemaphore rhs
     rhs = rhs.to_sym
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RPCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RPCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RPCPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -56,21 +41,15 @@
 require_tecsgen_lib "lib/GenParamCopy.rb"
 
-#= Transparent RPC ãã©ã°ã¤ã³
-# Transparent RPC ãã£ã³ãã«ãçæãã
-# ãã©ã°ã¤ã³å¼æ°ã¯ä»¥ä¸ã® RPCPluginArgProc ãåç
-§
-
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-# ãããå©ç¨ããå ´åãä»¥ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿
-è¦ããã
+#= Transparent RPC プラグイン
+# Transparent RPC チャンネルを生成する
+# プラグイン引数は以下の RPCPluginArgProc を参照
+
+# mikan through plugin: namespace が考慮されていない
+# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 class RPCPlugin < ThroughPlugin
@@ -79,13 +58,11 @@
   include GenParamCopy
 
-  # RPCPlugin å°ç¨ã®ãªãã·ã§ã³
-  TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # è¤è£½ãä½ã£ã¦å
-ãå¤æ´ããªãããã«ãã
+  # RPCPlugin 専用のオプション
+  TransparentRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
   TransparentRPCPluginArgProc[ "noClientSemaphore"  ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs }
   TransparentRPCPluginArgProc[ "semaphoreCelltype"  ] = Proc.new { |obj,rhs| obj.set_semaphoreCelltype rhs }
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
@@ -94,6 +71,5 @@
     initialize_transparent_marshaler cell_name
 
-    # ãªãã·ã§ã³ï¼GenTransparentMarshaler åç
-§
+    # オプション：GenTransparentMarshaler 参照
     @plugin_arg_check_proc_tab = TransparentRPCPluginArgProc
     parse_plugin_arg
@@ -105,5 +81,5 @@
       if @PPAllocatorSize == nil then
         cdl_error( "PPAllocatorSize must be speicified for oneway [in] array" )
-        # @PPAllocatorSize = 0   # ä»®ã« 0 ã¨ãã¦ãã (cdl ã®æ§æã¨ã©ã¼ãé¿ãããã)
+        # @PPAllocatorSize = 0   # 仮に 0 としておく (cdl の構文エラーを避けるため)
       end
     end
@@ -112,8 +88,7 @@
 #      if func_decl.get_type.is_oneway? then
 #        if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then
-#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan æå­åã®é
-å
+#          cdl_error( "array of string not supported for oneway function in Transparent RPC" )  # mikan 文字列の配列
 #        elsif param_decl.get_string == -1 then
-#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan é·ãæªæå®æå­å
+#          cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" )  # mikan 長さ未指定文字列
 #        end
 #      end
@@ -121,10 +96,10 @@
   end
 
-  #=== plugin ã®å®£è¨ã³ã¼ã (celltype ã®å®ç¾©) çæ
+  #=== plugin の宣言コード (celltype の定義) 生成
   def gen_plugin_decl_code( file )
 
     ct_name = "#{@ct_name}_#{@channelCelltype}"
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ ct_name ] == nil then
       @@generated_celltype[ ct_name ] = [ self ]
@@ -159,6 +134,5 @@
 
     f = CFile.open( @rpc_channel_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -199,10 +173,10 @@
 };
 EOT
-    # mikan stackSize option & ææ° tecs_package å¯¾å¿
+    # mikan stackSize option & 最新 tecs_package 対応
 
     f.close
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -211,5 +185,5 @@
     gen_plugin_decl_code( file )
 
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_global_name]
     # cell = Namespace.find( path )
@@ -230,13 +204,13 @@
 
     file.print <<EOT
-#{indent_str}// ä¸æ¹åãã£ã³ãã«ã»ã«
+#{indent_str}// 一方向チャンネルセル
 #{indent_str}cell #{@channelCelltype} #{@channelCellName} {
 #{indent_str}};
 
-#{indent_str}// RPC ãã£ã³ãã«ã»ã«
-EOT
-
-    # #473 ãè§£æ±ºãããå ´åãcomposite ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã«å¤æ´ãã¹ã
-    # ã¢ã­ã±ã¼ã¿ã®æå®ããããï¼
+#{indent_str}// RPC チャンネルセル
+EOT
+
+    # #473 が解決された場合、composite リレーアロケータに変更すべき
+    # アロケータの指定があるか？
     if cell.get_allocator_list.length > 0 then
 
@@ -247,8 +221,7 @@
 
         file.print delim
-        delim = ",\n#{indent_str}           "        # æçµè¡ã«ã¯åºããªã
-
-        if subsc then        # é
-åæ·»æ°
+        delim = ",\n#{indent_str}           "        # 最終行には出さない
+
+        if subsc then        # 配列添数
           subsc_str = '[#{subsc}]'
         else
@@ -256,5 +229,5 @@
         end
 
-        eport = "eThroughEntry" #RPCã®åãå£åã«å¤æ´
+        eport = "eThroughEntry" #RPCの受け口名に変更
         file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
       end
@@ -275,5 +248,5 @@
 
 
-  #=== ãã©ã°ã¤ã³å¼æ° noClientSemaphore ã®ãã§ãã¯
+  #=== プラグイン引数 noClientSemaphore のチェック
   def set_noClientSemaphore rhs
     rhs = rhs.to_sym
@@ -287,5 +260,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° semaphoreCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 semaphoreCelltype のチェック
   def set_semaphoreCelltype rhs
     @semaphoreCelltype = rhs.to_sym
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatCellPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatCellPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatCellPlugin.rb	(revision 389)
@@ -7,57 +7,41 @@
 #
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
 #++
 
-#== cell ã count åç¹°ãè¿ãã»ã«ãã©ã°ã¤ã³
-# ä¸å®å
-¨ç¹ï¼
-#    æå®å­ã«å¯¾å¿ãã¦ããªã
-#       cell ã®æå®å­ (allocator, id)
-#       çµåã®æå®å­ (through)
+#== cell を count 個繰り返すセルプラグイン
+# 不完全点：
+#    指定子に対応していない
+#       cell の指定子 (allocator, id)
+#       結合の指定子 (through)
 class RepeatCellPlugin < CellPlugin
 
@@ -102,5 +86,5 @@
     while count < num
 
-      # ã»ã«åã®ã«ã¦ã³ã
+      # セル名のカウント
       count_str = (count + base_count).to_s
       if tail_zero.length > count_str.length then
@@ -114,8 +98,8 @@
       file.print "#{indent_str}cell #{@cell.get_celltype.get_name} #{cname}{\n"
 
-      # Join ã® CDL æå­åçæ
+      # Join の CDL 文字列生成
       @cell.get_join_list.get_items.each{ |j|
 
-        # Join ã®å³è¾ºã®è§£æ
+        # Join の右辺の解析
         res = j.get_rhs.analyze_cell_join_expression
         if res then
@@ -131,5 +115,5 @@
         end
 
-        # å³è¾ºã®ã»ã«å (æ«å°¾ã®æ°å­ãã«ã¦ã³ãã¢ãã)
+        # 右辺のセル名 (末尾の数字をカウントアップ)
         nsp.get_name.to_s =~ /(.*[^0-9])([0-9]+)\z/
         if $2 then
@@ -145,7 +129,7 @@
         end
 
-        # Join æå­åã®åºå
+        # Join 文字列の出力
         if port_name then
-          # å³è¾ºã¯ ã»ã«ã®çµå
+          # 右辺は セルの結合
           if subscript then
             file.print "#{indent_str}  #{j.get_name} = #{nsp.get_path_str}.#{port_name}[#{(count+subscript).to_s}];\n"
@@ -154,5 +138,5 @@
           end
         else
-          # å³è¾ºã¯åä¸ã®è­å¥å­
+          # 右辺は単一の識別子
           file.print "#{indent_str}  #{j.get_name} = #{nsp.get_path_str};\n"
         end
@@ -166,5 +150,5 @@
   end
 
-  #=== count ãªãã·ã§ã³ã®è§£æ
+  #=== count オプションの解析
   def set_count rhs
     if rhs =~ /\A\d+\z/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatJoinPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatJoinPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/RepeatJoinPlugin.rb	(revision 389)
@@ -7,47 +7,32 @@
 #
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #  $Id$
@@ -70,5 +55,5 @@
       # print "Join: #{j.get_name} = #{j.get_rhs.to_s}\n"
 
-      # Join ã®å³è¾ºãè§£æ
+      # Join の右辺を解析
       ret = j.get_rhs.analyze_cell_join_expression
       if ret == nil then
@@ -77,6 +62,5 @@
       rhs_nsp = ret[0]; rhs_subscript = ret[1]; rhs_port_name = ret[2]
 
-      # å¼ã³å£é
-åã§ãæ·»æ°ã 0 ã®å ´åã«ã®ã¿ã«ã¦ã³ãã¢ããããã
+      # 呼び口配列で、添数が 0 の場合にのみカウントアップさせる
       if j.get_subscript == 0 then
         rhs_name = rhs_nsp.get_name.to_s
@@ -128,5 +112,5 @@
   end
 
-  #=== count ãªãã·ã§ã³ã®è§£æ
+  #=== count オプションの解析
   def set_count rhs
     if rhs =~ /\A\d+\z/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -56,26 +41,19 @@
 require_tecsgen_lib "lib/GenParamCopy.rb"
 
-#= SharedOpaqueRPC ãã©ã°ã¤ã³
-# SharedOpaqueRPC ãã£ã³ãã«ãçæãã
-# ãã©ã°ã¤ã³å¼æ°ã¯ GenTransparentMarshaler åç
-§
-
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-# ãããå©ç¨ããå ´åãä»¥ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿
-è¦ããã
+#= SharedOpaqueRPC プラグイン
+# SharedOpaqueRPC チャンネルを生成する
+# プラグイン引数は GenTransparentMarshaler 参照
+
+# mikan through plugin: namespace が考慮されていない
+# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 class SharedOpaqueRPCPlugin < ThroughPlugin
 
-  # ãã£ã³ãã«ãå
-±æãããã©ã°ã¤ã³ãªãã¸ã§ã¯ãã¸ã®ããã·ã¥ãªã¹ã
+  # チャンネルを共有するプラグインオブジェクトへのハッシュリスト
   @@shared_channel_list = {}    # { chan_name => [ Plugin_obj0, Plugin_Obj1, ... ] }
 
@@ -84,20 +62,16 @@
   include GenParamCopy
 
-  # SharedOpaqueRPCPlugin å°ç¨ã®ãªãã·ã§ã³
-  SharedOpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # è¤è£½ãä½ã£ã¦å
-ãå¤æ´ããªãããã«ãã
+  # SharedOpaqueRPCPlugin 専用のオプション
+  SharedOpaqueRPCPluginArgProc = RPCPluginArgProc.dup  # 複製を作って元を変更しないようにする
   SharedOpaqueRPCPluginArgProc[ "sharedChannelName"  ] = Proc.new { |obj,rhs| obj.set_sharedChannelName rhs }
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super
     initialize_opaque_marshaler
-    @entry_port_name = :"eClientEntry"   # Marshaler ã®åãå£å (through ã»ã«ã®å
-¥ãå£)
-
-    # ãªãã·ã§ã³ï¼GenOpaqueMarshaler åç
-§
+    @entry_port_name = :"eClientEntry"   # Marshaler の受け口名 (through セルの入り口)
+
+    # オプション：GenOpaqueMarshaler 参照
     @plugin_arg_check_proc_tab = SharedOpaqueRPCPluginArgProc
     @sharedChannelName = nil
@@ -125,5 +99,5 @@
     prev_start = @@shared_channel_list[ @shared_channel_cell ][0].start_region
     if @start_region != prev_start then
-      # ååºã¨ start ãªã¼ã¸ã§ã³ä¸ä¸è´ (ååºã¯ãèªåèªèº«ã¨ãã§ãã¯ããããç¡é§ã ãå°ããã®ã§æ¾ç½®)
+      # 初出と start リージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
       cdl_error( "SharedRPCPlugin: start region mismatch current: #{@region.get_name} previous: #{prev_start.get_name}")
     end
@@ -131,5 +105,5 @@
     prev_end = @@shared_channel_list[ @shared_channel_cell ][0].end_region
     if @end_region != prev_end then
-      # ååºã¨ end ãªã¼ã¸ã§ã³ä¸ä¸è´  (ååºã¯ãèªåèªèº«ã¨ãã§ãã¯ããããç¡é§ã ãå°ããã®ã§æ¾ç½®)
+      # 初出と end リージョン不一致  (初出は、自分自身とチェックされる。無駄だが小さいので放置)
       cdl_error( "SharedRPCPlugin: end region mismatch current: #{@region.get_name} previous: #{prev_end.get_name}")
     end
@@ -141,5 +115,5 @@
   # end
 
-  #=== ãã©ã°ã¤ã³å¼æ° sharedChannelCell ã®ãã§ãã¯
+  #=== プラグイン引数 sharedChannelCell のチェック
   def set_sharedChannelName( rhs )
     @sharedChannelName = rhs
@@ -153,5 +127,5 @@
   def gen_plugin_decl_code( file )
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @shared_channel_server_ct_name ] == nil then
       @@generated_celltype[ @shared_channel_server_ct_name ] = [ self ]
@@ -162,6 +136,5 @@
     gen_marshaler_celltype
 
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     if @PPAllocatorSize then
@@ -174,6 +147,5 @@
 
     f = CFile.open( @shared_channel_ct_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -233,5 +205,5 @@
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -256,17 +228,16 @@
     end
 
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_name]
     # cell = Namespace.find( path )
     cell = Namespace.find( @next_cell.get_namespace_path )
 
-    # å
-±æãããéä¿¡ãã£ã³ãã«ã®çæã®ãã­ãã¿ã¤ãå®£è¨
+    # 共有される通信チャンネルの生成のプロトタイプ宣言
     file.print <<EOT
 #{indent_str}cell #{@shared_channel_client_ct_name} #{@shared_channel_cell};
 EOT
 
-    # ãã¼ã·ã£ã©ã»ã«ã®çæï¼ã¢ã­ã±ã¼ã¿ã³ã¼ãã®çæããï¼
-    # ã¢ã­ã±ã¼ã¿ã®æå®ããããï¼
+    # マーシャラセルの生成（アロケータコードの生成から）
+    # アロケータの指定があるか？
     if cell.get_allocator_list.length > 0 then
 
@@ -284,8 +255,7 @@
 
         file.print delim
-        delim = ",\n#{indent_str}           "        # æçµè¡ã«ã¯åºããªã
-
-        if subsc then        # é
-åæ·»æ°
+        delim = ",\n#{indent_str}           "        # 最終行には出さない
+
+        if subsc then        # 配列添数
           subsc_str = '[#{subsc}]'
         else
@@ -293,5 +263,5 @@
         end
 
-        eport = @entry_port_name #RPCã®åãå£åã«å¤æ´
+        eport = @entry_port_name #RPCの受け口名に変更
         file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}"
       end
@@ -300,5 +270,5 @@
     end
 
-    # ãã¼ã·ã£ã©ã»ã«æ¬ä½çæ
+    # マーシャラセル本体生成
     file.print <<EOT
 /* OpaqueRPC Marshaler Cell */
@@ -311,6 +281,6 @@
     @start_region.gen_region_str_post file
 
-    # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã®åºå
-    # ã»ã«æ¬ä½ã®çæ
+    # アンマーシャラセルの出力
+    # セル本体の生成
     nest = @end_region.gen_region_str_pre file
 
@@ -321,6 +291,5 @@
 EOT
 
-    # PPAllocator ãå¿
-è¦ã?
+    # PPAllocator が必要か?
     if @PPAllocatorSize then
       if @sub_channel_no == 0 then
@@ -347,6 +316,6 @@
   end
 
-  #=== post ã³ã¼ã(CDL) ãçæ
-  # ãã©ã°ã¤ã³ã®å¾ã®ã³ã¼ããçæ
+  #=== post コード(CDL) を生成
+  # プラグインの後のコードを生成
   #file:: File: 
   def self.gen_post_code( file )
@@ -361,14 +330,11 @@
   end
 
-  #=== post ã³ã¼ã(CDL) ãçæ
-  # å
-±æãã£ã³ãã«ãçæãã
-  # ãã®ã¡ã½ããã¯ããã£ã³ãã«ãå
-±æããæåã®ãã©ã°ã¤ã³ãªãã¸ã§ã¯ãã®ã¿å¼ã³åºããã
+  #=== post コード(CDL) を生成
+  # 共有チャンネルを生成する
+  # このメソッドは、チャンネルを共有する最初のプラグインオブジェクトのみ呼び出される
   def gen_post_code( file, plugin_obj_array )
 
-    # å
-±æããã¦ããéä¿¡ãã£ã³ãã«ã®çæ
-    # åãã©ã°ã¤ã³ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ @shared_channel_ct_name ã¨ãã¦è¨æ¶ãã¦ãã
+    # 共有されている通信チャンネルの生成
+    # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
     # region = @caller_cell.get_region
     nest = @start_region.gen_region_str_pre file
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedRPCPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedRPCPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedRPCPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -56,21 +41,15 @@
 require_tecsgen_lib "lib/GenParamCopy.rb"
 
-#= SharedRPC ãã©ã°ã¤ã³
-# SharedRPC ãã£ã³ãã«ãçæãã
-# ãã©ã°ã¤ã³å¼æ°ã¯ GenTransparentMarshaler åç
-§
-
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-# ãããå©ç¨ããå ´åãä»¥ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿
-è¦ããã
+#= SharedRPC プラグイン
+# SharedRPC チャンネルを生成する
+# プラグイン引数は GenTransparentMarshaler 参照
+
+# mikan through plugin: namespace が考慮されていない
+# これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
 
-# ä»¥ä¸ãä»®å®ï¼å¶éäºé 
-ï¼
-#  å¼ã³å
-ãå¼ã³å
-ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã
-#  æç¬¦å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã
+# 以下を仮定（制限事項）
+#  呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
+#  有符号、無符号でサイズが同じ
 
 class SharedRPCPlugin < ThroughPlugin
@@ -81,18 +60,16 @@
   include GenParamCopy
 
-  #=== RPCPlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+  #=== RPCPlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
 
-    # mikan ãã©ã°ã¤ã³ãªãã·ã§ã³æå®ã®ä¸ä¸è´ã®ãã§ãã¯ task_priority, 
+    # mikan プラグインオプション指定の不一致のチェック task_priority, 
 
     super
     initialize_transparent_marshaler cell_name
 
-    # ãªãã·ã§ã³ï¼GenTransparentMarshaler åç
-§
+    # オプション：GenTransparentMarshaler 参照
     @plugin_arg_check_proc_tab = RPCPluginArgProc
-    @channelCellName = ""     # nil ã«ãã¦ãã
+    @channelCellName = ""     # nil にしておく
     parse_plugin_arg
 
@@ -108,8 +85,8 @@
 
     if @@shared_channel_list[ @shared_channel_cell ] == nil then
-      # ååº
+      # 初出
       @@shared_channel_list[ @shared_channel_cell ] = [ self ]
     else
-      # äºçªç®ä»¥é
+      # 二番目以降
       @@shared_channel_list[ @shared_channel_cell ] << self
     end
@@ -117,5 +94,5 @@
 
     if @region != @@shared_channel_list[ @shared_channel_cell ][0].region then
-      # ååºã¨ãªã¼ã¸ã§ã³ä¸ä¸è´ (ååºã¯ãèªåèªèº«ã¨ãã§ãã¯ããããç¡é§ã ãå°ããã®ã§æ¾ç½®)
+      # 初出とリージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
       cdl_error( "SharedRPCPlugin: preferred region mismatch current: #{@region.get_name} previous: #{@@shared_channel_list[ @shared_channel_cell ][0].region.get_name}")
     else
@@ -138,5 +115,5 @@
   def gen_plugin_decl_code( file )
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @shared_channel_ct_name ] == nil then
       @@generated_celltype[ @shared_channel_ct_name ] = [ self ]
@@ -152,6 +129,5 @@
 
     gen_marshaler_celltype
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     if @signature.need_PPAllocator? then
@@ -164,6 +140,5 @@
 
     f = CFile.open( @rpc_channel_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -196,11 +171,10 @@
 };
 EOT
-    # mikan stackSize option & ææ° tecs_package å¯¾å¿
+    # mikan stackSize option & 最新 tecs_package 対応
 
     f.close
 
     f = CFile.open( "#{$gen}/#{@shared_channel_ct_name}.cdl", "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -247,5 +221,5 @@
   end
 
-  #===  through cell ã³ã¼ããçæ
+  #===  through cell コードを生成
   #
   #
@@ -268,11 +242,10 @@
     end
 
-    # ã»ã«ãæ¢ã
+    # セルを探す
     # path =["::",@next_cell.get_name]
     # cell = Namespace.find( path )
     cell = Namespace.find( @next_cell.get_namespace_path )
 
-    # PPAllocator ãå¿
-è¦ã?
+    # PPAllocator が必要か?
     if @signature.need_PPAllocator? then
       if @sub_channel_no == 0 then
@@ -289,13 +262,12 @@
     end
 
-    # å
-±æãããéä¿¡ãã£ã³ãã«ã®çæã®ãã­ãã¿ã¤ãå®£è¨
+    # 共有される通信チャンネルの生成のプロトタイプ宣言
     file.print <<EOT
 #{indent_str}cell #{@shared_channel_ct_name} #{@shared_channel_cell};
 EOT
 
-    # ããããåçµåãã¨ã®ã»ã«ãçæ
-
-    # ã¢ã­ã±ã¼ã¿ã®æå®ããããï¼
+    # ここから各結合ごとのセルを生成
+
+    # アロケータの指定があるか？
     if cell.get_allocator_list.length > 0 then
 
@@ -306,8 +278,7 @@
 
         file.print delim
-        delim = ",\n#{indent_str}           "        # æçµè¡ã«ã¯åºããªã
-
-        if subsc then        # é
-åæ·»æ°
+        delim = ",\n#{indent_str}           "        # 最終行には出さない
+
+        if subsc then        # 配列添数
           subsc_str = '[#{subsc}]'
         else
@@ -315,5 +286,5 @@
         end
 
-        eport = "eThroughEntry" #RPCã®åãå£åã«å¤æ´
+        eport = "eThroughEntry" #RPCの受け口名に変更
         file.print  "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
       end
@@ -322,5 +293,5 @@
     end
 
-    # ã»ã«æ¬ä½ã®çæ
+    # セル本体の生成
     file.print <<EOT
 #{indent_str}cell #{@rpc_channel_celltype_name} #{@cell_name} {
@@ -334,6 +305,6 @@
   end
 
-  #=== å¾ãã®ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã®ã³ã¼ããçæ
+  #=== 後ろのコードを生成
+  #プラグインの後ろのコードを生成
   #file:: File: 
   def self.gen_post_code( file )
@@ -344,6 +315,6 @@
   end
 
-  #=== å¾ãã®ã³ã¼ããçæ
-  # plugin_obj[0] ãä»£è¡¨ãã¦åºåããï¼ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã«ã¢ã¯ã»ã¹ãããããï¼
+  #=== 後ろのコードを生成
+  # plugin_obj[0] が代表して出力する（インスタンス変数にアクセスしたいため）
   def gen_post_code( file, plugin_obj )
 
@@ -353,7 +324,6 @@
     indent_str = "  " * nest
 
-    # å
-±æããã¦ããéä¿¡ãã£ã³ãã«ã®çæ
-    # åãã©ã°ã¤ã³ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ @shared_channel_ct_name ã¨ãã¦è¨æ¶ãã¦ãã
+    # 共有されている通信チャンネルの生成
+    # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
     file.print "#{indent_str}cell tSharedRPCPlugin_#{@channelCelltype} #{chan_name} {\n"
     plugin_obj.each{ |po|
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SignaturePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SignaturePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SignaturePlugin.rb	(revision 389)
@@ -6,62 +6,46 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== signature ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== signature プラグインの共通の親クラス
 class SignaturePlugin < Plugin
-#@signature:: Signature   ãã©ã°ã¤ã³ã®å¯¾è±¡ã¨ãªãã·ã°ããã£
-#@option:: String   '"', '"' ã§å²ã¾ããæå­å
+#@signature:: Signature   プラグインの対象となるシグニチャ
+#@option:: String   '"', '"' で囲まれた文字列
 
-  #signature::     Signature        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Signature        シグニチャ（インスタンス）
   def initialize( signature, option )
     super()
     @signature = signature
-    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # åå¾ã® "" ãåãé¤ã
+    # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' )    # 前後の "" を取り除く
     # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
     @plugin_arg_str = CDLString.remove_dquote option
@@ -69,18 +53,16 @@
   end
 
-  #=== å¾ãã®ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろのコードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     éå¸¸ã§ããã°ãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECS2CBridgePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECS2CBridgePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECS2CBridgePlugin.rb	(revision 389)
@@ -6,59 +6,44 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== TECS => C å¼ã³åºããã©ã°ã¤ã³
+#== TECS => C 呼び出しプラグイン
 class TECS2CBridgePlugin < SignaturePlugin
-#@signature:: Signature   ãã©ã°ã¤ã³ã®å¯¾è±¡ã¨ãªãã·ã°ããã£
-#@option:: String   '"', '"' ã§å²ã¾ããæå­å
+#@signature:: Signature   プラグインの対象となるシグニチャ
+#@option:: String   '"', '"' で囲まれた文字列
 
   @@signature_list = { }
 
-  #signature::     Signature        ã·ã°ããã£ï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #signature::     Signature        シグニチャ（インスタンス）
   def initialize( signature, option )
     super
@@ -91,18 +76,16 @@
   end
 
-  #=== å¾ãã®ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã®ã³ã¼ããçæ
+  #=== 後ろのコードを生成
+  #プラグインの後ろのコードを生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     éå¸¸ã§ããã°ãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -129,5 +112,5 @@
     p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
   }else{
-     /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+     /* エラー処理コードをここに記述 */
   }
 
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECSInfoPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECSInfoPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TECSInfoPlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2017-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -62,5 +47,5 @@
   #@cell_list::[Cell]
 
-  #celltype::     Celltype        ã»ã«ã¿ã¤ãï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #celltype::     Celltype        セルタイプ（インスタンス）
   def initialize( celltype, option )
     super
@@ -71,16 +56,16 @@
   end
 
-  #=== æ°ããã»ã«
-  #cell::        Cell            ã»ã«
+  #=== 新しいセル
+  #cell::        Cell            セル
   #
-  # celltype ãã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã»ã«ãçæããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã«å¯¾ããæ°ããã»ã«ã®å ±å
+  # celltype プラグインを指定されたセルタイプのセルが生成された
+  # セルタイププラグインに対する新しいセルの報告
   def new_cell( cell )
     @@cell_list << cell
 
-    # AppFile ã¯ãéã­æ¸ããããªã®ã§ãããã
+    # AppFile は、重ね書きようなので、やめる
     # p "import: cell nTECSInfo::tTECSInfoSub #{cell.get_namespace_path.to_s} under #{cell.get_region.get_name}"
     # cell.show_tree 0
-    # TECSInfoSub ã»ã«ã®ãã­ãã¿ã¤ãå®£è¨
+    # TECSInfoSub セルのプロトタイプ宣言
     fn = "#{$gen}/tmp_#{cell.get_region.get_global_name}_TECSInfoSub.cdl"
     File.open( fn, "w" ){ |f|
@@ -98,7 +83,7 @@
     Import.new fn
 
-    # ã»ã«ã« cTECSInfo ã®çµåããããï¼
+    # セルに cTECSInfo の結合があるか？
     if cell.get_join_list.get_item( :cTECSInfo ) == nil then
-      # cTECSInfo = rTECSInfo::TECSInfosub.eTECSInfo; ã®è¿½å 
+      # cTECSInfo = rTECSInfo::TECSInfosub.eTECSInfo; の追加
       nsp = NamespacePath.new( :rTECSInfo, false )
       nsp.append! :TECSInfoSub
@@ -109,8 +94,7 @@
   end
 
-  #=== tCelltype_factory.h ã«æ¿å
-¥ããã³ã¼ããçæãã
-  # file ä»¥å¤ã®ä»ã®ãã¡ã¤ã«ã«ãã¡ã¯ããªã³ã¼ããçæãã¦ããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã¿å¼ã³åºããã
+  #=== tCelltype_factory.h に挿入するコードを生成する
+  # file 以外の他のファイルにファクトリコードを生成してもよい
+  # セルタイププラグインが指定されたセルタイプのみ呼び出される
   def gen_factory file
     File.open( "#{$gen}/include_all_signature_header.h", "w" ){ |f|
@@ -199,5 +183,5 @@
     f.print "#define TOPPERS_CB_TYPE_ONLY\n"
     Namespace.get_root.print_celltype_define f
-    # FOREACH_CELL ãåºããªãã
+    # FOREACH_CELL を出しなおす
     ct = Namespace.find [ "::", :nTECSInfo, :tCelltypeInfo ]
     ct.gen_ph_foreach_cell f
@@ -269,5 +253,5 @@
     }
     Region.get_root.print_cell_define f
-    # FOREACH_CELL ãåºããªãã
+    # FOREACH_CELL を出しなおす
     ct = Namespace.find [ "::", :nTECSInfo, :tCellInfo ]
     ct.gen_ph_foreach_cell f
@@ -280,6 +264,6 @@
   end
 
-  #=== å¾ãã® CDL ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File:
   def self.gen_post_code( file )
@@ -288,5 +272,5 @@
       return
     end
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     file.print <<EOT
 /*------------ #{self.name} post code ------------*/
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ThroughPlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ThroughPlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/ThroughPlugin.rb	(revision 389)
@@ -6,117 +6,82 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-# mikan through plugin: namespace ãèæ
-®ããã¦ããªã
-
-#==  ã¹ã«ã¼ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹ããã¤ ï¼ä½ãããï¼ã¹ã«ã¼ããã»ã«ãæ¿å
-¥ããã¹ã«ã¼ãã©ã°ã¤ã³
-#    ã¹ã«ã¼ãã©ã°ã¤ã³ã¯ ThroughPlugin ã®å­ã¯ã©ã¹ã¨ãã¦å®ç¾©ãã
+# mikan through plugin: namespace が考慮されていない
+
+#==  スループラグインの共通の親クラス　かつ （何もせず）スルーするセルを挿入するスループラグイン
+#    スループラグインは ThroughPlugin の子クラスとして定義する
 class ThroughPlugin < Plugin
-#@cell_name::      Symbol             çæããã»ã«åï¼è¤æ°ã»ã«ãçæããå ´åãåãå£å´ã®ã»ã«ï¼
-#@plugin_arg_str:: string             through ã§æå®ãããå¼æ°
-#@next_cell:: Cell                    å¼ã³å£ãçµåããã»ã«
-#@next_cell_port_name:: Symbol       å¼ã³å£ãçµåããåå£ã®åå
-#@next_cell_port_subscript::Nil|Integer   å¼ã³å£ãçµåããåå£ã®é
-åæ·»æ°ï¼åãå£é
-åã§ãªãå ´å nil
-#@signature::      Signature          ã·ã°ããã£
-#@celltype::       Celltype           å¼ã³å
-ã®ã»ã«ã®ã»ã«ã¿ã¤ã. through ãé£æ¥ããå ´åãæçµçãªå¼ã³å
-ã®ã»ã«ã®ã»ã«ã¿ã¤ã
-#@entry_port_name::Symbol             çæããã»ã«ã®åãå£å  "eThroughEntry"
-#@call_port_name:: Symbol             çæããã»ã«ã®å¼ã³å£å  "cCall"
-#@ct_name::        Symbol             çæããã»ã«ã®ã»ã«ã¿ã¤ãå   "t#{self.class.name}_#{@signature.get_global_name}"
-#@plugin_arg_list:: Hash              ãã©ã°ã¤ã³å¼æ°ããã¼ã¹ããçµæã®ããã·ã¥å¤æ°
-#@caller_cell::    Cell               å¼ã³å
-ã®ã»ã«ï¼through ãã©ã°ã¤ã³ãé£æ¥ããå ´åã§ã¯ãæãå¼ã³å
-ã®ã»ã«ï¼($source$)
-#                                     through ãã©ã°ã¤ã³ãåæµããã±ã¼ã¹ã§ã¯ã1ã¤ç®ã®å¼ã³å
-ã»ã«ã®ã¿å¼æ°ã¨ãã¦ä¸ãããã
-#                                     å¾ã£ã¦ TracePlugin ã®å¼ã³å
-ã®å¤å¥ã«å©ç¨ããå ´åã¯ãç°ãªãå¼ã³å
-ããå¼ã°ããå¯è½æ§ããããã¨ã«æ³¨æããªãã¦ã¯ãªããªã
-#@callee_cell:: Cell                  å¼ã³å
-ã®ã»ã«($destination$)
-#@plugin_arg_check_proc_tab:: [string => Proc]  ãã©ã°ã¤ã³å¼æ°åâãã§ãã¯é¢æ°
-# ä»¥ä¸ã®å¤æ°ã¯ãinitialize ã§ã¯ãªããå¾ããè¨­å®ããã
-#@start_@region::  Region             å§ã¾ãã®ãªã¼ã¸ã§ã³ï¼ caller_cell ã®ãªã¼ã¸ã§ã³ã¨ã¯ç°ãªãå¯è½æ§ããã ($start_region$)
-#@end_region::  Region                çµããã®ãªã¼ã¸ã§ã³ï¼ next_cell ã®ãªã¼ã¸ã§ã³ã¨ã¯ç°ãªãå¯è½æ§ããã ($end_region$)
-#@region:: Region                     @start_region ã¨ @end_region ã®ããããã§ãcell ãç½®ãã®ãå¥½ã¾ãããªã¼ã¸ã§ã³ ($preferred_region$)
-#@through_type:: Symbol              :THROUGH, :TO_THROUGH, :IN_THROUGH, :OUT_THROUGH ã®ãããã
-
-  # ãã® Plugin ãçæããã»ã«ã¿ã¤ãã®ãªã¹ã
+#@cell_name::      Symbol             生成するセル名（複数セルを生成する場合、受け口側のセル）
+#@plugin_arg_str:: string             through で指定された引数
+#@next_cell:: Cell                    呼び口を結合するセル
+#@next_cell_port_name:: Symbol       呼び口を結合する受口の名前
+#@next_cell_port_subscript::Nil|Integer   呼び口を結合する受口の配列添数．受け口配列でない場合 nil
+#@signature::      Signature          シグニチャ
+#@celltype::       Celltype           呼び先のセルのセルタイプ. through が連接する場合、最終的な呼び先のセルのセルタイプ
+#@entry_port_name::Symbol             生成するセルの受け口名  "eThroughEntry"
+#@call_port_name:: Symbol             生成するセルの呼び口名  "cCall"
+#@ct_name::        Symbol             生成するセルのセルタイプ名   "t#{self.class.name}_#{@signature.get_global_name}"
+#@plugin_arg_list:: Hash              プラグイン引数をパースした結果のハッシュ変数
+#@caller_cell::    Cell               呼び元のセル．through プラグインが連接する場合では、最も呼び元のセル．($source$)
+#                                     through プラグインが合流するケースでは、1つ目の呼び元セルのみ引数として与えられる
+#                                     従って TracePlugin の呼び元の判別に利用する場合は、異なる呼び元から呼ばれる可能性があることに注意しなくてはならない
+#@callee_cell:: Cell                  呼び先のセル($destination$)
+#@plugin_arg_check_proc_tab:: [string => Proc]  プラグイン引数名⇒チェック関数
+# 以下の変数は、initialize ではなく、後から設定される
+#@start_@region::  Region             始まりのリージョン： caller_cell のリージョンとは異なる可能性がある ($start_region$)
+#@end_region::  Region                終わりのリージョン： next_cell のリージョンとは異なる可能性がある ($end_region$)
+#@region:: Region                     @start_region と @end_region のいずれかで、cell を置くのが好ましいリージョン ($preferred_region$)
+#@through_type:: Symbol              :THROUGH, :TO_THROUGH, :IN_THROUGH, :OUT_THROUGH のいずれか
+
+  # この Plugin が生成したセルタイプのリスト
   @@generated_celltype = {}
 
-  #=== ThroughPlugin ã®åæå
-  #     through ãæå®ãããæç¹ã§çæãè¡ããã
-  #         åæåã§ã¯ãæå®ãããå¼æ°ãè¨é²ããã«çãã
-  #cell_name::      Symbol             çæãã¹ãã»ã«åï¼åå£å´ï¼
-  #plugin_arg::     string             through ã§æå®ãããå¼æ°
-  #next_cell::      Cell               å¼ã³å£ãæ¥ç¶ããã»ã«
-  #next_cell_port_name:: Symbol        å¼ã³å£ãæ¥ç¶ããåå£ã®åå
-  #next_cell_port_subscript:: Nil|Integer  å¼ã³å£ãæ¥ç¶ããåå£é
-åæ·»æ°
-  #signature::      Signature          ã·ã°ããã£
-  #celltype::       Celltype           ã»ã«ã¿ã¤ã (å¼ã³å
-ã®ã»ã«ã®ã»ã«ã¿ã¤ã)
-  #caller_cell::    Cell               å¼ã³å
-ã®ã»ã«ï¼@caller_cell ã®é 
-ãåç
-§
+  #=== ThroughPlugin の初期化
+  #     through が指定された時点で生成が行われる
+  #         初期化では、指定された引数を記録するに留める
+  #cell_name::      Symbol             生成すべきセル名（受口側）
+  #plugin_arg::     string             through で指定された引数
+  #next_cell::      Cell               呼び口を接続するセル
+  #next_cell_port_name:: Symbol        呼び口を接続する受口の名前
+  #next_cell_port_subscript:: Nil|Integer  呼び口を接続する受口配列添数
+  #signature::      Signature          シグニチャ
+  #celltype::       Celltype           セルタイプ (呼び先のセルのセルタイプ)
+  #caller_cell::    Cell               呼び元のセル．@caller_cell の項を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
     super()
-    @cell_name = cell_name                      # çæãã¹ãã»ã«åï¼åãå£å´ã®ã»ã«åï¼
-                                                # ãã®å¼ã³å
-ã«å¥ã»ã«ãçæããå ´åããã®ååãæ¥é ­è¾ã¨ãã¹ã
-    @next_cell = next_cell                      # å¼ã³å
-ã®ã»ã«
+    @cell_name = cell_name                      # 生成すべきセル名（受け口側のセル名）
+                                                # この呼び先に別セルを生成する場合、この名前を接頭辞とすべき
+    @next_cell = next_cell                      # 呼び先のセル
     @next_cell_port_name = next_cell_port_name
     @next_cell_port_subscript = next_cell_port_subscript
@@ -127,18 +92,16 @@
     @celltype = celltype
     @plugin_arg_str = plugin_arg
-    @plugin_arg_list = {}                       # ãã©ã°ã¤ã³å¼æ°ããã¼ã¹ããçµæã®ããã·ã¥å¤æ°
+    @plugin_arg_list = {}                       # プラグイン引数をパースした結果のハッシュ変数
     @caller_cell     = caller_cell
-    Join.set_through_info self                  # å¼æ°ã§æ¸¡ããªã(å¾ããè¿½å ããã)ãã®ã¯ set_through_info ã§è¨­å®ããã
+    Join.set_through_info self                  # 引数で渡らない(後から追加された)ものは set_through_info で設定される
     print( "#{self.class.name}.new( '#{cell_name}', '#{plugin_arg}', '#{next_cell.get_name}', '#{next_cell_port_name}', #{celltype.get_name} )\n" )
   end
 
-  #=== æ
-å ±ãè¨­å®ãã
-  # å
-±æãã£ã³ãã«ã®å ´å caller_cell, next_cell ã®ãããã® region ã§ããªãã±ã¼ã¹ããã
-  # å¾ããè¿½å ããã®ã§ initialize ã®å¼æ°ã§ã¯ãªããå¥ã¡ã½ããã§è¨­å®
-  # ãã®ã¡ã½ããã¯ããªã¼ãã¼ã©ã¤ãããªãã§ãã ãã
-  # Join ã¨ ThrougPlugin ã®éã®é£çµ¡ç¨ã§ãä»å¾ã¨ãå¼æ°ãè¿½å ãããå¯è½æ§ããããã
-  # ãã®ã¡ã½ããã¯ V1.C.0.34 ã§ä½ç½®ãç§»åãããThroughPlugin#initialize ã§å¼ã³åºããã
+  #=== 情報を設定する
+  # 共有チャンネルの場合 caller_cell, next_cell のいずれの region でもないケースがある
+  # 後から追加したので initialize の引数ではなく、別メソッドで設定
+  # このメソッドは、オーバーライドしないでください
+  # Join と ThrougPlugin の間の連絡用で、今後とも引数が追加される可能性があるため
+  # このメソッドは V1.C.0.34 で位置が移動され、ThroughPlugin#initialize で呼び出される
   def set_through_info( start_region, end_region, through_type, join, callee_cell, count )
     @start_region = start_region
@@ -149,5 +112,5 @@
     @count = count
 
-    # preferred_region ã®è¨­å®
+    # preferred_region の設定
     case through_type
     when :IN_THROUGH, :THROUGH
@@ -160,11 +123,11 @@
   end
 
-  #===  ã»ã«ã®ååãå¾ã
+  #===  セルの名前を得る
   def get_cell_name
     @cell_name
   end
 
-  #=== NamespacePath ãå¾ã
-  # çæããã»ã«ã® namespace path ãçæãã
+  #=== NamespacePath を得る
+  # 生成するセルの namespace path を生成する
   def get_cell_namespace_path
 #    nsp = @region.get_namespace.get_namespace_path
@@ -173,22 +136,21 @@
   end
 
-  #===  çæãããã»ã«ã®åãå£ã®ååãå¾ã
+  #===  生成されたセルの受け口の名前を得る
   def get_through_entry_port_name
     @entry_port_name
   end
 
-  #===  çæãããã»ã«ã®åãå£é
-åæ·»æ°ãå¾ã
+  #===  生成されたセルの受け口配列添数を得る
   def get_through_entry_port_subscript
     @entry_port_subscript
   end
 
-  #===  å®£è¨ã³ã¼ãã®çæ
-  #      typedef, signature, celltype ãªã©ï¼cell ä»¥å¤ï¼ã®ã³ã¼ããçæ
-  #          éè¤ãã¦çæãã¦ã¯ãªããªãï¼ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ï¼
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  宣言コードの生成
+  #      typedef, signature, celltype など（cell 以外）のコードを生成
+  #          重複して生成してはならない（すでに生成されている場合は出力しないこと）
+  #file::        FILE       生成するファイル
   def gen_plugin_decl_code( file )
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @ct_name ] == nil then
       @@generated_celltype[ @ct_name ] = [ self ]
@@ -235,6 +197,6 @@
   end
 
-  #=== CDL ãã¡ã¤ã«ã®çæ
-  #file::     FILE    çæãããã¡ã¤ã«
+  #=== CDL ファイルの生成
+  #file::     FILE    生成するファイル
   def gen_cdl_file( file )
     gen_plugin_decl_code( file )
@@ -242,7 +204,7 @@
   end
 
-  #===  ã»ã«ã³ã¼ãã®çæ
-  #     through æå®ã«ããçããã»ã«ã³ã¼ã(CDL)ãçæãã
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  セルコードの生成
+  #     through 指定により生じるセルコード(CDL)を生成する
+  #file::        FILE       生成するファイル
   def gen_through_cell_code( file )
 
@@ -259,18 +221,16 @@
   end
 
-  #=== å¾ãã®ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã®ã³ã¼ã (CDL) ãçæ
+  #=== 後ろのコードを生成
+  #プラグインの後ろのコード (CDL) を生成
   #file:: File: 
   def self.gen_post_code( file )
-    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
     # file.print "/* '#{self.class.name}' post code */\n"
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     éå¸¸ã§ããã°ãã¸ã§ãã¬ã¼ã¿ã¯åãå£é¢æ°ã®ãã³ãã¬ã¼ããçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の本体(C言語)を生成する
+  #     通常であれば、ジェネレータは受け口関数のテンプレートを生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -297,5 +257,5 @@
     p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
   }else{
-     /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+     /* エラー処理コードをここに記述 */
   }
 
@@ -330,5 +290,5 @@
   end
 
-  #=== Through ãã©ã°ã¤ã³ã®å¼æ°ã®ååãç½®æãã
+  #=== Through プラグインの引数の名前を置換する
   def check_plugin_arg( ident, rhs )
     rhs = subst_name rhs
@@ -336,26 +296,21 @@
   end
 
-  #=== ThroughPlugin#ååã®ç½®æ
-  # ãã©ã°ã¤ã³ãªãã·ã§ã³å¼æ°å
-ã®æå­åãç½®æãã
-  #   $source$       â¦ å¼ã³å
-ã®ã»ã«å
-  #   $destination$  â¦ å¼ã³å
-ã®ã»ã«å
-  #   $SOURCE$       â¦ å¼ã³å
-ã®ã»ã«å (ãªã¼ã¸ã§ã³åã '_' ã§é£çµãã global_name)
-  #   $DESTINATION$  â¦ å¼ã³å
-ã®ã»ã«å (ãªã¼ã¸ã§ã³åã '_' ã§é£çµãã global_name)
-  #   $next$         â¦ æ¬¡ã®ã»ã«å
-  #                     è¤æ°ã® through ãã¤ãªãã£ã¦ããå ´åãããå¾ãã«æ¥ããã®
-  #   $NEXT$         â¦ æ¬¡ã®ã»ã«å (ãªã¼ã¸ã§ã³åã '_' ã§é£çµãã global_name)
-  #                     è¤æ°ã® through ãã¤ãªãã£ã¦ããå ´åãããå¾ãã«æ¥ããã®
-  #   $start_region$ â¦ $source$ ã®ã»ã«ã®å­å¨ãã region (global_name)
-  #   $end_region$   â¦ $destination$ ã®ã»ã«ã®å­å¨ãã region (global_name)
-  #   $preferred_region$  â¦ é©åãª region (global_name), start_region ã¾ãã¯ end_region
-  #   $count$        â¦ region éã® through ã®é©ç¨æ°
-  #   $$             â¦ $ ã«ç½®æ
+  #=== ThroughPlugin#名前の置換
+  # プラグインオプション引数内の文字列を置換する
+  #   $source$       … 呼び元のセル名
+  #   $destination$  … 呼び先のセル名
+  #   $SOURCE$       … 呼び元のセル名 (リージョン名を '_' で連結した global_name)
+  #   $DESTINATION$  … 呼び先のセル名 (リージョン名を '_' で連結した global_name)
+  #   $next$         … 次のセル名
+  #                     複数の through がつながっている場合、すぐ後ろに来るもの
+  #   $NEXT$         … 次のセル名 (リージョン名を '_' で連結した global_name)
+  #                     複数の through がつながっている場合、すぐ後ろに来るもの
+  #   $start_region$ … $source$ のセルの存在する region (global_name)
+  #   $end_region$   … $destination$ のセルの存在する region (global_name)
+  #   $preferred_region$  … 適切な region (global_name), start_region または end_region
+  #   $count$        … region 間の through の適用数
+  #   $$             … $ に置換
   def subst_name( str )
-    # ã»ã«åã®ç½®æ
+    # セル名の置換
     str = str.gsub( /(^|[^\$])\$source\$/, "\\1#{@caller_cell.get_name}" )
     str = str.gsub( /(^|[^\$])\$destination\$/, "\\1#{@callee_cell.get_name}" )
@@ -364,5 +319,5 @@
     str = str.gsub( /(^|[^\$])\$next\$/, "\\1#{@next_cell.get_name}" )
     str = str.gsub( /(^|[^\$])\$NEXT\$/, "\\1#{@next_cell.get_global_name}" )
-    # region åã®ç½®æ
+    # region 名の置換
     str = str.gsub( /(^|[^\$])\$start_region\$/, "\\1#{@start_region.get_global_name}" )
     str = str.gsub( /(^|[^\$])\$end_region\$/, "\\1#{@end_region.get_global_name}" )
@@ -370,5 +325,5 @@
     str = str.gsub( /(^|[^\$])\$count\$/, "\\1#{@count}" )
 
-    str = str.gsub( /\$\$/, "\$" )                       # $$ ã $ ã«ç½®æ
+    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
 
     return str
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TracePlugin.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TracePlugin.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/TracePlugin.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -55,10 +40,8 @@
 class TracePlugin < ThroughPlugin
 #@cellEntry_list::[ "Cell.eEntry", "Cell2.eEntry2", ... ]
-#@b_generate::bool  : true : TracePlugin ãçæããå¿
-è¦ããã
-
-  #=== TracePlugin ã® initialize
-  #  èª¬æã¯ ThroughPlugin (plugin.rb) ãåç
-§
+#@b_generate::bool  : true : TracePlugin を生成する必要がある
+
+  #=== TracePlugin の initialize
+  #  説明は ThroughPlugin (plugin.rb) を参照
   def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell )
 
@@ -86,7 +69,5 @@
 
     if @b_generate == false then
-      # å
-ã
-å¼ã³åºãã»ã«ã«çµåãããã®ã¨ãã
+      # 元々呼び出すセルに結合するものとする
       @entry_port_name = next_cell_port_name
       @cell_name = next_cell.get_name
@@ -94,11 +75,11 @@
   end
 
-  #===  å®£è¨ã³ã¼ãã®çæ
-  #      typedef, signature, celltype ãªã©ï¼cell ä»¥å¤ï¼ã®ã³ã¼ããçæ
-  #          éè¤ãã¦çæãã¦ã¯ãªããªãï¼ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ï¼
-  #file::        FILE       çæãããã¡ã¤ã«
+  #===  宣言コードの生成
+  #      typedef, signature, celltype など（cell 以外）のコードを生成
+  #          重複して生成してはならない（すでに生成されている場合は出力しないこと）
+  #file::        FILE       生成するファイル
   def gen_plugin_decl_code( file )
 
-    # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼
+    # このセルタイプ（同じシグニチャ）は既に生成されているか？
     if @@generated_celltype[ @ct_name ] == nil then
       @@generated_celltype[ @ct_name ] = [ self ]
@@ -449,5 +430,5 @@
   end
 
-  # ãã©ã°ã¤ã³å¼æ°åã¨ Proc
+  # プラグイン引数名と Proc
   TracePluginArgProc = {
     "maxArrayDisplay"    => Proc.new { |obj,rhs| obj.set_maxArrayDisplay rhs },
@@ -489,5 +470,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° tKernel ã®ãã§ãã¯
+  #=== プラグイン引数 tKernel のチェック
   def set_kernelCelltype( rhs )
     @kernelCelltype = rhs.to_sym
@@ -499,5 +480,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° tSyslog ã®ãã§ãã¯
+  #=== プラグイン引数 tSyslog のチェック
   def set_syslogCelltype( rhs )
     @syslogCelltype = rhs.to_sym
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenHRP2Marshaler.rb	(revision 389)
@@ -6,52 +6,37 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#ãã©ã°ã¤ã³ãªãã·ã§ã³ç¨å¤æ°
+#プラグインオプション用変数
 #@task_priority:: Integer
 #@channelCelltype:: String
@@ -60,5 +45,5 @@
 module GenTransparentMarshaler
 
-  # ãã©ã°ã¤ã³å¼æ°åã¨ Proc
+  # プラグイン引数名と Proc
   RPCPluginArgProc = {
     "taskPriority"    => Proc.new { |obj,rhs| obj.set_taskPriority rhs },
@@ -69,10 +54,10 @@
   }
 
-  #=== ãã©ã°ã¤ã³å¼æ° taskPriority ã®ãã§ãã¯
+  #=== プラグイン引数 taskPriority のチェック
   def set_taskPriority( rhs )
     @task_priority = rhs
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° channelCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 channelCelltype のチェック
   def set_channelCelltype( rhs )
     @channelCelltype = rhs.to_sym
@@ -86,5 +71,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° TDRCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 TDRCelltype のチェック
   def set_TDRCelltype( rhs )
     @TDRCelltype = rhs.to_sym
@@ -98,5 +83,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° channelCellName ã®ãã§ãã¯
+  #=== プラグイン引数 channelCellName のチェック
   def set_channelCellName( rhs )
     @channelCellName = rhs
@@ -108,10 +93,10 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° PPAllocatorSize ã®ãã§ãã¯
+  #=== プラグイン引数 PPAllocatorSize のチェック
   def set_PPAllocatorSize( rhs )
     @PPAllocatorSize = rhs
   end
 
-  #=== marshaler ã®ã»ã«ã¿ã¤ãåãè¨­å®ãã
+  #=== marshaler のセルタイプ名を設定する
   def initialize_transparent_marshaler cell_name
     @task_priority = 8
@@ -135,6 +120,5 @@
 
     f = CFile.open( @marshaler_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     # modified by ishikawa
@@ -164,9 +148,9 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½ã³ã¼ããçæï¼é ­é¨ã¨æ«å°¾ã¯å¥éåºåï¼
-  #ct_name:: Symbol    (through ãã©ã°ã¤ã³ã§çæããã) ã»ã«ã¿ã¤ãå ï¼Symbol ã¨ãã¦éããã¦ããï¼ãããï¼
+  #===  受け口関数の本体コードを生成（頭部と末尾は別途出力）
+  #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 ．Symbol として送られてくる（らしい）
   def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
-    # unmarshaler ã¯ã©ã¹ã?
+    # unmarshaler クラスか?
     if ct_name == @unmarshaler_celltype_name.to_sym then
       gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
@@ -176,5 +160,5 @@
   end
 
-  #===  marshal ã³ã¼ãã®çæ
+  #===  marshal コードの生成
   def gen_ep_func_body_marshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
@@ -182,9 +166,8 @@
     b_ret_er = false
 
-    # é¢æ°ã®æ»ãå¤ã®å
-ã®åãå¾ã(typedef ããã¦ããå ´å)
+    # 関数の戻り値の元の型を得る(typedef されている場合)
     type = func_type.get_type.get_original_type
 
-    # æ»ãå¤è¨æ¶ç¨ã®å¤æ°ãåºåï¼void åã®é¢æ°ã§ã¯åºåããªãï¼
+    # 戻り値記憶用の変数を出力（void 型の関数では出力しない）
     if ! type.kind_of?( VoidType ) then
       if func_type.get_type.kind_of?( DefinedType ) && ( func_type.get_type.get_type_str == "ER" || func_type.get_type.get_type_str == "ER_INT" ) then
@@ -201,9 +184,8 @@
     file.print( "    FLGPTN  flgptn;\n" )
 
-    # å¼ã³å
-ã® signature ãåãåºã
+    # 呼び先の signature を取り出す
     signature = @signature
 
-    # é¢æ° ID ï¼æ´æ°å¤ï¼
+    # 関数 ID （整数値）
     func_id = signature.get_id_from_func_name( func_name )
     file.print( "    int16_t  func_id_ = #{func_id};    /* id of #{func_name}: #{func_id} */\n" )
@@ -211,8 +193,8 @@
     file.print( "    uint8_t  msg[256];\n" )
 
-    # ã·ã³ã°ã«ãã³ã§ãªããï¼
+    # シングルトンでないか？
     if ! b_singleton then
 
-      # singleton ã§ãªããã° p_cellcb åå¾ã³ã¼ããåºå
+      # singleton でなければ p_cellcb 取得コードを出力
       file.print <<EOT
     #{ct_name}_CB *p_cellcb;
@@ -222,5 +204,5 @@
 EOT
 
-      # ã¨ã©ã¼ãè¿ããï¼
+      # エラーを返すか？
       if b_ret_er then
         file.print <<EOT
@@ -232,11 +214,11 @@
         file.print <<EOT
     }else{
-        /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
-    }
-EOT
-      end
-    end
-
-    # channel lock ã³ã¼ã
+        /* エラー処理コードをここに記述 */
+    }
+EOT
+      end
+    end
+
+    # channel lock コード
     file.print <<EOT
     ///* Channel Lock */
@@ -247,12 +229,12 @@
 
 =begin
-    # SOP ãéä¿¡
-    file.print "    /* SOPã®éåº */\n"
+    # SOP を送信
+    file.print "    /* SOPの送出 */\n"
     file.print "    if( ( ercd_ = cTDR_sendSOP( true ) ) != E_OK )\n"
     file.print "      goto error_reset;\n"
 =end
 
-    # func_id ãéä¿¡
-    file.print "    /* é¢æ° id ã®éåº */\n"
+    # func_id を送信
+    file.print "    /* 関数 id の送出 */\n"
 =begin
     file.print "    if( ( ercd_ = cTDR_putInt16( func_id_ ) ) != E_OK )\n"
@@ -264,12 +246,10 @@
     # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
 
-    b_get = false    # marshal ãªã put
+    b_get = false    # marshal なら put
     b_marshal = true  # marshal
 
-    # in æ¹åã®å
-¥åºåãåºå
+    # in 方向の入出力を出力
     @index = 2
-    file.print "    /* å
-¥åå¼æ°éåº */\n"
+    file.print "    /* 入力引数送出 */\n"
     print_params( params, file, 1, b_marshal, b_get, true, func_type.is_oneway? )
     print_params( params, file, 1, b_marshal, b_get, false, func_type.is_oneway? )
@@ -281,5 +261,5 @@
 =end
 
-    file.print "    /* EOPã®éåºï¼ãã±ããã®æãã ãï¼ */\n"
+    file.print "    /* EOPの送出（パケットの掃きだし） */\n"
     if ! func_type.is_oneway? then
       b_continue = "true"
@@ -316,6 +296,5 @@
 
     if( b_void == false )then
-      # å¼ã³å
-ã«æ»ãå¤ããªã¿ã¼ã³
+      # 呼び元に戻り値をリターン
       file.print( "    cMessageBuffer_receive(&retval_);\n" )
       file.print( "    return retval_;\n" )
@@ -333,5 +312,5 @@
 EOT
 
-    # channel lock ã³ã¼ã
+    # channel lock コード
     file.print <<EOT
     ///* Channel Lock */
@@ -342,6 +321,5 @@
 
     if( b_ret_er != false )then
-      # å¼ã³å
-ã«æ»ãå¤ããªã¿ã¼ã³
+      # 呼び元に戻り値をリターン
       file.print( "    return ercd_;\n" )
     else
@@ -351,5 +329,5 @@
   end
 
-  #===  unmarshal ã³ã¼ãã®çæ
+  #===  unmarshal コードの生成
   def gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
@@ -357,5 +335,5 @@
     b_ret_er = false
 
-    # func_id ãå¾ãã³ã¼ããçæ
+    # func_id を得るコードを生成
     file.print <<EOT
 
@@ -378,5 +356,5 @@
         file.print <<EOT
     }else{
-        /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+        /* エラー処理コードをここに記述 */
     }
 EOT
@@ -388,8 +366,8 @@
 
 #if 0
-    /* SOPã®ãã§ãã¯ */
+    /* SOPのチェック */
     if( (ercd_=cTDR_receiveSOP( false )) != E_OK )
         goto error_reset;
-    /* func_id ã®åå¾ */
+    /* func_id の取得 */
     if( (ercd_=cTDR_getInt16( &func_id_ )) != E_OK )
         goto error_reset;
@@ -406,11 +384,10 @@
 EOT
 
-    # å¼ã³å
-ã® signature ãåãåºã
+    # 呼び先の signature を取り出す
     # port = @celltype.find( @next_cell_port_name )
     # signature = port.get_signature
     signature = @signature
 
-    # through ã® signature ã«å«ã¾ãã ãã¹ã¦ã®é¢æ°ã«ã¤ãã¦
+    # through の signature に含まれる すべての関数について
     signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -418,5 +395,5 @@
       id = signature.get_id_from_func_name( f_name )
 
-      # é¢æ°ã¯è¿ãå¤ãæã¤ã?
+      # 関数は返り値を持つか?
       if f_type.get_type.kind_of?( VoidType ) then
         b_void = true
@@ -425,5 +402,5 @@
       end
 
-      # ãã±ããã®çµããããã§ãã¯ï¼æªåãåãã®ãã¼ã¿ãæ®ã£ã¦ããªãããã§ãã¯ï¼
+      # パケットの終わりをチェック（未受け取りのデータが残っていないかチェック）
       file.print "    case #{id}:       /*** #{f_name} ***/ \n"
       file.print "        if( tTransparentUnmarshaler_#{@signature.get_name}_#{f_name}() != E_OK )\n"
@@ -434,5 +411,5 @@
 
     if @PPAllocatorSize then
-      ppallocator_dealloc_str = "    /* PPAllocator ã®ãã¹ã¦ãè§£æ¾ */\n    cPPAllocator_dealloc_all();"
+      ppallocator_dealloc_str = "    /* PPAllocator のすべてを解放 */\n    cPPAllocator_dealloc_all();"
     else
       ppallocator_dealloc_str = ""
@@ -442,6 +419,5 @@
     file.print <<EOT
     default:
-#if 0 // deleted by ishikawa: tSysLogãæªå®è£
-
+#if 0 // deleted by ishikawa: tSysLogが未実装
         syslog(LOG_INFO, "unmarshaler task: ERROR: unknown func_id: %d", func_id_ );
 #endif /* 0 */
@@ -464,10 +440,8 @@
 
   # IN b_marshal, b_get
-  #  b_marshal = true  && b_get == false   :  ãã¼ã·ã£ã©ã§å
-¥åå¼æ°éåº
-  #  b_marshal = true  && b_get == true    :  ãã¼ã·ã£ã©ã§åºåå¼æ°åå
-  #  b_marshal = false && b_get == true    :  ã¢ã³ãã¼ã·ã£ã©ã§å
-¥åå¼æ°åå
-  #  b_marshal = false && b_get == get     :  ã¢ã³ãã¼ã·ã£ã©ã§åºåå¼æ°éåº
+  #  b_marshal = true  && b_get == false   :  マーシャラで入力引数送出
+  #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
+  #  b_marshal = false && b_get == true    :  アンマーシャラで入力引数受取
+  #  b_marshal = false && b_get == get     :  アンマーシャラで出力引数送出
   def print_params( params, file, nest, b_marshal, b_get, b_referenced, b_oneway = false )
     params.each{ |param|
@@ -480,5 +454,5 @@
       type = param.get_type
       if b_oneway && dir == :IN && type.get_original_type.kind_of?( PtrType ) || type.get_original_type.kind_of?( ArrayType ) then
-        # oneway, in, PtrType ã®å ´åã³ãã¼
+        # oneway, in, PtrType の場合コピー
         alloc_cp = "cPPAllocator_alloc"
         alloc_cp_extra = nil
@@ -502,5 +476,5 @@
   end
 
-  #=== ã³ãã¼ããªãå¼æ°æ¸¡ãã³ã¼ãã®åºå
+  #=== コピーしない引数渡しコードの出力
   def print_param_nc( name, type, file, nest, b_marshal, outer, outer2, b_get )
     indent = "    " * ( nest + 1 )
@@ -522,5 +496,5 @@
         when :SIGNED
           if bit_size == -1 || bit_size == -11 then
-            # signed char ã®å ´åãsigned ãæå®ãã
+            # signed char の場合、signed を指定する
             signC = "S"
             sign  = "s"
@@ -641,6 +615,6 @@
 
 
-  #=== PREAMBLE é¨ã®ã³ã¼ãçæ
-  # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ãã®å ´åãã¢ã³ãã¼ã·ã£ã©é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ãçæ
+  #=== PREAMBLE 部のコード生成
+  # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
   def gen_preamble file, b_singleton, ct_name, global_name
     if ct_name != @unmarshaler_celltype_name.to_sym then
@@ -648,6 +622,6 @@
     end
 
-    file.print "/* ã¢ã³ãã¼ã·ã£ã©é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ */\n"
-    # signature ã«å«ã¾ãã ãã¹ã¦ã®é¢æ°ã«ã¤ãã¦
+    file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
+    # signature に含まれる すべての関数について
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -661,6 +635,6 @@
   end
 
-  #=== POSTAMBLE é¨ã®ã³ã¼ãçæ
-  # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ãã®å ´åãã¢ã³ãã¼ã·ã£ã©é¢æ°ã®çæ
+  #=== POSTAMBLE 部のコード生成
+  # アンマーシャラセルタイプの場合、アンマーシャラ関数の生成
   def gen_postamble file, b_singleton, ct_name, global_name
     if ct_name != @unmarshaler_celltype_name.to_sym then
@@ -668,5 +642,5 @@
     end
 
-    file.print "\n/*** ã¢ã³ãã¼ã·ã£ã©é¢æ° ***/\n\n"
+    file.print "\n/*** アンマーシャラ関数 ***/\n\n"
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -674,5 +648,5 @@
       id = @signature.get_id_from_func_name( f_name )
 
-      # é¢æ°ã¯è¿ãå¤ãæã¤ã?
+      # 関数は返り値を持つか?
       if f_type.get_type.kind_of?( VoidType ) then
         b_void = true
@@ -692,5 +666,5 @@
       file.print "	ER  ercd_;\n"
 
-      # å¼æ°ãååãå¤æ°ã®å®ç¾©
+      # 引数を受取る変数の定義
       param_list = f.get_declarator.get_type.get_paramlist.get_items
            # FuncHead->  Decl->    FuncType->ParamList
@@ -707,13 +681,13 @@
         end
 
-        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" ãå¤ã
+        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
 
         file.printf( "    %-12s %s%s%s%s;\n", type_str, aster, name, aster2, type.get_type_str_post )
       }
 
-      # æ»ãå¤ãåãåãå¤æ°ã®å®ç¾©
+      # 戻り値を受け取る変数の定義
       if ! b_void then
         if f.is_oneway? then
-          retval_ptr = ""   # oneway ã®å ´åãåãåããæ¨ã¦ããã
+          retval_ptr = ""   # oneway の場合、受け取るが捨てられる
         else
           # =begin ishikawa modified
@@ -725,10 +699,7 @@
       end
 
-      # in æ¹åã®å
-¥åºåãå
-¥å
-      file.print "\n        /* å
-¥åå¼æ°åå */\n"
-      b_get = true    # unmarshal ã§ã¯ get
+      # in 方向の入出力を入力
+      file.print "\n        /* 入力引数受取 */\n"
+      b_get = true    # unmarshal では get
       b_marshal  = false
       @index = 2
@@ -741,7 +712,7 @@
       end
 =end
-      # ãã±ããã®åä¿¡å®äº
-      # mikan æ¬å½ã¯ãå¯¾è±¡é¢æ°ãå¼åºãå¾ã«å®æ½ãããï¼å¼åºããã±ããã®ä½¿ç¨çµãããå®£è¨ããç®çã¨ãã¦
-      file.print "        /* ãã±ããçµããããã§ãã¯ */\n"
+      # パケットの受信完了
+      # mikan 本当は、対象関数を呼出す後に実施したい．呼出しパケットの使用終わりを宣言する目的として
+      file.print "        /* パケット終わりをチェック */\n"
       if ! f.is_oneway? then
         b_continue = "true"
@@ -753,6 +724,6 @@
       file.print "        goto error_reset;\n\n"
 =end
-      # å¯¾è±¡é¢æ°ãå¼åºã
-      file.print "    /* å¯¾è±¡é¢æ°ã®å¼åºã */\n"
+      # 対象関数を呼出す
+      file.print "    /* 対象関数の呼出し */\n"
       if b_void then
         file.print( "    cServerCall_#{f_name}(" )
@@ -769,5 +740,5 @@
       file.print( " );\n" )
 
-      # æ»ãå¤ãåºåå¼æ°ã®ååã³ã¼ãã®çæ
+      # 戻り値、出力引数の受取コードの生成
 
       if ! b_void && ! f.is_oneway? then
@@ -776,9 +747,8 @@
 
       end
-      # oneway ã®å ´ååºåãæ»ãå¤ãç¡ããååãå¾
-ããªãï¼éåæãªå¼åºãï¼
+      # oneway の場合出力、戻り値が無く、受取を待たない（非同期な呼出し）
       if ! f.is_oneway? then
         file.print <<EOT
-    /* é¢æ°å¦çã®çµäºãéç¥ */
+    /* 関数処理の終了を通知 */
     if( ( ercd_ = cEventflag_set( 0x01 ) ) != E_OK ){
       goto error_reset;
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenOpaqueMarshaler.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2018 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -54,9 +39,8 @@
 
 #== GenOpaqueMarshaler
-# OpaqueRPCPlugin, sharedOpaqueRPCPlugin å
-±éã®è¦ç´ ãéããã¢ã¸ã¥ã¼ã«
+# OpaqueRPCPlugin, sharedOpaqueRPCPlugin 共通の要素を集めたモジュール
 module GenOpaqueMarshaler
 
-  # ãã©ã°ã¤ã³å¼æ°åã¨ Proc
+  # プラグイン引数名と Proc
   RPCPluginArgProc = {
     "clientChannelCelltype" => Proc.new { |obj,rhs| obj.set_clientChannelCelltype rhs },
@@ -79,12 +63,12 @@
   }
 
-  ##### ãã©ã°ã¤ã³å¼æ°ãã§ãã¯é¢æ°
-
-  #=== ãã©ã°ã¤ã³å¼æ° taskPriority ã®ãã§ãã¯
+  ##### プラグイン引数チェック関数
+
+  #=== プラグイン引数 taskPriority のチェック
   def set_taskPriority( rhs )
     @taskPriority = rhs
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° serverChannelCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 serverChannelCelltype のチェック
   def set_serverChannelCelltype( rhs )
     @serverChannelCelltype = rhs.to_sym
@@ -98,5 +82,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° clientChannelCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 clientChannelCelltype のチェック
   def set_clientChannelCelltype( rhs )
     @clientChannelCelltype = rhs.to_sym
@@ -110,8 +94,8 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° serverChannelCell ã®ãã§ãã¯
+  #=== プラグイン引数 serverChannelCell のチェック
   def set_serverChannelCell( rhs )
     @serverChannelCell = rhs.to_sym
-    # ChannelCell ã¯ãã©ã°ã¤ã³ã§çæããããããããã§ã¯ãã§ãã¯ã§ããªã
+    # ChannelCell はプラグインで生成されるため、ここではチェックできない
     # path = [ "::", @serverChannelCell ]
     # obj = Namespace.find( path )
@@ -121,8 +105,8 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° clientChannelCell ã®ãã§ãã¯
+  #=== プラグイン引数 clientChannelCell のチェック
   def set_clientChannelCell( rhs )
     @clientChannelCell = rhs.to_sym
-    # ChannelCell ã¯ãã©ã°ã¤ã³ã§çæããããããããã§ã¯ãã§ãã¯ã§ããªã
+    # ChannelCell はプラグインで生成されるため、ここではチェックできない
     # path = [ "::", @clientChannelCell ]
     # obj = Namespace.find( path )
@@ -132,15 +116,15 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° serverChannelInitializer ã®ãã§ãã¯
+  #=== プラグイン引数 serverChannelInitializer のチェック
   def set_serverChannelInitializer( rhs )
     @serverChannelInitializer = rhs.to_sym
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° clientChannelInitializer ã®ãã§ãã¯
+  #=== プラグイン引数 clientChannelInitializer のチェック
   def set_clientChannelInitializer( rhs )
     @clientChannelInitializer = rhs.to_sym
   end
 
-  #=== ã¿ã¹ã¯ã¿ã¤ã taskCellype ã®ãã§ãã¯
+  #=== タスクタイプ taskCellype のチェック
   def set_taskCelltype( rhs )
     @taskCelltype = rhs.to_sym
@@ -154,15 +138,15 @@
   end
 
-  #=== ã¿ã¹ã¯ã¿ã¤ã stack\size ã®ãã§ãã¯
+  #=== タスクタイプ stack\size のチェック
   def set_stackSize( rhs )
     @stackSize = rhs
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° PPAllocatorSize ã®ãã§ãã¯
+  #=== プラグイン引数 PPAllocatorSize のチェック
   def set_PPAllocatorSize( rhs )
     @PPAllocatorSize = rhs
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° TDRCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 TDRCelltype のチェック
   def set_TDRCelltype( rhs )
     @TDRCelltype = rhs.to_sym
@@ -176,13 +160,11 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° substituteAllocator ã®ãã§ãã¯
-  # ãªãã·ã§ã³å¼æ°ããä»¥ä¸ã®å½¢å¼ã§ãããã¨ããã§ãã¯
+  #=== プラグイン引数 substituteAllocator のチェック
+  # オプション引数が、以下の形式であることをチェック
   #     substituteAllocator(Alloc.eAlloc=>Subst.eAlloc,Alloc2.eAlloc=>Subst2.eAlloc)
   def set_substituteAllocator( rhs )
-    #str::String : ç ´å£ãããï¼ãããããæ®ãã«ãªãï¼ãstr.empty? ã§ç©ºã«ãªã£ããã¨ããã§ãã¯ã§ãã
-    #regexp::Regexp : æå¾
-ãããã¼ã¯ã³ã«ãããããæ­£è¦è¡¨ç¾ã "\A" åºå§ãã
-    #expected::String: æå¾
-ãããã¼ã¯ã³ãregexp ãåºç¾ããªãã£ãå ´åã«ã¨ã©ã¼ã¡ãã»ã¼ã¸ã¨ãã¦è¡¨ç¤º
+    #str::String : 破壊される（マッチした残りになる）。str.empty? で空になったことをチェックできる
+    #regexp::Regexp : 期待するトークンにマッチする正規表現。 "\A" 出始める
+    #expected::String: 期待するトークン、regexp が出現しなかった場合にエラーメッセージとして表示
     def optparse (str,regexp,expected)
       str.strip!
@@ -198,5 +180,5 @@
     ident_rexpr = /\A(\w[\w\d]*)/
 
-    # "Alloc.eAlloc=>CAlloc.eAlloc" ã®å½¢å¼ã«ãªã£ã¦ãããã¨ããã§ãã¯
+    # "Alloc.eAlloc=>CAlloc.eAlloc" の形式になっていることをチェック
     while true
       lhs_alloc_cell = optparse( opt, ident_rexpr, "allocator cell name" )
@@ -221,6 +203,5 @@
       break if ! rhs_alloc_ent
 
-#  ããã§ã¯ãå³è¾ºã®ãã§ãã¯ã¯ã§ããªããå³è¾ºã®ã»ã«ã¯åæ¹åç
-§ã¨ãªã
+#  ここでは、右辺のチェックはできない。右辺のセルは前方参照となる
 #      path = [ "::", rhs_alloc_cell.to_sym ]   # mikan namespace
 #      obj = Namespace.find( path )
@@ -229,5 +210,5 @@
 #      else
 #        ct = obj.get_celltype
-#        if ct #  nil ãªãæ¢ã«ã¨ã©ã¼
+#        if ct #  nil なら既にエラー
 #          ent = ct.find rhs_alloc_ent
 #          if ! ent.instance_of? Port || ent.get_port_type != :ENTRY || ent.get_signature == nil || ! ent.get_signature.is_allocator?
@@ -250,5 +231,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° noServerChannelOpenerCode ã®ãã§ãã¯
+  #=== プラグイン引数 noServerChannelOpenerCode のチェック
   def set_noServerChannelOpenerCode( rhs )
     rhs = rhs.to_sym
@@ -262,5 +243,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° clientSemaphoreCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 clientSemaphoreCelltype のチェック
   def set_clientSemaphoreCelltype rhs
     @semaphoreCelltype = rhs.to_sym
@@ -272,15 +253,15 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° clientSemaphoreInitializer ã®ãã§ãã¯
+  #=== プラグイン引数 clientSemaphoreInitializer のチェック
   def set_clientSemaphoreInitializer rhs
     @semaphoreInitializer = rhs.to_sym
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° clientErrorHandler ã®ãã§ãã¯
+  #=== プラグイン引数 clientErrorHandler のチェック
   def set_clientErrorHandler rhs
     @clientErrorHandler = rhs.to_sym
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° serverErrorHandler ã®ãã§ãã¯
+  #=== プラグイン引数 serverErrorHandler のチェック
   def set_serverErrorHandler rhs
     @serverErrorHandler = rhs.to_sym
@@ -288,6 +269,6 @@
 
 
-  #===  ã»ã«ã®ååãå¾ã
-  # ThroughPlugin::get_cell_name plugin.rb ããªã¼ãã¼ã©ã¤ã
+  #===  セルの名前を得る
+  # ThroughPlugin::get_cell_name plugin.rb をオーバーライド
   def get_cell_name
     @cell_name
@@ -295,8 +276,8 @@
   end
 
-  #=== marshaler ã®ã»ã«ã¿ã¤ãåãè¨­å®ãã
+  #=== marshaler のセルタイプ名を設定する
   def initialize_opaque_marshaler
 
-    # ãªãã·ã§ã³è¨­å®ãããå¤æ°ã®ããã©ã«ããè¨­å®
+    # オプション設定される変数のデフォルトを設定
     @taskPriority = 11
     @stackSize  = 4096
@@ -309,5 +290,5 @@
     @taskCelltype = :"tTask"
     @PPAllocatorSize = nil
-    # @TDRCelltype  = :"tTDR"   # "tNBOTDR" ã«å¤æ´ã®äºå®
+    # @TDRCelltype  = :"tTDR"   # "tNBOTDR" に変更の予定
     @TDRCelltype  = :"tNBOTDR"
     @substituteAllocator = {}
@@ -324,5 +305,5 @@
     @marshaler_celltype_file_name = "#{$gen}/#{@marshaler_celltype_name}.cdl"
 
-    # signature ã§å¯¾å¿ã§ããªããã®ããã§ãã¯
+    # signature で対応できないものをチェック
     @signature.each_param{ |func_decl, param_decl|
       if param_decl.get_direction == :OUT then
@@ -337,8 +318,8 @@
   end
 
-  #=== GenOpaqueMarshaler# Opener Code ã®çææã®ãã§ãã¯
+  #=== GenOpaqueMarshaler# Opener Code の生成時のチェック
   def check_opener_code
-    # ãµã¼ãã¼ãã£ã³ãã«ã»ã«ã¿ã¤ãã entry sServerChannelOpener eOpener ãæã¤ãã©ããããã§ãã¯
-    # mikan entry ã (call ã§ãªãã) ããã§ãã¯ãã¦ããªã
+    # サーバーチャンネルセルタイプが entry sServerChannelOpener eOpener を持つかどうかをチェック
+    # mikan entry か (call でないか) をチェックしていない
     # scct = Namespace.find ["::", @serverChannelCelltype] # mikan namespace
     nsp = NamespacePath.analyze( @serverChannelCelltype.to_s )
@@ -360,6 +341,5 @@
   end
 
-  #=== GenOpaqueMarshaler# PPAllocator ã®å¿
-è¦æ§ããã§ãã¯ãã
+  #=== GenOpaqueMarshaler# PPAllocator の必要性をチェックする
   def check_PPAllocator
     if @signature.need_PPAllocator?(true) then
@@ -374,6 +354,5 @@
   def gen_marshaler_celltype
     f = CFile.open( @marshaler_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     if @PPAllocatorSize then
@@ -404,9 +383,9 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½ã³ã¼ããçæï¼é ­é¨ã¨æ«å°¾ã¯å¥éåºåï¼
-  #ct_name:: Symbol    (through ãã©ã°ã¤ã³ã§çæããã) ã»ã«ã¿ã¤ãå ï¼Symbol ã¨ãã¦éããã¦ããï¼ãããï¼
+  #===  受け口関数の本体コードを生成（頭部と末尾は別途出力）
+  #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 ．Symbol として送られてくる（らしい）
   def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
-    # unmarshaler ã¯ã©ã¹ã?
+    # unmarshaler クラスか?
     if ct_name == @unmarshaler_celltype_name.to_sym then
       gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
@@ -416,5 +395,5 @@
   end
 
-  #===  marshal ã³ã¼ãã®çæ
+  #===  marshal コードの生成
   def gen_ep_func_body_marshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
@@ -422,9 +401,8 @@
     b_ret_er = false
 
-    # é¢æ°ã®æ»ãå¤ã®å
-ã®åãå¾ã(typedef ããã¦ããå ´å)
+    # 関数の戻り値の元の型を得る(typedef されている場合)
     type = func_type.get_type.get_original_type
 
-    # æ»ãå¤è¨æ¶ç¨ã®å¤æ°ãåºåï¼void åã®é¢æ°ã§ã¯åºåããªãï¼
+    # 戻り値記憶用の変数を出力（void 型の関数では出力しない）
     if ! type.is_void? then
       file.print( "\t#{func_type.get_type.get_type_str}\t\tretval_;\n" )
@@ -439,13 +417,13 @@
     file.print( "\tint16_t\tstate_;\n" )
 
-    # é¢æ° ID ï¼æ´æ°å¤ï¼
+    # 関数 ID （整数値）
     func_id = "FUNCID_#{@signature.get_global_name}_#{func_name}".upcase
     fid = @signature.get_id_from_func_name( func_name )
     file.print( "\tint16_t\tfunc_id_ = #{func_id};	/* (id of '#{func_name}') = #{fid}*/\n" )
 
-    # ã·ã³ã°ã«ãã³ã§ãªããï¼
+    # シングルトンでないか？
     if ! b_singleton then
 
-      # singleton ã§ãªããã° p_cellcb åå¾ã³ã¼ããåºå
+      # singleton でなければ p_cellcb 取得コードを出力
       file.print <<EOT
 	#{ct_name}_CB *p_cellcb;
@@ -455,5 +433,5 @@
 EOT
 
-      # ã¨ã©ã¼ãè¿ããï¼
+      # エラーを返すか？
       if b_ret_er then
         file.print <<EOT
@@ -465,5 +443,5 @@
         file.print <<EOT
 	}else{
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+		/* エラー処理コードをここに記述 */
 	}
 
@@ -481,5 +459,5 @@
     end
 
-    # channel lock ã³ã¼ã
+    # channel lock コード
     file.print <<EOT
 
@@ -492,12 +470,12 @@
 EOT
 
-    # SOP ãéä¿¡
-    file.print "	/* SOPã®éåº */\n"
+    # SOP を送信
+    file.print "	/* SOPの送出 */\n"
     file.print "	SET_RPC_STATE( state_, RPCSTATE_CLIENT_SEND_SOP );\n"
     file.print "	if( ( ercd_ = cTDR_sendSOP( true ) ) != E_OK )\n"
     file.print "		goto error_reset;\n"
 
-    # func_id ãéä¿¡
-    file.print "	/* é¢æ° id ã®éåº */\n"
+    # func_id を送信
+    file.print "	/* 関数 id の送出 */\n"
     file.print "	if( ( ercd_ = cTDR_putInt16( func_id_ ) ) != E_OK )\n"
     file.print "		goto error_reset;\n"
@@ -506,12 +484,10 @@
     # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
 
-    b_get = false    # marshal ãªã put
+    b_get = false    # marshal なら put
     b_marshal = true  # marshal
 
-    # in æ¹åã®å
-¥åºåãåºå
+    # in 方向の入出力を出力
     if func_type.has_inward? then
-      file.print "	/* å
-¥åå¼æ°éåº */\n"
+      file.print "	/* 入力引数送出 */\n"
       file.print "	SET_RPC_STATE( state_, RPCSTATE_CLIENT_SEND_BODY );\n"
       print_params( params, file, 1, b_marshal, b_get, true, "eClientEntry", func_name )
@@ -525,10 +501,10 @@
       b_continue = "false"
     end
-    file.print "	/* EOPã®éåºï¼ãã±ããã®æãã ãï¼ */\n"
+    file.print "	/* EOPの送出（パケットの掃きだし） */\n"
     file.print "	SET_RPC_STATE( state_, RPCSTATE_CLIENT_SEND_EOP );\n"
     file.print "	if( (ercd_=cTDR_sendEOP(#{b_continue})) != E_OK )\n"
     file.print "		goto error_reset;\n\n"
 
-    # send ã®ã¡ã¢ãªããã¢ã­ã±ã¼ã
+    # send のメモリをデアロケート
     if func_type.has_send? then
       file.print "	/* dealloc send parameter while executing */\n"
@@ -541,11 +517,11 @@
     if ! func_type.is_oneway? then
 
-      file.print "	/* ãã±ããã®å§ã¾ãããã§ãã¯ */\n"
+      file.print "	/* パケットの始まりをチェック */\n"
       file.print "	SET_RPC_STATE( state_, RPCSTATE_CLIENT_RECV_SOP );\n"
       file.print "	if( (ercd_=cTDR_receiveSOP( true )) != E_OK )\n"
       file.print "		goto error_reset;\n"
 
-      b_get = true     # marshaler ã¯ get
-      file.print "	/* æ»ãå¤ã®åãåã */\n"
+      b_get = true     # marshaler は get
+      file.print "	/* 戻り値の受け取り */\n"
       print_param( "retval_", func_type.get_type, file, 1, :RETURN, nil, nil, b_marshal, b_get )
 
@@ -559,5 +535,5 @@
         indent = "	" * indent_level
 
-        file.print "#{indent}/* åºåå¤ã®åãåã */\n"
+        file.print "#{indent}/* 出力値の受け取り */\n"
         file.print "#{indent}SET_RPC_STATE( state_, RPCSTATE_CLIENT_RECV_BODY );\n"
         print_params( params, file, indent_level, b_marshal, b_get, true, "eClientEntry", func_name )
@@ -569,5 +545,5 @@
       end
 
-      file.print "\n	/* ãã±ããã®çµããããã§ãã¯ */\n"
+      file.print "\n	/* パケットの終わりをチェック */\n"
       file.print "	SET_RPC_STATE( state_, RPCSTATE_CLIENT_RECV_EOP );\n"
       file.print "	if( (ercd_=cTDR_receiveEOP(false)) != E_OK )\n"  # b_continue = false
@@ -576,5 +552,5 @@
     end # ! func_type.is_oneway?
 
-    # channel lock ã³ã¼ã
+    # channel lock コード
     file.print <<EOT
 	/* Channel Unlock */
@@ -593,6 +569,5 @@
 
     if( b_void == false )then
-      # å¼ã³å
-ã«æ»ãå¤ããªã¿ã¼ã³
+      # 呼び元に戻り値をリターン
       file.print( "	return retval_;\n" )
     else
@@ -604,5 +579,5 @@
 error_reset:
 EOT
-    # send ã®ã¡ã¢ãªããã¢ã­ã±ã¼ã
+    # send のメモリをデアロケート
     if func_type.has_send? then
       file.print "	/* dealloc send parameter */\n"
@@ -613,5 +588,5 @@
     end
 
-    # receive ã®ã¡ã¢ãªããã¢ã­ã±ã¼ã
+    # receive のメモリをデアロケート
     if func_type.has_receive? then
       file.print( "	/* receive parameter */\n" )
@@ -625,5 +600,5 @@
 EOT
 
-    # channel lock ã³ã¼ã
+    # channel lock コード
     file.print <<EOT
 	/* Channel Unlock */
@@ -636,6 +611,5 @@
 
     if( b_ret_er != false )then
-      # å¼ã³å
-ã«æ»ãå¤ããªã¿ã¼ã³
+      # 呼び元に戻り値をリターン
       file.print( "	return ERCD( E_RPC, MERCD( ercd_ ) );\n" )
     else
@@ -645,10 +619,10 @@
   end
 
-  #===  unmarshal ã³ã¼ãã®çæ
+  #===  unmarshal コードの生成
   def gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
     b_ret_er = true
 
-    # func_id ãå¾ãã³ã¼ããçæ
+    # func_id を得るコードを生成
     file.print <<EOT
 
@@ -672,5 +646,5 @@
         file.print <<EOT
 	}else{
-		/* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+		/* エラー処理コードをここに記述 */
 	}
 EOT
@@ -683,9 +657,9 @@
 #endif
 
-	/* SOPã®ãã§ãã¯ */
+	/* SOPのチェック */
 	SET_RPC_STATE( state_, RPCSTATE_SERVER_RECV_SOP );
 	if( (ercd_=cTDR_receiveSOP( false )) != E_OK )
 		goto error_reset;
-	/* func_id ã®åå¾ */
+	/* func_id の取得 */
 	if( (ercd_=cTDR_getInt16( &func_id_ )) != E_OK )
 		goto error_reset;
@@ -697,5 +671,5 @@
 EOT
 
-    # signature ã«å«ã¾ãã ãã¹ã¦ã®é¢æ°ã«ã¤ãã¦
+    # signature に含まれる すべての関数について
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -711,5 +685,5 @@
 
     if @PPAllocatorSize then
-      ppallocator_dealloc_str = "	/* PPAllocator ã®ãã¹ã¦ãè§£æ¾ */\n	cPPAllocator_dealloc_all();"
+      ppallocator_dealloc_str = "	/* PPAllocator のすべてを解放 */\n	cPPAllocator_dealloc_all();"
     else
       ppallocator_dealloc_str = ""
@@ -734,6 +708,6 @@
   end
 
-  #=== PREAMBLE é¨ã®ã³ã¼ãçæ
-  # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ãã®å ´åãã¢ã³ãã¼ã·ã£ã©é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ãçæ
+  #=== PREAMBLE 部のコード生成
+  # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
   def gen_preamble file, b_singleton, ct_name, global_name
     if ct_name != @unmarshaler_celltype_name.to_sym then
@@ -741,10 +715,10 @@
     end
 
-    # string.h ã® include (memset, strlen ã®ãã)
+    # string.h の include (memset, strlen のため)
     file.print "/* header file (strlen, memset) */\n"
     file.print "#include\t<string.h>\n\n"
 
-    file.print "/* ã¢ã³ãã¼ã·ã£ã©é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ */\n"
-    # signature ã«å«ã¾ãã ãã¹ã¦ã®é¢æ°ã«ã¤ãã¦
+    file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
+    # signature に含まれる すべての関数について
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -756,7 +730,6 @@
   end
 
-  #=== POSTAMBLE é¨ã®ã³ã¼ãçæ
-  # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ãã®å ´åãåã
-ã®ã¢ã³ãã¼ã·ã£ã©é¢æ°ã®çæ
+  #=== POSTAMBLE 部のコード生成
+  # アンマーシャラセルタイプの場合、個々のアンマーシャラ関数の生成
   def gen_postamble file, b_singleton, ct_name, global_name
     if ct_name != @unmarshaler_celltype_name.to_sym then
@@ -764,5 +737,5 @@
     end
 
-    file.print "\n/*** ã¢ã³ãã¼ã·ã£ã©é¢æ° ***/\n\n"
+    file.print "\n/*** アンマーシャラ関数 ***/\n\n"
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -770,5 +743,5 @@
       id = @signature.get_id_from_func_name( f_name )
 
-      # é¢æ°ã¯è¿ãå¤ãæã¤ã?
+      # 関数は返り値を持つか?
       b_ret_er = false
       init_retval = ""
@@ -794,5 +767,5 @@
       file.print "	ER      ercd_;\n"
 
-      # å¼æ°ãååãå¤æ°ã®å®ç¾©
+      # 引数を受取る変数の定義
       params = f.get_declarator.get_type.get_paramlist.get_items
            # FuncHead->  Decl->    FuncType->ParamList
@@ -803,5 +776,5 @@
         dir = par.get_direction
         if( dir == :RECEIVE )then
-          # type ã¯ PtrType ã§ããããåãé¤ããå
+          # type は PtrType で、それを取り除いた型
           type = type.get_type
         end
@@ -821,5 +794,5 @@
         end
 
-        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" ãå¤ã
+        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
         file.printf( "	%-12s %s%s%s%s%s;\n", type_str, aster, name, aster2, type.get_type_str_post, init )
 
@@ -833,11 +806,8 @@
       end
 
-      # in æ¹åã®å
-¥åºåãå
-¥å
-      file.print "\n	/* å
-¥åå¼æ°åå */\n"
+      # in 方向の入出力を入力
+      file.print "\n	/* 入力引数受取 */\n"
       file.print "	SET_RPC_STATE( *state_, RPCSTATE_SERVER_RECV_BODY );\n"
-      b_get = true    # unmarshal ã§ã¯ get
+      b_get = true    # unmarshal では get
       b_marshal  = false
       print_params( params, file, 1, b_marshal, b_get, true, "cServerCall", f_name )
@@ -846,6 +816,6 @@
 
 
-      # ãã±ããã®åä¿¡å®äº
-      file.print "	/* ãã±ããçµããããã§ãã¯ */\n"
+      # パケットの受信完了
+      file.print "	/* パケット終わりをチェック */\n"
       file.print "	SET_RPC_STATE( *state_, RPCSTATE_SERVER_RECV_EOP );\n"
       if ! f_type.is_oneway? then
@@ -857,10 +827,10 @@
       file.print "		goto error_reset;\n\n"
 
-      # out ã®ã¡ã¢ãªãã¢ã­ã±ã¼ã
+      # out のメモリをアロケート
       dir = :OUT; alloc_cp = "cPPAllocator_alloc"; alloc_cp_extra = nil; nest = 1
       alloc_for_out_params( params, file, nest, dir, alloc_cp, alloc_cp_extra )
 
-      # å¯¾è±¡é¢æ°ãå¼åºã
-      file.print "	/* å¯¾è±¡é¢æ°ã®å¼åºã */\n"
+      # 対象関数を呼出す
+      file.print "	/* 対象関数の呼出し */\n"
       file.print "	SET_RPC_STATE( *state_, RPCSTATE_SERVER_EXEC );\n"
       if b_void then
@@ -881,11 +851,10 @@
       file.print( " );\n" )
 
-      # æ»ãå¤ãåºåå¼æ°ã®ååã³ã¼ãã®çæ
-
-      # oneway ã®å ´ååºåãæ»ãå¤ãç¡ããååãå¾
-ããªãï¼éåæãªå¼åºãï¼
+      # 戻り値、出力引数の受取コードの生成
+
+      # oneway の場合出力、戻り値が無く、受取を待たない（非同期な呼出し）
       if ! f.is_oneway? then
 
-        file.print "\n	/* SOPã®éåº */\n"
+        file.print "\n	/* SOPの送出 */\n"
         file.print "	SET_RPC_STATE( *state_, RPCSTATE_SERVER_SEND_SOP );\n"
 
@@ -893,7 +862,7 @@
         file.print "		goto error_reset;\n"
 
-        b_get = false     # unmarshaler ã¯ put
+        b_get = false     # unmarshaler は put
         if( ! b_void )then
-          file.print "	/* æ»ãå¤ã®éåº */\n"
+          file.print "	/* 戻り値の送出 */\n"
           print_param( "retval_", f_type.get_type, file, 1, :RETURN, nil, nil, b_marshal, b_get )
         end
@@ -908,10 +877,10 @@
           indent = "	" * indent_level
 
-          file.print "#{indent}/* åºåå¤ã®éåº */\n"
+          file.print "#{indent}/* 出力値の送出 */\n"
           file.print "#{indent}SET_RPC_STATE( *state_, RPCSTATE_SERVER_SEND_BODY );\n"
           print_params( params, file, indent_level, b_marshal, b_get, true, "cServerCall", f_name )
           print_params( params, file, indent_level, b_marshal, b_get, false, "cServerCall", f_name )
 
-          # receive ã®ã¡ã¢ãªããã¢ã­ã±ã¼ã
+          # receive のメモリをデアロケート
           if f_type.has_receive? then
             file.print "#{indent}/* dealloc receive parameter */\n"
@@ -925,5 +894,5 @@
         end
 
-        file.print "	/* ãã±ããã®çµããï¼æãã ãï¼ */\n"
+        file.print "	/* パケットの終わり（掃きだし） */\n"
         file.print "	SET_RPC_STATE( *state_, RPCSTATE_SERVER_SEND_EOP );\n"
         file.print "	if( (ercd_=cTDR_sendEOP(false)) != E_OK )\n"  # b_continue = false
@@ -936,5 +905,5 @@
 error_reset:
 EOT
-      # send ã®ãªã»ããç¨ãã¢ã­ã±ã¼ã
+      # send のリセット用デアロケート
       if f_type.has_send? then
         file.print "	/* dealloc send parameter */\n"
@@ -945,5 +914,5 @@
       end
 
-      # receive ã®ã¡ã¢ãªããã¢ã­ã±ã¼ã
+      # receive のメモリをデアロケート
       if f_type.has_receive? && b_ret_er then
         file.print "	/* dealloc receive parameter */\n"
@@ -957,7 +926,5 @@
       file.print "}\n\n"
 
-      # ããï¼åã
-ã®é¢æ°ï¼ã§ã¯ã¨ã©ã¼ãã³ãã©ã¼ã¯å¼ã³åºããªããå¼ã³å
-ï¼ãµã¼ãã¼ã®ã¡ã¤ã³é¢æ°ï¼ã§å¼ã³åºãã
+      # ここ（個々の関数）ではエラーハンドラーは呼び出さない。呼び元（サーバーのメイン関数）で呼び出す。
     }
   end
@@ -966,12 +933,9 @@
   #b_marshal:: bool
   #b_get:: bool
-  #  b_marshal = true  && b_get == false   :  ãã¼ã·ã£ã©ã§å
-¥åå¼æ°éåº
-  #  b_marshal = true  && b_get == true    :  ãã¼ã·ã£ã©ã§åºåå¼æ°åå
-  #  b_marshal = false && b_get == false   :  ã¢ã³ãã¼ã·ã£ã©ã§å
-¥åå¼æ°åå
-  #  b_marshal = false && b_get == true    :  ã¢ã³ãã¼ã·ã£ã©ã§åºåå¼æ°éåº
-  #b_referenced:: size_is, count_is, string ã§åç
-§ããã¦ãããã®ãåºå
+  #  b_marshal = true  && b_get == false   :  マーシャラで入力引数送出
+  #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
+  #  b_marshal = false && b_get == false   :  アンマーシャラで入力引数受取
+  #  b_marshal = false && b_get == true    :  アンマーシャラで出力引数送出
+  #b_referenced:: size_is, count_is, string で参照されているものを出力
   def print_params( params, file, nest, b_marshal, b_get, b_referenced, port_name, func_name )
     params.each{ |param|
@@ -996,5 +960,5 @@
         case dir
         when :OUT, :INOUT
-          alloc_cp = nil        # inout ã® b_get==true&&b_marsha==true ã®ã¨ãã¢ã­ã±ã¼ã¿ã³ã¼ãã¯ä¸ç¨
+          alloc_cp = nil        # inout の b_get==true&&b_marsha==true のときアロケータコードは不用
           alloc_cp_extra = nil
           print_param( param.get_name, param.get_type, file, nest, dir, nil, nil, b_marshal, b_get, alloc_cp, alloc_cp_extra )
@@ -1003,8 +967,8 @@
           alloc_cp_extra = nil
           if b_get then
-            outer = "(*"         # ãã¼ã·ã£ã©å´ã§ã¯ããã¤ã³ã¿ã (send ã¨æ¯ã¹) ä¸ã¤å¤ã
+            outer = "(*"         # マーシャラ側では、ポインタが (send と比べ) 一つ多い
             outer2 = ")"
           else
-            outer = nil          # ã¢ã³ãã¼ã·ã£ã©å´ã§ã¯ããã¤ã³ã¿ãä¸ã¤å¤ããã¦ãã
+            outer = nil          # アンマーシャラ側では、ポインタが一つ外されている
             outer2 = nil
           end
@@ -1016,5 +980,5 @@
   end
 
-  #=== ã¢ã­ã±ã¼ã¿ã³ã¼ããçæ (out ã®ã¢ã³ãã¼ã·ã£ã©ç¨)
+  #=== アロケータコードを生成 (out のアンマーシャラ用)
   def alloc_for_out_params( params, file, nest, dir, alloc_cp, alloc_cp_extra )
     params.each{ |param|
@@ -1026,5 +990,5 @@
   end
 
-  #=== ã¢ã­ã±ã¼ã¿ã³ã¼ããçæ (out ã®ã¢ã³ãã¼ã·ã£ã©ç¨åå¥ãã©ã¡ã¼ã¿ã®çæ)
+  #=== アロケータコードを生成 (out のアンマーシャラ用個別パラメータの生成)
   def alloc_for_out_param( name, type, file, nest, outer, outer2, alloc_cp, alloc_cp_extra )
     org_type = type.get_original_type
@@ -1039,5 +1003,5 @@
       count = type.get_count; size = type.get_size; string = type.get_string
       if count || size || string then
-        loop_counter_type = IntType.new(16)   # mikan æ¹ã size_is, count_is ã®å¼æ°ã®åã¨ãã
+        loop_counter_type = IntType.new(16)   # mikan 方を size_is, count_is の引数の型とする
         if count then
           len = type.get_count.to_s
@@ -1052,6 +1016,5 @@
         end
 
-        # size_is ã« max æå®ãããå ´åãlength ã max ãè¶
-ãã¦ããããã§ãã¯ããã³ã¼ããçæ
+        # size_is に max 指定がある場合、length が max を超えているかチェックするコードを生成
         if org_type.get_max != nil && string == nil then
           file.print "#{indent}if( #{len} > #{type.get_max} ){\t/* GenOpaqueMarshaler max check 2 */\n"
@@ -1092,6 +1055,6 @@
   end
 
-  #=== å¼æ°ã®ä¸æ¬ãã¢ã­ã±ã¼ãã³ã¼ãã®çæ
-  # sendï¼ãã¼ã·ã£ã©ã®æå¾ãreceiveï¼ã¢ã³ãã¼ã·ã£ã©ã®æå¾ã§ä¸æ¬ãã¦å¼æ°ããã¢ã­ã±ã¼ããã
+  #=== 引数の一括デアロケートコードの生成
+  # send：マーシャラの最後、receive：アンマーシャラの最後で一括して引数をデアロケートする
   def dealloc_for_params( params, file, nest, dir, dealloc_cp, b_reset = false )
     if b_reset then
@@ -1107,5 +1070,5 @@
         aster = ""
         if dir == :RECEIVE then
-          type = type.get_type.get_original_type   # ãã¤ã³ã¿ãä¸ã¤å¤ã
+          type = type.get_type.get_original_type   # ポインタを一つ外す
           if b_reset then
             aster = "*"
@@ -1128,7 +1091,6 @@
   end
 
-  #== out ã§ nullable ãªå¼æ°ã®æ
-å ±ãæ¸¡ã
-  # out nullable ã®å ´åãin, send, receive ã®ããã«ãå¤ãæ¸¡ãç´åã§ã¯ãªããå¼åºãæã«æ¸¡ã
+  #== out で nullable な引数の情報を渡す
+  # out nullable の場合、in, send, receive のように、値を渡す直前ではなく、呼出し時に渡す
   def  print_out_nullable( params, file, nest, b_marshal );
     indent = "\t" * nest
@@ -1140,6 +1102,5 @@
         file.print "#{indent}\tgoto error_reset;\n"
       else
-        # å¼ã³å
-ã¯ alloc_for_out_param ã§ nullable ã®å¯¾å¿ãã
+        # 呼び先は alloc_for_out_param で nullable の対応する
         file.print "#{indent}if( (ercd_=cTDR_getInt8( &b_#{param.get_name}_null_)) != E_OK )\n"
         file.print "#{indent}\tgoto error_reset;\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenParamCopy.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenParamCopy.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenParamCopy.rb	(revision 389)
@@ -6,47 +6,32 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
@@ -55,11 +40,11 @@
 #= ParamCopy
 #
-# ãã©ã¡ã¼ã¿ã³ãã¼ãããã¼ã·ã£ã©ï¼ã¢ã³ãã¼ã·ã£ã©ã³ã¼ããçæããã¡ã½ãã print_param ãæä¾ããï¼
-# RPCPlugin, OpaqueRPCPlugin ã« include ãããï¼
-# RPCPlugin (ãã©ã³ã¹ãã¢ã¬ã³ã) ã§ã¯ãoneway é¢æ°ã§ in ã®ãã¤ã³ã¿å¼æ°ã®å ´åã«éã£ã¦ print_param ãç¨ããããï¼
+# パラメータコピーするマーシャラ／アンマーシャラコードを生成するメソッド print_param を提供する．
+# RPCPlugin, OpaqueRPCPlugin に include される．
+# RPCPlugin (トランスペアレント) では、oneway 関数で in のポインタ引数の場合に限って print_param が用いられる．
 #
 module  GenParamCopy
 
-  #=== å¼æ°ã®è»¢éã³ã¼ããçæ
+  #=== 引数の転送コードを生成
 
   def print_param( name, type, file, nest, dir, outer, outer2, b_marshal, b_get, alloc_cp = nil, alloc_cp_extra = nil, name_list = nil )
@@ -76,5 +61,5 @@
 EOT
         if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then
-          # send, receive ã®å ´åã¯ãã¨ã©ã¼ãªã»ããã«åã NULL ã«ãã
+          # send, receive の場合は、エラーリセットに備え NULL にする
           file.print <<EOT
 #{indent}memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post})*(#{size_str});   /* GenParamCopy Alloc1 */
@@ -103,5 +88,5 @@
         when :SIGNED
           if bit_size == -1 || bit_size == -11 then
-            sign = "S"   # signed char ã®å ´åã®ã¿ S ãã¤ã
+            sign = "S"   # signed char の場合のみ S がつく
           else
             sign = ""
@@ -156,5 +141,5 @@
         nest = print_nullable_pre( name, type, file, nest, dir, outer, outer2, b_marshal, b_get )
         indent = "\t" * nest
-        loop_counter_type = IntType.new(32)   # mikan åã size_is, count_is ã®å¼æ°ã®åã¨ãã
+        loop_counter_type = IntType.new(32)   # mikan 型を size_is, count_is の引数の型とする
         file.print "#{indent}{\t/* GenParamCopy 4 */\n"
         file.print "#{indent}	#{loop_counter_type.get_type_str}  i__#{nest}, length__#{nest};\n"
@@ -168,13 +153,11 @@
             count_str = count.to_str( name_list, outer, outer2 )
           else
-            # size_is ã¯å¿
-é . count_is ã¯ãªãã·ã§ã³
+            # size_is は必須. count_is はオプション
             count_str = size_str
           end
           file.print "#{indent}	length__#{nest} = #{count_str};\t/* GenParamCopy 5 */\n"
 
-          # size_is ã« max æå®ãããå ´åãlength ã max ãè¶
-ãã¦ããããã§ãã¯ããã³ã¼ããçæ
-              # alloc_cp == nil ã®ã¨ã dir ã¯ INOUT, OUT ã®ã¯ã (æ¡ä»¶ãåé·)ãè©¦é¨ãçµãã£ã¦ããã®ã§ãæ¬¡åè¦ç´ãæã«å¤ã
+          # size_is に max 指定がある場合、length が max を超えているかチェックするコードを生成
+              # alloc_cp == nil のとき dir は INOUT, OUT のはず (条件が冗長)。試験が終わっているので、次回見直し時に外す
           if b_get && type.get_max != nil && ! ( ( dir == :INOUT || dir == :OUT ) && alloc_cp == nil ) then
             file.print "#{indent}	if( length__#{nest} > #{type.get_max.to_s} ){\t/* GenParamCopy max check 1 */\n"
@@ -202,15 +185,15 @@
               file.print "#{indent}	length__#{nest} = STRLEN#{b_size}(#{outer}#{name}#{outer2})+1;\t/* GenParamCopy 7 */\n"
             end
-            size_str = "length__#{nest}"     # string ã®å ´åãstrnlen ä»¥ä¸ã®é åãç¢ºä¿ããªã
+            size_str = "length__#{nest}"     # string の場合、strnlen 以上の領域を確保しない
           else
             if ( dir == :INOUT ) then
               if ( string.instance_of? Expression ) then
                 len = string.to_str( name_list, outer, outer2 )
-                size_str = "#{len}"              # string(len) ã®å ´å len ãç¢ºä¿ãã
+                size_str = "#{len}"              # string(len) の場合 len を確保する
               else
                 raise "unsuscripted string used for inout parameter #{name}"
               end
             else
-              size_str = "length__#{nest}"     # string ã®å ´åãstrnlen ä»¥ä¸ã®é åãç¢ºä¿ããªã
+              size_str = "length__#{nest}"     # string の場合、strnlen 以上の領域を確保しない
             end
           end
@@ -224,5 +207,5 @@
 EOT
           if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then
-            # send, receive ã®å ´åã¯ãã¨ã©ã¼ãªã»ããã«åã NULL ã«ãã
+            # send, receive の場合は、エラーリセットに備え NULL にする
             file.print <<EOT
 #{indent}	memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post})*(#{size_str}) );   /* GenParamCopy Alloc2 */
@@ -251,5 +234,5 @@
 EOT
           if ( dir == :SEND || dir == :RECEIVE ) && type.get_type.has_pointer? then
-            # send, receive ã®å ´åã¯ãã¨ã©ã¼ãªã»ããã«åã NULL ã«ãã
+            # send, receive の場合は、エラーリセットに備え NULL にする
             file.print <<EOT
 #{indent}memset( (void *)#{outer}#{name}#{outer2}#{alloc_cp_extra}, 0, sizeof(#{type.get_type.get_type_str}#{type.get_type.get_type_str_post}) );   /* GenParamCopy Alloc3 */
@@ -286,5 +269,5 @@
         size_str = subsc.to_str( name_list, outer, outer2 )
 
-        loop_counter_type = IntType.new(32)   # mikan åã size_is, count_is ã®å¼æ°ã®åã¨ãã
+        loop_counter_type = IntType.new(32)   # mikan 型を size_is, count_is の引数の型とする
         file.print "#{indent}{\t/* GenParamCopy 11 */\n"
         file.print "#{indent}	#{loop_counter_type.get_type_str}  i__#{nest}, length__#{nest} = #{size_str};\n"
@@ -302,6 +285,5 @@
     if type.is_nullable? then
       indent = "	" * nest
-      if dir == :OUT then  # OUT ã®å ´å print_out_nullable ã§ NULL ãã©ããã®æ
-å ±ãæ¸¡ã
+      if dir == :OUT then  # OUT の場合 print_out_nullable で NULL かどうかの情報を渡す
         # 'null or not' is sent in the function 'print_out_nullable'
         if b_get then
@@ -321,6 +303,5 @@
 #{indent}	if( ! b_null_ ){
 EOT
-          else # dir = :INOUT, b_marshal = true, b_get = true ã®å ´åãNULL ãã©ããã®æ
-å ±ãæ¸¡ããªã
+          else # dir = :INOUT, b_marshal = true, b_get = true の場合、NULL かどうかの情報を渡さない
             file.print <<EOT
 #{indent}	int8_t  b_null_ = (#{outer}#{name}#{outer2} == NULL);\t/* GenParamCopy Null 21 */
@@ -335,5 +316,5 @@
 
           if ! ( dir == :INOUT && b_marshal == false ) then
-            # dir = :INOUT, b_marshal = false, b_get = false ã®å ´å
+            # dir = :INOUT, b_marshal = false, b_get = false の場合
             file.print <<EOT
 #{indent}	if((ercd_=cTDR_putInt8( b_null_ )) != E_OK )\t/* GenParamCopy Null 32 */
@@ -355,6 +336,5 @@
   def print_nullable_post( name, type, file, nest, dir, outer, outer2, b_marshal, b_get )
     if type.is_nullable? then
-      if dir == :OUT then  # OUT ã®å ´å print_out_nullable ã§ NULL ãã©ããã®æ
-å ±ãæ¸¡ã
+      if dir == :OUT then  # OUT の場合 print_out_nullable で NULL かどうかの情報を渡す
         nest -= 1
         indent = "	" * nest
@@ -371,5 +351,5 @@
 #{indent}	}  /* ! b_null_ */
 EOT
-          else # dir = :INOUT, b_marshal = true   # inout ã® out æ¹å
+          else # dir = :INOUT, b_marshal = true   # inout の out 方向
             file.print "#{indent}	}  /* ! b_null_  GenParamCopy Null 52 */\n"
           end
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/GenTransparentMarshaler.rb	(revision 389)
@@ -6,52 +6,37 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#ãã©ã°ã¤ã³ãªãã·ã§ã³ç¨å¤æ°
+#プラグインオプション用変数
 #@task_priority:: Integer
 #@channelCelltype:: String
@@ -60,5 +45,5 @@
 module GenTransparentMarshaler
 
-  # ãã©ã°ã¤ã³å¼æ°åã¨ Proc
+  # プラグイン引数名と Proc
   RPCPluginArgProc = {
     "taskPriority"    => Proc.new { |obj,rhs| obj.set_taskPriority rhs },
@@ -69,10 +54,10 @@
   }
 
-  #=== ãã©ã°ã¤ã³å¼æ° taskPriority ã®ãã§ãã¯
+  #=== プラグイン引数 taskPriority のチェック
   def set_taskPriority( rhs )
     @task_priority = rhs
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° channelCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 channelCelltype のチェック
   def set_channelCelltype( rhs )
     @channelCelltype = rhs.to_sym
@@ -86,5 +71,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° TDRCelltype ã®ãã§ãã¯
+  #=== プラグイン引数 TDRCelltype のチェック
   def set_TDRCelltype( rhs )
     @TDRCelltype = rhs.to_sym
@@ -98,5 +83,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° channelCellName ã®ãã§ãã¯
+  #=== プラグイン引数 channelCellName のチェック
   def set_channelCellName( rhs )
     @channelCellName = rhs
@@ -108,10 +93,10 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° PPAllocatorSize ã®ãã§ãã¯
+  #=== プラグイン引数 PPAllocatorSize のチェック
   def set_PPAllocatorSize( rhs )
     @PPAllocatorSize = rhs
   end
 
-  #=== marshaler ã®ã»ã«ã¿ã¤ãåãè¨­å®ãã
+  #=== marshaler のセルタイプ名を設定する
   def initialize_transparent_marshaler cell_name
     @task_priority = 8
@@ -135,6 +120,5 @@
 
     f = CFile.open( @marshaler_celltype_file_name, "w" )
-    # åãå
-å®¹ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯)
+    # 同じ内容を二度書く可能性あり (AppFile は不可)
 
     f.print <<EOT
@@ -157,9 +141,9 @@
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½ã³ã¼ããçæï¼é ­é¨ã¨æ«å°¾ã¯å¥éåºåï¼
-  #ct_name:: Symbol    (through ãã©ã°ã¤ã³ã§çæããã) ã»ã«ã¿ã¤ãå ï¼Symbol ã¨ãã¦éããã¦ããï¼ãããï¼
+  #===  受け口関数の本体コードを生成（頭部と末尾は別途出力）
+  #ct_name:: Symbol    (through プラグインで生成された) セルタイプ名 ．Symbol として送られてくる（らしい）
   def gen_ep_func_body( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
-    # unmarshaler ã¯ã©ã¹ã?
+    # unmarshaler クラスか?
     if ct_name == @unmarshaler_celltype_name.to_sym then
       gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
@@ -169,5 +153,5 @@
   end
 
-  #===  marshal ã³ã¼ãã®çæ
+  #===  marshal コードの生成
   def gen_ep_func_body_marshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
@@ -175,9 +159,8 @@
     b_ret_er = false
 
-    # é¢æ°ã®æ»ãå¤ã®å
-ã®åãå¾ã(typedef ããã¦ããå ´å)
+    # 関数の戻り値の元の型を得る(typedef されている場合)
     type = func_type.get_type.get_original_type
 
-    # æ»ãå¤è¨æ¶ç¨ã®å¤æ°ãåºåï¼void åã®é¢æ°ã§ã¯åºåããªãï¼
+    # 戻り値記憶用の変数を出力（void 型の関数では出力しない）
     if ! type.is_void? then
       if func_type.get_type.kind_of?( DefinedType ) && ( func_type.get_type.get_type_str == "ER" || func_type.get_type.get_type_str == "ER_INT" ) then
@@ -194,16 +177,15 @@
     file.print( "    FLGPTN  flgptn;\n" )
 
-    # å¼ã³å
-ã® signature ãåãåºã
+    # 呼び先の signature を取り出す
     signature = @signature
 
-    # é¢æ° ID ï¼æ´æ°å¤ï¼
+    # 関数 ID （整数値）
     func_id = signature.get_id_from_func_name( func_name )
     file.print( "    int16_t  func_id_ = #{func_id};    /* id of #{func_name}: #{func_id} */\n" )
 
-    # ã·ã³ã°ã«ãã³ã§ãªããï¼
+    # シングルトンでないか？
     if ! b_singleton then
 
-      # singleton ã§ãªããã° p_cellcb åå¾ã³ã¼ããåºå
+      # singleton でなければ p_cellcb 取得コードを出力
       file.print <<EOT
     #{ct_name}_CB *p_cellcb;
@@ -213,5 +195,5 @@
 EOT
 
-      # ã¨ã©ã¼ãè¿ããï¼
+      # エラーを返すか？
       if b_ret_er then
         file.print <<EOT
@@ -223,11 +205,11 @@
         file.print <<EOT
     }else{
-        /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
-    }
-EOT
-      end
-    end
-
-    # channel lock ã³ã¼ã
+        /* エラー処理コードをここに記述 */
+    }
+EOT
+      end
+    end
+
+    # channel lock コード
     file.print <<EOT
     /* Channel Lock */
@@ -237,11 +219,11 @@
 EOT
 
-    # SOP ãéä¿¡
-    file.print "    /* SOPã®éåº */\n"
+    # SOP を送信
+    file.print "    /* SOPの送出 */\n"
     file.print "    if( ( ercd_ = cTDR_sendSOP( true ) ) != E_OK )\n"
     file.print "      goto error_reset;\n"
 
-    # func_id ãéä¿¡
-    file.print "    /* é¢æ° id ã®éåº */\n"
+    # func_id を送信
+    file.print "    /* 関数 id の送出 */\n"
     file.print "    if( ( ercd_ = cTDR_putInt16( func_id_ ) ) != E_OK )\n"
     file.print "        goto error_reset;\n"
@@ -250,11 +232,9 @@
     # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
 
-    b_get = false    # marshal ãªã put
+    b_get = false    # marshal なら put
     b_marshal = true  # marshal
 
-    # in æ¹åã®å
-¥åºåãåºå
-    file.print "    /* å
-¥åå¼æ°éåº */\n"
+    # in 方向の入出力を出力
+    file.print "    /* 入力引数送出 */\n"
     print_params( params, file, 1, b_marshal, b_get, true, func_type.is_oneway? )
     print_params( params, file, 1, b_marshal, b_get, false, func_type.is_oneway? )
@@ -264,5 +244,5 @@
     end
 
-    file.print "    /* EOPã®éåºï¼ãã±ããã®æãã ãï¼ */\n"
+    file.print "    /* EOPの送出（パケットの掃きだし） */\n"
     if ! func_type.is_oneway? then
       b_continue = "true"
@@ -293,6 +273,5 @@
 
     if( b_void == false )then
-      # å¼ã³å
-ã«æ»ãå¤ããªã¿ã¼ã³
+      # 呼び元に戻り値をリターン
       file.print( "    return retval_;\n" )
     else
@@ -307,5 +286,5 @@
 EOT
 
-    # channel lock ã³ã¼ã
+    # channel lock コード
     file.print <<EOT
     /* Channel Lock */
@@ -316,6 +295,5 @@
 
     if( b_ret_er != false )then
-      # å¼ã³å
-ã«æ»ãå¤ããªã¿ã¼ã³
+      # 呼び元に戻り値をリターン
       file.print( "    return ercd_;\n" )
     else
@@ -325,5 +303,5 @@
   end
 
-  #===  unmarshal ã³ã¼ãã®çæ
+  #===  unmarshal コードの生成
   def gen_ep_func_body_unmarshal( file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params )
 
@@ -331,5 +309,5 @@
     b_ret_er = false
 
-    # func_id ãå¾ãã³ã¼ããçæ
+    # func_id を得るコードを生成
     file.print <<EOT
 
@@ -352,5 +330,5 @@
         file.print <<EOT
     }else{
-        /* ã¨ã©ã¼å¦çã³ã¼ããããã«è¨è¿° */
+        /* エラー処理コードをここに記述 */
     }
 EOT
@@ -359,8 +337,8 @@
     file.print <<EOT
 
-    /* SOPã®ãã§ãã¯ */
+    /* SOPのチェック */
     if( (ercd_=cTDR_receiveSOP( false )) != E_OK )
         goto error_reset;
-    /* func_id ã®åå¾ */
+    /* func_id の取得 */
     if( (ercd_=cTDR_getInt16( &func_id_ )) != E_OK )
         goto error_reset;
@@ -372,11 +350,10 @@
 EOT
 
-    # å¼ã³å
-ã® signature ãåãåºã
+    # 呼び先の signature を取り出す
     # port = @celltype.find( @next_cell_port_name )
     # signature = port.get_signature
     signature = @signature
 
-    # through ã® signature ã«å«ã¾ãã ãã¹ã¦ã®é¢æ°ã«ã¤ãã¦
+    # through の signature に含まれる すべての関数について
     signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -384,5 +361,5 @@
       id = signature.get_id_from_func_name( f_name )
 
-      # é¢æ°ã¯è¿ãå¤ãæã¤ã?
+      # 関数は返り値を持つか?
       if f_type.get_type.is_void? then
         b_void = true
@@ -391,5 +368,5 @@
       end
 
-      # ãã±ããã®çµããããã§ãã¯ï¼æªåãåãã®ãã¼ã¿ãæ®ã£ã¦ããªãããã§ãã¯ï¼
+      # パケットの終わりをチェック（未受け取りのデータが残っていないかチェック）
       file.print "    case #{id}:       /*** #{f_name} ***/ \n"
       file.print "        if( tTransparentUnmarshaler_#{@signature.get_global_name}_#{f_name}() != E_OK )\n"
@@ -400,5 +377,5 @@
 
     if @PPAllocatorSize then
-      ppallocator_dealloc_str = "    /* PPAllocator ã®ãã¹ã¦ãè§£æ¾ */\n    cPPAllocator_dealloc_all();"
+      ppallocator_dealloc_str = "    /* PPAllocator のすべてを解放 */\n    cPPAllocator_dealloc_all();"
     else
       ppallocator_dealloc_str = ""
@@ -423,10 +400,8 @@
 
   # IN b_marshal, b_get
-  #  b_marshal = true  && b_get == false   :  ãã¼ã·ã£ã©ã§å
-¥åå¼æ°éåº
-  #  b_marshal = true  && b_get == true    :  ãã¼ã·ã£ã©ã§åºåå¼æ°åå
-  #  b_marshal = false && b_get == true    :  ã¢ã³ãã¼ã·ã£ã©ã§å
-¥åå¼æ°åå
-  #  b_marshal = false && b_get == get     :  ã¢ã³ãã¼ã·ã£ã©ã§åºåå¼æ°éåº
+  #  b_marshal = true  && b_get == false   :  マーシャラで入力引数送出
+  #  b_marshal = true  && b_get == true    :  マーシャラで出力引数受取
+  #  b_marshal = false && b_get == true    :  アンマーシャラで入力引数受取
+  #  b_marshal = false && b_get == get     :  アンマーシャラで出力引数送出
   def print_params( params, file, nest, b_marshal, b_get, b_referenced, b_oneway = false )
     params.each{ |param|
@@ -439,5 +414,5 @@
       type = param.get_type
       if b_oneway && dir == :IN && type.get_original_type.kind_of?( PtrType ) || type.get_original_type.kind_of?( ArrayType ) then
-        # oneway, in, PtrType ã®å ´åã³ãã¼
+        # oneway, in, PtrType の場合コピー
         alloc_cp = "cPPAllocator_alloc"
         alloc_cp_extra = nil
@@ -461,5 +436,5 @@
   end
 
-  #=== ã³ãã¼ããªãå¼æ°æ¸¡ãã³ã¼ãã®åºå
+  #=== コピーしない引数渡しコードの出力
   def print_param_nc( name, type, file, nest, b_marshal, outer, outer2, b_get )
     indent = "    " * ( nest + 1 )
@@ -481,5 +456,5 @@
         when :SIGNED
           if bit_size == -1 || bit_size == -11 then
-            # signed char ã®å ´åãsigned ãæå®ãã
+            # signed char の場合、signed を指定する
             signC = "S"
             sign  = "s"
@@ -574,6 +549,6 @@
 
 
-  #=== PREAMBLE é¨ã®ã³ã¼ãçæ
-  # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ãã®å ´åãã¢ã³ãã¼ã·ã£ã©é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ãçæ
+  #=== PREAMBLE 部のコード生成
+  # アンマーシャラセルタイプの場合、アンマーシャラ関数のプロトタイプ宣言を生成
   def gen_preamble file, b_singleton, ct_name, global_name
     if ct_name != @unmarshaler_celltype_name.to_sym then
@@ -581,6 +556,6 @@
     end
 
-    file.print "/* ã¢ã³ãã¼ã·ã£ã©é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ */\n"
-    # signature ã«å«ã¾ãã ãã¹ã¦ã®é¢æ°ã«ã¤ãã¦
+    file.print "/* アンマーシャラ関数のプロトタイプ宣言 */\n"
+    # signature に含まれる すべての関数について
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -592,6 +567,6 @@
   end
 
-  #=== POSTAMBLE é¨ã®ã³ã¼ãçæ
-  # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã¿ã¤ãã®å ´åãã¢ã³ãã¼ã·ã£ã©é¢æ°ã®çæ
+  #=== POSTAMBLE 部のコード生成
+  # アンマーシャラセルタイプの場合、アンマーシャラ関数の生成
   def gen_postamble file, b_singleton, ct_name, global_name
     if ct_name != @unmarshaler_celltype_name.to_sym then
@@ -599,5 +574,5 @@
     end
 
-    file.print "\n/*** ã¢ã³ãã¼ã·ã£ã©é¢æ° ***/\n\n"
+    file.print "\n/*** アンマーシャラ関数 ***/\n\n"
     @signature.get_function_head_array.each { |f|
       f_name = f.get_name
@@ -605,5 +580,5 @@
       id = @signature.get_id_from_func_name( f_name )
 
-      # é¢æ°ã¯è¿ãå¤ãæã¤ã?
+      # 関数は返り値を持つか?
       if f_type.get_type.is_void? then
         b_void = true
@@ -624,5 +599,5 @@
       file.print "	CELLCB  *p_cellcb;\n"
 
-      # å¼æ°ãååãå¤æ°ã®å®ç¾©
+      # 引数を受取る変数の定義
       param_list = f.get_declarator.get_type.get_paramlist.get_items
            # FuncHead->  Decl->    FuncType->ParamList
@@ -639,13 +614,13 @@
         end
 
-        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" ãå¤ã
+        type_str = type.get_type_str.gsub( /\bconst\b */, "" ) # "const" を外す
 
         file.printf( "    %-12s %s%s%s%s;\n", type_str, aster, name, aster2, type.get_type_str_post )
       }
 
-      # æ»ãå¤ãåãåãå¤æ°ã®å®ç¾©
+      # 戻り値を受け取る変数の定義
       if ! b_void then
         if f.is_oneway? then
-          retval_ptr = ""   # oneway ã®å ´åãåãåããæ¨ã¦ããã
+          retval_ptr = ""   # oneway の場合、受け取るが捨てられる
         else
           retval_ptr = "*"
@@ -654,10 +629,7 @@
       end
 
-      # in æ¹åã®å
-¥åºåãå
-¥å
-      file.print "\n        /* å
-¥åå¼æ°åå */\n"
-      b_get = true    # unmarshal ã§ã¯ get
+      # in 方向の入出力を入力
+      file.print "\n        /* 入力引数受取 */\n"
+      b_get = true    # unmarshal では get
       b_marshal  = false
       print_params( param_list, file, 1, b_marshal, b_get, true, f.is_oneway? )
@@ -668,7 +640,7 @@
       end
 
-      # ãã±ããã®åä¿¡å®äº
-      # mikan æ¬å½ã¯ãå¯¾è±¡é¢æ°ãå¼åºãå¾ã«å®æ½ãããï¼å¼åºããã±ããã®ä½¿ç¨çµãããå®£è¨ããç®çã¨ãã¦
-      file.print "        /* ãã±ããçµããããã§ãã¯ */\n"
+      # パケットの受信完了
+      # mikan 本当は、対象関数を呼出す後に実施したい．呼出しパケットの使用終わりを宣言する目的として
+      file.print "        /* パケット終わりをチェック */\n"
       if ! f.is_oneway? then
         b_continue = "true"
@@ -679,6 +651,6 @@
       file.print "        goto error_reset;\n\n"
 
-      # å¯¾è±¡é¢æ°ãå¼åºã
-      file.print "    /* å¯¾è±¡é¢æ°ã®å¼åºã */\n"
+      # 対象関数を呼出す
+      file.print "    /* 対象関数の呼出し */\n"
       if b_void then
         file.print( "    cServerCall_#{f_name}(" )
@@ -695,11 +667,10 @@
       file.print( " );\n" )
 
-      # æ»ãå¤ãåºåå¼æ°ã®ååã³ã¼ãã®çæ
-
-      # oneway ã®å ´ååºåãæ»ãå¤ãç¡ããååãå¾
-ããªãï¼éåæãªå¼åºãï¼
+      # 戻り値、出力引数の受取コードの生成
+
+      # oneway の場合出力、戻り値が無く、受取を待たない（非同期な呼出し）
       if ! f.is_oneway? then
         file.print <<EOT
-    /* é¢æ°å¦çã®çµäºãéç¥ */
+    /* 関数処理の終了を通知 */
     if( ( ercd_ = cEventflag_set( 0x01 ) ) != E_OK ){
       goto error_reset;
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/lib/MrubyBridgeCelltypePluginModule.rb	(revision 389)
@@ -6,56 +6,40 @@
 #   Copyright (C) 2008-2011 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#== celltype ãã©ã°ã¤ã³ã®å
-±éã®è¦ªã¯ã©ã¹
+#== celltype プラグインの共通の親クラス
 module MrubyBridgeCelltypePluginModule
 
-  # ãã©ã°ã¤ã³å¼æ°å => Proc
+  # プラグイン引数名 => Proc
   MrubyBridgePluginArgProc = { 
       "ignoreUnsigned" => Proc.new { |obj,rhs| obj.set_ignoreUnsigned rhs },
@@ -71,5 +55,5 @@
   @@count = 1
 
-  #celltype::     Celltype        ã»ã«ã¿ã¤ãï¼ã¤ã³ã¹ã¿ã³ã¹ï¼
+  #celltype::     Celltype        セルタイプ（インスタンス）
   def initialize( celltype, option )
     dbgPrint "#{self.class.name}: initialzie: #{celltype.get_name}\n"
@@ -93,15 +77,15 @@
   end
 
-  #=== æ°ããã»ã«
-  #cell::        Cell            ã»ã«
+  #=== 新しいセル
+  #cell::        Cell            セル
   #
-  # celltype ãã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã»ã«ãçæããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ã«å¯¾ããæ°ããã»ã«ã®å ±å
-  # generate æã«ããå¼ã³åºãããå ´åãããã¾ã§ã«å®ç¾©ããã cell ã«ã¤ãã¦ã¯ãinitialize ã®ã¿ã¤ãã³ã°ã§å¼ã³åºããã
+  # celltype プラグインを指定されたセルタイプのセルが生成された
+  # セルタイププラグインに対する新しいセルの報告
+  # generate 文により呼び出された場合、それまでに定義された cell については、initialize のタイミングで呼び出される
   def new_cell( cell )
     dbgPrint "MrubyBridgeCelltypePluginModule: new_cell: #{cell.get_name}\n"
 
-    return if @cell_list.include? cell   # ãã®è¡ã¯ãæ¬æ¥ä¸è¦ã®ã¯ã
-    if TECSGEN.post_coded?               # post_code ä»¥éã®ã»ã«ã¯å¯¾è±¡ããå¤ã
+    return if @cell_list.include? cell   # この行は、本来不要のはず
+    if TECSGEN.post_coded?               # post_code 以降のセルは対象から外す
       cdl_info( "I9999 MrubyBridgeCelltypePlugin: $1 is excluded because cell generated after post_coded", cell.get_name )
       return
@@ -146,13 +130,13 @@
   end
 
-### æå³è§£ææ®µéã§å¼ã³åºãããã¡ã½ãã ###
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+### 意味解析段階で呼び出されるメソッド ###
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
   def gen_cdl_file file
-#   ãã®æ®µéã§å¼ã³ã ãã¨ generate æãå¼ã³åºãããåã®ã»ã«ã®ã¿ã®åºåã¨ãªã
+#   この段階で呼びだすと generate 文が呼び出される前のセルのみの出力となる
     
 #    dbgPrint "MrubyBridgeCelltypePlugin: gen_cdl_file: #{@celltype.get_name}\n"
@@ -175,8 +159,7 @@
   end
 
-  #=== tCelltype_factory.h ã«æ¿å
-¥ããã³ã¼ããçæãã
-  # file ä»¥å¤ã®ä»ã®ãã¡ã¤ã«ã«ãã¡ã¯ããªã³ã¼ããçæãã¦ããã
-  # ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãæå®ãããã»ã«ã¿ã¤ãã®ã¿å¼ã³åºããã
+  #=== tCelltype_factory.h に挿入するコードを生成する
+  # file 以外の他のファイルにファクトリコードを生成してもよい
+  # セルタイププラグインが指定されたセルタイプのみ呼び出される
   def gen_factory file
   end
@@ -187,6 +170,6 @@
 
   @@b_gen_post_code_called = false
-  #=== å¾ãã® CDL ã³ã¼ããçæ
-  #ãã©ã°ã¤ã³ã®å¾ãã® CDL ã³ã¼ããçæ
+  #=== 後ろの CDL コードを生成
+  #プラグインの後ろの CDL コードを生成
   #file:: File: 
   def self.gen_post_code( file )
@@ -198,10 +181,10 @@
     end
 
-#    ãã®æ®µéã§çæããã¨ãåããã¹ãã³ã¼ãã§åºåããã mruby ã®åæåã³ã¼ãã«åæ ãããªã
+#    この段階で生成すると、同じポストコードで出力される mruby の初期化コードに反映されない
     
-#    # MrubyBridgeCelltypePlugin ã®çæãã generate æã¯ã
+#    # MrubyBridgeCelltypePlugin の生成する generate 文は、
 #    fn2 = "#{$gen}/tmp_MrubyBridgeCelltypePlugin_post.cdl"
 #    f2 = File.open( fn2, "w" )
-#    # è¤æ°ã®ãã©ã°ã¤ã³ã® post_code ãä¸ã¤ã®ãã¡ã¤ã«ã«å«ã¾ãããããä»¥ä¸ã®ãããªè¦åºããã¤ãããã¨
+#    # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
 #    dbgPrint "MrubyBridgeCelltypePlugin: gen_post_code\n"
 #    f2.print "/* '#{self.name}' post code */\n"
@@ -219,7 +202,7 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° 
-
-  #=== ãã©ã°ã¤ã³å¼æ° ignoreUnsigned
+  #=== プラグイン引数 
+
+  #=== プラグイン引数 ignoreUnsigned
   def set_ignoreUnsigned rhs
     if rhs == "true" || rhs == nil then
@@ -256,5 +239,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° exclude_port_func
+  #=== プラグイン引数 exclude_port_func
   def set_exclude_port_func rhs
     port_funcs = rhs.split ','
@@ -287,5 +270,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° auto_exclude
+  #=== プラグイン引数 auto_exclude
   def set_auto_exclude rhs
     # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
Index: azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsmerge.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsmerge.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tecsgen/tecsmerge.rb	(revision 389)
@@ -8,65 +8,49 @@
 #   Copyright (C) 2008-2017 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   $Id$
 #++
 
-#= tecsgen  : TECS ã®ãã¼ã¸ã£
+#= tecsgen  : TECS のマージャ
 #
-#Authors::   å¤§å±± åå¸
+#Authors::   大山 博司
 #Version::   
 #Copyright:: Copyright (C) TOPPERS Project, 2008-2017. All rights reserved.
-#License::   TOPPERS ã©ã¤ã»ã³ã¹ã«æºæ 
+#License::   TOPPERS ライセンスに準拠
 
 =begin
-tecsmerge ã¯ãã³ãã¬ã¼ããã¡ã¤ã«ãå
-ã«ä½æãããã»ã«ã¿ã¤ãã³ã¼ãï¼å«ã¤ã³ã©ã¤ã³é¢æ°ãè¨è¿°ããã»ã«ã¿ã¤ãã¤ã³ã©ã¤ã³ãããï¼ãä¿å®ãããã®ã§ããã
-ã»ã«ã¿ã¤ãã«ä»¥ä¸ã®æ¹å¤ãå ããããå ´åã«å¯¾å¿ããã
-ã»åãå£é¢æ°ãå¢ãã
-ã»åãå£ã®ååãå¤æ´ããã
-ã»åãå£é¢æ°ã®ååãå¤æ´ããã
+tecsmerge はテンプレートファイルを元に作成されたセルタイプコード（含インライン関数を記述したセルタイプインラインヘッダ）を保守するものである。
+セルタイプに以下の改変が加えられた場合に対応する。
+・受け口関数が増えた
+・受け口の名前が変更された
+・受け口関数の名前が変更された
 
 % tecsmerge source_dir   dest_dir
@@ -76,12 +60,11 @@
 % tecsmerge -p old_name:new_name source_file dest_dir
 
-source_file ã®ååã¯ _teml.c, _templ.h ã§çµãã£ã¦ããªãã¦ã¯ãªããªã
-dest_file ã¯ source_file ã® _templ ãåãé¤ããååã§ãªãã¦ã¯ãªããªã
-dest_file ãå­å¨ããªãå ´åã_templ ãåãé¤ããååã§ã³ãã¼ããã ãã§ãã
-
-ä»¥ä¸ã®ã­ã¼ã¯ã¼ãã å«ãè¡ãæ¢ã
-
-0) å
-é ­
+source_file の名前は _teml.c, _templ.h で終わっていなくてはならない
+dest_file は source_file の _templ を取り除いた名前でなくてはならない
+dest_file が存在しない場合、_templ を取り除いた名前でコピーするだけである
+
+以下のキーワードを 含む行を探す
+
+0) 先頭
 1) /* #[<PREAMBLE>]#,
 2)  * #[</PREAMBLE>]#
@@ -94,46 +77,45 @@
 7) /* #[<POSTAMBLE>]#
 8)  * #[</POSTAMBLE>]#
-9) çµãã
-
-ä¸è¨ã®ãã¡ 1), 3), 5), 7) ãéå§ã­ã¼ã¯ã¼ãã¨å¼ã¶ã
-ãªããç¹ã«æ­ãã®ãªãå ´åã9) ãéå§ã­ã¼ã¯ã¼ãã«å«ãã
-
-ååã®å¤æ´
-
-a) åãå£åã®å¤æ´
+9) 終わり
+
+上記のうち 1), 3), 5), 7) を開始キーワードと呼ぶ。
+なお、特に断りのない場合、9) も開始キーワードに含む。
+
+名前の変更
+
+a) 受け口名の変更
 
   -p old_port_name:new_port_name
 
-b) åãå£é¢æ°åã®å¤æ´
+b) 受け口関数名の変更
 
   -f old_port_name:new_port_name
 
- old_port_name, new_port_name ã¯ãæ¬¡ã®å½¢å¼ã§ãªãã¦ã¯ãªããªãã
-
-  åãå£å + '_' + é¢æ°å
-
-
-i) ãããï¼
-
-  0) ã¨éå§ã­ã¼ã¯ã¼ãã®é
-
-ii) ãããï¼
-
-  1) ã¨éå§ã­ã¼ã¯ã¼ãã®é
-
-éå¸¸ããããè¤æ°å­å¨ãããã¨ã¯ãªãããè¤æ°å­å¨ããå ´åããã¹ã¦ãã¡ã¤ã«
-ã®å
-é ­ã«åºåãããã
-
-iii) åãå£ããã
-
-  3) ã¨éå§ã­ã¼ã¯ã¼ãã®é
-
-åãå£ãããã¯ãå¾ç¶ã®åãå£é¢æ°ã®åãå£ãè¡¨ããã®ã¨ä»®å®ãããã
-åãå£ãããã¯ãéè¦ã§ã¯ãªãã
-
-iv) åãå£é¢æ°
-
-  5) ã¨éå§ã­ã¼ã¯ã¼ãã®é
+ old_port_name, new_port_name は、次の形式でなくてはならない。
+
+  受け口名 + '_' + 関数名
+
+
+i) ヘッダ１
+
+  0) と開始キーワードの間
+
+ii) ヘッダ２
+
+  1) と開始キーワードの間
+
+通常、これが複数存在することはないが、複数存在した場合、すべてファイル
+の先頭に出力される。
+
+iii) 受け口ヘッダ
+
+  3) と開始キーワードの間
+
+受け口ヘッダは、後続の受け口関数の受け口を表すものと仮定される。
+受け口ヘッダは、重要ではない。
+
+iv) 受け口関数
+
+  5) と開始キーワードの間
 
 =end
@@ -142,7 +124,6 @@
 $n_err   = 0
 $b_show  = false
-$b_exist = false            # ã³ãã¼å
-ã«ãã¡ã¤ã«ãããå ´åã®ã¿ãã¼ã¸
-$old_mode = false           # old_mode (é¢æ°æ¬ä½ã¨ãã¦ /<ENTRY_FUNC> ã®ä»£ããã« '{' ãä½¿ã
+$b_exist = false            # コピー先にファイルがある場合のみマージ
+$old_mode = false           # old_mode (関数本体として /<ENTRY_FUNC> の代わりに '{' を使う
 
 #2.0
@@ -254,10 +235,7 @@
   def self.rewrite_DELIMITERS  delimiters
     delimiters.each{ |stat, stat_info|
-      s = stat_info[0].gsub( /([\*\[\]])/, "\\\\\\1" )   # *, [, ] ã®åã« \\ ãæ¿å
-¥
-      s.gsub!( /\s*\w*_NAME/, "\\s*(\\w*)" )             # ..._NAME ã (w*) ã«å¤æ´
-      s = "^" + s                                        # ^ ãå
-é ­ã«æ¿å
-¥
+      s = stat_info[0].gsub( /([\*\[\]])/, "\\\\\\1" )   # *, [, ] の前に \\ を挿入
+      s.gsub!( /\s*\w*_NAME/, "\\s*(\\w*)" )             # ..._NAME を (w*) に変更
+      s = "^" + s                                        # ^ を先頭に挿入
       stat_info[2] = Regexp.new( s )
       # p stat_info[2]
@@ -269,5 +247,5 @@
   rewrite_DELIMITERS @@DELIMITERS_FUNC_BY_BRACKET
 
-  #=== ã¢ã¼ãã«å¾ã DELIMITERS ã« DELIMITERS_FUNC_BY_* ããã¼ã¸ãã
+  #=== モードに従い DELIMITERS に DELIMITERS_FUNC_BY_* をマージする
   # mode :OLD_FUNC_BODY, :NEW_FUNC_BODY
   def self.merge_DELIMITERS mode
@@ -303,9 +281,9 @@
       line_no += 1
       # p "L: #{line}"
-      b_delim = false        # ããªãã¿ã­ã¼ã¯ã¼ãã®è¡
+      b_delim = false        # デリミタキーワードの行
       @@DELIMITERS.each { |next_stat,stat_info|
 
         next if next_stat == :HEAD || ( next_stat == :EOF && line != nil )
-        # #1002 tecsmerge ã®éåãå£é¢æ° (POSTAMBLEé¨) ã®è¡é ­ã« '{' ãããã¨ã¨ã©ã¼ã«ãªã 	
+        # #1002 tecsmerge の非受け口関数 (POSTAMBLE部) の行頭に '{' があるとエラーになる 	
         if (! $old_mode) && ( /^\{/ =~ line ) && ( stat == :PREAMBLE_BODY || stat == :POSTAMBLE_BODY )
           p line + "  next_stat=" + next_stat.to_s + "stat=" + stat.to_s
@@ -339,6 +317,5 @@
           end
 
-          case stat   # åã®ç¶æ
-
+          case stat   # 前の状態
           when :HEAD
             @head = part
@@ -356,10 +333,10 @@
           when :ENTRY_FUNC_COMMENT
             func_name = arg.to_sym
-            if @entry_port[ port_name ] then   # nil ãªãæ¢ã«ã¨ã©ã¼
+            if @entry_port[ port_name ] then   # nil なら既にエラー
               @entry_port[ port_name ].entry_func_comment[ func_name ] = part
               @entry_port[ port_name ].entry_func_array << func_name
             end
           when :ENTRY_FUNC_BODY, :ENTRY_FUNC_BODY2
-            if @entry_port[ port_name ] then   # nil ãªãæ¢ã«ã¨ã©ã¼
+            if @entry_port[ port_name ] then   # nil なら既にエラー
               @entry_port[ port_name ].entry_func_body[ func_name ] = part
             end
@@ -380,5 +357,5 @@
 
           stat = next_stat
-          arg = $1     # arg ã«åã£ã¦ãã
+          arg = $1     # arg に取っておく
           # p stat, arg
           break
@@ -394,5 +371,5 @@
 
   def check template
-    # template ã«ãªããã®ããã§ãã¯
+    # template にないものをチェック
     @entry_port.each{ |port_name, entry_port|
       temp_entry_port = template.entry_port[port_name]
@@ -415,5 +392,5 @@
     PortRenamer.get_list.each{ |pon,pr|
 
-      # å¯¾è±¡åãå£ãæã
+      # 対象受け口を捜す
       ep = @entry_port[pon]
       if ep == nil then
@@ -422,13 +399,13 @@
       end
 
-      # ãã¼ãã® rename
-      pnn = pr.new_port_name    # ç½®æå¾ã®åå
+      # ポートの rename
+      pnn = pr.new_port_name    # 置換後の名前
       if pnn then
-        # ç½®æããååãããã°ãç»é²ããªãã
+        # 置換する名前があれば、登録しなおす
         renamed_entry_port[pnn] = @entry_port[pon]
         @entry_port.delete pon
       end
 
-      # æå®ãããé¢æ°ã®ç½®æ
+      # 指定された関数の置換
       renamed_func_comment = {}
       renamed_func_body = {}
@@ -453,5 +430,5 @@
       ep.entry_func_body.merge!    renamed_func_body
 
-      # ãã¼ãåã®å¤æ´ã«ããé¢æ°åã®ç½®æ
+      # ポート名の変更による関数名の置換
       renamed_func_comment = {}
       renamed_func_body = {}
@@ -569,5 +546,5 @@
   if FileTest.file?( dst_file ) then
     print( "merging #{src_file} to #{dst_file}\n" )
-    # dst_file ã®èª­è¾¼ã¿
+    # dst_file の読込み
     begin
       dst = open( dst_file )
@@ -584,5 +561,5 @@
     old = CDLContents.new( old_contents )
 
-    # template ã®èª­è¾¼ã¿
+    # template の読込み
     begin
       src = open( src_file )
@@ -620,5 +597,5 @@
 
   elsif $b_exist == false then
-    # src_file ã dst_file ã¸ã³ãã¼
+    # src_file を dst_file へコピー
     begin
       src = File.open( src_file )
@@ -657,6 +634,6 @@
 
 
-#=== ãã¡ã¤ã«ã®ã¨ã³ã³ã¼ãã£ã³ã°ã ASCII-8BIT ã«å¤æ´
-# Ruby 1.9 ä»¥ä¸ã®å ´åã«å¤æ´
+#=== ファイルのエンコーディングを ASCII-8BIT に変更
+# Ruby 1.9 以上の場合に変更
 def set_encoding file
   if RUBY_VERSION >= "1.9.0" then
@@ -666,7 +643,7 @@
 
 #=== rename_dst
-# dst_file ã®ããã¯ã¢ãããã¡ã¤ã«åãæ±ºå®ãããªãã¼ã ãã
-# æåããã°ããªãã¼ã å¾ã®ãã¡ã¤ã«åãè¿ã
-# dst_file ãå­å¨ããªããã°ï¼ãªãã¼ã ã¯è¡ãããï¼nil ãè¿ãã
+# dst_file のバックアップファイル名を決定し、リネームする
+# 成功すれば、リネーム後のファイル名を返す
+# dst_file が存在しなければ（リネームは行われず）nil を返す。
 def rename_dst( dst_file )
   begin
@@ -674,5 +651,5 @@
   rescue
     STDERR.puts( "info: backup not generated for #{dst_file}" )
-    # ãªããã°çµãã
+    # なければ終わり
     return nil
   end
Index: azure_iot_hub/trunk/asp3_dcre/tinet/Makefile.tinet
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/Makefile.tinet	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/Makefile.tinet	(revision 389)
@@ -6,39 +6,27 @@
 #   Copyright (C) 2008-2009 by Hokkaido Industrial Research Institute, JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
-#   ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
-#   è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
-#   ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
-#   å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+#   によって公表されている GNU General Public License の Version 2 に記
+#   述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+#   を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+#   利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次の条件を満たすこと．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 # 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
-#   å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
-#   æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+#   含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+#   接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 #  
 #   @(#) $Id$
@@ -46,9 +34,9 @@
 
 #
-#  ãããã«ã¦ã§ã¢ã® Makefile ã®ã¤ã³ã¯ã«ã¼ããã«è¿½å ããã
-#
-
-#
-#  ã«ã¼ãã«ã®è­å¥
+#  「ミドルウェアの Makefile のインクルード」に追加する。
+#
+
+#
+#  カーネルの識別
 #
 ifdef SRCLANG
@@ -61,10 +49,10 @@
 
 #
-#  TINET ã½ã¼ã¹ãã¡ã¤ã«ã®ãã£ã¬ã¯ããªã®å®ç¾©
+#  TINET ソースファイルのディレクトリの定義
 #
 TINET_ROOT = $(SRCDIR)/tinet
 
 #
-#  TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©
+#  TINET 1.1 との互換性のための定義
 #
 ifndef SUPPORT_INET4
@@ -75,5 +63,5 @@
 
 #
-#  TINET 1.7 ä»¥éã¯ããããã¯ã¼ã¯å±¤ã®æå®ãå¤æ´ããã
+#  TINET 1.7 以降は、ネットワーク層の指定を変更した。
 #
 
@@ -95,8 +83,8 @@
 
 #
-#  ãããã¯ã¼ã¯ãµã¼ãã¹ã«é¢ããå®ç¾©
-#
-
-#  æ±ç¨éä¿¡æ©è½
+#  ネットワークサービスに関する定義
+#
+
+#  汎用通信機能
 
 TINET_DIRS = $(TINET_ROOT)/net:$(TINET_ROOT)/netinet:$(TINET_ROOT)/netinet6
@@ -143,8 +131,8 @@
 	TINET_CDEFS := $(TINET_CDEFS) -DSUPPORT_PPP
 
-#  IPv6ç¨ cp
+#  IPv6用 cp
 	TINET_COBJS := $(TINET_COBJS) ppp_ipv6cp.o
 
-#  IPv4ç¨ cp
+#  IPv4用 cp
 	TINET_COBJS := $(TINET_COBJS) ppp_ipcp.o
 
@@ -158,5 +146,5 @@
 endif
 
-#  ã¿ã¼ã²ããä¾å­ã®å®ç¾©ã®ã¤ã³ã¯ã«ã¼ã
+#  ターゲット依存の定義のインクルード
 
 ifeq ($(TARGET_KERNEL),ASP)
@@ -219,5 +207,5 @@
 
 #
-#  TINET ã©ã¤ãã©ãªã®å®ç¾©
+#  TINET ライブラリの定義
 #
 
@@ -257,6 +245,6 @@
 
 #
-#  ã©ã¤ãã©ãªåããã½ã¼ã¹ãã¡ã¤ã«ããçæããã
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«ã®å®ç¾©
+#  ライブラリ化するソースファイルから生成される
+#  オブジェクトファイルの定義
 #
 TINET_LCOBJS = $(foreach file,$(TINET_LCSRCS),$($(file:.c=)))
@@ -283,6 +271,6 @@
 
 #
-#  ã©ã¤ãã©ãªåããã½ã¼ã¹ãã¡ã¤ã«ããçæããã
-#  ãªãã¸ã§ã¯ããã¡ã¤ã«ã®ä¾å­é¢ä¿ã®å®ç¾©
+#  ライブラリ化するソースファイルから生成される
+#  オブジェクトファイルの依存関係の定義
 #
 $(tcp_usrreq) $(tcp_usrreq:.o=.s) $(tcp_usrreq:.o=.d): tcp_usrreq.c tcpn_usrreq.c
@@ -291,10 +279,10 @@
 
 #
-#  TINET ã©ã¤ãã©ãªã®å®ç¾©
+#  TINET ライブラリの定義
 #
 TINET_LIB_OBJS = $(TINET_LCOBJS)
 
 #
-#  TINET ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®å®ç¾©
+#  TINET コンフィギュレーションファイルの定義
 #
 
@@ -318,6 +306,5 @@
 
 #
-#  å
-±éã³ã³ãã¤ã«ãªãã·ã§ã³ã®å®ç¾©ã¸ã®è¿½å 
+#  共通コンパイルオプションの定義への追加
 #
 CDEFS := $(CDEFS) $(TINET_CDEFS)
@@ -325,10 +312,10 @@
 
 #
-#  TINET ã³ã³ãã¤ã«ãªãã·ã§ã³ã®å®ç¾©ã¸ã®è¿½å 
+#  TINET コンパイルオプションの定義への追加
 #
 TINET_CFLAGS := $(TINET_CFLAGS) -fno-strict-aliasing
 
 #
-#  ã·ã¹ãã ãµã¼ãã¹ãããã«ã¦ã§ã¢ã«é¢ããå®ç¾©
+#  システムサービス、ミドルウェアに関する定義
 #
 
@@ -368,5 +355,5 @@
 
 #
-#  TINET ã©ã¤ãã©ãªãã¡ã¤ã«ã®çæ
+#  TINET ライブラリファイルの生成
 #
 libtinet.a: $(TINET_LIB_OBJS)
@@ -376,5 +363,5 @@
 
 #
-#  ã³ã³ãã¤ã«ã«ã¼ã«ã®å®ç¾©
+#  コンパイルルールの定義
 #
 
@@ -397,5 +384,5 @@
 
 #
-#  ã³ã³ãã¤ã«çµæã®æ¶å»
+#  コンパイル結果の消去
 #
 cleantinet:
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ether_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ether_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ether_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,5 +38,5 @@
 
 /*
- *  Ethernet å¦çã¿ã¹ã¯
+ *  Ethernet 処理タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  Ethernet å¦çã¿ã¹ã¯ã®æ¬ä½
+ *  Ethernet 処理タスクの本体
  */
 
@@ -93,5 +81,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -106,8 +94,8 @@
 
 /*
- *  å¤æ°
- */
-
-/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ */
+ *  変数
+ */
+
+/* ネットワークインタフェース構造体 */
 
 static T_IFNET ether_ifnet;
@@ -115,6 +103,5 @@
 #ifdef SUPPORT_MIB
 
-/*  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB) */
+/*  SNMP の 管理情報ベース (MIB) */
 
 T_IF_STATS if_stats;
@@ -125,5 +112,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -131,6 +118,5 @@
 
 /*
- *  ieee_802_input -- IEEE 802.3 å
-¥åå¦ç
+ *  ieee_802_input -- IEEE 802.3 入力処理
  */
 
@@ -150,5 +136,5 @@
 
 /*
- *  ether_srand -- ä¹±æ°ãåæå¤ãè¿ãã
+ *  ether_srand -- 乱数を初期値を返す。
  */
 
@@ -178,5 +164,5 @@
 
 /*
- *  ether_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã
+ *  ether_get_ifnet -- ネットワークインタフェース構造体を返す。
  */
 
@@ -190,5 +176,5 @@
 
 /*
- *  ether_in6_resolve_multicast -- ã¤ã¼ãµãããã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ
+ *  ether_in6_resolve_multicast -- イーサネットのマルチキャストアドレスへの変換
  */
 
@@ -196,9 +182,9 @@
 ether_in6_resolve_multicast (T_ETHER_ADDR *ifaddr, const T_IN6_ADDR *maddr)
 {
-	/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ããã§ãã¯ããã*/
+	/* マルチキャストアドレスかチェックする。*/
 	if (!IN6_IS_ADDR_MULTICAST(maddr))
 		return E_PAR;
 
-	/* ã¤ã¼ãµãããã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ */
+	/* イーサネットのマルチキャストアドレスへの変換 */
 	ether_map_ipv6_multicast(ifaddr, maddr);
 
@@ -209,5 +195,5 @@
 
 /**
- * ether_set_link_up -- ãªã³ã¯ããã¨ãã«NICããå¼ã³åºããã
+ * ether_set_link_up -- リンクしたときにNICから呼び出される
  */
 void
@@ -219,9 +205,9 @@
 		if (ether_ifnet.flags & IF_FLAG_UP) {
 #if defined(_IP4_CFG) && defined(SUPPORT_ETHER)
-			/* ARPåæ§ç¯ï¼ */
+			/* ARP再構築？ */
 #endif /* #if defined(_IP4_CFG) && defined(SUPPORT_ETHER) */
 
 #ifdef SUPPORT_IGMP
-			/* IGMPåå  */
+			/* IGMP参加 */
 #endif /* #ifdef SUPPORT_IGMP */
 			}
@@ -233,5 +219,5 @@
 
 /**
- * ether_set_link_up -- ãªã³ã¯ãåæ­ããã¨ãã«NICããå¼ã³åºããã
+ * ether_set_link_up -- リンクが切断したときにNICから呼び出される
  */
 void
@@ -247,5 +233,5 @@
 
 /*
- * ether_set_up -- DHCPã§ã¢ãã¬ã¹ãè¨­å®ãããã¨ãå¼ã³åºããã
+ * ether_set_up -- DHCPでアドレスが設定されたとき呼び出される
  */
 
@@ -262,5 +248,5 @@
 
 /*
- * ether_set_down -- DHCPã§ã¢ãã¬ã¹ãè§£æ¾ãããã¨ãå¼ã³åºããã
+ * ether_set_down -- DHCPでアドレスが解放されたとき呼び出される
  */
 
@@ -277,6 +263,5 @@
 
 /*
- * ether_set_link_callback -- ãªã³ã¯ç¶æ
-å¤åæã®ã³ã¼ã«ããã¯ç»é²
+ * ether_set_link_callback -- リンク状態変化時のコールバック登録
  */
 
@@ -291,5 +276,5 @@
 
 /*
- *  ether_raw_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºç¡ã
+ *  ether_raw_output -- Ethernet インタフェースの出力関数、MAC アドレス解決無し
  */
 
@@ -299,11 +284,10 @@
 	ER error = E_OK;
 
-	/* Ethernet åºåã­ã¥ã¼ã«æå
-¥ããã*/
+	/* Ethernet 出力キューに投入する。*/
 	if ((error = tsnd_dtq(DTQ_ETHER_OUTPUT, (intptr_t)output, tmout)) != E_OK) {
 		NET_COUNT_ETHER(net_count_ether.out_err_packets, 1);
 		NET_COUNT_MIB(if_stats.ifOutDiscards, 1);
 
-		/* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/
+		/* IF でネットワークバッファを開放しないフラグをチェックする。*/
 		if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
 			syscall(rel_net_buf(output));
@@ -318,5 +302,5 @@
 
 /*
- *  ether_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºæã
+ *  ether_output -- Ethernet インタフェースの出力関数、MAC アドレス解決有り
  */
 
@@ -328,6 +312,5 @@
 	T_ETHER_HDR *eth;
 
-	/* éä¿¡å
- MAC ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* 送信元 MAC アドレスを設定する。*/
 	ic = IF_ETHER_NIC_GET_SOFTC();
 	eth = GET_ETHER_HDR(output);
@@ -340,7 +323,7 @@
 	case ETHER_TYPE_IP:		/* IPv4	*/
 #ifdef ETHER_CFG_MULTICAST
-		/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®å ´å */
+		/* マルチキャストアドレスの場合 */
 		if(IN4_IS_ADDR_MULTICAST(*(uint32_t*)dst)){
-			/* ã¤ã¼ãµãããã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ */
+			/* イーサネットのマルチキャストアドレスへの変換 */
 			ether_map_ipv4_multicast((T_ETHER_ADDR *)&eth->dhost, *(T_IN4_ADDR*)dst);
 			error = ether_raw_output(output, tmout);
@@ -348,5 +331,5 @@
 			}
 #endif
-		if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) {	/* true ãªãã¢ãã¬ã¹è§£æ±ºæ¸ */
+		if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) {	/* true ならアドレス解決済 */
 			error = ether_raw_output(output, tmout);
 			}
@@ -363,5 +346,5 @@
 			error = ether_raw_output(output, tmout);
 
-		/* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/
+		/* IF でネットワークバッファを開放しないフラグをチェックする。*/
 		else if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
 			syscall(rel_net_buf(output));
@@ -377,5 +360,5 @@
 		NET_COUNT_MIB(if_stats.ifOutErrors, 1);
 
-		/* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/
+		/* IF でネットワークバッファを開放しないフラグをチェックする。*/
 		if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
 			syscall(rel_net_buf(output));
@@ -394,5 +377,5 @@
 
 /*
- *  Ethernet åºåã¿ã¹ã¯
+ *  Ethernet 出力タスク
  */
 
@@ -448,6 +431,5 @@
 
 /*
- *  Ethernet å
-¥åã¿ã¹ã¯
+ *  Ethernet 入力タスク
  */
 
@@ -462,25 +444,25 @@
 	uint8_t		rcount = 0;
 
-	/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/
+	/* ネットワークインタフェース管理を初期化する。*/
 	ifinit();
 
-	/* ã¤ã¼ãµããããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/
+	/* イーサネットネットワークインタフェース管理を初期化する。*/
 
 #if defined(_IP4_CFG)
 
-	ether_ifnet.in4_ifaddr.addr = IPV4_ADDR_LOCAL;		/* IPv4 ã¢ãã¬ã¹		*/
-	ether_ifnet.in4_ifaddr.mask = IPV4_ADDR_LOCAL_MASK;	/* ãµãããããã¹ã¯		*/
+	ether_ifnet.in4_ifaddr.addr = IPV4_ADDR_LOCAL;		/* IPv4 アドレス		*/
+	ether_ifnet.in4_ifaddr.mask = IPV4_ADDR_LOCAL_MASK;	/* サブネットマスク		*/
 
 #endif	/* of #if defined(_IP4_CFG) */
 
-	/* NIC ãåæåããã*/
+	/* NIC を初期化する。*/
 	ic = IF_ETHER_NIC_GET_SOFTC();
 	IF_ETHER_NIC_PROBE(ic);
 	IF_ETHER_NIC_INIT(ic);
 
-	/* Ethernet åºåã¿ã¹ã¯ãèµ·åãã */
+	/* Ethernet 出力タスクを起動する */
 	syscall(act_tsk(ETHER_OUTPUT_TASK));
 
-	/* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ãèµ·åãã */
+	/* ネットワークタイマタスクを起動する */
 	syscall(act_tsk(NET_TIMER_TASK));
 
@@ -492,5 +474,5 @@
 #if defined(_IP4_CFG)
 
-	/* ARP ãåæåããã*/
+	/* ARP を初期化する。*/
 	arp_init();
 
@@ -499,5 +481,5 @@
 	ether_ifnet.ic = ic;
 
-	/* ä¹±æ°çæãåæåããã*/
+	/* 乱数生成を初期化する。*/
 	net_srand(0);
 
@@ -511,5 +493,5 @@
 			proto = ntohs(eth->type);
 
-			/* ä¹±æ°çæãåæåããã*/
+			/* 乱数生成を初期化する。*/
 			if (rcount == 0) {
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  Ethernet ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  Ethernet コンフィギュレーションファイル
  */
 
@@ -55,5 +43,5 @@
 CRE_DTQ(DTQ_ETHER_OUTPUT,  { TA_TFIFO, NUM_DTQ_ETHER_OUTPUT,  NULL });
 
-/* ãµãã¼ãé¢æ° max2str ç¨ã»ããã© */
+/* サポート関数 max2str 用セマフォ */
 
 CRE_SEM(SEM_MAC2STR_BUFF_LOCK,	{ TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -88,5 +76,5 @@
 
 /*
- *  ãã£ã¼ã«ãé·
+ *  フィールド長
  */
 
@@ -96,5 +84,5 @@
 
 /*
- *  ãã¬ã¼ã é· (Ethernet ãããã¨ CRC ãå«ã)
+ *  フレーム長 (Ethernet ヘッダと CRC を含む)
  */
 
@@ -103,5 +91,5 @@
 
 /*
- *  Ethernet ããã
+ *  Ethernet ヘッダ
  */
 
@@ -122,5 +110,5 @@
 #if IF_ETHER_NIC_HDR_ALIGN != 0
 
-	uint8_t		align[IF_ETHER_NIC_HDR_ALIGN];	/* ã¢ã©ã¤ã³èª¿æ´ */
+	uint8_t		align[IF_ETHER_NIC_HDR_ALIGN];	/* アライン調整 */
 
 #endif	/* of #if IF_ETHER_NIC_HDR_ALIGN != 0 */
@@ -137,5 +125,5 @@
 #if IF_ETHER_NIC_HDR_ALIGN != 0
 
-	uint8_t		align[IF_ETHER_NIC_HDR_ALIGN];	/* ã¢ã©ã¤ã³èª¿æ´ */
+	uint8_t		align[IF_ETHER_NIC_HDR_ALIGN];	/* アライン調整 */
 
 #endif	/* of #if IF_ETHER_NIC_HDR_ALIGN != 0 */
@@ -152,5 +140,5 @@
 #if IF_ETHER_NIC_HDR_ALIGN != 0
 
-	uint8_t		align[IF_ETHER_NIC_HDR_ALIGN];	/* ã¢ã©ã¤ã³èª¿æ´ */
+	uint8_t		align[IF_ETHER_NIC_HDR_ALIGN];	/* アライン調整 */
 
 #endif	/* of #if IF_ETHER_NIC_HDR_ALIGN != 0 */
@@ -166,9 +154,9 @@
 
 /*
- *  MAC ã¢ãã¬ã¹ã®å®ç¾©
- */
-
-#define ETHER_MCAST_ADDR	UINT_C(0x01)	/* ãã«ãã­ã£ã¹ãã»ã¢ãã¬ã¹	*/
-#define ETHER_LOCAL_ADDR	UINT_C(0x02)	/* ã­ã¼ã«ã«ã»ã¢ãã¬ã¹		*/
+ *  MAC アドレスの定義
+ */
+
+#define ETHER_MCAST_ADDR	UINT_C(0x01)	/* マルチキャスト・アドレス	*/
+#define ETHER_LOCAL_ADDR	UINT_C(0x02)	/* ローカル・アドレス		*/
 
 typedef struct t_ether_addr {
@@ -183,5 +171,5 @@
 
 /*
- *  Type ãã£ã¼ã«ã
+ *  Type フィールド
  */
 
@@ -191,45 +179,42 @@
 
 /*
- *  ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãã¯ã­
- */
-
-#define T_IF_HDR		T_ETHER_HDR		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ããã				*/
-#define T_IF_ADDR		T_ETHER_ADDR		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹			*/
-#define IF_HDR_ALIGN		2			/* ãããã®ã¢ã©ã¤ã³åä½				*/
-#define IF_MTU			1500			/* ã¤ã³ã¿ãã§ã¼ã¹ã® MTU				*/
-#define IF_MIN_LEN		ETHER_MIN_LEN		/* ã¤ã³ã¿ã¼ãã§ã¼ã¹ãã¬ã¼ã ã®æç­é·		*/
-
-#define IF_OUTPUT(o,d,g,t)	ether_output(o,d,g,t)	/* ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°			*/
-#define IF_RAW_OUTPUT(o,t)	ether_raw_output(o,t)	/* ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãã¢ãã¬ã¹è§£æ±ºç¡ã	*/
+ *  インタフェースの選択マクロ
+ */
+
+#define T_IF_HDR		T_ETHER_HDR		/* インタフェースのヘッダ				*/
+#define T_IF_ADDR		T_ETHER_ADDR		/* インタフェースのアドレス			*/
+#define IF_HDR_ALIGN		2			/* ヘッダのアライン単位				*/
+#define IF_MTU			1500			/* インタフェースの MTU				*/
+#define IF_MIN_LEN		ETHER_MIN_LEN		/* インターフェースフレームの最短長		*/
+
+#define IF_OUTPUT(o,d,g,t)	ether_output(o,d,g,t)	/* インタフェースの出力関数			*/
+#define IF_RAW_OUTPUT(o,t)	ether_raw_output(o,t)	/* インタフェースの出力関数、アドレス解決無し	*/
 #define IF_SET_PROTO(b,p)	(GET_ETHER_HDR(b)->type = htons(p))
-							/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã­ãã³ã«è¨­å®é¢æ°		*/
+							/* インタフェースのプロトコル設定関数		*/
 #define IF_SOFTC_TO_IFADDR(s)	((T_IF_ADDR*)(s)->ifaddr.lladdr)
-							/* ã½ããã¦ã§ã¢æ
-å ±ãã MAC ã¢ãã¬ã¹ãåãåºã	*/
-#define IF_GET_IFNET()		ether_get_ifnet()	/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã		*/
-#define IF_TYPE			IFT_ETHER		/* ã¤ã³ã¿ãã§ã¼ã¹ã®å				*/
-#define IF_SRAND()		ether_srand()	/* ã¤ã³ã¿ãã§ã¼ã¹ã®ä¹±æ°åæå¤			*/
-
-/* IPv4 é¢ä¿ */
-
-#define IF_PROTO_IP		ETHER_TYPE_IP		/* ã¤ã³ã¿ãã§ã¼ã¹ã® IPv4 ãã­ãã³ã«æå®		*/
-#define IF_PROTO_ARP		ETHER_TYPE_ARP		/* ã¤ã³ã¿ãã§ã¼ã¹ã® ARP ãã­ãã³ã«æå®		*/
-
-/* IPv6 é¢ä¿ */
-
-#define MAX_IF_MADDR_CNT	2			/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹é
-åã®æå¤§ãµã¤ãº	*/
+							/* ソフトウェア情報から MAC アドレスを取り出す	*/
+#define IF_GET_IFNET()		ether_get_ifnet()	/* ネットワークインタフェース構造体を返す。		*/
+#define IF_TYPE			IFT_ETHER		/* インタフェースの型				*/
+#define IF_SRAND()		ether_srand()	/* インタフェースの乱数初期値			*/
+
+/* IPv4 関係 */
+
+#define IF_PROTO_IP		ETHER_TYPE_IP		/* インタフェースの IPv4 プロトコル指定		*/
+#define IF_PROTO_ARP		ETHER_TYPE_ARP		/* インタフェースの ARP プロトコル指定		*/
+
+/* IPv6 関係 */
+
+#define MAX_IF_MADDR_CNT	2			/* インタフェースのマルチキャストアドレス配列の最大サイズ	*/
 #define IF_MADDR_INIT		{ { { 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0 } } }
-							/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹é
-åã®åæå	*/
-#define IF_PROTO_IPV6		ETHER_TYPE_IPV6		/* ã¤ã³ã¿ãã§ã¼ã¹ã® IPv6 ãã­ãã³ã«æå®			*/
+							/* インタフェースのマルチキャストアドレス配列の初期化	*/
+#define IF_PROTO_IPV6		ETHER_TYPE_IPV6		/* インタフェースの IPv6 プロトコル指定			*/
 #define IF_ADDMULTI(s)		IF_ETHER_NIC_ADDMULTI(s)
-							/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ç»é²				*/
-#define IF_IN6_NEED_CACHE(i)	(true)			/* è¿é£æ¢ç´¢ã­ã£ãã·ã¥ãä½¿ç¨ããã				*/
+							/* マルチキャストアドレスの登録				*/
+#define IF_IN6_NEED_CACHE(i)	(true)			/* 近隣探索キャッシュを使用する。				*/
 #define IF_IN6_IFID(i,a)	IF_ETHER_NIC_IN6_IFID(i,a)
-							/* ã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ã®è¨­å®				*/
+							/* インタフェース識別子の設定				*/
 #define IF_IN6_RESOLVE_MULTICAST(i,m)	\
 				ether_in6_resolve_multicast(i,m)
-							/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ		*/
+							/* インタフェースのマルチキャストアドレスへの変換		*/
 
 #define IF_FLAG_UP				0x01U
@@ -237,6 +222,5 @@
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -274,6 +258,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããªãã½ããã¦ã§ã¢æ
-å ±
+ *  ネットワークインタフェースに依存しないソフトウェア情報
  */
 
@@ -281,14 +264,13 @@
 
 struct t_if_softc {
-	T_IF_ADDR		ifaddr;			/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-	uint16_t		timer;			/* éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
-	T_IF_ETHER_NIC_SOFTC	*sc;			/* ãã£ãã¤ã¹ä¾å­ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	ID			semid_txb_ready;	/* éä¿¡ã»ããã©				*/
-	ID			semid_rxb_ready;	/* åä¿¡ã»ããã©				*/
+	T_IF_ADDR		ifaddr;			/* ネットワークインタフェースのアドレス	*/
+	uint16_t		timer;			/* 送信タイムアウト			*/
+	T_IF_ETHER_NIC_SOFTC	*sc;			/* ディバイス依存のソフトウェア情報	*/
+	ID			semid_txb_ready;	/* 送信セマフォ				*/
+	ID			semid_rxb_ready;	/* 受信セマフォ				*/
 
 #ifdef _IP6_CFG
 
-	T_IF_ADDR 	maddrs[MAX_IF_MADDR_CNT];	/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãªã¹ã	*/
+	T_IF_ADDR 	maddrs[MAX_IF_MADDR_CNT];	/* マルチキャストアドレスリスト	*/
 
 #endif	/* of #ifdef _IP6_CFG */
@@ -298,5 +280,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -308,11 +290,10 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
 #ifdef _IP6_CFG
 
-/* åæ¹åç
-§ */
+/* 前方参照 */
 
 #ifndef T_IN6_ADDR_DEFINED
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -117,5 +105,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -123,5 +111,5 @@
 
 /*
- *  if_slowtimo -- ã¤ã³ã¿ãã§ã¼ã¹ã®ã¯ããããã°ã¿ã¤ãå¶å¾¡
+ *  if_slowtimo -- インタフェースのワッチドッグタイマ制御
  */
 
@@ -142,5 +130,5 @@
 
 /*
- *  ifinit -- ã¤ã³ã¿ãã§ã¼ã¹ç®¡çã®åæå
+ *  ifinit -- インタフェース管理の初期化
  */
 
@@ -156,5 +144,5 @@
 
 /*
- *  if_addmulti -- ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ç»é²
+ *  if_addmulti -- マルチキャストアドレスの登録
  */
 
@@ -173,8 +161,8 @@
 			return E_PAR;
 
-		/* IPv6 ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãç»é²ããã*/
+		/* IPv6 マルチキャストアドレスを登録する。*/
 		ifp->in6_maddrs[ix] = *(T_IN6_ADDR*)maddr;
 
-		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ã«å¤æããç»é²ããã*/
+		/* インタフェースのアドレスに変換し、登録する。*/
 		error = IF_IN6_RESOLVE_MULTICAST(&llmaddr, (T_IN6_ADDR*)maddr);
 		if (error != E_OK)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,19 +72,19 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç¨ã¿ã¤ãã®å®ç¾©
+ *  ネットワークインタフェース用タイマの定義
  */
 
-#define IF_TIMER_TMO		NET_TIMER_HZ	/* ã¿ã¤ã ã¢ã¦ãã1 [s]	*/
-#define IF_TIMER_HZ		1		/* ã¿ã¤ãã®å¨æ³¢æ°ã1 [s]	*/
+#define IF_TIMER_TMO		NET_TIMER_HZ	/* タイムアウト、1 [s]	*/
+#define IF_TIMER_HZ		1		/* タイマの周波数、1 [s]	*/
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ãã©ã°
+ *  ネットワークインタフェースのフラグ
  */
 
-#define IFF_UP			UINT_C(0x0001)	/* èµ·åæ¸ã¿		*/
-#define IFF_RUNNING		UINT_C(0x0002)	/* åä½ä¸­		*/
+#define IFF_UP			UINT_C(0x0001)	/* 起動済み		*/
+#define IFF_RUNNING		UINT_C(0x0002)	/* 動作中		*/
 
 /*
- *  æ±ç¨å®ç¾©
+ *  汎用定義
  */
 
@@ -105,5 +93,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if6_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if6_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if6_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,5 +69,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½
+ *  ネットワークインタフェース構造体
  */
 
@@ -89,15 +77,12 @@
 
 struct t_ifnet {
-	T_IF_SOFTC	*ic;		/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
+	T_IF_SOFTC	*ic;		/* ネットワークインタフェースのソフトウェア情報	*/
 	T_IN6_IFADDR 	in6_ifaddrs[NUM_IN6_IFADDR_ENTRY];
-					/* IPv6 ã¢ãã¬ã¹æ
-å ±				*/
+					/* IPv6 アドレス情報				*/
 	T_IN6_ADDR	in6_maddrs [MAX_IN6_MADDR_CNT];
-					/* ãã«ãã­ã£ã¹ã IPv6 ã¢ãã¬ã¹			*/
-	T_IN4_IFADDR 	in4_ifaddr;	/* IPv4 ã¢ãã¬ã¹æ
-å ±				*/
+					/* マルチキャスト IPv6 アドレス			*/
+	T_IN4_IFADDR 	in4_ifaddr;	/* IPv4 アドレス情報				*/
 	ether_status_callback_fn link_callback;
-	uint8_t		flags;		/* ãã©ã°					*/
+	uint8_t		flags;		/* フラグ					*/
 	};
 
@@ -105,13 +90,11 @@
 
 struct t_ifnet {
-	T_IF_SOFTC	*ic;		/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
+	T_IF_SOFTC	*ic;		/* ネットワークインタフェースのソフトウェア情報	*/
 	T_IN6_IFADDR 	in6_ifaddrs[NUM_IN6_IFADDR_ENTRY];
-					/* IPv6 ã¢ãã¬ã¹æ
-å ±				*/
+					/* IPv6 アドレス情報				*/
 	T_IN6_ADDR	in6_maddrs [MAX_IN6_MADDR_CNT];
-					/* ãã«ãã­ã£ã¹ã IPv6 ã¢ãã¬ã¹			*/
+					/* マルチキャスト IPv6 アドレス			*/
 	ether_status_callback_fn link_callback;
-	uint8_t		flags;		/* ãã©ã°					*/
+	uint8_t		flags;		/* フラグ					*/
 	};
 
@@ -123,10 +106,8 @@
 
 struct t_ifnet {
-	T_IF_SOFTC	*ic;		/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	T_IN4_IFADDR 	in4_ifaddr;	/* IPv4 ã¢ãã¬ã¹æ
-å ±				*/
+	T_IF_SOFTC	*ic;		/* ネットワークインタフェースのソフトウェア情報	*/
+	T_IN4_IFADDR 	in4_ifaddr;	/* IPv4 アドレス情報				*/
 	ether_status_callback_fn link_callback;
-	uint8_t		flags;		/* ãã©ã°					*/
+	uint8_t		flags;		/* フラグ					*/
 	};
 
@@ -146,5 +127,5 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -152,5 +133,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_arp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_arp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_arp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -88,20 +76,19 @@
  *  Address Resolution Protocol.
  *
- *  RFC 826 åç
-§
+ *  RFC 826 参照
  */
 
 /*
- *  æ§é ä½
+ *  構造体
  */
 
-/* ARP ããã */
+/* ARP ヘッダ */
 
 typedef struct t_arp_hdr {
-	uint16_t	hrd_addr;	/* ç©çã¢ãã¬ã¹ãã©ã¼ããã	*/
-	uint16_t	proto;		/* ãã­ãã³ã«			*/
-	uint8_t		hdr_len;	/* ç©çã¢ãã¬ã¹é·		*/
-	uint8_t		proto_len;	/* ãã­ãã³ã«é·			*/
-	uint16_t	opcode;		/* å½ä»¤ã³ã¼ã			*/
+	uint16_t	hrd_addr;	/* 物理アドレスフォーマット	*/
+	uint16_t	proto;		/* プロトコル			*/
+	uint8_t		hdr_len;	/* 物理アドレス長		*/
+	uint8_t		proto_len;	/* プロトコル長			*/
+	uint16_t	opcode;		/* 命令コード			*/
 	} __attribute__((packed, aligned(2))) T_ARP_HDR;
 
@@ -113,20 +100,19 @@
 #define GET_IF_ARP_HDR_SIZE(nbuf)	(IF_HDR_SIZE + ARP_HDR_SIZE)
 
-/* hrd_addrãç©çã¢ãã¬ã¹ãã©ã¼ãããã®å¤ */
+/* hrd_addr、物理アドレスフォーマットの値 */
 
 #define ARPHRD_ETHER	1	/* Ethernet	*/
 
-/* opcode, å½ä»¤ã³ã¼ãã®å¤ */
+/* opcode, 命令コードの値 */
 
-#define ARPOP_REQUEST		UINT_C(1)	/* ã¢ãã¬ã¹è§£æ±ºè¦æ±		*/
-#define ARPOP_REPLY		UINT_C(2)	/* ã¢ãã¬ã¹è§£æ±ºå¿ç­		*/
-#define ARPOP_REV_REQUEST	UINT_C(3)	/* ãã­ãã³ã«ã»ã¢ãã¬ã¹è§£æ±ºè¦æ±	*/
-#define ARPOP_REV_REPLY		UINT_C(4)	/* ãã­ãã³ã«ã»ã¢ãã¬ã¹è§£æ±ºè¦æ±	*/
-#define ARPOP_INV_REQUEST	UINT_C(8)	/* çµç«¯è­å¥è¦æ±			*/
-#define ARPOP_INV_REPLY		UINT_C(9)	/* çµç«¯è­å¥è¦æ±			*/
+#define ARPOP_REQUEST		UINT_C(1)	/* アドレス解決要求		*/
+#define ARPOP_REPLY		UINT_C(2)	/* アドレス解決応答		*/
+#define ARPOP_REV_REQUEST	UINT_C(3)	/* プロトコル・アドレス解決要求	*/
+#define ARPOP_REV_REPLY		UINT_C(4)	/* プロトコル・アドレス解決要求	*/
+#define ARPOP_INV_REQUEST	UINT_C(8)	/* 終端識別要求			*/
+#define ARPOP_INV_REPLY		UINT_C(9)	/* 終端識別要求			*/
 
 /*
- *  ã¤ã¼ãµããããã©ã¤ãã¢ã¸ã¥ã¼ã«ã§ä½¿ç¨ããã ARP æ
-å ±
+ *  イーサネットドライバモジュールで使用される ARP 情報
  */
 
@@ -136,11 +122,11 @@
 
 /*
- *  ARP ã­ã£ãã·ã¥æ´æ°ã¿ã¤ãã®å®ç¾©
+ *  ARP キャッシュ更新タイマの定義
  */
 
-#define ARP_TIMER_TMO		(60*NET_TIMER_HZ)	/* ã¿ã¤ã ã¢ã¦ãã60 [s]	*/
+#define ARP_TIMER_TMO		(60*NET_TIMER_HZ)	/* タイムアウト、60 [s]	*/
 
 /*
- *  å¤æ°
+ *  変数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_llc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_llc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_llc.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -86,5 +74,5 @@
 
 /*
- *  é·ãã®å®ç¾©
+ *  長さの定義
  */
 
@@ -93,5 +81,5 @@
 
 /*
- *  802.3 ããã
+ *  802.3 ヘッダ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -119,9 +107,9 @@
 
 /*
- *  ã­ã¼ã«ã«ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹
- */
-
-/*
- *  å¤é¨é¢æ°ã®å®ç¾©
+ *  ローカルループバックインタフェース
+ */
+
+/*
+ *  外部関数の定義
  */
 
@@ -129,17 +117,15 @@
 
 /*
- *  å¤æ°
- */
-
-/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ */
+ *  変数
+ */
+
+/* ネットワークインタフェース構造体 */
 
 #if defined(_IP6_CFG)
 
 static T_IFNET loop_ifnet = {
-	NULL,			/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	{},			/* IPv6 ã¢ãã¬ã¹æ
-å ±				*/
-	{},			/* ãã«ãã­ã£ã¹ã IPv6 ã¢ãã¬ã¹			*/
+	NULL,			/* ネットワークインタフェースのソフトウェア情報	*/
+	{},			/* IPv6 アドレス情報				*/
+	{},			/* マルチキャスト IPv6 アドレス			*/
 	};
 
@@ -147,9 +133,8 @@
 
 static T_IFNET loop_ifnet = {
-	NULL,			/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
+	NULL,			/* ネットワークインタフェースのソフトウェア情報	*/
 	{
-		IPV4_ADDR_LOOPBACK,		/* IPv4 ã¢ãã¬ã¹			*/
-		IPV4_ADDR_LOOPBACK_MASK,	/* ãµãããããã¹ã¯			*/
+		IPV4_ADDR_LOOPBACK,		/* IPv4 アドレス			*/
+		IPV4_ADDR_LOOPBACK_MASK,	/* サブネットマスク			*/
 		},
 	};
@@ -158,5 +143,5 @@
 
 /*
- *  loop_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã
+ *  loop_get_ifnet -- ネットワークインタフェース構造体を返す。
  */
 
@@ -168,5 +153,5 @@
 
 /*
- *  looutput -- ã­ã¼ã«ã«ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°
+ *  looutput -- ローカルループバックインタフェースの出力関数
  */
 
@@ -185,5 +170,5 @@
 
 /*
- *  ã­ã¼ã«ã«ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã»åºåã¿ã¹ã¯
+ *  ローカルループバックインタフェース・出力タスク
  */
 
@@ -208,6 +193,5 @@
 
 /*
- *  ã­ã¼ã«ã«ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã»å
-¥åã¿ã¹ã¯
+ *  ローカルループバックインタフェース・入力タスク
  */
 
@@ -227,6 +211,5 @@
 #if defined(_IP4_CFG)
 
-			/* IPv4 å
-¥åé¢æ°ãå¼ã³åºã */
+			/* IPv4 入力関数を呼び出す */
 			if (IP4_VHL_V(GET_IP4_HDR(input)->vhl) == IPV4_VERSION)
 				ip_input(input);
@@ -236,6 +219,5 @@
 #if defined(_IP6_CFG)
 
-			/* IPv6 å
-¥åé¢æ°ãå¼ã³åºã */
+			/* IPv6 入力関数を呼び出す */
 			if (IP6_VCF_V(ntohl(GET_IP6_HDR(input)->vcf)) == IPV6_VERSION)
 				ip6_input(input);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã»ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ループバックインタフェース・コンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_loop.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,5 +72,5 @@
 
 /*
- *  ã­ã¼ã«ã«ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã»ãããã¨ã¢ãã¬ã¹
+ *  ローカルループバックインタフェース・ヘッダとアドレス
  */
 
@@ -91,31 +79,29 @@
 
 /*
- *  ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãã¯ã­
+ *  インタフェースの選択マクロ
  */
 
-#define T_IF_HDR		T_LOOP_HDR		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ããã	*/
-#define T_IF_ADDR		T_LOOP_ADDR		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-#define IF_HDR_ALIGN		4			/* ãããã®ã¢ã©ã¤ã³åä½		*/
-#define IF_MTU			LOMTU			/* ã¤ã³ã¿ãã§ã¼ã¹ã® MTU		*/
+#define T_IF_HDR		T_LOOP_HDR		/* インタフェースのヘッダ	*/
+#define T_IF_ADDR		T_LOOP_ADDR		/* インタフェースのアドレス	*/
+#define IF_HDR_ALIGN		4			/* ヘッダのアライン単位		*/
+#define IF_MTU			LOMTU			/* インタフェースの MTU		*/
 
-#define IF_OUTPUT(o,d,g,t)	looutput(o,t)		/* ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°	*/
-#define IF_RAW_OUTPUT(o,t)	looutput(o,t)		/* ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãã¢ãã¬ã¹è§£æ±ºç¡ã*/
-#define IF_SET_PROTO(b,p)				/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã­ãã³ã«è¨­å®é¢æ°	*/
-#define IF_GET_IFNET()		loop_get_ifnet()	/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã		*/
-#define IF_SRAND()		(0)			/* ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ä¹±æ°åæå¤			*/
+#define IF_OUTPUT(o,d,g,t)	looutput(o,t)		/* インタフェースの出力関数	*/
+#define IF_RAW_OUTPUT(o,t)	looutput(o,t)		/* インタフェースの出力関数、アドレス解決無し*/
+#define IF_SET_PROTO(b,p)				/* インタフェースのプロトコル設定関数	*/
+#define IF_GET_IFNET()		loop_get_ifnet()	/* ネットワークインタフェース構造体を返す。		*/
+#define IF_SRAND()		(0)			/* インターフェースの乱数初期値			*/
 
-/* IPv4 é¢ä¿ */
+/* IPv4 関係 */
 
-#define IF_PROTO_IP		0			/* ã¤ã³ã¿ãã§ã¼ã¹ã® IP ãã­ãã³ã«æå®		*/
+#define IF_PROTO_IP		0			/* インタフェースの IP プロトコル指定		*/
 
-/* IPv6 é¢ä¿ */
+/* IPv6 関係 */
 
-#define MAX_IF_MADDR_CNT	0			/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹é
-åã®æå¤§ãµã¤ãº	*/
-#define IF_IN6_NEED_CACHE(i)	(false)			/* è¿é£æ¢ç´¢ã­ã£ãã·ã¥ãä½¿ç¨ããã				*/
+#define MAX_IF_MADDR_CNT	0			/* インタフェースのマルチキャストアドレス配列の最大サイズ	*/
+#define IF_IN6_NEED_CACHE(i)	(false)			/* 近隣探索キャッシュを使用する。				*/
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -145,6 +131,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããªãã½ããã¦ã§ã¢æ
-å ±
+ *  ネットワークインタフェースに依存しないソフトウェア情報
  */
 
@@ -152,5 +137,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -159,5 +144,5 @@
 
 /*
- *  ã­ã¼ã«ã«ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã»å¦çã¿ã¹ã¯
+ *  ローカルループバックインタフェース・処理タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_ppp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_ppp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_ppp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -71,5 +59,5 @@
 
 /*
- *  PPP ã¢ãã¬ã¹ã®å®ç¾©ï¼ããã¼ï¼
+ *  PPP アドレスの定義（ダミー）
  */
 
@@ -79,52 +67,49 @@
 
 /*
- *  ã¤ã³ã¿ãã§ã¼ã¹ã®é¸æãã¯ã­
+ *  インタフェースの選択マクロ
  */
 
-#define T_IF_HDR		T_PPP_HDR		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ããã		*/
-#define T_IF_ADDR		T_PPP_ADDR		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹			*/
-#define IF_HDR_ALIGN		2			/* ãããã®ã¢ã©ã¤ã³åä½			*/
-#define IF_MTU			DEF_PPP_MTU		/* ã¤ã³ã¿ãã§ã¼ã¹ã® MTU			*/
+#define T_IF_HDR		T_PPP_HDR		/* インタフェースのヘッダ		*/
+#define T_IF_ADDR		T_PPP_ADDR		/* インタフェースのアドレス			*/
+#define IF_HDR_ALIGN		2			/* ヘッダのアライン単位			*/
+#define IF_MTU			DEF_PPP_MTU		/* インタフェースの MTU			*/
 
-#define IF_OUTPUT(o,d,g,t)	ppp_output(o,t)		/* ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°		*/
-#define IF_RAW_OUTPUT(o,t)	ppp_output(o,t)		/* ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãã¢ãã¬ã¹è§£æ±ºç¡ã*/
+#define IF_OUTPUT(o,d,g,t)	ppp_output(o,t)		/* インタフェースの出力関数		*/
+#define IF_RAW_OUTPUT(o,t)	ppp_output(o,t)		/* インタフェースの出力関数、アドレス解決無し*/
 #define IF_SET_PROTO(b,p)	(*GET_PPP_HDR(b) = htons(p))
-							/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã­ãã³ã«è¨­å®é¢æ°	*/
+							/* インタフェースのプロトコル設定関数	*/
 #define IF_SOFTC_TO_IFADDR(s)	((T_IF_ADDR*)(s)->ifaddr.lladdr)
-							/* ã½ããã¦ã§ã¢æ
-å ±ãã PPP ã¢ãã¬ã¹ãåãåºã	*/
-#define IF_GET_IFNET()		ppp_get_ifnet()		/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã*/
-#define IF_SRAND()		(0)			/* ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ä¹±æ°åæå¤			*/
+							/* ソフトウェア情報から PPP アドレスを取り出す	*/
+#define IF_GET_IFNET()		ppp_get_ifnet()		/* ネットワークインタフェース構造体を返す。*/
+#define IF_SRAND()		(0)			/* インターフェースの乱数初期値			*/
 
-/* IPv4 é¢ä¿ */
+/* IPv4 関係 */
 
-#define IF_PROTO_IP		PPP_IP			/* ã¤ã³ã¿ãã§ã¼ã¹ã® IPv4 ãã­ãã³ã«æå®	*/
+#define IF_PROTO_IP		PPP_IP			/* インタフェースの IPv4 プロトコル指定	*/
 
-/* IPv6 é¢ä¿ */
+/* IPv6 関係 */
 
-#define MAX_IF_MADDR_CNT	0			/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹é
-åã®æå¤§ãµã¤ãº*/
-#define IF_PROTO_IPV6		PPP_IPV6		/* ã¤ã³ã¿ãã§ã¼ã¹ã® IPv6 ãã­ãã³ã«æå®	*/
-#define IF_IN6_NEED_CACHE(i)	(false)			/* è¿é£æ¢ç´¢ã­ã£ãã·ã¥ãä½¿ç¨ããã	*/
-#define IF_IN6_IFID(i,a)	get_rand_ifid(i,a)	/* ã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ã®è¨­å®		*/
-#define IF_IN6_RESOLVE_MULTICAST(i,m)	{}		/* ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ		*/
+#define MAX_IF_MADDR_CNT	0			/* インタフェースのマルチキャストアドレス配列の最大サイズ*/
+#define IF_PROTO_IPV6		PPP_IPV6		/* インタフェースの IPv6 プロトコル指定	*/
+#define IF_IN6_NEED_CACHE(i)	(false)			/* 近隣探索キャッシュを使用する。	*/
+#define IF_IN6_IFID(i,a)	get_rand_ifid(i,a)	/* インタフェース識別子の設定		*/
+#define IF_IN6_RESOLVE_MULTICAST(i,m)	{}		/* インタフェースのマルチキャストアドレスへの変換		*/
 
 /*
- *  MTU (MRU) ã«é¢ããå®ç¾©
+ *  MTU (MRU) に関する定義
  */
 
-#define DEF_PPP_MTU		1500	/* PPP ã® æ¨æº MTU	*/
-#define MAX_PPP_MTU		16384	/* PPP ã® æå¤§ MTU	*/
-#define MIN_PPP_MTU		128	/* PPP ã® æå° MTU	*/
+#define DEF_PPP_MTU		1500	/* PPP の 標準 MTU	*/
+#define MAX_PPP_MTU		16384	/* PPP の 最大 MTU	*/
+#define MIN_PPP_MTU		128	/* PPP の 最小 MTU	*/
 
 /*
- *  PPP ããã
+ *  PPP ヘッダ
  */
 
-typedef uint16_t T_PPP_HDR;				/* ä¸ä½ãã­ãã³ã«		*/
+typedef uint16_t T_PPP_HDR;				/* 上位プロトコル		*/
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -154,14 +139,13 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããªãã½ããã¦ã§ã¢æ
-å ±
+ *  ネットワークインタフェースに依存しないソフトウェア情報
  */
 
 struct t_if_softc {
-	T_IF_ADDR	ifaddr;		/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
+	T_IF_ADDR	ifaddr;		/* ネットワークインタフェースのアドレス	*/
 	};
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_types.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_types.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_types.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,5 +68,5 @@
 
 /*
- *  ã¤ã³ã¿ãã§ã¼ã¹ã®åã®å®ç¾©
+ *  インタフェースの型の定義
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/if_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/if_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/if_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -85,6 +73,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  å
-±é æ±ç¨ãããã¯ã¼ã¯ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  共通 汎用ネットワークコンフィギュレーションファイル
  */
 
 /*
- * ãããã¯ã¼ã¯ã¿ã¤ã
+ * ネットワークタイマ
  */
 
@@ -69,10 +56,10 @@
 		});
 
-/* ãããã¯ã¼ã¯ã¿ã¤ãã®å¼åºãã¨ã³ããªç¨ã»ããã© */
+/* ネットワークタイマの呼出しエントリ用セマフォ */
 
 CRE_SEM(SEM_CALL_OUT_LOCK,	{ TA_TPRI, 1, 1 });
 CRE_SEM(SEM_CALL_OUT_TIMEOUT,	{ TA_TPRI, 0, NUM_NET_CALLOUT });
 
-/* ãµãã¼ãé¢æ° ip2strãipv62str ç¨ã»ããã© */
+/* サポート関数 ip2str、ipv62str 用セマフォ */
 
 CRE_SEM(SEM_IP2STR_BUFF_LOCK,	{ TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,8 +69,7 @@
 
 /*
- *  ãã­ãã³ã«ãè­å¥ãããã©ã°ã«é¢ããå®ç¾©
+ *  プロトコルを識別するフラグに関する定義
  *
- *    ã»çµ±è¨æ
-å ±
+ *    ・統計情報
  */
 
@@ -124,13 +111,13 @@
 
 /*
- *  ã¢ãã¬ã¹å½¢å¼ã®å®ç¾©
+ *  アドレス形式の定義
  */
 
-#define AT_ETHER		UINT_C(0x01)		/* ã¤ã¼ãµããã		*/
-#define AT_INET4		UINT_C(0x10)		/* IPv4 ã¢ãã¬ã¹	*/
-#define AT_INET6		UINT_C(0x20)		/* IPv6 ã¢ãã¬ã¹	*/
+#define AT_ETHER		UINT_C(0x01)		/* イーサネット		*/
+#define AT_INET4		UINT_C(0x10)		/* IPv4 アドレス	*/
+#define AT_INET6		UINT_C(0x20)		/* IPv6 アドレス	*/
 
 /*
- *  IPv4 UDPãªãã·ã§ã³ã®å®ç¾©
+ *  IPv4 UDPオプションの定義
  */
 
@@ -145,5 +132,5 @@
 
 /*
- *  TINET ç¬èªé¢æ°
+ *  TINET 独自関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_asp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  ASPç¨ æ±ç¨ãããã¯ã¼ã¯ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ASP用 汎用ネットワークコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é æ±ç¨ãããã¯ã¼ã¯ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 汎用ネットワークコンフィギュレーションファイルのインクルード
  */
 
@@ -58,5 +45,5 @@
 
 /*
- * ãããã¯ã¼ã¯ãããã¡
+ * ネットワークバッファ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -83,5 +71,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -89,5 +77,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -295,8 +283,7 @@
 
 /*
- *  nbuf_get_tbl -- ãããã¯ã¼ã¯ãããã¡ç®¡çè¡¨ãç²å¾ããã
+ *  nbuf_get_tbl -- ネットワークバッファ管理表を獲得する。
  *
- *    æ³¨æ: ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬ç¨
+ *    注意: ネットワーク統計情報の計測用
  */
 
@@ -308,8 +295,7 @@
 
 /*
- *  nbuf_get_tbl_size -- ãããã¯ã¼ã¯ãããã¡ç®¡çã¨ã³ããªæ°ãç²å¾ããã
+ *  nbuf_get_tbl_size -- ネットワークバッファ管理エントリ数を獲得する。
  *
- *    æ³¨æ: ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬ç¨
+ *    注意: ネットワーク統計情報の計測用
  */
 
@@ -323,5 +309,5 @@
 
 /*
- *  tget_net_buf_up -- å¤§ããªãµã¤ãºã®æ¹åã«æ¢ç´¢ãã¦ããããã¯ã¼ã¯ãããã¡ãç²å¾ããã
+ *  tget_net_buf_up -- 大きなサイズの方向に探索して、ネットワークバッファを獲得する。
  */
 
@@ -332,5 +318,5 @@
 	ER	error = E_OK;
 
-	/* æé©ãªãµã¤ãºã®åºå®é·ã¡ã¢ãªãã¼ã«ãæ¢ãã*/
+	/* 最適なサイズの固定長メモリプールを探す。*/
 	ix = sizeof(net_buf_table) / sizeof(T_NET_BUF_ENTRY);
 	while (ix -- > 0 && minlen > net_buf_table[ix].size)
@@ -365,5 +351,5 @@
 
 /*
- *  tget_net_buf_down -- å°ããªãµã¤ãºã®æ¹åã«æ¢ç´¢ãã¦ããããã¯ã¼ã¯ãããã¡ãç²å¾ããã
+ *  tget_net_buf_down -- 小さなサイズの方向に探索して、ネットワークバッファを獲得する。
  */
 
@@ -374,5 +360,5 @@
 	ER	error = E_OK;
 
-	/* æé©ãªãµã¤ãºã®åºå®é·ã¡ã¢ãªãã¼ã«ãæ¢ãã*/
+	/* 最適なサイズの固定長メモリプールを探す。*/
 	ix = sizeof(net_buf_table) / sizeof(T_NET_BUF_ENTRY);
 	while (ix -- > 0 && maxlen > net_buf_table[ix].size)
@@ -411,5 +397,5 @@
 
 /*
- *  tget_net_buf_ex -- ãããã¯ã¼ã¯ãããã¡ãç²å¾ããï¼æ¡å¼µæ©è½ï¼ã
+ *  tget_net_buf_ex -- ネットワークバッファを獲得する（拡張機能）。
  */
 
@@ -417,6 +403,5 @@
 tget_net_buf_ex (T_NET_BUF **buf, uint_t minlen, uint_t maxlen, ATR nbatr, TMO tmout)
 {
-	/* æå°ãµã¤ãºãæå¤§ãµã¤ãºãè¶
-ãã¦ãããã¨ã©ã¼ */
+	/* 最小サイズが最大サイズを超えていたらエラー */
 	if ((nbatr & NBA_SEARCH_DESCENT) != 0 && minlen > maxlen) {
 		syslog(LOG_WARNING, "[NET BUF] E_PAR, minlen=%4d > maxlen=%4d.", minlen, maxlen);
@@ -424,6 +409,5 @@
 		}
 
-	/* å²å½ã¦å¯è½ãªæå¤§ã®ãµã¤ãºãè¶
-ãã¦ãããã¨ã©ã¼ */
+	/* 割当て可能な最大のサイズを超えていたらエラー */
 	if (minlen > net_buf_table[0].size || maxlen > net_buf_table[0].size) {
 		syslog(LOG_WARNING, "[NET BUF] E_PAR, minlen=%4d or maxlen=%4d > %4d",
@@ -434,5 +418,5 @@
 #if defined(SUPPORT_TCP) && defined(TCP_CFG_SWBUF_CSAVE)
 
-	/* TCP ã§äºç´ãããããã¯ã¼ã¯ãããã¡ãåãåºãã*/
+	/* TCP で予約したネットワークバッファを取り出す。*/
 	if ((nbatr & NBA_RESERVE_TCP) != 0) {
 		if ((*buf = TCP_PULL_RES_NBUF(nbatr)) != NULL) {
@@ -454,5 +438,5 @@
 
 /*
- *  tget_net_buf -- ãããã¯ã¼ã¯ãããã¡ãç²å¾ããï¼äºæï¼ã
+ *  tget_net_buf -- ネットワークバッファを獲得する（互換）。
  */
 
@@ -464,5 +448,5 @@
 
 /*
- * rel_net_buf -- ãããã¯ã¼ã¯ãããã¡ãè¿å´ããã
+ * rel_net_buf -- ネットワークバッファを返却する。
  */
 
@@ -472,5 +456,5 @@
 	ER	error = E_OK;
 
-	/* ãããã¯ã¼ã¯ãããã¡ã® ID ã®æ­£å½æ§ãæ¤è¨¼ããã*/
+	/* ネットワークバッファの ID の正当性を検証する。*/
 	if ((int_t)buf->idix >= (int_t)(sizeof(net_buf_table) / sizeof(T_NET_BUF_ENTRY))) {
 		syslog(LOG_WARNING, "[NET BUF] E_ID, ID=%d.", buf->idix);
@@ -481,5 +465,5 @@
 #if defined(SUPPORT_TCP) && defined(TCP_CFG_SWBUF_CSAVE)
 
-		/* TCP ã§ããããã¯ã¼ã¯ãããã¡ãäºç´ããã*/
+		/* TCP で、ネットワークバッファを予約する。*/
 		if (TCP_PUSH_RES_NBUF(buf) == NULL)
 			return E_OK;
@@ -487,5 +471,5 @@
 #endif	/* of #if defined(SUPPORT_TCP) && defined(TCP_CFG_SWBUF_CSAVE) */
 
-		/* åºå®ã¡ã¢ãªãã¼ã«ã«è¿ãã*/
+		/* 固定メモリプールに返す。*/
 
 		int idix = buf->idix;
@@ -501,5 +485,5 @@
 
 /*
- * rus_net_buf -- ãããã¯ã¼ã¯ãããã¡ãåå©ç¨ããã
+ * rus_net_buf -- ネットワークバッファを再利用する。
  */
 
@@ -522,5 +506,5 @@
 
 /*
- * net_buf_siz -- ãããã¯ã¼ã¯ãããã¡ã®ãµã¤ãºãè¿ãã
+ * net_buf_siz -- ネットワークバッファのサイズを返す。
  */
 
@@ -537,5 +521,5 @@
 
 /*
- * net_buf_max_siz -- ãããã¯ã¼ã¯ãããã¡ã®æå¤§ãµã¤ãºãè¿ãã
+ * net_buf_max_siz -- ネットワークバッファの最大サイズを返す。
  */
 
@@ -550,5 +534,5 @@
 
 /*
- *  tget_net_buf_ex -- ãããã¯ã¼ã¯ãããã¡ãç²å¾ããï¼æ¡å¼µæ©è½ï¼ã
+ *  tget_net_buf_ex -- ネットワークバッファを獲得する（拡張機能）。
  */
 
@@ -569,5 +553,5 @@
 
 /*
- *  tget_net_buf -- ãããã¯ã¼ã¯ãããã¡ãç²å¾ããï¼äºæï¼ã
+ *  tget_net_buf -- ネットワークバッファを獲得する（互換）。
  */
 
@@ -580,5 +564,5 @@
 
 /*
- * rel_net_buf -- ãããã¯ã¼ã¯ãããã¡ãè¿å´ããã
+ * rel_net_buf -- ネットワークバッファを返却する。
  */
 
@@ -593,5 +577,5 @@
 
 /*
- * net_buf_max_siz -- ãããã¯ã¼ã¯ãããã¡ã®æå¤§ãµã¤ãºãè¿ãã
+ * net_buf_max_siz -- ネットワークバッファの最大サイズを返す。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,11 +36,9 @@
 
 /*
- *  ãããã¯ã¼ã¯ãããã¡
+ *  ネットワークバッファ
  *
- *    4 ãªã¯ãããã§ã¢ã©ã¤ã³ããå¿
-è¦ã®ãããã­ã»ããµãèæ
-®ãã¦ã
- *    IF ããããµã¤ãºã 4 ãªã¯ãããå¢çã§ãªãã®å ´åã
- *    IP ãããä»¥éã 4 ãªã¯ãããå¢çã«èª¿æ´ããã
+ *    4 オクテットでアラインする必要のあるプロセッサを考慮して、
+ *    IF ヘッダサイズが 4 オクテット境界でないの場合、
+ *    IP ヘッダ以降を 4 オクテット境界に調整する。
  */
 
@@ -62,18 +48,18 @@
 
 /*
- *  ãã³ãã¬ã¼ã
+ *  テンプレート
  */
 
 struct t_net_buf {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
-#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
-	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
-#endif
-#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
-	uint8_t		halign[4 - IF_HDR_ALIGN];
-#endif
-	uint8_t		buf[IF_MIN_LEN];	/* ãããã¡æ¬ä½ */
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
+#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
+	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
+#endif
+#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
+	uint8_t		halign[4 - IF_HDR_ALIGN];
+#endif
+	uint8_t		buf[IF_MIN_LEN];	/* バッファ本体 */
 	};
 
@@ -87,90 +73,90 @@
 
 /*
- *  64 ãªã¯ããã
+ *  64 オクテット
  */
 
 typedef struct t_net_buf_64 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
-#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
-	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
-#endif
-#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
-	uint8_t		halign[4 - IF_HDR_ALIGN];
-#endif
-	uint8_t		buf[64]; /* ãããã¡æ¬ä½	*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
+#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
+	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
+#endif
+#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
+	uint8_t		halign[4 - IF_HDR_ALIGN];
+#endif
+	uint8_t		buf[64]; /* バッファ本体	*/
 	} T_NET_BUF_64;
 
 /*
- *  128 ãªã¯ããã
+ *  128 オクテット
  */
 
 typedef struct t_net_buf_128 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
-#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
-	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
-#endif
-#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
-	uint8_t		halign[4 - IF_HDR_ALIGN];
-#endif
-	uint8_t		buf[128]; /* ãããã¡æ¬ä½	*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
+#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
+	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
+#endif
+#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
+	uint8_t		halign[4 - IF_HDR_ALIGN];
+#endif
+	uint8_t		buf[128]; /* バッファ本体	*/
 	} T_NET_BUF_128;
 
 /*
- *  256 ãªã¯ããã
+ *  256 オクテット
  */
 
 typedef struct t_net_buf_256 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
-#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
-	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
-#endif
-#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
-	uint8_t		halign[4 - IF_HDR_ALIGN];
-#endif
-	uint8_t		buf[256]; /* ãããã¡æ¬ä½	*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
+#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
+	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
+#endif
+#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
+	uint8_t		halign[4 - IF_HDR_ALIGN];
+#endif
+	uint8_t		buf[256]; /* バッファ本体	*/
 	} T_NET_BUF_256;
 
 /*
- *  512 ãªã¯ããã
+ *  512 オクテット
  */
 
 typedef struct t_net_buf_512 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
-#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
-	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
-#endif
-#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
-	uint8_t		halign[4 - IF_HDR_ALIGN];
-#endif
-	uint8_t		buf[512];/* ãããã¡æ¬ä½	*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
+#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
+	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
+#endif
+#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
+	uint8_t		halign[4 - IF_HDR_ALIGN];
+#endif
+	uint8_t		buf[512];/* バッファ本体	*/
 	} T_NET_BUF_512;
 
 /*
- *  1024 ãªã¯ããã
+ *  1024 オクテット
  */
 
 typedef struct t_net_buf_1024 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
-#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
-	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
-#endif
-#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
-	uint8_t		halign[4 - IF_HDR_ALIGN];
-#endif
-	uint8_t		buf[1024]; /* ãããã¡æ¬ä½	*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
+#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
+	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
+#endif
+#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
+	uint8_t		halign[4 - IF_HDR_ALIGN];
+#endif
+	uint8_t		buf[1024]; /* バッファ本体	*/
 	} T_NET_BUF_1024;
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®æå¤§ PDU ãµã¤ãº
+ *  ネットワークインタフェースの最大 PDU サイズ
  */
 
@@ -178,7 +164,7 @@
 
 typedef struct t_net_buf_if_pdu {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -188,8 +174,8 @@
 #endif
 	uint8_t		buf[IF_PDU_SIZE];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 #if defined(IF_PDU_HDR_PADDING)
 	uint8_t		padding[IF_PDU_HDR_PADDING];
-#endif				/* ãããã®ä½å		*/
+#endif				/* ヘッダの余分		*/
 	} T_NET_BUF_IF_PDU;
 
@@ -197,5 +183,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ãããã¡è¡¨
+ *  ネットワークバッファ表
  */
 
@@ -218,31 +204,31 @@
 
 /*
- *  ãããã¯ã¼ã¯ãããã¡ã»ãã©ã°	
- */
-
-/*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹åºåå¾ã«ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªãã
- *  æ³¨æ: åºåå¾ã«ãã®ãã©ã°ã¯ã¯ãªã¢ãããã
+ *  ネットワークバッファ・フラグ	
+ */
+
+/*
+ *  ネットワークインタフェース出力後にネットワークバッファを開放しない。
+ *  注意: 出力後にこのフラグはクリアされる。
  */
 #define NB_FLG_NOREL_IFOUT	UINT_C(0x80)
 
 /*
- *  ESP ç¨ãã©ã°
+ *  ESP 用フラグ
  */
 #define NB_FLG_DECRYPED		UINT_C(0x40)
 
 /*
- *  ãããã¯ã¼ã¯ãããã¡ç²å¾å±æ§
- */
-
-/* æ¢ç´¢å±æ§ */
-
-#define NBA_SEARCH_ASCENT	UINT_C(0x1000)	/* å¤§ããªãµã¤ãºã®æ¹åã«æ¢ç´¢ããã	*/
-#define NBA_SEARCH_DESCENT	UINT_C(0x2000)	/* å°ããªãµã¤ãºã®æ¹åã«æ¢ç´¢ããã	*/
-#define NBA_RESERVE_TCP		UINT_C(0x4000)	/* TCP ç¨ã«ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/
-#define NBA_ID_MASK		UINT_C(0x0fff)	/* éä¿¡ç«¯ç¹ ID ãæ¸¡ãå ´åã®ãã¹ã¯å¤	*/
-
-/*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  ネットワークバッファ獲得属性
+ */
+
+/* 探索属性 */
+
+#define NBA_SEARCH_ASCENT	UINT_C(0x1000)	/* 大きなサイズの方向に探索する。	*/
+#define NBA_SEARCH_DESCENT	UINT_C(0x2000)	/* 小さなサイズの方向に探索する。	*/
+#define NBA_RESERVE_TCP		UINT_C(0x4000)	/* TCP 用にネットワークバッファを予約する。*/
+#define NBA_ID_MASK		UINT_C(0x0fff)	/* 通信端点 ID を渡す場合のマスク値	*/
+
+/*
+ *  関数シミュレーションマクロ
  */
 
@@ -250,5 +236,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_count.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_count.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_count.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -111,6 +99,5 @@
 
 /* 
- *  ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬
+ *  ネットワーク統計情報の計測
  */
 
@@ -137,5 +124,5 @@
 
 /*
- *  è¨æ¸¬ç¨å¤æ°
+ *  計測用変数
  */
 
@@ -145,5 +132,5 @@
 
 T_NET_COUNT	net_count_ppp;
-T_NET_COUNT_VAL	net_count_ppp_no_bufs;		/* net_buf å²ãå½ã¦å¤±ææ°	*/
+T_NET_COUNT_VAL	net_count_ppp_no_bufs;		/* net_buf 割り当て失敗数	*/
 
 #endif	/* of #if NET_COUNT_ENABLE & PROTO_FLG_PPP */
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_count.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_count.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_count.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,6 +69,5 @@
 
 /*
- *  ãããã¯ã¼ã¯çµ±è¨æ
-å ±ã®è¨æ¸¬
+ *  ネットワーク統計情報の計測
  */
 
@@ -96,10 +83,10 @@
 
 typedef struct t_net_count {
-	T_NET_COUNT_VAL	in_octets;		/* åä¿¡ãªã¯ãããæ°	*/
-	T_NET_COUNT_VAL	out_octets;		/* éä¿¡ãªã¯ãããæ°	*/
-	T_NET_COUNT_VAL	in_packets;		/* åä¿¡ãã±ããæ°	*/
-	T_NET_COUNT_VAL	out_packets;		/* éä¿¡ãã±ããæ°	*/
-	T_NET_COUNT_VAL	in_err_packets;		/* åä¿¡ã¨ã©ã¼ãã±ããæ°	*/
-	T_NET_COUNT_VAL	out_err_packets;	/* éä¿¡ã¨ã©ã¼ãã±ããæ°	*/
+	T_NET_COUNT_VAL	in_octets;		/* 受信オクテット数	*/
+	T_NET_COUNT_VAL	out_octets;		/* 送信オクテット数	*/
+	T_NET_COUNT_VAL	in_packets;		/* 受信バケット数	*/
+	T_NET_COUNT_VAL	out_packets;		/* 送信バケット数	*/
+	T_NET_COUNT_VAL	in_err_packets;		/* 受信エラーバケット数	*/
+	T_NET_COUNT_VAL	out_err_packets;	/* 送信エラーバケット数	*/
 	} T_NET_COUNT;
 
@@ -119,9 +106,9 @@
 
 extern T_NET_COUNT	net_count_ppp;
-extern T_NET_COUNT_VAL	net_count_ppp_no_bufs;	/* net_buf å²ãå½ã¦å¤±ææ°	*/
-
-#endif	/* of #ifndef _MACRO_ONLY */
-
-#define NC_PPP_SIZE	7			/* ã«ã¦ã³ã¿æ° */
+extern T_NET_COUNT_VAL	net_count_ppp_no_bufs;	/* net_buf 割り当て失敗数	*/
+
+#endif	/* of #ifndef _MACRO_ONLY */
+
+#define NC_PPP_SIZE	7			/* カウンタ数 */
 
 #else	/* of #if NET_COUNT_ENABLE & PROTO_FLG_PPP */
@@ -248,5 +235,5 @@
 #ifdef SUPPORT_LOOP
 
-/* ã«ã¼ãããã¯ */
+/* ループバック */
 
 #if NET_COUNT_ENABLE & PROTO_FLG_LOOP
@@ -292,17 +279,17 @@
 #if NET_COUNT_ENABLE & PROTO_FLG_ETHER_NIC
 
-#define NC_ETHER_NIC_RESETS		0	/* ãªã»ããæ°			*/
-#define NC_ETHER_NIC_TXB_QOVRS		1	/* éä¿¡ã»ããã©è³æºè¿å´ä¸éãªã¼ãã¼æ°*/
-#define NC_ETHER_NIC_TIMEOUTS		2	/* éä¿¡ã¿ã¤ã ã¢ã¦ãæ°		*/
-#define NC_ETHER_NIC_COLS		3	/* ã³ãªã¸ã§ã³æ°			*/
-#define NC_ETHER_NIC_OUT_ERR_PACKETS	4	/* éä¿¡ã¨ã©ã¼ãã±ããæ°		*/
-#define NC_ETHER_NIC_OUT_PACKETS	5	/* éä¿¡ãã±ããæ°		*/
-#define NC_ETHER_NIC_OUT_OCTETS		6	/* éä¿¡ãªã¯ãããæ°		*/
-#define NC_ETHER_NIC_RXB_QOVRS		7	/* åä¿¡ã»ããã©è³æºè¿å´ä¸éãªã¼ãã¼æ°*/
-#define NC_ETHER_NIC_NO_BUFS		8	/* net_buf å²ãå½ã¦å¤±ææ°	*/
-#define NC_ETHER_NIC_IN_ERR_PACKETS	9	/* åä¿¡ã¨ã©ã¼ãã±ããæ°		*/
-#define NC_ETHER_NIC_IN_PACKETS		10	/* åä¿¡ãã±ããæ°		*/
-#define NC_ETHER_NIC_IN_OCTETS		11	/* åä¿¡ãªã¯ãããæ°		*/
-#define NC_ETHER_NIC_SIZE		12	/* ã«ã¦ã³ã¿æ°			*/
+#define NC_ETHER_NIC_RESETS		0	/* リセット数			*/
+#define NC_ETHER_NIC_TXB_QOVRS		1	/* 送信セマフォ資源返却上限オーバー数*/
+#define NC_ETHER_NIC_TIMEOUTS		2	/* 送信タイムアウト数		*/
+#define NC_ETHER_NIC_COLS		3	/* コリジョン数			*/
+#define NC_ETHER_NIC_OUT_ERR_PACKETS	4	/* 送信エラーバケット数		*/
+#define NC_ETHER_NIC_OUT_PACKETS	5	/* 送信バケット数		*/
+#define NC_ETHER_NIC_OUT_OCTETS		6	/* 送信オクテット数		*/
+#define NC_ETHER_NIC_RXB_QOVRS		7	/* 受信セマフォ資源返却上限オーバー数*/
+#define NC_ETHER_NIC_NO_BUFS		8	/* net_buf 割り当て失敗数	*/
+#define NC_ETHER_NIC_IN_ERR_PACKETS	9	/* 受信エラーバケット数		*/
+#define NC_ETHER_NIC_IN_PACKETS		10	/* 受信バケット数		*/
+#define NC_ETHER_NIC_IN_OCTETS		11	/* 受信オクテット数		*/
+#define NC_ETHER_NIC_SIZE		12	/* カウンタ数			*/
 
 #define NET_COUNT_ETHER_NIC(v,c)	((v)+=(c))
@@ -322,5 +309,5 @@
 #endif	/* of #ifdef SUPPORT_ETHER */
 
-/* ãããã¯ã¼ã¯ãããã¡ */
+/* ネットワークバッファ */
 
 #if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
@@ -358,26 +345,25 @@
 #if NET_COUNT_ENABLE & PROTO_FLG_IP4
 
-#define NC_IP4_FRAG_OUT_FRAGS		0	/* åå²éä¿¡ããã©ã°ã¡ã³ãæ°	*/
-#define NC_IP4_FRAG_OUT			1	/* åå²éä¿¡æ°			*/
-#define NC_IP4_OUT_ERR_PACKETS		2	/* éä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°	*/
-#define NC_IP4_OUT_PACKETS		3	/* éä¿¡ãã¼ã¿ã°ã©ã æ°		*/
-#define NC_IP4_OUT_OCTETS		4	/* éä¿¡ãªã¯ãããæ°		*/
-#define NC_IP4_FRAG_IN_TMOUT		5	/* åå²åä¿¡ã¿ã¤ã ã¢ã¦ãæ°		*/
-#define NC_IP4_FRAG_IN_NO_BUF		6	/* åå²åä¿¡ãããã¡ãå½ã¦å¤±ææ°	*/
-#define NC_IP4_FRAG_IN_DROP		7	/* åå²åä¿¡ç ´æ£æ°		*/
-#define NC_IP4_FRAG_IN_OK		8	/* åå²åä¿¡åæ§ææåæ°		*/
-#define NC_IP4_FRAG_IN_FRAGS		9	/* åå²åä¿¡ãã©ã°ã¡ã³ãæ°		*/
-#define NC_IP4_FRAG_IN			10	/* åå²åä¿¡æ°			*/
-#define NC_IP4_OPTS			11	/* ãªãã·ã§ã³å
-¥åæ°		*/
-#define NC_IP4_IN_ERR_PROTO		12	/* ãã­ãã³ã«ã¨ã©ã¼æ°		*/
-#define NC_IP4_IN_ERR_ADDR		13	/* ã¢ãã¬ã¹ã¨ã©ã¼æ°		*/
-#define NC_IP4_IN_ERR_VER		14	/* ãã¼ã¸ã§ã³ã¨ã©ã¼æ°		*/
-#define NC_IP4_IN_ERR_SHORT		15	/* é·ãã¨ã©ã¼æ°			*/
-#define NC_IP4_IN_ERR_CKSUM		16	/* ãã§ãã¯ãµã ã¨ã©ã¼æ°		*/
-#define NC_IP4_IN_ERR_PACKETS		17	/* åä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°	*/
-#define NC_IP4_IN_PACKETS		18	/* åä¿¡ãã¼ã¿ã°ã©ã æ°		*/
-#define NC_IP4_IN_OCTETS		19	/* åä¿¡ãªã¯ãããæ°		*/
-#define NC_IP4_SIZE			20	/* ã«ã¦ã³ã¿æ°			*/
+#define NC_IP4_FRAG_OUT_FRAGS		0	/* 分割送信、フラグメント数	*/
+#define NC_IP4_FRAG_OUT			1	/* 分割送信数			*/
+#define NC_IP4_OUT_ERR_PACKETS		2	/* 送信エラーデータグラム数	*/
+#define NC_IP4_OUT_PACKETS		3	/* 送信データグラム数		*/
+#define NC_IP4_OUT_OCTETS		4	/* 送信オクテット数		*/
+#define NC_IP4_FRAG_IN_TMOUT		5	/* 分割受信タイムアウト数		*/
+#define NC_IP4_FRAG_IN_NO_BUF		6	/* 分割受信バッファり当て失敗数	*/
+#define NC_IP4_FRAG_IN_DROP		7	/* 分割受信破棄数		*/
+#define NC_IP4_FRAG_IN_OK		8	/* 分割受信再構成成功数		*/
+#define NC_IP4_FRAG_IN_FRAGS		9	/* 分割受信フラグメント数		*/
+#define NC_IP4_FRAG_IN			10	/* 分割受信数			*/
+#define NC_IP4_OPTS			11	/* オプション入力数		*/
+#define NC_IP4_IN_ERR_PROTO		12	/* プロトコルエラー数		*/
+#define NC_IP4_IN_ERR_ADDR		13	/* アドレスエラー数		*/
+#define NC_IP4_IN_ERR_VER		14	/* バージョンエラー数		*/
+#define NC_IP4_IN_ERR_SHORT		15	/* 長さエラー数			*/
+#define NC_IP4_IN_ERR_CKSUM		16	/* チェックサムエラー数		*/
+#define NC_IP4_IN_ERR_PACKETS		17	/* 受信エラーデータグラム数	*/
+#define NC_IP4_IN_PACKETS		18	/* 受信データグラム数		*/
+#define NC_IP4_IN_OCTETS		19	/* 受信オクテット数		*/
+#define NC_IP4_SIZE			20	/* カウンタ数			*/
 
 #define NET_COUNT_IP4(v,c)	((v)+=(c))
@@ -439,23 +425,23 @@
 #if NET_COUNT_ENABLE & PROTO_FLG_IP6
 
-#define NC_IP6_FRAG_OUT_FRAGS		0	/* åå²éä¿¡ããã©ã°ã¡ã³ãæ°	*/
-#define NC_IP6_FRAG_OUT			1	/* åå²éä¿¡æ°			*/
-#define NC_IP6_OUT_ERR_PACKETS		2	/* éä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°	*/
-#define NC_IP6_OUT_PACKETS		3	/* éä¿¡ãã¼ã¿ã°ã©ã æ°		*/
-#define NC_IP6_OUT_OCTETS		4	/* éä¿¡ãªã¯ãããæ°		*/
-#define NC_IP6_FRAG_IN_TMOUT		5	/* åå²åä¿¡ã¿ã¤ã ã¢ã¦ãæ°		*/
-#define NC_IP6_FRAG_IN_NO_BUF		6	/* åå²åä¿¡ãããã¡ãå½ã¦å¤±ææ°	*/
-#define NC_IP6_FRAG_IN_DROP		7	/* åå²åä¿¡ç ´æ£æ°		*/
-#define NC_IP6_FRAG_IN_OK		8	/* åå²åä¿¡åæ§ææåæ°		*/
-#define NC_IP6_FRAG_IN_FRAGS		9	/* åå²åä¿¡ãã©ã°ã¡ã³ãæ°		*/
-#define NC_IP6_FRAG_IN			10	/* åå²åä¿¡æ°			*/
-#define NC_IP6_IN_ERR_PROTO		11	/* ãã­ãã³ã«ã¨ã©ã¼æ°		*/
-#define NC_IP6_IN_ERR_ADDR		12	/* ã¢ãã¬ã¹ã¨ã©ã¼æ°		*/
-#define NC_IP6_IN_ERR_VER		13	/* ãã¼ã¸ã§ã³ã¨ã©ã¼æ°		*/
-#define NC_IP6_IN_ERR_SHORT		14	/* é·ãã¨ã©ã¼æ°			*/
-#define NC_IP6_IN_ERR_PACKETS		15	/* åä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°	*/
-#define NC_IP6_IN_PACKETS		16	/* åä¿¡ãã¼ã¿ã°ã©ã æ°		*/
-#define NC_IP6_IN_OCTETS		17	/* åä¿¡ãªã¯ãããæ°		*/
-#define NC_IP6_SIZE			18	/* ã«ã¦ã³ã¿æ°			*/
+#define NC_IP6_FRAG_OUT_FRAGS		0	/* 分割送信、フラグメント数	*/
+#define NC_IP6_FRAG_OUT			1	/* 分割送信数			*/
+#define NC_IP6_OUT_ERR_PACKETS		2	/* 送信エラーデータグラム数	*/
+#define NC_IP6_OUT_PACKETS		3	/* 送信データグラム数		*/
+#define NC_IP6_OUT_OCTETS		4	/* 送信オクテット数		*/
+#define NC_IP6_FRAG_IN_TMOUT		5	/* 分割受信タイムアウト数		*/
+#define NC_IP6_FRAG_IN_NO_BUF		6	/* 分割受信バッファり当て失敗数	*/
+#define NC_IP6_FRAG_IN_DROP		7	/* 分割受信破棄数		*/
+#define NC_IP6_FRAG_IN_OK		8	/* 分割受信再構成成功数		*/
+#define NC_IP6_FRAG_IN_FRAGS		9	/* 分割受信フラグメント数		*/
+#define NC_IP6_FRAG_IN			10	/* 分割受信数			*/
+#define NC_IP6_IN_ERR_PROTO		11	/* プロトコルエラー数		*/
+#define NC_IP6_IN_ERR_ADDR		12	/* アドレスエラー数		*/
+#define NC_IP6_IN_ERR_VER		13	/* バージョンエラー数		*/
+#define NC_IP6_IN_ERR_SHORT		14	/* 長さエラー数			*/
+#define NC_IP6_IN_ERR_PACKETS		15	/* 受信エラーデータグラム数	*/
+#define NC_IP6_IN_PACKETS		16	/* 受信データグラム数		*/
+#define NC_IP6_IN_OCTETS		17	/* 受信オクテット数		*/
+#define NC_IP6_SIZE			18	/* カウンタ数			*/
 
 #define NET_COUNT_IP6(v,c)	((v)+=(c))
@@ -475,12 +461,12 @@
 #if NET_COUNT_ENABLE & PROTO_FLG_ICMP6
 
-#define NC_ICMP6_OUT_ERR_PACKETS	0	/* éä¿¡ã¨ã©ã¼ ICMP ãã¼ã¿æ°	*/
-#define NC_ICMP6_OUT_PACKETS		1	/* éä¿¡ ICMP ãã¼ã¿æ°		*/
-#define NC_ICMP6_OUT_OCTETS		2	/* éä¿¡ ICMP ãªã¯ãããæ°		*/
-#define NC_ICMP6_IN_ERR_CKSUM		3	/* é·ãã¨ã©ã¼æ°			*/
-#define NC_ICMP6_IN_ERR_PACKETS		4	/* åä¿¡ã¨ã©ã¼ ICMP ãã¼ã¿æ°	*/
-#define NC_ICMP6_IN_PACKETS		5	/* åä¿¡ ICMP ãã¼ã¿æ°		*/
-#define NC_ICMP6_IN_OCTETS		6	/* åä¿¡ ICMP ãªã¯ãããæ°		*/
-#define NC_ICMP6_SIZE			7	/* ã«ã¦ã³ã¿æ°			*/
+#define NC_ICMP6_OUT_ERR_PACKETS	0	/* 送信エラー ICMP データ数	*/
+#define NC_ICMP6_OUT_PACKETS		1	/* 送信 ICMP データ数		*/
+#define NC_ICMP6_OUT_OCTETS		2	/* 送信 ICMP オクテット数		*/
+#define NC_ICMP6_IN_ERR_CKSUM		3	/* 長さエラー数			*/
+#define NC_ICMP6_IN_ERR_PACKETS		4	/* 受信エラー ICMP データ数	*/
+#define NC_ICMP6_IN_PACKETS		5	/* 受信 ICMP データ数		*/
+#define NC_ICMP6_IN_OCTETS		6	/* 受信 ICMP オクテット数		*/
+#define NC_ICMP6_SIZE			7	/* カウンタ数			*/
 
 #define NET_COUNT_ICMP6(v,c)	((v)+=(c))
@@ -500,12 +486,12 @@
 #if NET_COUNT_ENABLE & PROTO_FLG_ND6
 
-#define NC_ND6_DAD_OUT_PACKETS		0	/* éè¤ã¢ãã¬ã¹æ¤åºéä¿¡æ°		*/
-#define NC_ND6_NS_OUT_PACKETS		1	/* è¿é£è¦è«éä¿¡æ°		*/
-#define NC_ND6_NS_IN_PACKETS		2	/* è¿é£è¦è«åä¿¡æ°		*/
-#define NC_ND6_NA_OUT_PACKETS		3	/* è¿é£éç¥éä¿¡æ°		*/
-#define NC_ND6_NA_IN_PACKETS		4	/* è¿é£éç¥åä¿¡æ°		*/
-#define NC_ND6_RS_OUT_PACKETS		5	/* ã«ã¼ã¿è¦è«åºåæ°		*/
-#define NC_ND6_RA_IN_PACKETS		6	/* ã«ã¼ã¿éç¥åä¿¡æ°		*/
-#define NC_ND6_SIZE			7	/* ã«ã¦ã³ã¿æ°			*/
+#define NC_ND6_DAD_OUT_PACKETS		0	/* 重複アドレス検出送信数		*/
+#define NC_ND6_NS_OUT_PACKETS		1	/* 近隣要請送信数		*/
+#define NC_ND6_NS_IN_PACKETS		2	/* 近隣要請受信数		*/
+#define NC_ND6_NA_OUT_PACKETS		3	/* 近隣通知送信数		*/
+#define NC_ND6_NA_IN_PACKETS		4	/* 近隣通知受信数		*/
+#define NC_ND6_RS_OUT_PACKETS		5	/* ルータ要請出力数		*/
+#define NC_ND6_RA_IN_PACKETS		6	/* ルータ通知受信数		*/
+#define NC_ND6_SIZE			7	/* カウンタ数			*/
 
 #define NET_COUNT_ND6(v,c)	((v)+=(c))
@@ -531,29 +517,29 @@
 #if NET_COUNT_ENABLE & PROTO_FLG_TCP
 
-#define NC_TCP_CONNECTS			0	/* è½åãªã¼ãã³æ°		*/
-#define NC_TCP_ACCEPTS			1	/* ååãªã¼ãã³æ°		*/
-#define NC_TCP_RTT_UPDATES		2	/* RTT æ´æ°æ°			*/
-#define NC_TCP_SEND_RSTS		3	/* éä¿¡ãRST æ°			*/
-#define NC_TCP_SEND_ACKS		4	/* éä¿¡ãACK æ°			*/
-#define NC_TCP_SEND_URG_SEGS		5	/* éä¿¡ãç·æ¥ã»ã°ã¡ã³ãæ°	*/
-#define NC_TCP_SEND_DATA_SEGS		6	/* éä¿¡ãã¼ã¿ã»ã°ã¡ã³ãæ°	*/
-#define NC_TCP_SEND_REXMIT_SEGS		7	/* åéä¿¡ã»ã°ã¡ã³ãæ°		*/
-#define NC_TCP_SEND_SEGS		8	/* éä¿¡ã»ã°ã¡ã³ãæ°		*/
-#define NC_TCP_SEND_CNTL_SEGS		9	/* éä¿¡å¶å¾¡ã»ã°ã¡ã³ãæ°		*/
-#define NC_TCP_SEND_DATA_OCTETS		10	/* éä¿¡ãã¼ã¿ãªã¯ãããæ°	*/
-#define NC_TCP_FREE_RCV_QUEUE		11	/* åä¿¡ã­ã¥ã¼è§£æ¾æ°		*/
-#define NC_TCP_RECV_DUP_SEGS		12	/* åä¿¡ãå¤éæ°			*/
-#define NC_TCP_RECV_DROP_SEGS		13	/* åä¿¡ãç ´æ£æ°			*/
-#define NC_TCP_RECV_RSTS		14	/* åä¿¡ãRST æ°			*/
-#define NC_TCP_RECV_DUP_ACKS		15	/* åä¿¡ãå¤é ACK æ°		*/
-#define NC_TCP_RECV_ACKS		16	/* åä¿¡ãACK æ°			*/
-#define NC_TCP_RECV_BAD_CKSUMS		17	/* åä¿¡ããã§ãã¯ãµã ä¸æ­£æ°	*/
-#define NC_TCP_RECV_BAD_HEADERS		18	/* åä¿¡ããããä¸æ­£æ°		*/
-#define NC_TCP_RECV_URG_SEGS		19	/* åä¿¡ãç·æ¥ã»ã°ã¡ã³ãæ°	*/
-#define NC_TCP_RECV_DATA_SEGS		20	/* åä¿¡ãã¼ã¿ã»ã°ã¡ã³ãæ°	*/
-#define NC_TCP_RECV_SEGS		21	/* åä¿¡ã»ã°ã¡ã³ãæ°		*/
-#define NC_TCP_RECV_DATA_OCTETS		22	/* åä¿¡ãã¼ã¿ãªã¯ãããæ°	*/
-#define NC_TCP_RECV_OCTETS		23	/* åä¿¡ãªã¯ãããæ°		*/
-#define NC_TCP_SIZE			24	/* ã«ã¦ã³ã¿æ°			*/
+#define NC_TCP_CONNECTS			0	/* 能動オープン数		*/
+#define NC_TCP_ACCEPTS			1	/* 受動オープン数		*/
+#define NC_TCP_RTT_UPDATES		2	/* RTT 更新数			*/
+#define NC_TCP_SEND_RSTS		3	/* 送信、RST 数			*/
+#define NC_TCP_SEND_ACKS		4	/* 送信、ACK 数			*/
+#define NC_TCP_SEND_URG_SEGS		5	/* 送信、緊急セグメント数	*/
+#define NC_TCP_SEND_DATA_SEGS		6	/* 送信データセグメント数	*/
+#define NC_TCP_SEND_REXMIT_SEGS		7	/* 再送信セグメント数		*/
+#define NC_TCP_SEND_SEGS		8	/* 送信セグメント数		*/
+#define NC_TCP_SEND_CNTL_SEGS		9	/* 送信制御セグメント数		*/
+#define NC_TCP_SEND_DATA_OCTETS		10	/* 送信データオクテット数	*/
+#define NC_TCP_FREE_RCV_QUEUE		11	/* 受信キュー解放数		*/
+#define NC_TCP_RECV_DUP_SEGS		12	/* 受信、多重数			*/
+#define NC_TCP_RECV_DROP_SEGS		13	/* 受信、破棄数			*/
+#define NC_TCP_RECV_RSTS		14	/* 受信、RST 数			*/
+#define NC_TCP_RECV_DUP_ACKS		15	/* 受信、多重 ACK 数		*/
+#define NC_TCP_RECV_ACKS		16	/* 受信、ACK 数			*/
+#define NC_TCP_RECV_BAD_CKSUMS		17	/* 受信、チェックサム不正数	*/
+#define NC_TCP_RECV_BAD_HEADERS		18	/* 受信、ヘッダ不正数		*/
+#define NC_TCP_RECV_URG_SEGS		19	/* 受信、緊急セグメント数	*/
+#define NC_TCP_RECV_DATA_SEGS		20	/* 受信データセグメント数	*/
+#define NC_TCP_RECV_SEGS		21	/* 受信セグメント数		*/
+#define NC_TCP_RECV_DATA_OCTETS		22	/* 受信データオクテット数	*/
+#define NC_TCP_RECV_OCTETS		23	/* 受信オクテット数		*/
+#define NC_TCP_SIZE			24	/* カウンタ数			*/
 
 #define NET_COUNT_TCP(v,c)	((v)+=(c))
@@ -598,6 +584,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_endian.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_endian.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_endian.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,5 +69,5 @@
 
 /*
- *  ãã¤ããªã¼ãã®å®ç¾©
+ *  バイトオーダの定義
  */
 
@@ -124,5 +112,5 @@
 
 /*
- *  ãã¤ããªã¼ãå¤æã®å®ç¾©
+ *  バイトオーダ変換の定義
  */
 
@@ -140,8 +128,8 @@
 
 /*
- *  æ³¨æ: IPãããä»¥éã¯ã4 ãã¤ãå¢çã«ã¢ã©ã¤ã³ããã¦ããäºã
- *        åæã¨ãã¦ãããã4 ãã¤ãå¢çã§ã¢ã¯ã»ã¹ãã
- *        ãã­ã»ããµã§ããããã¯ã¼ã¯å´ã®ãã¼ã¿ãã4 ãã¤ãå¢çã«ã¢ã©ã¤ã³
- *        ããã¦ããªãå ´åã¯ãntoahlãahtonlãnahcmpl ãä½¿ç¨ãããã¨ã
+ *  注意: IPヘッダ以降は、4 バイト境界にアラインされている事を
+ *        前提としているが、4 バイト境界でアクセスする
+ *        プロセッサで、ネットワーク側のデータが、4 バイト境界にアライン
+ *        されていない場合は、ntoahl、ahtonl、nahcmpl を使用すること。
  */
 
@@ -179,8 +167,8 @@
 
 /*
- *  æ³¨æ: IPãããä»¥éã¯ã4 ãã¤ãå¢çã«ã¢ã©ã¤ã³ããã¦ããäºã
- *        åæã¨ãã¦ãããã4 ãã¤ãå¢çã§ã¢ã¯ã»ã¹ãã
- *        ãã­ã»ããµã§ããããã¯ã¼ã¯å´ã®ãã¼ã¿ãã4 ãã¤ãå¢çã«ã¢ã©ã¤ã³
- *        ããã¦ããªãå ´åã¯ãntoahlãahtonlãnahcmpl ãä½¿ç¨ãããã¨ã
+ *  注意: IPヘッダ以降は、4 バイト境界にアラインされている事を
+ *        前提としているが、4 バイト境界でアクセスする
+ *        プロセッサで、ネットワーク側のデータが、4 バイト境界にアライン
+ *        されていない場合は、ntoahl、ahtonl、nahcmpl を使用すること。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_jsp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_jsp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_jsp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,10 @@
 
 /*
- *  JSPç¨ æ±ç¨ãããã¯ã¼ã¯ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  JSP用 汎用ネットワークコンフィギュレーションファイル
  */
 
 
 /*
- *  å
-±é æ±ç¨ãããã¯ã¼ã¯ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 汎用ネットワークコンフィギュレーションファイルのインクルード
  */
 
@@ -57,5 +44,5 @@
 
 /*
- * ãããã¯ã¼ã¯ãããã¡
+ * ネットワークバッファ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_rename.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_rename.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_rename.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,6 +36,5 @@
 
 /*
- *  æ±ç¨ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹å
-é¨åã®ãªãã¼ã 
+ *  汎用ネットワークインタフェース内部名のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -78,5 +66,5 @@
 
 /* 
- *  ãããã¯ã¼ã¯æ±ç¨ãµãã¼ãã«ã¼ãã³
+ *  ネットワーク汎用サポートルーチン
  */
 
@@ -108,5 +96,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -114,5 +102,5 @@
 
 /*
- *  net_rand -- ä¹±æ°ãè¿ãã
+ *  net_rand -- 乱数を返す。
  */
 
@@ -125,5 +113,5 @@
 
 /*
- *  srand -- ä¹±æ°ãåæåããã
+ *  srand -- 乱数を初期化する。
  */
 
@@ -138,5 +126,5 @@
 
 /*
- *  convert_hexdigit -- 16é²æ°âæå­åå¤æ
+ *  convert_hexdigit -- 16進数→文字列変換
  */
 
@@ -166,5 +154,5 @@
 
 /*
- *  mac2str -- MAC ã¢ãã¬ã¹ãæå­åã«å¤æããã
+ *  mac2str -- MAC アドレスを文字列に変換する。
  */
 
@@ -206,8 +194,8 @@
 
 /*
- *  rev_memcpy_hword -- åè»¢ã¡ã¢ãªã³ãã¼ï¼2 ãã¤ãï¼
- *
- *    ãã¤ãåä½ã«ã¢ã¯ã»ã¹ããäºã«ããã
- *    å¢çã¸ã®ã¢ã©ã¤ã³ã®åé¡ãè§£æ±ºããã
+ *  rev_memcpy_hword -- 反転メモリコピー（2 バイト）
+ *
+ *    バイト単位にアクセスする事により、
+ *    境界へのアラインの問題を解決する。
  */
 
@@ -220,8 +208,8 @@
 
 /*
- *  rev_memcpy_word -- åè»¢ã¡ã¢ãªã³ãã¼ï¼4 ãã¤ãï¼
- *
- *    ãã¤ãåä½ã«ã¢ã¯ã»ã¹ããäºã«ããã
- *    å¢çã¸ã®ã¢ã©ã¤ã³ã®åé¡ãè§£æ±ºããã
+ *  rev_memcpy_word -- 反転メモリコピー（4 バイト）
+ *
+ *    バイト単位にアクセスする事により、
+ *    境界へのアラインの問題を解決する。
  */
 
@@ -236,8 +224,8 @@
 
 /*
- *  rev_memcmp_word -- åè»¢ã¡ã¢ãªæ¯è¼ï¼4 ãã¤ãï¼
- *
- *    ãã¤ãåä½ã«ã¢ã¯ã»ã¹ããäºã«ããã
- *    å¢çã¸ã®ã¢ã©ã¤ã³ã®åé¡ãè§£æ±ºããã
+ *  rev_memcmp_word -- 反転メモリ比較（4 バイト）
+ *
+ *    バイト単位にアクセスする事により、
+ *    境界へのアラインの問題を解決する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_timer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_timer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_timer.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -112,5 +100,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -118,5 +106,5 @@
 
 /*
- *  å¼åºãã¨ã³ããªç»é²
+ *  呼出しエントリ登録
  */
 
@@ -126,5 +114,5 @@
 	int_t ix;
 
-	/* å¼åºãã¨ã³ããªãç²å¾ãã */
+	/* 呼出しエントリを獲得する */
 	syscall(wai_sem(SEM_CALL_OUT_LOCK));
 	for (ix = NUM_NET_CALLOUT; callout[-- ix].func != NULL; )
@@ -135,5 +123,5 @@
 			}
 
-	/* å¼åºãã¨ã³ããªãè¨­å®ãã */
+	/* 呼出しエントリを設定する */
 	callout[ix].func	= func;
 	callout[ix].arg		= arg;
@@ -143,5 +131,5 @@
 
 /*
- *  å¼åºãã¨ã³ããªåé¤
+ *  呼出しエントリ削除
  */
 
@@ -151,5 +139,5 @@
 	int_t ix;
 
-	/* ã¨ã³ããªãæ¢ã */
+	/* エントリを探す */
 	for (ix = NUM_NET_CALLOUT; ix -- > 0; ) {
 		syscall(wai_sem(SEM_CALL_OUT_LOCK));
@@ -164,9 +152,8 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯
- *
- *    æ³¨æ: ã¿ã¹ã¯ã³ã³ãã­ã¹ãã§å®è¡ããå¿
-è¦ãããããï¼
- *          å¨æãã³ãã©ã¯ä½¿ç¨ã§ããªãã
+ *  ネットワークタイマタスク
+ *
+ *    注意: タスクコンテキストで実行する必要があるため，
+ *          周期ハンドラは使用できない。
  */
 
@@ -192,5 +179,5 @@
 	syslog(LOG_NOTICE, "[NET/TIMER:%d] started.", tskid);
 
-	/* IP ãåæåããã*/
+	/* IP を初期化する。*/
 
 #if defined(_IP6_CFG)
@@ -204,5 +191,5 @@
 #ifdef SUPPORT_TCP
 
-	/* TCP åºåã¿ã¹ã¯ãèµ·åãã */
+	/* TCP 出力タスクを起動する */
 	syscall(act_tsk(TCP_OUTPUT_TASK));
 
@@ -211,5 +198,5 @@
 #if defined(SUPPORT_UDP) && defined(UDP_CFG_NON_BLOCKING)
 
-	/* UDP åºåã¿ã¹ã¯ãèµ·åãã */
+	/* UDP 出力タスクを起動する */
 	syscall(act_tsk(UDP_OUTPUT_TASK));
 
@@ -217,5 +204,5 @@
 
 	while (true) {
-		/* ã¿ã¤ã ã¢ã¦ãããã¨ã³ããªãå¼åºãã*/
+		/* タイムアウトしたエントリを呼出す。*/
 		syscall(wai_sem(SEM_CALL_OUT_TIMEOUT));
 		for (ix = NUM_NET_CALLOUT; ix -- > 0; ) {
@@ -235,7 +222,7 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¿ã¤ããã³ãã©
- *
- *    NET_TIMER_CYCLE (100ms) æ¯ã«å¼åºãããã
+ *  ネットワークタイマハンドラ
+ *
+ *    NET_TIMER_CYCLE (100ms) 毎に呼出される。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_timer.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_timer.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_timer.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,8 +68,8 @@
 #define _NET_TIMER_H_
 
-#include <tinet_kernel_defs.h>	/* ã«ã¼ãã«ã«é¢ããäºææ§å®ç¾©ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããã*/
+#include <tinet_kernel_defs.h>	/* カーネルに関する互換性定義ファイルをインクルードする。*/
 
 /*
- *  TOPPERS/JSP ã«ã¼ãã«ãã·ã¹ãã æå» (SYSTIM) ã®å¨æ³¢æ°
+ *  TOPPERS/JSP カーネル、システム時刻 (SYSTIM) の周波数
  */
 
@@ -89,19 +77,19 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¿ã¤ãã®å®ç¾©
+ *  ネットワークタイマの定義
  */
 
-#define NET_TIMER_CYCLE		ULONG_C(100000)	/* [us]ãfast timeout ä½¿ç¨æã®åä½å¨æ	*/
-						/* ã¿ã¤ãã®å¨æ³¢æ°			*/
+#define NET_TIMER_CYCLE		ULONG_C(100000)	/* [us]、fast timeout 使用時の動作周期	*/
+						/* タイマの周波数			*/
 #define NET_TIMER_HZ		(SYSTIM_HZ/NET_TIMER_CYCLE)
 
 #ifdef _IP6_CFG
-#define NUM_NET_CALLOUT		12		/* ã¿ã¤ã ã¢ã¦ãå¼åºãæ°ã10 ä»¥ä¸	*/
+#define NUM_NET_CALLOUT		12		/* タイムアウト呼出し数、10 以上	*/
 #else
-#define NUM_NET_CALLOUT		10		/* ã¿ã¤ã ã¢ã¦ãå¼åºãæ°ã10 ä»¥ä¸	*/
+#define NUM_NET_CALLOUT		10		/* タイムアウト呼出し数、10 以上	*/
 #endif
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãå¼åºãã¨ã³ããª
+ *  タイムアウト呼出しエントリ
  */
 
@@ -109,11 +97,11 @@
 
 typedef struct t_net_callout {
-	callout_func	func;		/* å¼åºãé¢æ°		*/
-	void		*arg;		/* é¢æ°ã¸ã®å¼æ°		*/
-	RELTIM		timeout;	/* ã¿ã¤ã ã¢ã¦ã		*/
+	callout_func	func;		/* 呼出す関数		*/
+	void		*arg;		/* 関数への引数		*/
+	RELTIM		timeout;	/* タイムアウト		*/
 	} T_NET_CALLOUT;
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -122,5 +110,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ã¨å¨æãã³ãã©
+ *  ネットワークタイマタスクと周期ハンドラ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/net_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/net_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,5 +69,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -87,5 +75,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,5 +68,5 @@
 
 /* 
- *  PPP å¦çã¿ã¹ã¯ã®æ¬ä½
+ *  PPP 処理タスクの本体
  */
 
@@ -112,13 +100,11 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-uint8_t	ppp_phase = PPP_PHASE_INITIALIZE;	/* ãªã³ã¯ã®ç¶æ
-		*/
-
-/*
- *  ãã­ãã³ã«è¡¨
+ *  全域変数
+ */
+
+uint8_t	ppp_phase = PPP_PHASE_INITIALIZE;	/* リンクの状態		*/
+
+/*
+ *  プロトコル表
  */
 
@@ -150,5 +136,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -160,5 +146,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -172,6 +158,5 @@
 
 /*
- *  PPP å
-¥åã®è§£æ
+ *  PPP 入力の解析
  */
 
@@ -186,6 +171,6 @@
 	NET_COUNT_PPP(net_count_ppp.in_packets, 1);
 
-	/* ãã¬ã¼ã é·ããã§ãã¯ãã */
-	if (input->len < sizeof(T_PPP_HDR)) {	/* FreeBSD ã§ã¯ PPP_HDRLEN ã¯ 4 */
+	/* フレーム長をチェックする */
+	if (input->len < sizeof(T_PPP_HDR)) {	/* FreeBSD では PPP_HDRLEN は 4 */
 		syslog(LOG_NOTICE, "[PPP] recv short frame.");
 		goto buf_rel;
@@ -194,5 +179,5 @@
 	proto = ntohs(*GET_PPP_HDR(input));
 
-	/* ãã­ãã³ã«ã LCP ä»¥å¤ã§ãLCP ããªã¼ãã³ããã¦ããªããã°ã¨ã©ã¼ */
+	/* プロトコルが LCP 以外で、LCP がオープンされていなければエラー */
 	if (proto != PPP_LCP && lcp_fsm.state != PPP_FSM_OPENED) {
 		syslog(LOG_NOTICE, "[PPP] LCP not open.");
@@ -200,6 +185,5 @@
 		}
 
-	/* ãªã³ã¯ãèªè¨¼ç¶æ
-ä»¥åã¯ãLCPãLQRãPAPãCHAP ã®ã¿åãä»ãã */
+	/* リンクが認証状態以前は、LCP、LQR、PAP、CHAP のみ受け付ける */
 	if (ppp_phase <= PPP_PHASE_AUTHENTICATE &&
 	    !(proto == PPP_LCP || proto == PPP_LQR ||
@@ -209,6 +193,5 @@
 		}
 
-	/* ä¸ä½ãã­ãã³ã«ã®å
-¥åé¢æ°ãå¼åºã */
+	/* 上位プロトコルの入力関数を呼出す */
 	for (ix = 0; (entry = protocols[ix]) != NULL; ix ++) {
 		if (entry->proto == proto && entry->input != NULL) {
@@ -232,5 +215,5 @@
 
 /*
- *  ppp_output -- PPP ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°
+ *  ppp_output -- PPP インタフェースの出力関数
  */
 
@@ -242,7 +225,6 @@
 #ifdef PPP_CFG_MODEM
 
-#if 0	/* ä¿ç */
-	/* ã¢ãã ã®æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+#if 0	/* 保留 */
+	/* モデムの接続完了まで待つ。*/
 	if ((error = wait_modem()) != E_OK)
 		goto buf_ret;
@@ -252,6 +234,5 @@
 
 #ifdef _IP6_CFG
-	/* IPV6CP ã®æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+	/* IPV6CP の接続完了まで待つ。*/
 	if ((error = wait_ipv6cp()) != E_OK)
 		goto buf_ret;
@@ -259,6 +240,5 @@
 
 #ifdef _IP4_CFG
-	/* IPCP ã®æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+	/* IPCP の接続完了まで待つ。*/
 	if ((error = wait_ipcp()) != E_OK)
 		goto buf_ret;
@@ -266,6 +246,5 @@
 
 #ifdef _IP4_CFG
-	/* IPCP ã®æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+	/* IPCP の接続完了まで待つ。*/
 	if ((error = wait_ipcp()) != E_OK)
 		goto buf_ret;
@@ -281,6 +260,5 @@
 #endif	/* of #ifdef PPP_IDLE_TIMEOUT */
 
-	/* PPP åºåã­ã¥ã¼ã«æå
-¥ããã*/
+	/* PPP 出力キューに投入する。*/
 	if ((error = tsnd_dtq(DTQ_PPP_OUTPUT, output, tmout)) != E_OK)
 		goto buf_ret;
@@ -304,5 +282,5 @@
 
 /*
- *  ppp_cp_output -- CP ãã¬ã¼ã ã®éä¿¡
+ *  ppp_cp_output -- CP フレームの送信
  */
 
@@ -312,5 +290,5 @@
 	T_PPP_CP_HDR	*cph;
 
-	/* CP ããããè¨­å®ãã */
+	/* CP ヘッダを設定する */
 	cph = GET_PPP_CP_HDR(output);
 	cph->code = code;
@@ -318,6 +296,5 @@
 	cph->len  = htons(output->len - sizeof(T_PPP_HDR));
 
-	/* PPP åºåã­ã¥ã¼ã«æå
-¥ããã*/
+	/* PPP 出力キューに投入する。*/
 	if (snd_dtq(DTQ_PPP_OUTPUT, output) != E_OK) {
 		syscall(rel_net_buf(output));
@@ -327,6 +304,5 @@
 
 /*
- *  PPP å
-¥åã¿ã¹ã¯
+ *  PPP 入力タスク
  */
 
@@ -340,5 +316,5 @@
 	uint8_t		rcount = 0;
 
-	/* ãã¼ããåæè¨­å®ãã */
+	/* ポートを初期設定する */
 	syscall(serial_opn_por(HDLC_PORTID));
 	syscall(serial_ctl_por(HDLC_PORTID, IOCTL_FCSND | IOCTL_FCRCV));
@@ -357,8 +333,8 @@
 #endif	/* of #ifdef PPP_CFG_MODEM */
 
-	/* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ãèµ·åãã */
+	/* ネットワークタイマタスクを起動する */
 	syscall(act_tsk(NET_TIMER_TASK));
 
-	/* ä¸ä½ãã­ãã³ã«ãåæåãã */
+	/* 上位プロトコルを初期化する */
 	for (ix = 0; (proto = protocols[ix]) != NULL; ix ++)
 		if (proto->init != NULL)
@@ -368,8 +344,8 @@
 	lcp_open(PPP_OPEN_PASSIVE);
 
-	/* PPP åºåã¿ã¹ã¯ãèµ·åãã */
+	/* PPP 出力タスクを起動する */
 	syscall(act_tsk(PPP_OUTPUT_TASK));
 
-	/* ä¹±æ°çæãåæåããã*/
+	/* 乱数生成を初期化する。*/
 	net_srand(0);
 
@@ -380,5 +356,5 @@
 			if (input->len > 0) {
 
-				/* ä¹±æ°çæãåæåããã*/
+				/* 乱数生成を初期化する。*/
 				if (rcount == 0)
 					net_srand(input->len);
@@ -422,5 +398,5 @@
 
 /*
- *  PPP åºåã¿ã¹ã¯
+ *  PPP 出力タスク
  */
 
@@ -447,5 +423,5 @@
 
 /*
- *  ã¢ã¤ãã«ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  アイドルタイムアウト処理
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  PPP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  PPP コンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -83,5 +71,5 @@
 
 /*
- *  PPP ãããã®ãã­ãã³ã«ãã£ã¼ã«ãã®å¤
+ *  PPP ヘッダのプロトコルフィールドの値
  */
 
@@ -101,6 +89,5 @@
 
 /*
- *  ãªã³ã¯ã®ç¶æ
-
+ *  リンクの状態
  */
 
@@ -116,11 +103,11 @@
 
 /*
- *  PPP ãªã³ã¯å¶å¾¡ (CP) ãããæ§é ä½
+ *  PPP リンク制御 (CP) ヘッダ構造体
  */
 
 typedef struct t_ppp_cp_hdr {
-	uint8_t		code;		/* å¶å¾¡ã³ã¼ã	*/
-	uint8_t		id;		/* è­å¥å­	*/
-	uint16_t	len;		/* é·ã		*/
+	uint8_t		code;		/* 制御コード	*/
+	uint8_t		id;		/* 識別子	*/
+	uint16_t	len;		/* 長さ		*/
 	} __attribute__((packed, aligned(2)))T_PPP_CP_HDR;
 
@@ -128,5 +115,5 @@
 
 /*
- *  PPP ãªã³ã¯å¶å¾¡ (CP) ã®å¶å¾¡ã³ã¼ã
+ *  PPP リンク制御 (CP) の制御コード
  */
 
@@ -141,11 +128,10 @@
 
 /*
- * æ§ææ
-å ± (CI) ããã
+ * 構成情報 (CI) ヘッダ
  */
 
 typedef struct t_ppp_ci_hdr {
-	uint8_t		type;		/* CI ã®å	*/
-	uint8_t		len;		/* é·ã		*/
+	uint8_t		type;		/* CI の型	*/
+	uint8_t		len;		/* 長さ		*/
 	} __attribute__((packed, aligned(2)))T_PPP_CI_HDR;
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_auth.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_auth.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_auth.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -124,5 +112,5 @@
 
 /*
- *  å®æ°
+ *  定数
  */
 
@@ -133,5 +121,5 @@
 
 /*
- *  network_phase -- ã³ãã¯ã·ã§ã³ç¢ºç«
+ *  network_phase -- コネクション確立
  */
 
@@ -144,8 +132,8 @@
 	ppp_phase = PPP_PHASE_NETWORK;
 
-	/* ä¸ä½ãã­ãã³ã«ããªã¼ãã³ãã */
+	/* 上位プロトコルをオープンする */
 	num = 0;
 	for (ix = 0; (proto = protocols[ix]) != NULL; ix ++)
-#if 0	/* ä¿çãåé¤ç¦æ­¢ */
+#if 0	/* 保留、削除禁止 */
 		if (proto->proto < 0xc000 && proto->open != NULL) {
 #else	/* of #if 0 */
@@ -158,5 +146,5 @@
 
 	if (num == 0)
-		/* ä¸ä½ãã­ãã³ã«ããªã */
+		/* 上位プロトコルがない */
 		lcp_close();
 	else
@@ -165,5 +153,5 @@
 
 /*
- *  link_required -- ãªã³ã¯ãéè¨­ããã
+ *  link_required -- リンクを開設する。
  */
 
@@ -174,5 +162,5 @@
 
 /*
- *  link_terminated -- ã­ã°ã¢ã¦ããã¦ããªã³ã¯ãåæ­ããã
+ *  link_terminated -- ログアウトして、リンクを切断する。
  */
 
@@ -186,5 +174,5 @@
 
 /*
- *  link_down -- ãªã³ã¯ãè§£æ¾ããã
+ *  link_down -- リンクを解放する。
  */
 
@@ -195,5 +183,5 @@
 	T_PPP_PROTENT	*proto;
 
-	/* ä¸ä½ãã­ãã³ã«ãè§£æ¾ãã */
+	/* 上位プロトコルを解放する */
 	for (ix = 0; (proto = protocols[ix]) != NULL; ix ++) {
 		if (proto->proto != PPP_LCP && proto->lowerdown != NULL)
@@ -208,5 +196,5 @@
 
 /*
- *  link_established -- ãªã³ã¯ã®æ¥ç¶ãç¢ºç«ããã
+ *  link_established -- リンクの接続が確立した。
  */
 
@@ -223,11 +211,10 @@
 #endif	/* of #if defined(LCP_CFG_CHAP) || defined(LCP_CFG_PAP) */
 
-	/* ä¸ä½ãã­ãã³ã«ãèµ·åãã */
+	/* 上位プロトコルを起動する */
 	for (ix = 0; (proto = protocols[ix]) != NULL; ix ++)
 		if (proto->lowerup != NULL)
 			(*proto->lowerup)();
 
-	/* èªè¨¼ãªãã·ã§ã³ãç¢ºèªããããæªå®è£
-ã*/
+	/* 認証オプションを確認する。【未実装】*/
 
 	ppp_phase = PPP_PHASE_AUTHENTICATE;
@@ -284,5 +271,5 @@
 
 /*
- *  auth_reset -- èªè¨¼ãªãã·ã§ã³ãåç¢ºèªããã
+ *  auth_reset -- 認証オプションを再確認する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_auth.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_auth.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_auth.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -72,5 +60,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ccp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ccp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ccp.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -97,6 +85,5 @@
 
 /*
- *  å®è£
-äºå®ãç¾å¨ã¯ãã¹ã¦æå¦
+ *  実装予定、現在はすべて拒否
  */
 
@@ -113,5 +100,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -125,57 +112,49 @@
 
 /*
- * FSM ããå¼åºãããã³ã¼ã«ããã¯é¢
+ * FSM から呼出されるコールバック関
  */
 
 static int_t  ccp_reqci	(T_PPP_FSM *fsm, T_NET_BUF *nbuf);
-					/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-
-/*
- *  å
-¨åå¤æ°
+					/* 相手の構成情報を確認する。	*/
+
+/*
+ *  全域変数
  */
 
 T_PPP_FSM_CALLBACKS ccp_callbacks = {
-	NULL,				/* èªæ§ææ
-å ±ããªã»ããããã	*/
-	NULL,				/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
-	NULL,				/* èªæ§ææ
-å ±ãè¿½å ããã		*/
-	NULL,				/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
-	NULL,				/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
-	NULL,				/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
-	ccp_reqci,			/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-	NULL,				/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-	NULL,				/* ãªã³ã¯æ¥ç¶ãè§£æ¾ããã		*/
-	NULL,				/* ä¸ä½å±¤ãéå§ããã		*/
-	NULL,				/* ä¸ä½å±¤ãçµäºããã		*/
-	NULL,				/* åéããã			*/
-	NULL,				/* ä¸æãª CP ãåä¿¡ããã¨ãã®å¦ç	*/
+	NULL,				/* 自構成情報をリセットする。	*/
+	NULL,				/* 構成情報の長さを返す。		*/
+	NULL,				/* 自構成情報を追加する。		*/
+	NULL,				/* ACK を受信したときの処理	*/
+	NULL,				/* NAK を受信したときの処理	*/
+	NULL,				/* REJ を受信したときの処理	*/
+	ccp_reqci,			/* 相手の構成情報を確認する。	*/
+	NULL,				/* リンク接続を確立する。		*/
+	NULL,				/* リンク接続を解放する。		*/
+	NULL,				/* 下位層を開始する。		*/
+	NULL,				/* 下位層を終了する。		*/
+	NULL,				/* 再送する。			*/
+	NULL,				/* 不明な CP を受信したときの処理	*/
 	};
 
 T_PPP_FSM ccp_fsm = {
-	&ccp_callbacks,			/* ã³ã¼ã«ããã¯é¢æ°		*/
-	PPP_CCP,			/* ãã­ãã³ã«			*/
+	&ccp_callbacks,			/* コールバック関数		*/
+	PPP_CCP,			/* プロトコル			*/
 	};
 
 T_PPP_PROTENT ccp_protent = {
 	PPP_CCP,
-	ccp_init,			/* åæå			*/
-	ccp_input,			/* å
-¥å				*/
-	ccp_protrej,			/* Proto-REJ åä¿¡å¦ç		*/
-	ccp_lowerup,			/* ä¸ä½å±¤ãèµ·åãã		*/
-	ccp_lowerdown,			/* ä¸ä½å±¤ãåæ­¢ãã		*/
-	ccp_open,			/* ãªã¼ãã³ãã			*/
-	ccp_close,			/* ã¯ã­ã¼ãºãã			*/
-	NULL,				/* ãã¼ã¿å
-¥å			*/
+	ccp_init,			/* 初期化			*/
+	ccp_input,			/* 入力				*/
+	ccp_protrej,			/* Proto-REJ 受信処理		*/
+	ccp_lowerup,			/* 下位層を起動する		*/
+	ccp_lowerdown,			/* 下位層を停止する		*/
+	ccp_open,			/* オープンする			*/
+	ccp_close,			/* クローズする			*/
+	NULL,				/* データ入力			*/
 	};
 
 /*
- *  ccp_init -- CCP ã¢ã¸ã¥ã¼ã«ã®åæå
+ *  ccp_init -- CCP モジュールの初期化
  */
 
@@ -187,6 +166,5 @@
 
 /*
- *  ccp_input -- CCP å
-¥å
+ *  ccp_input -- CCP 入力
  */
 
@@ -200,6 +178,5 @@
 
 /*
- *  ccp_reqci -- ç¸æã®æ§ææ
-å ±ãè§£æããã
+ *  ccp_reqci -- 相手の構成情報を解析する。
  */
 
@@ -208,6 +185,5 @@
 {
 /*
- *  å®è£
-äºå®ãç¾å¨ã¯ãã¹ã¦ã®ãªãã·ã§ã³ãæå¦ããã
+ *  実装予定、現在はすべてのオプションを拒否する。
  */
 	return nbuf->len > (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)) ? PPP_CONFREJ : PPP_CONFACK;
@@ -215,5 +191,5 @@
 
 /*
- *  ccp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  ccp_protrej -- Proto-REJ を受信したときの処理
  */
 
@@ -225,5 +201,5 @@
 
 /*
- *  ccp_lowerup -- CCP ä¸ä½å±¤ãèµ·åããã
+ *  ccp_lowerup -- CCP 下位層を起動する。
  */
 
@@ -235,5 +211,5 @@
 
 /*
- *  ccp_lowerdown -- CCP ä¸ä½å±¤ãåæ­¢ããã
+ *  ccp_lowerdown -- CCP 下位層を停止する。
  */
 
@@ -245,5 +221,5 @@
 
 /*
- *  ccp_open -- CCP ã®ãªã¼ã
+ *  ccp_open -- CCP のオープ
  */
 
@@ -255,5 +231,5 @@
 
 /*
- *  ccp_close -- CCP ã®ã¯ã­ã¼ãº
+ *  ccp_close -- CCP のクローズ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ccp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ccp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ccp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -101,5 +89,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_fsm.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_fsm.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_fsm.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -112,12 +100,11 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-uint8_t	ppp_open_mode = PPP_OPEN_PASSIVE;	/* ãªã¼ãã³æã®åä½ã¢ã¼ã	*/
-
-/*
- *  é¢æ°
+ *  全域変数
+ */
+
+uint8_t	ppp_open_mode = PPP_OPEN_PASSIVE;	/* オープン時の動作モード	*/
+
+/*
+ *  関数
  */
 
@@ -133,5 +120,5 @@
 
 /*
- *  fsm_sconfreq -- Configure-Request ãéä¿¡ããã
+ *  fsm_sconfreq -- Configure-Request を送信する。
  */
 
@@ -145,5 +132,5 @@
 	      fsm->state == PPP_FSM_ACKRCVD ||
 	      fsm->state == PPP_FSM_ACKSENT)) {
-		/* ã¾ã ãã´ããã¦ããªãããªãã·ã§ã³ããªã»ããããã */
+		/* まだネゴをしていない。オプションをリセットする。 */
 		if (fsm->callbacks->resetci)
 			(*fsm->callbacks->resetci)(fsm);
@@ -151,5 +138,5 @@
 		}
 	if (retransmit == 0) {
-		/* æ°ãããªã¯ã¨ã¹ããåéã«ã¦ã³ã¿ããªã»ããããæ°ãã ID ãè¨­å®ããã */
+		/* 新しいリクエスト。再送カウンタをリセットし、新しい ID を設定する。 */
 		fsm->retrans = MAX_PPP_CONFIGURES;
 		fsm->reqid   = ++ fsm->id;
@@ -159,6 +146,5 @@
 
 	if (fsm->callbacks->cilen && fsm->callbacks->addci) {
-		/* æ§ææ
-å ±ãã±ãããä½ãã */
+		/* 構成情報パケットを作る。 */
 		len = (*fsm->callbacks->cilen)(fsm);
 
@@ -166,6 +152,5 @@
 		(*fsm->callbacks->addci)(fsm, output);
 
-		/* æ§ææ
-å ±ãã±ãããéä¿¡ããã */
+		/* 構成情報パケットを送信する。 */
 		IF_SET_PROTO(output, fsm->proto);
 		ppp_cp_output(PPP_CONFREQ, fsm->reqid, output);
@@ -177,5 +162,5 @@
 
 /*
- *  fsm_rconfreq -- Configure-Request ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_rconfreq -- Configure-Request を受信したときの処理
  */
 
@@ -200,13 +185,13 @@
 
 	case PPP_FSM_OPENED:
-		/* ä¸ä½å±¤ãåæ­¢ãã¦ããã´ã«ç§»ãã */
+		/* 上位層を停止して、ネゴに移る。 */
 		if (fsm->callbacks->down != NULL)
 			(*fsm->callbacks->down)(fsm);
-		fsm_sconfreq(fsm, 0);		/* æåã® Configure-Request ãéãã */
+		fsm_sconfreq(fsm, 0);		/* 最初の Configure-Request を送る。 */
 		break;
 
 	case PPP_FSM_STOPPED:
-		/* ç¸æãããã´ãéå§ããã */
-		fsm_sconfreq(fsm, 0);		/* æåã® Configure-Request ãéãã */
+		/* 相手からネゴが開始された */
+		fsm_sconfreq(fsm, 0);		/* 最初の Configure-Request を送る。 */
 		fsm->state = PPP_FSM_REQSENT;
 		break;
@@ -216,7 +201,6 @@
 	syscall(get_net_buf(&output, input->len));
 
-	/* ä¸ä½ãã­ãã³ã«ã«è¦æ±ããã Configure-Request ãéãã */
-	if (fsm->callbacks->reqci != NULL)	/* æ§ææ
-å ±ããã§ãã¯ããã */
+	/* 上位プロトコルに要求された Configure-Request を送る。 */
+	if (fsm->callbacks->reqci != NULL)	/* 構成情報をチェックする。 */
 		code = (*fsm->callbacks->reqci)(fsm, input, output);
 	else if (output->len > sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR))
@@ -225,5 +209,5 @@
 		code = PPP_CONFACK;
 
-	/* ç¸æã« ACK, NAK ã¾ãã¯ REJ ãéä¿¡ããã */
+	/* 相手に ACK, NAK または REJ を送信する。 */
 	ppp_cp_output(code, id, output);
 
@@ -240,5 +224,5 @@
 		}
 	else {
-		/* ACK ã REJ ãéã */
+		/* ACK か REJ を送る */
 		if (fsm->state != PPP_FSM_ACKRCVD)
 			fsm->state = PPP_FSM_REQSENT;
@@ -249,5 +233,5 @@
 
 /*
- *  fsm_rconfnakrej -- Configure-NAK/REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_rconfnakrej -- Configure-NAK/REJ を受信したときの処理
  */
 
@@ -258,5 +242,5 @@
 	T_NET_BUF	*output;
 
-	/* äºæãã ID ã§ãªãããNAK/REJ ãäºæãã¦ããªãã¨ãã¯çµäºããã*/
+	/* 予期した ID でないか、NAK/REJ を予期していないときは終了する。*/
 	if (id != fsm->reqid || fsm->seen_ack) {
 		syslog(LOG_WARNING, "[PPP/FSM] bad ID or unexp NAK/REJ.");
@@ -291,5 +275,5 @@
 	case PPP_FSM_ACKSENT:
 		untimeout((FP)fsm_timeout, fsm);
-		if (ret < 0)		/* éä¿¡ãã Conf-Req ãç ´æãç©ºã® NAK/REJ ãå±ããã*/
+		if (ret < 0)		/* 送信した Conf-Req が破損し空の NAK/REJ が届いた。*/
 			fsm->state = PPP_FSM_STOPPED;
 		else
@@ -304,5 +288,5 @@
 
 	case PPP_FSM_OPENED:
-		/* åèµ·åãããã´ãããç´ãã*/
+		/* 再起動し、ネゴをやり直す。*/
 		if (fsm->callbacks->down != NULL)
 			(*fsm->callbacks->down)(fsm);
@@ -314,5 +298,5 @@
 
 /*
- *  fsm_rconfack -- Configure-ACK ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_rconfack -- Configure-ACK を受信したときの処理
  */
 
@@ -322,5 +306,5 @@
 	T_NET_BUF	*output;
 
-	/* äºæãã ID ã§ãªãããACK ãäºæãã¦ããªãã¨ãã¯çµäºããã*/
+	/* 予期した ID でないか、ACK を予期していないときは終了する。*/
 	if (id != fsm->reqid || fsm->seen_ack) {
 		syslog(LOG_WARNING, "[PPP/FSM] bad ID or unexp ACK.");
@@ -369,5 +353,5 @@
 
 	case PPP_FSM_OPENED:
-		/* åèµ·åãããã´ãããç´ãã*/
+		/* 再起動し、ネゴをやり直す。*/
 		if (fsm->callbacks->down != NULL)
 			(*fsm->callbacks->down)(fsm);
@@ -384,5 +368,5 @@
 
 /*
- *  fsm_rtermreq -- Terminate-Request ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_rtermreq -- Terminate-Request を受信したときの処理
  */
 
@@ -412,5 +396,5 @@
 
 /*
- *  fsm_rtermack -- Terminate-ACK ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_rtermack -- Terminate-ACK を受信したときの処理
  */
 
@@ -421,5 +405,5 @@
 	case PPP_FSM_CLOSING:
 		untimeout((FP)fsm_timeout, fsm);
-#if 0	/* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/
+#if 0	/* 本来の動作は CLOSED に遷移する。*/
 		fsm->state = PPP_FSM_CLOSED;
 #else	/* of #if 0 */
@@ -450,5 +434,5 @@
 
 /*
- *  fsm_rcoderej -- Code-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_rcoderej -- Code-REJ を受信したときの処理
  */
 
@@ -458,5 +442,5 @@
 	T_PPP_CP_HDR	*hdr;
 
- 	/* PPP ãªã³ã¯å¶å¾¡ (CP) ãããããç­ããã°ã¨ã©ã¼ */
+ 	/* PPP リンク制御 (CP) ヘッダより短ければエラー */
  	if (input->len < sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)) {
  		syslog(LOG_WARNING, "[PPP/FSM] bad len: %d in recv Code-REJ.", input->len);
@@ -473,5 +457,5 @@
 
 /*
- *  fsm_timeout -- ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  fsm_timeout -- タイムアウト処理
  */
 
@@ -485,7 +469,6 @@
 	case PPP_FSM_STOPPING:
 		if (fsm->retrans <= 0) {
-			/* æå¤§åéåæ°ãè¶
-ããã¨ãã®å¦ç */
-#if 0	/* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/
+			/* 最大再送回数を超えたときの処理 */
+#if 0	/* 本来の動作は CLOSED に遷移する。*/
 			fsm->state = (fsm->state == PPP_FSM_CLOSING) ? PPP_FSM_CLOSED : PPP_FSM_STOPPED;
 #else	/* of #if 0 */
@@ -496,5 +479,5 @@
 			}
 		else {
-			/* Terminate-Request ãéä¿¡ããã*/
+			/* Terminate-Request を送信する。*/
 			fsm_stermreq(fsm, ++ fsm->id);
 			}
@@ -504,6 +487,5 @@
 	case PPP_FSM_ACKSENT:
 		if (fsm->retrans <= 0) {
-			/* æå¤§åéåæ°ãè¶
-ããã¨ãã®å¦ç */
+			/* 最大再送回数を超えたときの処理 */
 			syslog(LOG_WARNING, "[PPP/FSM] retrans Conf-Req.");
 			fsm->state = PPP_FSM_STOPPED;
@@ -512,5 +494,5 @@
 			}
 		else {
-			/* Configure-Request ãåéããã*/
+			/* Configure-Request を再送する。*/
 			if (fsm->callbacks->retrans != NULL)
 				(*fsm->callbacks->retrans)(fsm);
@@ -529,5 +511,5 @@
 
 /*
- *  fsm_stermreq -- Terminate-Request ãéä¿¡ããã
+ *  fsm_stermreq -- Terminate-Request を送信する。
  */
 
@@ -546,5 +528,5 @@
 
 /*
- *  fsm_init -- FSM ã¢ã¸ã¥ã¼ã«ã®åæå
+ *  fsm_init -- FSM モジュールの初期化
  */
 
@@ -557,5 +539,5 @@
 
 /*
- *  fsm_lowerup -- FSM ä¸ä½å±¤ãèµ·åããã
+ *  fsm_lowerup -- FSM 下位層を起動する。
  */
 
@@ -584,5 +566,5 @@
 
 /*
- *  fsm_lowerdown -- FSM ä¸ä½å±¤ãåæ­¢ããã
+ *  fsm_lowerdown -- FSM 下位層を停止する。
  */
 
@@ -627,5 +609,5 @@
 
 /*
- *  fsm_open -- FSM ã®ãªã¼ãã³
+ *  fsm_open -- FSM のオープン
  */
 
@@ -651,5 +633,5 @@
 	case PPP_FSM_CLOSING:
 		fsm->state = PPP_FSM_STOPPING;
-		/* nobreak;	ä¸ã«è½ã¡ã */
+		/* nobreak;	下に落ちる */
 
 	case PPP_FSM_STOPPED:
@@ -662,5 +644,5 @@
 
 /*
- *  fsm_close -- ãªã³ã¯ã®åæ­ãéå§ããã
+ *  fsm_close -- リンクの切断を開始する。
  */
 
@@ -673,5 +655,5 @@
 		break;
 
-#if 0	/* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/
+#if 0	/* 本来の動作は CLOSED に遷移する。*/
 	case PPP_FSM_STOPPED:
 		fsm->state = PPP_FSM_CLOSED;
@@ -692,5 +674,5 @@
 			(*fsm->callbacks->down)(fsm);
 
-		/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããTerminate-Request ãéä¿¡ããã*/
+		/* タイムアウトを設定し、Terminate-Request を送信する。*/
 		fsm->retrans = MAX_PPP_TERMINATES;
 		fsm_stermreq(fsm, fsm->reqid = ++ fsm->id);
@@ -701,6 +683,5 @@
 
 /*
- *  fsm_input -- å
-¥åãPPP ãªã³ã¯å¶å¾¡ (CP) ã®å¶å¾¡ã³ã¼ãã«ããé©å½ãªé¢æ°ãå¼åºã
+ *  fsm_input -- 入力、PPP リンク制御 (CP) の制御コードにより適当な関数を呼出す
  */
 
@@ -711,5 +692,5 @@
 	T_NET_BUF	*output;
 
- 	/* PPP ãªã³ã¯å¶å¾¡ (CP) ãããããç­ããã°ã¨ã©ã¼ */
+ 	/* PPP リンク制御 (CP) ヘッダより短ければエラー */
  	if (input->len < (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR))) {
  		syslog(LOG_WARNING, "[PPP/FSM] short hdr: %d.", input->len);
@@ -719,6 +700,5 @@
  	hdr = GET_PPP_CP_HDR(input);
 
- 	/* ãããã®é·ãã¨å
-¥åãã¼ã¿ãµã¤ãºãä¸è´ããªããã°ã¨ã©ã¼ */
+ 	/* ヘッダの長さと入力データサイズが一致しなければエラー */
  	if (hdr->len != input->len - sizeof(T_PPP_HDR)) {
  		syslog(LOG_WARNING, "[PPP/FSM] bad len: %d.", hdr->len);
@@ -726,6 +706,5 @@
  		}
  
- 	/* ç¶æ
-ã INITIAL ã STARTING ãªãã¨ã©ã¼ */
+ 	/* 状態が INITIAL か STARTING ならエラー */
  	if (fsm->state == PPP_FSM_INITIAL || fsm->state == PPP_FSM_STARTING) {
  		syslog(LOG_WARNING, "[PPP/FSM] unexp state: %d in input.", fsm->state);
@@ -734,5 +713,5 @@
  
  	/*
- 	 *  å¶å¾¡ã³ã¼ãã«ããé©å½ãªé¢æ°ãå¼åºã
+ 	 *  制御コードにより適当な関数を呼出す
  	 */
 
@@ -775,5 +754,5 @@
 
 /*
- *  fsm_protoreject -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  fsm_protoreject -- Proto-REJ を受信したときの処理
  */
 
@@ -785,6 +764,6 @@
 		untimeout((FP)fsm_timeout, fsm);
 
-#if 0	/* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/
-		/* ä¸ã«è½ã¡ã */
+#if 0	/* 本来の動作は CLOSED に遷移する。*/
+		/* 下に落ちる */
 #else	/* of #if 0 */
 		fsm->state = PPP_FSM_STOPPED;
@@ -805,5 +784,5 @@
 	case PPP_FSM_ACKSENT:
 		untimeout((FP)fsm_timeout, fsm);
-		/* ä¸ã«è½ã¡ã */
+		/* 下に落ちる */
 
 	case PPP_FSM_STOPPED:
@@ -817,5 +796,5 @@
 			(*fsm->callbacks->down)(fsm);
 
-		/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããTerminate-Request ãéä¿¡ããã*/
+		/* タイムアウトを設定し、Terminate-Request を送信する。*/
 		fsm->retrans = MAX_PPP_TERMINATES;
 		fsm_stermreq(fsm, fsm->reqid = ++ fsm->id);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_fsm.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_fsm.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_fsm.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -93,6 +81,5 @@
 
 /*
- *  ç¶æ
-ç®¡çæ§é ä½
+ *  状態管理構造体
  */
 
@@ -100,14 +87,13 @@
 
 typedef struct t_fsm {
-	struct t_ppp_fsm_callbacks	*callbacks;	/* ã³ã¼ã«ããã¯é¢æ°*/
-	uint16_t	proto;		/* ãã­ãã³ã«				*/
-	uint8_t		state;		/* FSM ã®ç¶æ
-				*/
-	uint8_t		id;		/* ç¾å¨ã® ID				*/
-	uint8_t		reqid;		/* è¦æ± ID				*/
-	uint8_t		seen_ack;	/* è¦æ±ã«å¯¾ãæ­£å¸¸ãª ACK/NAK/REJ ãåä¿¡	*/
-	int8_t		failures;	/* é»èªãã NAK æ°			*/
-	int8_t		retrans;	/* Configure-Request ã¾ãã¯ã		*/
-					/* Terminate-Request ã®åéåæ°		*/
+	struct t_ppp_fsm_callbacks	*callbacks;	/* コールバック関数*/
+	uint16_t	proto;		/* プロトコル				*/
+	uint8_t		state;		/* FSM の状態				*/
+	uint8_t		id;		/* 現在の ID				*/
+	uint8_t		reqid;		/* 要求 ID				*/
+	uint8_t		seen_ack;	/* 要求に対し正常な ACK/NAK/REJ を受信	*/
+	int8_t		failures;	/* 黙認した NAK 数			*/
+	int8_t		retrans;	/* Configure-Request または、		*/
+					/* Terminate-Request の再送回数		*/
 	} T_PPP_FSM;
 
@@ -115,72 +101,66 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°æ§é ä½
+ *  コールバック関数構造体
  */
 
 typedef struct t_ppp_fsm_callbacks {
-	void (*resetci)	(T_PPP_FSM *);	/* èªæ§ææ
-å ±ããªã»ããããã	*/
-	int_t  (*cilen)	(T_PPP_FSM *);	/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
+	void (*resetci)	(T_PPP_FSM *);	/* 自構成情報をリセットする。	*/
+	int_t  (*cilen)	(T_PPP_FSM *);	/* 構成情報の長さを返す。		*/
 	void (*addci)	(T_PPP_FSM *, T_NET_BUF *);
-					/* èªæ§ææ
-å ±ãè¿½å ããã		*/
+					/* 自構成情報を追加する。		*/
 	bool_t (*ackci)	(T_PPP_FSM *, T_NET_BUF *);
-					/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
+					/* ACK を受信したときの処理	*/
 	int_t  (*nakci)	(T_PPP_FSM *, T_NET_BUF *);
-					/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
+					/* NAK を受信したときの処理	*/
 	int_t  (*rejci)	(T_PPP_FSM *, T_NET_BUF *);
-					/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
+					/* REJ を受信したときの処理	*/
 	int_t  (*reqci)	(T_PPP_FSM *, T_NET_BUF *, T_NET_BUF *);
-					/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-	void (*up)	(T_PPP_FSM *);	/* ãªã³ã¯ã®æ¥ç¶ãç¢ºç«ããã	*/
-	void (*down)	(T_PPP_FSM *);	/* ãªã³ã¯ã®æ¥ç¶ãè§£æ¾ããã	*/
-	void (*starting)(T_PPP_FSM *);	/* ä¸ä½å±¤ãéå§ããã		*/
-	void (*finished)(T_PPP_FSM *);	/* ä¸ä½å±¤ãçµäºããã		*/
-	void (*retrans)	(T_PPP_FSM *);	/* åéããã			*/
-					/* ä¸æãª CP ãåä¿¡ããã¨ãã®å¦ç	*/
+					/* 相手の構成情報を確認する。	*/
+	void (*up)	(T_PPP_FSM *);	/* リンクの接続を確立する。	*/
+	void (*down)	(T_PPP_FSM *);	/* リンクの接続を解放する。	*/
+	void (*starting)(T_PPP_FSM *);	/* 下位層を開始する。		*/
+	void (*finished)(T_PPP_FSM *);	/* 下位層を終了する。		*/
+	void (*retrans)	(T_PPP_FSM *);	/* 再送する。			*/
+					/* 不明な CP を受信したときの処理	*/
 	bool_t  (*extcode)(T_PPP_FSM *, uint8_t, uint8_t, T_NET_BUF *);
 	} T_PPP_FSM_CALLBACKS;
 
 /*
- *  FSM ã®ç¶æ
-
+ *  FSM の状態
  */
 
-#define PPP_FSM_INITIAL		0	/* æªæ¥ç¶ãæªãªã¼ãã³	*/
-#define PPP_FSM_STARTING	1	/* æªæ¥ç¶ããªã¼ãã³	*/
-#define PPP_FSM_CLOSED		2	/* æ¥ç¶ã  æªãªã¼ãã³	*/
-#define PPP_FSM_STOPPED		3	/* ãªã¼ãã³ãåæ­å¾
-ã¡	*/
-#define PPP_FSM_CLOSING		4	/* åæ­ä¸­ãæªãªã¼ãã³	*/
-#define PPP_FSM_STOPPING	5	/* åæ­ä¸­ããªã¼ãã³	*/
-#define PPP_FSM_REQSENT		6	/* Config REQ éä¿¡æ¸ã¿	*/
-#define PPP_FSM_ACKRCVD		7	/* Config ACK åä¿¡æ¸ã¿	*/
-#define PPP_FSM_ACKSENT		8	/* Config ACK éä¿¡æ¸ã¿	*/
-#define PPP_FSM_OPENED		9	/* æ¥ç¶ãéä¿¡å¯è½	*/
+#define PPP_FSM_INITIAL		0	/* 未接続、未オープン	*/
+#define PPP_FSM_STARTING	1	/* 未接続、オープン	*/
+#define PPP_FSM_CLOSED		2	/* 接続、  未オープン	*/
+#define PPP_FSM_STOPPED		3	/* オープン、切断待ち	*/
+#define PPP_FSM_CLOSING		4	/* 切断中、未オープン	*/
+#define PPP_FSM_STOPPING	5	/* 切断中、オープン	*/
+#define PPP_FSM_REQSENT		6	/* Config REQ 送信済み	*/
+#define PPP_FSM_ACKRCVD		7	/* Config ACK 受信済み	*/
+#define PPP_FSM_ACKSENT		8	/* Config ACK 送信済み	*/
+#define PPP_FSM_OPENED		9	/* 接続、通信可能	*/
 
 /*
- *  ãªã¼ãã³æã®åä½ã¢ã¼ã
+ *  オープン時の動作モード
  */
 
-#define PPP_OPEN_PASSIVE	false	/* ååãªã¼ãã³		*/
-#define PPP_OPEN_ACTIVE		true	/* è½åãªã¼ãã³		*/
+#define PPP_OPEN_PASSIVE	false	/* 受動オープン		*/
+#define PPP_OPEN_ACTIVE		true	/* 能動オープン		*/
 
 /*
- *  åéãã¿ã¤ã ã¢ã¦ãã®æ¢å®å¤
+ *  再送、タイムアウトの既定値
  */
 
 #define DEF_PPP_TIMEOUT		(3*NET_TIMER_HZ)
-					/* RFC1661 ã§ã¯  3 ç§			*/
-#define MAX_PPP_TERMINATES	2	/* Terminate-Requests ã®æå¤§åéåæ°	*/
-					/* RFC1661 ã§ã¯  2 å			*/
-#define MAX_PPP_CONFIGURES	10	/* Configure-Requests ã®æå¤§åéåæ°	*/
-					/* RFC1661 ã§ã¯ 10 å			*/
-#define MAX_PPP_FAILURES	5	/* Configure-NAK ã®æå¤§é»èªåæ°		*/
-					/* RFC1661 ã§ã¯  5 å			*/
+					/* RFC1661 では  3 秒			*/
+#define MAX_PPP_TERMINATES	2	/* Terminate-Requests の最大再送回数	*/
+					/* RFC1661 では  2 回			*/
+#define MAX_PPP_CONFIGURES	10	/* Configure-Requests の最大再送回数	*/
+					/* RFC1661 では 10 回			*/
+#define MAX_PPP_FAILURES	5	/* Configure-NAK の最大黙認回数		*/
+					/* RFC1661 では  5 回			*/
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -194,5 +174,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_hdlc.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_hdlc.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_hdlc.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -90,9 +78,9 @@
 
 /*
- *  RFC1171 (PPP) ã® HDLC é¨ã®å®ç¾©
- */
-
-/*
- *  å¤æ°
+ *  RFC1171 (PPP) の HDLC 部の定義
+ */
+
+/*
+ *  変数
  */
 
@@ -100,5 +88,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -107,7 +95,6 @@
 
 /*
- *  genfcstab.c ã«ããä½æãã FCS ã®ã«ãã¯ã¢ããè¡¨
- *  RFC1171 åç
-§
+ *  genfcstab.c により作成した FCS のルックアップ表
+ *  RFC1171 参照
  */
 
@@ -180,5 +167,5 @@
 
 /*
- *  ã¤ã³ã©ã¤ã³é¢æ°
+ *  インライン関数
  */
 
@@ -188,5 +175,5 @@
 
 /*
- *  HDLC_putoctet -- HDLC ãªã¯ãããåºå
+ *  HDLC_putoctet -- HDLC オクテット出力
  */
 
@@ -212,5 +199,5 @@
 
 /*
- *  HDLC_wirte -- HDLC åºå
+ *  HDLC_wirte -- HDLC 出力
  */
 
@@ -241,5 +228,5 @@
 	if (lcp_local_ack_cfg.options & LCP_CFG_ACCOMP) {
 		NET_COUNT_PPP_HDLC(net_count_hdlc.out_octets, sizeof(flag_seq));
-		/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ ãéä¿¡ãã    */
+		/* フレーム開始フラグシーケンス を送信する    */
 		if ((error = serial_wri_dat(HDLC_PORTID, &flag_seq, sizeof(flag_seq))) < 0) {
 			goto err_ret;
@@ -250,9 +237,9 @@
 
 		NET_COUNT_PPP_HDLC(net_count_hdlc.out_octets, sizeof(flag_seq_ac));
-		/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ãAddress ã¨ Control ãéä¿¡ãã    */
+		/* フレーム開始フラグシーケンス、Address と Control を送信する    */
 		if ((error = serial_wri_dat(HDLC_PORTID, flag_seq_ac, sizeof(flag_seq_ac))) < 0) {
 			goto err_ret;
 			}
-		/* Address ã¨ Control ã® FCS ã®è¨ç®ã¯ HDLC_INIT_FCS_AC ã«å«ãã¦ãã */
+		/* Address と Control の FCS の計算は HDLC_INIT_FCS_AC に含めている */
 		fcs = HDLC_INIT_FCS_AC;
 		}
@@ -261,9 +248,9 @@
 
 	NET_COUNT_PPP_HDLC(net_count_hdlc.out_octets, sizeof(flag_seq_ac));
-	/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ãAddress ã¨ Control ãéä¿¡ãã    */
+	/* フレーム開始フラグシーケンス、Address と Control を送信する    */
 	if ((error = serial_wri_dat(HDLC_PORTID, flag_seq_ac, sizeof(flag_seq_ac))) < 0) {
 		goto err_ret;
 		}
-	/* Address ã¨ Control ã® FCS ã®è¨ç®ã¯ HDLC_INIT_FCS_AC ã«å«ãã¦ãã */
+	/* Address と Control の FCS の計算は HDLC_INIT_FCS_AC に含めている */
 	fcs = HDLC_INIT_FCS_AC;
 
@@ -282,5 +269,5 @@
 #endif	/* of #ifdef LCP_CFG_PCOMP */
 
-	/* ãã¼ã¿ãéä¿¡ãã */
+	/* データを送信する */
 	while (len -- > 0) {
 
@@ -291,5 +278,5 @@
 		}
 
-	/* FCS ãéä¿¡ãã */
+	/* FCS を送信する */
 	fcs = ~fcs;
 	if ((error = HDLC_putoctet(fcs & 0xff)) != E_OK)
@@ -298,5 +285,5 @@
 		goto err_ret;
 
-	/* ãã¬ã¼ã çµäºãã©ã°ã·ã¼ã±ã³ã¹ãéä¿¡ãã */
+	/* フレーム終了フラグシーケンスを送信する */
 	if ((error = serial_wri_dat(HDLC_PORTID, &flag_seq_ac[0], sizeof(char))) < 0)
 		goto err_ret;
@@ -310,8 +297,7 @@
 
 /*
- *  HDLC_getoctet -- HDLC ãªã¯ãããå
-¥å
- *
- *	æ»ãå¤ã true ãªããã©ã°ã·ã¼ã±ã³ã¹
+ *  HDLC_getoctet -- HDLC オクテット入力
+ *
+ *	戻り値が true ならフラグシーケンス
  */
 
@@ -321,18 +307,14 @@
 	ER error;
 
-	/* 1ãªã¯ãããå
-¥åãã */
+	/* 1オクテット入力する */
 	if ((error = serial_rea_dat(HDLC_PORTID, octet, sizeof(uint8_t))) <= 0) {
 		return error;
 		}
 
-	/* å
-¥åãããªã¯ãããããã©ã°ã·ã¼ã±ã³ã¹ãªã true ãè¿ã */
+	/* 入力したオクテットがフラグシーケンスなら true を返す */
 	if (*octet == HDLC_FLAG_SEQ)
 		return true;
 
-	/* å
-¥åãããªã¯ããããã¨ã¹ã±ã¼ããªããããï¼ãªã¯ãããå
-¥åããã¹ã¯ãè§£é¤ãã */
+	/* 入力したオクテットがエスケープなら、もう１オクテット入力しマスクを解除する */
 	if (*octet == HDLC_CNTL_ESC) {
 		if ((error = serial_rea_dat(HDLC_PORTID, octet, sizeof(uint8_t))) <= 0)
@@ -346,9 +328,7 @@
 
 /*
- *  HDLC_read -- HDLC å
-¥å
- *
- *	HDLC ãã¬ã¼ã ãå
-¥åããã
+ *  HDLC_read -- HDLC 入力
+ *
+ *	HDLC フレームを入力する。
  */
 
@@ -362,6 +342,5 @@
 	buf = nbuf->buf;
 
-	/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ã¾ã§å
-¥åãèª­ã¿é£ã°ã */
+	/* フレーム開始フラグシーケンスまで入力を読み飛ばす */
 	while ((error = HDLC_getoctet(&octet)) != true) {
 
@@ -372,7 +351,7 @@
 
 		else if (octet == '\n') {
-			/* ã¢ãã å¶å¾¡ãå¼ã³åºãã*/
+			/* モデム制御を呼び出す。*/
 			modem_cntl(modem_getline(nbuf, size));
-			/* ä¸åº¦ããã®é¢æ°ãçµäºããã*/
+			/* 一度、この関数を終了する。*/
 			nbuf->len = 0;
 			return E_OK;
@@ -383,6 +362,5 @@
 		}
 
-	/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ã®éã¯å
-¥åãèª­ã¿é£ã°ã */
+	/* フレーム開始フラグシーケンスの間は入力を読み飛ばす */
 	while (1) {
 		if ((error = HDLC_getoctet(&octet)) == E_OK)
@@ -394,9 +372,8 @@
 	NET_COUNT_PPP_HDLC(net_count_hdlc.in_packets, 1);
 
-	/* å
-¥åãããªã¯ãããã¯ Address: All-Stations ã */
+	/* 入力したオクテットは Address: All-Stations か */
 	if (octet == HDLC_ADDR_ALL) {
 
-		/* æ¬¡ã¯ Control: UI */
+		/* 次は Control: UI */
 		if ((error = HDLC_getoctet(&octet)) != E_OK || octet != HDLC_CNTL_UI) {
 			error = E_SYS;
@@ -405,5 +382,5 @@
 		if ((error = HDLC_getoctet(&octet)) != E_OK)
 			goto err_ret;
-		/* Address ã¨ Control ã® FCS ã®è¨ç®ã¯ HDLC_INIT_FCS_AC ã«å«ãã¦ãã */
+		/* Address と Control の FCS の計算は HDLC_INIT_FCS_AC に含めている */
 		fcs = HDLC_INIT_FCS_AC;
 		}
@@ -439,6 +416,5 @@
 	nbuf->len ++;
 
-	/* SUD + FCS ãå
-¥åãã */
+	/* SUD + FCS を入力する */
 	while ((error = HDLC_getoctet(&octet)) == E_OK) {
 		fcs = Next_FCS(fcs, octet);
@@ -465,5 +441,5 @@
 		goto err_ret;
 
-	/* FCS ããã§ãã¯ãã */
+	/* FCS をチェックする */
 	if (fcs != HDLC_GOOD_FCS) {
 		error = E_SYS;
@@ -479,8 +455,7 @@
 
 /*
- *  HDLC_dummy_read -- HDLC å
-¥å (ç©ºèª­ã¿)
- *
- *	HDLC ãã¬ã¼ã ãç©ºèª­ã¿ããã
+ *  HDLC_dummy_read -- HDLC 入力 (空読み)
+ *
+ *	HDLC フレームを空読みする。
  */
 
@@ -491,6 +466,5 @@
 	ER	error;
 
-	/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ã¾ã§å
-¥åãèª­ã¿é£ã°ã */
+	/* フレーム開始フラグシーケンスまで入力を読み飛ばす */
 	while ((error = HDLC_getoctet(&octet)) != true) {
 		if (error != E_OK)
@@ -498,15 +472,13 @@
 		}
 
-	/* ãã¬ã¼ã éå§ãã©ã°ã·ã¼ã±ã³ã¹ã®éã¯å
-¥åãèª­ã¿é£ã°ã */
+	/* フレーム開始フラグシーケンスの間は入力を読み飛ばす */
 	while (octet == HDLC_FLAG_SEQ)
 		if (HDLC_getoctet(&octet) != E_OK)
 			return;
 
-	/* å
-¥åãããªã¯ãããã¯ Address: All-Stations ã */
+	/* 入力したオクテットは Address: All-Stations か */
 	if (octet == HDLC_ADDR_ALL) {
 
-		/* æ¬¡ã¯ Control: UI */
+		/* 次は Control: UI */
 		if (HDLC_getoctet(&octet) != E_OK || octet != HDLC_CNTL_UI)
 			return;
@@ -532,6 +504,5 @@
 
 /*
- *  HDLC_raw_getoctet -- HDLC ãªã¯ããã (Raw) å
-¥å
+ *  HDLC_raw_getoctet -- HDLC オクテット (Raw) 入力
  */
 
@@ -540,6 +511,5 @@
 	uint8_t ch;
 
-	/* 1ãªã¯ãããå
-¥åãã */
+	/* 1オクテット入力する */
 	if (serial_rea_dat(HDLC_PORTID, &ch, sizeof(ch)) <= 0)
 		return '\0';
@@ -550,5 +520,5 @@
 
 /*
- *  HDLC_raw_putoctet -- HDLC ãªã¯ããã (Raw) åºå
+ *  HDLC_raw_putoctet -- HDLC オクテット (Raw) 出力
  */
 
@@ -556,5 +526,5 @@
 {
 	NET_COUNT_PPP_HDLC(net_count_hdlc.out_octets, 1);
-	/* 1ãªã¯ãããåºåãã */
+	/* 1オクテット出力する */
 	serial_wri_dat(HDLC_PORTID, &ch, sizeof(ch));
 	}
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_hdlc.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_hdlc.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_hdlc.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -72,9 +60,9 @@
 
 /*
- *  RFC1171 (PPP) ã® HDLC é¨ã®å®ç¾©
+ *  RFC1171 (PPP) の HDLC 部の定義
  */
 
 /*
- *  æ¢å®å¤
+ *  既定値
  */
 
@@ -90,5 +78,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipcp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipcp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipcp.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -124,5 +112,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -136,107 +124,89 @@
 
 /*
- * FSM ããå¼åºãããã³ã¼ã«ããã¯é¢
- */
-
-static void  ipcp_resetci(T_PPP_FSM *fsm);	/* èªæ§ææ
-å ±ããªã»ããããã	*/
-static int_t ipcp_cilen	(T_PPP_FSM *fsm);	/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
+ * FSM から呼出されるコールバック関
+ */
+
+static void  ipcp_resetci(T_PPP_FSM *fsm);	/* 自構成情報をリセットする。	*/
+static int_t ipcp_cilen	(T_PPP_FSM *fsm);	/* 構成情報の長さを返す。		*/
 static void  ipcp_addci	(T_PPP_FSM *fsm, T_NET_BUF *output);
-						/* èªæ§ææ
-å ±ãè¿½å ããã		*/
+						/* 自構成情報を追加する。		*/
 static bool_t  ipcp_ackci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* ACK を受信したときの処理	*/
 static bool_t  ipcp_nakci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* NAK を受信したときの処理	*/
 static bool_t  ipcp_rejci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* REJ を受信したときの処理	*/
 static int_t ipcp_reqci	(T_PPP_FSM *fsm, T_NET_BUF *input, T_NET_BUF *output);
-						/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-static void ipcp_up	(T_PPP_FSM *fsm);	/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-static void ipcp_down	(T_PPP_FSM *fsm);	/* ãªã³ã¯æ¥ç¶ãè§£æ¾ããã		*/
-static void ipcp_finished(T_PPP_FSM *fsm);	/* ä¸ä½å±¤ãçµäºããã		*/
-
-/*
- *  å¤æ°
- */
-
-static T_IFNET ipcp_local_def_cfg = {		/* èªæ§ææ
-å ±ã®è¦å®å¤		*/
+						/* 相手の構成情報を確認する。	*/
+static void ipcp_up	(T_PPP_FSM *fsm);	/* リンク接続を確立する。		*/
+static void ipcp_down	(T_PPP_FSM *fsm);	/* リンク接続を解放する。		*/
+static void ipcp_finished(T_PPP_FSM *fsm);	/* 下位層を終了する。		*/
+
+/*
+ *  変数
+ */
+
+static T_IFNET ipcp_local_def_cfg = {		/* 自構成情報の規定値		*/
 	NULL,
 	{
-		IPV4_ADDR_LOCAL,		/* IPv4 ã¢ãã¬ã¹			*/
-		UINT_C(0),			/* ãµãããããã¹ã¯		*/
+		IPV4_ADDR_LOCAL,		/* IPv4 アドレス			*/
+		UINT_C(0),			/* サブネットマスク		*/
 		},
 	};
 
-static T_IFNET ipcp_remote_def_cfg = {		/* ç¸æã®æ§ææ
-å ±ã®è¦å®å¤	*/
+static T_IFNET ipcp_remote_def_cfg = {		/* 相手の構成情報の規定値	*/
 	NULL,
 	{
-		IPV4_ADDR_REMOTE,		/* IPv4 ã¢ãã¬ã¹			*/
-		UINT_C(0),			/* ãµãããããã¹ã¯		*/
+		IPV4_ADDR_REMOTE,		/* IPv4 アドレス			*/
+		UINT_C(0),			/* サブネットマスク		*/
 		}
 	};
 
-static T_IFNET ipcp_local_neg_cfg;		/* ãã´ä¸­ã®èªæ§ææ
-å ±		*/
-
-static T_IFNET ipcp_remote_neg_cfg;		/* ãã´ä¸­ã®ç¸æã®æ§ææ
-å ±		*/
-
-/*
- *  å
-¨åå¤æ°
+static T_IFNET ipcp_local_neg_cfg;		/* ネゴ中の自構成情報		*/
+
+static T_IFNET ipcp_remote_neg_cfg;		/* ネゴ中の相手の構成情報		*/
+
+/*
+ *  全域変数
  */
 
 T_PPP_FSM_CALLBACKS ipcp_callbacks = {
-	ipcp_resetci,			/* èªæ§ææ
-å ±ããªã»ããããã	*/
-	ipcp_cilen,			/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
-	ipcp_addci,			/* èªæ§ææ
-å ±ãè¿½å ããã		*/
-	ipcp_ackci,			/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
-	ipcp_nakci,			/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
-	ipcp_rejci,			/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
-	ipcp_reqci,			/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-	ipcp_up,			/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-	ipcp_down,			/* ãªã³ã¯æ¥ç¶ãè§£æ¾ããã		*/
-	NULL,				/* ä¸ä½å±¤ãéå§ããã		*/
-	ipcp_finished,			/* ä¸ä½å±¤ãçµäºããã		*/
-	NULL,				/* åéããã			*/
-	NULL,				/* ä¸æãª CP ãåä¿¡ããã¨ãã®å¦ç	*/
+	ipcp_resetci,			/* 自構成情報をリセットする。	*/
+	ipcp_cilen,			/* 構成情報の長さを返す。		*/
+	ipcp_addci,			/* 自構成情報を追加する。		*/
+	ipcp_ackci,			/* ACK を受信したときの処理	*/
+	ipcp_nakci,			/* NAK を受信したときの処理	*/
+	ipcp_rejci,			/* REJ を受信したときの処理	*/
+	ipcp_reqci,			/* 相手の構成情報を確認する。	*/
+	ipcp_up,			/* リンク接続を確立する。		*/
+	ipcp_down,			/* リンク接続を解放する。		*/
+	NULL,				/* 下位層を開始する。		*/
+	ipcp_finished,			/* 下位層を終了する。		*/
+	NULL,				/* 再送する。			*/
+	NULL,				/* 不明な CP を受信したときの処理	*/
 	};
 
 T_PPP_FSM ipcp_fsm = {
-	&ipcp_callbacks,		/* ã³ã¼ã«ããã¯é¢æ°		*/
-	PPP_IPCP,			/* ãã­ãã³ã«			*/
+	&ipcp_callbacks,		/* コールバック関数		*/
+	PPP_IPCP,			/* プロトコル			*/
 	};
 
 T_PPP_PROTENT ipcp_protent = {
 	PPP_IPCP,
-	ipcp_init,			/* åæå			*/
-	ipcp_input,			/* å
-¥å				*/
-	ipcp_protrej,			/* Proto-REJ åä¿¡å¦ç		*/
-	ipcp_lowerup,			/* ä¸ä½å±¤ãèµ·åãã		*/
-	ipcp_lowerdown,			/* ä¸ä½å±¤ãåæ­¢ãã		*/
-	ipcp_open,			/* ãªã¼ãã³ãã			*/
-	ipcp_close,			/* ã¯ã­ã¼ãºãã			*/
-	ip_input,			/* ãã¼ã¿å
-¥åãIPv4 å
-¥å	*/
+	ipcp_init,			/* 初期化			*/
+	ipcp_input,			/* 入力				*/
+	ipcp_protrej,			/* Proto-REJ 受信処理		*/
+	ipcp_lowerup,			/* 下位層を起動する		*/
+	ipcp_lowerdown,			/* 下位層を停止する		*/
+	ipcp_open,			/* オープンする			*/
+	ipcp_close,			/* クローズする			*/
+	ip_input,			/* データ入力、IPv4 入力	*/
 	};
 
-T_IFNET ipcp_local_ack_cfg;		/* ç¸æã«è¨±å¯ãããã®èªæ§ææ
-å ±	*/
-T_IFNET ipcp_remote_ack_cfg;		/* ç¸æã«è¨±å¯ããæ§ææ
-å ±	*/
-
-/*
- *  ppp_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã
+T_IFNET ipcp_local_ack_cfg;		/* 相手に許可されたの自構成情報	*/
+T_IFNET ipcp_remote_ack_cfg;		/* 相手に許可した構成情報	*/
+
+/*
+ *  ppp_get_ifnet -- ネットワークインタフェース構造体を返す。
  */
 
@@ -248,8 +218,7 @@
 
 /*
- *  wait_ipcp -- IP æ¥ç¶å®äºã¾ã§å¾
-ã¤ã
- *
- *	æ»ãå¤: æ¥ç¶ã«å¤±æããã E_OBJ ãè¿ãã
+ *  wait_ipcp -- IP 接続完了まで待つ。
+ *
+ *	戻り値: 接続に失敗したら E_OBJ を返す。
  */
 
@@ -265,6 +234,5 @@
 #ifdef PPP_CFG_MODEM
 
-		/* ã¢ãã ã®æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+		/* モデムの接続完了まで待つ。*/
 		if ((error = wait_modem()) != E_OK)
 			return error;
@@ -273,8 +241,6 @@
 
 		/*
-		 * ååãªã¼ãã³ããç¸æããã®æ¥ç¶å¾
-ã¡ãªã LCP ãä¸åº¦ã¯ã­ã¼ãºãã
-		 * è½åãªã¼ãã³ç¶æ
-ã§ãåãªã¼ãã³ããã
+		 * 受動オープンし、相手からの接続待ちなら LCP を一度クローズし、
+		 * 能動オープン状態で、再オープンする。
 		 */
 		lcp_close();
@@ -286,6 +252,5 @@
 
 	if (ipcp_fsm.state != PPP_FSM_OPENED) {
-		/* IP æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+		/* IP 接続完了まで待つ。*/
 		wai_sem(SEM_IPCP_READY);
 		if (ipcp_fsm.state != PPP_FSM_OPENED)
@@ -297,5 +262,5 @@
 
 /*
- *  ipcp_init -- IPCP ã¢ã¸ã¥ã¼ã«ã®åæå
+ *  ipcp_init -- IPCP モジュールの初期化
  */
 
@@ -307,6 +272,5 @@
 
 /*
- *  ipcp_input -- IPCP å
-¥å
+ *  ipcp_input -- IPCP 入力
  */
 
@@ -320,6 +284,5 @@
 
 /*
- *  ipcp_resetci -- IPCPã®æ§ææ
-å ±ããªã»ããããã
+ *  ipcp_resetci -- IPCPの構成情報をリセットする。
  */
 
@@ -327,11 +290,9 @@
 ipcp_resetci (T_PPP_FSM *fsm)
 {
-	/* èªæ§ææ
-å ±ã®åæè¨­å® */
+	/* 自構成情報の初期設定 */
 	ipcp_local_neg_cfg = ipcp_local_def_cfg;
 	memset((void*)&ipcp_local_ack_cfg, 0, sizeof(T_IFNET));
 
-	/* ç¸æã®æ§ææ
-å ±ã®åæè¨­å® */
+	/* 相手の構成情報の初期設定 */
 	ipcp_remote_neg_cfg = ipcp_remote_def_cfg;
 	memset((void*)&ipcp_remote_ack_cfg, 0, sizeof(T_IFNET));
@@ -339,6 +300,5 @@
 
 /*
- *  ipcp_cilen -- æ§ææ
-å ±ã®é·ããè¿ãã
+ *  ipcp_cilen -- 構成情報の長さを返す。
  */
 
@@ -348,5 +308,5 @@
 	int_t cilen = 0;
 
-	cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t);	/* IPv4 ã¢ãã¬ã¹ */
+	cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t);	/* IPv4 アドレス */
 
 	return cilen;
@@ -354,6 +314,5 @@
 
 /*
- *  ipcp_addci -- IPCPã®æ§ææ
-å ±ãè¿½å ããã
+ *  ipcp_addci -- IPCPの構成情報を追加する。
  */
 
@@ -365,5 +324,5 @@
 	buf = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
 
-	/* IPv4 ã¢ãã¬ã¹ãªãã·ã§ã³ãè¿½å ããã */
+	/* IPv4 アドレスオプションを追加する。 */
 	*buf ++ = IPCP_CIT_ADDR;
 	*buf ++ = sizeof(T_PPP_CI_HDR) + sizeof(uint32_t);
@@ -373,8 +332,8 @@
 
 /*
- *  ipcp_ackci -- ACK ãåä¿¡ããã¨ãã®å¦ç
- *
- *	æ»ãå¤:	true  ACK ã¯æ­£å¸¸
- *		false ACK ã¯ç°å¸¸
+ *  ipcp_ackci -- ACK を受信したときの処理
+ *
+ *	戻り値:	true  ACK は正常
+ *		false ACK は異常
  */
 
@@ -389,11 +348,9 @@
 
 	/*
-	 *  æ§ææ
-å ±ã¯éä¿¡ããé ã«å®å
-¨ã«ä¸è´ããªããã°ãªããªãã
-	 *  å¾ã£ã¦ãipcp_addci ã§ä½æããé ã«è§£æããã
+	 *  構成情報は送信した順に完全に一致しなければならない。
+	 *  従って、ipcp_addci で作成した順に解析する。
 	 */
 
-	/* ADDR ãªãã·ã§ã³ãè§£æããã */
+	/* ADDR オプションを解析する。 */
 	if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)	||
 	    *buf ++ != IPCP_CIT_ADDR			||
@@ -408,8 +365,8 @@
 
 /*
- *  ipcp_nakci -- NAK ãåä¿¡ããã¨ãã®å¦ç
- *
- *	æ»ãå¤:	1  NAK ã¯æ­£å¸¸
- *		0  NAK ã¯ç°å¸¸
+ *  ipcp_nakci -- NAK を受信したときの処理
+ *
+ *	戻り値:	1  NAK は正常
+ *		0  NAK は異常
  */
 
@@ -427,5 +384,5 @@
 	new_cfg = ipcp_local_neg_cfg;
 
-	/* ADDR ãªãã·ã§ã³ãè§£æããã */
+	/* ADDR オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)		&&
 	    * buf      == IPCP_CIT_ADDR				&&
@@ -437,5 +394,5 @@
 		}
 
-	/* å¾ã¯ç¡è¦ããã*/
+	/* 後は無視する。*/
 	while (len > sizeof(T_PPP_CI_HDR)) {
 		cilen = *(buf + 1);
@@ -446,9 +403,9 @@
 		}
 
-	/* é·ãã 0 ã§ãªããã°ã¨ã©ã¼ */
+	/* 長さが 0 でなければエラー */
 	if (len != 0)
 		return 0;
 
-	/* æ°ãããªãã·ã§ã³ãè¨­å®ããã*/
+	/* 新しいオプションを設定する。*/
 	if (fsm->state != PPP_FSM_OPENED)
 		ipcp_local_neg_cfg = new_cfg;
@@ -458,8 +415,8 @@
 
 /*
- *  ipcp_rejci -- REJ ãåä¿¡ããã¨ãã®å¦ç
- *
- *	æ»ãå¤:	1  REJ ã¯æ­£å¸¸
- *		0  REJ ã¯ç°å¸¸
+ *  ipcp_rejci -- REJ を受信したときの処理
+ *
+ *	戻り値:	1  REJ は正常
+ *		0  REJ は異常
  */
 
@@ -476,5 +433,5 @@
 	new_cfg = ipcp_local_neg_cfg;
 
-	/* ADDR ãªãã·ã§ã³ãè§£æããã */
+	/* ADDR オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)		&&
 	    * buf      == IPCP_CIT_ADDR				&&
@@ -485,9 +442,9 @@
 		}
 
-	/* é·ãã 0 ã§ãªããã°ã¨ã©ã¼ */
+	/* 長さが 0 でなければエラー */
 	if (len != 0)
 		return 0;
 
-	/* æ°ãããªãã·ã§ã³ãè¨­å®ããã*/
+	/* 新しいオプションを設定する。*/
 	if (fsm->state != PPP_FSM_OPENED)
 		ipcp_local_neg_cfg = new_cfg;
@@ -497,6 +454,5 @@
 
 /*
- *  ipcp_reqci -- ç¸æã®æ§ææ
-å ±ãè§£æããã
+ *  ipcp_reqci -- 相手の構成情報を解析する。
  */
 
@@ -509,31 +465,31 @@
 
 	rp = ap = input->buf +  sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
-				/* rp: REJãap: ACK ãã CI ã®ãã¤ã³ã¿	*/
-				/* æå¦ããå ´åã¯ãå¼æ° buf ã«ä¸æ¸ãããã	*/
+				/* rp: REJ、ap: ACK する CI のポインタ	*/
+				/* 拒否する場合は、引数 buf に上書きする。	*/
 	len   = input->len - (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR));
 	np    = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
-	final = PPP_CONFACK;	/* æçµçã«éä¿¡ããã³ã¼ã */
+	final = PPP_CONFACK;	/* 最終的に送信するコード */
 	while (len > 0) {
 		code = PPP_CONFACK;
-		cp   = ap;	/* cp: ç¾å¨å¦çä¸­ã® CI	*/
+		cp   = ap;	/* cp: 現在処理中の CI	*/
 
 		if (len < sizeof(T_PPP_CI_HDR)) {
 
-			/* æ®ãã CI ãããããç­ã */
+			/* 残りが CI ヘッダより短い */
 			syslog(LOG_NOTICE, "[PPP/IPCP] bad CI len: %d.", len);
-			cilen = len;	/* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®	*/
-			len  = 0;	/* ã«ã¼ãããæããã		*/
+			cilen = len;	/* データ長が異常の場合の処置	*/
+			len  = 0;	/* ループから抜ける。		*/
 			code  = PPP_CONFREJ;
 			goto endswitch;
 			}
 
-		type  = *ap ++;	/* CI ã®å		*/
-		cilen = *ap ++;	/* CI ã®é·ã		*/
+		type  = *ap ++;	/* CI の型		*/
+		cilen = *ap ++;	/* CI の長さ		*/
 		if (len < cilen) {
 
-			/* æ®ãã CI é·ããç­ã */
+			/* 残りが CI 長より短い */
 			syslog(LOG_NOTICE, "[PPP/IPCP] bad CI len: %d.", cilen);
-			cilen = len;	/* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®	*/
-			len  = 0;	/* ã«ã¼ãããæããã		*/
+			cilen = len;	/* データ長が異常の場合の処置	*/
+			len  = 0;	/* ループから抜ける。		*/
 			code  = PPP_CONFREJ;
 			goto endswitch;
@@ -541,10 +497,10 @@
 		len -= sizeof(T_PPP_CI_HDR);
 
-		/* CI ã®åã«ããåå²ããã*/
+		/* CI の型により分岐する。*/
 		switch (type) {
 
-		case IPCP_CIT_ADDR:	/* IPv4 ã¢ãã¬ã¹ */
-
-		 	/* CI é·ããããã + 4 ãªã¯ãããã§ãªããã°ã¨ã©ã¼ */
+		case IPCP_CIT_ADDR:	/* IPv4 アドレス */
+
+		 	/* CI 長が、ヘッダ + 4 オクテットでなければエラー */
 		 	if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint32_t))
 				code = PPP_CONFREJ;
@@ -559,5 +515,5 @@
 					code = PPP_CONFNAK;
 					}
-#if 1	/* è¦ç¢ºèª */
+#if 1	/* 要確認 */
 				else if (addr == 0 && ipcp_remote_neg_cfg.in4_ifaddr.addr == 0)
 #else
@@ -578,7 +534,6 @@
 
 		if (code == PPP_CONFNAK) {
-			/* CI ã®åã Magic Number ã®å ´åãé¤ãã¦ãNAK ã®åæ°ã	*/
-			/* æå¤§å¤ MAX_PPP_FAILURES  ãè¶
-ãããæå¦ããã	*/
+			/* CI の型が Magic Number の場合を除いて、NAK の回数が	*/
+			/* 最大値 MAX_PPP_FAILURES  を超えたら拒否する。	*/
 			if (fsm->failures >= MAX_PPP_FAILURES)
 				code = PPP_CONFREJ;
@@ -587,7 +542,7 @@
 			}
 
-		/* ãã® CI ãæå¦ãã */
+		/* この CI を拒否する */
 		if (code == PPP_CONFREJ) {
-			if (rp < cp)		/* åã«è©°ããã*/
+			if (rp < cp)		/* 前に詰める。*/
 				memcpy(rp, cp, cilen);
 			rp += cilen;
@@ -599,5 +554,5 @@
 		}
 
-	/* æçµçãªé·ããèª¿æ´ããã*/
+	/* 最終的な長さを調整する。*/
 	switch (final) {
 	case PPP_CONFNAK:
@@ -617,5 +572,5 @@
 
 /*
- *  ipcp_up -- ãªã³ã¯æ¥ç¶ãç¢ºç«ããã
+ *  ipcp_up -- リンク接続を確立する。
  */
 
@@ -623,21 +578,19 @@
 ipcp_up (T_PPP_FSM *fsm)
 {
-	/* èªæ§ææ
-å ±ã®åæè¨­å® */
+	/* 自構成情報の初期設定 */
 	ipcp_local_ack_cfg = ipcp_local_neg_cfg;
 
 	/*
-	 *  ãµãããããã¹ã¯ã¨
-	 *  ã­ã¼ã«ã«ã»ãã­ã¼ãã­ã£ã¹ã IPv4 ã¢ãã¬ã¹ãè¨­å®ããã
+	 *  サブネットマスクと
+	 *  ローカル・ブロードキャスト IPv4 アドレスを設定する。
 	 */
 	ipcp_local_ack_cfg.in4_ifaddr.mask = MAKE_IPV4_LOCAL_MASK(ipcp_local_neg_cfg.in4_ifaddr.addr);
 
-	/* ç¸æã®æ§ææ
-å ±ã®åæè¨­å® */
+	/* 相手の構成情報の初期設定 */
 	ipcp_remote_ack_cfg = ipcp_remote_neg_cfg;
 
 	/*
-	 *  ãµãããããã¹ã¯ã¨
-	 *  ã­ã¼ã«ã«ã»ãã­ã¼ãã­ã£ã¹ã IPv4 ã¢ãã¬ã¹ãè¨­å®ããã
+	 *  サブネットマスクと
+	 *  ローカル・ブロードキャスト IPv4 アドレスを設定する。
 	 */
 	ipcp_remote_ack_cfg.in4_ifaddr.mask = MAKE_IPV4_LOCAL_MASK(ipcp_remote_neg_cfg.in4_ifaddr.addr);
@@ -651,5 +604,5 @@
 
 /*
- *  ipcp_down -- ãªã³ã¯æ¥ç¶ãè§£æ¾ããã
+ *  ipcp_down -- リンク接続を解放する。
  */
 
@@ -662,5 +615,5 @@
 
 /*
- *  ipcp_finished -- ä¸ä½å±¤ãçµäºããã
+ *  ipcp_finished -- 下位層を終了する。
  */
 
@@ -671,5 +624,5 @@
 
 /*
- *  ipcp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  ipcp_protrej -- Proto-REJ を受信したときの処理
  */
 
@@ -681,5 +634,5 @@
 
 /*
- *  ipcp_lowerup -- IPCP ä¸ä½å±¤ãèµ·åããã
+ *  ipcp_lowerup -- IPCP 下位層を起動する。
  */
 
@@ -691,5 +644,5 @@
 
 /*
- *  ipcp_lowerdown -- IPCP ä¸ä½å±¤ãåæ­¢ããã
+ *  ipcp_lowerdown -- IPCP 下位層を停止する。
  */
 
@@ -701,5 +654,5 @@
 
 /*
- *  ipcp_open -- IPCP ã®ãªã¼ãã³
+ *  ipcp_open -- IPCP のオープン
  */
 
@@ -711,5 +664,5 @@
 
 /*
- *  ipcp_close -- IPCP ã®ã¯ã­ã¼ãº
+ *  ipcp_close -- IPCP のクローズ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipcp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipcp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipcp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -93,19 +81,17 @@
 
 /*
- *  IPCP ã®æ§ææ
-å ± (CI)
+ *  IPCP の構成情報 (CI)
  */
 
 /*
- *  CI ã®å
+ *  CI の型
  */
 
-#define IPCP_CIT_ADDRS		UINT_C(1)	/* IP ã¢ãã¬ã¹ (å»æ£)	*/
-#define IPCP_CIT_COMP_TYPE	UINT_C(2)	/* å§ç¸®æ¹å¼		*/
-#define IPCP_CIT_ADDR		UINT_C(3)	/* IP ã¢ãã¬ã¹		*/
+#define IPCP_CIT_ADDRS		UINT_C(1)	/* IP アドレス (廃棄)	*/
+#define IPCP_CIT_COMP_TYPE	UINT_C(2)	/* 圧縮方式		*/
+#define IPCP_CIT_ADDR		UINT_C(3)	/* IP アドレス		*/
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -119,5 +105,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -134,5 +120,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -124,5 +112,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -136,109 +124,87 @@
 
 /*
- * FSM ããå¼åºãããã³ã¼ã«ããã¯é¢
- */
-
-static void  ipv6cp_resetci(T_PPP_FSM *fsm);	/* èªæ§ææ
-å ±ããªã»ããããã	*/
-static int_t ipv6cp_cilen	(T_PPP_FSM *fsm);	/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
+ * FSM から呼出されるコールバック関
+ */
+
+static void  ipv6cp_resetci(T_PPP_FSM *fsm);	/* 自構成情報をリセットする。	*/
+static int_t ipv6cp_cilen	(T_PPP_FSM *fsm);	/* 構成情報の長さを返す。		*/
 static void  ipv6cp_addci	(T_PPP_FSM *fsm, T_NET_BUF *output);
-						/* èªæ§ææ
-å ±ãè¿½å ããã		*/
+						/* 自構成情報を追加する。		*/
 static bool_t  ipv6cp_ackci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* ACK を受信したときの処理	*/
 static bool_t  ipv6cp_nakci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* NAK を受信したときの処理	*/
 static bool_t  ipv6cp_rejci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* REJ を受信したときの処理	*/
 static int_t ipv6cp_reqci	(T_PPP_FSM *fsm, T_NET_BUF *input, T_NET_BUF *output);
-						/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-static void ipv6cp_up	(T_PPP_FSM *fsm);	/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-static void ipv6cp_down	(T_PPP_FSM *fsm);	/* ãªã³ã¯æ¥ç¶ãè§£æ¾ããã		*/
-static void ipv6cp_finished(T_PPP_FSM *fsm);	/* ä¸ä½å±¤ãçµäºããã		*/
-
-/*
- *  å¤æ°
- */
-
-static T_IFNET ipv6cp_local_def_cfg = {		/* èªæ§ææ
-å ±ã®è¦å®å¤		*/
-	NULL,					/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	{},					/* IPv6 ã¢ãã¬ã¹æ
-å ±				*/
-	{},					/* ãã«ãã­ã£ã¹ã IPv6 ã¢ãã¬ã¹			*/
-	0,					/* ãã©ã°					*/
+						/* 相手の構成情報を確認する。	*/
+static void ipv6cp_up	(T_PPP_FSM *fsm);	/* リンク接続を確立する。		*/
+static void ipv6cp_down	(T_PPP_FSM *fsm);	/* リンク接続を解放する。		*/
+static void ipv6cp_finished(T_PPP_FSM *fsm);	/* 下位層を終了する。		*/
+
+/*
+ *  変数
+ */
+
+static T_IFNET ipv6cp_local_def_cfg = {		/* 自構成情報の規定値		*/
+	NULL,					/* ネットワークインタフェースのソフトウェア情報	*/
+	{},					/* IPv6 アドレス情報				*/
+	{},					/* マルチキャスト IPv6 アドレス			*/
+	0,					/* フラグ					*/
 	};
 
-static T_IFNET ipv6cp_remote_def_cfg = {	/* ç¸æã®æ§ææ
-å ±ã®è¦å®å¤	*/
-	NULL,					/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	{},					/* IPv6 ã¢ãã¬ã¹æ
-å ±				*/
-	{},					/* ãã«ãã­ã£ã¹ã IPv6 ã¢ãã¬ã¹			*/
-	0,					/* ãã©ã°					*/
+static T_IFNET ipv6cp_remote_def_cfg = {	/* 相手の構成情報の規定値	*/
+	NULL,					/* ネットワークインタフェースのソフトウェア情報	*/
+	{},					/* IPv6 アドレス情報				*/
+	{},					/* マルチキャスト IPv6 アドレス			*/
+	0,					/* フラグ					*/
 	};
 
-static T_IFNET ipv6cp_local_neg_cfg;		/* ãã´ä¸­ã®èªæ§ææ
-å ±		*/
-
-static T_IFNET ipv6cp_remote_neg_cfg;		/* ãã´ä¸­ã®ç¸æã®æ§ææ
-å ±		*/
-
-/*
- *  å
-¨åå¤æ°
+static T_IFNET ipv6cp_local_neg_cfg;		/* ネゴ中の自構成情報		*/
+
+static T_IFNET ipv6cp_remote_neg_cfg;		/* ネゴ中の相手の構成情報		*/
+
+/*
+ *  全域変数
  */
 
 T_PPP_FSM_CALLBACKS ipv6cp_callbacks = {
-	ipv6cp_resetci,			/* èªæ§ææ
-å ±ããªã»ããããã	*/
-	ipv6cp_cilen,			/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
-	ipv6cp_addci,			/* èªæ§ææ
-å ±ãè¿½å ããã		*/
-	ipv6cp_ackci,			/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
-	ipv6cp_nakci,			/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
-	ipv6cp_rejci,			/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
-	ipv6cp_reqci,			/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-	ipv6cp_up,			/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-	ipv6cp_down,			/* ãªã³ã¯æ¥ç¶ãè§£æ¾ããã		*/
-	NULL,				/* ä¸ä½å±¤ãéå§ããã		*/
-	ipv6cp_finished,			/* ä¸ä½å±¤ãçµäºããã		*/
-	NULL,				/* åéããã			*/
-	NULL,				/* ä¸æãª CP ãåä¿¡ããã¨ãã®å¦ç	*/
+	ipv6cp_resetci,			/* 自構成情報をリセットする。	*/
+	ipv6cp_cilen,			/* 構成情報の長さを返す。		*/
+	ipv6cp_addci,			/* 自構成情報を追加する。		*/
+	ipv6cp_ackci,			/* ACK を受信したときの処理	*/
+	ipv6cp_nakci,			/* NAK を受信したときの処理	*/
+	ipv6cp_rejci,			/* REJ を受信したときの処理	*/
+	ipv6cp_reqci,			/* 相手の構成情報を確認する。	*/
+	ipv6cp_up,			/* リンク接続を確立する。		*/
+	ipv6cp_down,			/* リンク接続を解放する。		*/
+	NULL,				/* 下位層を開始する。		*/
+	ipv6cp_finished,			/* 下位層を終了する。		*/
+	NULL,				/* 再送する。			*/
+	NULL,				/* 不明な CP を受信したときの処理	*/
 	};
 
 T_PPP_FSM ipv6cp_fsm = {
-	&ipv6cp_callbacks,		/* ã³ã¼ã«ããã¯é¢æ°		*/
-	PPP_IPV6CP,			/* ãã­ãã³ã«			*/
+	&ipv6cp_callbacks,		/* コールバック関数		*/
+	PPP_IPV6CP,			/* プロトコル			*/
 	};
 
 T_PPP_PROTENT ipv6cp_protent = {
 	PPP_IPV6CP,
-	ipv6cp_init,			/* åæå			*/
-	ipv6cp_input,			/* å
-¥å				*/
-	ipv6cp_protrej,			/* Proto-REJ åä¿¡å¦ç		*/
-	ipv6cp_lowerup,			/* ä¸ä½å±¤ãèµ·åãã		*/
-	ipv6cp_lowerdown,		/* ä¸ä½å±¤ãåæ­¢ãã		*/
-	ipv6cp_open,			/* ãªã¼ãã³ãã			*/
-	ipv6cp_close,			/* ã¯ã­ã¼ãºãã			*/
-	ip6_input,			/* ãã¼ã¿å
-¥åãIPv6 å
-¥å	*/
+	ipv6cp_init,			/* 初期化			*/
+	ipv6cp_input,			/* 入力				*/
+	ipv6cp_protrej,			/* Proto-REJ 受信処理		*/
+	ipv6cp_lowerup,			/* 下位層を起動する		*/
+	ipv6cp_lowerdown,		/* 下位層を停止する		*/
+	ipv6cp_open,			/* オープンする			*/
+	ipv6cp_close,			/* クローズする			*/
+	ip6_input,			/* データ入力、IPv6 入力	*/
 	};
 
-T_IFNET ipv6cp_local_ack_cfg;		/* ç¸æã«è¨±å¯ãããã®èªæ§ææ
-å ±	*/
-T_IFNET ipv6cp_remote_ack_cfg;		/* ç¸æã«è¨±å¯ããæ§ææ
-å ±	*/
-
-/*
- *  ppp_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã
+T_IFNET ipv6cp_local_ack_cfg;		/* 相手に許可されたの自構成情報	*/
+T_IFNET ipv6cp_remote_ack_cfg;		/* 相手に許可した構成情報	*/
+
+/*
+ *  ppp_get_ifnet -- ネットワークインタフェース構造体を返す。
  */
 
@@ -250,8 +216,7 @@
 
 /*
- *  wait_ipv6cp -- IP æ¥ç¶å®äºã¾ã§å¾
-ã¤ã
- *
- *	æ»ãå¤: æ¥ç¶ã«å¤±æããã E_OBJ ãè¿ãã
+ *  wait_ipv6cp -- IP 接続完了まで待つ。
+ *
+ *	戻り値: 接続に失敗したら E_OBJ を返す。
  */
 
@@ -267,6 +232,5 @@
 #ifdef PPP_CFG_MODEM
 
-		/* ã¢ãã ã®æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+		/* モデムの接続完了まで待つ。*/
 		if ((error = wait_modem()) != E_OK)
 			return error;
@@ -275,8 +239,6 @@
 
 		/*
-		 * ååãªã¼ãã³ããç¸æããã®æ¥ç¶å¾
-ã¡ãªã LCP ãä¸åº¦ã¯ã­ã¼ãºãã
-		 * è½åãªã¼ãã³ç¶æ
-ã§ãåãªã¼ãã³ããã
+		 * 受動オープンし、相手からの接続待ちなら LCP を一度クローズし、
+		 * 能動オープン状態で、再オープンする。
 		 */
 		lcp_close();
@@ -288,6 +250,5 @@
 
 	if (ipv6cp_fsm.state != PPP_FSM_OPENED) {
-		/* IP æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+		/* IP 接続完了まで待つ。*/
 		wai_sem(SEM_IPV6CP_READY);
 		if (ipv6cp_fsm.state != PPP_FSM_OPENED)
@@ -299,5 +260,5 @@
 
 /*
- *  ipv6cp_init -- IPV6CP ã¢ã¸ã¥ã¼ã«ã®åæå
+ *  ipv6cp_init -- IPV6CP モジュールの初期化
  */
 
@@ -309,6 +270,5 @@
 
 /*
- *  ipv6cp_input -- IPV6CP å
-¥å
+ *  ipv6cp_input -- IPV6CP 入力
  */
 
@@ -322,6 +282,5 @@
 
 /*
- *  ipv6cp_resetci -- IPV6CPã®æ§ææ
-å ±ããªã»ããããã
+ *  ipv6cp_resetci -- IPV6CPの構成情報をリセットする。
  */
 
@@ -329,11 +288,9 @@
 ipv6cp_resetci (T_PPP_FSM *fsm)
 {
-	/* èªæ§ææ
-å ±ã®åæè¨­å® */
+	/* 自構成情報の初期設定 */
 	ipv6cp_local_neg_cfg = ipv6cp_local_def_cfg;
 	memset((void*)&ipv6cp_local_ack_cfg, 0, sizeof(T_IFNET));
 
-	/* ç¸æã®æ§ææ
-å ±ã®åæè¨­å® */
+	/* 相手の構成情報の初期設定 */
 	ipv6cp_remote_neg_cfg = ipv6cp_remote_def_cfg;
 	memset((void*)&ipv6cp_remote_ack_cfg, 0, sizeof(T_IFNET));
@@ -341,6 +298,5 @@
 
 /*
- *  ipv6cp_cilen -- æ§ææ
-å ±ã®é·ããè¿ãã
+ *  ipv6cp_cilen -- 構成情報の長さを返す。
  */
 
@@ -350,5 +306,5 @@
 	int_t cilen = 0;
 
-	cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t);	/* IPv6 ã¢ãã¬ã¹ */
+	cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t);	/* IPv6 アドレス */
 
 	return cilen;
@@ -356,6 +312,5 @@
 
 /*
- *  ipv6cp_addci -- IPV6CPã®æ§ææ
-å ±ãè¿½å ããã
+ *  ipv6cp_addci -- IPV6CPの構成情報を追加する。
  */
 
@@ -367,5 +322,5 @@
 	buf = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
 
-	/* IPv6 ã¢ãã¬ã¹ãªãã·ã§ã³ãè¿½å ããã */
+	/* IPv6 アドレスオプションを追加する。 */
 	*buf ++ = IPV6CP_CIT_ADDR;
 	*buf ++ = sizeof(T_PPP_CI_HDR) + sizeof(uint32_t);
@@ -375,8 +330,8 @@
 
 /*
- *  ipv6cp_ackci -- ACK ãåä¿¡ããã¨ãã®å¦ç
- *
- *	æ»ãå¤:	true  ACK ã¯æ­£å¸¸
- *		false ACK ã¯ç°å¸¸
+ *  ipv6cp_ackci -- ACK を受信したときの処理
+ *
+ *	戻り値:	true  ACK は正常
+ *		false ACK は異常
  */
 
@@ -391,11 +346,9 @@
 
 	/*
-	 *  æ§ææ
-å ±ã¯éä¿¡ããé ã«å®å
-¨ã«ä¸è´ããªããã°ãªããªãã
-	 *  å¾ã£ã¦ãipv6cp_addci ã§ä½æããé ã«è§£æããã
+	 *  構成情報は送信した順に完全に一致しなければならない。
+	 *  従って、ipv6cp_addci で作成した順に解析する。
 	 */
 
-	/* ADDR ãªãã·ã§ã³ãè§£æããã */
+	/* ADDR オプションを解析する。 */
 	if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)	||
 	    *buf ++ != IPV6CP_CIT_ADDR			||
@@ -410,8 +363,8 @@
 
 /*
- *  ipv6cp_nakci -- NAK ãåä¿¡ããã¨ãã®å¦ç
- *
- *	æ»ãå¤:	1  NAK ã¯æ­£å¸¸
- *		0  NAK ã¯ç°å¸¸
+ *  ipv6cp_nakci -- NAK を受信したときの処理
+ *
+ *	戻り値:	1  NAK は正常
+ *		0  NAK は異常
  */
 
@@ -429,5 +382,5 @@
 	new_cfg = ipv6cp_local_neg_cfg;
 
-	/* ADDR ãªãã·ã§ã³ãè§£æããã */
+	/* ADDR オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(addr)		&&
 	    * buf      == IPV6CP_CIT_ADDR			&&
@@ -438,5 +391,5 @@
 		}
 
-	/* å¾ã¯ç¡è¦ããã*/
+	/* 後は無視する。*/
 	while (len > sizeof(T_PPP_CI_HDR)) {
 		cilen = *(buf + 1);
@@ -447,9 +400,9 @@
 		}
 
-	/* é·ãã 0 ã§ãªããã°ã¨ã©ã¼ */
+	/* 長さが 0 でなければエラー */
 	if (len != 0)
 		return 0;
 
-	/* æ°ãããªãã·ã§ã³ãè¨­å®ããã*/
+	/* 新しいオプションを設定する。*/
 	if (fsm->state != PPP_FSM_OPENED)
 		ipv6cp_local_neg_cfg = new_cfg;
@@ -459,8 +412,8 @@
 
 /*
- *  ipv6cp_rejci -- REJ ãåä¿¡ããã¨ãã®å¦ç
- *
- *	æ»ãå¤:	1  REJ ã¯æ­£å¸¸
- *		0  REJ ã¯ç°å¸¸
+ *  ipv6cp_rejci -- REJ を受信したときの処理
+ *
+ *	戻り値:	1  REJ は正常
+ *		0  REJ は異常
  */
 
@@ -477,5 +430,5 @@
 	new_cfg = ipv6cp_local_neg_cfg;
 
-	/* ADDR ãªãã·ã§ã³ãè§£æããã */
+	/* ADDR オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(new_cfg.in6_ifaddrs[0].addr)	&&
 	    * buf      == IPV6CP_CIT_ADDR					&&
@@ -487,9 +440,9 @@
 		}
 
-	/* é·ãã 0 ã§ãªããã°ã¨ã©ã¼ */
+	/* 長さが 0 でなければエラー */
 	if (len != 0)
 		return 0;
 
-	/* æ°ãããªãã·ã§ã³ãè¨­å®ããã*/
+	/* 新しいオプションを設定する。*/
 	if (fsm->state != PPP_FSM_OPENED)
 		ipv6cp_local_neg_cfg = new_cfg;
@@ -499,6 +452,5 @@
 
 /*
- *  ipv6cp_reqci -- ç¸æã®æ§ææ
-å ±ãè§£æããã
+ *  ipv6cp_reqci -- 相手の構成情報を解析する。
  */
 
@@ -511,31 +463,31 @@
 
 	rp = ap = input->buf +  sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
-				/* rp: REJãap: ACK ãã CI ã®ãã¤ã³ã¿	*/
-				/* æå¦ããå ´åã¯ãå¼æ° buf ã«ä¸æ¸ãããã	*/
+				/* rp: REJ、ap: ACK する CI のポインタ	*/
+				/* 拒否する場合は、引数 buf に上書きする。	*/
 	len   = input->len - (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR));
 	np    = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
-	final = PPP_CONFACK;	/* æçµçã«éä¿¡ããã³ã¼ã */
+	final = PPP_CONFACK;	/* 最終的に送信するコード */
 	while (len > 0) {
 		code = PPP_CONFACK;
-		cp   = ap;	/* cp: ç¾å¨å¦çä¸­ã® CI	*/
+		cp   = ap;	/* cp: 現在処理中の CI	*/
 
 		if (len < sizeof(T_PPP_CI_HDR)) {
 
-			/* æ®ãã CI ãããããç­ã */
+			/* 残りが CI ヘッダより短い */
 			syslog(LOG_NOTICE, "[PPP/IPV6CP] bad CI len: %d.", len);
-			cilen = len;	/* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®	*/
-			len  = 0;	/* ã«ã¼ãããæããã		*/
+			cilen = len;	/* データ長が異常の場合の処置	*/
+			len  = 0;	/* ループから抜ける。		*/
 			code  = PPP_CONFREJ;
 			goto endswitch;
 			}
 
-		type  = *ap ++;	/* CI ã®å		*/
-		cilen = *ap ++;	/* CI ã®é·ã		*/
+		type  = *ap ++;	/* CI の型		*/
+		cilen = *ap ++;	/* CI の長さ		*/
 		if (len < cilen) {
 
-			/* æ®ãã CI é·ããç­ã */
+			/* 残りが CI 長より短い */
 			syslog(LOG_NOTICE, "[PPP/IPV6CP] bad CI len: %d.", cilen);
-			cilen = len;	/* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®	*/
-			len  = 0;	/* ã«ã¼ãããæããã		*/
+			cilen = len;	/* データ長が異常の場合の処置	*/
+			len  = 0;	/* ループから抜ける。		*/
 			code  = PPP_CONFREJ;
 			goto endswitch;
@@ -543,10 +495,10 @@
 		len -= sizeof(T_PPP_CI_HDR);
 
-		/* CI ã®åã«ããåå²ããã*/
+		/* CI の型により分岐する。*/
 		switch (type) {
 
-		case IPV6CP_CIT_ADDR:	/* IPv6 ã¢ãã¬ã¹ */
-
-		 	/* CI é·ããããã + 4 ãªã¯ãããã§ãªããã°ã¨ã©ã¼ */
+		case IPV6CP_CIT_ADDR:	/* IPv6 アドレス */
+
+		 	/* CI 長が、ヘッダ + 4 オクテットでなければエラー */
 		 	if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(addr))
 				code = PPP_CONFREJ;
@@ -564,5 +516,5 @@
 					code = PPP_CONFNAK;
 					}
-#if 1	/* è¦ç¢ºèª */
+#if 1	/* 要確認 */
 				else if (IN6_IS_ADDR_UNSPECIFIED(&addr) &&
 				         IN6_IS_ADDR_UNSPECIFIED(&ipv6cp_remote_neg_cfg.in6_ifaddrs[0]))
@@ -585,7 +537,6 @@
 
 		if (code == PPP_CONFNAK) {
-			/* CI ã®åã Magic Number ã®å ´åãé¤ãã¦ãNAK ã®åæ°ã	*/
-			/* æå¤§å¤ MAX_PPP_FAILURES  ãè¶
-ãããæå¦ããã	*/
+			/* CI の型が Magic Number の場合を除いて、NAK の回数が	*/
+			/* 最大値 MAX_PPP_FAILURES  を超えたら拒否する。	*/
 			if (fsm->failures >= MAX_PPP_FAILURES)
 				code = PPP_CONFREJ;
@@ -594,7 +545,7 @@
 			}
 
-		/* ãã® CI ãæå¦ãã */
+		/* この CI を拒否する */
 		if (code == PPP_CONFREJ) {
-			if (rp < cp)		/* åã«è©°ããã*/
+			if (rp < cp)		/* 前に詰める。*/
 				memcpy(rp, cp, cilen);
 			rp += cilen;
@@ -606,5 +557,5 @@
 		}
 
-	/* æçµçãªé·ããèª¿æ´ããã*/
+	/* 最終的な長さを調整する。*/
 	switch (final) {
 	case PPP_CONFNAK:
@@ -624,5 +575,5 @@
 
 /*
- *  ipv6cp_up -- ãªã³ã¯æ¥ç¶ãç¢ºç«ããã
+ *  ipv6cp_up -- リンク接続を確立する。
  */
 
@@ -630,6 +581,5 @@
 ipv6cp_up (T_PPP_FSM *fsm)
 {
-	/* èªæ§ææ
-å ±ã®åæè¨­å® */
+	/* 自構成情報の初期設定 */
 	ipv6cp_local_ack_cfg = ipv6cp_local_neg_cfg;
 
@@ -642,5 +592,5 @@
 
 /*
- *  ipv6cp_down -- ãªã³ã¯æ¥ç¶ãè§£æ¾ããã
+ *  ipv6cp_down -- リンク接続を解放する。
  */
 
@@ -653,5 +603,5 @@
 
 /*
- *  ipv6cp_finished -- ä¸ä½å±¤ãçµäºããã
+ *  ipv6cp_finished -- 下位層を終了する。
  */
 
@@ -662,5 +612,5 @@
 
 /*
- *  ipv6cp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  ipv6cp_protrej -- Proto-REJ を受信したときの処理
  */
 
@@ -672,5 +622,5 @@
 
 /*
- *  ipv6cp_lowerup -- IPV6CP ä¸ä½å±¤ãèµ·åããã
+ *  ipv6cp_lowerup -- IPV6CP 下位層を起動する。
  */
 
@@ -682,5 +632,5 @@
 
 /*
- *  ipv6cp_lowerdown -- IPV6CP ä¸ä½å±¤ãåæ­¢ããã
+ *  ipv6cp_lowerdown -- IPV6CP 下位層を停止する。
  */
 
@@ -692,5 +642,5 @@
 
 /*
- *  ipv6cp_open -- IPV6CP ã®ãªã¼ãã³
+ *  ipv6cp_open -- IPV6CP のオープン
  */
 
@@ -702,5 +652,5 @@
 
 /*
- *  ipv6cp_close -- IPV6CP ã®ã¯ã­ã¼ãº
+ *  ipv6cp_close -- IPV6CP のクローズ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -93,19 +81,17 @@
 
 /*
- *  IPV6CP ã®æ§ææ
-å ± (CI)
+ *  IPV6CP の構成情報 (CI)
  */
 
 /*
- *  CI ã®å
+ *  CI の型
  */
 
-#define IPV6CP_CIT_ADDRS		UINT_C(1)	/* IP ã¢ãã¬ã¹ (å»æ£)	*/
-#define IPV6CP_CIT_COMP_TYPE	UINT_C(2)	/* å§ç¸®æ¹å¼		*/
-#define IPV6CP_CIT_ADDR		UINT_C(3)	/* IP ã¢ãã¬ã¹		*/
+#define IPV6CP_CIT_ADDRS		UINT_C(1)	/* IP アドレス (廃棄)	*/
+#define IPV6CP_CIT_COMP_TYPE	UINT_C(2)	/* 圧縮方式		*/
+#define IPV6CP_CIT_ADDR		UINT_C(3)	/* IP アドレス		*/
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -119,5 +105,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -134,5 +120,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_lcp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_lcp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_lcp.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -113,5 +101,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -131,66 +119,58 @@
 
 /*
- * FSM ããå¼åºãããã³ã¼ã«ããã¯é¢æ°
- */
-
-static void  lcp_resetci(T_PPP_FSM *fsm);	/* èªæ§ææ
-å ±ããªã»ããããã	*/
-static int_t lcp_cilen	(T_PPP_FSM *fsm);	/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
+ * FSM から呼出されるコールバック関数
+ */
+
+static void  lcp_resetci(T_PPP_FSM *fsm);	/* 自構成情報をリセットする。	*/
+static int_t lcp_cilen	(T_PPP_FSM *fsm);	/* 構成情報の長さを返す。		*/
 static void  lcp_addci	(T_PPP_FSM *fsm, T_NET_BUF *output);
-						/* èªæ§ææ
-å ±ãè¿½å ããã		*/
+						/* 自構成情報を追加する。		*/
 static bool_t lcp_ackci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* ACK を受信したときの処理	*/
 static bool_t lcp_nakci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* NAK を受信したときの処理	*/
 static bool_t lcp_rejci	(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* REJ を受信したときの処理	*/
 static int_t lcp_reqci	(T_PPP_FSM *fsm, T_NET_BUF *input, T_NET_BUF *output);
-						/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-static void lcp_up	(T_PPP_FSM *fsm);	/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-static void lcp_starting(T_PPP_FSM *fsm);	/* ä¸ä½å±¤ãéå§ããã		*/
+						/* 相手の構成情報を確認する。	*/
+static void lcp_up	(T_PPP_FSM *fsm);	/* リンク接続を確立する。		*/
+static void lcp_starting(T_PPP_FSM *fsm);	/* 下位層を開始する。		*/
 static bool_t lcp_extcode	(T_PPP_FSM *fsm, uint8_t code, uint8_t id, T_NET_BUF *input);
-						/* ä¸æãª CP ãåä¿¡ããã¨ãã®å¦ç	*/
+						/* 不明な CP を受信したときの処理	*/
 static void lcp_rprotrej(T_PPP_FSM *fsm, T_NET_BUF *input);
-						/* Proto-REJ ãåä¿¡ããã¨ãã®å¦ç	*/
-/*
- *  å¤æ°
- */
-
-static T_LCP_CONFIGS lcp_def_cfg = {		/* æ§ææ
-å ±ã®åæè¨­å®å¤		*/
+						/* Proto-REJ を受信したときの処理	*/
+/*
+ *  変数
+ */
+
+static T_LCP_CONFIGS lcp_def_cfg = {		/* 構成情報の初期設定値		*/
 	DEF_REMOTE_ACCM,			/* ACCM				*/
 
 #ifdef LCP_CFG_MAGIC
 
-	ULONG_C(0),				/* ãã¸ãã¯çªå·			*/
+	ULONG_C(0),				/* マジック番号			*/
 
 #endif	/* of #ifdef LCP_CFG_MAGIC */
 
 	DEF_PPP_MTU,				/* MRU				*/
-	UINT_C(0),				/* ãªãã·ã§ã³ãã©ã°		*/
+	UINT_C(0),				/* オプションフラグ		*/
 	};
 
-static T_LCP_CONFIGS lcp_local_def_cfg = {	/* èªæ§ææ
-å ±ã®è¦å®å¤		*/
+static T_LCP_CONFIGS lcp_local_def_cfg = {	/* 自構成情報の規定値		*/
 	DEF_LOCAL_ACCM,				/* ACCM				*/
 
 #ifdef LCP_CFG_MAGIC
 
-	ULONG_C(0),				/* ãã¸ãã¯çªå·			*/
+	ULONG_C(0),				/* マジック番号			*/
 
 #endif	/* of #ifdef LCP_CFG_MAGIC */
 
 	DEF_PPP_MTU,				/* MRU				*/
-	DEF_LCP_LOCAL_CFGS,			/* ãªãã·ã§ã³ãã©ã°		*/
+	DEF_LCP_LOCAL_CFGS,			/* オプションフラグ		*/
 	};
 
-static T_LCP_CONFIGS lcp_local_neg_cfg;		/* ãã´ä¸­ã®èªæ§ææ
-å ±		*/
-
-static T_LCP_CONFIGS lcp_remote_neg_cfg;	/* ãã´ä¸­ã®ç¸æã®æ§ææ
-å ±		*/
+static T_LCP_CONFIGS lcp_local_neg_cfg;		/* ネゴ中の自構成情報		*/
+
+static T_LCP_CONFIGS lcp_remote_neg_cfg;	/* ネゴ中の相手の構成情報		*/
 
 #if DEF_LCP_LOCAL_CFGS & LCP_CFG_MAGIC
@@ -203,54 +183,45 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
 T_PPP_FSM_CALLBACKS lcp_callbacks = {
-	lcp_resetci,			/* èªæ§ææ
-å ±ããªã»ããããã	*/
-	lcp_cilen,			/* æ§ææ
-å ±ã®é·ããè¿ãã		*/
-	lcp_addci,			/* èªæ§ææ
-å ±ãè¿½å ããã		*/
-	lcp_ackci,			/* ACK ãåä¿¡ããã¨ãã®å¦ç	*/
-	lcp_nakci,			/* NAK ãåä¿¡ããã¨ãã®å¦ç	*/
-	lcp_rejci,			/* REJ ãåä¿¡ããã¨ãã®å¦ç	*/
-	lcp_reqci,			/* ç¸æã®æ§ææ
-å ±ãç¢ºèªããã	*/
-	lcp_up,				/* ãªã³ã¯æ¥ç¶ãç¢ºç«ããã		*/
-	lcp_down,			/* ãªã³ã¯æ¥ç¶ãè§£æ¾ããã		*/
-	lcp_starting,			/* ä¸ä½å±¤ãéå§ããã		*/
-	lcp_finished,			/* ä¸ä½å±¤ãçµäºããã		*/
-	NULL,				/* åéããã			*/
-	lcp_extcode,			/* ä¸æãª CP ãåä¿¡ããã¨ãã®å¦ç	*/
+	lcp_resetci,			/* 自構成情報をリセットする。	*/
+	lcp_cilen,			/* 構成情報の長さを返す。		*/
+	lcp_addci,			/* 自構成情報を追加する。		*/
+	lcp_ackci,			/* ACK を受信したときの処理	*/
+	lcp_nakci,			/* NAK を受信したときの処理	*/
+	lcp_rejci,			/* REJ を受信したときの処理	*/
+	lcp_reqci,			/* 相手の構成情報を確認する。	*/
+	lcp_up,				/* リンク接続を確立する。		*/
+	lcp_down,			/* リンク接続を解放する。		*/
+	lcp_starting,			/* 下位層を開始する。		*/
+	lcp_finished,			/* 下位層を終了する。		*/
+	NULL,				/* 再送する。			*/
+	lcp_extcode,			/* 不明な CP を受信したときの処理	*/
 	};
 
 T_PPP_FSM lcp_fsm = {
-	&lcp_callbacks,			/* ã³ã¼ã«ããã¯é¢æ°		*/
-	PPP_LCP,			/* ãã­ãã³ã«			*/
+	&lcp_callbacks,			/* コールバック関数		*/
+	PPP_LCP,			/* プロトコル			*/
 	};
 
 T_PPP_PROTENT lcp_protent = {
 	PPP_LCP,
-	lcp_init,			/* åæå			*/
-	lcp_input,			/* å
-¥å				*/
-	lcp_protrej,			/* Proto-REJ åä¿¡å¦ç		*/
-	NULL,				/* ä¸ä½å±¤ãèµ·åãã		*/
-	lcp_lowerdown,			/* ä¸ä½å±¤ãåæ­¢ãã		*/
-	NULL,				/* ãªã¼ãã³ãã			*/
-	lcp_close,			/* ã¯ã­ã¼ãºãã			*/
-	NULL,				/* ãã¼ã¿å
-¥å			*/
+	lcp_init,			/* 初期化			*/
+	lcp_input,			/* 入力				*/
+	lcp_protrej,			/* Proto-REJ 受信処理		*/
+	NULL,				/* 下位層を起動する		*/
+	lcp_lowerdown,			/* 下位層を停止する		*/
+	NULL,				/* オープンする			*/
+	lcp_close,			/* クローズする			*/
+	NULL,				/* データ入力			*/
 	};
 
-T_LCP_CONFIGS lcp_local_ack_cfg;	/* ç¸æã«è¨±å¯ãããã®èªæ§ææ
-å ±	*/
-T_LCP_CONFIGS lcp_remote_ack_cfg;	/* ç¸æã«è¨±å¯ããæ§ææ
-å ±		*/
-
-/*
- *  lcp_init -- LCP ã¢ã¸ã¥ã¼ã«ã®åæå
+T_LCP_CONFIGS lcp_local_ack_cfg;	/* 相手に許可されたの自構成情報	*/
+T_LCP_CONFIGS lcp_remote_ack_cfg;	/* 相手に許可した構成情報		*/
+
+/*
+ *  lcp_init -- LCP モジュールの初期化
  */
 
@@ -262,6 +233,5 @@
 
 /*
- *  lcp_input -- LCP å
-¥å
+ *  lcp_input -- LCP 入力
  */
 
@@ -275,6 +245,5 @@
 
 /*
- *  lcp_resetci -- LCPã®æ§ææ
-å ±ããªã»ããããã
+ *  lcp_resetci -- LCPの構成情報をリセットする。
  */
 
@@ -288,11 +257,9 @@
 #endif	/* of #ifdef LCP_CFG_MAGIC */
 
-	/* èªæ§ææ
-å ±ã®åæè¨­å® */
+	/* 自構成情報の初期設定 */
 	lcp_local_neg_cfg	= lcp_local_def_cfg;
 	lcp_local_ack_cfg	= lcp_def_cfg;
 
-	/* ç¸æã®æ§ææ
-å ±ã®åæè¨­å® */
+	/* 相手の構成情報の初期設定 */
 	lcp_remote_neg_cfg	= lcp_def_cfg;
 	lcp_remote_ack_cfg	= lcp_def_cfg;
@@ -310,6 +277,5 @@
 
 /*
- *  lcp_cilen -- æ§ææ
-å ±ã®é·ããè¿ãã
+ *  lcp_cilen -- 構成情報の長さを返す。
  */
 
@@ -342,5 +308,5 @@
 
 	if (lcp_local_neg_cfg.options & LCP_CFG_PCOMP)
-		cilen += sizeof(T_PPP_CI_HDR);			/* ãã­ãã³ã«å§ç¸® */
+		cilen += sizeof(T_PPP_CI_HDR);			/* プロトコル圧縮 */
 
 #endif	/* of #ifdef LCP_CFG_PCOMP */
@@ -349,5 +315,5 @@
 
 	if (lcp_local_neg_cfg.options & LCP_CFG_ACCOMP)
-		cilen += sizeof(T_PPP_CI_HDR);			/* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸® */
+		cilen += sizeof(T_PPP_CI_HDR);			/* アドレス・制御圧縮 */
 
 #endif	/* of #ifdef LCP_CFG_ACCOMP */
@@ -357,6 +323,5 @@
 
 /*
- *  lcp_addci -- LCPã®æ§ææ
-å ±ãè¿½å ããã
+ *  lcp_addci -- LCPの構成情報を追加する。
  */
 
@@ -368,5 +333,5 @@
 	buf = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
 
-	/* MRU ãªãã·ã§ã³ãè¿½å ããã */
+	/* MRU オプションを追加する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_MRU) {
 		*buf ++ = LCP_CIT_MRU;
@@ -376,5 +341,5 @@
 		}
 
-	/* ACCM ãªãã·ã§ã³ãè¿½å ããã */
+	/* ACCM オプションを追加する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_ACCM) {
 		*buf ++ = LCP_CIT_ACCM;
@@ -386,5 +351,5 @@
 #ifdef LCP_CFG_MAGIC
 
-	/* Magic Number ãªãã·ã§ã³ãè¿½å ããã */
+	/* Magic Number オプションを追加する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_MAGIC) {
 		*buf ++ = LCP_CIT_MAGIC;
@@ -398,5 +363,5 @@
 #ifdef LCP_CFG_PAP
 
-	/* èªè¨¼ãã­ãã³ã«ãªãã·ã§ã³ãè¿½å ããã */
+	/* 認証プロトコルオプションを追加する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_PAP) {
 		*buf ++ = LCP_CIT_AUTH;
@@ -410,5 +375,5 @@
 #ifdef LCP_CFG_PCOMP
 
-	/* ãã­ãã³ã«å§ç¸®ãªãã·ã§ã³ãè¿½å ããã */
+	/* プロトコル圧縮オプションを追加する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_PCOMP) {
 		*buf ++ = LCP_CIT_PCOMP;
@@ -420,5 +385,5 @@
 #ifdef LCP_CFG_ACCOMP
 
-	/* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ãè¿½å ããã */
+	/* アドレス・制御圧縮オプションを追加する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_ACCOMP) {
 		*buf ++ = LCP_CIT_ACCOMP;
@@ -430,8 +395,8 @@
 
 /*
- *  lcp_ackci -- ACK ãåä¿¡ããã¨ãã®å¦ç
+ *  lcp_ackci -- ACK を受信したときの処理
  *
- *	æ»ãå¤:	TURE  ACK ã¯æ­£å¸¸
- *		false ACK ã¯ç°å¸¸
+ *	戻り値:	TURE  ACK は正常
+ *		false ACK は異常
  */
 
@@ -446,11 +411,9 @@
 
 	/*
-	 *  æ§ææ
-å ±ã¯éä¿¡ããé ã«å®å
-¨ã«ä¸è´ããªããã°ãªããªãã
-	 *  å¾ã£ã¦ãlcp_addci ã§ä½æããé ã«è§£æããã
+	 *  構成情報は送信した順に完全に一致しなければならない。
+	 *  従って、lcp_addci で作成した順に解析する。
 	 */
 
-	/* MRU ãªãã·ã§ã³ãè§£æããã */
+	/* MRU オプションを解析する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_MRU) {
 		if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)	||
@@ -463,5 +426,5 @@
 		}
 
-	/* ACCM ãªãã·ã§ã³ãè§£æããã */
+	/* ACCM オプションを解析する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_ACCM) {
 		if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)	||
@@ -476,5 +439,5 @@
 #ifdef LCP_CFG_MAGIC
 
-	/* Magic Number ãªãã·ã§ã³ãè§£æããã */
+	/* Magic Number オプションを解析する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_MAGIC) {
 		if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)	||
@@ -491,5 +454,5 @@
 #ifdef LCP_CFG_PAP
 
-	/* èªè¨¼ãã­ãã³ã«ãªãã·ã§ã³ãè§£æããã */
+	/* 認証プロトコルオプションを解析する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_PAP) {
 		if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)	||
@@ -506,5 +469,5 @@
 #ifdef LCP_CFG_PCOMP
 
-	/* ãã­ãã³ã«å§ç¸®ãªãã·ã§ã³ãè§£æããã */
+	/* プロトコル圧縮オプションを解析する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_PCOMP) {
 		if (len < sizeof(T_PPP_CI_HDR)			||
@@ -519,5 +482,5 @@
 #ifdef LCP_CFG_ACCOMP
 
-	/* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ãè§£æããã */
+	/* アドレス・制御圧縮オプションを解析する。 */
 	if (lcp_local_neg_cfg.options & LCP_CFG_ACCOMP) {
 		if (len < sizeof(T_PPP_CI_HDR)			||
@@ -533,8 +496,8 @@
 
 /*
- *  lcp_nakci -- NAK ãåä¿¡ããã¨ãã®å¦ç
+ *  lcp_nakci -- NAK を受信したときの処理
  *
- *	æ»ãå¤:	1  NAK ã¯æ­£å¸¸
- *		0  NAK ã¯ç°å¸¸
+ *	戻り値:	1  NAK は正常
+ *		0  NAK は異常
  */
 
@@ -543,5 +506,5 @@
 {
 	T_LCP_CONFIGS	new_cfg;
-	bool_t		loop = false;	/* ã«ã¼ãããã¯ããã§ãã¯ */
+	bool_t		loop = false;	/* ループバックをチェック */
 	uint32_t	cilong;
 	uint16_t	cishort, len;
@@ -553,5 +516,5 @@
 	new_cfg = lcp_local_neg_cfg;
 
-	/* MRU ãªãã·ã§ã³ãè§£æããã */
+	/* MRU オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)		&&
 	    * buf      == LCP_CIT_MRU				&&
@@ -565,5 +528,5 @@
 		}
 
-	/* ACCM ãªãã·ã§ã³ãè§£æããã */
+	/* ACCM オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)		&&
 	    * buf      == LCP_CIT_ACCM				&&
@@ -578,5 +541,5 @@
 #ifdef LCP_CFG_MAGIC
 
-	/* Magic Number ãªãã·ã§ã³ãè§£æããã */
+	/* Magic Number オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)		&&
 	    * buf      == LCP_CIT_MAGIC				&&
@@ -594,5 +557,5 @@
 #ifdef LCP_CFG_PAP
 
-	/* èªè¨¼ãã­ãã³ã«ãªãã·ã§ã³ãè§£æããã */
+	/* 認証プロトコルオプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)		&&
 	    * buf      == LCP_CIT_AUTH				&&
@@ -612,5 +575,5 @@
 #ifdef LCP_CFG_PCOMP
 
-	/* ãã­ãã³ã«å§ç¸®ãªãã·ã§ã³ãè§£æããã */
+	/* プロトコル圧縮オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR)				&&
 	    * buf      == LCP_CIT_PCOMP				&&
@@ -626,5 +589,5 @@
 #ifdef LCP_CFG_ACCOMP
 
-	/* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ãè§£æããã */
+	/* アドレス・制御圧縮オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR)				&&
 	    * buf      == LCP_CIT_ACCOMP			&&
@@ -638,5 +601,5 @@
 #endif	/* of #ifdef LCP_CFG_ACCOMP */
 
-	/* å¾ã¯ç¡è¦ããã*/
+	/* 後は無視する。*/
 	while (len > sizeof(T_PPP_CI_HDR)) {
 		cilen = *(buf + 1);
@@ -647,9 +610,9 @@
 		}
 
-	/* é·ãã 0 ã§ãªããã°ã¨ã©ã¼ */
+	/* 長さが 0 でなければエラー */
 	if (len != 0)
 		return 0;
 
-	/* æ°ãããªãã·ã§ã³ãè¨­å®ããã*/
+	/* 新しいオプションを設定する。*/
 	if (fsm->state != PPP_FSM_OPENED) {
 		if (loop) {
@@ -663,8 +626,8 @@
 
 /*
- *  lcp_rejci -- REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  lcp_rejci -- REJ を受信したときの処理
  *
- *	æ»ãå¤:	1  REJ ã¯æ­£å¸¸
- *		0  REJ ã¯ç°å¸¸
+ *	戻り値:	1  REJ は正常
+ *		0  REJ は異常
  */
 
@@ -682,5 +645,5 @@
 	new_cfg = lcp_local_neg_cfg;
 
-	/* MRU ãªãã·ã§ã³ãè§£æããã */
+	/* MRU オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)		&&
 	    * buf      == LCP_CIT_MRU					&&
@@ -696,5 +659,5 @@
 		}
 		
-	/* ACCM ãªãã·ã§ã³ãè§£æããã */
+	/* ACCM オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)		&&
 	    * buf      == LCP_CIT_ACCM					&&
@@ -712,5 +675,5 @@
 #ifdef LCP_CFG_MAGIC
 
-	/* Magic Number ãªãã·ã§ã³ãè§£æããã */
+	/* Magic Number オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)		&&
 	    * buf      == LCP_CIT_MAGIC					&&
@@ -730,5 +693,5 @@
 #ifdef LCP_CFG_PAP
 
-	/* èªè¨¼ãã­ãã³ã«ãªãã·ã§ã³ãè§£æããã */
+	/* 認証プロトコルオプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)		&&
 	    * buf      == LCP_CIT_AUTH					&&
@@ -748,5 +711,5 @@
 #ifdef LCP_CFG_PCOMP
 
-	/* ãã­ãã³ã«å§ç¸®ãªãã·ã§ã³ãè§£æããã */
+	/* プロトコル圧縮オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR)				&&
 	    * buf      == LCP_CIT_PCOMP				&&
@@ -762,5 +725,5 @@
 #ifdef LCP_CFG_ACCOMP
 
-	/* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ãè§£æããã */
+	/* アドレス・制御圧縮オプションを解析する。 */
 	if (len >= sizeof(T_PPP_CI_HDR)				&&
 	    * buf      == LCP_CIT_ACCOMP			&&
@@ -774,9 +737,9 @@
 #endif	/* of #ifdef LCP_CFG_ACCOMP */
 
-	/* é·ãã 0 ã§ãªããã°ã¨ã©ã¼ */
+	/* 長さが 0 でなければエラー */
 	if (len != 0)
 		return 0;
 
-	/* æ°ãããªãã·ã§ã³ãè¨­å®ããã*/
+	/* 新しいオプションを設定する。*/
 	if (fsm->state != PPP_FSM_OPENED)
 		lcp_local_neg_cfg = new_cfg;
@@ -786,6 +749,5 @@
 
 /*
- *  lcp_reqci -- ç¸æã®æ§ææ
-å ±ãè§£æããã
+ *  lcp_reqci -- 相手の構成情報を解析する。
  */
 
@@ -803,31 +765,31 @@
 
 	rp = ap = input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
-				/* rp: REJãap: ACK ãã CI ã®ãã¤ã³ã¿		*/
-				/* æå¦ããå ´åã¯ãå¼æ° input ã«ä¸æ¸ãããã	*/
+				/* rp: REJ、ap: ACK する CI のポインタ		*/
+				/* 拒否する場合は、引数 input に上書きする。	*/
 	len   = input->len - (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR));
 	np    = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
-	final = PPP_CONFACK;	/* æçµçã«éä¿¡ããã³ã¼ã */
+	final = PPP_CONFACK;	/* 最終的に送信するコード */
 	while (len > 0) {
 		code = PPP_CONFACK;
-		cp   = ap;	/* cp: ç¾å¨å¦çä¸­ã® CI	*/
+		cp   = ap;	/* cp: 現在処理中の CI	*/
 
 		if (len < sizeof(T_PPP_CI_HDR)) {
 
-			/* æ®ãã CI ãããããç­ã */
+			/* 残りが CI ヘッダより短い */
 			syslog(LOG_WARNING, "[PPP/LCP] bad CI len: %d.", len);
-			cilen = len;	/* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®	*/
-			len   = 0;	/* ã«ã¼ãããæããã		*/
+			cilen = len;	/* データ長が異常の場合の処置	*/
+			len   = 0;	/* ループから抜ける。		*/
 			code  = PPP_CONFREJ;
 			goto endswitch;
 			}
 
-		type  = *ap ++;	/* CI ã®å		*/
-		cilen = *ap ++;	/* CI ã®é·ã		*/
+		type  = *ap ++;	/* CI の型		*/
+		cilen = *ap ++;	/* CI の長さ		*/
 		if (len < cilen) {
 
-			/* æ®ãã CI é·ããç­ã */
+			/* 残りが CI 長より短い */
 			syslog(LOG_WARNING, "[PPP/LCP] bad CI len: %d.", cilen);
-			cilen = len;	/* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®	*/
-			len   = 0;	/* ã«ã¼ãããæããã		*/
+			cilen = len;	/* データ長が異常の場合の処置	*/
+			len   = 0;	/* ループから抜ける。		*/
 			code  = PPP_CONFREJ;
 			goto endswitch;
@@ -835,8 +797,8 @@
 		len -= sizeof(T_PPP_CI_HDR);
 
-		/* CI ã®åã«ããåå²ããã*/
+		/* CI の型により分岐する。*/
 		switch (type) {
 
-		case LCP_CIT_MRU:	/* æå¤§åä¿¡é (Maximum Receive Unit) */
+		case LCP_CIT_MRU:	/* 最大受信量 (Maximum Receive Unit) */
 
 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MRU) == 0
@@ -846,5 +808,5 @@
 #else	/* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MRU) == 0 */
 
-		 	/* CI é·ããããã + 2 ãªã¯ãããã§ãªããã° REJ */
+		 	/* CI 長が、ヘッダ + 2 オクテットでなければ REJ */
 		 	if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint16_t))
 				code = PPP_CONFREJ;
@@ -852,5 +814,5 @@
 				cishort = ntohs(*(uint16_t*)ap);
 
-				/* æå°åä¿¡éããå°ãããã° NAK */
+				/* 最小受信量より小さければ NAK */
 				if (cishort < MIN_PPP_MTU) {
 					*np ++ = LCP_CIT_MRU;
@@ -878,5 +840,5 @@
 #else	/* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_ACCM) == 0 */
 
-		 	/* CI é·ããããã + 4 ãªã¯ãããã§ãªããã° REJ */
+		 	/* CI 長が、ヘッダ + 4 オクテットでなければ REJ */
 		 	if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint32_t))
 				code = PPP_CONFREJ;
@@ -890,5 +852,5 @@
 			break;
 
-		case LCP_CIT_MAGIC:	/* ãã¸ãã¯çªå· */
+		case LCP_CIT_MAGIC:	/* マジック番号 */
 
 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MAGIC) == 0
@@ -898,5 +860,5 @@
 #else	/* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MAGIC) == 0 */
 
-		 	/* CI é·ããããã + 4 ãªã¯ãããã§ãªããã° REJ */
+		 	/* CI 長が、ヘッダ + 4 オクテットでなければ REJ */
 		 	if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint32_t))
 				code = PPP_CONFREJ;
@@ -904,5 +866,5 @@
 				ntoahl(cilong, ap);
 
-				/* çªå·ãèªåã¨åããªã NAK */
+				/* 番号が自分と同じなら NAK */
 				if (cilong == lcp_local_neg_cfg.magic) {
 					cilong = net_rand();
@@ -924,10 +886,9 @@
 
 #ifdef LCP_CFG_PAP
-		/* CHAP ã¯å®è£
-äºå®	*/
-
-		case LCP_CIT_AUTH:	/* èªè¨¼ãã­ãã³ã« */
-
-		 	/* CI é·ããããã + 2 ãªã¯ãããããç­ãã¨ãã¯ã¨ã©ã¼ */
+		/* CHAP は実装予定	*/
+
+		case LCP_CIT_AUTH:	/* 認証プロトコル */
+
+		 	/* CI 長が、ヘッダ + 2 オクテットより短いときはエラー */
 		 	if (cilen < sizeof(T_PPP_CI_HDR) + sizeof(uint16_t))
 				code = PPP_CONFREJ;
@@ -935,5 +896,5 @@
 				cishort = ntohs(*(uint16_t*)ap);
 
-				/* èªè¨¼ãã­ãã³ã«ã«ããåå²ãã	*/
+				/* 認証プロトコルにより分岐する	*/
 				if (cishort == PPP_PAP &&
 				    cilen   == sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) &&
@@ -949,6 +910,5 @@
 #ifdef LCP_CFG_PCOMP
 
-		case LCP_CIT_PCOMP:	/* ãã­ãã³ã«é¨å§ç¸®ã¯å®è£
-äºå® */
+		case LCP_CIT_PCOMP:	/* プロトコル部圧縮は実装予定 */
 
 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_PCOMP) == 0
@@ -958,5 +918,5 @@
 #else	/* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_PCOMP) == 0 */
 
-		 	/* CI é·ãããããé·ã ãã§ãªããã° REJ */
+		 	/* CI 長が、ヘッダ長だけでなければ REJ */
 		 	if (cilen != sizeof(T_PPP_CI_HDR))
 				code = PPP_CONFREJ;
@@ -972,5 +932,5 @@
 #ifdef LCP_CFG_ACCOMP
 
-		case LCP_CIT_ACCOMP:	/* ã¢ãã¬ã¹ã»å¶å¾¡é¨å§ç¸® */
+		case LCP_CIT_ACCOMP:	/* アドレス・制御部圧縮 */
 
 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_ACCOMP) == 0
@@ -980,5 +940,5 @@
 #else	/* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_ACCOMP) == 0 */
 
-		 	/* CI é·ãããããé·ã ãã§ãªããã° REJ */
+		 	/* CI 長が、ヘッダ長だけでなければ REJ */
 		 	if (cilen != sizeof(T_PPP_CI_HDR))
 				code = PPP_CONFREJ;
@@ -999,7 +959,6 @@
 endswitch:
 		if (code == PPP_CONFNAK) {
-			/* CI ã®åã Magic Number ã®å ´åãé¤ãã¦ãNAK ã®åæ°ã	*/
-			/* æå¤§å¤ MAX_PPP_FAILURES  ãè¶
-ãããæå¦ããã	*/
+			/* CI の型が Magic Number の場合を除いて、NAK の回数が	*/
+			/* 最大値 MAX_PPP_FAILURES  を超えたら拒否する。	*/
 			if (fsm->failures >= MAX_PPP_FAILURES && type != LCP_CIT_MAGIC)
 				code = PPP_CONFREJ;
@@ -1008,7 +967,7 @@
 			}
 
-		/* ãã® CI ãæå¦ãã */
+		/* この CI を拒否する */
 		if (code == PPP_CONFREJ) {
-			if (rp < cp)		/* åã«è©°ããã*/
+			if (rp < cp)		/* 前に詰める。*/
 				memcpy(rp, cp, cilen);
 			rp += cilen;
@@ -1020,5 +979,5 @@
 		}
 
-	/* æçµçãªé·ããèª¿æ´ããã*/
+	/* 最終的な長さを調整する。*/
 	switch (final) {
 	case PPP_CONFNAK:
@@ -1037,5 +996,5 @@
 
 /*
- *  lcp_up -- ãªã³ã¯æ¥ç¶ãç¢ºç«ãã (Phase: Establish ã«ç§»è¡ãã)ã
+ *  lcp_up -- リンク接続を確立する (Phase: Establish に移行する)。
  */
 
@@ -1043,10 +1002,8 @@
 lcp_up (T_PPP_FSM *fsm)
 {
-	/* èªæ§ææ
-å ±ã®è¨­å® */
+	/* 自構成情報の設定 */
 	lcp_local_ack_cfg = lcp_local_neg_cfg;
 
-	/* ç¸æã®æ§ææ
-å ±ã®è¨­å® */
+	/* 相手の構成情報の設定 */
 	lcp_remote_ack_cfg = lcp_remote_neg_cfg;
 
@@ -1061,5 +1018,5 @@
 
 /*
- *  lcp_starting -- ä¸ä½å±¤ãéå§ããã
+ *  lcp_starting -- 下位層を開始する。
  */
 
@@ -1071,5 +1028,5 @@
 
 /*
- *  lcp_extcode -- LCP ç¹æã® CP ãåä¿¡ããã¨ãã®å¦ç
+ *  lcp_extcode -- LCP 特有の CP を受信したときの処理
  */
 
@@ -1128,5 +1085,5 @@
 
 /*
- *  lcp_rprotrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  lcp_rprotrej -- Proto-REJ を受信したときの処理
  */
 
@@ -1149,5 +1106,5 @@
 		}
 
-	/* ä¸ä½ãã­ãã³ã«ãåæåãã */
+	/* 上位プロトコルを初期化する */
 	for (ix = 0; (entry = protocols[ix]) != NULL; ix ++)
 		if (entry->proto == proto) {
@@ -1160,5 +1117,5 @@
 
 /*
- *  lcp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  lcp_protrej -- Proto-REJ を受信したときの処理
  */
 
@@ -1170,5 +1127,5 @@
 
 /*
- *  lcp_lowerup -- LCP ä¸ä½å±¤ãèµ·åããã
+ *  lcp_lowerup -- LCP 下位層を起動する。
  */
 
@@ -1180,5 +1137,5 @@
 
 /*
- *  lcp_lowerdown -- LCP ä¸ä½å±¤ãåæ­¢ããã
+ *  lcp_lowerdown -- LCP 下位層を停止する。
  */
 
@@ -1190,5 +1147,5 @@
 
 /*
- *  lcp_open -- LCP ã®ãªã¼ã
+ *  lcp_open -- LCP のオープ
  */
 
@@ -1196,10 +1153,10 @@
 lcp_open (uint8_t open_mode)
 {
-	ppp_open_mode = open_mode;	/* ãªã¼ãã³æã®åä½ã¢ã¼ã	*/
+	ppp_open_mode = open_mode;	/* オープン時の動作モード	*/
 	fsm_open(&lcp_fsm);
 	}
 
 /*
- *  lcp_close -- LCP ã®ã¯ã­ã¼ãº
+ *  lcp_close -- LCP のクローズ
  */
 
@@ -1219,5 +1176,5 @@
 
 /*
- *  lcp_sprotrej -- èªè­ã§ããªããã­ãã³ã«ãéããã¦ããã¨ãã®å¦ç
+ *  lcp_sprotrej -- 認識できないプロトコルが送られてきたときの処理
  */
 
@@ -1227,5 +1184,5 @@
 	T_NET_BUF	*output;
 	/*
-	 *  Protocol-Reject ãéãè¿ãã
+	 *  Protocol-Reject を送り返す。
 	 */
 
@@ -1240,5 +1197,5 @@
 
 /*
- *  lcp_down -- ãªã³ã¯æ¥ç¶ãè§£æ¾ãã (Phase: Dead ã«ç§»è¡ãã)ã
+ *  lcp_down -- リンク接続を解放する (Phase: Dead に移行する)。
  */
 
@@ -1257,5 +1214,5 @@
 
 /*
- *  lcp_finished -- ä¸ä½å±¤ãçµäºããã
+ *  lcp_finished -- 下位層を終了する。
  */
 
@@ -1269,5 +1226,5 @@
 
 /*
- *  recv_echo_rep -- ECHOREP ãåä¿¡ããã¨ãã®å¦ç
+ *  recv_echo_rep -- ECHOREP を受信したときの処理
  */
 
@@ -1280,5 +1237,5 @@
  	hdr = GET_PPP_CP_HDR(input);
 
- 	/* Magic Number ã®é·ãä»¥ä¸ãªãã¨ã©ã¼ */
+ 	/* Magic Number の長さ以下ならエラー */
  	if (hdr->len < sizeof(T_PPP_CP_HDR) + sizeof(uint32_t)) {
 		syslog(LOG_WARNING, "[PPP/LCP] bad ECHOREP len: %d.", hdr->len);
@@ -1288,5 +1245,5 @@
 	ntoahl(magic, input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR));
 
- 	/* åä¿¡ãã Magic Number ãèªåã¨åããªãã«ã¼ããã¦ããã*/
+ 	/* 受信した Magic Number が自分と同じならループしている。*/
 	if ((lcp_local_ack_cfg.options & LCP_CFG_MAGIC) && magic == lcp_local_ack_cfg.magic) {
 		syslog(LOG_WARNING, "[PPP/LCP] ECHOREP looped.");
@@ -1298,5 +1255,5 @@
 
 /*
- *  echo_timeout -- ECHO REQ/REP ã®ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  echo_timeout -- ECHO REQ/REP のタイムアウト処理
  */
 
@@ -1311,5 +1268,5 @@
 
 /*
- *  send_echo_req -- ECHO REQ ãéä¿¡ããã
+ *  send_echo_req -- ECHO REQ を送信する。
  */
 
@@ -1331,5 +1288,5 @@
 	if (fsm->state == PPP_FSM_OPENED) {
 
-		/* ECHOREQ ãéä¿¡ããã*/
+		/* ECHOREQ を送信する。*/
 		syscall(get_net_buf(&input, sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR) + sizeof(uint32_t)));
 		*(uint32_t*)(input->buf +  sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)) = lcp_local_ack_cfg.magic;
@@ -1338,5 +1295,5 @@
 		echo_pending ++;
 
-		/* ã¿ã¤ãã¼ãã¹ã¿ã¼ãããã*/
+		/* タイマーをスタートする。*/
 		timeout((FP)echo_timeout, fsm, LCP_ECHO_INTERVAL);
 		timer_running = true;
@@ -1345,5 +1302,5 @@
 
 /*
- *  echo_lowerup -- ECHO REQ/REP ã®èµ·å
+ *  echo_lowerup -- ECHO REQ/REP の起動
  */
 
@@ -1359,5 +1316,5 @@
 
 /*
- *  echo_lowerdown -- ECHO REQ/REP ã®åæ­¢
+ *  echo_lowerdown -- ECHO REQ/REP の停止
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_lcp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_lcp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_lcp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -93,5 +81,5 @@
 
 /*
- *  LCP ç¹æã® PPP ãªã³ã¯å¶å¾¡ (CP) ã®å¶å¾¡ã³ã¼ã
+ *  LCP 特有の PPP リンク制御 (CP) の制御コード
  */
 
@@ -102,34 +90,25 @@
 
 /*
- *  LCP ã®æ§ææ
-å ± (CI)
+ *  LCP の構成情報 (CI)
  */
 
 /*
- *  CI ã®å
+ *  CI の型
  */
 
-#define LCP_CIT_MRU		UINT_C(1)	/* æå¤§åä¿¡é (Maximum Receive Unit)	*/
+#define LCP_CIT_MRU		UINT_C(1)	/* 最大受信量 (Maximum Receive Unit)	*/
 #define LCP_CIT_ACCM		UINT_C(2)	/* Async Control Character Map		*/
-#define LCP_CIT_AUTH		UINT_C(3)	/* èªè¨¼ãã­ãã³ã«			*/
-#define LCP_CIT_QUALITY		UINT_C(4)	/* åè³ªãã­ãã³ã«ã¯æªå®è£
-			*/
-#define LCP_CIT_MAGIC		UINT_C(5)	/* ãã¸ãã¯çªå·				*/
-#define LCP_CIT_PCOMP		UINT_C(7)	/* ãã­ãã³ã«é¨å§ç¸®ã¯å®è£
-äºå®		*/
-#define LCP_CIT_ACCOMP		UINT_C(8)	/* ã¢ãã¬ã¹ã»å¶å¾¡é¨å§ç¸®ã¯å®è£
-äºå®		*/
-#define LCP_CIT_FCS_ALTER	UINT_C(9)	/* FCS-Alternatives ã¯æªå®è£
-		*/
-#define LCP_CIT_SELF_PAD	UINT_C(10)	/* Self-Describing-Padding ã¯æªå®è£
-	*/
-#define LCP_CIT_CALLBACK	UINT_C(13)	/* Callback ã¯æªå®è£
-			*/
-#define LCP_CIT_CFRAMES		UINT_C(15)	/* Compound-Frames ã¯æªå®è£
-		*/
+#define LCP_CIT_AUTH		UINT_C(3)	/* 認証プロトコル			*/
+#define LCP_CIT_QUALITY		UINT_C(4)	/* 品質プロトコルは未実装			*/
+#define LCP_CIT_MAGIC		UINT_C(5)	/* マジック番号				*/
+#define LCP_CIT_PCOMP		UINT_C(7)	/* プロトコル部圧縮は実装予定		*/
+#define LCP_CIT_ACCOMP		UINT_C(8)	/* アドレス・制御部圧縮は実装予定		*/
+#define LCP_CIT_FCS_ALTER	UINT_C(9)	/* FCS-Alternatives は未実装		*/
+#define LCP_CIT_SELF_PAD	UINT_C(10)	/* Self-Describing-Padding は未実装	*/
+#define LCP_CIT_CALLBACK	UINT_C(13)	/* Callback は未実装			*/
+#define LCP_CIT_CFRAMES		UINT_C(15)	/* Compound-Frames は未実装		*/
 
 /*
- *  LCP ã®æ§ææ
-å ±ãªãã·ã§ã³
+ *  LCP の構成情報オプション
  */
 
@@ -139,25 +118,23 @@
 #ifdef LCP_CFG_MAGIC
 
-	uint32_t	magic;		/* ãã¸ãã¯çªå·		*/
+	uint32_t	magic;		/* マジック番号		*/
 
 #endif	/* of #ifdef LCP_CFG_MAGIC */
 
 	uint16_t	MRU;		/* MRU			*/
-	uint16_t	options;	/* ãªãã·ã§ã³ãã©ã°	*/
+	uint16_t	options;	/* オプションフラグ	*/
 	} __attribute__((packed, aligned(2)))T_LCP_CONFIGS;
 
 /*
- *  å¤æ°
+ *  変数
  */
 
 extern T_PPP_FSM	lcp_fsm;
 extern T_PPP_PROTENT	lcp_protent;
-extern T_LCP_CONFIGS	lcp_local_ack_cfg;	/* ç¸æã«è¨±å¯ãããã®èªæ§ææ
-å ±	*/
-extern T_LCP_CONFIGS	lcp_remote_ack_cfg;	/* ç¸æã«è¨±å¯ããæ§ææ
-å ±		*/
+extern T_LCP_CONFIGS	lcp_local_ack_cfg;	/* 相手に許可されたの自構成情報	*/
+extern T_LCP_CONFIGS	lcp_remote_ack_cfg;	/* 相手に許可した構成情報		*/
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_modem.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_modem.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_modem.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  PPP ã¢ãã å¶å¾¡
+ *  PPP モデム制御
  */
 
@@ -72,14 +60,11 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-uint8_t	modem_state = PPP_MODEM_DOWN;	/* ã¢ãã ã®ç¶æ
-		*/
-
-/*
- *  ã¢ãã å
-¥åæå­å
+ *  全域変数
+ */
+
+uint8_t	modem_state = PPP_MODEM_DOWN;	/* モデムの状態		*/
+
+/*
+ *  モデム入力文字列
  */
 
@@ -94,5 +79,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -111,5 +96,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -120,6 +105,5 @@
 
 /*
- *  modem_getline -- ã¢ãã è¡å
-¥å
+ *  modem_getline -- モデム行入力
  */
 
@@ -130,5 +114,5 @@
 
 	buf = nbuf->buf;
-	size --;			/* '\0' ã®å */
+	size --;			/* '\0' の分 */
 	while (size > 0 && (*buf = HDLC_raw_getoctet()) != '\r') {
 		buf  ++;
@@ -136,5 +120,5 @@
 		}
 	*buf = '\0';
-	HDLC_raw_getoctet();		/* \n ãèª­ã¿é£ã°ãã*/
+	HDLC_raw_getoctet();		/* \n を読み飛ばす。*/
 	nbuf->len = buf - nbuf->buf;
 	return nbuf;
@@ -142,7 +126,7 @@
 
 /*
- *  ã¢ãã å¶å¾¡
+ *  モデム制御
  *
- *	æ»ãå¤: ã¢ãã ããã®ãªã¶ã«ãã³ã¼ã
+ *	戻り値: モデムからのリザルトコード
  */
 
@@ -211,5 +195,5 @@
 
 /*
- *  init_modem -- ã¢ãã ãåæåããã
+ *  init_modem -- モデムを初期化する。
  */
 
@@ -229,8 +213,7 @@
 
 /*
- *  wait_modem -- æ¥ç¶å®äºã¾ã§å¾
-ã¤ã
+ *  wait_modem -- 接続完了まで待つ。
  *
- *	æ»ãå¤: æ¥ç¶ã«å¤±æããã E_OBJ ãè¿ãã
+ *	戻り値: 接続に失敗したら E_OBJ を返す。
  */
 
@@ -245,6 +228,5 @@
 
 	if (modem_state != PPP_MODEM_CONNECT) {
-		/* æ¥ç¶å®äºã¾ã§å¾
-ã¤ã*/
+		/* 接続完了まで待つ。*/
 		wai_sem(SEM_MODEM_READY);
 		if (modem_state != PPP_MODEM_CONNECT)
@@ -256,5 +238,5 @@
 
 /*
- *  dial -- ãã¤ã¤ã«ããããªãã©ã¤åæ°ãã»ããããã
+ *  dial -- ダイヤルする。リトライ回数をセットする。
  */
 
@@ -268,5 +250,5 @@
 
 /*
- *  do_dial -- ãã¤ã¤ã«ãããdial() ã®ä¸è«ãé¢æ°
+ *  do_dial -- ダイヤルする。dial() の下請け関数
  */
 
@@ -281,5 +263,5 @@
 
 /*
- *  modem_putstr -- ã¢ãã æå­ååºå
+ *  modem_putstr -- モデム文字列出力
  */
 
@@ -292,6 +274,5 @@
 
 /*
- *  modem_wait -- ã¢ãã ããæå­åãå¾
-ã¤
+ *  modem_wait -- モデムから文字列を待つ
  */
 
@@ -312,5 +293,5 @@
 
 /*
- *  modem_putline -- ã¢ãã è¡åºå
+ *  modem_putline -- モデム行出力
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_modem.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_modem.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_modem.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,6 +40,5 @@
 
 /*
- *  ã¢ãã ã®ç¶æ
-
+ *  モデムの状態
  */
 
@@ -64,13 +51,11 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
-extern uint8_t modem_state;	/* ã¢ãã ã®ç¶æ
-		*/
+extern uint8_t modem_state;	/* モデムの状態		*/
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -84,5 +69,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_upap.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_upap.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_upap.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -114,5 +102,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -152,24 +140,21 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
 T_PPP_PROTENT pap_protent = {
 	PPP_PAP,
-	upap_init,			/* åæå			*/
-	upap_input,			/* å
-¥å				*/
-	upap_protrej,			/* Proto-REJ åä¿¡å¦ç		*/
-	upap_lowerup,			/* ä¸ä½å±¤ãèµ·åãã		*/
-	upap_lowerdown,			/* ä¸ä½å±¤ãåæ­¢ãã		*/
-	NULL,				/* ãªã¼ãã³ãã			*/
-	NULL,				/* ã¯ã­ã¼ãºãã			*/
-	NULL,				/* ãã¼ã¿å
-¥å			*/
+	upap_init,			/* 初期化			*/
+	upap_input,			/* 入力				*/
+	upap_protrej,			/* Proto-REJ 受信処理		*/
+	upap_lowerup,			/* 下位層を起動する		*/
+	upap_lowerdown,			/* 下位層を停止する		*/
+	NULL,				/* オープンする			*/
+	NULL,				/* クローズする			*/
+	NULL,				/* データ入力			*/
 	};
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -194,5 +179,5 @@
 
 /*
- *  upap_init -- UPAP ã¢ã¸ã¥ã¼ã«ã®åæå
+ *  upap_init -- UPAP モジュールの初期化
  */
 
@@ -215,6 +200,5 @@
 
 /*
- *  upap_input -- UPAP å
-¥å
+ *  upap_input -- UPAP 入力
  */
 
@@ -227,5 +211,5 @@
 	NET_COUNT_PPP_PAP(net_count_ppp_upap_in_packets, 1);
 
- 	/* PPP ãªã³ã¯å¶å¾¡ (CP) ãããããç­ããã°ã¨ã©ã¼ */
+ 	/* PPP リンク制御 (CP) ヘッダより短ければエラー */
  	if (input->len < (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR))) {
  		syslog(LOG_WARNING, "[PPP/PAP] short hdr: %d.", input->len);
@@ -235,6 +219,5 @@
  	hdr = GET_PPP_CP_HDR(input);
 
- 	/* ãããã®é·ãã¨å
-¥åãã¼ã¿ãµã¤ãºãä¸è´ããªããã°ã¨ã©ã¼ */
+ 	/* ヘッダの長さと入力データサイズが一致しなければエラー */
  	if (hdr->len != input->len - sizeof(T_PPP_HDR)) {
  		syslog(LOG_WARNING, "[PPP/PAP] bad len: %d.", hdr->len);
@@ -243,5 +226,5 @@
  
  	/*
- 	 *  å¶å¾¡ã³ã¼ãã«ããé©å½ãªé¢æ°ãå¼åºã
+ 	 *  制御コードにより適当な関数を呼出す
  	 */
 
@@ -272,5 +255,5 @@
 
 /*
- *  upap_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç
+ *  upap_protrej -- Proto-REJ を受信したときの処理
  */
 
@@ -298,5 +281,5 @@
 
 /*
- *  upap_lowerup -- UPAP ä¸ä½å±¤ãèµ·åããã
+ *  upap_lowerup -- UPAP 下位層を起動する。
  */
 
@@ -332,5 +315,5 @@
 
 /*
- *  upap_lowerdown -- UPAP ä¸ä½å±¤ãåæ­¢ããã
+ *  upap_lowerdown -- UPAP 下位層を停止する。
  */
 
@@ -367,5 +350,5 @@
 
 /*
- *  ã¯ã©ã¤ã¢ã³ãã¢ã¼ãã§ PAP èªè¨¼ãéå§ããã
+ *  クライアントモードで PAP 認証を開始する。
  */
 
@@ -388,5 +371,5 @@
 
 /*
- *  upap_rauthack -- èªè¨¼ ACK å¦ç
+ *  upap_rauthack -- 認証 ACK 処理
  */
 
@@ -401,5 +384,5 @@
 
 /*
- *  upap_rauthnak -- èªè¨¼ NAK å¦ç
+ *  upap_rauthnak -- 認証 NAK 処理
  */
 
@@ -412,5 +395,5 @@
 
 /*
- *  upap_sauthreq -- èªè¨¼è¦æ±å¦ç
+ *  upap_sauthreq -- 認証要求処理
  */
 
@@ -426,13 +409,13 @@
 	data = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR);
 
-	/* ã¦ã¼ã¶åãè¨­å®ããã*/
+	/* ユーザ名を設定する。*/
 	*data = sizeof(AUTH_REMOTE_USER) - 1;
 	strcpy(data + 1, AUTH_REMOTE_USER);
 
-	/* ãã¹ã¯ã¼ããè¨­å®ããã*/
+	/* パスワードを設定する。*/
 	*(data + sizeof(AUTH_REMOTE_USER)) = sizeof(AUTH_REMOTE_PASSWD) - 1;
 	strcpy(data + sizeof(AUTH_REMOTE_USER) + 1, AUTH_REMOTE_PASSWD);
 
-	/* éä¿¡ãã */
+	/* 送信する */
 	IF_SET_PROTO(output, PPP_PAP);
 	ppp_cp_output(PAP_AUTHREQ, ++ client_cp_id, output);
@@ -451,5 +434,5 @@
 
 /*
- *  upap_timeout -- ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  upap_timeout -- タイムアウト処理
  */
 
@@ -476,5 +459,5 @@
 
 /*
- *  ãµã¼ãã¢ã¼ãã§ PAP èªè¨¼ãéå§ããã
+ *  サーバモードで PAP 認証を開始する。
  */
 
@@ -497,5 +480,5 @@
 
 /*
- *  upap_rauthreq -- èªè¨¼è¦æ±å¿ç­å¦ç
+ *  upap_rauthreq -- 認証要求応答処理
  */
 
@@ -510,5 +493,5 @@
 
 	/*
-	 *  åè¦æ±ããã£ãã¨ãã®å¦ç
+	 *  再要求があったときの処理
 	 */
 	id = GET_PPP_CP_HDR(input)->id;
@@ -527,5 +510,5 @@
 
 	/*
-	 *  ã¦ã¼ã¶åãç¹å®ããã
+	 *  ユーザ名を特定する。
 	 */
 	ulen  = *data;
@@ -538,5 +521,5 @@
 
 	/*
-	 *  ãã¹ã¯ã¼ããç¹å®ããã
+	 *  パスワードを特定する。
 	 */
 	plen  = *data;
@@ -547,5 +530,5 @@
 
 	/*
-	 *  ã¦ã¼ã¶åã¨ãã¹ã¯ã¼ãããã§ãã¯ããã
+	 *  ユーザ名とパスワードをチェックする。
 	 */
 	if (compare(user,     AUTH_LOCAL_USER,   ulen) &&
@@ -574,5 +557,5 @@
 
 /*
- *  upap_sresp -- å¿ç­ãè¿ãã
+ *  upap_sresp -- 応答を返す。
  */
 
@@ -582,5 +565,5 @@
 	T_NET_BUF *output;
 
-	/* éä¿¡ãã */
+	/* 送信する */
 	syscall(get_net_buf(&output, sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)));
 	IF_SET_PROTO(output, PPP_PAP);
@@ -589,5 +572,5 @@
 
 /*
- *  compare -- ã¦ã¼ã¶åã¨ãã¹ã¯ã¼ãã®æ¯è¼
+ *  compare -- ユーザ名とパスワードの比較
  */
 
@@ -607,5 +590,5 @@
 
 /*
- *  upap_reqtimeout -- è¦æ±ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  upap_reqtimeout -- 要求タイムアウト処理
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_upap.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_upap.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_upap.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -93,38 +81,35 @@
 
 /*
- *  PAP ã®å¶å¾¡ã³ã¼ã
+ *  PAP の制御コード
  */
 
-#define PAP_AUTHREQ		UINT_C(1)	/* èªè¨¼è¦æ±	*/
-#define PAP_AUTHACK		UINT_C(2)	/* èªè¨¼ ACK	*/
-#define PAP_AUTHNAK		UINT_C(3)	/* èªè¨¼ NAK	*/
+#define PAP_AUTHREQ		UINT_C(1)	/* 認証要求	*/
+#define PAP_AUTHACK		UINT_C(2)	/* 認証 ACK	*/
+#define PAP_AUTHNAK		UINT_C(3)	/* 認証 NAK	*/
 
 /*
- *  ã¯ã©ã¤ã¢ã³ãã®ç¶æ
-
+ *  クライアントの状態
  */
 
-#define PAP_CS_INIT		UINT_C(0)	/* æªæ¥ç¶		*/
-#define PAP_CS_CLOSED		UINT_C(1)	/* æ¥ç¶ãæªèªè¨¼		*/
-#define PAP_CS_PENDING		UINT_C(2)	/* æªæ¥ç¶ãèªè¨¼		*/
-#define PAP_CS_AUTHREQ		UINT_C(3)	/* èªè¨¼è¦æ±éä¿¡æ¸ã¿	*/
-#define PAP_CS_OPEN		UINT_C(4)	/* ACK åä¿¡		*/
-#define PAP_CS_BADAUTH		UINT_C(5)	/* NAK åä¿¡		*/
+#define PAP_CS_INIT		UINT_C(0)	/* 未接続		*/
+#define PAP_CS_CLOSED		UINT_C(1)	/* 接続、未認証		*/
+#define PAP_CS_PENDING		UINT_C(2)	/* 未接続、認証		*/
+#define PAP_CS_AUTHREQ		UINT_C(3)	/* 認証要求送信済み	*/
+#define PAP_CS_OPEN		UINT_C(4)	/* ACK 受信		*/
+#define PAP_CS_BADAUTH		UINT_C(5)	/* NAK 受信		*/
 
 /*
- *  ãµã¼ãã®ç¶æ
-
+ *  サーバの状態
  */
 
-#define PAP_SS_INIT		UINT_C(0)	/* æªæ¥ç¶		*/
-#define PAP_SS_CLOSED		UINT_C(1)	/* æ¥ç¶ãæªèªè¨¼		*/
-#define PAP_SS_PENDING		UINT_C(2)	/* æªæ¥ç¶ãèªè¨¼		*/
-#define PAP_SS_LISTEN		UINT_C(3)	/* èªè¨¼è¦æ±åä¿¡å¾
-ã¡	*/
-#define PAP_SS_OPEN		UINT_C(4)	/* ACK éä¿¡		*/
-#define PAP_SS_BADAUTH		UINT_C(5)	/* NAK éä¿¡		*/
+#define PAP_SS_INIT		UINT_C(0)	/* 未接続		*/
+#define PAP_SS_CLOSED		UINT_C(1)	/* 接続、未認証		*/
+#define PAP_SS_PENDING		UINT_C(2)	/* 未接続、認証		*/
+#define PAP_SS_LISTEN		UINT_C(3)	/* 認証要求受信待ち	*/
+#define PAP_SS_OPEN		UINT_C(4)	/* ACK 送信		*/
+#define PAP_SS_BADAUTH		UINT_C(5)	/* NAK 送信		*/
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -132,5 +117,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -85,21 +73,19 @@
 
 /*
- *  PPP ãã­ãã³ã«ã¨ã³ããªæ§é ä½
+ *  PPP プロトコルエントリ構造体
  */
 
 typedef struct t_ppp_protent {
-	uint16_t	proto;			/* ãã­ãã³ã«çªå·	*/
-	void		(*init)		(void);	/* åæåé¢æ°		*/
+	uint16_t	proto;			/* プロトコル番号	*/
+	void		(*init)		(void);	/* 初期化関数		*/
 	void		(*input)	(T_NET_BUF *data);
-						/* å
-¥åé¢æ°		*/
-	void		(*protrej)	(void);	/* Ptoto-REJ åä¿¡å¦ç	*/
-	void		(*lowerup)	(void);	/* ä¸ä½å±¤ãèµ·åããã	*/
-	void		(*lowerdown)	(void);	/* ä¸ä½å±¤ãåæ­¢ããã	*/
-	void		(*open)		(void);	/* ãªã¼ãã³ããã	*/
-	void		(*close)	(void);	/* ã¯ã­ã¼ãºããã	*/
+						/* 入力関数		*/
+	void		(*protrej)	(void);	/* Ptoto-REJ 受信処理	*/
+	void		(*lowerup)	(void);	/* 下位層を起動する。	*/
+	void		(*lowerdown)	(void);	/* 下位層を停止する。	*/
+	void		(*open)		(void);	/* オープンする。	*/
+	void		(*close)	(void);	/* クローズする。	*/
 	void		(*datainput)	(T_NET_BUF *data);
-					/* ãã¼ã¿å
-¥åé¢æ°	*/
+					/* データ入力関数	*/
 	} T_PPP_PROTENT;
 
@@ -107,13 +93,12 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
-extern T_PPP_PROTENT	*protocols[];	/* ãã­ãã³ã«è¡¨			*/
-extern uint8_t		ppp_phase;	/* ãªã³ã¯ã®ç¶æ
-			*/
+extern T_PPP_PROTENT	*protocols[];	/* プロトコル表			*/
+extern uint8_t		ppp_phase;	/* リンクの状態			*/
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -121,5 +106,5 @@
 
 /*
- *  PPP å¦çã¿ã¹ã¯
+ *  PPP 処理タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/route.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/route.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/route.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,5 +72,5 @@
 
 /*
- * TINET 1.1 ã¨ã®äºææ§ç¢ºä¿
+ * TINET 1.1 との互換性確保
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/net/tinet.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/net/tinet.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/net/tinet.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,5 +38,5 @@
 
 /*
- *  TINET ç¬èªé¢æ°
+ *  TINET 独自関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/Makefile.netapp
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/Makefile.netapp	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/Makefile.netapp	(revision 389)
@@ -5,39 +5,27 @@
 #                    Tomakomai National College of Technology, JAPAN
 # 
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
-#   ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
-#   è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
-#   ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
-#   å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-# 
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
-#   å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
-#   æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+#   上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+#   によって公表されている GNU General Public License の Version 2 に記
+#   述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+#   を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+#   利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次の条件を満たすこと．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+# 
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+#   含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+#   接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 #  
 #   @(#) $Id$
@@ -45,9 +33,9 @@
 
 #
-#  ãµã³ãã«ã®ãããã¯ã¼ã¯å¿ç¨ãã­ã°ã©ã ã«é¢ããå®ç¾©
-#
-
-#
-#  ã«ã¼ãã«ã®è­å¥
+#  サンプルのネットワーク応用プログラムに関する定義
+#
+
+#
+#  カーネルの識別
 #
 ifdef SRCLANG
@@ -59,5 +47,5 @@
 endif
 
-#  å¿ç¨ãã­ã°ã©ã 
+#  応用プログラム
 
 TINET_ROOT = $(SRCDIR)/tinet
@@ -79,5 +67,5 @@
 endif
 
-#  ãã©ã³ã¹ãã¼ãå±¤ã®é¸æ
+#  トランスポート層の選択
 
 #SUPPORT_TCP = false
@@ -85,6 +73,5 @@
 
 # 
-#  å
-±éã¯ã©ã¤ã¢ã³ãã»ãµã¼ããã­ã°ã©ã ã®è¨­å®
+#  共通クライアント・サーバプログラムの設定
 # 
 
@@ -109,5 +96,5 @@
 endif
 
-ifeq ($(TCP_ECHO_SRV),tcp_echo_srv1)		# éåä¿¡ã¿ã¹ã¯åä¸å
+ifeq ($(TCP_ECHO_SRV),tcp_echo_srv1)		# 送受信タスク同一型
 
 	SUPPORT_TCP = true
@@ -127,5 +114,5 @@
 endif
 
-ifeq ($(TCP_ECHO_SRV),tcp_echo_srv2)		# éåä¿¡ã¿ã¹ã¯åé¢å
+ifeq ($(TCP_ECHO_SRV),tcp_echo_srv2)		# 送受信タスク分離型
 	SUPPORT_TCP = true
 	USE_NETAPP_SUBR = true
@@ -372,5 +359,5 @@
 
 #
-#  ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ã«é¢ããå®ç¾©ã¸ã®è¿½å 
+#  アプリケーションプログラムに関する定義への追加
 #
 
@@ -408,5 +395,5 @@
 
 #
-#  TINET ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®å®ç¾©ã¸ã®è¿½å 
+#  TINET コンフィギュレーションファイルの定義への追加
 #
 TINET_KERNEL_CFG := $(TINET_KERNEL_CFG) $(NETAPP_KERNEL_CFG)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  ãããã°ã³ã³ã½ã¼ã«
+ *  デバッグコンソール
  */
 
@@ -132,28 +120,15 @@
 
 /*
- *  dbg_cons_task_status -- ã¿ã¹ã¯ã®ç¶æ
-ã®åºå
+ *  dbg_cons_task_status -- タスクの状態の出力
  */
 
 static const char task_stat_str[][sizeof("SUSPENDED")] = {
-	"DORMANT",		/* ä¼æ­¢ç¶æ
-		*/
-	"RUNNABLE",		/* å®è¡ã§ããç¶æ
-	*/
-	"WAINTING",		/* å¾
-ã¡ç¶æ
-		*/
-	"SUSPENDED",		/* å¼·å¶å¾
-ã¡ç¶æ
-		*/
-	"SLEEP",		/* èµ·åºå¾
-ã¡ç¶æ
-		*/
-	"WOBJ",			/* åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾
-ã¡ç¶æ
-	*/
-	"WOBJCB",		/* å
-±éé¨åã®å¾
-ã¡ã­ã¥ã¼ã«ã¤ãªãã£ã¦ããã	*/
+	"DORMANT",		/* 休止状態		*/
+	"RUNNABLE",		/* 実行できる状態	*/
+	"WAINTING",		/* 待ち状態		*/
+	"SUSPENDED",		/* 強制待ち状態		*/
+	"SLEEP",		/* 起床待ち状態		*/
+	"WOBJ",			/* 同期・通信オブジェクトに対する待ち状態	*/
+	"WOBJCB",		/* 共通部分の待ちキューにつながっている。	*/
 	};
 
@@ -190,26 +165,19 @@
 
 /*
- *  tcp_status -- TCP ã®ç¶æ
-ã®åºå
+ *  tcp_status -- TCP の状態の出力
  */
 
 static const char tcp_fsm_str[][sizeof("ESTABLISHED")] = {
-	"CLOSED",		/* ã¯ã­ã¼ãº			*/
-	"LISTEN",		/* ååãªã¼ãã³			*/
-	"SYN_SENT",		/* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿	*/
-	"SYN_RECVD",		/* ååãªã¼ãã³ãSYN åä¿¡æ¸ã¿	*/
-	"ESTABLISHED",		/* ã³ãã¯ã·ã§ã³éè¨­å®äº		*/
-	"CLOSE_WAIT",		/* ç¸æãã FIN åä¿¡ãAPP ã®çµäºå¾
-ã¡	*/
-	"FIN_WAIT_1",		/* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾
-ã¡	*/
-	"CLOSING",		/* åæã¯ã­ã¼ãºãFIN äº¤ææ¸ã¿ãACK å¾
-ã¡	*/
-	"LAST_ACK",		/* APP ãçµäºãACK å¾
-ã¡			*/
-	"FIN_WAIT_2",		/* ç¸æããã® FIN å¾
-ã¡			*/
-	"TIME_WAIT",		/* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾
-ã¡	*/
+	"CLOSED",		/* クローズ			*/
+	"LISTEN",		/* 受動オープン			*/
+	"SYN_SENT",		/* 能動オープン、SYN 送信済み	*/
+	"SYN_RECVD",		/* 受動オープン、SYN 受信済み	*/
+	"ESTABLISHED",		/* コネクション開設完了		*/
+	"CLOSE_WAIT",		/* 相手から FIN 受信、APP の終了待ち	*/
+	"FIN_WAIT_1",		/* APP が終了、FIN 送信済み、ACK 待ち	*/
+	"CLOSING",		/* 同時クローズ、FIN 交換済み、ACK 待ち	*/
+	"LAST_ACK",		/* APP が終了、ACK 待ち			*/
+	"FIN_WAIT_2",		/* 相手からの FIN 待ち			*/
+	"TIME_WAIT",		/* 相手からの FIN 受信済み、時間待ち	*/
 	};
 
@@ -578,6 +546,5 @@
 
 /*
- *  udp6_status -- UDP ã®ç¶æ
-ã®åºå
+ *  udp6_status -- UDP の状態の出力
  */
 
@@ -616,6 +583,5 @@
 
 /*
- *  udp4_status -- UDP ã®ç¶æ
-ã®åºå
+ *  udp4_status -- UDP の状態の出力
  */
 
@@ -675,18 +641,15 @@
 
 /*
- * ifa6_status -- è¿é£ã­ã£ãã·ã¥ç¶æ
-ã®åºå
+ * ifa6_status -- 近隣キャッシュ状態の出力
  */
 
 static const char nd_state_str[][sizeof("INCOMPLETE")] = {
-	"FREE",			/* æªä½¿ç¨		*/
-	"NO STATE",		/* ç¶æ
-æªå®ç¾©		*/
-	"INCOMPLETE",		/* æªè§£æ±º		*/
-	"REACHABLE",		/* å°éå¯è½		*/
-	"STALE",		/* å°éå¯è½æ§ã¯æªç¢ºèª	*/
-	"DELAY",		/* å°éå¯è½æ§ã®ç¢ºèªå¾
-æ©	*/
-	"PROBE",		/* å°éå¯è½æ§ãç¢ºèªä¸­	*/
+	"FREE",			/* 未使用		*/
+	"NO STATE",		/* 状態未定義		*/
+	"INCOMPLETE",		/* 未解決		*/
+	"REACHABLE",		/* 到達可能		*/
+	"STALE",		/* 到達可能性は未確認	*/
+	"DELAY",		/* 到達可能性の確認待機	*/
+	"PROBE",		/* 到達可能性を確認中	*/
 	};
 
@@ -703,5 +666,5 @@
 	            "IX Expire State      MAC Address       IP Address\n");
 
-	/* expire ã®åä½ã¯ [us]ã*/
+	/* expire の単位は [us]。*/
 	get_tim(&now);
 	cache = nd6_get_cache();
@@ -728,5 +691,5 @@
 
 /*
- *  ifa4_status -- ARP ã­ã£ãã·ã¥åºå
+ *  ifa4_status -- ARP キャッシュ出力
  */
 
@@ -742,5 +705,5 @@
 	            "IX Expire MAC Address       IP Address\n");
 
-	/* expire ã®åä½ã¯ [us]ã*/
+	/* expire の単位は [us]。*/
 	cache = arp_get_cache();
 	for (ix = 0; ix < NUM_ARP_ENTRY; ix ++) {
@@ -762,6 +725,5 @@
 
 /*
- *  net_count_struct -- ãããã¯ã¼ã¯çµ±è¨æ
-å ±
+ *  net_count_struct -- ネットワーク統計情報
  */
 
@@ -770,15 +732,14 @@
 {
 	cons_printf(portid, "\n%s\n", name);
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",	item->in_octets);
-	cons_printf(portid, "\téä¿¡ãªã¯ãããæ°\t%lu\n",	item->out_octets);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",		item->in_packets);
-	cons_printf(portid, "\téä¿¡ãã±ããæ°\t%lu\n",		item->out_packets);
-	cons_printf(portid, "\tåä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",	item->in_err_packets);
-	cons_printf(portid, "\téä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",	item->out_err_packets);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",	item->in_octets);
+	cons_printf(portid, "\t送信オクテット数\t%lu\n",	item->out_octets);
+	cons_printf(portid, "\t受信バケット数\t%lu\n",		item->in_packets);
+	cons_printf(portid, "\t送信バケット数\t%lu\n",		item->out_packets);
+	cons_printf(portid, "\t受信エラーバケット数\t%lu\n",	item->in_err_packets);
+	cons_printf(portid, "\t送信エラーバケット数\t%lu\n",	item->out_err_packets);
 	}
 
 /*
- *  net_count -- ãããã¯ã¼ã¯çµ±è¨æ
-å ±
+ *  net_count -- ネットワーク統計情報
  */
 
@@ -792,8 +753,7 @@
 	WAI_NET_CONS_PRINTF();
 	get_tim(&now);
-	cons_printf(portid, "ãããã¯ã¼ã¯çµ±è¨æ
-å ±\tçµéæé[us]\t%lu\t", now);
+	cons_printf(portid, "ネットワーク統計情報\t経過時間[us]\t%lu\t", now);
 	if (now > (1000 * 3600 * 24))
-		cons_printf(portid, "%3luæ¥ %2luæé %2luå %2luç§\n",
+		cons_printf(portid, "%3lu日 %2lu時間 %2lu分 %2lu秒\n",
 		             now / (1000 * 3600 * 24),
 		            (now / (1000 * 3600)) % 24,
@@ -801,5 +761,5 @@
 		            (now /  1000        ) % 60);
 	else
-		cons_printf(portid, "%2luæé %2luå %2luç§\n",
+		cons_printf(portid, "%2lu時間 %2lu分 %2lu秒\n",
 		            (now / (1000 * 3600)) % 24,
 		            (now / (1000 * 60  )) % 60,
@@ -810,23 +770,23 @@
 	net_count_struct(portid, "HDLC", &net_count_hdlc);
 	cons_printf(portid, "\nPPP\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",	net_count_ppp.in_octets);
-	cons_printf(portid, "\téä¿¡ãªã¯ãããæ°\t%lu\n",	net_count_ppp.out_octets);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",		net_count_ppp.in_packets);
-	cons_printf(portid, "\téä¿¡ãã±ããæ°\t%lu\n",		net_count_ppp.out_packets);
-	cons_printf(portid, "\tåä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",	net_count_ppp.in_err_packets);
-	cons_printf(portid, "\téä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",	net_count_ppp.out_err_packets);
-	cons_printf(portid, "\tnet_buf å²ãå½ã¦å¤±ææ°\t%lu\n",	net_count_ppp_no_bufs);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",	net_count_ppp.in_octets);
+	cons_printf(portid, "\t送信オクテット数\t%lu\n",	net_count_ppp.out_octets);
+	cons_printf(portid, "\t受信バケット数\t%lu\n",		net_count_ppp.in_packets);
+	cons_printf(portid, "\t送信バケット数\t%lu\n",		net_count_ppp.out_packets);
+	cons_printf(portid, "\t受信エラーバケット数\t%lu\n",	net_count_ppp.in_err_packets);
+	cons_printf(portid, "\t送信エラーバケット数\t%lu\n",	net_count_ppp.out_err_packets);
+	cons_printf(portid, "\tnet_buf 割り当て失敗数\t%lu\n",	net_count_ppp_no_bufs);
 
 	cons_printf(portid, "\nLCP\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",	net_count_ppp_lcp_in_octets);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",		net_count_ppp_lcp_in_packets);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",	net_count_ppp_lcp_in_octets);
+	cons_printf(portid, "\t受信バケット数\t%lu\n",		net_count_ppp_lcp_in_packets);
 
 	cons_printf(portid, "\nIPCP\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",	net_count_ppp_ipcp_in_octets);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",		net_count_ppp_ipcp_in_packets);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",	net_count_ppp_ipcp_in_octets);
+	cons_printf(portid, "\t受信バケット数\t%lu\n",		net_count_ppp_ipcp_in_packets);
 
 	cons_printf(portid, "\nPAP\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",	net_count_ppp_upap_in_octets);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",		net_count_ppp_upap_in_packets);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",	net_count_ppp_upap_in_octets);
+	cons_printf(portid, "\t受信バケット数\t%lu\n",		net_count_ppp_upap_in_packets);
 
 #endif	/* of #ifdef SUPPORT_PPP */
@@ -834,19 +794,19 @@
 #ifdef SUPPORT_ETHER
 
-	net_count_struct(portid, "ã¤ã¼ãµããã", &net_count_ether);
-
-	cons_printf(portid, "\nã¤ã¼ãµãããã»ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_IN_OCTETS]);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_IN_PACKETS]);
-	cons_printf(portid, "\tåä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_IN_ERR_PACKETS]);
-	cons_printf(portid, "\tnet_buf å²ãå½ã¦å¤±ææ°\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_NO_BUFS]);
-	cons_printf(portid, "\tåä¿¡ã»ããã©è³æºè¿å´ä¸éãªã¼ãã¼æ°\t%lu\n",	net_count_ether_nic[NC_ETHER_NIC_RXB_QOVRS]);
-	cons_printf(portid, "\téä¿¡ãªã¯ãããæ°\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_OUT_OCTETS]);
-	cons_printf(portid, "\téä¿¡ãã±ããæ°\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_OUT_PACKETS]);
-	cons_printf(portid, "\téä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_OUT_ERR_PACKETS]);
-	cons_printf(portid, "\tã³ãªã¸ã§ã³æ°\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_COLS]);
-	cons_printf(portid, "\téä¿¡ã»ããã©è³æºè¿å´ä¸éãªã¼ãã¼æ°\t%lu\n",	net_count_ether_nic[NC_ETHER_NIC_TXB_QOVRS]);
-	cons_printf(portid, "\téä¿¡ã¿ã¤ã ã¢ã¦ãæ°	\t%lu\n",		net_count_ether_nic[NC_ETHER_NIC_TIMEOUTS]);
-	cons_printf(portid, "\tãªã»ããæ°\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_RESETS]);
+	net_count_struct(portid, "イーサネット", &net_count_ether);
+
+	cons_printf(portid, "\nイーサネット・ネットワークインタフェース\n");
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_IN_OCTETS]);
+	cons_printf(portid, "\t受信バケット数\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_IN_PACKETS]);
+	cons_printf(portid, "\t受信エラーバケット数\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_IN_ERR_PACKETS]);
+	cons_printf(portid, "\tnet_buf 割り当て失敗数\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_NO_BUFS]);
+	cons_printf(portid, "\t受信セマフォ資源返却上限オーバー数\t%lu\n",	net_count_ether_nic[NC_ETHER_NIC_RXB_QOVRS]);
+	cons_printf(portid, "\t送信オクテット数\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_OUT_OCTETS]);
+	cons_printf(portid, "\t送信バケット数\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_OUT_PACKETS]);
+	cons_printf(portid, "\t送信エラーバケット数\t%lu\n",			net_count_ether_nic[NC_ETHER_NIC_OUT_ERR_PACKETS]);
+	cons_printf(portid, "\tコリジョン数\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_COLS]);
+	cons_printf(portid, "\t送信セマフォ資源返却上限オーバー数\t%lu\n",	net_count_ether_nic[NC_ETHER_NIC_TXB_QOVRS]);
+	cons_printf(portid, "\t送信タイムアウト数	\t%lu\n",		net_count_ether_nic[NC_ETHER_NIC_TIMEOUTS]);
+	cons_printf(portid, "\tリセット数\t%lu\n",				net_count_ether_nic[NC_ETHER_NIC_RESETS]);
 
 #endif	/* of #ifdef SUPPORT_ETHER */
@@ -855,40 +815,40 @@
 
 	cons_printf(portid, "\nIPv6\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_ip6[NC_IP6_IN_OCTETS]);
-	cons_printf(portid, "\tåä¿¡ãã¼ã¿ã°ã©ã æ°\t%lu\n",		net_count_ip6[NC_IP6_IN_PACKETS]);
-	cons_printf(portid, "\tåä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°\t%lu\n",	net_count_ip6[NC_IP6_IN_ERR_PACKETS]);
-	cons_printf(portid, "\té·ãã¨ã©ã¼æ°\t%lu\n",			net_count_ip6[NC_IP6_IN_ERR_SHORT]);
-	cons_printf(portid, "\tãã¼ã¸ã§ã³ã¨ã©ã¼æ°\t%lu\n",		net_count_ip6[NC_IP6_IN_ERR_VER]);
-	cons_printf(portid, "\tã¢ãã¬ã¹ã¨ã©ã¼æ°\t%lu\n",		net_count_ip6[NC_IP6_IN_ERR_ADDR]);
-	cons_printf(portid, "\tãã­ãã³ã«ã¨ã©ã¼æ°\t%lu\n",		net_count_ip6[NC_IP6_IN_ERR_PROTO]);
-	cons_printf(portid, "\tåå²åä¿¡æ°\t%lu\n",			net_count_ip6[NC_IP6_FRAG_IN]);
-	cons_printf(portid, "\tåå²åä¿¡ãã©ã°ã¡ã³ãæ°\t%lu\n",		net_count_ip6[NC_IP6_FRAG_IN_FRAGS]);
-	cons_printf(portid, "\tåå²åä¿¡åæ§ææåæ°\t%lu\n",		net_count_ip6[NC_IP6_FRAG_IN_OK]);
-	cons_printf(portid, "\tåå²åä¿¡ç ´æ£æ°\t%lu\n",			net_count_ip6[NC_IP6_FRAG_IN_DROP]);
-	cons_printf(portid, "\tåå²åä¿¡ãããã¡ãå½ã¦å¤±ææ°\t%lu\n",	net_count_ip6[NC_IP6_FRAG_IN_NO_BUF]);
-	cons_printf(portid, "\tåå²åä¿¡ã¿ã¤ã ã¢ã¦ãæ°\t%lu\n",		net_count_ip6[NC_IP6_FRAG_IN_TMOUT]);
-	cons_printf(portid, "\téä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_ip6[NC_IP6_OUT_OCTETS]);
-	cons_printf(portid, "\téä¿¡ãã¼ã¿ã°ã©ã æ°\t%lu\n",		net_count_ip6[NC_IP6_OUT_PACKETS]);
-	cons_printf(portid, "\téä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°\t%lu\n",	net_count_ip6[NC_IP6_OUT_ERR_PACKETS]);
-	cons_printf(portid, "\tåå²éä¿¡æ°\t%lu\n",			net_count_ip6[NC_IP6_FRAG_OUT]);
-	cons_printf(portid, "\tåå²éä¿¡ãã©ã°ã¡ã³ãæ°\t%lu\n",		net_count_ip6[NC_IP6_FRAG_OUT_FRAGS]);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",		net_count_ip6[NC_IP6_IN_OCTETS]);
+	cons_printf(portid, "\t受信データグラム数\t%lu\n",		net_count_ip6[NC_IP6_IN_PACKETS]);
+	cons_printf(portid, "\t受信エラーデータグラム数\t%lu\n",	net_count_ip6[NC_IP6_IN_ERR_PACKETS]);
+	cons_printf(portid, "\t長さエラー数\t%lu\n",			net_count_ip6[NC_IP6_IN_ERR_SHORT]);
+	cons_printf(portid, "\tバージョンエラー数\t%lu\n",		net_count_ip6[NC_IP6_IN_ERR_VER]);
+	cons_printf(portid, "\tアドレスエラー数\t%lu\n",		net_count_ip6[NC_IP6_IN_ERR_ADDR]);
+	cons_printf(portid, "\tプロトコルエラー数\t%lu\n",		net_count_ip6[NC_IP6_IN_ERR_PROTO]);
+	cons_printf(portid, "\t分割受信数\t%lu\n",			net_count_ip6[NC_IP6_FRAG_IN]);
+	cons_printf(portid, "\t分割受信フラグメント数\t%lu\n",		net_count_ip6[NC_IP6_FRAG_IN_FRAGS]);
+	cons_printf(portid, "\t分割受信再構成成功数\t%lu\n",		net_count_ip6[NC_IP6_FRAG_IN_OK]);
+	cons_printf(portid, "\t分割受信破棄数\t%lu\n",			net_count_ip6[NC_IP6_FRAG_IN_DROP]);
+	cons_printf(portid, "\t分割受信バッファり当て失敗数\t%lu\n",	net_count_ip6[NC_IP6_FRAG_IN_NO_BUF]);
+	cons_printf(portid, "\t分割受信タイムアウト数\t%lu\n",		net_count_ip6[NC_IP6_FRAG_IN_TMOUT]);
+	cons_printf(portid, "\t送信オクテット数\t%lu\n",		net_count_ip6[NC_IP6_OUT_OCTETS]);
+	cons_printf(portid, "\t送信データグラム数\t%lu\n",		net_count_ip6[NC_IP6_OUT_PACKETS]);
+	cons_printf(portid, "\t送信エラーデータグラム数\t%lu\n",	net_count_ip6[NC_IP6_OUT_ERR_PACKETS]);
+	cons_printf(portid, "\t分割送信数\t%lu\n",			net_count_ip6[NC_IP6_FRAG_OUT]);
+	cons_printf(portid, "\t分割送信フラグメント数\t%lu\n",		net_count_ip6[NC_IP6_FRAG_OUT_FRAGS]);
 
 	cons_printf(portid, "\nICMPv6\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_icmp6[NC_ICMP6_IN_OCTETS]);
-	cons_printf(portid, "\tåä¿¡ãã±ããæ°\t%lu\n",			net_count_icmp6[NC_ICMP6_IN_PACKETS]);
-	cons_printf(portid, "\tåä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",		net_count_icmp6[NC_ICMP6_IN_ERR_PACKETS]);
-	cons_printf(portid, "\tåä¿¡ããã¯ãµã ã¨ã©ã¼æ°\t%lu\n",		net_count_icmp6[NC_ICMP6_IN_ERR_CKSUM]);
-	cons_printf(portid, "\téä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_icmp6[NC_ICMP6_OUT_OCTETS]);
-	cons_printf(portid, "\téä¿¡ãã±ããæ°\t%lu\n",			net_count_icmp6[NC_ICMP6_OUT_PACKETS]);
-	cons_printf(portid, "\téä¿¡ã¨ã©ã¼ãã±ããæ°\t%lu\n",		net_count_icmp6[NC_ICMP6_OUT_ERR_PACKETS]);
-
-	cons_printf(portid, "\nè¿é£æ¢ç´¢\n");
-	cons_printf(portid, "\tã«ã¼ã¿éç¥åä¿¡æ°\t%lu\n",		net_count_nd6[NC_ND6_RA_IN_PACKETS]);
-	cons_printf(portid, "\tã«ã¼ã¿è¦è«éä¿¡æ°\t%lu\n",		net_count_nd6[NC_ND6_RS_OUT_PACKETS]);
-	cons_printf(portid, "\tè¿é£éç¥åä¿¡æ°\t%lu\n",			net_count_nd6[NC_ND6_NA_IN_PACKETS]);
-	cons_printf(portid, "\tè¿é£éç¥éä¿¡æ°\t%lu\n",			net_count_nd6[NC_ND6_NA_OUT_PACKETS]);
-	cons_printf(portid, "\tè¿é£è¦è«åä¿¡æ°\t%lu\n",			net_count_nd6[NC_ND6_NS_IN_PACKETS]);
-	cons_printf(portid, "\tè¿é£è¦è«éä¿¡æ°\t%lu\n",			net_count_nd6[NC_ND6_NS_OUT_PACKETS]);
-	cons_printf(portid, "\téè¤ã¢ãã¬ã¹æ¤åºéä¿¡æ°\t%lu\n",		net_count_nd6[NC_ND6_DAD_OUT_PACKETS]);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",		net_count_icmp6[NC_ICMP6_IN_OCTETS]);
+	cons_printf(portid, "\t受信パケット数\t%lu\n",			net_count_icmp6[NC_ICMP6_IN_PACKETS]);
+	cons_printf(portid, "\t受信エラーパケット数\t%lu\n",		net_count_icmp6[NC_ICMP6_IN_ERR_PACKETS]);
+	cons_printf(portid, "\t受信チックサムエラー数\t%lu\n",		net_count_icmp6[NC_ICMP6_IN_ERR_CKSUM]);
+	cons_printf(portid, "\t送信オクテット数\t%lu\n",		net_count_icmp6[NC_ICMP6_OUT_OCTETS]);
+	cons_printf(portid, "\t送信パケット数\t%lu\n",			net_count_icmp6[NC_ICMP6_OUT_PACKETS]);
+	cons_printf(portid, "\t送信エラーパケット数\t%lu\n",		net_count_icmp6[NC_ICMP6_OUT_ERR_PACKETS]);
+
+	cons_printf(portid, "\n近隣探索\n");
+	cons_printf(portid, "\tルータ通知受信数\t%lu\n",		net_count_nd6[NC_ND6_RA_IN_PACKETS]);
+	cons_printf(portid, "\tルータ要請送信数\t%lu\n",		net_count_nd6[NC_ND6_RS_OUT_PACKETS]);
+	cons_printf(portid, "\t近隣通知受信数\t%lu\n",			net_count_nd6[NC_ND6_NA_IN_PACKETS]);
+	cons_printf(portid, "\t近隣通知送信数\t%lu\n",			net_count_nd6[NC_ND6_NA_OUT_PACKETS]);
+	cons_printf(portid, "\t近隣要請受信数\t%lu\n",			net_count_nd6[NC_ND6_NS_IN_PACKETS]);
+	cons_printf(portid, "\t近隣要請送信数\t%lu\n",			net_count_nd6[NC_ND6_NS_OUT_PACKETS]);
+	cons_printf(portid, "\t重複アドレス検出送信数\t%lu\n",		net_count_nd6[NC_ND6_DAD_OUT_PACKETS]);
 
 #else	/* of #if defined(SUPPORT_INET6) */
@@ -903,25 +863,24 @@
 
 	cons_printf(portid, "\nIPv4\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_ip4[NC_IP4_IN_OCTETS]);
-	cons_printf(portid, "\tåä¿¡ãã¼ã¿ã°ã©ã æ°\t%lu\n",		net_count_ip4[NC_IP4_IN_PACKETS]);
-	cons_printf(portid, "\tåä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°\t%lu\n",	net_count_ip4[NC_IP4_IN_ERR_PACKETS]);
-	cons_printf(portid, "\tãã§ãã¯ãµã ã¨ã©ã¼æ°\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_CKSUM]);
-	cons_printf(portid, "\té·ãã¨ã©ã¼æ°\t%lu\n",			net_count_ip4[NC_IP4_IN_ERR_SHORT]);
-	cons_printf(portid, "\tãã¼ã¸ã§ã³ã¨ã©ã¼æ°\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_VER]);
-	cons_printf(portid, "\tã¢ãã¬ã¹ã¨ã©ã¼æ°\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_ADDR]);
-	cons_printf(portid, "\tãã­ãã³ã«ã¨ã©ã¼æ°\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_PROTO]);
-	cons_printf(portid, "\tãªãã·ã§ã³å
-¥åæ°\t%lu\n",		net_count_ip4[NC_IP4_OPTS]);
-	cons_printf(portid, "\tåå²åä¿¡æ°\t%lu\n",			net_count_ip4[NC_IP4_FRAG_IN]);
-	cons_printf(portid, "\tåå²åä¿¡ãã©ã°ã¡ã³ãæ°\t%lu\n",		net_count_ip4[NC_IP4_FRAG_IN_FRAGS]);
-	cons_printf(portid, "\tåå²åä¿¡åæ§ææåæ°\t%lu\n",		net_count_ip4[NC_IP4_FRAG_IN_OK]);
-	cons_printf(portid, "\tåå²åä¿¡ç ´æ£æ°\t%lu\n",			net_count_ip4[NC_IP4_FRAG_IN_DROP]);
-	cons_printf(portid, "\tåå²åä¿¡ãããã¡ãå½ã¦å¤±ææ°\t%lu\n",	net_count_ip4[NC_IP4_FRAG_IN_NO_BUF]);
-	cons_printf(portid, "\tåå²åä¿¡ã¿ã¤ã ã¢ã¦ãæ°\t%lu\n",		net_count_ip4[NC_IP4_FRAG_IN_TMOUT]);
-	cons_printf(portid, "\téä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_ip4[NC_IP4_OUT_OCTETS]);
-	cons_printf(portid, "\téä¿¡ãã¼ã¿ã°ã©ã æ°\t%lu\n",		net_count_ip4[NC_IP4_OUT_PACKETS]);
-	cons_printf(portid, "\téä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°\t%lu\n",	net_count_ip4[NC_IP4_OUT_ERR_PACKETS]);
-	cons_printf(portid, "\tåå²éä¿¡æ°\t%lu\n",			net_count_ip4[NC_IP4_FRAG_OUT]);
-	cons_printf(portid, "\tåå²éä¿¡ãã©ã°ã¡ã³ãæ°\t%lu\n",		net_count_ip4[NC_IP4_FRAG_OUT_FRAGS]);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",		net_count_ip4[NC_IP4_IN_OCTETS]);
+	cons_printf(portid, "\t受信データグラム数\t%lu\n",		net_count_ip4[NC_IP4_IN_PACKETS]);
+	cons_printf(portid, "\t受信エラーデータグラム数\t%lu\n",	net_count_ip4[NC_IP4_IN_ERR_PACKETS]);
+	cons_printf(portid, "\tチェックサムエラー数\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_CKSUM]);
+	cons_printf(portid, "\t長さエラー数\t%lu\n",			net_count_ip4[NC_IP4_IN_ERR_SHORT]);
+	cons_printf(portid, "\tバージョンエラー数\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_VER]);
+	cons_printf(portid, "\tアドレスエラー数\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_ADDR]);
+	cons_printf(portid, "\tプロトコルエラー数\t%lu\n",		net_count_ip4[NC_IP4_IN_ERR_PROTO]);
+	cons_printf(portid, "\tオプション入力数\t%lu\n",		net_count_ip4[NC_IP4_OPTS]);
+	cons_printf(portid, "\t分割受信数\t%lu\n",			net_count_ip4[NC_IP4_FRAG_IN]);
+	cons_printf(portid, "\t分割受信フラグメント数\t%lu\n",		net_count_ip4[NC_IP4_FRAG_IN_FRAGS]);
+	cons_printf(portid, "\t分割受信再構成成功数\t%lu\n",		net_count_ip4[NC_IP4_FRAG_IN_OK]);
+	cons_printf(portid, "\t分割受信破棄数\t%lu\n",			net_count_ip4[NC_IP4_FRAG_IN_DROP]);
+	cons_printf(portid, "\t分割受信バッファり当て失敗数\t%lu\n",	net_count_ip4[NC_IP4_FRAG_IN_NO_BUF]);
+	cons_printf(portid, "\t分割受信タイムアウト数\t%lu\n",		net_count_ip4[NC_IP4_FRAG_IN_TMOUT]);
+	cons_printf(portid, "\t送信オクテット数\t%lu\n",		net_count_ip4[NC_IP4_OUT_OCTETS]);
+	cons_printf(portid, "\t送信データグラム数\t%lu\n",		net_count_ip4[NC_IP4_OUT_PACKETS]);
+	cons_printf(portid, "\t送信エラーデータグラム数\t%lu\n",	net_count_ip4[NC_IP4_OUT_ERR_PACKETS]);
+	cons_printf(portid, "\t分割送信数\t%lu\n",			net_count_ip4[NC_IP4_FRAG_OUT]);
+	cons_printf(portid, "\t分割送信フラグメント数\t%lu\n",		net_count_ip4[NC_IP4_FRAG_OUT_FRAGS]);
 
 	net_count_struct(portid, "ICMP", &net_count_icmp4);
@@ -934,28 +893,28 @@
 
 	cons_printf(portid, "\nTCP\n");
-	cons_printf(portid, "\tåä¿¡ãªã¯ãããæ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_OCTETS]);
-	cons_printf(portid, "\tåä¿¡ãã¼ã¿ãªã¯ãããæ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_DATA_OCTETS]);
-	cons_printf(portid, "\tåä¿¡ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_SEGS]);
-	cons_printf(portid, "\tåä¿¡ãã¼ã¿ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_DATA_SEGS]);
-	cons_printf(portid, "\tåä¿¡ãç·æ¥ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_URG_SEGS]);
-	cons_printf(portid, "\tåä¿¡ããããä¸æ­£æ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_BAD_HEADERS]);
-	cons_printf(portid, "\tåä¿¡ããã§ãã¯ãµã ä¸æ­£æ°\t%lu\n",	net_count_tcp[NC_TCP_RECV_BAD_CKSUMS]);
-	cons_printf(portid, "\tåä¿¡ãACK æ°\t%lu\n",			net_count_tcp[NC_TCP_RECV_ACKS]);
-	cons_printf(portid, "\tåä¿¡ãå¤é ACK æ°\t%lu\n",		net_count_tcp[NC_TCP_RECV_DUP_ACKS]);
-	cons_printf(portid, "\tåä¿¡ãRST æ°\t%lu\n",			net_count_tcp[NC_TCP_RECV_RSTS]);
-	cons_printf(portid, "\tåä¿¡ãå¤éæ°\t%lu\n",			net_count_tcp[NC_TCP_RECV_DUP_SEGS]);
-	cons_printf(portid, "\tåä¿¡ãç ´æ£æ°\t%lu\n",			net_count_tcp[NC_TCP_RECV_DROP_SEGS]);
-	cons_printf(portid, "\tåä¿¡ã­ã¥ã¼è§£æ¾æ°\t%lu\n",		net_count_tcp[NC_TCP_FREE_RCV_QUEUE]);
-	cons_printf(portid, "\téä¿¡ãã¼ã¿ãªã¯ãããæ°\t%lu\n",		net_count_tcp[NC_TCP_SEND_DATA_OCTETS]);
-	cons_printf(portid, "\téä¿¡å¶å¾¡ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_SEND_CNTL_SEGS]);
-	cons_printf(portid, "\téä¿¡ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_SEND_SEGS]);
-	cons_printf(portid, "\tåéä¿¡ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_SEND_REXMIT_SEGS]);
-	cons_printf(portid, "\téä¿¡ãã¼ã¿ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_SEND_DATA_SEGS]);
-	cons_printf(portid, "\téä¿¡ãç·æ¥ã»ã°ã¡ã³ãæ°\t%lu\n",		net_count_tcp[NC_TCP_SEND_URG_SEGS]);
-	cons_printf(portid, "\téä¿¡ãACK æ°\t%lu\n",			net_count_tcp[NC_TCP_SEND_ACKS]);
-	cons_printf(portid, "\téä¿¡ãRST æ°\t%lu\n",			net_count_tcp[NC_TCP_SEND_RSTS]);
-	cons_printf(portid, "\tRTT æ´æ°æ°\t%lu\n",			net_count_tcp[NC_TCP_RTT_UPDATES]);
-	cons_printf(portid, "\tååãªã¼ãã³æ°\t%lu\n",			net_count_tcp[NC_TCP_ACCEPTS]);
-	cons_printf(portid, "\tè½åãªã¼ãã³æ°\t%lu\n",			net_count_tcp[NC_TCP_CONNECTS]);
+	cons_printf(portid, "\t受信オクテット数\t%lu\n",		net_count_tcp[NC_TCP_RECV_OCTETS]);
+	cons_printf(portid, "\t受信データオクテット数\t%lu\n",		net_count_tcp[NC_TCP_RECV_DATA_OCTETS]);
+	cons_printf(portid, "\t受信セグメント数\t%lu\n",		net_count_tcp[NC_TCP_RECV_SEGS]);
+	cons_printf(portid, "\t受信データセグメント数\t%lu\n",		net_count_tcp[NC_TCP_RECV_DATA_SEGS]);
+	cons_printf(portid, "\t受信、緊急セグメント数\t%lu\n",		net_count_tcp[NC_TCP_RECV_URG_SEGS]);
+	cons_printf(portid, "\t受信、ヘッダ不正数\t%lu\n",		net_count_tcp[NC_TCP_RECV_BAD_HEADERS]);
+	cons_printf(portid, "\t受信、チェックサム不正数\t%lu\n",	net_count_tcp[NC_TCP_RECV_BAD_CKSUMS]);
+	cons_printf(portid, "\t受信、ACK 数\t%lu\n",			net_count_tcp[NC_TCP_RECV_ACKS]);
+	cons_printf(portid, "\t受信、多重 ACK 数\t%lu\n",		net_count_tcp[NC_TCP_RECV_DUP_ACKS]);
+	cons_printf(portid, "\t受信、RST 数\t%lu\n",			net_count_tcp[NC_TCP_RECV_RSTS]);
+	cons_printf(portid, "\t受信、多重数\t%lu\n",			net_count_tcp[NC_TCP_RECV_DUP_SEGS]);
+	cons_printf(portid, "\t受信、破棄数\t%lu\n",			net_count_tcp[NC_TCP_RECV_DROP_SEGS]);
+	cons_printf(portid, "\t受信キュー解放数\t%lu\n",		net_count_tcp[NC_TCP_FREE_RCV_QUEUE]);
+	cons_printf(portid, "\t送信データオクテット数\t%lu\n",		net_count_tcp[NC_TCP_SEND_DATA_OCTETS]);
+	cons_printf(portid, "\t送信制御セグメント数\t%lu\n",		net_count_tcp[NC_TCP_SEND_CNTL_SEGS]);
+	cons_printf(portid, "\t送信セグメント数\t%lu\n",		net_count_tcp[NC_TCP_SEND_SEGS]);
+	cons_printf(portid, "\t再送信セグメント数\t%lu\n",		net_count_tcp[NC_TCP_SEND_REXMIT_SEGS]);
+	cons_printf(portid, "\t送信データセグメント数\t%lu\n",		net_count_tcp[NC_TCP_SEND_DATA_SEGS]);
+	cons_printf(portid, "\t送信、緊急セグメント数\t%lu\n",		net_count_tcp[NC_TCP_SEND_URG_SEGS]);
+	cons_printf(portid, "\t送信、ACK 数\t%lu\n",			net_count_tcp[NC_TCP_SEND_ACKS]);
+	cons_printf(portid, "\t送信、RST 数\t%lu\n",			net_count_tcp[NC_TCP_SEND_RSTS]);
+	cons_printf(portid, "\tRTT 更新数\t%lu\n",			net_count_tcp[NC_TCP_RTT_UPDATES]);
+	cons_printf(portid, "\t受動オープン数\t%lu\n",			net_count_tcp[NC_TCP_ACCEPTS]);
+	cons_printf(portid, "\t能動オープン数\t%lu\n",			net_count_tcp[NC_TCP_CONNECTS]);
 
 #endif	/* of #ifdef SUPPORT_TCP */
@@ -968,5 +927,5 @@
 
 	tbl = nbuf_get_tbl();
-	cons_printf(portid, "\nãããã¯ã¼ã¯ãããã¡\n\tãµã¤ãº\tç¨ææ°\tä½¿ç¨ä¸­æ°\tå²å½è¦æ±æ°\tå²å½æ°\tå²å½ã¦ã¨ã©ã¼æ°\n");
+	cons_printf(portid, "\nネットワークバッファ\n\tサイズ\t用意数\t使用中数\t割当要求数\t割当数\t割当てエラー数\n");
 	for (ix = nbuf_get_tbl_size(); ix -- > 0; ) {
 		cons_printf(portid, "\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\n",
@@ -979,8 +938,7 @@
 		}
 
-	cons_printf(portid, "\nãããã¯ã¼ã¯çµ±è¨æ
-å ±\tçµéæé[us]\t%lu\t", now);
+	cons_printf(portid, "\nネットワーク統計情報\t経過時間[us]\t%lu\t", now);
 	if (now > (1000 * 3600 * 24))
-		cons_printf(portid, "%3luæ¥ %2luæé %2luå %2luç§\n",
+		cons_printf(portid, "%3lu日 %2lu時間 %2lu分 %2lu秒\n",
 		             now / (1000 * 3600 * 24),
 		            (now / (1000 * 3600)) % 24,
@@ -988,5 +946,5 @@
 		            (now /  1000        ) % 60);
 	else
-		cons_printf(portid, "%2luæé %2luå %2luç§\n",
+		cons_printf(portid, "%2lu時間 %2lu分 %2lu秒\n",
 		            (now / (1000 * 3600)) % 24,
 		            (now / (1000 * 60  )) % 60,
@@ -1002,7 +960,5 @@
 
 /*
- *  nbuf_stat_ip4_frag_queue -- IPv4 åæ§æã­ã¥ã¼å
-ãããã¯ã¼ã¯ãããã¡æ
-å ±
+ *  nbuf_stat_ip4_frag_queue -- IPv4 再構成キュー内ネットワークバッファ情報
  */
 
@@ -1014,6 +970,5 @@
 	int_t			ix, fix, count;
 
-	cons_printf(portid, "\nIPv4åæ§æã­ã¥ã¼å
-\nIndex\tTime");
+	cons_printf(portid, "\nIPv4再構成キュー内\nIndex\tTime");
 	tbl = nbuf_get_tbl();
 	for (ix = nbuf_get_tbl_size(); ix -- > 0; )
@@ -1046,7 +1001,5 @@
 
 /*
- *  nbuf_stat_ip6_frag_queue -- IPv6 åæ§æã­ã¥ã¼å
-ãããã¯ã¼ã¯ãããã¡æ
-å ±
+ *  nbuf_stat_ip6_frag_queue -- IPv6 再構成キュー内ネットワークバッファ情報
  */
 
@@ -1058,6 +1011,5 @@
 	int_t			ix, fix, count;
 
-	cons_printf(portid, "\nIPv6åæ§æã­ã¥ã¼å
-\nIndex\tTime");
+	cons_printf(portid, "\nIPv6再構成キュー内\nIndex\tTime");
 	tbl = nbuf_get_tbl();
 	for (ix = nbuf_get_tbl_size(); ix -- > 0; )
@@ -1088,6 +1040,5 @@
 
 /*
- *  nbuf_status -- ãããã¯ã¼ã¯ãããã¡æ
-å ±
+ *  nbuf_status -- ネットワークバッファ情報
  */
 
@@ -1114,10 +1065,9 @@
 	WAI_NET_CONS_PRINTF();
 	get_tim(&now);
-	cons_printf(portid, "ãããã¯ã¼ã¯ãããã¡æ
-å ±\tçµéæé[us]\t%u\n", now);
+	cons_printf(portid, "ネットワークバッファ情報\t経過時間[us]\t%u\n", now);
 
 #if NET_COUNT_ENABLE
 
-	cons_printf(portid, "\nãããã¯ã¼ã¯ãããã¡\n\tãµã¤ãº\tç¨ææ°\tä½¿ç¨ä¸­æ°\tå²å½è¦æ±æ°\tå²å½æ°\tå²å½ã¦ã¨ã©ã¼æ°\n");
+	cons_printf(portid, "\nネットワークバッファ\n\tサイズ\t用意数\t使用中数\t割当要求数\t割当数\t割当てエラー数\n");
 	tbl = nbuf_get_tbl();
 	for (ix = nbuf_get_tbl_size(); ix -- > 0; ) {
@@ -1135,6 +1085,5 @@
 #ifdef SUPPORT_TCP
 
-	cons_printf(portid, "\nCEPå
-\nCEPID\n");
+	cons_printf(portid, "\nCEP内\nCEPID\n");
 
 	for (cep = tcp_cep; cep < &tcp_cep[tmax_tcp_cepid]; cep ++) {
@@ -1210,5 +1159,5 @@
 
 /*
- *  show_dns_soa -- DNS ã® SOA RDATA ãè¡¨ç¤ºããã
+ *  show_dns_soa -- DNS の SOA RDATA を表示する。
  */
 
@@ -1240,5 +1189,5 @@
 
 /*
- *  show_dns_qdsection -- DNS ã® Question ã»ã¯ã·ã§ã³ãè¡¨ç¤ºããã
+ *  show_dns_qdsection -- DNS の Question セクションを表示する。
  */
 
@@ -1266,5 +1215,5 @@
 
 /*
- *  show_dns_section -- DNS ã®åã»ã¯ã·ã§ã³ãè¡¨ç¤ºããã
+ *  show_dns_section -- DNS の各セクションを表示する。
  */
 
@@ -1334,6 +1283,5 @@
 	}
 /*
- *  dns_info -- DNS æ
-å ±ã®è¡¨ç¤º
+ *  dns_info -- DNS 情報の表示
  */
 
@@ -1378,5 +1326,5 @@
 
 /*
- *  name_lookup -- ãã¹ãåï¼IP ã¢ãã¬ã¹å¤æ
+ *  name_lookup -- ホスト名－IP アドレス変換
  */
 
@@ -1401,5 +1349,5 @@
 	uint8_t 	*msg;
 
-	/* ã³ãã³ãã®ãªãã·ã§ã³ãè¨­å®ããã*/
+	/* コマンドのオプションを設定する。*/
 	line = skip_blanks(resolv_options(&flags, line, DEFAULT_API_PROTO));
 	if ((flags & (DNS_LUP_FLAGS_PROTO_IPV6 | DNS_LUP_FLAGS_PROTO_IPV4)) == 0) {
@@ -1408,13 +1356,11 @@
 		}
 
-	/* ç
-§ä¼ãããã¹ãåã»IP ã¢ãã¬ã¹ãè§£æããã*/
+	/* 照会するホスト名・IP アドレスを解析する。*/
 	resolv_hoststr(&flags, hostname, sizeof(hostname), line);
 
-	/* æ­£å¼ãã§ãéå¼ãã§ããã­ãã³ã«ä¸ã¯æ­£å¼ããæå®ããã*/
+	/* 正引きでも逆引きでもプロトコル上は正引きを指定する。*/
 	flags |= DNS_LUP_OPCODE_FORWARD;
 
-	/* IPv6 ã¢ãã¬ã¹ãã¾ãã¯ IPv4 ã¢ãã¬ã¹ãæå®ãããæã¯ãç
-§ä¼ã¿ã¤ãã¯ PTR ã«è¨­å®ããã*/
+	/* IPv6 アドレス、または IPv4 アドレスが指定された時は、照会タイプは PTR に設定する。*/
 	if (((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_IPV6) ||
 	    ((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_IPV4))
@@ -1473,6 +1419,5 @@
 
 /*
- *  dhcp6c_info -- DHCPv6 ã¯ã©ã¤ã¢ã³ãæ
-å ±ã®è¡¨ç¤º
+ *  dhcp6c_info -- DHCPv6 クライアント情報の表示
  */
 
@@ -1516,6 +1461,5 @@
 
 /*
- *  dhcp4c_info -- DHCPv4 ã¯ã©ã¤ã¢ã³ãæ
-å ±ã®è¡¨ç¤º
+ *  dhcp4c_info -- DHCPv4 クライアント情報の表示
  */
 
@@ -1545,6 +1489,5 @@
 
 /*
- *  dhcpc -- DHCP ã¯ã©ã¤ã¢ã³ãæ
-å ±ã®è¡¨ç¤ºã¨å¶å¾¡
+ *  dhcpc -- DHCP クライアント情報の表示と制御
  */
 
@@ -1557,13 +1500,11 @@
 
 #if defined(DHCP6_CLI_CFG)
-	case '6':			/* DHCPv6 ã®å¶å¾¡ */
+	case '6':			/* DHCPv6 の制御 */
 		switch (*(line + 1)) {
-		case 'r':		/* ã¢ãã¬ã¹æ
-å ±ãè§£æ¾ããã*/
+		case 'r':		/* アドレス情報を解放する。*/
 			dhcp6c_rel_info();
 			break;
 
-		case 'n':		/* ã¢ãã¬ã¹æ
-å ±ãååå¾ããã*/
+		case 'n':		/* アドレス情報を再取得する。*/
 			dhcp6c_renew_info();
 			break;
@@ -1577,13 +1518,11 @@
 
 #if defined(DHCP4_CLI_CFG)
-	case '4':		/* DHCPv4 ã®å¶å¾¡ */
+	case '4':		/* DHCPv4 の制御 */
 		switch (*(line + 1)) {
-		case 'r':		/* ã¢ãã¬ã¹æ
-å ±ãè§£æ¾ããã*/
+		case 'r':		/* アドレス情報を解放する。*/
 			dhcp4c_rel_info();
 			break;
 
-		case 'n':		/* ã¢ãã¬ã¹æ
-å ±ãååå¾ããã*/
+		case 'n':		/* アドレス情報を再取得する。*/
 			dhcp4c_renew_info();
 			break;
@@ -1619,6 +1558,5 @@
 
 /*
- *  defrtrlist_status -- ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãç¶æ
-ã®åºå
+ *  defrtrlist_status -- ディフォルトルータ・リスト状態の出力
  */
 
@@ -1639,5 +1577,5 @@
 	cons_printf(portid, " IP Address\n");
 
-	/* expire ã®åä½ã¯ [us]ã*/
+	/* expire の単位は [us]。*/
 	get_tim(&now);
 	dr = nd6_get_drl(&count);
@@ -1683,6 +1621,5 @@
 
 /*
- *  prefixlist_status -- ãã¬ãã£ãã¯ã¹ã»ãªã¹ãç¶æ
-ã®åºå
+ *  prefixlist_status -- プレフィックス・リスト状態の出力
  */
 
@@ -1703,5 +1640,5 @@
 	cons_printf(portid, " Len Prefix\n");
 
-	/* expire ã®åä½ã¯ [s]ã*/
+	/* expire の単位は [s]。*/
 	get_tim(&now);
 	now /= SYSTIM_HZ;
@@ -1752,5 +1689,5 @@
 
 /*
- *  routing6_table_status -- çµè·¯è¡¨ï¼IPv6ï¼ã®åºå
+ *  routing6_table_status -- 経路表（IPv6）の出力
  */
 
@@ -1775,5 +1712,5 @@
 		}
 
-	/* expire ã®åä½ã¯ [s]ã*/
+	/* expire の単位は [s]。*/
 	get_tim(&now);
 	now /= SYSTIM_HZ;
@@ -1803,5 +1740,5 @@
 
 /*
- *  routing4_table_status -- çµè·¯è¡¨ï¼IPv4ï¼ã®åºå
+ *  routing4_table_status -- 経路表（IPv4）の出力
  */
 
@@ -1856,6 +1793,5 @@
 
 /*
- *  routing_status -- çµè·¯æ
-å ±
+ *  routing_status -- 経路情報
  */
 
@@ -1867,11 +1803,9 @@
 #if defined(SUPPORT_INET6) && NUM_ND6_DEF_RTR_ENTRY > 0
 
-	case 'l':		/* ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãæ
-å ± */
+	case 'l':		/* ディフォルトルータ・リスト情報 */
 		defrtrlist_status(portid, line + 1);
 		break;
 
-	case 'p':		/* ãã¬ãã£ãã¯ã¹ã»ãªã¹ãæ
-å ± */
+	case 'p':		/* プレフィックス・リスト情報 */
 		prefixlist_status(portid, line + 1);
 		break;
@@ -1881,6 +1815,5 @@
 	default:
 
-		/* çµè·¯è¡¨æ
-å ± */
+		/* 経路表情報 */
 
 #if defined(SUPPORT_INET6) && NUM_IN6_ROUTE_ENTRY > 0
@@ -1897,6 +1830,5 @@
 
 /*
- *  dbg_cons_network_status -- ãããã¯ã¼ã¯ã®ç¶æ
-ã®åºå
+ *  dbg_cons_network_status -- ネットワークの状態の出力
  */
 
@@ -1908,6 +1840,5 @@
 #ifdef SUPPORT_ETHER
 
-	case 'a':		/* IF ã¢ãã¬ã¹æ
-å ± */
+	case 'a':		/* IF アドレス情報 */
 
 #if defined(SUPPORT_INET6)
@@ -1922,6 +1853,5 @@
 #endif	/* of #ifdef SUPPORT_ETHER */
 
-	case 'b':		/* ãããã¯ã¼ã¯ãããã¡æ
-å ± */
+	case 'b':		/* ネットワークバッファ情報 */
 		nbuf_status(portid, line + 1);
 		break;
@@ -1929,6 +1859,5 @@
 #if NET_COUNT_ENABLE
 
-	case 'c':		/* ãããã¯ã¼ã¯çµ±è¨æ
-å ± */
+	case 'c':		/* ネットワーク統計情報 */
 		net_count(portid, line + 1);
 		break;
@@ -1936,6 +1865,5 @@
 #endif	/* of #if NET_COUNT_ENABLE */
 
-	case 'r':		/* çµè·¯æ
-å ± */
+	case 'r':		/* 経路情報 */
 		routing_status(portid, line + 1);
 		break;
@@ -1977,6 +1905,5 @@
 
 /*
- *  dbg_cons_ifconfig -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®æ§ææ
-å ±
+ *  dbg_cons_ifconfig -- ネットワークインタフェースの構成情報
  */
 
@@ -2000,6 +1927,5 @@
 
 /*
- *  dbg_cons_ifconfig6 -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ï¼IPv6ï¼ã®æ§ææ
-å ±
+ *  dbg_cons_ifconfig6 -- ネットワークインタフェース（IPv6）の構成情報
  */
 
@@ -2015,5 +1941,5 @@
 	WAI_NET_CONS_PRINTF();
 
-	/* expire ã¨ vltime ã®åä½ã¯ [s]ã*/
+	/* expire と vltime の単位は [s]。*/
 	get_tim(&now);
 	now /= SYSTIM_HZ;
@@ -2060,6 +1986,5 @@
 
 /*
- *  dbg_cons_ifconfig4 -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ï¼IPv4ï¼ã®æ§ææ
-å ±
+ *  dbg_cons_ifconfig4 -- ネットワークインタフェース（IPv4）の構成情報
  */
 
@@ -2101,5 +2026,5 @@
 
 /*
- *  dbg_cons_show_config -- ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³è¨­å®ã®è¡¨ç¤º
+ *  dbg_cons_show_config -- コンフィギュレーション設定の表示
  */
 
@@ -2557,5 +2482,5 @@
 
 /*
- *  ping ã³ãã³ã
+ *  ping コマンド
  */
 
@@ -2655,5 +2580,5 @@
 
 /*
- *  ãããã°ã³ãã³ãè§£æ
+ *  デバッグコマンド解析
  */
 
@@ -3272,5 +3197,5 @@
 
 /*
- *  ãããã°ã³ã³ã½ã¼ã«ã¿ã¹ã¯
+ *  デバッグコンソールタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  ãããã°ã³ã³ã½ã¼ã«ã®ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  デバッグコンソールのフィギュレーションファイル
  */
 
 #ifdef USE_DBG_CONS
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(DBG_CON_TASK, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dbg_cons.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,13 +36,12 @@
 
 /* 
- *  ã³ã³ã½ã¼ã«
+ *  コンソール
  */
 
-#define	DBG_CON_STACK_SIZE	1024		/* ã³ã³ã½ã¼ã«ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
-#define DBG_CON_PRIORITY	5		/* ã³ã³ã½ã¼ã«ã¿ã¹ã¯ã®åªå
-åº¦ */
+#define	DBG_CON_STACK_SIZE	1024		/* コンソールタスクのスタックサイズ */
+#define DBG_CON_PRIORITY	5		/* コンソールタスクの優先度 */
 
 /*
- *  ã¿ã¹ã¯
+ *  タスク
  */
 
@@ -62,5 +49,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4.h	(revision 389)
@@ -5,44 +5,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,5 +39,5 @@
 
 /*
- *  DHCP ã«é¢ããå®ç¾©
+ *  DHCP に関する定義
  *
  *    RFC2131
@@ -59,5 +45,5 @@
 
 /*
- *  DHCP ã¡ãã»ã¼ã¸ã®å®æ°ã®å®ç¾©
+ *  DHCP メッセージの定数の定義
  */
 
@@ -74,5 +60,5 @@
 
 /*
- *  DHCP ã¡ãã»ã¼ã¸
+ *  DHCP メッセージ
  */
 
@@ -95,10 +81,10 @@
 	} __attribute__((packed)) T_DHCP4_MSG;
 
-/* packet type ã®å®ç¾© */
+/* packet type の定義 */
 
 #define DHCP4_REQUEST		UINT_C(1)
 #define DHCP4_REPLY		UINT_C(2)
 
-/* hardware address type ã®å®ç¾© */
+/* hardware address type の定義 */
 
 #define DHCP4_HWA_TYPE_ETHER	UINT_C(1)
@@ -106,5 +92,5 @@
 
 /*
- *  DHCP ãªãã·ã§ã³
+ *  DHCP オプション
  *
  *    RFC1533
@@ -112,10 +98,10 @@
 
 /*
- *  ãªãã·ã§ã³ã®ç©´åã
+ *  オプションの穴埋め
  */
 #define DHCP4_OPT_PAD		UINT_C(0)
 
 /*
- *  ãµãããããã¹ã¯
+ *  サブネットマスク
  *
  *     code   len   subnet mask
@@ -127,5 +113,5 @@
 
 /*
- *  ã«ã¼ã¿
+ *  ルータ
  *
  *     code   len   addres #1               address #2
@@ -137,5 +123,5 @@
 
 /*
- *  DNS ãµã¼ã
+ *  DNS サーバ
  *
  *     code   len   addres #1               address #2
@@ -147,5 +133,5 @@
 
 /*
- *  ãã¹ãå
+ *  ホスト名
  *
  *     code   len   host name
@@ -157,5 +143,5 @@
 
 /*
- *  ãã¡ã¤ã³å
+ *  ドメイン名
  *
  *     code   len   domain name
@@ -167,5 +153,5 @@
 
 /*
- *  ã«ã¼ã¿æ¢ç´¢
+ *  ルータ探索
  *
  *     code   len  value
@@ -177,5 +163,5 @@
 
 /*
- *  éççµè·¯
+ *  静的経路
  *
  *     code   len   destination #1          router #1
@@ -187,6 +173,5 @@
 
 /*
- *  ãã³ãã¼åºææ
-å ±
+ *  ベンダー固有情報
  *
  *     code   len   vendor-specific informations
@@ -199,5 +184,5 @@
 
 /*
- *  NetBIOS over TCP/IP ãã¼ã ãµã¼ã
+ *  NetBIOS over TCP/IP ネームサーバ
  *
  *     code   len   addres #1               address #2
@@ -209,5 +194,5 @@
 
 /*
- *  NetBIOS over TCP/IP ãã¼ãã¿ã¤ã
+ *  NetBIOS over TCP/IP ノードタイプ
  *
  *     code   len   type
@@ -219,5 +204,5 @@
 
 /*
- *  NetBIOS over TCP/IP ã¹ã³ã¼ã
+ *  NetBIOS over TCP/IP スコープ
  *
  *     code   len   NetBIOS scope
@@ -229,5 +214,5 @@
 
 /*
- *  ç¹å®ã® IPv4 ã¢ãã¬ã¹è¦æ±
+ *  特定の IPv4 アドレス要求
  *
  *     code   len   IPv4 address
@@ -239,5 +224,5 @@
 
 /*
- *  ãªã¼ã¹æé
+ *  リース時間
  *
  *     code   len   lease time
@@ -249,5 +234,5 @@
 
 /*
- *  ãªãã·ã§ã³ãªã¼ãã¼ã­ã¼ã
+ *  オプションオーバーロード
  *
  *     code   len  value
@@ -258,5 +243,5 @@
 #define DHCP4_OPT_OPT_OVERLOAD	UINT_C(52)
 
-/* value ã®å®ç¾© */
+/* value の定義 */
 
 #define DHCP4_OPTOL_FILE	UINT_C(0x01)
@@ -265,5 +250,5 @@
 
 /*
- *  DHCP ã¡ãã»ã¼ã¸ã¿ã¤ã
+ *  DHCP メッセージタイプ
  *
  *     code   len   type
@@ -274,5 +259,5 @@
 #define DHCP4_OPT_MSG_TYPE	UINT_C(53)
 
-/* type ã®å®ç¾© */
+/* type の定義 */
 
 #define DHCP4_MTYPE_BOOTP	UINT_C(0)
@@ -287,5 +272,5 @@
 
 /*
- *  ãµã¼ã ID
+ *  サーバ ID
  *
  *     code   len   IPv4 address
@@ -297,5 +282,5 @@
 
 /*
- *  è¦æ±ãã©ã¡ã¼ã¿ãªã¹ã
+ *  要求パラメータリスト
  *
  *     code   len   option code
@@ -308,5 +293,5 @@
 
 /*
- *  Renewal (T1) æé
+ *  Renewal (T1) 時間
  *
  *     code   len   T1 interval
@@ -318,5 +303,5 @@
 
 /*
- *  Rebinding (T2) æé
+ *  Rebinding (T2) 時間
  *
  *     code   len   T2 interval
@@ -328,5 +313,5 @@
 
 /*
- *  ãã³ãã¼ã¯ã©ã¹ IDï¼RFC2132ï¼
+ *  ベンダークラス ID（RFC2132）
  *
  *     code   len   vendor class ID
@@ -339,5 +324,5 @@
 
 /*
- *  ã¯ã©ã¤ã¢ã³ã ID
+ *  クライアント ID
  *
  *     code   len   type  client ID
@@ -346,11 +331,11 @@
  *   +------+-----+-----+-----+-----+---
  *
- *   type       : ãã¼ãã¦ã§ã¢ã¢ãã¬ã¹ã¿ã¤ã
- *   i1, i2, ...: éå¸¸ MAC ã¢ãã¬ã¹
+ *   type       : ハードウェアアドレスタイプ
+ *   i1, i2, ...: 通常 MAC アドレス
  */
 #define DHCP4_OPT_CLIENT_ID	UINT_C(61)
 
 /*
- *  ã¯ã©ã¹ãªãéççµè·¯ï¼RFC3442ï¼
+ *  クラスなし静的経路（RFC3442）
  *
  *     code   len   destination #1     router #1
@@ -362,10 +347,10 @@
 
 /*
- *  ãªãã·ã§ã³ã®çµäº
+ *  オプションの終了
  */
 #define DHCP4_OPT_END		UINT_C(255)
 
 /*
- *  magic çªå·ï¼RFC1048ï¼
+ *  magic 番号（RFC1048）
  */
 
@@ -374,5 +359,5 @@
 
 /*
- *  UDP ãã¼ãçªå·
+ *  UDP ポート番号
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.c	(revision 389)
@@ -95,44 +95,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -183,5 +169,5 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯
+ *  DHCP クライアントタスク
  */
 
@@ -189,17 +175,16 @@
 
 /*
- *  å¤æ°
- */
-
-static T_DHCP4_CLI_CONTEXT	context;			/* ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ã	*/
-static uint8_t	magicno[DHCP4_MAGIC_LEN] = DHCP4_RFC1048_MAGIC;	/* magic çªå·ï¼RFC1048ï¼*/
-
-/* å¿
-é ãªãã·ã§ã³ãªã¹ã */
+ *  変数
+ */
+
+static T_DHCP4_CLI_CONTEXT	context;			/* クライアントコンテキスト	*/
+static uint8_t	magicno[DHCP4_MAGIC_LEN] = DHCP4_RFC1048_MAGIC;	/* magic 番号（RFC1048）*/
+
+/* 必須オプションリスト */
 #ifdef DHCP4_CLI_CFG_REQUIRED_OLIST
 static uint8_t	required_plist[] = DHCP4_CLI_CFG_REQUIRED_OLIST;
 #endif
 
-/* è¦æ±ãªãã·ã§ã³ãªã¹ã */
+/* 要求オプションリスト */
 #ifdef DHCP4_CLI_CFG_REQUEST_OLIST
 static uint8_t	request_plist[] = DHCP4_CLI_CFG_REQUEST_OLIST;
@@ -223,9 +208,9 @@
 
 /*
- *  dhcp4_cksum -- ãã§ãã¯ãµã ã®è¨ç®é¢æ°
+ *  dhcp4_cksum -- チェックサムの計算関数
  */
 
 static uint32_t
-dhcp4_cksum (void *data, uint_t len /*ãªã¯ãããåä½*/)
+dhcp4_cksum (void *data, uint_t len /*オクテット単位*/)
 {
 	uint32_t carry, sum = 0;
@@ -245,5 +230,5 @@
 
 /*
- *  create_xid -- ãã©ã³ã¶ã¯ã·ã§ã³ ID ãçæããã
+ *  create_xid -- トランザクション ID を生成する。
  */
 
@@ -261,7 +246,7 @@
 
 /*
- *  find_option_sub -- æå®ãããªãã·ã§ã³ãæ¢ç´¢ããã
+ *  find_option_sub -- 指定したオプションを探索する。
  *
- *    æ³¨æ: å¼æ° size ã 0 ã®æã¯ãªãã·ã§ã³ãµã¤ãºãæ¤è¨¼ããªãã
+ *    注意: 引数 size が 0 の時はオプションサイズを検証しない。
  */
 
@@ -298,7 +283,7 @@
 
 /*
- *  find_option -- æå®ãããªãã·ã§ã³ãæ¢ç´¢ããã
+ *  find_option -- 指定したオプションを探索する。
  *
- *    æ³¨æ: å¼æ° size ã 0 ã®æã¯ãªãã·ã§ã³ãµã¤ãºãæ¤è¨¼ããªãã
+ *    注意: 引数 size が 0 の時はオプションサイズを検証しない。
  */
 
@@ -312,6 +297,5 @@
 
 /*
- *  is_equal_sid -- ã¡ãã»ã¼ã¸å
-ã® SERVER ID ãæ¯è¼ããã
+ *  is_equal_sid -- メッセージ内の SERVER ID を比較する。
  */
 
@@ -330,6 +314,5 @@
 
 /*
- *  timer_value -- ã¡ãã»ã¼ã¸ããæéæ
-å ±ãåãåºãã
+ *  timer_value -- メッセージから時間情報を取り出す。
  */
 
@@ -344,9 +327,8 @@
 	else {
 
-		/* ãµã¼ãããã®ãªã¼ã¹æéã¯[s]ã*/
+		/* サーバからのリース時間は[s]。*/
 		seconds = msg2host32(opt + 2);
 
-		/* ã³ã³ãã­ã¹ãå
-ã®ãªã¼ã¹æéã¯ SYSTIM_HZã*/
+		/* コンテキスト内のリース時間は SYSTIM_HZ。*/
 		if (seconds == DHCP4_TIME_INFINITY)
 			return DHCP4_TIME_INFINITY;
@@ -359,5 +341,5 @@
 
 /*
- *  rel_addr -- IPv4 ã¢ãã¬ã¹ããµãããããã¹ã¯ãéççµè·¯è¡¨ãè§£æ¾ããã
+ *  rel_addr -- IPv4 アドレス、サブネットマスク、静的経路表を解放する。
  */
 
@@ -402,5 +384,5 @@
 
 /*
- *  rel_options -- ãªã¼ã¹ããããªãã·ã§ã³ãè§£æãã¦å¤ãè§£æ¾ããã
+ *  rel_options -- リースされたオプションを解析して値を解放する。
  */
 
@@ -468,6 +450,5 @@
 
 /*
- *  rel_lease -- ãªã¼ã¹ãããæ
-å ±ãè§£æ¾ããã
+ *  rel_lease -- リースされた情報を解放する。
  */
 
@@ -475,14 +456,14 @@
 rel_lease (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãç¡ããã°ä½ãããªãã*/
+	/* 有効なリース・メッセージ構造体が無ければ何もしない。*/
 	if (ct->act_msg == NULL)
 		return;
 
-	/* ãªã¼ã¹ããããªãã·ã§ã³ãè§£æãã¦å¤ãè§£æ¾ããã*/
+	/* リースされたオプションを解析して値を解放する。*/
 	rel_options(ct, DHCP4_OPTION_OFFSET + DHCP4_MAGIC_LEN,
 	              ct->act_msg->len - (DHCP4_OPTION_OFFSET + DHCP4_MAGIC_LEN), true);
 	rel_addr();
 
-	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã*/
+	/* 有効なリース・メッセージ構造体を解放する。*/
 	syscall(rel_mpf(MPF_DHCP4_CLI_MSG, (void*)ct->act_msg));
 	ct->act_msg = NULL;
@@ -490,5 +471,5 @@
 
 /*
- *  set_addr -- IPv4 ã¢ãã¬ã¹ããµãããããã¹ã¯ãéççµè·¯è¡¨ãè¨­å®ããã
+ *  set_addr -- IPv4 アドレス、サブネットマスク、静的経路表を設定する。
  */
 
@@ -529,5 +510,5 @@
 
 /*
- *  set_options -- ãªã¼ã¹ããããªãã·ã§ã³ãè§£æãã¦å¤ãè¨­å®ããã
+ *  set_options -- リースされたオプションを解析して値を設定する。
  */
 
@@ -602,6 +583,5 @@
 
 /*
- *  set_lease -- ãªã¼ã¹ãããæ
-å ±ãè¨­å®ããã
+ *  set_lease -- リースされた情報を設定する。
  */
 
@@ -609,5 +589,5 @@
 set_lease (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* ãªã¼ã¹ããããªãã·ã§ã³ãè§£æãã¦å¤ãè¨­å®ããã*/
+	/* リースされたオプションを解析して値を設定する。*/
 	set_options(ct, DHCP4_OPTION_OFFSET + DHCP4_MAGIC_LEN,
 	              ct->act_msg->len - (DHCP4_OPTION_OFFSET + DHCP4_MAGIC_LEN), true);
@@ -615,7 +595,7 @@
 
 /*
- *  validate_duplicate -- æå®ããã IPv4 ã¢ãã¬ã¹ãä½¿ããã¦ããªããæ¤è¨¼ããã
+ *  validate_duplicate -- 指定された IPv4 アドレスが使われていないか検証する。
  *
- *    ä½¿ããã¦ããªãæã¯ true ãè¿ãã
+ *    使われていない時は true を返す。
  */
 
@@ -625,17 +605,16 @@
 	T_IN4_ADDR	yiaddr;
 
-	/* æå®ããã IPv4 ã¢ãã¬ã¹ã ADDR ANY ãªãä½¿ããã¦ããªãã¨å¤æ­ããã*/
+	/* 指定された IPv4 アドレスが ADDR ANY なら使われていないと判断する。*/
 	yiaddr = ntohl(msg->msg.yiaddr);
 	if (yiaddr == IPV4_ADDRANY)
 		return true;
 
-	/* ARP ã­ã£ãã·ã¥ã«ããã°ä½¿ããã¦ããã¨å¤æ­ããã*/
+	/* ARP キャッシュにあれば使われていると判断する。*/
 	if (arp_lookup(yiaddr, false) != NULL)
 		return false;
 
 	/*
-	 *  ARP è¦æ±ãåºåãã¦ TMO_DHCP4C_ARP_WAIT å¾
-ã¡ã
-	 *  ARP ã­ã£ãã·ã¥ã«ãªããã°ä½¿ããã¦ããªãã¨å¤æ­ããã
+	 *  ARP 要求を出力して TMO_DHCP4C_ARP_WAIT 待ち、
+	 *  ARP キャッシュになければ使われていないと判断する。
 	 */
 	arp_request(&IF_ETHER_NIC_GET_SOFTC()->ifaddr, yiaddr);
@@ -645,5 +624,5 @@
 
 /*
- *  validate_rcv_msg -- åä¿¡ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã
+ *  validate_rcv_msg -- 受信メッセージを検証する。
  */
 
@@ -653,13 +632,13 @@
 	uint8_t 	*opt;
 
-	/* packet type ã DHCP4_REPLY ã§ãããã¨ãç¢ºèªããã*/
+	/* packet type が DHCP4_REPLY であることを確認する。*/
 	if (!(msg->msg.op == DHCP4_REPLY))
 		return false;
 
-	/* ã¡ãã»ã¼ã¸ã¿ã¤ããªãã·ã§ã³ããããã¨ãç¢ºèªããã*/
+	/* メッセージタイプオプションがあることを確認する。*/
 	if ((opt = find_option(msg, DHCP4_OPT_MSG_TYPE, 1)) == NULL)
 		return E_PAR;
 
-	/* ã¡ãã»ã¼ã¸ã®ã¿ã¤ããä¸è´ãã¦ãããã¨ãæ¤è¨¼ããã*/
+	/* メッセージのタイプが一致していることを検証する。*/
 	msg->type = *(opt + 2);
 	switch (ct->fsm) {
@@ -691,25 +670,24 @@
 		}
 
-	/* ãã¸ãã¯çªå·ãæ¤è¨¼ããã*/
+	/* マジック番号を検証する。*/
 	if (memcmp((uint8_t*)&msg->msg.options, magicno, DHCP4_MAGIC_LEN))
 		return E_PAR;
 
-	/* ãã©ã³ã¶ã¯ã·ã§ã³ ID ãç°ãªã£ã¦ããã°ã¨ã©ã¼ */
+	/* トランザクション ID が異なっていればエラー */
 	if (ntohl(msg->msg.xid) != ct->xid)
 		return E_PAR;
 
-	/* ãã¼ãã¦ã§ã¢ã¢ãã¬ã¹é·ã 6ï¼MAC ã¢ãã¬ã¹é·ï¼ã§ãªããã°ã¨ã©ã¼ */
+	/* ハードウェアアドレス長が 6（MAC アドレス長）でなければエラー */
 	if (msg->msg.hlen != ETHER_ADDR_LEN)
 		return E_PAR;
 
-	/* ãã¼ãã¦ã§ã¢ã¢ãã¬ã¹ãç°ãªã£ã¦ããã°ã¨ã©ã¼ */
+	/* ハードウェアアドレスが異なっていればエラー */
 	if (memcmp(&msg->msg.chaddr, &ct->sc->ifaddr.lladdr, sizeof(ct->sc->ifaddr.lladdr)))
 		return E_PAR;
 
 	/*
-	 *  ã¡ãã»ã¼ã¸ã¿ã¤ãã OFFER ã®å ´åã¯ã
-	 *  ARP ãä½¿ç¨ãã¦ãæå®ããã IPv4 ã¢ãã¬ã¹ãä½¿ããã¦ããªããæ¤è¨¼ããã
-	 *  ä½¿ããã¦ããæã¯ãä»ã® IPv4 ã¢ãã¬ã¹ã®æä¾ãå¾
-ã¤ã
+	 *  メッセージタイプが OFFER の場合は、
+	 *  ARP を使用して、指定された IPv4 アドレスが使われていないか検証する。
+	 *  使われている時は、他の IPv4 アドレスの提供を待つ。
 	 */
 	if (msg->type == DHCP4_MTYPE_OFFER) {
@@ -722,5 +700,5 @@
 
 /*
- *  eval_prefer -- åä¿¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãè©ä¾¡ããã
+ *  eval_prefer -- 受信メッセージの推奨度を評価する。
  */
 
@@ -730,9 +708,9 @@
 	int	ix;
 
-	/* ç¡å¹ã®å ´åã¯çµäºããã*/
+	/* 無効の場合は終了する。*/
 	if (msg == NULL)
 		return;
 
-	/* æå®ããã IPv4 ã¢ãã¬ã¹ã ADDR ANY ãªãæ¨å¥¨åº¦ã 0ã«è¨­å®ããã*/
+	/* 指定された IPv4 アドレスが ADDR ANY なら推奨度を 0に設定する。*/
 	if (ntohl(msg->msg.yiaddr) == IPV4_ADDRANY)
 		msg->prefer = 0;
@@ -742,5 +720,5 @@
 #if defined(DHCP4_CLI_CFG_REQUEST_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* 要求オプションを検証する。*/
 	for (ix = sizeof(request_plist); ix -- > 0; ) {
 		if (find_option(msg, request_plist[ix], 0) != NULL)
@@ -752,6 +730,5 @@
 #if defined(DHCP4_CLI_CFG_REQUIRED_OLIST)
 
-	/* å¿
-é ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* 必須オプションを検証する。*/
 	for (ix = sizeof(required_plist); ix -- > 0; ) {
 		if (find_option(msg, required_plist[ix], 0) == NULL)
@@ -763,5 +740,5 @@
 
 /*
- *  eval_rcv_msg -- åä¿¡ã¡ãã»ã¼ã¸ãè©ä¾¡ããã
+ *  eval_rcv_msg -- 受信メッセージを評価する。
  */
 
@@ -771,5 +748,5 @@
 	T_DHCP4_CLI_MSG	*evl, *msg;
 
-	/* ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã°ä¸­æ­¢ããã*/
+	/* メッセージを受信していなければ中止する。*/
 	syscall(wai_sem(SEM_DHCP4_CLI_LOCK));
 	if (ct->val_lst == NULL) {
@@ -778,5 +755,5 @@
 		}
 
-	/* æ¤è¨¼ã¡ãã»ã¼ã¸ãªã¹ãããè©ä¾¡ã¡ãã»ã¼ã¸ãåãåºãã*/
+	/* 検証メッセージリストから評価メッセージを取り出す。*/
 	evl         = ct->val_lst;
 	ct->val_lst = ct->val_lst->next;
@@ -784,25 +761,22 @@
 	syscall(sig_sem(SEM_DHCP4_CLI_LOCK));
 
-	/* è©ä¾¡ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã*/
+	/* 評価メッセージを検証する。*/
 	if (validate_rcv_msg(ct, evl) != E_OK) {
 
-		/* ã¨ã©ã¼ãçºçããè©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+		/* エラーが発生した評価メッセージを受信メッセージ構造体リストに戻す。*/
 		goto rcv_ret;
 		}
 
-	/* åä¿¡ããã¡ãã»ã¼ã¸ã NAK ã®æã®å¦ç */
+	/* 受信したメッセージが NAK の時の処理 */
 	if (evl->type == DHCP4_MTYPE_NAK) {
 
-		/* ãªã¼ã¹ãããæ
-å ±ãè§£æ¾ããã*/
+		/* リースされた情報を解放する。*/
 		rel_lease(ct);
 
-		/* å
-é¨ã¨ã©ã¼ãè¨­å®ãã¦çµäºããã*/
+		/* 内部エラーを設定して終了する。*/
 		return E_PAR;
 		}
 
-	/* REL_INFO ç¶æ
-ã®æã®å¦ç */
+	/* REL_INFO 状態の時の処理 */
 	//cons_printf(CONSOLE_PORTID, "evl_rcv_msg3[s=%d]\n", ct->fsm);
 	if (ct->fsm == DHCP4_FSM_REL_INFO) {
@@ -814,8 +788,8 @@
 		}
 
-	/* è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãè©ä¾¡ããã*/
+	/* 評価メッセージの推奨度を評価する。*/
 	eval_prefer(evl);
 
-	/* æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ããç©ºãªãè©ä¾¡ã¡ãã»ã¼ã¸ãç§»ãã¦çµäºããã*/
+	/* 推奨メッセージリストが空なら評価メッセージを移して終了する。*/
 	if (ct->prf_lst == NULL) {
 		ct->max_prefer = evl->prefer;
@@ -824,11 +798,11 @@
 		}
 
-	/* è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ã¨æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®æå¤§æ¨å¥¨åº¦ãæ¯è¼ããã*/
+	/* 評価メッセージの推奨度と推奨メッセージリストの最大推奨度を比較する。*/
 	if (evl->prefer > ct->max_prefer) {
 
 		/* 
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®æå¤§æ¨å¥¨åº¦ããé«ããã°ã
-		 *  æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ããåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«ç§»ãã
+		 *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より高ければ、
+		 *  推奨メッセージリストを受信メッセージ構造体リストに戻し、
+		 *  評価メッセージを推奨メッセージリストに移す。
 		 */
 		ct->max_prefer = evl->prefer;
@@ -851,6 +825,6 @@
 
 				/*
-				 *  æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«åã DHCP4_OPT_SERVER_ID ã®ã¡ãã»ã¼ã¸ãããã°ã
-				 *  è©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+				 *  推奨メッセージリストに同じ DHCP4_OPT_SERVER_ID のメッセージがあれば、
+				 *  評価メッセージを受信メッセージ構造体リストに戻す。
 				 */
 				goto rcv_ret;
@@ -859,5 +833,5 @@
 
 		/* 
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«ç§»ãã
+		 *  評価メッセージを推奨メッセージリストに移す。
 		 */
 		evl->next   = ct->prf_lst;
@@ -868,6 +842,6 @@
 	/*else */
 		/* 
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®æå¤§æ¨å¥¨åº¦ããä½ããã°ã
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+		 *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より低ければ、
+		 *  評価メッセージを受信メッセージ構造体リストに戻す。
 		 */
 
@@ -881,5 +855,5 @@
 
 /*
- *  select_msg -- æ¨å¥¨ã¡ãã»ã¼ã¸ãé¸æããã
+ *  select_msg -- 推奨メッセージを選択する。
  */
 
@@ -891,16 +865,15 @@
 	syscall(wai_sem(SEM_DHCP4_CLI_LOCK));
 	if (ct->prf_lst == NULL) {
-		/* ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã°ä¸­æ­¢ããã*/
+		/* メッセージを受信していなければ中止する。*/
 		syscall(sig_sem(SEM_DHCP4_CLI_LOCK));
 		return NULL;
 		}
 
-	/* æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®å
-é ­ã®ã¡ãã»ã¼ã¸ãé¸æããã*/
+	/* 推奨メッセージリストの先頭のメッセージを選択する。*/
 	select = ct->prf_lst;
 	ct->prf_lst  = ct->prf_lst->next;
 	select->next = NULL;
 
-	/* é¸æãããªãã£ãæ¤è¨¼ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+	/* 選択されなかった検証メッセージを受信メッセージ構造体リストに戻す。*/
 	if (ct->rcv_lst == NULL)
 		ct->rcv_lst = ct->prf_lst;
@@ -915,8 +888,7 @@
 
 /*
- *  select_ack -- ACK ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã
+ *  select_ack -- ACK メッセージを検証する。
  *
- *    åãå
-¥ãããã¨ãå¯è½ã®æã¯ true ãè¿ãã
+ *    受け入れることが可能の時は true を返す。
  */
 
@@ -929,5 +901,5 @@
 		return false;
 
-	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸ãæ®ã£ã¦ããã°ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+	/* 有効なリース・メッセージが残っていれば、受信メッセージ構造体リストに戻す。*/
 	if (ct->act_msg != NULL) {
 		syscall(wai_sem(SEM_DHCP4_CLI_LOCK));
@@ -937,5 +909,5 @@
 		}
 
-	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸ã«è¨­å®ããã*/
+	/* 有効なリース・メッセージに設定する。*/
 	ct->act_msg = msg;
 	return true;
@@ -943,8 +915,7 @@
 
 /*
- *  select_offer -- OFFER ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã
+ *  select_offer -- OFFER メッセージを検証する。
  *
- *    åãå
-¥ãããã¨ãå¯è½ã®æã¯ true ãè¿ãã
+ *    受け入れることが可能の時は true を返す。
  */
 
@@ -956,6 +927,5 @@
 
 /*
- *  cancel_all_timers -- å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã
+ *  cancel_all_timers -- 全ての TIMER をキャンセルする。
  */
 
@@ -973,6 +943,5 @@
 
 /*
- *  start_select -- DISCOVER ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ SELECT ç¶æ
-ã«é·ç§»ããã
+ *  start_select -- DISCOVER メッセージを送信して SELECT 状態に遷移する。
  */
 
@@ -980,24 +949,22 @@
 start_select (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* éä¿¡ãéå§ããæéãè¨é²ããã*/
+	/* 送信を開始した時間を記録する。*/
 	get_tim(&ct->snd_start);
 
-	/* OFFER ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* OFFER メッセージ受信タイムアウトを設定する。*/
 	DHCP4_CLI_TIMER_LOCK();
 	ct->timers[DHCP4C_TIMER_RCV_OFFER] = SYSTIM2TIMER(TMO_DHCP4C_OFFER);
 	DHCP4_CLI_TIMER_UNLOCK();
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ã«ã­ã¼ã«ã«ãããã¯ã¼ã¯ã¸ã®ãã­ã¼ãã­ã£ã¹ããè¨­å®ããã*/
+	/* 送信先アドレスにローカルネットワークへのブロードキャストを設定する。*/
 	ct->dst.ipaddr = IPV4_ADDRBROADCAST;
 
-	/* éä¿¡ééããªã»ããããã*/
+	/* 送信間隔をリセットする。*/
 	ct->interval = 0;
 
-	/* SELECT ç¶æ
-ã«é·ç§»ããã*/
+	/* SELECT 状態に遷移する。*/
 	ct->fsm = DHCP4_FSM_SELECT;
 
-	/* DISCOVER ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* DISCOVER メッセージを送信する。*/
 	ct->flags |= DHCP4C_FLAG_TMOUT_SND_DISC;
 	DHCP4_CLI_READY_SIGNAL(ct);
@@ -1005,6 +972,5 @@
 
 /*
- *  start_bound -- BOUND ç¶æ
-ã«é·ç§»ããã
+ *  start_bound -- BOUND 状態に遷移する。
  */
 
@@ -1012,41 +978,36 @@
 start_bound (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* ãªã¼ã¹ãããæ
-å ±ãè¨­å®ããã*/
+	/* リースされた情報を設定する。*/
 	set_lease(ct);
 
-	/* ãªã¼ã¹ã®æå¹æéãè¨­å®ããã*/
+	/* リースの有効時間を設定する。*/
 	ct->expire = timer_value(ct->act_msg, DHCP4_OPT_LEASE_TIME, TMO_DHCP4C_DEF_LEASE);
 
-	/* ãªã¼ã¹æéã TMO_DHCP4C_MIN_LEASE ä»¥ä¸ã®æã¯ãTMO_DHCP4C_MIN_LEASE ã«è¨­å®ããã*/
+	/* リース時間が TMO_DHCP4C_MIN_LEASE 以下の時は、TMO_DHCP4C_MIN_LEASE に設定する。*/
 	if (ct->expire < TMO_DHCP4C_MIN_LEASE)
 		ct->expire = TMO_DHCP4C_MIN_LEASE;
 
-	/* RENEW ç¶æ
-ã¾ã§ã®æéãè¨­å®ããã*/
+	/* RENEW 状態までの時間を設定する。*/
 	ct->renew = timer_value(ct->act_msg, DHCP4_OPT_RENEWAL_T1, ct->expire / 2);
 
-	/* REBIND ç¶æ
-ã¾ã§ã®æéãè¨­å®ããã*/
+	/* REBIND 状態までの時間を設定する。*/
 	ct->rebind = timer_value(ct->act_msg, DHCP4_OPT_REBINDING_T2, ct->renew + ct->renew / 2 + ct->renew / 4);
 
-	/* EXPIREãRENEWãREBIND ã¿ã¤ãã¼ãè¨­å®ããã*/
+	/* EXPIRE、RENEW、REBIND タイマーを設定する。*/
 	DHCP4_CLI_TIMER_LOCK();
-	ct->timers[DHCP4C_TIMER_EXPIRE] = SYSTIM2TIMER(ct->expire);		/* EXPIRE      ã¾ã§ã®æé */
-	ct->timers[DHCP4C_TIMER_REBIND] = SYSTIM2TIMER(ct->rebind);		/* REBINDï¼T2ï¼ã¾ã§ã®æé */
-	ct->timers[DHCP4C_TIMER_RENEW]  = SYSTIM2TIMER(ct->renew);		/* RENEW ï¼T1ï¼ã¾ã§ã®æé */
+	ct->timers[DHCP4C_TIMER_EXPIRE] = SYSTIM2TIMER(ct->expire);		/* EXPIRE      までの時間 */
+	ct->timers[DHCP4C_TIMER_REBIND] = SYSTIM2TIMER(ct->rebind);		/* REBIND（T2）までの時間 */
+	ct->timers[DHCP4C_TIMER_RENEW]  = SYSTIM2TIMER(ct->renew);		/* RENEW （T1）までの時間 */
 	DHCP4_CLI_TIMER_UNLOCK();
 
-	/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* BOUND 状態に遷移する。*/
 	ct->fsm = DHCP4_FSM_BOUND;
 
-	/* BIND ãéå§ããæéãè¨é²ããã*/
+	/* BIND を開始した時間を記録する。*/
 	get_tim(&ct->bind_start);
 	}
 
 /*
- *  start_send_request -- REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ãæå®ãããç¶æ
-ã«é·ç§»ããã
+ *  start_send_request -- REQUEST メッセージを送信して、指定された状態に遷移する。
  */
 
@@ -1056,9 +1017,8 @@
 	T_IFNET	*ifp = IF_GET_IFNET();
 
-	/* éä¿¡ãéå§ããæéãè¨é²ããã*/
+	/* 送信を開始した時間を記録する。*/
 	get_tim(&ct->snd_start);
 
-	/* é·ç§»ããç¶æ
-ã RENEW ä»¥å¤ã§ã¯ ACK/NAK ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 遷移する状態が RENEW 以外では ACK/NAK メッセージ受信タイムアウトを設定する。*/
 	if (fsm != DHCP4_FSM_RENEW) { 
 		DHCP4_CLI_TIMER_LOCK();
@@ -1068,7 +1028,6 @@
 
 	/*
-	 *  é·ç§»ããç¶æ
-ã RENEW ã§ã
-	 *  SERVER ID ãªãã·ã§ã³ãããã°ã­ã¼ã«ã«ãããã¯ã¼ã¯ã¸ã®ãã­ã¼ãã­ã£ã¹ããéä¿¡ããã
+	 *  遷移する状態が RENEW で、
+	 *  SERVER ID オプションがあればローカルネットワークへのブロードキャストを送信する。
 	 */
 	if ((fsm == DHCP4_FSM_RENEW) &&
@@ -1078,12 +1037,11 @@
 		ct->dst.ipaddr = IPV4_ADDRBROADCAST;
 
-	/* éä¿¡ééããªã»ããããã*/
+	/* 送信間隔をリセットする。*/
 	ct->interval = 0;
 
-	/* æå®ãããç¶æ
-ã«é·ç§»ããã*/
+	/* 指定された状態に遷移する。*/
 	ct->fsm = fsm;
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* REQUEST メッセージを送信する。*/
 	ct->flags |= DHCP4C_FLAG_TMOUT_SND_REQ;
 	DHCP4_CLI_READY_SIGNAL(ct);
@@ -1091,8 +1049,7 @@
 
 /*
- *  start_rel_info -- ã¢ãã¬ã¹æ
-å ±ãè§£æ¾ããã
+ *  start_rel_info -- アドレス情報を解放する。
  *
- *    æ³¨æ: DHCPv4 ã® RFC2131 ã«ã¯ç¡ã
+ *    注意: DHCPv4 の RFC2131 には無い
  */
 
@@ -1100,10 +1057,8 @@
 start_rel_info (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+	/* 全ての TIMER をキャンセルする。*/
 	cancel_all_timers(ct);
 
-	/* æå¹ãªãªã¼ã¹æ
-å ±ãç¡ããã° SLEEP ã«é·ç§»ããã*/
+	/* 有効なリース情報が無ければ SLEEP に遷移する。*/
 	if (ct->act_msg == NULL) {
 		ct->fsm = DHCP4_FSM_SLEEP;
@@ -1111,9 +1066,8 @@
 		}
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ã«ã­ã¼ã«ã«ãããã¯ã¼ã¯ã¸ã®ãã­ã¼ãã­ã£ã¹ããè¨­å®ããã*/
+	/* 送信先アドレスにローカルネットワークへのブロードキャストを設定する。*/
 	ct->dst.ipaddr = IPV4_ADDRBROADCAST;
 
-	/* RELEASE ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* RELEASE メッセージを送信する。*/
 	ct->flags |= DHCP4C_FLAG_TMOUT_SND_REL;
 	DHCP4_CLI_READY_SIGNAL(ct);
@@ -1121,6 +1075,5 @@
 
 /*
- *  setup_dhcp_com_msg -- DHCP ã¡ãã»ã¼ã¸ã®å
-±éé¨åãä½æããã
+ *  setup_dhcp_com_msg -- DHCP メッセージの共通部分を作成する。
  */
 
@@ -1133,5 +1086,5 @@
 	ct->snd_msg->len = sizeof(ct->snd_msg->msg);
 
-	/* ãããé¨ãè¨­å®ããã*/
+	/* ヘッダ部を設定する。*/
 	ct->snd_msg->msg.op = op;
 	ct->snd_msg->msg.htype = DHCP4_HWA_TYPE_ETHER;
@@ -1139,16 +1092,16 @@
 	HOST2MSG32(ct->snd_msg->msg.xid, ct->xid);
 
-	/* MAC ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* MAC アドレスを設定する。*/
 	memcpy(&ct->snd_msg->msg.chaddr, &ct->sc->ifaddr.lladdr, ETHER_ADDR_LEN);
 
 	/*
-	 *  ãªãã·ã§ã³é¨ãè¨­å®ããã
+	 *  オプション部を設定する。
 	 */
 
-	/* RFC1048 ã«å®ç¾©ããã¦ãããã¸ãã¯çªå·ãè¨­å®ããã*/
+	/* RFC1048 に定義されているマジック番号を設定する。*/
 	memcpy(&ct->snd_msg->msg.options, magicno, DHCP4_MAGIC_LEN);
 	option = ct->snd_msg->msg.options + DHCP4_MAGIC_LEN;
 
-	/* DHCP ã¡ãã»ã¼ã¸ã¿ã¤ããè¨­å®ããã*/
+	/* DHCP メッセージタイプを設定する。*/
 	*(option ++) = DHCP4_OPT_MSG_TYPE;
 	*(option ++) = 1;
@@ -1159,5 +1112,5 @@
 
 /*
- *  setup_release_msg -- RELEASE ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_release_msg -- RELEASE メッセージを作成する。
  */
 
@@ -1167,5 +1120,5 @@
 	uint8_t *opt, *ref_opt;
 
-	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸ããªããã°ã¨ã©ã¼ */
+	/* 有効なリース・メッセージがなければエラー */
 	if (ref == NULL)
 		return E_PAR;
@@ -1176,7 +1129,6 @@
 
 	/*
-	 *  ãµã¼ã IDï¼server-ipï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
+	 *  サーバ ID（server-ip）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
 	 */
 	if ((ref_opt = find_option(ref, DHCP4_OPT_SERVER_ID, sizeof(T_IN4_ADDR))) == NULL)
@@ -1188,7 +1140,6 @@
 
 	/* 
-	 *  ã¯ã©ã¤ã¢ã³ã IDï¼MAC ã¢ãã¬ã¹ï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
+	 *  クライアント ID（MAC アドレス）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
 	 */
 	*(opt ++) = DHCP4_OPT_CLIENT_ID;
@@ -1198,15 +1149,14 @@
 	opt += ETHER_ADDR_LEN;
 
-	/* ãªãã·ã§ã³ã®çµäºãè¨­å®ããã*/
+	/* オプションの終了を設定する。*/
 	*(opt ++) = DHCP4_OPT_END;
 
 	/*
-	 *  ã¯ã©ã¤ã¢ã³ã IP ã¢ãã¬ã¹ï¼ciaddrï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
+	 *  クライアント IP アドレス（ciaddr）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
 	 */
 	HOST2MSG32(ct->snd_msg->msg.ciaddr, IF_GET_IFNET()->in4_ifaddr.addr);
 
-	/* ã¡ãã»ã¼ã¸é·ãè¨­å®ããã*/
+	/* メッセージ長を設定する。*/
 	ct->snd_msg->len = sizeof(ct->snd_msg->msg) - DHCP4_DFLT_OPT_LEN
 	             + (opt - (uint8_t*)&ct->snd_msg->msg.options);
@@ -1216,5 +1166,5 @@
 
 /*
- *  setup_request_msg -- REQUEST ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_request_msg -- REQUEST メッセージを作成する。
  */
 
@@ -1228,6 +1178,5 @@
 #endif
 
-	/* åç
-§ããã¡ãã»ã¼ã¸ããªããã°ã¨ã©ã¼ */
+	/* 参照するメッセージがなければエラー */
 	if (ref == NULL)
 		return E_PAR;
@@ -1239,5 +1188,5 @@
 #if defined(DHCP4_CLI_CFG_REQUIRED_OLIST) || defined(DHCP4_CLI_CFG_REQUEST_OLIST)
 
-	/* è¿½å ã®ãªãã·ã§ã³ãè¨­å®ããã*/
+	/* 追加のオプションを設定する。*/
 
 	*opt  = DHCP4_OPT_REQ_PARAM;
@@ -1246,5 +1195,5 @@
 #if defined(DHCP4_CLI_CFG_REQUIRED_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãªã¹ããè¨­å®ããã*/
+	/* 要求オプションリストを設定する。*/
 	if (sizeof(required_plist) > 0) {
 		memcpy(opt, required_plist, sizeof(required_plist));
@@ -1257,5 +1206,5 @@
 #if defined(DHCP4_CLI_CFG_REQUEST_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãªã¹ããè¨­å®ããã*/
+	/* 要求オプションリストを設定する。*/
 	if (sizeof(request_plist) > 0) {
 		memcpy(opt, request_plist, sizeof(request_plist));
@@ -1271,7 +1220,6 @@
 
 	/*
-	 *  ãµã¼ã IDï¼server-ipï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
+	 *  サーバ ID（server-ip）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
 	 */
 	if (ct->fsm == DHCP4_FSM_REQUEST) {
@@ -1285,9 +1233,8 @@
 
 	/*
-	 *  è¦æ± IP ã¢ãã¬ã¹ï¼requested-ipï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
-	 *  RFC2131 ã§ã¯ãDHCP4_FSM_RENEW ã®æ MUST NOT ã«ãªã£ã¦ãããã
-	 *  MUST ã®ããã§ããã
+	 *  要求 IP アドレス（requested-ip）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
+	 *  RFC2131 では、DHCP4_FSM_RENEW の時 MUST NOT になっているが、
+	 *  MUST のようである。
 	 */
 	*(opt ++) = DHCP4_OPT_REQ_IPV4;
@@ -1295,6 +1242,5 @@
 	if (ct->fsm == DHCP4_FSM_REQUEST || ct->fsm == DHCP4_FSM_INIT_REBOOT ||
 	    ct->fsm == DHCP4_FSM_RENEW   || ct->fsm == DHCP4_FSM_REBIND)
-	 	/* åç
-§ã¡ãã»ã¼ã¸ã¨åã IP ã¢ãã¬ã¹ï¼requested-ipï¼ãè¦æ±ããã*/
+	 	/* 参照メッセージと同じ IP アドレス（requested-ip）を要求する。*/
 		memcpy(opt, (uint8_t*)&ref->msg.yiaddr, sizeof(ref->msg.yiaddr));
 	else
@@ -1303,7 +1249,6 @@
 
 	/* 
-	 *  ã¯ã©ã¤ã¢ã³ã IDï¼MAC ã¢ãã¬ã¹ï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
+	 *  クライアント ID（MAC アドレス）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
 	 */
 	*(opt ++) = DHCP4_OPT_CLIENT_ID;
@@ -1313,11 +1258,10 @@
 	opt += ETHER_ADDR_LEN;
 
-	/* ãªãã·ã§ã³ã®çµäºãè¨­å®ããã*/
+	/* オプションの終了を設定する。*/
 	*(opt ++) = DHCP4_OPT_END;
 
 	/*
-	 *  ã¯ã©ã¤ã¢ã³ã IP ã¢ãã¬ã¹ï¼ciaddrï¼ãè¨­å®ããã
-	 *  RFC2131 4.4.1 Initialization and allocation of network address åç
-§
+	 *  クライアント IP アドレス（ciaddr）を設定する。
+	 *  RFC2131 4.4.1 Initialization and allocation of network address 参照
 	 */
 	if (ct->fsm == DHCP4_FSM_RENEW || ct->fsm == DHCP4_FSM_REBIND)
@@ -1326,5 +1270,5 @@
 		HOST2MSG32(ct->snd_msg->msg.ciaddr, IPV4_ADDRANY);
 
-	/* ã¡ãã»ã¼ã¸é·ãè¨­å®ããã*/
+	/* メッセージ長を設定する。*/
 	ct->snd_msg->len = sizeof(ct->snd_msg->msg) - DHCP4_DFLT_OPT_LEN
 	             + (opt - (uint8_t*)&ct->snd_msg->msg.options);
@@ -1333,5 +1277,5 @@
 
 /*
- *  setup_discover_msg -- DISCOVER ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_discover_msg -- DISCOVER メッセージを作成する。
  */
 
@@ -1351,5 +1295,5 @@
 #if defined(DHCP4_CLI_CFG_REQUIRED_OLIST) || defined(DHCP4_CLI_CFG_REQUEST_OLIST)
 
-	/* è¿½å ã®ãªãã·ã§ã³ãè¨­å®ããã*/
+	/* 追加のオプションを設定する。*/
 
 	*opt  = DHCP4_OPT_REQ_PARAM;
@@ -1358,5 +1302,5 @@
 #if defined(DHCP4_CLI_CFG_REQUIRED_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãªã¹ããè¨­å®ããã*/
+	/* 要求オプションリストを設定する。*/
 	if (sizeof(required_plist) > 0) {
 		memcpy(opt, required_plist, sizeof(required_plist));
@@ -1369,5 +1313,5 @@
 #if defined(DHCP4_CLI_CFG_REQUEST_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãªã¹ããè¨­å®ããã*/
+	/* 要求オプションリストを設定する。*/
 	if (sizeof(request_plist) > 0) {
 		memcpy(opt, request_plist, sizeof(request_plist));
@@ -1382,6 +1326,5 @@
 #endif	/* of #if defined(DHCP4_CLI_CFG_REQUIRED_OLIST) || defined(DHCP4_CLI_CFG_REQUEST_OLIST) */
 
-	/* æ¢ã«ã¢ãã¬ã¹æ
-å ±ããªã¼ã¹ããã¦ããã°ãåã IP ã¢ãã¬ã¹ãè¦æ±ããã*/
+	/* 既にアドレス情報がリースされていれば、同じ IP アドレスを要求する。*/
 	if (ct->act_msg != NULL) {
 		*(opt ++) = DHCP4_OPT_REQ_IPV4;
@@ -1391,5 +1334,5 @@
 		}
 
-	/* ã¯ã©ã¤ã¢ã³ã IDï¼MAC ã¢ãã¬ã¹ï¼ãè¨­å®ããã*/
+	/* クライアント ID（MAC アドレス）を設定する。*/
 	*(opt ++) = DHCP4_OPT_CLIENT_ID;
 	*(opt ++) = ETHER_ADDR_LEN + 1;
@@ -1398,12 +1341,11 @@
 	opt += ETHER_ADDR_LEN;
 
-	/* ãªãã·ã§ã³ã®çµäºãè¨­å®ããã*/
+	/* オプションの終了を設定する。*/
 	*(opt ++) = DHCP4_OPT_END;
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* 送信先アドレスを設定する。*/
 	ct->dst.ipaddr = IPV4_ADDRBROADCAST;
 
-	/* ã¡ãã»ã¼ã¸é·ãè¨­å®ããã*/
+	/* メッセージ長を設定する。*/
 	ct->snd_msg->len = sizeof(ct->snd_msg->msg) - DHCP4_DFLT_OPT_LEN
 	             + (opt - (uint8_t*)&ct->snd_msg->msg.options);
@@ -1412,5 +1354,5 @@
 
 /*
- *  ack_msg_timeout -- ACK/NAK ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  ack_msg_timeout -- ACK/NAK メッセージ受信タイムアウト処理
  */
 
@@ -1418,10 +1360,9 @@
 ack_msg_timeout (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* ACK ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããã°ãBOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* ACK メッセージを受信していれば。BOUND 状態に遷移する。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 	if (select_ack(ct)) {
 
-		/* REQUEST ã¡ãã»ã¼ã¸éä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* REQUEST メッセージ送信タイマーを停止する。*/
 		DHCP4_CLI_TIMER_LOCK();
 		ct->timers[DHCP4C_TIMER_SND_REQ] = 0;
@@ -1429,7 +1370,6 @@
 
 		/*
-		 *  ç¶æ
-ã REQUEST ã®æã¯ã
-		 *  OFFER ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+		 *  状態が REQUEST の時は、
+		 *  OFFER メッセージを受信メッセージ構造体リストに戻す。
 		 */
 		if (ct->fsm == DHCP4_FSM_REQUEST && ct->off_msg != NULL) {
@@ -1441,6 +1381,5 @@
 			}
 
-		/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+		/* BOUND 状態に遷移する。*/
 		start_bound(ct);
 		return;
@@ -1448,6 +1387,5 @@
 	else {
 
-		/* ãªã¼ã¹æ
-å ±ãè§£æ¾ããã*/
+		/* リース情報を解放する。*/
 		rel_lease(ct);
 
@@ -1457,5 +1395,5 @@
 
 /*
- *  send_request_msg -- REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_request_msg -- REQUEST メッセージを送信する。
  */
 
@@ -1469,13 +1407,12 @@
 	uint16_t	secs;
 
-	/* ã¿ã¤ã ã¢ã¦ããã©ã°ãã¯ãªã¢ã¼ããã*/
+	/* タイムアウトフラグをクリアーする。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 
-	/* ACK ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããã°ãBOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* ACK メッセージを受信していれば。BOUND 状態に遷移する。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 	if (select_ack(ct)) {
 
-		/* ACK/NAK ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* ACK/NAK メッセージ受信タイマーを停止する。*/
 		DHCP4_CLI_TIMER_LOCK();
 		ct->timers[DHCP4C_TIMER_RCV_ACK] = 0;
@@ -1483,7 +1420,6 @@
 
 		/*
-		 *  ç¶æ
-ã REQUEST ã®æã¯ã
-		 *  OFFER ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+		 *  状態が REQUEST の時は、
+		 *  OFFER メッセージを受信メッセージ構造体リストに戻す。
 		 */
 		if (ct->fsm == DHCP4_FSM_REQUEST && ct->off_msg != NULL) {
@@ -1495,11 +1431,10 @@
 			}
 
-		/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+		/* BOUND 状態に遷移する。*/
 		start_bound(ct);
 		return;
 		}
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* REQUEST メッセージを作成する。*/
 	if (ct->fsm == DHCP4_FSM_REQUEST)
 		ref = ct->off_msg;
@@ -1512,11 +1447,11 @@
 		}
 
-	/* éä¿¡ãéå§ãã¦ããã®æéãå¾ãã*/
+	/* 送信を開始してからの時間を得る。*/
 	get_tim(&time);
 	interval = time - ct->snd_start;
 
 	/*
-	 * éä¿¡ãéå§ãã¦ããã®æéï¼ç§ï¼ãã¡ãã»ã¼ã¸ã«è¨­å®ããã
-	 * æå¤§å¤ã¯ 65535ã
+	 * 送信を開始してからの時間（秒）をメッセージに設定する。
+	 * 最大値は 65535。
 	 */
 	if (ct->fsm == DHCP4_FSM_REQUEST)
@@ -1530,5 +1465,5 @@
 	HOST2MSG16(ct->snd_msg->msg.secs, secs);
 
-	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* ノンブロッキングコールでメッセージを送信する。*/
 	error = udp_snd_dat(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -1538,24 +1473,22 @@
 		}
 
-	/* éä¿¡ééãè¨­å®ããã*/
+	/* 送信間隔を設定する。*/
 	if (ct->interval == 0)
-		/* æªè¨­å® */
+		/* 未設定 */
 		ct->interval = TMO_DHCP4C_INIT_INTVL;
 	else
-		/* ããã¯ãªãã¢ã«ã´ãªãºã ã§ 2åã«ããï¼ä¹±æ°ä½¿ç¨ï¼éä¿¡ééãå ç®ããã*/
+		/* バックオフアルゴリズムで 2倍にした（乱数使用）送信間隔を加算する。*/
 		ct->interval += (netapp_rand() >> 2) % (ct->interval << 1);
 	
-	/* éä¿¡å¨æã®å¶éå¤ãè¶
-ããªãããã«ããã*/
+	/* 送信周期の制限値を超えないようにする。*/
 	if (ct->interval > TMO_DHCP4C_MAX_BACKOFF)
 		ct->interval = (TMO_DHCP4C_MAX_BACKOFF >> 1) + ((netapp_rand() >> 2) % TMO_DHCP4C_MAX_BACKOFF);
 
-	/* ãªã¼ã¹æéã®ã¿ã¤ã ã¢ã¦ããå
-éãã */
+	/* リース時間のタイムアウト【先送り】 */
 	if (ct->fsm != DHCP4_FSM_REQUEST &&
 	    TIMEC_GT(ct->interval + time, ct->expire + ct->bind_start))
 		ct->interval = ct->expire + ct->bind_start - time + SYSTIM_HZ;
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	DHCP4_CLI_TIMER_LOCK();
 	ct->timers[DHCP4C_TIMER_SND_REQ] = SYSTIM2TIMER(ct->interval);
@@ -1564,5 +1497,5 @@
 
 /*
- *  send_release_msg -- RELEASE ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_release_msg -- RELEASE メッセージを送信する。
  */
 
@@ -1572,8 +1505,8 @@
 	ER		error;
 
-	/* ã¿ã¤ã ã¢ã¦ããã©ã°ãã¯ãªã¢ã¼ããã*/
+	/* タイムアウトフラグをクリアーする。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 
-	/* RELEASE ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* RELEASE メッセージを作成する。*/
 	if ((error = setup_release_msg(ct, ct->act_msg)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP4C] error, setup release message: %s", itron_strerror(error));
@@ -1582,9 +1515,8 @@
 		}
 
-	/* ãªã¼ã¹æ
-å ±ãè§£æ¾ããã*/
+	/* リース情報を解放する。*/
 	rel_lease(ct);
 
-	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* ノンブロッキングコールでメッセージを送信する。*/
 	error = udp_snd_dat(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -1594,15 +1526,13 @@
 		}
 
-	/* ã¡ãã»ã¼ã¸éä¿¡å¾
-ã¡ãè¡ãã*/
+	/* メッセージ送信待ちを行う。*/
 	DHCP4_CLI_READY_WAIT(ct);
 
-	/* SLEEP ç¶æ
-ã«é·ç§»ããã*/
+	/* SLEEP 状態に遷移する。*/
 	ct->fsm = DHCP4_FSM_SLEEP;
 	}
 
 /*
- *  offer_msg_timeout -- OFFER ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  offer_msg_timeout -- OFFER メッセージ受信タイムアウト処理
  */
 
@@ -1610,16 +1540,14 @@
 offer_msg_timeout (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* OFFER ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããã°ãREQUEST ç¶æ
-ã«é·ç§»ããã*/
+	/* OFFER メッセージを受信していれば。REQUEST 状態に遷移する。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 	if (select_offer(ct)) {
 
-		/* DISCOVER ã¡ãã»ã¼ã¸éä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* DISCOVER メッセージ送信タイマーを停止する。*/
 		DHCP4_CLI_TIMER_LOCK();
 		ct->timers[DHCP4C_TIMER_SND_DISC] = 0;
 		DHCP4_CLI_TIMER_UNLOCK();
 
-		/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ REQUEST ç¶æ
-ã«é·ç§»ããã*/
+		/* REQUEST メッセージを送信して REQUEST 状態に遷移する。*/
 		start_send_request(ct, DHCP4_FSM_REQUEST);
 		}
@@ -1629,5 +1557,5 @@
 
 /*
- *  send_discover_msg -- DISCOVERã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_discover_msg -- DISCOVERメッセージを送信する。
  */
 
@@ -1639,24 +1567,22 @@
 	RELTIM	interval;
 
-	/* ã¿ã¤ã ã¢ã¦ããã©ã°ãã¯ãªã¢ã¼ããã*/
+	/* タイムアウトフラグをクリアーする。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 
-	/* OFFER ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããã°ãREQUEST ç¶æ
-ã«é·ç§»ããã*/
+	/* OFFER メッセージを受信していれば。REQUEST 状態に遷移する。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 	if (select_offer(ct)) {
 
-		/* OFFER ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* OFFER メッセージ受信タイマーを停止する。*/
 		DHCP4_CLI_TIMER_LOCK();
 		ct->timers[DHCP4C_TIMER_RCV_OFFER] = 0;
 		DHCP4_CLI_TIMER_UNLOCK();
 
-		/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ REQUEST ç¶æ
-ã«é·ç§»ããã*/
+		/* REQUEST メッセージを送信して REQUEST 状態に遷移する。*/
 		start_send_request(ct, DHCP4_FSM_REQUEST);
 		return;
 		}
 
-	/* DISCOVER ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* DISCOVER メッセージを作成する。*/
 	if ((error = setup_discover_msg(ct)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP4C] error, setup discover message: %s", itron_strerror(error));
@@ -1665,11 +1591,11 @@
 		}
 
-	/* éä¿¡ãéå§ãã¦ããã®æéãå¾ãã*/
+	/* 送信を開始してからの時間を得る。*/
 	get_tim(&time);
 	interval = time - ct->snd_start;
 
 	/*
-	 * éä¿¡ãéå§ãã¦ããã®æéï¼ç§ï¼ãã¡ãã»ã¼ã¸ã«è¨­å®ããã
-	 * æå¤§å¤ã¯ 65535ã
+	 * 送信を開始してからの時間（秒）をメッセージに設定する。
+	 * 最大値は 65535。
 	 */
 	if (SYSTIM2SEC(interval) < 65536)
@@ -1679,5 +1605,5 @@
 	HOST2MSG16(ct->snd_msg->msg.secs, ct->secs);
 
-	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* ノンブロッキングコールでメッセージを送信する。*/
 	error = udp_snd_dat(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -1687,23 +1613,21 @@
 		}
 
-	/* éä¿¡ééãè¨­å®ããã*/
+	/* 送信間隔を設定する。*/
 	if (ct->interval == 0)
-		/* æªè¨­å® */
+		/* 未設定 */
 		ct->interval = TMO_DHCP4C_INIT_INTVL;
 	else
-		/* ããã¯ãªãã¢ã«ã´ãªãºã ã§ 2åã«ããï¼ä¹±æ°ä½¿ç¨ï¼éä¿¡ééãå ç®ããã*/
+		/* バックオフアルゴリズムで 2倍にした（乱数使用）送信間隔を加算する。*/
 		ct->interval += (netapp_rand() >> 2) % (ct->interval << 1);
 	
-	/* éä¿¡å¨æã®å¶éå¤ãè¶
-ããªãããã«ããã*/
+	/* 送信周期の制限値を超えないようにする。*/
 	if (ct->interval > TMO_DHCP4C_MAX_BACKOFF)
 		ct->interval = (TMO_DHCP4C_MAX_BACKOFF >> 1) + ((netapp_rand() >> 2) % TMO_DHCP4C_MAX_BACKOFF);
 
-	/* OFFER ã¡ãã»ã¼ã¸ã®åä¿¡ã¿ã¤ã ã¢ã¦ããè¶
-ããªãããã«èª¿æ´ããã*/
+	/* OFFER メッセージの受信タイムアウトを超えないように調整する。*/
 	if (TIMEC_GT(time + ct->interval, ct->snd_start + TMO_DHCP4C_OFFER))
 		ct->interval = (TMO_DHCP4C_INIT_INTVL + TMO_DHCP4C_OFFER) - time + 1;
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	DHCP4_CLI_TIMER_LOCK();
 	ct->timers[DHCP4C_TIMER_SND_DISC] = SYSTIM2TIMER(ct->interval);
@@ -1714,5 +1638,5 @@
 
 /*
- *  dhcpc_timer -- TIMER ç®¡ç
+ *  dhcpc_timer -- TIMER 管理
  */
 
@@ -1734,5 +1658,5 @@
 	DHCP4_CLI_TIMER_UNLOCK();
 
-	/* 1ç§æ¯ã«ã¿ã¤ã ã¢ã¦ãããã*/
+	/* 1秒毎にタイムアウトする。*/
 	timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ);
 	}
@@ -1741,5 +1665,5 @@
 
 /*
- *  expire_timeout -- EXPIRE ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  expire_timeout -- EXPIRE タイムアウト処理
  */
 
@@ -1749,18 +1673,15 @@
 	//ER	error;
 
-	/* ã¿ã¤ã ã¢ã¦ããã©ã°ãã¯ãªã¢ã¼ããã*/
+	/* タイムアウトフラグをクリアーする。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 
-	/* ç¶æ
-ã REQUEST ã®æã¯ä½ãããªãã*/
+	/* 状態が REQUEST の時は何もしない。*/
 	if (ct->fsm == DHCP4_FSM_REQUEST)
 		return;
 
-	/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+	/* 全ての TIMER をキャンセルする。*/
 	cancel_all_timers(ct);
 
-	/* ãªã¼ã¹ãããæ
-å ±ãè§£æ¾ããã*/
+	/* リースされた情報を解放する。*/
 	rel_lease(ct);
 
@@ -1769,5 +1690,5 @@
 
 /*
- *  rebind_timeout -- REBIND ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  rebind_timeout -- REBIND タイムアウト処理
  */
 
@@ -1775,18 +1696,16 @@
 rebind_timeout (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* ã¿ã¤ã ã¢ã¦ããã©ã°ãã¯ãªã¢ã¼ããã*/
+	/* タイムアウトフラグをクリアーする。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 
-	/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+	/* 全ての TIMER をキャンセルする。*/
 	cancel_all_timers(ct);
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ REBIND ç¶æ
-ã«é·ç§»ããã*/
+	/* REQUEST メッセージを送信して REBIND 状態に遷移する。*/
 	start_send_request(ct, DHCP4_FSM_REBIND);
 	}
 
 /*
- *  renew_timeout -- RENEW ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  renew_timeout -- RENEW タイムアウト処理
  */
 
@@ -1794,14 +1713,13 @@
 renew_timeout (T_DHCP4_CLI_CONTEXT *ct)
 {
-	/* ã¿ã¤ã ã¢ã¦ããã©ã°ãã¯ãªã¢ã¼ããã*/
+	/* タイムアウトフラグをクリアーする。*/
 	ct->flags &= ~DHCP4C_FLAG_TMOUT_MASK;
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ RENEW ç¶æ
-ã«é·ç§»ããã*/
+	/* REQUEST メッセージを送信して RENEW 状態に遷移する。*/
 	start_send_request(ct, DHCP4_FSM_RENEW);
 	}
 
 /*
- *  dispatch_timeout -- ã¿ã¤ã ã¢ã¦ãããæã®å¦ç
+ *  dispatch_timeout -- タイムアウトした時の処理
  */
 
@@ -1853,5 +1771,5 @@
 
 /*
- *  dispatch_event -- ã¤ãã³ãæ¯ã®å¦ç
+ *  dispatch_event -- イベント毎の処理
  */
 
@@ -1863,6 +1781,5 @@
 	while (ct->fsm != DHCP4_FSM_SLEEP && error == E_OK) {
 
-		/* ã¡ãã»ã¼ã¸ã®åä¿¡ã¨ã¿ã¤ã ã¢ã¦ããå¾
-ã¤ã*/
+		/* メッセージの受信とタイムアウトを待つ。*/
 		DHCP4_CLI_READY_WAIT(ct);
 
@@ -1886,5 +1803,5 @@
 
 /*
- *  init_context -- DHCP ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½ãåæåããã
+ *  init_context -- DHCP クライアントコンテキスト構造体を初期化する。
  */
 
@@ -1901,5 +1818,5 @@
 
 /*
- *  rel_cli_msg -- ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã
+ *  rel_cli_msg -- メッセージ構造体を解放する。
  */
 
@@ -1933,5 +1850,5 @@
 
 /*
- *  init_cli_msg -- åã¡ãã»ã¼ã¸æ§é ä½ãåæåããã
+ *  init_cli_msg -- 各メッセージ構造体を初期化する。
  */
 
@@ -1943,5 +1860,5 @@
 	int		count;
 
-	/* éä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãç²å¾ããã*/
+	/* 送信メッセージ構造体を獲得する。*/
 	if ((error = tget_mpf(MPF_DHCP4_CLI_MSG, (void*)&ct->snd_msg, TMO_DHCP4C_MPF_GET)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP4C] error, tget_mpf() for send: %s.", itron_strerror(error));
@@ -1950,6 +1867,6 @@
 
 	/*
-	 *  æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãããå ´åã¯ã
-	 *  ç²å¾ããåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã®æ§é ä½ã 1æ¸ããã
+	 *  有効なリース・メッセージ構造体がある場合は、
+	 *  獲得する受信メッセージ構造体リストの構造体を 1減らす。
 	 */
 	if (ct->act_msg == NULL)
@@ -1958,5 +1875,5 @@
 		count = NUM_DHCP4_MSG_LIST - 1;
 
-	/* åä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãç²å¾ããã*/
+	/* 受信メッセージ構造体を獲得する。*/
 	while (count --> 0) {
 		if ((error = tget_mpf(MPF_DHCP4_CLI_MSG, (void*)&cell, TMO_DHCP4C_MPF_GET)) != E_OK) {
@@ -1972,6 +1889,5 @@
 
 /*
- *  dhcp4c_renew_info -- ãããã¯ã¼ã¯æ
-å ±ãååå¾ããã
+ *  dhcp4c_renew_info -- ネットワーク情報を再取得する。
  */
 
@@ -1981,6 +1897,5 @@
 	if (context.fsm == DHCP4_FSM_BOUND) {
 
-		/* REL_INFO ç¶æ
-ã«é·ç§»ããå¾ã« SLEEP ãè§£é¤ããããã«è¨­å®ããã*/
+		/* REL_INFO 状態に遷移した後に SLEEP を解除するように設定する。*/
 		context.flags |= DHCP4C_FLAG_RENEW;
 		start_rel_info(&context);
@@ -1989,5 +1904,5 @@
 	else if (context.fsm == DHCP4_FSM_SLEEP) {
 
-		/* SLEEP ãè§£é¤ããã*/
+		/* SLEEP を解除する。*/
 		context.fsm = DHCP4_FSM_WAKE;
 		context.timer = 0;
@@ -2000,6 +1915,5 @@
 
 /*
- *  dhcp4c_rel_info -- DHCP ã§è¨­å®ããããããã¯ã¼ã¯æ
-å ±ãè§£æ¾ããã
+ *  dhcp4c_rel_info -- DHCP で設定されたネットワーク情報を解放する。
  */
 
@@ -2007,6 +1921,5 @@
 dhcp4c_rel_info (void)
 {
-	/* REL_INFO ç¶æ
-ã«é·ç§»ããã*/
+	/* REL_INFO 状態に遷移する。*/
 	start_rel_info(&context);
 	return E_OK;
@@ -2014,6 +1927,5 @@
 
 /*
- *  dhcp4c_get_info -- DHCP ã§è¨­å®ããããããã¯ã¼ã¯æ
-å ±ãè¿ãã
+ *  dhcp4c_get_info -- DHCP で設定されたネットワーク情報を返す。
  */
 
@@ -2038,5 +1950,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -2049,5 +1961,5 @@
 	len = *(ER_UINT*)p_parblk;
 	if (len < 0 && len != E_RLWAI) {
-		/* E_RLWAI ä»¥å¤ã§ã0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ãæå³ãã¦ããã*/
+		/* E_RLWAI 以外で、0 以下の場合は、エラーを意味している。*/
 		syslog(LOG_NOTICE, "[DHCPC(CBR)] error: %s, fncd: %s", itron_strerror(len), in_strtfn(fncd));
 		}
@@ -2055,9 +1967,9 @@
 		if (fncd == TEV_UDP_RCV_DAT) {
 
-			/* åä¿¡ã¡ãã»ã¼ã¸ãªã¹ããç©ºã®æã¯ãåä¿¡ããªãã§ãã¼ã¿ã°ã©ã ãæ¨ã¦ãã*/
+			/* 受信メッセージリストが空の時は、受信しないでデータグラムを捨てる。*/
 			if (context.rcv_lst == NULL) 
 				syslog(LOG_NOTICE, "[DHCP4C(CBR)] receive buffer all busy.");
 			else {
-				/* ã¡ãã»ã¼ã¸ãåä¿¡ããã¡ãã»ã¼ã¸æ§é ä½ãæºåããã*/
+				/* メッセージを受信するメッセージ構造体を準備する。*/
 				syscall(wai_sem(SEM_DHCP4_CLI_LOCK));
 				msg = context.rcv_lst;
@@ -2065,5 +1977,5 @@
 				syscall(sig_sem(SEM_DHCP4_CLI_LOCK));
 
-				/* ã¡ãã»ã¼ã¸ãåä¿¡ããã*/
+				/* メッセージを受信する。*/
 				len = udp_rcv_dat(context.cepid, &msg->srv, &msg->msg, sizeof(msg->msg), TMO_POL);
 
@@ -2071,5 +1983,5 @@
 				msg->len = len;
 				if (len >= 0) {
-					/* åä¿¡ããã¡ãã»ã¼ã¸ãæ¤è¨¼ã¡ãã»ã¼ã¸ãªã¹ãã«ç§»ãã*/
+					/* 受信したメッセージを検証メッセージリストに移す。*/
 					msg->next = context.val_lst;
 					context.val_lst = msg;
@@ -2077,5 +1989,5 @@
 					}
 				else {
-					/* ã¡ãã»ã¼ã¸æ§é ä½ãåä¿¡ã¡ãã»ã¼ã¸ãªã¹ãã«æ»ãã*/
+					/* メッセージ構造体を受信メッセージリストに戻す。*/
 					context.error = len;
 					msg->next = context.rcv_lst;
@@ -2093,5 +2005,5 @@
 
 /*
- *  dhcp4_cli_task -- DHCP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯
+ *  dhcp4_cli_task -- DHCP クライアントタスク
  */
 
@@ -2109,5 +2021,5 @@
 	ct = &context;
 
-	/* DHCP ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½ãåæåããã*/
+	/* DHCP クライアントコンテキスト構造体を初期化する。*/
 	init_context(ct, tskid, (ID)exinf);
 	ct->fsm = DHCP4_FSM_SLEEP;
@@ -2115,8 +2027,8 @@
 	while (true) {
 
-		/* ãªã¼ã¹ãè§£æ¾å¾ãååå¾ãæå®ããã¦ããªããã°ä¼æ­¢ããã*/
+		/* リースを解放後、再取得が指定されていなければ休止する。*/
 		if (!(ct->flags & DHCP4C_FLAG_RENEW)) {
 
-			/* ä¼æ­¢ããã*/
+			/* 休止する。*/
 			if (error == E_OK) {
 				if (ct->fsm != DHCP4_FSM_SLEEP)
@@ -2132,26 +2044,24 @@
 		ct->error = E_OK;
 
-		/* 1ç§æ¯ã«ã¿ã¤ã ã¢ã¦ãããããã«ã¿ã¤ãã¼ãè¨­å®ããã*/
+		/* 1秒毎にタイムアウトするようにタイマーを設定する。*/
 		timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP4C_TIMER_HZ);
 
-		/* ã¡ãã»ã¼ã¸æ§é ä½ãåæåããã*/
+		/* メッセージ構造体を初期化する。*/
 		if ((error = init_cli_msg(ct)) == E_OK) {
 
-			/* SELECT ç¶æ
-ã«é·ç§»ããã*/
+			/* SELECT 状態に遷移する。*/
 			start_select(ct);
 
-			/* ã¡ã¤ã³ã«ã¼ã */
+			/* メインループ */
 			error = dispatch_event(ct);
 			}
 
-		/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+		/* 全ての TIMER をキャンセルする。*/
 		cancel_all_timers(ct);
 
-		/* ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* タイマーを停止する。*/
 		untimeout((callout_func)dhcpc_timer, ct);
 
-		/* ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã*/
+		/* メッセージ構造体を解放する。*/
 		rel_cli_msg (ct);
 		}
@@ -2164,5 +2074,5 @@
 {
 	T_DHCP4_CLI_CONTEXT *ct = &context;
-	/* DHCP ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½ãåæåããã*/
+	/* DHCP クライアントコンテキスト構造体を初期化する。*/
 	init_context(ct, tskid, cepid);
 	ct->fsm = DHCP4_FSM_SLEEP;
@@ -2192,5 +2102,5 @@
 		return;
 
-	/* 1ç§æ¯ã«ã¿ã¤ã ã¢ã¦ãããããã«ã¿ã¤ãã¼ãè¨­å®ããã*/
+	/* 1秒毎にタイムアウトするようにタイマーを設定する。*/
 	ct->timer = 1000 * 1000;
 
@@ -2214,5 +2124,5 @@
 		ct->error = E_OK;
 
-		/* ã¡ãã»ã¼ã¸æ§é ä½ãåæåããã*/
+		/* メッセージ構造体を初期化する。*/
 		if ((ct->error = init_cli_msg(ct)) != E_OK)
 			return;
@@ -2220,6 +2130,5 @@
 		ct->timer = 1000 * 1000;
 
-		/* SELECT ç¶æ
-ã«é·ç§»ããã*/
+		/* SELECT 状態に遷移する。*/
 		start_select(ct);
 		}
@@ -2240,16 +2149,15 @@
 
 	if (ct->error != E_OK || ct->fsm == DHCP4_FSM_SLEEP) {
-		/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+		/* 全ての TIMER をキャンセルする。*/
 		cancel_all_timers(ct);
 		ct->timer = TMO_FEVR;
 
-		/* ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã*/
+		/* メッセージ構造体を解放する。*/
 		rel_cli_msg(ct);
 
-		/* ãªã¼ã¹ãè§£æ¾å¾ãååå¾ãæå®ããã¦ããªããã°ä¼æ­¢ããã*/
+		/* リースを解放後、再取得が指定されていなければ休止する。*/
 		if (!(ct->flags & DHCP4C_FLAG_RENEW)) {
 
-			/* ä¼æ­¢ããã*/
+			/* 休止する。*/
 			if (ct->error == E_OK) {
 				if (ct->fsm != DHCP4_FSM_SLEEP)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,9 +35,9 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ã
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  DHCP クライアント
+ *  コンフィギュレーションファイル
  */
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(DHCP4_CLI_TASK, {
@@ -64,5 +52,5 @@
 #endif	/* of #ifdef DHCP4_CLI_CFG */
 
-/* ã»ããã© */
+/* セマフォ */
 
 #ifdef DHCP4_CLI_CFG
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.h	(revision 389)
@@ -95,44 +95,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -145,35 +131,32 @@
 
 /* 
- *  DHCP ã¯ã©ã¤ã¢ã³ãã®ã¹ã¿ãã¯ãµã¤ãº
- */
-
-#define DHCP4_CLI_STACK_SIZE		1024		/* DHCP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+ *  DHCP クライアントのスタックサイズ
+ */
+
+#define DHCP4_CLI_STACK_SIZE		1024		/* DHCP クライアントタスクのスタックサイズ	*/
 
 /* 
- *  DHCP ã¯ã©ã¤ã¢ã³ãã®åªå
-åº¦
- */
-
-#define DHCP4_CLI_MAIN_PRIORITY		5		/* DHCP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®åªå
-åº¦		*/
-
-/* æ¨å¥¨åº¦ã®å®ç¾© */
-#define DHCP4_CLI_CFG_PREFER_ADDR	100		/* ã¢ãã¬ã¹ã®æ¨å¥¨åº¦	*/
-
-/* DHCP ã¯ã©ã¤ã¢ã³ãã¡ãã»ã¼ã¸ã®åä¿¡ãªã¹ããµã¤ãºï¼2ä»¥ä¸æå®ãããã¨ï¼ */
+ *  DHCP クライアントの優先度
+ */
+
+#define DHCP4_CLI_MAIN_PRIORITY		5		/* DHCP クライアントタスクの優先度		*/
+
+/* 推奨度の定義 */
+#define DHCP4_CLI_CFG_PREFER_ADDR	100		/* アドレスの推奨度	*/
+
+/* DHCP クライアントメッセージの受信リストサイズ（2以上指定すること） */
 #define NUM_DHCP4_MSG_LIST		3
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ãã¡ãã»ã¼ã¸æ§é ä½æ°ãå¤æ´ç¦æ­¢ã
- *  +1 ã¯éä¿¡ç¨
+ *  DHCP クライアントメッセージ構造体数【変更禁止】
+ *  +1 は送信用
  */
 #define NUM_MPF_DHCP4_CLI_MSG		(NUM_DHCP4_MSG_LIST+1)
 
 /* 
- *  ã³ã³ãã¤ã«æã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³
- */
-
-/* DHCP å¿
-é ãªãã·ã§ã³ãªã¹ã */
+ *  コンパイル時コンフィギュレーション
+ */
+
+/* DHCP 必須オプションリスト */
 
 #ifndef DHCP4_CLI_CFG_REQUIRED_OLIST
@@ -186,5 +169,5 @@
 #endif	/* of #ifndef DHCP4_CLI_CFG_REQUIRED_OLIST */
 
-/* DHCP è¦æ±ãªãã·ã§ã³ãªã¹ã */
+/* DHCP 要求オプションリスト */
 
 #ifndef DHCP4_CLI_CFG_REQUEST_OLIST
@@ -202,31 +185,29 @@
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãå¤
- */
-
-/* åä¿¡ã¿ã¤ã ã¢ã¦ã	*/
-#define TMO_DHCP4C_OFFER	(ULONG_C(120)*SYSTIM_HZ)	/* OFFER ã¡ãã»ã¼ã¸	*/
-#define TMO_DHCP4C_ACK		(ULONG_C(60)*SYSTIM_HZ)	/* ACK/NAK ã¡ãã»ã¼ã¸	*/
-
-/* ãªã¼ã¹æéã®æ¢å®å¤	*/
-#define TMO_DHCP4C_DEF_LEASE	(ULONG_C(12*60*60)*SYSTIM_HZ)	/* æ¨æºæé	*/
-#define TMO_DHCP4C_MIN_LEASE	(ULONG_C(60)*SYSTIM_HZ)	/* æå°æé	*/
-
-/* ã¡ãã»ã¼ã¸ã®éä¿¡å¨æ	*/
-#define TMO_DHCP4C_INIT_INTVL	(ULONG_C(3)*SYSTIM_HZ)		/* åæå¤	*/
-#define TMO_DHCP4C_MAX_BACKOFF	(ULONG_C(15)*SYSTIM_HZ)	/* å¶éå¤	*/
-
-/* DHCP ãµã¼ãã¸ã® UDP éä¿¡ã¿ã¤ã ã¢ã¦ã	*/
+ *  タイムアウト値
+ */
+
+/* 受信タイムアウト	*/
+#define TMO_DHCP4C_OFFER	(ULONG_C(120)*SYSTIM_HZ)	/* OFFER メッセージ	*/
+#define TMO_DHCP4C_ACK		(ULONG_C(60)*SYSTIM_HZ)	/* ACK/NAK メッセージ	*/
+
+/* リース時間の既定値	*/
+#define TMO_DHCP4C_DEF_LEASE	(ULONG_C(12*60*60)*SYSTIM_HZ)	/* 標準時間	*/
+#define TMO_DHCP4C_MIN_LEASE	(ULONG_C(60)*SYSTIM_HZ)	/* 最小時間	*/
+
+/* メッセージの送信周期	*/
+#define TMO_DHCP4C_INIT_INTVL	(ULONG_C(3)*SYSTIM_HZ)		/* 初期値	*/
+#define TMO_DHCP4C_MAX_BACKOFF	(ULONG_C(15)*SYSTIM_HZ)	/* 制限値	*/
+
+/* DHCP サーバへの UDP 送信タイムアウト	*/
 #define TMO_DHCP4C_UDP_SND	ULONG_C(1000000)		/* [us] */
 
-/* ã¡ãã»ã¼ã¸æ§é ä½ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+/* メッセージ構造体獲得タイムアウト	*/
 #define TMO_DHCP4C_MPF_GET	ULONG_C(1000000)		/* [us] */
 
-/* ARP è¦æ±ãéä¿¡ãã¦ããã®å¾
-ã¡æé	*/
+/* ARP 要求を送信してからの待ち時間	*/
 #define TMO_DHCP4C_ARP_WAIT	ULONG_C(1000000)		/* [us] */
 
-/* RELEASE ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ããã®å¾
-ã¡æé	*/
+/* RELEASE メッセージを送信してからの待ち時間	*/
 #define TMO_DHCP4C_SND_REL_WAIT	ULONG_C(1000000)	/* [us] */
 
@@ -236,15 +217,15 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ãã¡ãã»ã¼ã¸æ§é ä½
+ *  DHCP クライアントメッセージ構造体
  */
 
 typedef struct dhcp4_cli_msg {
-	/* 4ãã¤ãå¢çã«ã¢ã©ã¤ã³ããã*/
-	T_DHCP4_MSG		msg;		/* DHCP ã¡ãã»ã¼ã¸æ§é ä½	*/
-	struct dhcp4_cli_msg	*next;		/* ãªã¹ãã®æ¬¡ã®ã¡ãã»ã¼ã¸æ§é ä½	*/
-	T_IPV4EP		srv;		/* ãµã¼ãã®IPv4ã¢ãã¬ã¹/ãã¼ãçªå· */
-	uint16_t		len;		/* msg ã®æå¹é·			*/
-	uint16_t		prefer;		/* msg ã®æ¨å¥¨åº¦			*/
-	uint8_t			type;		/* ã¡ãã»ã¼ã¸ã¿ã¤ã		*/
+	/* 4バイト境界にアラインする。*/
+	T_DHCP4_MSG		msg;		/* DHCP メッセージ構造体	*/
+	struct dhcp4_cli_msg	*next;		/* リストの次のメッセージ構造体	*/
+	T_IPV4EP		srv;		/* サーバのIPv4アドレス/ポート番号 */
+	uint16_t		len;		/* msg の有効長			*/
+	uint16_t		prefer;		/* msg の推奨度			*/
+	uint8_t			type;		/* メッセージタイプ		*/
 	} T_DHCP4_CLI_MSG;
 
@@ -252,5 +233,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -258,5 +239,5 @@
 
 /*
- *  ã¿ã¹ã¯
+ *  タスク
  */
 
@@ -264,5 +245,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_asp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  ASP ç¨ DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ASP 用 DHCP クライアントのシステムコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 DHCP クライアントのシステムコンフィギュレーションファイルのインクルード
  */
 
@@ -58,8 +45,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_DHCP4_CLI_MSG, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_jsp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_jsp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_jsp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  JSP ç¨ DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  JSP 用 DHCP クライアントのシステムコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 DHCP クライアントのシステムコンフィギュレーションファイルのインクルード
  */
 
@@ -58,8 +45,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_DHCP4_CLI_MSG, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_var.h	(revision 389)
@@ -95,44 +95,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -143,8 +129,8 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½
- */
-
-/* TIMER ã®å®ç¾© */
+ *  DHCP クライアントコンテキスト構造体
+ */
+
+/* TIMER の定義 */
 
 #define DHCP4C_TIMER_SND_DISC	0
@@ -161,37 +147,32 @@
 
 typedef struct dhcp4_cli_context {
-	T_DHCP4_CLI_MSG	*rcv_lst;	/* åä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ã		*/
-	T_DHCP4_CLI_MSG	*val_lst;	/* æ¤è¨¼ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ã		*/
-	T_DHCP4_CLI_MSG	*prf_lst;	/* æ¨å¥¨ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ã		*/
-	T_DHCP4_CLI_MSG	*snd_msg;	/* éä¿¡ã¡ãã»ã¼ã¸æ§é ä½			*/
-	T_DHCP4_CLI_MSG	*off_msg;	/* éç¥ããããªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½	*/
-	T_DHCP4_CLI_MSG	*act_msg;	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½	*/
-	T_IF_SOFTC	*sc;		/* IF ã®ã½ããã¦ã§ã¢æ
-å ±		*/
-	T_IPV4EP	dst;		/* éä¿¡å
-ã®IPã¢ãã¬ã¹/ãã¼ãçªå·	*/
-	SYSTIM		snd_start;	/* éä¿¡ãéå§ããæé			*/
-	SYSTIM		bind_start;	/* BINDãéå§ããæé			*/
-	SYSTIM		expire;		/* ãªã¼ã¹ã®æå¹æéï¼msï¼		*/
-	SYSTIM		renew;		/* RENEWï¼T1ï¼ã¾ã§ã®æéï¼msï¼	*/
-	SYSTIM		rebind;		/* REBINDï¼T2ï¼ã¾ã§ã®æéï¼msï¼	*/
+	T_DHCP4_CLI_MSG	*rcv_lst;	/* 受信メッセージ構造体リスト		*/
+	T_DHCP4_CLI_MSG	*val_lst;	/* 検証メッセージ構造体リスト		*/
+	T_DHCP4_CLI_MSG	*prf_lst;	/* 推奨メッセージ構造体リスト		*/
+	T_DHCP4_CLI_MSG	*snd_msg;	/* 送信メッセージ構造体			*/
+	T_DHCP4_CLI_MSG	*off_msg;	/* 通知されたリース・メッセージ構造体	*/
+	T_DHCP4_CLI_MSG	*act_msg;	/* 有効なリース・メッセージ構造体	*/
+	T_IF_SOFTC	*sc;		/* IF のソフトウェア情報		*/
+	T_IPV4EP	dst;		/* 送信先のIPアドレス/ポート番号	*/
+	SYSTIM		snd_start;	/* 送信を開始した時間			*/
+	SYSTIM		bind_start;	/* BINDを開始した時間			*/
+	SYSTIM		expire;		/* リースの有効時間（ms）		*/
+	SYSTIM		renew;		/* RENEW（T1）までの時間（ms）	*/
+	SYSTIM		rebind;		/* REBIND（T2）までの時間（ms）	*/
 	SYSTIM		timers[NUM_DHCP4C_TIMERS];	
-					/* ã¿ã¤ãã¼é
-å			*/
-	RELTIM		interval;	/* éä¿¡éé			*/
-	ER_UINT		error;		/* ã¨ã©ã¼ã»ãã¼ã¿é·		*/
-	ID			tskid;		/* ã¿ã¹ã¯ID */
+					/* タイマー配列			*/
+	RELTIM		interval;	/* 送信間隔			*/
+	ER_UINT		error;		/* エラー・データ長		*/
+	ID			tskid;		/* タスクID */
 	ID			cepid;		/* CEP ID			*/
-	uint32_t	xid;		/* ãã©ã³ã¶ã¯ã·ã§ã³ ID		*/
-	uint16_t	flags;		/* åç¨®ãã©ã°			*/
-	uint16_t	max_prefer;	/* åä¿¡ã¡ãã»ã¼ã¸ã®æå¤§æ¨å¥¨åº¦	*/
+	uint32_t	xid;		/* トランザクション ID		*/
+	uint16_t	flags;		/* 各種フラグ			*/
+	uint16_t	max_prefer;	/* 受信メッセージの最大推奨度	*/
 	uint16_t	secs;		/* seconds since boot began	*/
-	uint8_t		fsm;		/* ç¾å¨ã®ç¶æ
-			*/
+	uint8_t		fsm;		/* 現在の状態			*/
 	int timer;
 	} T_DHCP4_CLI_CONTEXT;
 
-/* fsmï¼ç¶æ
-é·ç§»ï¼ã®å®ç¾© */
+/* fsm（状態遷移）の定義 */
 
 #define DHCP4_FSM_INIT		1
@@ -203,9 +184,9 @@
 #define DHCP4_FSM_INIT_REBOOT	7
 #define DHCP4_FSM_REBOOT	8
-#define DHCP4_FSM_REL_INFO	11	/* DHCPv4 ã® RFC2131 ã«ã¯ç¡ãã*/
-#define DHCP4_FSM_SLEEP		12	/* DHCPv4 ã® RFC2131 ã«ã¯ç¡ãã*/
-#define DHCP4_FSM_WAKE		13	/* DHCPv4 ã® RFC2131 ã«ã¯ç¡ãã*/
-
-/* flag ã®å®ç¾© */
+#define DHCP4_FSM_REL_INFO	11	/* DHCPv4 の RFC2131 には無い。*/
+#define DHCP4_FSM_SLEEP		12	/* DHCPv4 の RFC2131 には無い。*/
+#define DHCP4_FSM_WAKE		13	/* DHCPv4 の RFC2131 には無い。*/
+
+/* flag の定義 */
 
 #define DHCP4C_FLAG_TMOUT_SND_DISC	(DHCP4C_FLAG_TMOUT_TIMER|DHCP4C_TIMER_SND_DISC)
@@ -225,17 +206,17 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
- */
-
-/* ã¿ã¤ã ã¢ã¦ãã®è¨ç® */
+ *  関数シミュレーションマクロ
+ */
+
+/* タイムアウトの計算 */
 
 #define DHCP4C_TMOC(t)		(((t)-1000)+dhcp_rand()%2000)
 
-/* æéæ¯è¼ */
+/* 時間比較 */
 
 #define TIMEC_GT(a,b)		((int32_t)((a)-(b))>0)
 #define TIMEC_GE(a,b)		((int32_t)((a)-(b))>=0)
 
-/* æéå®æ°ã®å¤æ */
+/* 時間定数の変換 */
 
 #define SYSTIM2TIMER(t)		(((t)<SYSTIM_HZ/DHCP4C_TIMER_HZ)?(DHCP4C_TIMER_HZ):((t)*DHCP4C_TIMER_HZ)/SYSTIM_HZ)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6.h	(revision 389)
@@ -5,44 +5,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,5 +39,5 @@
 
 /*
- *  DHCPv6 ã«é¢ããå®ç¾©
+ *  DHCPv6 に関する定義
  *
  *    RFC3315
@@ -59,5 +45,5 @@
 
 /*
- *  DHCPv6 ã¡ãã»ã¼ã¸ã®å®æ°ã®å®ç¾©
+ *  DHCPv6 メッセージの定数の定義
  */
 
@@ -66,5 +52,5 @@
 
 /*
- *  DHCPv6 ã¡ãã»ã¼ã¸
+ *  DHCPv6 メッセージ
  */
 
@@ -79,5 +65,5 @@
 	} T_DHCP6_MSG;
 
-/* message type ã®å®ç¾© */
+/* message type の定義 */
 
 #define DHCP6_SOLICIT		UINT_C(1)
@@ -96,5 +82,5 @@
 
 /*
- *  DHCPv6 ãªãã·ã§ã³
+ *  DHCPv6 オプション
  */
 
@@ -113,10 +99,10 @@
 #define DHCP6_OPT_IA_PD		UINT_C(25)
 
-/* hardware address type ã®å®ç¾© */
+/* hardware address type の定義 */
 
 #define DHCP6_HWA_TYPE_ETHER	UINT_C(1)
 #define DHCP6_HWA_TYPE_IEEE802	UINT_C(6)
 
-/* STATUS CODE ã®å®ç¾© */
+/* STATUS CODE の定義 */
 
 #define DHCP6_STAT_SUCCESS	UINT_C(0)
@@ -127,14 +113,13 @@
 #define DHCP6_STAT_USE_MCAST	UINT_C(5)
 
-/* æéå®æ°[s]ã®å®ç¾© */
+/* 時間定数[s]の定義 */
 
 #define DHCP6_MAX_TIME		UINT_C(0xffffffff)
 
 /*
- *  ãªãã·ã§ã³ã®ãããé¨ã®å®ç¾©
- */
-
-/* ãªãã·ã§ã³ã®å
-±éé¨ */
+ *  オプションのヘッダ部の定義
+ */
+
+/* オプションの共通部 */
 
 typedef struct dhcp6_option {
@@ -143,8 +128,7 @@
 	} T_DHCP6_OPTION;
 
-/* ãªãã·ã§ã³ã®å
-±éé¨ */
-
-/* CLIENTID ãªãã·ã§ã³ */
+/* オプションの共通部 */
+
+/* CLIENTID オプション */
 
 typedef struct dhcp6_opt_clientid {
@@ -153,5 +137,5 @@
 	} T_DHCP6_OPT_CLIENTID;
 
-/* SERVERID ãªãã·ã§ã³ */
+/* SERVERID オプション */
 
 typedef struct dhcp6_opt_serverid {
@@ -160,5 +144,5 @@
 	} T_DHCP6_OPT_SERVERID;
 
-/* IA_NA/IA_PD ãªãã·ã§ã³ */
+/* IA_NA/IA_PD オプション */
 
 typedef struct dhcp6_opt_ia_na_pd {
@@ -170,5 +154,5 @@
 	} T_DHCP6_OPT_IA_NA_PD;
 
-/* IA_TA ãªãã·ã§ã³ */
+/* IA_TA オプション */
 
 typedef struct dhcp6_opt_ia_ta {
@@ -178,5 +162,5 @@
 	} T_DHCP6_OPT_IA_TA;
 
-/* IAADDR ãªãã·ã§ã³ */
+/* IAADDR オプション */
 
 #ifdef T_IN6_ADDR_DEFINED
@@ -192,5 +176,5 @@
 #endif	/* of #ifdef T_IN6_ADDR_DEFINED */
 
-/* ORO ãªãã·ã§ã³ */
+/* ORO オプション */
 
 typedef struct dhcp6_opt_oro {
@@ -199,5 +183,5 @@
 	} T_DHCP6_OPT_ORO;
 
-/* PREFERENCE ãªãã·ã§ã³ */
+/* PREFERENCE オプション */
 
 typedef struct dhcp6_opt_preference {
@@ -207,5 +191,5 @@
 	} T_DHCP6_OPT_PREFERENCE;
 
-/* UNICAST ãªãã·ã§ã³ */
+/* UNICAST オプション */
 
 #ifdef T_IN6_ADDR_DEFINED
@@ -219,5 +203,5 @@
 #endif	/* of #ifdef T_IN6_ADDR_DEFINED */
 
-/* STATUS CODE ãªãã·ã§ã³ */
+/* STATUS CODE オプション */
 
 typedef struct dhcp6_opt_status_code {
@@ -227,5 +211,5 @@
 	} T_DHCP6_OPT_STATUS_CODE;
 
-/* NAME SERVERS ãªãã·ã§ã³ */
+/* NAME SERVERS オプション */
 
 typedef struct dhcp6_opt_name_servers {
@@ -235,5 +219,5 @@
 	} T_DHCP6_OPT_NAME_SERVERS;
 
-/* DOMAIN SEARCH ãªãã·ã§ã³ */
+/* DOMAIN SEARCH オプション */
 
 typedef struct dhcp6_opt_domain_search {
@@ -244,8 +228,6 @@
 
 /*
- *  DHCPv6 ã¿ã¤ãã³ã°å®æ°ãRFC3315 5.5 åç
-§ã
- *  ãã®ä»ã®ã¿ã¤ãã³ã°å®æ°ã¯ dhcp6_cli.h åç
-§
+ *  DHCPv6 タイミング定数【RFC3315 5.5 参照】
+ *  その他のタイミング定数は dhcp6_cli.h 参照
  */
 
@@ -257,5 +239,5 @@
 #define TMO_REQ_TIMEOUT		(1*SYSTIM_HZ)	/*   1[s] 	*/
 #define TMO_REQ_MAX_RT		(30*SYSTIM_HZ)	/*  30[s] 	*/
-#define TMO_REQ_MAX_RC		10		/* åéä¿¡åæ°	*/
+#define TMO_REQ_MAX_RC		10		/* 再送信回数	*/
 #define TMO_CNF_MAX_DELAY	(1*SYSTIM_HZ)	/*   1[s] 	*/
 #define TMO_CNF_TIMEOUT		(1*SYSTIM_HZ)	/*   1[s] 	*/
@@ -270,9 +252,9 @@
 #define TMO_INF_MAX_RT		(120*SYSTIM_HZ)	/* 120[s] 	*/
 #define TMO_REL_TIMEOUT		(1*SYSTIM_HZ)	/*   1[s] 	*/
-#define TMO_REL_MAX_RC		5		/* åéä¿¡åæ°	*/
+#define TMO_REL_MAX_RC		5		/* 再送信回数	*/
 #define TMO_DEC_TIMEOUT		(1*SYSTIM_HZ)	/*   1[s] 	*/
-#define TMO_DEC_MAX_RC		5		/* åéä¿¡åæ°	*/
+#define TMO_DEC_MAX_RC		5		/* 再送信回数	*/
 #define TMO_REC_TIMEOUT		(2*SYSTIM_HZ)	/*   2[s] 	*/
-#define TMO_REC_MAX_RC		8		/* åéä¿¡åæ°	*/
+#define TMO_REC_MAX_RC		8		/* 再送信回数	*/
 
 #endif	/* of #ifdef SYSTIM_HZ */
@@ -282,5 +264,5 @@
  */
 
-/* DUID_LLT æ§é ä½ */
+/* DUID_LLT 構造体 */
 
 typedef struct dhcp6_duid_llt_hdr {
@@ -290,5 +272,5 @@
 	} T_DHCP6_DUID_LLT_HDR;
 
-/* DUID_LL æ§é ä½ */
+/* DUID_LL 構造体 */
 
 typedef struct dhcp6_duid_ll_hdr {
@@ -297,6 +279,5 @@
 	} T_DHCP6_DUID_LL_HDR;
 
-/* DUID ã¿ã¤ããRFC3315 9åç
-§ã*/
+/* DUID タイプ【RFC3315 9参照】*/
 
 #define DUID_LLT		1
@@ -305,16 +286,16 @@
 
 /*
- *  DUID æéã®èª¿æ´
- *  DUID æéã®éå§ã¯ 2001/1/1
+ *  DUID 時間の調整
+ *  DUID 時間の開始は 2001/1/1
  */
 
 #define DUID_TIME_EPOCH		0
 
-/* ãªã¬ã¼è»¢éã®æå¤§ãããæ° */
+/* リレー転送の最大ホップ数 */
 
 #define HOP_COUNT_LIMIT		32
 
 /*
- *  IPv6 ã¢ãã¬ã¹
+ *  IPv6 アドレス
  */
 
@@ -332,5 +313,5 @@
 
 /*
- *  UDP ãã¼ãçªå·
+ *  UDP ポート番号
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.c	(revision 389)
@@ -70,44 +70,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -156,5 +142,5 @@
 
 /*
- *  DHCPv6 ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯
+ *  DHCPv6 クライアントタスク
  */
 
@@ -162,7 +148,7 @@
 
 /*
- *  DHCP åä½ã¢ã¼ã
+ *  DHCP 動作モード
  *
- *    #define DHCP6_CLI_CFG_MODE ã§æå®ããã
+ *    #define DHCP6_CLI_CFG_MODE で指定する。
  *
  */
@@ -173,22 +159,21 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
 static const T_IN6_ADDR in6_addr_all_DHCP_relay_servers =
-	IPV6_ADDR_ALL_DHCP_RELAY_SERVERS_INIT;			/* ãªã¬ã¼ã»ãµã¼ãã® IPv6 ã¢ãã¬ã¹	*/
-static T_DHCP6_CLI_CONTEXT	context;			/* ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ã	*/
+	IPV6_ADDR_ALL_DHCP_RELAY_SERVERS_INIT;			/* リレー・サーバの IPv6 アドレス	*/
+static T_DHCP6_CLI_CONTEXT	context;			/* クライアントコンテキスト	*/
 
 #ifdef DHCP6_CLI_CFG_REQUIRED_OLIST
-static uint8_t	required_plist[] = DHCP6_CLI_CFG_REQUIRED_OLIST;	/* å¿
-é ãªãã·ã§ã³ãªã¹ã		*/
+static uint8_t	required_plist[] = DHCP6_CLI_CFG_REQUIRED_OLIST;	/* 必須オプションリスト		*/
 #endif
 
 #ifdef DHCP6_CLI_CFG_REQUEST_OLIST
-static uint8_t	request_plist[] = DHCP6_CLI_CFG_REQUEST_OLIST;		/* è¦æ±ãªãã·ã§ã³ãªã¹ã		*/
+static uint8_t	request_plist[] = DHCP6_CLI_CFG_REQUEST_OLIST;		/* 要求オプションリスト		*/
 #endif
 
 /*
- *  dhcp6_rand -- RFC3315 ã«è¦å®ãããä¹±æ°ãçºçããã
+ *  dhcp6_rand -- RFC3315 に規定された乱数を発生する。
  */
 
@@ -209,5 +194,5 @@
 
 /*
- *  init_duid -- ã¯ã©ã¤ã¢ã³ãã® DUID ãè¨­å®ããã
+ *  init_duid -- クライアントの DUID を設定する。
  */
 
@@ -218,5 +203,5 @@
 #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS
 
-	/* åä½ã¢ã¼ãã« STATELESS ãæå®ãããæã¯ LL å½¢å¼ã«ããã*/
+	/* 動作モードに STATELESS が指定された時は LL 形式にする。*/
 
 	T_DHCP6_DUID_LL_HDR	*ll;
@@ -226,12 +211,12 @@
 	HOST2MSG16(ll->type, DHCP6_HWA_TYPE_ETHER);
 	memcpy(&ct->duid[sizeof(*ll)], &ct->sc->ifaddr.lladdr, sizeof(ct->sc->ifaddr.lladdr));
-	ct->duid_len = sizeof(*ll) + sizeof(ct->sc->ifaddr.lladdr);	/* DIUD é·ãè¨é²ããã*/
+	ct->duid_len = sizeof(*ll) + sizeof(ct->sc->ifaddr.lladdr);	/* DIUD 長を記録する。*/
 
 #elif DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATEFULL
 
 	/*
-	 *    åä½ã¢ã¼ãã« DHCP6_CLI_CFG_STATEFULL ãæå®ãããæã¯ LLT å½¢å¼ã«ããã
-	 *    time ã¡ã³ãã¼ã«ã¯ç¾å¨ã®æé[s]ãè¨­å®ããã
-	 *    æ³¨æ: æ«å®çã« get_tim() ã®å¤ãä½¿ãããè¦æ¤è¨
+	 *    動作モードに DHCP6_CLI_CFG_STATEFULL が指定された時は LLT 形式にする。
+	 *    time メンバーには現在の時間[s]を設定する。
+	 *    注意: 暫定的に get_tim() の値を使うが、要検討
 	 */
 
@@ -246,5 +231,5 @@
 	HOST2MSG32(llt->time, time);
 	memcpy(&ct->duid[sizeof(*llt)], &ct->sc->ifaddr.lladdr, sizeof(ct->sc->ifaddr.lladdr));
-	ct->duid_len = sizeof(*llt) + sizeof(ct->sc->ifaddr.lladdr);	/* DIUD é·ãè¨é²ããã*/
+	ct->duid_len = sizeof(*llt) + sizeof(ct->sc->ifaddr.lladdr);	/* DIUD 長を記録する。*/
 
 #else	/* of #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS */
@@ -255,6 +240,5 @@
 
 /*
- *  cancel_all_timers -- å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã
+ *  cancel_all_timers -- 全ての TIMER をキャンセルする。
  */
 
@@ -271,5 +255,5 @@
 
 /*
- *  dhcpc_timer -- TIMER ç®¡ç
+ *  dhcpc_timer -- TIMER 管理
  */
 
@@ -291,14 +275,13 @@
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* 1ç§æ¯ã«ã¿ã¤ã ã¢ã¦ãããã*/
+	/* 1秒毎にタイムアウトする。*/
 	timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP6C_TIMER_HZ);
 	}
 
 /*
- *  find_option -- æå®ãããªãã·ã§ã³ãæ¢ç´¢ããã
+ *  find_option -- 指定したオプションを探索する。
  *
- *    æ³¨æ: å¼æ° len ã 0 ã®æã¯ãªãã·ã§ã³ãµã¤ãºãæ¤è¨¼ããªãã
- *          å¼æ° len ã«ã¯ãªãã·ã§ã³å
-¨ä½ã®ãµã¤ãºãæå®ãããã¨ã
+ *    注意: 引数 len が 0 の時はオプションサイズを検証しない。
+ *          引数 len にはオプション全体のサイズを指定すること。
  */
 
@@ -321,9 +304,8 @@
 
 /*
- *  find_msg_option -- æå®ãããªãã·ã§ã³ãæ¢ç´¢ããã
+ *  find_msg_option -- 指定したオプションを探索する。
  *
- *    æ³¨æ: å¼æ° len ã 0 ã®æã¯ãªãã·ã§ã³ãµã¤ãºãæ¤è¨¼ããªãã
- *          å¼æ° len ã«ã¯ãªãã·ã§ã³å
-¨ä½ã®ãµã¤ãºãæå®ãããã¨ã
+ *    注意: 引数 len が 0 の時はオプションサイズを検証しない。
+ *          引数 len にはオプション全体のサイズを指定すること。
  */
 
@@ -335,6 +317,5 @@
 
 /*
- *  is_equal_sid -- ã¡ãã»ã¼ã¸å
-ã® SERVER ID ãæ¯è¼ããã
+ *  is_equal_sid -- メッセージ内の SERVER ID を比較する。
  */
 
@@ -357,6 +338,5 @@
 
 /*
- *  validate_iaaddrs -- ã¢ãã¬ã¹æ
-å ±ï¼IAADDRï¼ãæ¤è¨¼ããã
+ *  validate_iaaddrs -- アドレス情報（IAADDR）を検証する。
  */
 
@@ -366,5 +346,5 @@
 	T_DHCP6_OPT_IAADDR	*iaa;
 
-	/* ãªãã·ã§ã³ã IAADDR ã§ãããã¨ãæ¤è¨¼ããã*/
+	/* オプションが IAADDR であることを検証する。*/
 	iaa = (T_DHCP6_OPT_IAADDR*)opt;
 	if (MSG2HOST16(iaa->code) != DHCP6_OPT_IAADDR)
@@ -372,9 +352,9 @@
 
 	while (len > 0) {
-		/* ãªãã·ã§ã³é·ãæ¤è¨¼ããã*/
+		/* オプション長を検証する。*/
 		if (len < sizeof(*iaa))
 			return E_PAR;
 
-		/* ãªãã·ã§ã³é·ã T_DHCP6_OPT_IAADDR ã®ãµã¤ãºã¨ä¸è´ãã¦ããªããã°ã¨ã©ã¼ */
+		/* オプション長が T_DHCP6_OPT_IAADDR のサイズと一致していなければエラー */
 		iaa = (T_DHCP6_OPT_IAADDR*)opt;
 		if ((MSG2HOST16(iaa->len) & ~DHCP6C_IAA_FLAG_MASK) < (sizeof(*iaa) - sizeof(T_DHCP6_OPTION)))
@@ -382,7 +362,6 @@
 
 		/*
-		 *  perferred-lifetime ã¨ valid-lifetime ã®å¤ãçç¾ãã¦ããã¨ãã¯ã¨ã©ã¼
-		 *  ãRFC3315 (22.6) åç
-§ã
+		 *  perferred-lifetime と valid-lifetime の値が矛盾しているときはエラー
+		 *  【RFC3315 (22.6) 参照】
 		 */
 		if (MSG2HOST32(iaa->prefer) > MSG2HOST32(iaa->valid))
@@ -397,5 +376,5 @@
 
 /*
- *  validate_ia_na_pd -- IA_NA/IA_PD ãªãã·ã§ã³ãæ¤è¨¼ããã
+ *  validate_ia_na_pd -- IA_NA/IA_PD オプションを検証する。
  */
 
@@ -406,9 +385,9 @@
 	uint8_t			*opt;
 
-	/* IA_NA/IA_PD ãç¡ããã°æ¤è¨¼ããªãã*/
+	/* IA_NA/IA_PD が無ければ検証しない。*/
 	if ((opt = find_msg_option(msg, code, 0)) == NULL)
 		return E_OK;
 
-	/* ãªãã·ã§ã³é·ãæ¤è¨¼ããã*/
+	/* オプション長を検証する。*/
 	na = (T_DHCP6_OPT_IA_NA_PD*)opt;
 	if (!(msg->len >= (opt - (uint8_t*)&msg->msg) + sizeof(*na) &&
@@ -417,8 +396,6 @@
 
 	/*
-	 *  T1 ã¨ T2 ã®å¤ãçç¾ãã¦ããæãã¾ãã¯ã¢ãã¬ã¹æ
-å ±ãèª¤ã£ã¦ããæã¯ã¨ã©ã¼
-	 *  ãRFC3315 (22.4) åç
-§ã
+	 *  T1 と T2 の値が矛盾している時、またはアドレス情報が誤っている時はエラー
+	 *  【RFC3315 (22.4) 参照】
 	 */
 	if (MSG2HOST32(na->renew) > 0 && MSG2HOST32(na->rebind) > 0 &&
@@ -433,5 +410,5 @@
 
 /*
- *  validate_ia_ta -- IA_TA ãªãã·ã§ã³ãæ¤è¨¼ããã
+ *  validate_ia_ta -- IA_TA オプションを検証する。
  */
 
@@ -442,9 +419,9 @@
 	uint8_t			*opt;
 
-	/* IA_TA ãç¡ããã°æ¤è¨¼ããªãã*/
+	/* IA_TA が無ければ検証しない。*/
 	if ((opt = find_msg_option(msg, DHCP6_OPT_IA_TA, 0)) == NULL)
 		return E_OK;
 
-	/* ãªãã·ã§ã³é·ãæ¤è¨¼ããã*/
+	/* オプション長を検証する。*/
 	ta = (T_DHCP6_OPT_IA_TA	*)opt;
 	if (!(msg->len >= (opt - (uint8_t*)&msg->msg) + sizeof(*ta) &&
@@ -453,7 +430,5 @@
 
 	/*
-	 *  ã¢ãã¬ã¹æ
-å ±ãèª¤ã£ã¦ããæã¯ã¨ã©ã¼ãRFC3315 (22.4) åç
-§ã
+	 *  アドレス情報が誤っている時はエラー【RFC3315 (22.4) 参照】
 	 */
 	if (validate_iaaddrs(opt + sizeof(*ta), (MSG2HOST16(ta->len) & ~DHCP6C_IAA_FLAG_MASK) - (sizeof(*ta) - sizeof(T_DHCP6_OPTION))) != E_OK)
@@ -463,5 +438,5 @@
 	}
 /*
- *  classify_reply -- å¿ç­ã¡ãã»ã¼ã¸ãåé¡ããã
+ *  classify_reply -- 応答メッセージを分類する。
  */
 
@@ -471,17 +446,17 @@
 	ER	error;
 
-	/* IA_NA ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* IA_NA オプションを検証する。*/
 	if ((error = validate_ia_na_pd(msg, DHCP6_OPT_IA_NA)) != E_OK)
 		return error;
 
-	/* IA_TA ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* IA_TA オプションを検証する。*/
 	if ((error = validate_ia_ta(msg)) != E_OK)
 		return error;
 
-	/* IA_PD ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* IA_PD オプションを検証する。*/
 	if ((error = validate_ia_na_pd(msg, DHCP6_OPT_IA_PD)) != E_OK)
 		return error;
 
-	/* ãµã¼ã DUID ããããã¨ãæ¤è¨¼ããã*/
+	/* サーバ DUID があることを検証する。*/
 	if (find_msg_option(msg, DHCP6_OPT_SERVERID, 0) == NULL)
 		return E_PAR;
@@ -491,5 +466,5 @@
 
 /*
- *  validate_reply -- å¿ç­ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã
+ *  validate_reply -- 応答メッセージを検証する。
  */
 
@@ -500,9 +475,9 @@
 	uint8_t			*opt;
 
-	/* ãµã¼ã DUID ããããã¨ãæ¤è¨¼ããã*/
+	/* サーバ DUID があることを検証する。*/
 	if (find_msg_option(msg, DHCP6_OPT_SERVERID, 0) == NULL)
 		return E_PAR;
 
-	/* ã¯ã©ã¤ã¢ã³ã DUID ããããèªåã®ã¯ã©ã¤ã¢ã³ã DUID ã¨åããã¨ãæ¤è¨¼ããã*/
+	/* クライアント DUID があり、自分のクライアント DUID と同じことを検証する。*/
 	if ((opt = find_msg_option(msg, DHCP6_OPT_CLIENTID, 0)) == NULL)
 		return E_PAR;
@@ -518,5 +493,5 @@
 
 /*
- *  get_status_code -- STATUS ãªãã·ã§ã³ã®çµæã³ã¼ããç²å¾ããã
+ *  get_status_code -- STATUS オプションの結果コードを獲得する。
  */
 
@@ -527,9 +502,9 @@
 	uint8_t			*opt;
 
-	/* STATUS ãªãã·ã§ã³ãç¡ããã°æ¤è¨¼ããªãã*/
+	/* STATUS オプションが無ければ検証しない。*/
 	if ((opt = find_option(msg, msg_len, DHCP6_OPT_STATUS_CODE, 0)) == NULL)
 		return DHCP6_STAT_SUCCESS;
 
-	/* ãªãã·ã§ã³é·ãæ¤è¨¼ããã*/
+	/* オプション長を検証する。*/
 	status = (T_DHCP6_OPT_STATUS_CODE*)opt;
 	if (msg_len < sizeof(*status))
@@ -542,5 +517,5 @@
 
 /*
- *  get_msg_status_code -- STATUS ãªãã·ã§ã³ã®çµæã³ã¼ããç²å¾ããã
+ *  get_msg_status_code -- STATUS オプションの結果コードを獲得する。
  */
 
@@ -598,5 +573,5 @@
 
 /*
- *  validate_rcv_msg -- åä¿¡ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã
+ *  validate_rcv_msg -- 受信メッセージを検証する。
  */
 
@@ -607,5 +582,5 @@
 	uint_t	code;
 
-	/* ã¡ãã»ã¼ã¸ã®ã¿ã¤ããä¸è´ãã¦ãããã¨ãæ¤è¨¼ããã*/
+	/* メッセージのタイプが一致していることを検証する。*/
 	switch (ct->fsm) {
 
@@ -649,14 +624,13 @@
 		}
 
-	/* åä¿¡ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã*/
+	/* 受信メッセージを検証する。*/
 	if ((error = validate_reply(ct, msg)) != E_OK)
 		return error;
 
-	/* åä¿¡ã¡ãã»ã¼ã¸ãåé¡ããã*/
+	/* 受信メッセージを分類する。*/
 	if ((error = classify_reply(msg)) != E_OK)
 		return error;
 
-	/* åä¿¡ããã¡ãã»ã¼ã¸å
-ã® STATUS CODE ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* 受信したメッセージ内の STATUS CODE オプションを検証する。*/
 	error = get_msg_status_code(msg, &code);
 	if (error != E_OK)
@@ -667,5 +641,5 @@
 
 /*
- *  eval_ia_prefer -- IA_NA/IA_TA/IA_PD ã®æ¨å¥¨åº¦ãè©ä¾¡ããã
+ *  eval_ia_prefer -- IA_NA/IA_TA/IA_PD の推奨度を評価する。
  */
 
@@ -680,5 +654,5 @@
 	uint_t		aoff, asize;
 
-	/* ç¡å¹ã®å ´åã¯çµäºããã*/
+	/* 無効の場合は終了する。*/
 	if (cli_msg == NULL)
 		return;
@@ -721,5 +695,5 @@
 
 /*
- *  eval_prefer -- åä¿¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãè©ä¾¡ããã
+ *  eval_prefer -- 受信メッセージの推奨度を評価する。
  */
 
@@ -730,9 +704,9 @@
 	int			ix;
 
-	/* ç¡å¹ã®å ´åã¯çµäºããã*/
+	/* 無効の場合は終了する。*/
 	if (msg == NULL)
 		return;
 
-	/* PREFERENCE ãªãã·ã§ã³ãè©ä¾¡ããã*/
+	/* PREFERENCE オプションを評価する。*/
 	if ((opt = find_msg_option(msg, DHCP6_OPT_PREFERENCE, sizeof(T_DHCP6_OPT_PREFERENCE))) != NULL)
 		msg->prefer = MSG2HOST16(((T_DHCP6_OPT_PREFERENCE*)opt)->prefer) | DHCP6_ClI_MSG_PREFER_OPTION;
@@ -742,6 +716,5 @@
 #if defined(DHCP6_CLI_CFG_REQUIRED_OLIST)
 
-	/* å¿
-é ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* 必須オプションを検証する。*/
 	for (ix = sizeof(required_plist); ix -- > 0; ) {
 		if (find_msg_option(msg, required_plist[ix], 0) == NULL)
@@ -754,5 +727,5 @@
 #if defined(DHCP6_CLI_CFG_REQUEST_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãæ¤è¨¼ããã*/
+	/* 要求オプションを検証する。*/
 	for (ix = sizeof(request_plist); ix -- > 0; ) {
 		if (find_msg_option(msg, request_plist[ix], 0) != NULL)
@@ -764,5 +737,5 @@
 
 /*
- *  eval_rcv_msg -- åä¿¡ã¡ãã»ã¼ã¸ãè©ä¾¡ããã
+ *  eval_rcv_msg -- 受信メッセージを評価する。
  */
 
@@ -773,5 +746,5 @@
 	SYSTIM		time;
 
-	/* ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã°ä¸­æ­¢ããã*/
+	/* メッセージを受信していなければ中止する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 	if (ct->val_lst == NULL) {
@@ -780,5 +753,5 @@
 		}
 
-	/* æ¤è¨¼ã¡ãã»ã¼ã¸ãªã¹ãããè©ä¾¡ã¡ãã»ã¼ã¸ãåãåºãã*/
+	/* 検証メッセージリストから評価メッセージを取り出す。*/
 	evl         = ct->val_lst;
 	ct->val_lst = ct->val_lst->next;
@@ -786,23 +759,22 @@
 	syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 
-	/* åä¿¡æéãè¨­å®ããã*/
+	/* 受信時間を設定する。*/
 	get_tim(&time);
 	evl->rcv_time = time;
 
-	/* è©ä¾¡ã¡ãã»ã¼ã¸ãæ¤è¨¼ããã*/
+	/* 評価メッセージを検証する。*/
 	if (validate_rcv_msg(ct, evl) != E_OK) {
 
-		/* ã¨ã©ã¼ãçºçããè©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+		/* エラーが発生した評価メッセージを受信メッセージ構造体リストに戻す。*/
 		goto rcv_ret;
 		}
 
-	/* REL_INFO ç¶æ
-ã®æã®å¦ç */
+	/* REL_INFO 状態の時の処理 */
 	if (ct->fsm == DHCP6_FSM_REL_INFO) {
 		syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 		if (evl->status == DHCP6_STAT_SUCCESS) {
 			/*
-			 *  STATUS CODE ã DHCP6_STAT_SUCCESS ãªãã
-			 *  è©ä¾¡ã¡ãã»ã¼ã¸ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«è¨­å®ãã¦çµäºããã
+			 *  STATUS CODE が DHCP6_STAT_SUCCESS なら、
+			 *  評価メッセージを推奨メッセージリストに設定して終了する。
 			 */
 			evl->next   = ct->prf_lst;
@@ -810,5 +782,5 @@
 			}
 		else {
-			/* è©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã¦çµäºããã*/
+			/* 評価メッセージを受信メッセージ構造体リストに戻して終了する。*/
 			evl->next   = ct->rcv_lst;
 			ct->rcv_lst = evl;
@@ -818,9 +790,9 @@
 		}
 
-	/* è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãè©ä¾¡ããã*/
+	/* 評価メッセージの推奨度を評価する。*/
 	eval_prefer(evl);
 	eval_ia_prefer(evl);
 
-	/* æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ããç©ºãªãè©ä¾¡ã¡ãã»ã¼ã¸ãç§»ãã¦çµäºããã*/
+	/* 推奨メッセージリストが空なら評価メッセージを移して終了する。*/
 	if (ct->prf_lst == NULL) {
 		ct->max_prefer = evl->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK;
@@ -829,11 +801,11 @@
 		}
 
-	/* è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ã¨æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®æå¤§æ¨å¥¨åº¦ãæ¯è¼ããã*/
+	/* 評価メッセージの推奨度と推奨メッセージリストの最大推奨度を比較する。*/
 	if ((evl->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK) > ct->max_prefer) {
 
 		/* 
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®æå¤§æ¨å¥¨åº¦ããé«ããã°ã
-		 *  æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ããåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«ç§»ãã
+		 *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より高ければ、
+		 *  推奨メッセージリストを受信メッセージ構造体リストに戻し、
+		 *  評価メッセージを推奨メッセージリストに移す。
 		 */
 		ct->max_prefer = evl->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK;
@@ -856,6 +828,6 @@
 
 				/*
-				 *  æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«åã DHCP6_OPT_SERVERID ã®ã¡ãã»ã¼ã¸ãããã°ã
-				 *  è©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+				 *  推奨メッセージリストに同じ DHCP6_OPT_SERVERID のメッセージがあれば、
+				 *  評価メッセージを受信メッセージ構造体リストに戻す。
 				 */
 				goto rcv_ret;
@@ -864,5 +836,5 @@
 
 		/* 
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã«ç§»ãã
+		 *  評価メッセージを推奨メッセージリストに移す。
 		 */
 		evl->next   = ct->prf_lst;
@@ -873,6 +845,6 @@
 	/*else */
 		/* 
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ãæ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®æå¤§æ¨å¥¨åº¦ããä½ããã°ã
-		 *  è©ä¾¡ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+		 *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より低ければ、
+		 *  評価メッセージを受信メッセージ構造体リストに戻す。
 		 */
 
@@ -886,6 +858,5 @@
 
 /*
- *  select_msg -- æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®å
-é ­ã®ã¡ãã»ã¼ã¸ãé¸æããã
+ *  select_msg -- 推奨メッセージリストの先頭のメッセージを選択する。
  */
 
@@ -897,5 +868,5 @@
 	syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 	if (ct->prf_lst == NULL) {
-		/* ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã°ä¸­æ­¢ããã*/
+		/* メッセージを受信していなければ中止する。*/
 		syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 		return NULL;
@@ -907,6 +878,5 @@
 
 	if ((select->prefer & DHCP6_ClI_MSG_PREFER_REQUIRED) == 0) {
-		/* å¿
-é ãªãã·ã§ã³ãç¡ããã°é¸æããªãã*/
+		/* 必須オプションが無ければ選択しない。*/
 		syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 		return NULL;
@@ -917,6 +887,5 @@
 	if (((select->prefer & DHCP6_ClI_MSG_PREFER_REQUIRED) == 0) ||
 	    ((select->prefer & DHCP6_ClI_MSG_PREFER_ADDR)     == 0)) {
-		/* å¿
-é ãªãã·ã§ã³ã¨ã¢ãã¬ã¹ãç¡ããã°é¸æããªãã*/
+		/* 必須オプションとアドレスが無ければ選択しない。*/
 		syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 		return NULL;
@@ -927,10 +896,9 @@
 #endif	/* of #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS */
 
-	/* æ¨å¥¨ã¡ãã»ã¼ã¸ãªã¹ãã®å
-é ­ã®ã¡ãã»ã¼ã¸ãé¸æããã*/
+	/* 推奨メッセージリストの先頭のメッセージを選択する。*/
 	ct->prf_lst  = ct->prf_lst->next;
 	select->next = NULL;
 
-	/* é¸æãããªãã£ãæ¤è¨¼ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+	/* 選択されなかった検証メッセージを受信メッセージ構造体リストに戻す。*/
 	if (ct->rcv_lst == NULL)
 		ct->rcv_lst = ct->prf_lst;
@@ -945,5 +913,5 @@
 
 /*
- *  advance_retrans -- åéä¿¡ã¿ã¤ã ã¢ã¦ããæ´æ°ããã
+ *  advance_retrans -- 再送信タイムアウトを更新する。
  */
 
@@ -952,8 +920,7 @@
 {
 	/*
-	 *  åéä¿¡ééï¼RTï¼ãæ´æ°ããã
-	 *  åéä¿¡æ¯ã«ç´ 2åãããã
-	 *  æå¤§éä¿¡ééï¼MRTï¼ãè¶
-ããªãããã«ããã
+	 *  再送信間隔（RT）を更新する。
+	 *  再送信毎に約 2倍するが、
+	 *  最大送信間隔（MRT）を超えないようにする。
 	 */
 	ct->RT += ct->RT + dhcp6_rand(ct->RT);
@@ -961,10 +928,10 @@
 		ct->RT = ct->MRT + dhcp6_rand(ct->MRT);
 
-	/* åéä¿¡åæ°ãæ´æ°ããã*/
+	/* 再送信回数を更新する。*/
 	ct->txcount ++;
 	}
 
 /*
- *  init_retrans -- åéä¿¡åæ°ããã©ã³ã¶ã¯ã·ã§ã³ IDããã®ä»ãè¨­å®ããã
+ *  init_retrans -- 再送信回数、トランザクション ID、その他を設定する。
  */
 
@@ -972,19 +939,19 @@
 init_retrans (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* éä¿¡åæ°ããªã»ããããã*/
+	/* 送信回数をリセットする。*/
 	ct->txcount = 0;
 
-	/* åéä¿¡ééãè¨­å®ããã*/
+	/* 再送信間隔を設定する。*/
 	ct->RT = ct->IRT + dhcp6_rand(ct->IRT);
 
-	/* ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* トランザクション ID を設定する。*/
 	ct->xid = netapp_rand() % 0x00ffffff;
 
-	/* åä¿¡ã¡ãã»ã¼ã¸ã®æå¤§æ¨å¥¨åº¦ããªã»ããããã*/
+	/* 受信メッセージの最大推奨度をリセットする。*/
 	ct->max_prefer = 0;
 	}
 
 /*
- *  setup_msg_header -- ã¡ãã»ã¼ã¸ã®ãããé¨åãä½æããã
+ *  setup_msg_header -- メッセージのヘッダ部分を作成する。
  */
 
@@ -995,5 +962,5 @@
 	ct->snd_msg->len = sizeof(ct->snd_msg->msg);
 
-	/* ãããé¨ãè¨­å®ããã*/
+	/* ヘッダ部を設定する。*/
 	ct->snd_msg->msg.hdr.type   = type;
 	ct->snd_msg->msg.hdr.xid[0] = (ct->xid >> 16) & 0xff;
@@ -1005,5 +972,5 @@
 
 /*
- *  common_options -- æ¨æºãªãã·ã§ã³ãè¿½å ããã
+ *  common_options -- 標準オプションを追加する。
  */
 
@@ -1024,5 +991,5 @@
 #if defined(DHCP6_CLI_CFG_RAPID_COMMIT)
 
-	/* Rapid-commit ã®æå® */
+	/* Rapid-commit の指定 */
 	if (type == DHCP6_SOLICIT)
 		;
@@ -1030,5 +997,5 @@
 #endif	/* of #if defined(DHCP6_CLI_CFG_RAPID_COMMIT) */
 
-	/* ã¯ã©ã¤ã¢ã³ã DUID ãè¿½å ããã*/
+	/* クライアント DUID を追加する。*/
 	cid = (T_DHCP6_OPT_CLIENTID*)msg;
 	HOST2MSG16(cid->code, DHCP6_OPT_CLIENTID);
@@ -1037,5 +1004,5 @@
 	msg += ct->duid_len + sizeof(T_DHCP6_OPT_CLIENTID);
 
-	/* ãµã¼ã DUID ãè¿½å ããã*/
+	/* サーバ DUID を追加する。*/
 	if (lease == NULL) {
 		if (!(type == DHCP6_SOLICIT || type == DHCP6_INFO_REQ))
@@ -1053,6 +1020,5 @@
 #if defined(DHCP6_CLI_CFG_REQUIRED_OLIST) || defined(DHCP6_CLI_CFG_REQUEST_OLIST)
 
-	/* å¿
-é ã»è¦æ±ãªãã·ã§ã³ãè¿½å ããã*/
+	/* 必須・要求オプションを追加する。*/
 	oro = (T_DHCP6_OPT_ORO*)msg;
 	HOST2MSG16(oro->code, DHCP6_OPT_ORO);
@@ -1062,6 +1028,5 @@
 #if defined(DHCP6_CLI_CFG_REQUIRED_OLIST)
 
-	/* å¿
-é ãªãã·ã§ã³ãè¿½å ããã*/
+	/* 必須オプションを追加する。*/
 	HOST2MSG16(oro->len, MSG2HOST16(oro->len) + sizeof(required_plist) * 2);
 	for (ix = sizeof(required_plist); ix -- > 0; ) {
@@ -1074,5 +1039,5 @@
 #if defined(DHCP6_CLI_CFG_REQUEST_OLIST)
 
-	/* è¦æ±ãªãã·ã§ã³ãè¿½å ããã*/
+	/* 要求オプションを追加する。*/
 	HOST2MSG16(oro->len, MSG2HOST16(oro->len) + sizeof(request_plist) * 2);
 	for (ix = sizeof(request_plist); ix -- > 0; ) {
@@ -1089,5 +1054,5 @@
 
 /*
- *  rel_lease -- ãªã¼ã¹ããããªãã·ã§ã³ãè§£æãã¦å¤ãè§£æ¾ããã
+ *  rel_lease -- リースされたオプションを解析して値を解放する。
  */
 
@@ -1106,5 +1071,5 @@
 	uint8_t		*opt, *last;
 
-	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãç¡ããã°ä½ãããªãã*/
+	/* 有効なリース・メッセージ構造体が無ければ何もしない。*/
 	if (ct->act_msg == NULL)
 		return;
@@ -1154,5 +1119,5 @@
 
 /*
- *  set_lease -- ãªã¼ã¹ããããªãã·ã§ã³ãè§£æãã¦å¤ãè¨­å®ããã
+ *  set_lease -- リースされたオプションを解析して値を設定する。
  */
 
@@ -1231,7 +1196,7 @@
 
 /*
- *  start_req_info -- INFO-REQUEST ãéå§ããã
+ *  start_req_info -- INFO-REQUEST を開始する。
  *
- *    æ³¨æ: DHCPv6 ã® RFC3315 ã«ã¯ç¡ã
+ *    注意: DHCPv6 の RFC3315 には無い
  */
 
@@ -1239,11 +1204,10 @@
 start_req_info (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããããRFC3315 (18.1.5) åç
-§ã*/
+	/* タイムアウトを設定する。【RFC3315 (18.1.5) 参照】*/
 	ct->IRT = TMO_INF_TIMEOUT;
 	ct->MRT = TMO_INF_MAX_RT;
 	ct->MRC = 0;
 
-	/* DHCP6_CLI_CFG_ONE_TRYãæå®ããã¦ããªããã°æ¨æºã¿ã¤ã ã¢ã¦ãã¾ã§åéããã*/
+	/* DHCP6_CLI_CFG_ONE_TRYが指定されていなければ標準タイムアウトまで再送する。*/
 #if defined(DHCP6_CLI_CFG_ONE_TRY)
 	ct->MRD = 0;
@@ -1252,8 +1216,8 @@
 #endif
 
-	/* åéåæ°ã¨ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* 再送回数とトランザクション ID を設定する。*/
 	init_retrans(ct);
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* REPLY メッセージの受信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
@@ -1261,15 +1225,13 @@
 
 	/*
-	 *  INFO-REQUEST ã¡ãã»ã¼ã¸éä¿¡é
-å»¶æéãè¨­å®ããã
-	 *  ãã ããTMO_INF_MAX_DELAY ã 1[s]ãªã®ã§ãdly_tsk()ãä½¿ç¨ããã
+	 *  INFO-REQUEST メッセージ送信遅延時間を設定する。
+	 *  ただし、TMO_INF_MAX_DELAY が 1[s]なので、dly_tsk()を使用する。
 	 */
 	dly_tsk(netapp_rand() % TMO_INF_MAX_DELAY);
 
-	/* SELECT ç¶æ
-ã«é·ç§»ããã*/
+	/* SELECT 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_SELECT;
 
-	/* INFO-REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* INFO-REQUEST メッセージを送信する。*/
 	ct->flags |= DHCP6C_FLAG_TMOUT_SND_IREQ;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1277,8 +1239,7 @@
 
 /*
- *  start_informed -- INFORMED ç¶æ
-ã«é·ç§»ããã
+ *  start_informed -- INFORMED 状態に遷移する。
  *
- *    æ³¨æ: DHCPv6 ã® RFC3315 ã«ã¯ç¡ã
+ *    注意: DHCPv6 の RFC3315 には無い
  */
 
@@ -1286,6 +1247,5 @@
 start_informed (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* æå¹ãªãªã¼ã¹æ
-å ±ãç¡ããã° SLEEP ã«é·ç§»ããã*/
+	/* 有効なリース情報が無ければ SLEEP に遷移する。*/
 	if (ct->act_msg == NULL) {
 		ct->fsm = DHCP6_FSM_SLEEP;
@@ -1293,10 +1253,8 @@
 		}
 
-	/* ãªã¼ã¹æ
-å ±ãè¨­å®ããã*/
+	/* リース情報を設定する。*/
 	set_lease(ct);
 
-	/* INFORMED ç¶æ
-ã«é·ç§»ããã*/
+	/* INFORMED 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_INFORMED;
 
@@ -1305,8 +1263,7 @@
 
 /*
- *  start_rel_info -- ã¢ãã¬ã¹æ
-å ±ãè§£æ¾ããã
+ *  start_rel_info -- アドレス情報を解放する。
  *
- *    æ³¨æ: DHCPv6 ã® RFC3315 ã«ã¯ç¡ã
+ *    注意: DHCPv6 の RFC3315 には無い
  */
 
@@ -1314,9 +1271,8 @@
 start_rel_info (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* ãªã¼ã¹æ
-å ±ãè§£æ¾ããã*/
+	/* リース情報を解放する。*/
 	rel_lease(ct);
 
-	/* SLEEP ã«é·ç§»ããã*/
+	/* SLEEP に遷移する。*/
 	ct->fsm = DHCP6_FSM_SLEEP;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1324,5 +1280,5 @@
 
 /*
- *  select_info_reply -- æé©ãª REPLY (INFO-REQUEST ã¸ã®å¿ç­) ã¡ãã»ã¼ã¸ãé¸æããã
+ *  select_info_reply -- 最適な REPLY (INFO-REQUEST への応答) メッセージを選択する。
  */
 
@@ -1332,5 +1288,5 @@
 	T_DHCP6_CLI_MSG		*msg;
 
-	/* æé©ãª REPLY ã¡ãã»ã¼ã¸ãé¸æããã*/
+	/* 最適な REPLY メッセージを選択する。*/
 	if ((msg = select_msg(ct)) == NULL)
 		return false;
@@ -1341,5 +1297,5 @@
 
 /*
- *  setup_info_req_msg -- INFO-REQUEST ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_info_req_msg -- INFO-REQUEST メッセージを作成する。
  */
 
@@ -1349,5 +1305,5 @@
 	uint8_t	*msg;
 
-	/* ã¡ãã»ã¼ã¸ã®ãããé¨åãä½æããã*/
+	/* メッセージのヘッダ部分を作成する。*/
 	if ((msg = setup_msg_header(ct, DHCP6_INFO_REQ)) == NULL)
 		return E_PAR;
@@ -1356,9 +1312,8 @@
 		return E_PAR;
 
-	/* ã¡ãã»ã¼ã¸æ§é ä½é·ãè¨­å®ããã*/
+	/* メッセージ構造体長を設定する。*/
 	ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* 送信先アドレスを設定する。*/
 	ct->dst.ipaddr	= in6_addr_all_DHCP_relay_servers;
 	return E_OK;
@@ -1366,5 +1321,5 @@
 
 /*
- *  send_info_req_msg -- INFO-REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_info_req_msg -- INFO-REQUEST メッセージを送信する。
  */
 
@@ -1375,21 +1330,19 @@
 
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®é¸æãçµäºãã¦ããã°ãBOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* REPLY メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	if (select_info_reply(ct)) {
 
-		/* REPLY ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* REPLY メッセージ受信タイマーを停止する。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 		ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
 		syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-		/* INFORMED ç¶æ
-ã«é·ç§»ããã*/
+		/* INFORMED 状態に遷移する。*/
 		start_informed(ct);
 		return;
 		}
 
-	/* åéä¿¡åæ°ãç¢ºèªããã*/
+	/* 再送信回数を確認する。*/
 	if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
 		ct->error  = E_TMOUT;
@@ -1397,5 +1350,5 @@
 		}
 
-	/* INFO-REQUEST ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* INFO-REQUEST メッセージを作成する。*/
 	if ((error = setup_info_req_msg(ct)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP6C] error, setup request message: %s.", itron_strerror(error));
@@ -1404,5 +1357,5 @@
 		}
 
-	/* INFO-REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* INFO-REQUEST メッセージを送信する。*/
 	error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -1412,10 +1365,10 @@
 		}
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_SND_IREQ] = SYSTIM2TIMER(ct->RT);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããæ´æ°ããã*/
+	/* 再送信タイムアウトを更新する。*/
 	advance_retrans(ct);
 	}
@@ -1426,5 +1379,5 @@
 
 /*
- *  select_reply -- æé©ãª REPLY ã¡ãã»ã¼ã¸ãé¸æããã
+ *  select_reply -- 最適な REPLY メッセージを選択する。
  */
 
@@ -1434,5 +1387,5 @@
 	T_DHCP6_CLI_MSG		*msg;
 
-	/* æé©ãª REPLY ã¡ãã»ã¼ã¸ãé¸æããã*/
+	/* 最適な REPLY メッセージを選択する。*/
 	if ((msg = select_msg(ct)) == NULL)
 		return false;
@@ -1444,6 +1397,6 @@
 
 	/*
-	 *  æé©ãª REPLY ã¡ãã»ã¼ã¸ã®æ¨å¥¨åº¦ã ADVERTISE ã¡ãã»ã¼ã¸æ¨å¥¨åº¦ã®
-	 *  1/2 ä»¥ä¸ã®æã¯åä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã
+	 *  最適な REPLY メッセージの推奨度が ADVERTISE メッセージ推奨度の
+	 *  1/2 以下の時は受信メッセージ構造体リストに戻す。
 	 */
 	if ((ct->adv_msg != NULL) && (ct->max_prefer < (ct->adv_msg->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK) / 2)) {
@@ -1456,8 +1409,7 @@
 
 		/*
-		 *  ct->act_msg ã«ããæå¹ãªå
- REPLY ã¡ãã»ã¼ã¸ã
-		 *  åä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã¦ã
-		 *  æé©ãª REPLY ã¡ãã»ã¼ã¸ã act ã«ç§»ãã
+		 *  ct->act_msg にある有効な元 REPLY メッセージを
+		 *  受信メッセージ構造体リストに戻して、
+		 *  最適な REPLY メッセージを act に移す。
 		 */
 		if (ct->act_msg != NULL) {
@@ -1474,5 +1426,5 @@
 
 /*
- *  select_adv -- æé©ãª ADVERTISE ã¡ãã»ã¼ã¸ãé¸æããã
+ *  select_adv -- 最適な ADVERTISE メッセージを選択する。
  */
 
@@ -1480,10 +1432,10 @@
 select_adv (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* æé©ãª ADVERTISE ã¡ãã»ã¼ã¸ã adv ã«ç§»ãã*/
+	/* 最適な ADVERTISE メッセージを adv に移す。*/
 	if ((ct->adv_msg = select_msg(ct)) != NULL) {
 
 		/*
-		 *  æé©ãª ADVERTISE ã¡ãã»ã¼ã¸ã®ãµã¼ãã® IPv6 ã¢ãã¬ã¹ã
-		 *  æ¬¡ããéä¿¡ããã¢ãã¬ã¹ã«è¨­å®ããã
+		 *  最適な ADVERTISE メッセージのサーバの IPv6 アドレスを
+		 *  次から送信するアドレスに設定する。
 		 */
 		ct->dst = ct->adv_msg->srv;
@@ -1495,5 +1447,5 @@
 
 /*
- *  eval_expire -- æ¨å¥¨æå¹æéã¨æå¹æéãæ±ºå®ããã
+ *  eval_expire -- 推奨有効時間と有効時間を決定する。
  */
 
@@ -1511,5 +1463,5 @@
 	uint_t		aoff, asize, addrs;
 
-	/* ã¿ã¤ãã¼ãåæ­¢ããã*/
+	/* タイマーを停止する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_RENEW]  = 0;
@@ -1528,5 +1480,5 @@
 		opt = (T_DHCP6_OPTION*)msg;
 
-		/* IA_NA/IA_PD ãªãã·ã§ã³ã§ããã°ãæå¹æéãæ´æ°ããã*/
+		/* IA_NA/IA_PD オプションであれば、有効時間を更新する。*/
 		if (MSG2HOST16(opt->code) == DHCP6_OPT_IA_NA || MSG2HOST16(opt->code) == DHCP6_OPT_IA_PD) {
 
@@ -1540,5 +1492,5 @@
 			while (aoff < asize) {
 
-				/* æç­ã®æ¨å¥¨æå¹æéãæ´æ°ããã*/
+				/* 最短の推奨有効時間を更新する。*/
 				iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
 				//dump_msg_option("evl_depref1", (uint8_t*)iaa);
@@ -1552,5 +1504,5 @@
 					}
 
-				/* IAADDR ã®æå¹æéãæ´æ°ããã*/
+				/* IAADDR の有効時間を更新する。*/
 				iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
 				if (!(MSG2HOST16(iaa->len) & DHCP6C_IAA_FLAG_EXPIRED)) {
@@ -1570,5 +1522,5 @@
 				}
 
-			/* iaa_low ã¨ iaa_high/2 ã®æé·ã®æ¹ãæå¹æéã¨ãã¦é¸æããã*/
+			/* iaa_low と iaa_high/2 の最長の方を有効時間として選択する。*/
 			if (iaa_low <= (iaa_high / 2))
 				expire = iaa_high;
@@ -1576,5 +1528,5 @@
 				expire = iaa_low;
 
-			/* expire ã æå¤§å¤ï¼ç¡å¶éï¼ã 1 ä»¥ä¸ãªãæ¢å®å¤ã«è¨­å®ããã*/
+			/* expire が 最大値（無制限）か 1 以下なら既定値に設定する。*/
 			if ((expire == DHCP6_MAX_TIME) || (expire <= 1))
 				expire  = SYSTIM2SEC(TMO_DHCP6C_REQ_LEASE) / 2;
@@ -1582,5 +1534,5 @@
 				expire /= 2;
 
-			/* renew ãæ±ºå®ããã*/
+			/* renew を決定する。*/
 			if (MSG2HOST32(ia->renew) == 0)
 				tval = expire + SYSTIM2SEC(ct->act_msg->rcv_time);
@@ -1592,5 +1544,5 @@
 				renew = tval;
 
-			/* rebind ãæ±ºå®ããã*/
+			/* rebind を決定する。*/
 			if (MSG2HOST32(ia->rebind) == 0)
 				tval = (expire + expire / 2) + SYSTIM2SEC(ct->act_msg->rcv_time);
@@ -1602,5 +1554,5 @@
 				rebind = tval;
 
-			/* æç­æå¹æéã¨æé·æå¹æéãæ´æ°ããã*/
+			/* 最短有効時間と最長有効時間を更新する。*/
 			iaa_low  += SYSTIM2SEC(ct->act_msg->rcv_time);
 			iaa_high += SYSTIM2SEC(ct->act_msg->rcv_time);
@@ -1614,17 +1566,15 @@
 		}
 
-	/* ã¢ãã¬ã¹ãéããã¦ããªããã°ãSLEEP ç¶æ
-ã«é·ç§»ããã*/
+	/* アドレスが送られていなければ、SLEEP 状態に遷移する。*/
 	if (addrs == 0) {
 		ct->fsm    = DHCP6_FSM_SLEEP;
 		}
 
-	/* ç¶æ
-ã«ä¾å­ããå¦ç */
+	/* 状態に依存する処理 */
 	switch (ct->fsm) {
 
 	case DHCP6_FSM_BOUND:
 
-		/* RENEW ã¿ã¤ã ã¢ã¦ãã®è¨­å® */
+		/* RENEW タイムアウトの設定 */
 		if ((rebind > SYSTIM2SEC(time)) && (renew < rebind)) {
 			ct->next_MRD = SEC2SYSTIM(rebind) - time;
@@ -1634,9 +1584,9 @@
 			break;
 			}
-		/* break; */	/* ä¸ã«æããã*/
+		/* break; */	/* 下に抜ける。*/
 
 	case DHCP6_FSM_RENEW:
 
-		/* REBIND ã¿ã¤ã ã¢ã¦ãã®è¨­å® */
+		/* REBIND タイムアウトの設定 */
 		ct->MRD = SEC2SYSTIM(rebind);
 		if (rebind != DHCP6_MAX_TIME) {
@@ -1657,5 +1607,5 @@
 		}
 
-	/* DEPREF ã¿ã¤ã ã¢ã¦ãã®è¨­å® */
+	/* DEPREF タイムアウトの設定 */
 	if (depref != DHCP6_MAX_TIME) {
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
@@ -1664,5 +1614,5 @@
 		}
 
-	/* EXPIRE ã¿ã¤ã ã¢ã¦ãã®è¨­å® */
+	/* EXPIRE タイムアウトの設定 */
 	if (low != DHCP6_MAX_TIME) {
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
@@ -1673,6 +1623,5 @@
 
 /*
- *  start_init -- INIT ç¶æ
-ã«é·ç§»ããã
+ *  start_init -- INIT 状態に遷移する。
  */
 
@@ -1680,11 +1629,10 @@
 start_init (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããããRFC3315 (17.1.2) åç
-§ã*/
+	/* タイムアウトを設定する。【RFC3315 (17.1.2) 参照】*/
 	ct->IRT = TMO_SOL_TIMEOUT;
 	ct->MRT = TMO_SOL_MAX_RT;
 	ct->MRC = 0;
 
-	/* DHCP6_CLI_CFG_ONE_TRYãæå®ããã¦ããªããã°æ¨æºã¿ã¤ã ã¢ã¦ãã¾ã§åéããã*/
+	/* DHCP6_CLI_CFG_ONE_TRYが指定されていなければ標準タイムアウトまで再送する。*/
 #if defined(DHCP6_CLI_CFG_ONE_TRY)
 	ct->MRD = 0;
@@ -1693,8 +1641,8 @@
 #endif
 
-	/* åéåæ°ã¨ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* 再送回数とトランザクション ID を設定する。*/
 	init_retrans(ct);
 
-	/* RFC3315 (17.1.2) ã®è¦å®ã«å¾ã£ã¦ã¿ã¤ã ã¢ã¦ããèª¿æ´ããã*/
+	/* RFC3315 (17.1.2) の規定に従ってタイムアウトを調整する。*/
 	if (ct->RT <= ct->IRT)
 		ct->RT = ct->IRT + (ct->IRT - ct->RT);
@@ -1702,5 +1650,5 @@
 		ct->RT = ct->IRT + SEC2SYSTIM(1);
 
-	/* ADVERTISE ã¡ãã»ã¼ã¸ã®åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* ADVERTISE メッセージの受信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_RCV_ADV] = SYSTIM2TIMER(ct->MRD);
@@ -1708,15 +1656,13 @@
 
 	/*
-	 *  SOLICIT ã¡ãã»ã¼ã¸éä¿¡é
-å»¶æéãè¨­å®ããã
-	 *  ãã ããTMO_SOL_MAX_DELAY ã 1[s]ãªã®ã§ãdly_tsk()ãä½¿ç¨ããã
+	 *  SOLICIT メッセージ送信遅延時間を設定する。
+	 *  ただし、TMO_SOL_MAX_DELAY が 1[s]なので、dly_tsk()を使用する。
 	 */
 	dly_tsk(netapp_rand() % TMO_SOL_MAX_DELAY);
 
-	/* INIT ç¶æ
-ã«é·ç§»ããã*/
+	/* INIT 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_INIT;
 
-	/* SOLICIT ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* SOLICIT メッセージを送信する。*/
 	ct->flags |= DHCP6C_FLAG_TMOUT_SND_SOL;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1724,6 +1670,5 @@
 
 /*
- *  start_select -- REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ SELECT ç¶æ
-ã«é·ç§»ããã
+ *  start_select -- REQUEST メッセージを送信して SELECT 状態に遷移する。
  */
 
@@ -1731,6 +1676,5 @@
 start_select (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* æå¹ãª ADVERTISE ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã° SLEEP ç¶æ
-ã«é·ç§»ããã*/
+	/* 有効な ADVERTISE メッセージを受信していなければ SLEEP 状態に遷移する。*/
 	if (ct->adv_msg == NULL) {
 		ct->fsm = DHCP6_FSM_SLEEP;
@@ -1738,6 +1682,5 @@
 		}
 
-	/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããããRFC3315 (18.1.1) åç
-§ã*/
+	/* タイムアウトを設定する。【RFC3315 (18.1.1) 参照】*/
 	ct->IRT = TMO_REQ_TIMEOUT;
 	ct->MRT = TMO_REQ_MAX_RT;
@@ -1745,17 +1688,16 @@
 	ct->MRD = 0;
 
-	/* åéåæ°ã¨ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* 再送回数とトランザクション ID を設定する。*/
 	init_retrans(ct);
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* REPLY メッセージの受信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* SELECT ç¶æ
-ã«é·ç§»ããã*/
+	/* SELECT 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_SELECT;
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* REQUEST メッセージを送信する。*/
 	ct->flags |= DHCP6C_FLAG_TMOUT_SND_REQ;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1763,6 +1705,5 @@
 
 /*
- *  start_bound -- BOUND ç¶æ
-ã«é·ç§»ããã
+ *  start_bound -- BOUND 状態に遷移する。
  */
 
@@ -1770,24 +1711,20 @@
 start_bound (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* æå¹ãªãªã¼ã¹æ
-å ±ãç¡ããã° SLEEP ã«é·ç§»ããã*/
+	/* 有効なリース情報が無ければ SLEEP に遷移する。*/
 	if (ct->act_msg == NULL)
 		ct->fsm = DHCP6_FSM_SLEEP;
 
-	/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* BOUND 状態に遷移する。*/
 	ct->fsm    = DHCP6_FSM_BOUND;
 
-	/* ãªã¼ã¹æ
-å ±ãè¨­å®ããã*/
+	/* リース情報を設定する。*/
 	set_lease(ct);
 
-	/* æå¹æéãæ±ºå®ããã*/
+	/* 有効時間を決定する。*/
 	eval_expire(ct);
 
 	}
 /*
- *  start_renew -- RENEW ç¶æ
-ã«é·ç§»ããã
+ *  start_renew -- RENEW 状態に遷移する。
  */
 
@@ -1795,6 +1732,5 @@
 start_renew (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* æå¹ãªãªã¼ã¹æ
-å ±ãç¡ããã° SLEEP ã«é·ç§»ããã*/
+	/* 有効なリース情報が無ければ SLEEP に遷移する。*/
 	if (ct->act_msg == NULL) {
 		ct->fsm = DHCP6_FSM_SLEEP;
@@ -1802,6 +1738,5 @@
 		}
 
-	/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããããRFC3315 (18.1.3) åç
-§ã*/
+	/* タイムアウトを設定する。【RFC3315 (18.1.3) 参照】*/
 	ct->IRT = TMO_REN_TIMEOUT;
 	ct->MRT = TMO_REN_MAX_RT;
@@ -1809,20 +1744,19 @@
 	ct->MRD = ct->next_MRD;
 
-	/* åéåæ°ã¨ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* 再送回数とトランザクション ID を設定する。*/
 	init_retrans(ct);
 
-	/* REFRESH ã¡ãã»ã¼ã¸ã¿ã¤ããè¨­å®ããã*/
+	/* REFRESH メッセージタイプを設定する。*/
 	ct->refresh_type = DHCP6_RENEW;
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* REPLY メッセージの受信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* RENEW ç¶æ
-ã«é·ç§»ããã*/
+	/* RENEW 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_RENEW;
 
-	/* REFRESH ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* REFRESH メッセージを送信する。*/
 	ct->flags |= DHCP6C_FLAG_TMOUT_SND_REF;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1830,6 +1764,5 @@
 
 /*
- *  start_rebind -- REBIND ç¶æ
-ã«é·ç§»ããã
+ *  start_rebind -- REBIND 状態に遷移する。
  */
 
@@ -1837,6 +1770,5 @@
 start_rebind (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* æå¹ãªãªã¼ã¹æ
-å ±ãç¡ããã° SLEEP ã«é·ç§»ããã*/
+	/* 有効なリース情報が無ければ SLEEP に遷移する。*/
 	if (ct->act_msg == NULL) {
 		ct->fsm = DHCP6_FSM_SLEEP;
@@ -1844,6 +1776,5 @@
 		}
 
-	/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããããRFC3315 (18.1.4) åç
-§ã*/
+	/* タイムアウトを設定する。【RFC3315 (18.1.4) 参照】*/
 	ct->IRT = TMO_REB_TIMEOUT;
 	ct->MRT = TMO_REB_MAX_RT;
@@ -1851,24 +1782,22 @@
 	ct->MRD = ct->next_MRD;
 
-	/* åéåæ°ã¨ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* 再送回数とトランザクション ID を設定する。*/
 	init_retrans(ct);
 
-	/* REFRESH ã¡ãã»ã¼ã¸ã¿ã¤ããè¨­å®ããã*/
+	/* REFRESH メッセージタイプを設定する。*/
 	ct->refresh_type = DHCP6_REBIND;
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®åä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* REPLY メッセージの受信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* 送信先アドレスを設定する。*/
 	ct->dst.ipaddr	= in6_addr_all_DHCP_relay_servers;
 
-	/* REBIND ç¶æ
-ã«é·ç§»ããã*/
+	/* REBIND 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_REBIND;
 
-	/* REFRESH ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* REFRESH メッセージを送信する。*/
 	ct->flags |= DHCP6C_FLAG_TMOUT_SND_REF;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1876,8 +1805,7 @@
 
 /*
- *  start_rel_info -- ã¢ãã¬ã¹æ
-å ±ãè§£æ¾ããã
+ *  start_rel_info -- アドレス情報を解放する。
  *
- *    æ³¨æ: DHCPv6 ã® RFC3315 ã«ã¯ç¡ã
+ *    注意: DHCPv6 の RFC3315 には無い
  */
 
@@ -1885,14 +1813,11 @@
 start_rel_info (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+	/* 全ての TIMER をキャンセルする。*/
 	cancel_all_timers(ct);
 
-	/* ãªã¼ã¹æ
-å ±ãè§£æ¾ããã*/
+	/* リース情報を解放する。*/
 	rel_lease(ct);
 
-	/* æå¹ãªãªã¼ã¹æ
-å ±ãç¡ããã° SLEEP ã«é·ç§»ããã*/
+	/* 有効なリース情報が無ければ SLEEP に遷移する。*/
 	if (ct->act_msg == NULL) {
 		ct->fsm = DHCP6_FSM_SLEEP;
@@ -1900,6 +1825,5 @@
 		}
 
-	/* ã¿ã¤ã ã¢ã¦ããè¨­å®ããããRFC3315 (18.1.1) åç
-§ã*/
+	/* タイムアウトを設定する。【RFC3315 (18.1.1) 参照】*/
 	ct->IRT = TMO_REL_TIMEOUT;
 	ct->MRT = 0;
@@ -1907,12 +1831,11 @@
 	ct->MRD = 0;
 
-	/* åéåæ°ã¨ãã©ã³ã¶ã¯ã·ã§ã³ ID ãè¨­å®ããã*/
+	/* 再送回数とトランザクション ID を設定する。*/
 	init_retrans(ct);
 
-	/* REL_INFO ç¶æ
-ã«é·ç§»ããã*/
+	/* REL_INFO 状態に遷移する。*/
 	ct->fsm = DHCP6_FSM_REL_INFO;
 
-	/* RELEASE ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* RELEASE メッセージを送信する。*/
 	ct->flags |= DHCP6C_FLAG_TMOUT_SND_REL;
 	syscall(sig_sem(SEM_DHCP6_CLI_READY));
@@ -1922,6 +1845,5 @@
 
 /*
- *  solicit_ia_option -- SOLICIT ã¡ãã»ã¼ã¸ã® IA_NA/IA_TA/IA_PD ãªãã·ã§ã³ã®å
-±éé¨åãè¿½å ããã
+ *  solicit_ia_option -- SOLICIT メッセージの IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。
  */
 
@@ -1932,9 +1854,9 @@
 	uint_t			off, len;
 
-	/* ãªãã·ã§ã³ã³ã¼ããè¨­å®ããã*/
+	/* オプションコードを設定する。*/
 	ia = (T_DHCP6_OPT_IA_TA*)msg;
 	HOST2MSG16(ia->code, code);
 
-	/* IAID ãè¨­å®ããã*/
+	/* IAID を設定する。*/
 	if (sizeof(ct->sc->ifaddr.lladdr) > sizeof(uint32_t)) {
 		off = sizeof(ct->sc->ifaddr.lladdr) - 4;
@@ -1949,5 +1871,5 @@
 
 /*
- *  solicit_iaaddr_option -- SOLICIT ã¡ãã»ã¼ã¸ã® IAADDR ãªãã·ã§ã³ãè¿½å ããã
+ *  solicit_iaaddr_option -- SOLICIT メッセージの IAADDR オプションを追加する。
  */
 
@@ -1961,24 +1883,24 @@
 
 	/*
-	 *  æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸ãæ®ã£ã¦ãã¦ã
-	 *  æå®ããããªãã·ã§ã³ï¼IA_NA/IA_TA/IA_PDï¼ãããå ´åã¯
-	 *  åãã¢ãã¬ã¹ãè¦æ±ããã
+	 *  有効なリース・メッセージが残っていて、
+	 *  指定されたオプション（IA_NA/IA_TA/IA_PD）がある場合は
+	 *  同じアドレスを要求する。
 	 */
 	if ((ct->act_msg == NULL) || (opt = find_msg_option(ct->act_msg, code, 0)) == NULL)
 		return 0;
 
-	/* ãªãã·ã§ã³ã³ã¼ããè¨­å®ããã*/
+	/* オプションコードを設定する。*/
 	iaa = (T_DHCP6_OPT_IAADDR*)msg;
 	HOST2MSG16(iaa->code, DHCP6_OPT_IAADDR);
 
-	/* IAADDR ãªãã·ã§ã³ãé¤ãããªãã·ã§ã³é·ãè¨­å®ããã*/
+	/* IAADDR オプションを除いたオプション長を設定する。*/
 	HOST2MSG16(iaa->len, sizeof(*iaa) - sizeof(T_DHCP6_OPTION));
 
-	/* ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* アドレスを設定する。*/
 	len = code == DHCP6_OPT_IA_TA ? sizeof(T_DHCP6_OPT_IA_TA)
 	                              : sizeof(T_DHCP6_OPT_IA_NA_PD);
 	memcpy(&iaa->addr, opt + sizeof(T_DHCP6_OPTION) + len, sizeof(iaa->addr));
 
-	/* T1ãT2 ãè¨­å®ããã*/
+	/* T1、T2 を設定する。*/
 	t1 = TMO_DHCP6C_REQ_LEASE / 2;
 	t2 = t1 + (t1 / 2);
@@ -1992,5 +1914,5 @@
 
 /*
- *  solicit_ia_na_pd -- SOLICIT ã¡ãã»ã¼ã¸ã® IA_NA/IA_PD ãªãã·ã§ã³ãè¿½å ããã
+ *  solicit_ia_na_pd -- SOLICIT メッセージの IA_NA/IA_PD オプションを追加する。
  */
 
@@ -2004,10 +1926,9 @@
 	uint_t			len;
 
-	/* IA_NA/IA_TA/IA_PD ãªãã·ã§ã³ã®å
-±éé¨åãè¿½å ããã*/
+	/* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
 	solicit_ia_option(ct, msg, code);
 	ia = (T_DHCP6_OPT_IA_NA_PD*)msg;
 
-	/* T1ãT2 ãè¨­å®ããã*/
+	/* T1、T2 を設定する。*/
 	t1 = TMO_DHCP6C_REQ_LEASE / 2;
 	t2 = t1 + (t1 / 2);
@@ -2016,12 +1937,12 @@
 
 	/*
-	 *  æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸ãæ®ã£ã¦ãã¦ã
-	 *  æå®ããããªãã·ã§ã³ï¼IA_NA/IA_PDï¼ãããå ´åã¯
-	 *  åãã¢ãã¬ã¹ãè¦æ±ããã
+	 *  有効なリース・メッセージが残っていて、
+	 *  指定されたオプション（IA_NA/IA_PD）がある場合は
+	 *  同じアドレスを要求する。
 	 */
 	msg += sizeof(*ia);
 	len  = solicit_iaaddr_option(ct, msg, code);
 
-	/* IA_NAIA_TA/IA_PD ãªãã·ã§ã³ãé¤ãããªãã·ã§ã³é·ãè¨­å®ããã*/
+	/* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
 	HOST2MSG16(ia->len, (sizeof(*ia) + len) - sizeof(T_DHCP6_OPTION));
 
@@ -2032,5 +1953,5 @@
 
 /*
- *  solicit_ia_ta -- SOLICIT ã¡ãã»ã¼ã¸ã® IA_TA ãªãã·ã§ã³ãè¿½å ããã
+ *  solicit_ia_ta -- SOLICIT メッセージの IA_TA オプションを追加する。
  */
 
@@ -2042,16 +1963,15 @@
 	T_DHCP6_OPT_IA_TA	*ia;
 
-	/* IA_NA/IA_TA/IA_PD ãªãã·ã§ã³ã®å
-±éé¨åãè¿½å ããã*/
+	/* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
 	solicit_ia_option(ct, msg, DHCP6_OPT_IA_TA);
 
-	/* IA_NAIA_TA/IA_PD ãªãã·ã§ã³ãé¤ãããªãã·ã§ã³é·ãè¨­å®ããã*/
+	/* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
 	ia = (T_DHCP6_OPT_IA_TA*)msg;
 	HOST2MSG16(ia->len, sizeof(*ia) - sizeof(T_DHCP6_OPTION));
 
 	/*
-	 *  æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸ãæ®ã£ã¦ãã¦ã
-	 *  æå®ããããªãã·ã§ã³ï¼IA_TAï¼ãããå ´åã¯
-	 *  åãã¢ãã¬ã¹ãè¦æ±ããã
+	 *  有効なリース・メッセージが残っていて、
+	 *  指定されたオプション（IA_TA）がある場合は
+	 *  同じアドレスを要求する。
 	 */
 	msg += sizeof(*ia);
@@ -2062,5 +1982,5 @@
 
 /*
- *  setup_solicit_msg -- SOLICIT ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_solicit_msg -- SOLICIT メッセージを作成する。
  */
 
@@ -2070,5 +1990,5 @@
 	uint8_t	*head, *msg;
 
-	/* ã¡ãã»ã¼ã¸ã®ãããé¨åãä½æããã*/
+	/* メッセージのヘッダ部分を作成する。*/
 	if ((head = setup_msg_header(ct, DHCP6_SOLICIT)) == NULL)
 		return E_PAR;
@@ -2079,5 +1999,5 @@
 #if defined(DHCP6_CLI_CFG_IA_NA)
 
-	/* IA_NA ãè¿½å ããã*/
+	/* IA_NA を追加する。*/
 	msg = solicit_ia_na_pd(ct, msg, DHCP6_OPT_IA_NA);
 #endif
@@ -2085,5 +2005,5 @@
 #if defined(DHCP6_CLI_CFG_IA_TA)
 
-	/* IA_TA ãè¿½å ããã*/
+	/* IA_TA を追加する。*/
 	msg = solicit_ia_ta(ct, msg);
 #endif
@@ -2091,13 +2011,12 @@
 #if defined(DHCP6_CLI_CFG_IA_PD)
 
-	/* IA_PD ãè¿½å ããã*/
+	/* IA_PD を追加する。*/
 	msg = solicit_ia_na_pd(ct, msg, DHCP6_OPT_IA_PD);
 #endif
 
-	/* ã¡ãã»ã¼ã¸æ§é ä½é·ãè¨­å®ããã*/
+	/* メッセージ構造体長を設定する。*/
 	ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* 送信先アドレスを設定する。*/
 	ct->dst.ipaddr	= in6_addr_all_DHCP_relay_servers;
 	return E_OK;
@@ -2105,5 +2024,5 @@
 
 /*
- *  send_solicit_msg -- SOLICIT ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_solicit_msg -- SOLICIT メッセージを送信する。
  */
 
@@ -2116,20 +2035,18 @@
 	ct->error = E_OK;
 
-	/* ADVERTISE ã¡ãã»ã¼ã¸ã®é¸æãçµäºãã¦ããã°ãSELECT ç¶æ
-ã«é·ç§»ããã*/
+	/* ADVERTISE メッセージの選択が終了していれば、SELECT 状態に遷移する。*/
 	if (select_adv(ct)) {
 
-		/* ADVERTISE ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* ADVERTISE メッセージ受信タイマーを停止する。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 		ct->timers[DHCP6C_TIMER_RCV_ADV] = 0;
 		syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
- 		/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ SELECT ç¶æ
-ã«é·ç§»ããã*/
+ 		/* REQUEST メッセージを送信して SELECT 状態に遷移する。*/
  		start_select(ct);
 		return;
 		}
 
-	/* åéä¿¡åæ°ãç¢ºèªããã*/
+	/* 再送信回数を確認する。*/
 	if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
 		ct->error  = E_TMOUT;
@@ -2137,5 +2054,5 @@
 		}
 
-	/* SOLICIT ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* SOLICIT メッセージを作成する。*/
 	if ((error = setup_solicit_msg(ct, NULL)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP6C] error, setup solicit message: %s.", itron_strerror(error));
@@ -2144,5 +2061,5 @@
 		}
 
-	/* SOLICIT ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* SOLICIT メッセージを送信する。*/
 	error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -2152,16 +2069,15 @@
 		}
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_SND_SOL] = SYSTIM2TIMER(ct->RT);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããæ´æ°ããã*/
+	/* 再送信タイムアウトを更新する。*/
 	advance_retrans(ct);
 	}
 
 /*
- *  request_ia_option -- REQUEST ã¡ãã»ã¼ã¸ã® IA_NA/IA_TA/IA_PD ãªãã·ã§ã³ã®å
-±éé¨åãè¿½å ããã
+ *  request_ia_option -- REQUEST メッセージの IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。
  */
 
@@ -2176,11 +2092,11 @@
 	src = (T_DHCP6_OPT_IA_NA_PD*)lease;
 
-	/* ãªãã·ã§ã³ã³ã¼ããè¨­å®ããã*/
+	/* オプションコードを設定する。*/
 	HOST2MSG16(dst->code, code);
 
-	/* IA_NAIA_TA/IA_PD ãªãã·ã§ã³ãé¤ãããªãã·ã§ã³é·ãè¨­å®ããã*/
+	/* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
 	HOST2MSG16(dst->len, sizeof(*dst) - (sizeof(dst->code) + sizeof(dst->len)));
 
-	/* ADVERTISE ã¡ãã»ã¼ã¸ãã IA ID ãã³ãã¼ããã*/
+	/* ADVERTISE メッセージから IA ID をコピーする。*/
 	memcpy(&dst->iaid, &src->iaid, sizeof(src->iaid));
 
@@ -2191,5 +2107,5 @@
 
 /*
- *  request_ia_na_pd -- REQUEST ã¡ãã»ã¼ã¸ã® IA_NA/IA_PD ãªãã·ã§ã³ãè¿½å ããã
+ *  request_ia_na_pd -- REQUEST メッセージの IA_NA/IA_PD オプションを追加する。
  */
 
@@ -2205,15 +2121,14 @@
 	uint_t			ix, nsiaa;
 
-	/* ADVERTISE ã¡ãã»ã¼ã¸ã«æå®ããããªãã·ã§ã³ããããã¨ãç¢ºèªããã*/
+	/* ADVERTISE メッセージに指定されたオプションがあることを確認する。*/
 	if ((opt = find_msg_option(lease, opt_code, 0)) == NULL)
 		return msg;
 
-	/* IA_NA/IA_TA/IA_PD ãªãã·ã§ã³ã®å
-±éé¨åãè¿½å ããã*/
+	/* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
 	dia = (T_DHCP6_OPT_IA_NA_PD*)msg;
 	sia = (T_DHCP6_OPT_IA_NA_PD*)opt;
 	msg = request_ia_option(ct, msg, opt_code, opt);
 
-	/* T1ãT2 ãæ±ºå®ããã*/
+	/* T1、T2 を決定する。*/
 	switch (msg_type) {
 	case DHCP6_REQUEST:
@@ -2236,10 +2151,10 @@
 		}
 
-	/* T1ãT2 ãè¨­å®ããã*/
+	/* T1、T2 を設定する。*/
 	HOST2MSG32(dia->renew,  t1);
 	HOST2MSG32(dia->rebind, t2);
 	msg += sizeof(dia->renew) + sizeof(dia->rebind);
 
-	/* IAADDR ãªãã·ã§ã³ãè¨­å®ããã*/
+	/* IAADDR オプションを設定する。*/
 	nsiaa = ((MSG2HOST16(sia->len) & ~DHCP6C_IAA_FLAG_MASK) - (sizeof(*sia) - (sizeof(sia->code) + sizeof(sia->len)))) / sizeof(*siaa);
 
@@ -2248,18 +2163,18 @@
 		siaa = (T_DHCP6_OPT_IAADDR*)((opt + sizeof(*sia)) + sizeof(*siaa) * ix);
 
-		/* ã¢ãã¬ã¹ã®æå¹æéãåãã¦ããã°ã¹ã­ããããã*/
+		/* アドレスの有効期限が切れていればスキップする。*/
 		if (MSG2HOST16(siaa->len) & DHCP6C_IAA_FLAG_EXPIRED)
 			continue;
 
-		/* ã³ã¼ãã¨é·ããè¨­å®ããã*/
+		/* コードと長さを設定する。*/
 		memcpy(&diaa->code, &siaa->code, sizeof(siaa->code));
 		HOST2MSG16(diaa->len, MSG2HOST16(siaa->len) & ~DHCP6C_IAA_FLAG_MASK);
 		msg += sizeof(dia->code) + sizeof(dia->len);
 
-		/* IPv6 ã¢ãã¬ã¹ãã³ãã¼ããã*/
+		/* IPv6 アドレスをコピーする。*/
 		memcpy(&diaa->addr, &siaa->addr, sizeof(siaa->addr));
 		msg += sizeof(diaa->addr);
 
-		/* T1ãT2 ãæ±ºå®ããã*/
+		/* T1、T2 を決定する。*/
 		switch (msg_type) {
 		case DHCP6_REQUEST:
@@ -2282,11 +2197,10 @@
 			}
 
-		/* T1ãT2 ãè¨­å®ããã*/
+		/* T1、T2 を設定する。*/
 		HOST2MSG32(diaa->prefer, t1);
 		HOST2MSG32(diaa->valid,  t2);
 		msg += sizeof(diaa->prefer) + sizeof(diaa->valid);
 
-		/* IAADDR ã«ä»å ãªãã·ã§ã³ãè¿½å ãããå
-éããã*/
+		/* IAADDR に付加オプションを追加する【先送り】。*/
 		}
 
@@ -2299,5 +2213,5 @@
 
 /*
- *  request_ia_ta -- REQUEST ã¡ãã»ã¼ã¸ã® IA_TA ãªãã·ã§ã³ãè¿½å ããã
+ *  request_ia_ta -- REQUEST メッセージの IA_TA オプションを追加する。
  */
 
@@ -2313,15 +2227,14 @@
 	uint_t			ix, nsiaa;
 
-	/* ADVERTISE ã¡ãã»ã¼ã¸ã« IA_TA ãªãã·ã§ã³ããããã¨ãç¢ºèªããã*/
+	/* ADVERTISE メッセージに IA_TA オプションがあることを確認する。*/
 	if ((opt = find_msg_option(lease, DHCP6_OPT_IA_TA, 0)) == NULL)
 		return msg;
 
-	/* IA_NA/IA_TA/IA_PD ãªãã·ã§ã³ã®å
-±éé¨åãè¿½å ããã*/
+	/* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
 	dia = (T_DHCP6_OPT_IA_TA*)msg;
 	sia = (T_DHCP6_OPT_IA_TA*)opt;
 	msg = request_ia_option(ct, msg, DHCP6_OPT_IA_TA, opt);
 
-	/* IAADDR ãªãã·ã§ã³ãè¨­å®ããã*/
+	/* IAADDR オプションを設定する。*/
 	nsiaa = ((MSG2HOST16(sia->len) & ~DHCP6C_IAA_FLAG_MASK) - (sizeof(*sia) - (sizeof(sia->code) + sizeof(sia->len)))) / sizeof(*siaa);
 
@@ -2330,18 +2243,18 @@
 		siaa = (T_DHCP6_OPT_IAADDR*)((opt + sizeof(*sia)) + sizeof(*siaa) * ix);
 
-		/* ã¢ãã¬ã¹ã®æå¹æéãåãã¦ããã°ã¹ã­ããããã*/
+		/* アドレスの有効期限が切れていればスキップする。*/
 		if (MSG2HOST16(siaa->len) & DHCP6C_IAA_FLAG_EXPIRED)
 			continue;
 
-		/* ã³ã¼ãã¨é·ããè¨­å®ããã*/
+		/* コードと長さを設定する。*/
 		memcpy(diaa->code, siaa->code, sizeof(siaa->code));
 		diaa->len  = HOST2MSG16(MSG2HOST16(siaa->len) & ~DHCP6C_IAA_FLAG_MASK);
 		msg += sizeof(dia->code) + sizeof(dia->len);
 
-		/* IPv6 ã¢ãã¬ã¹ãã³ãã¼ããã*/
+		/* IPv6 アドレスをコピーする。*/
 		memcpy(diaa->addr, siaa->addr, sizeof(siaa->addr));
 		msg += sizeof(diaa->addr);
 
-		/* T1ãT2 ãæ±ºå®ããã*/
+		/* T1、T2 を決定する。*/
 		switch (msg_type) {
 		case DHCP6_REQUEST:
@@ -2364,11 +2277,10 @@
 			}
 
-		/* T1ãT2 ãè¨­å®ããã*/
+		/* T1、T2 を設定する。*/
 		HOST2MSG32(diaa->prefer, t1);
 		HOST2MSG32(diaa->valid,  t2);
 		msg += sizeof(diaa->prefer) + sizeof(diaa->valid);
 
-		/* IAADDR ã«ä»å ãªãã·ã§ã³ãè¿½å ãããå
-éããã*/
+		/* IAADDR に付加オプションを追加する【先送り】。*/
 		}
 
@@ -2379,5 +2291,5 @@
 
 /*
- *  setup_request_msg -- REQUEST ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_request_msg -- REQUEST メッセージを作成する。
  */
 
@@ -2387,5 +2299,5 @@
 	uint8_t	*msg;
 
-	/* ã¡ãã»ã¼ã¸ã®ãããé¨åãä½æããã*/
+	/* メッセージのヘッダ部分を作成する。*/
 	if ((msg = setup_msg_header(ct, type)) == NULL)
 		return E_PAR;
@@ -2396,5 +2308,5 @@
 #if defined(DHCP6_CLI_CFG_IA_NA)
 
-	/* IA_NA ãè¿½å ããã*/
+	/* IA_NA を追加する。*/
 	msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_NA, lease);
 #endif
@@ -2402,5 +2314,5 @@
 #if defined(DHCP6_CLI_CFG_IA_TA)
 
-	/* IA_TA ãè¿½å ããã*/
+	/* IA_TA を追加する。*/
 	msg = request_ia_ta(ct, msg, type, lease);
 #endif
@@ -2408,9 +2320,9 @@
 #if defined(DHCP6_CLI_CFG_IA_PD)
 
-	/* IA_PD ãè¿½å ããã*/
+	/* IA_PD を追加する。*/
 	msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_PD, lease);
 #endif
 
-	/* ã¡ãã»ã¼ã¸æ§é ä½é·ãè¨­å®ããã*/
+	/* メッセージ構造体長を設定する。*/
 	ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
 	return E_OK;
@@ -2418,5 +2330,5 @@
 
 /*
- *  send_request_msg -- REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_request_msg -- REQUEST メッセージを送信する。
  */
 
@@ -2429,5 +2341,5 @@
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 
-	/* ADVERTISE ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã°ã¨ã©ã¼ */
+	/* ADVERTISE メッセージを受信していなければエラー */
 	if (ct->adv_msg == NULL) {
 		ct->error  = E_OBJ;
@@ -2435,14 +2347,13 @@
 		}
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®é¸æãçµäºãã¦ããã°ãBOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* REPLY メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
 	if (select_reply(ct)) {
 
-		/* REPLY ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* REPLY メッセージ受信タイマーを停止する。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 		ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
 		syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	 	/* ADVERTISE ã¡ãã»ã¼ã¸ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+	 	/* ADVERTISE メッセージを受信メッセージ構造体リストに戻す。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 		ct->adv_msg->next = ct->rcv_lst;
@@ -2451,11 +2362,10 @@
 		syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 
-		/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+		/* BOUND 状態に遷移する。*/
 		start_bound(ct);
 		return;
 		}
 
-	/* åéä¿¡åæ°ãç¢ºèªããã*/
+	/* 再送信回数を確認する。*/
 	if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
 		ct->error  = E_TMOUT;
@@ -2463,5 +2373,5 @@
 		}
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* REQUEST メッセージを作成する。*/
 	if ((error = setup_request_msg(ct, ct->adv_msg, DHCP6_REQUEST)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP6C] error, setup request message: %s.", itron_strerror(error));
@@ -2470,5 +2380,5 @@
 		}
 
-	/* REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* REQUEST メッセージを送信する。*/
 	error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -2478,15 +2388,15 @@
 		}
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_SND_REQ] = SYSTIM2TIMER(ct->RT);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããæ´æ°ããã*/
+	/* 再送信タイムアウトを更新する。*/
 	advance_retrans(ct);
 	}
 
 /*
- *  send_refresh_msg -- REFRESH ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_refresh_msg -- REFRESH メッセージを送信する。
  */
 
@@ -2498,34 +2408,30 @@
 	uint8_t			*opt;
 
-	/* æå¹ãªãªã¼ã¹æ
-å ±ããªããã°ã¨ã©ã¼ */
+	/* 有効なリース情報がなければエラー */
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	if (ct->act_msg == NULL)
 		ct->error = E_OBJ;
 
-	/* REFRESH ã¿ã¤ãã RENEW ã¾ãã¯ REBIND ã§ãªããã°ã¨ã©ã¼ */
+	/* REFRESH タイプが RENEW または REBIND でなければエラー */
 	if (!((ct->refresh_type == DHCP6_RENEW) || (ct->refresh_type == DHCP6_REBIND)))
 		ct->error = E_PAR;
 
-	/* REPLY ã¡ãã»ã¼ã¸ã®é¸æãçµäºãã¦ããã°ãBOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* REPLY メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
 	if (select_reply(ct)) {
 
-		/* REPLY ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* REPLY メッセージ受信タイマーを停止する。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 		ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
 		syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-		/* ãªã¼ã¹æ
-å ±ãè§£æ¾ããã*/
+		/* リース情報を解放する。*/
 		rel_lease(ct);
 
-		/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+		/* BOUND 状態に遷移する。*/
 		start_bound(ct);
 		return;
 		}
 
-	/* åéä¿¡åæ°ãç¢ºèªããã*/
+	/* 再送信回数を確認する。*/
 	if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
 		eval_expire(ct);
@@ -2534,7 +2440,6 @@
 
 	/*
-	 *  ãµã¼ããã UNICAST ãªãã·ã§ã³ãåä¿¡ããã¨ãã¯
-	 *  æå®ããã¢ãã¬ã¹ãéä¿¡å
-ã¢ãã¬ã¹ã«è¨­å®ããã
+	 *  サーバから UNICAST オプションを受信したときは
+	 *  指定したアドレスを送信先アドレスに設定する。
 	 */
 	if ((opt = find_msg_option(ct->act_msg, DHCP6_OPT_UNICAST, sizeof(T_DHCP6_OPT_UNICAST))) != NULL) {
@@ -2543,5 +2448,5 @@
 		}
 
-	/* REFRESH (REQUEST) ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* REFRESH (REQUEST) メッセージを作成する。*/
 	if ((error = setup_request_msg(ct, ct->act_msg, ct->refresh_type)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP6C] error, setup refresh message: %s.", itron_strerror(error));
@@ -2550,5 +2455,5 @@
 		}
 
-	/* REFRESH ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* REFRESH メッセージを送信する。*/
 	error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -2558,15 +2463,15 @@
 		}
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_SND_REF] = SYSTIM2TIMER(ct->RT);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããæ´æ°ããã*/
+	/* 再送信タイムアウトを更新する。*/
 	advance_retrans(ct);
 	}
 
 /*
- *  setup_release_msg -- RELEASE ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_release_msg -- RELEASE メッセージを作成する。
  */
 
@@ -2576,5 +2481,5 @@
 	uint8_t	*msg;
 
-	/* ã¡ãã»ã¼ã¸ã®ãããé¨åãä½æããã*/
+	/* メッセージのヘッダ部分を作成する。*/
 	if ((msg = setup_msg_header(ct, type)) == NULL)
 		return E_PAR;
@@ -2585,5 +2490,5 @@
 #if defined(DHCP6_CLI_CFG_IA_NA)
 
-	/* IA_NA ãè¿½å ããã*/
+	/* IA_NA を追加する。*/
 	msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_NA, lease);
 #endif
@@ -2591,9 +2496,9 @@
 #if defined(DHCP6_CLI_CFG_IA_PD)
 
-	/* IA_PD ãè¿½å ããã*/
+	/* IA_PD を追加する。*/
 	msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_PD, lease);
 #endif
 
-	/* ã¡ãã»ã¼ã¸æ§é ä½é·ãè¨­å®ããã*/
+	/* メッセージ構造体長を設定する。*/
 	ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
 	return E_OK;
@@ -2601,5 +2506,5 @@
 
 /*
- *  send_release_msg -- RELEASE ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_release_msg -- RELEASE メッセージを送信する。
  */
 
@@ -2609,20 +2514,19 @@
 	ER	error;
 
-	/* æå¹ãª REPLY ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããªããã°ã¨ã©ã¼ */
+	/* 有効な REPLY メッセージを受信していなければエラー */
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	if (ct->act_msg == NULL)
 		ct->error = E_OBJ;
 
-	/* æå¹ãª REPLY ã¡ãã»ã¼ã¸ãåä¿¡ãã¦ããã°ãSLEEP ç¶æ
-ã«é·ç§»ããã*/
+	/* 有効な REPLY メッセージを受信していれば、SLEEP 状態に遷移する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 	if (ct->prf_lst != NULL) {
 
-		/* åéä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* 再送信タイマーを停止する。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 		ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
 		syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-		/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã*/
+		/* 有効なリース・メッセージ構造体を解放する。*/
 		if (ct->act_msg != NULL) {
 			syscall(rel_mpf(MPF_DHCP6_CLI_MSG, (void*)ct->act_msg));
@@ -2630,6 +2534,5 @@
 			}
 
-		/* SLEEP ç¶æ
-ã«é·ç§»ããã*/
+		/* SLEEP 状態に遷移する。*/
 		ct->fsm    = DHCP6_FSM_SLEEP;
 		syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
@@ -2638,5 +2541,5 @@
 	syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 
-	/* åéä¿¡åæ°ãç¢ºèªããã*/
+	/* 再送信回数を確認する。*/
 	if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
 		ct->error  = E_TMOUT;
@@ -2644,5 +2547,5 @@
 		}
 
-	/* RELEASE ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* RELEASE メッセージを作成する。*/
 	if ((error = setup_release_msg(ct, ct->act_msg, DHCP6_RELEASE)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP6C] error, setup release message: %s.", itron_strerror(error));
@@ -2651,5 +2554,5 @@
 		}
 
-	/* RELEASE ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+	/* RELEASE メッセージを送信する。*/
 	error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
 	if (error != E_WBLK) {
@@ -2659,15 +2562,15 @@
 		}
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 再送信タイムアウトを設定する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
 	ct->timers[DHCP6C_TIMER_SND_REL] = SYSTIM2TIMER(ct->RT);
 	syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
 
-	/* åéä¿¡ã¿ã¤ã ã¢ã¦ããæ´æ°ããã*/
+	/* 再送信タイムアウトを更新する。*/
 	advance_retrans(ct);
 	}
 
 /*
- *  advertise_msg_timeout -- ADVERTISE ã¡ãã»ã¼ã¸ã®ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  advertise_msg_timeout -- ADVERTISE メッセージのタイムアウト処理
  */
 
@@ -2675,5 +2578,5 @@
 advertise_msg_timeout (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* SOLICIT ã¡ãã»ã¼ã¸éä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+	/* SOLICIT メッセージ送信タイマーを停止する。*/
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
@@ -2683,7 +2586,6 @@
 	if (select_adv(ct)) {
 		/*
-		 *  ADVERTISE ã¡ãã»ã¼ã¸ã®é¸æãçµäºãã¦ããã°ã
- 		 *  REQUEST ã¡ãã»ã¼ã¸ãéä¿¡ãã¦ SELECT ç¶æ
-ã«é·ç§»ããã
+		 *  ADVERTISE メッセージの選択が終了していれば、
+ 		 *  REQUEST メッセージを送信して SELECT 状態に遷移する。
  		 */
  		start_select(ct);
@@ -2694,5 +2596,5 @@
 
 /*
- *  renew_timeout -- RENEW ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  renew_timeout -- RENEW タイムアウト処理
  */
 
@@ -2700,6 +2602,5 @@
 renew_timeout (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* RENEW ç¶æ
-ã«é·ç§»ããã*/
+	/* RENEW 状態に遷移する。*/
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	start_renew(ct);
@@ -2707,5 +2608,5 @@
 
 /*
- *  rebind_timeout -- REBIND ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  rebind_timeout -- REBIND タイムアウト処理
  */
 
@@ -2713,6 +2614,5 @@
 rebind_timeout (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* REBIND ç¶æ
-ã«é·ç§»ããã*/
+	/* REBIND 状態に遷移する。*/
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	start_rebind(ct);
@@ -2720,5 +2620,5 @@
 
 /*
- *  depref_timeout -- DEPREF ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  depref_timeout -- DEPREF タイムアウト処理
  */
 
@@ -2733,5 +2633,5 @@
 	uint_t		aoff, asize;
 
-	/* æå¹ãªãªã¼ã¹ãç¡ããã°å¦ççµäº */
+	/* 有効なリースが無ければ処理終了 */
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	if (ct->act_msg == NULL) {
@@ -2744,5 +2644,5 @@
 	while (msg < last) {
 
-		/* IA_NA/IA_PD ãªãã·ã§ã³ã§ããã°ãæ¨å¥¨æå¹æéãç¢ºèªããã*/
+		/* IA_NA/IA_PD オプションであれば、推奨有効時間を確認する。*/
 		opt = (T_DHCP6_OPTION*)msg;
 		if (MSG2HOST16(opt->code) == DHCP6_OPT_IA_NA || MSG2HOST16(opt->code) == DHCP6_OPT_IA_PD) {
@@ -2753,10 +2653,10 @@
 				                  aoff += (MSG2HOST16(iaa->len) & ~DHCP6C_IAA_FLAG_MASK) + sizeof(*iaa)) {
 
-				/* ãã§ã«æ¨å¥¨æå¹æéãçµéãã¦ããã°å¦çããªãã*/
+				/* すでに推奨有効時間を経過していれば処理しない。*/
 				iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
 				if ((MSG2HOST16(iaa->len) & DHCP6C_IAA_FLAG_DEPREFERD))
 					continue;
 
-				/* æ¨å¥¨æå¹æéçµéãã¦ããã° FLAG ãè¨­å®ããã*/
+				/* 推奨有効時間経過していれば FLAG を設定する。*/
 				if (TIMEC_GE(time, ct->act_msg->rcv_time + MSG2HOST32(iaa->prefer))) {
 					HOST2MSG16(iaa->len, MSG2HOST16(iaa->len) | DHCP6C_IAA_FLAG_DEPREFERD);
@@ -2766,6 +2666,5 @@
 						syslog(LOG_NOTICE, "[DHCP6C] prefix  depreferd: %s.", ipv62str(NULL, &iaa->addr));
 
-					/*ãDNS ã®å¦çãå¿
-è¦ã*/
+					/*【DNS の処理が必要】*/
 					}
 				}
@@ -2778,5 +2677,5 @@
 
 /*
- *  expire_timeout -- EXPIRE ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  expire_timeout -- EXPIRE タイムアウト処理
  */
 
@@ -2791,5 +2690,5 @@
 	uint_t		aoff, asize, addrs = 0;
 
-	/* æå¹ãªãªã¼ã¹ãç¡ããã°å¦ççµäº */
+	/* 有効なリースが無ければ処理終了 */
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	if (ct->act_msg == NULL) {
@@ -2802,5 +2701,5 @@
 	while (msg < last) {
 
-		/* IA_NA/IA_PD ãªãã·ã§ã³ã§ããã°ãæå¹æéãç¢ºèªããã*/
+		/* IA_NA/IA_PD オプションであれば、有効時間を確認する。*/
 		opt = (T_DHCP6_OPTION*)msg;
 		if (MSG2HOST16(opt->code) == DHCP6_OPT_IA_NA || MSG2HOST16(opt->code) == DHCP6_OPT_IA_PD) {
@@ -2811,10 +2710,10 @@
 				                  aoff += (MSG2HOST16(iaa->len) & ~DHCP6C_IAA_FLAG_MASK) + sizeof(*iaa)) {
 
-				/* ãã§ã«æå¹æéãçµéãã¦ããã°å¦çããªãã*/
+				/* すでに有効時間を経過していれば処理しない。*/
 				iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
 				if ((MSG2HOST16(iaa->len) & DHCP6C_IAA_FLAG_EXPIRED))
 					continue;
 
-				/* æå¹æéçµéãã¦ããã° FLAG ãè¨­å®ããã*/
+				/* 有効時間経過していれば FLAG を設定する。*/
 				if (TIMEC_GE(time, ct->act_msg->rcv_time + MSG2HOST32(iaa->valid))) {
 					HOST2MSG16(iaa->len, MSG2HOST16(iaa->len) | DHCP6C_IAA_FLAG_EXPIRED);
@@ -2824,6 +2723,5 @@
 						syslog(LOG_NOTICE, "[DHCP6C] prefix  expired: %s.", ipv62str(NULL, &iaa->addr));
 
-					/*ãDNS ã®å¦çãå¿
-è¦ã*/
+					/*【DNS の処理が必要】*/
 					continue;
 					}
@@ -2834,10 +2732,8 @@
 		}
 
-	/* æå¹ãªã¢ãã¬ã¹ãå
-¨ã¦ç¡ããªã£ãæã¯ INIT ç¶æ
-ã«é·ç§»ããã*/
+	/* 有効なアドレスが全て無くなった時は INIT 状態に遷移する。*/
 	if (addrs == 0) {
 
-	 	/* ACTIVE ãªã¼ã¹ãåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã«æ»ãã*/
+	 	/* ACTIVE リースを受信メッセージ構造体リストに戻す。*/
 		syslog(LOG_NOTICE, "[DHCP6C] all address expired.");
 		syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
@@ -2847,10 +2743,8 @@
 		syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 
-		/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+		/* 全ての TIMER をキャンセルする。*/
 		cancel_all_timers(ct);
 
-		/* INIT ç¶æ
-ã«é·ç§»ããã*/
+		/* INIT 状態に遷移する。*/
 		start_init(ct);
 		return;
@@ -2863,5 +2757,5 @@
 
 /*
- *  reply_msg_timeout -- REPLY ã¡ãã»ã¼ã¸ã®ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  reply_msg_timeout -- REPLY メッセージのタイムアウト処理
  */
 
@@ -2869,5 +2763,5 @@
 reply_msg_timeout (T_DHCP6_CLI_CONTEXT *ct)
 {
-	/* SOLICIT ã¡ãã»ã¼ã¸éä¿¡ã¿ã¤ãã¼ãåæ­¢ããã*/
+	/* SOLICIT メッセージ送信タイマーを停止する。*/
 	ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
 	syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
@@ -2878,5 +2772,5 @@
 #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS || DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_RA
 
-	/* STATELES ã¢ã¼ãã§ã¯SLEEP ã«é·ç§»ããã*/
+	/* STATELES モードではSLEEP に遷移する。*/
 	ct->error = E_TMOUT;
 	ct->fsm   = DHCP6_FSM_SLEEP;
@@ -2886,14 +2780,11 @@
 #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATEFULL || DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_RA
 
-	/* RENEW ã¡ãã»ã¼ã¸ã®é¸æãçµäºãã¦ããã°ãBOUND ç¶æ
-ã«é·ç§»ããã*/
+	/* RENEW メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
 	if (select_reply(ct)) {
 
-		/* ãªã¼ã¹æ
-å ±ãè§£æ¾ããã*/
+		/* リース情報を解放する。*/
 		rel_lease(ct);
 
-		/* BOUND ç¶æ
-ã«é·ç§»ããã*/
+		/* BOUND 状態に遷移する。*/
 		start_bound(ct);
 		}
@@ -2901,5 +2792,5 @@
 		eval_expire(ct);
 	else {
-		/* SLEEP ã«é·ç§»ããã*/
+		/* SLEEP に遷移する。*/
 		ct->error = E_TMOUT;
 		ct->fsm   = DHCP6_FSM_SLEEP;
@@ -2910,5 +2801,5 @@
 
 /*
- *  dispatch_timeout -- ã¿ã¤ã ã¢ã¦ãããæã®å¦ç
+ *  dispatch_timeout -- タイムアウトした時の処理
  */
 
@@ -2980,5 +2871,5 @@
 
 /*
- *  dispatch_event -- ã¤ãã³ãæ¯ã®å¦ç
+ *  dispatch_event -- イベント毎の処理
  */
 
@@ -2990,6 +2881,5 @@
 	while (ct->fsm != DHCP6_FSM_SLEEP && error == E_OK) {
 
-		/* ã¡ãã»ã¼ã¸ã®éåä¿¡ã¨ã¿ã¤ã ã¢ã¦ããå¾
-ã¤ã*/
+		/* メッセージの送受信とタイムアウトを待つ。*/
 		syscall(wai_sem(SEM_DHCP6_CLI_READY));
 
@@ -3012,5 +2902,5 @@
 
 /*
- *  init_context -- DHCPv6 ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½ãåæåããã
+ *  init_context -- DHCPv6 クライアントコンテキスト構造体を初期化する。
  */
 
@@ -3025,5 +2915,5 @@
 
 /*
- *  rel_cli_msg -- ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã
+ *  rel_cli_msg -- メッセージ構造体を解放する。
  */
 
@@ -3060,5 +2950,5 @@
 #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS
 
-	/* ã¹ãã¼ãã¬ã¹ã®æã¯æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã*/
+	/* ステートレスの時は有効なリース・メッセージ構造体も解放する。*/
 	if (ct->act_msg != NULL) {
 		syscall(rel_mpf(MPF_DHCP6_CLI_MSG, (void*)ct->act_msg));
@@ -3072,5 +2962,5 @@
 
 /*
- *  init_cli_msg -- åã¡ãã»ã¼ã¸æ§é ä½ãåæåããã
+ *  init_cli_msg -- 各メッセージ構造体を初期化する。
  */
 
@@ -3082,5 +2972,5 @@
 	int		count;
 
-	/* éä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãç²å¾ããã*/
+	/* 送信メッセージ構造体を獲得する。*/
 	if ((error = tget_mpf(MPF_DHCP6_CLI_MSG, (void*)&ct->snd_msg, TMO_DHCP6C_MPF_GET)) != E_OK) {
 		syslog(LOG_NOTICE, "[DHCP6C] error, tget_mpf() for send: %s.", itron_strerror(error));
@@ -3089,6 +2979,6 @@
 
 	/*
-	 *  æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½ãããå ´åã¯ã
-	 *  ç²å¾ããåä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ãã®æ§é ä½ã 1æ¸ããã
+	 *  有効なリース・メッセージ構造体がある場合は、
+	 *  獲得する受信メッセージ構造体リストの構造体を 1減らす。
 	 */
 	if (ct->act_msg == NULL)
@@ -3097,5 +2987,5 @@
 		count = NUM_DHCP6_CLI_MSG_LIST - 1;
 
-	/* åä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãç²å¾ããã*/
+	/* 受信メッセージ構造体を獲得する。*/
 	syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 	while (count --> 0) {
@@ -3113,6 +3003,5 @@
 
 /*
- *  dhcp6c_renew_info -- ãããã¯ã¼ã¯æ
-å ±ãååå¾ããã
+ *  dhcp6c_renew_info -- ネットワーク情報を再取得する。
  */
 
@@ -3125,6 +3014,5 @@
 	if (context.fsm == DHCP6_FSM_INFORMED) {
 
-		/* REL_INFO ç¶æ
-ã«é·ç§»ããå¾ã« SLEEP ãè§£é¤ããããã«è¨­å®ããã*/
+		/* REL_INFO 状態に遷移した後に SLEEP を解除するように設定する。*/
 		context.flags |= DHCP6C_FLAG_RENEW;
 		start_rel_info(&context);
@@ -3133,5 +3021,5 @@
 	else if (context.fsm == DHCP6_FSM_SLEEP) {
 
-		/* SLEEP ãè§£é¤ããã*/
+		/* SLEEP を解除する。*/
 		wup_tsk(DHCP6_CLI_TASK);
 		return E_OK;
@@ -3144,6 +3032,5 @@
 	if (context.fsm == DHCP6_FSM_BOUND) {
 
-		/* RENEW ç¶æ
-ã«é·ç§»ããã*/
+		/* RENEW 状態に遷移する。*/
 		start_renew(&context);
 		return E_OK;
@@ -3151,5 +3038,5 @@
 	else if (context.fsm == DHCP6_FSM_SLEEP) {
 
-		/* SLEEP ãè§£é¤ããã*/
+		/* SLEEP を解除する。*/
 		wup_tsk(DHCP6_CLI_TASK);
 		return E_OK;
@@ -3165,6 +3052,5 @@
 
 /*
- *  dhcp6c_rel_info -- DHCP ã§è¨­å®ããããããã¯ã¼ã¯æ
-å ±ãè§£æ¾ããã
+ *  dhcp6c_rel_info -- DHCP で設定されたネットワーク情報を解放する。
  */
 
@@ -3172,6 +3058,5 @@
 dhcp6c_rel_info (void)
 {
-	/* REL_INFO ç¶æ
-ã«é·ç§»ããã*/
+	/* REL_INFO 状態に遷移する。*/
 	start_rel_info(&context);
 	return E_OK;
@@ -3179,6 +3064,5 @@
 
 /*
- *  dhcp6c_get_info -- DHCP ã§è¨­å®ããããããã¯ã¼ã¯æ
-å ±ãè¿ãã
+ *  dhcp6c_get_info -- DHCP で設定されたネットワーク情報を返す。
  */
 
@@ -3209,5 +3093,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -3220,5 +3104,5 @@
 	len = *(ER_UINT*)p_parblk;
 	if (len < 0 && len != E_RLWAI) {
-		/* E_RLWAI ä»¥å¤ã§ã0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+		/* E_RLWAI 以外で、0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[DHCP6C(CBR)] error: %s, fncd: %s.", itron_strerror(len), in_strtfn(fncd));
 		}
@@ -3226,9 +3110,9 @@
 		if (fncd == TEV_UDP_RCV_DAT) {
 
-			/* åä¿¡ã¡ãã»ã¼ã¸ãªã¹ããç©ºã®æã¯ãåä¿¡ããªãã§ãã¼ã¿ã°ã©ã ãæ¨ã¦ãã*/
+			/* 受信メッセージリストが空の時は、受信しないでデータグラムを捨てる。*/
 			if (context.rcv_lst == NULL) 
 				syslog(LOG_NOTICE, "[DHCP6C(CBR)] receive buffer all busy.");
 			else {
-				/* ã¡ãã»ã¼ã¸ãåä¿¡ããã¡ãã»ã¼ã¸æ§é ä½ãæºåããã*/
+				/* メッセージを受信するメッセージ構造体を準備する。*/
 				syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
 				msg = context.rcv_lst;
@@ -3236,5 +3120,5 @@
 				syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
 
-				/* ã¡ãã»ã¼ã¸ãåä¿¡ããã*/
+				/* メッセージを受信する。*/
 				len = UDP_RCV_DAT(context.cepid, &msg->srv, &msg->msg, sizeof(msg->msg), TMO_POL);
 
@@ -3242,5 +3126,5 @@
 				msg->len = len;
 				if (len >= 0) {
-					/* åä¿¡ããã¡ãã»ã¼ã¸ãæ¤è¨¼ã¡ãã»ã¼ã¸ãªã¹ãã«ç§»ãã*/
+					/* 受信したメッセージを検証メッセージリストに移す。*/
 					msg->next = context.val_lst;
 					context.val_lst = msg;
@@ -3248,5 +3132,5 @@
 					}
 				else {
-					/* ã¡ãã»ã¼ã¸æ§é ä½ãåä¿¡ã¡ãã»ã¼ã¸ãªã¹ãã«æ»ãã*/
+					/* メッセージ構造体を受信メッセージリストに戻す。*/
 					context.error = len;
 					msg->next = context.rcv_lst;
@@ -3261,5 +3145,5 @@
 	}
 /*
- *  dhcp6_cli_task -- DHCPv6 ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯
+ *  dhcp6_cli_task -- DHCPv6 クライアントタスク
  */
 
@@ -3284,16 +3168,16 @@
 	ct = &context;
 
-	/* DHCP ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½ãåæåããã*/
+	/* DHCP クライアントコンテキスト構造体を初期化する。*/
 	init_context(ct, (ID)exinf);
 
 	while (true) {
 
-		/* 1ç§æ¯ã«ã¿ã¤ã ã¢ã¦ãããããã«ã¿ã¤ãã¼ãè¨­å®ããã*/
+		/* 1秒毎にタイムアウトするようにタイマーを設定する。*/
 		timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP6C_TIMER_HZ);
 
-		/* ã¯ã©ã¤ã¢ã³ã DUID ãè¨­å®ããã*/
+		/* クライアント DUID を設定する。*/
 		init_duid(ct);
 
-		/* ã¡ãã»ã¼ã¸æ§é ä½ãåæåããã*/
+		/* メッセージ構造体を初期化する。*/
 		if ((error = init_cli_msg(ct))  == E_OK) {
 
@@ -3305,22 +3189,21 @@
 #endif
 
-			/* ã¡ã¤ã³ã«ã¼ã */
+			/* メインループ */
 			error = dispatch_event(ct);
 			}
 
-		/* å
-¨ã¦ã® TIMER ãã­ã£ã³ã»ã«ããã*/
+		/* 全ての TIMER をキャンセルする。*/
 		cancel_all_timers(ct);
 
-		/* ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* タイマーを停止する。*/
 		untimeout((callout_func)dhcpc_timer, ct);
 
-		/* ã¡ãã»ã¼ã¸æ§é ä½ãè§£æ¾ããã*/
+		/* メッセージ構造体を解放する。*/
 		rel_cli_msg(ct);
 
-		/* ãªã¼ã¹ãè§£æ¾å¾ãååå¾ãæå®ããã¦ããªããã°ä¼æ­¢ããã*/
+		/* リースを解放後、再取得が指定されていなければ休止する。*/
 		if (!(ct->flags & DHCP6C_FLAG_RENEW)) {
 
-			/* ä¼æ­¢ããã*/
+			/* 休止する。*/
 			if (error == E_OK)
 				syslog(LOG_NOTICE, "[DHCP6C] lease released, go to sleep.");
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  DHCPv6 ã¯ã©ã¤ã¢ã³ã
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  DHCPv6 クライアント
+ *  コンフィギュレーションファイル
  */
 
 #ifdef DHCP6_CLI_CFG
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(DHCP6_CLI_TASK, {
@@ -62,5 +50,5 @@
 	});
 
-/* ã»ããã© */
+/* セマフォ */
 
 CRE_SEM(SEM_DHCP6_CLI_READY,	{ TA_TPRI, 0, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli.h	(revision 389)
@@ -70,44 +70,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -123,57 +109,54 @@
 
 /* 
- *  DHCP ã¯ã©ã¤ã¢ã³ãã®ã¹ã¿ãã¯ãµã¤ãº
- */
-
-#define DHCP6_CLI_STACK_SIZE		1024		/* DHCP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+ *  DHCP クライアントのスタックサイズ
+ */
+
+#define DHCP6_CLI_STACK_SIZE		1024		/* DHCP クライアントタスクのスタックサイズ	*/
 
 /* 
- *  DHCP ã¯ã©ã¤ã¢ã³ãã®åªå
-åº¦
- */
-
-#define DHCP6_CLI_MAIN_PRIORITY		5		/* DHCP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®åªå
-åº¦		*/
+ *  DHCP クライアントの優先度
+ */
+
+#define DHCP6_CLI_MAIN_PRIORITY		5		/* DHCP クライアントタスクの優先度		*/
 
 /* 
- *  ã³ã³ãã¤ã«æã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³
- */
-
-/*
- *  DHCPv6 åä½ã¢ã¼ã
- *
- *    #define DHCP6_CLI_CFG_MODE ã§æå®ããã
- *    æå®ããã¦ããªããã°ãã¹ãã¼ãã¬ã¹ã«è¨­å®ããã
- *
- */
-
-#define DHCP6_CLI_CFG_STATELESS		0	/* ã¹ãã¼ãã¬ã¹ã«è¨­å®ããã		*/
-#define DHCP6_CLI_CFG_STATEFULL		1	/* ã¹ãã¼ããã«ã«è¨­å®ããã		*/
-#define DHCP6_CLI_CFG_RA		2	/* RA ã® M/O ãããã«ããè¨­å®ããã	*/
+ *  コンパイル時コンフィギュレーション
+ */
+
+/*
+ *  DHCPv6 動作モード
+ *
+ *    #define DHCP6_CLI_CFG_MODE で指定する。
+ *    指定されていなければ、ステートレスに設定する。
+ *
+ */
+
+#define DHCP6_CLI_CFG_STATELESS		0	/* ステートレスに設定する。		*/
+#define DHCP6_CLI_CFG_STATEFULL		1	/* ステートフルに設定する。		*/
+#define DHCP6_CLI_CFG_RA		2	/* RA の M/O ビットにより設定する。	*/
 #define DHCP6_CLI_CFG_MODE_DEFAULT	DHCP6_CLI_CFG_STATELESS
 
-/* IA ã®è¨­å® */
+/* IA の設定 */
 #define DHCP6_CLI_CFG_IA_NA		1
 //#define DHCP6_CLI_CFG_IA_TA		1
 //#define DHCP6_CLI_CFG_IA_PD		1
 
-/* Rapid-commit ã®æå® */
+/* Rapid-commit の指定 */
 //#define DHCP6_CLI_CFG_RAPID_COMMIT	1
 
-/* æ¨å¥¨åº¦ã®å®ç¾© */
-#define DHCP6_CLI_CFG_PREFER_IA		50	/* IA_NA/TA/PD å½ããã®æ¨å¥¨åº¦	*/
-#define DHCP6_CLI_CFG_PREFER_IAADDR	100	/* ã¢ãã¬ã¹å½ããã®æ¨å¥¨åº¦	*/
-
-/* DHCPv6 ã¯ã©ã¤ã¢ã³ãã¡ãã»ã¼ã¸ã®åä¿¡ãªã¹ããµã¤ãºï¼2ä»¥ä¸æå®ãããã¨ï¼ */
+/* 推奨度の定義 */
+#define DHCP6_CLI_CFG_PREFER_IA		50	/* IA_NA/TA/PD 当たりの推奨度	*/
+#define DHCP6_CLI_CFG_PREFER_IAADDR	100	/* アドレス当たりの推奨度	*/
+
+/* DHCPv6 クライアントメッセージの受信リストサイズ（2以上指定すること） */
 #define NUM_DHCP6_CLI_MSG_LIST		3
 
 /*
- *  DHCPv6 ã¯ã©ã¤ã¢ã³ãã¡ãã»ã¼ã¸æ§é ä½æ°ãå¤æ´ç¦æ­¢ã
- *  +1 ã¯éä¿¡ç¨
+ *  DHCPv6 クライアントメッセージ構造体数【変更禁止】
+ *  +1 は送信用
  */
 #define NUM_MPF_DHCP6_CLI_MSG		(NUM_DHCP6_CLI_MSG_LIST+1)
 
-/* DHCP å¿
-é ãªãã·ã§ã³ãªã¹ã */
+/* DHCP 必須オプションリスト */
 
 #ifndef DHCP6_CLI_CFG_REQUIRED_OLIST
@@ -191,5 +174,5 @@
 #endif	/* of #ifndef DHCP6_CLI_CFG_REQUIRED_OLIST */
 
-/* DHCP è¦æ±ãªãã·ã§ã³ãªã¹ã */
+/* DHCP 要求オプションリスト */
 
 #ifndef DHCP6_CLI_CFG_REQUEST_OLIST
@@ -208,49 +191,46 @@
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãå®æ°
- *  RFC3315 ã«è¦å®ãããã¿ã¤ãã³ã°å®æ°ã¯ dhcp6.h åç
-§
- */
-
-/* æ¨æºã¡ãã»ã¼ã¸ã®åéä¿¡ã¿ã¤ã ã¢ã¦ã	*/
+ *  タイムアウト定数
+ *  RFC3315 に規定されたタイミング定数は dhcp6.h 参照
+ */
+
+/* 標準メッセージの再送信タイムアウト	*/
 #define TMO_DHCP6C_NORMAL	ULONG_C(60*1000)
 
-/* æ¨æºè¦æ±ãªã¼ã¹æé			*/
+/* 標準要求リース時間			*/
 #define TMO_DHCP6C_REQ_LEASE	ULONG_C(7200*1000)
 
-/* ã¡ãã»ã¼ã¸æ§é ä½ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+/* メッセージ構造体獲得タイムアウト	*/
 #define TMO_DHCP6C_MPF_GET	ULONG_C(1000)
 
-/* ã¡ãã»ã¼ã¸åä¿¡ã¿ã¤ã ã¢ã¦ã	*/
+/* メッセージ受信タイムアウト	*/
 #define TMO_DHCP6C_RCV_DAT	ULONG_C(1000)
 
 /*
- *  DHCPv6 ã¯ã©ã¤ã¢ã³ãã¡ãã»ã¼ã¸æ§é ä½
+ *  DHCPv6 クライアントメッセージ構造体
  */
 
 typedef struct dhcp6_cli_msg {
-	/* 4ãã¤ãå¢çã«ã¢ã©ã¤ã³ããã*/
-	T_DHCP6_MSG		msg;		/* DHCPv6 ã¡ãã»ã¼ã¸æ§é ä½	*/
-	struct dhcp6_cli_msg	*next;		/* ãªã¹ãã®æ¬¡ã®ã¡ãã»ã¼ã¸æ§é ä½	*/
-	SYSTIM			rcv_time;	/* åä¿¡ããæé			*/
-	T_IPV6EP		srv;		/* ãµã¼ãã®IPv6ã¢ãã¬ã¹/ãã¼ãçªå· */
-	uint16_t		len;		/* msg ã®æå¹é·			*/
-	uint16_t		prefer;		/* msg ã®æ¨å¥¨åº¦			*/
-	uint16_t		status;		/* STATUS CODE ãªãã·ã§ã³ã® status */
+	/* 4バイト境界にアラインする。*/
+	T_DHCP6_MSG		msg;		/* DHCPv6 メッセージ構造体	*/
+	struct dhcp6_cli_msg	*next;		/* リストの次のメッセージ構造体	*/
+	SYSTIM			rcv_time;	/* 受信した時間			*/
+	T_IPV6EP		srv;		/* サーバのIPv6アドレス/ポート番号 */
+	uint16_t		len;		/* msg の有効長			*/
+	uint16_t		prefer;		/* msg の推奨度			*/
+	uint16_t		status;		/* STATUS CODE オプションの status */
 	} T_DHCP6_CLI_MSG;
 
-/* prefer ã®ãã©ã° */
-
-#define DHCP6_ClI_MSG_PREFER_ADDR	UINT_C(0x8000)	/* ã¢ãã¬ã¹æ
-å ±ãã		*/
-#define DHCP6_ClI_MSG_PREFER_REQUIRED	UINT_C(0x4000)	/* å¿
-é ãªãã·ã§ã³ãã		*/
-#define DHCP6_ClI_MSG_PREFER_REQUEST	UINT_C(0x2000)	/* è¦æ±ãªãã·ã§ã³ãã		*/
-#define DHCP6_ClI_MSG_PREFER_OPTION	UINT_C(0x1000)	/* PREFER ãªãã·ã§ã³ãã	*/
+/* prefer のフラグ */
+
+#define DHCP6_ClI_MSG_PREFER_ADDR	UINT_C(0x8000)	/* アドレス情報あり		*/
+#define DHCP6_ClI_MSG_PREFER_REQUIRED	UINT_C(0x4000)	/* 必須オプションあり		*/
+#define DHCP6_ClI_MSG_PREFER_REQUEST	UINT_C(0x2000)	/* 要求オプションあり		*/
+#define DHCP6_ClI_MSG_PREFER_OPTION	UINT_C(0x1000)	/* PREFER オプションあり	*/
 #define DHCP6_ClI_MSG_PREFER_FLAG_MASK	UINT_C(0xf000)
 #define DHCP6_ClI_MSG_PREFER_VALUE_MASK	(~(DHCP6_ClI_MSG_PREFER_FLAG_MASK))
 
 /*
- *  STATUS CODE ãªãã·ã§ã³ãç¡ãæã®å¤
+ *  STATUS CODE オプションが無い時の値
  */
 
@@ -258,5 +238,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -264,5 +244,5 @@
 
 /*
- *  ã¿ã¹ã¯
+ *  タスク
  */
 
@@ -270,5 +250,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_asp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  ASP ç¨ DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ASP 用 DHCP クライアントのシステムコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 DHCP クライアントのシステムコンフィギュレーションファイルのインクルード
  */
 
@@ -58,8 +45,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_DHCP6_CLI_MSG, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_jsp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_jsp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_jsp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  JSP ç¨ DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  JSP 用 DHCP クライアントのシステムコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é DHCP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 DHCP クライアントのシステムコンフィギュレーションファイルのインクルード
  */
 
@@ -58,8 +45,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_DHCP6_CLI_MSG, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dhcp6_cli_var.h	(revision 389)
@@ -70,44 +70,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -120,8 +106,8 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ãã³ã³ãã­ã¹ãæ§é ä½
- */
-
-/* TIMER ã®å®ç¾© */
+ *  DHCP クライアントコンテキスト構造体
+ */
+
+/* TIMER の定義 */
 
 #define DHCP6C_TIMER_SND_SOL	0
@@ -140,44 +126,39 @@
 #define DHCP6C_TIMER_HZ		1
 
-/* å®æ°ã®å®ç¾© */
+/* 定数の定義 */
 
 #define MAX_DUID_LEN		(ETHER_ADDR_LEN+8)
 
 typedef struct dhcp6_cli_context {
-	T_DHCP6_CLI_MSG		*rcv_lst;	/* åä¿¡ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ã		*/
-	T_DHCP6_CLI_MSG		*val_lst;	/* æ¤è¨¼ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ã		*/
-	T_DHCP6_CLI_MSG		*prf_lst;	/* æ¨å¥¨ã¡ãã»ã¼ã¸æ§é ä½ãªã¹ã		*/
-	T_DHCP6_CLI_MSG		*snd_msg;	/* éä¿¡ã¡ãã»ã¼ã¸æ§é ä½			*/
-	T_DHCP6_CLI_MSG		*adv_msg;	/* éç¥ããããªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½	*/
-	T_DHCP6_CLI_MSG		*act_msg;	/* æå¹ãªãªã¼ã¹ã»ã¡ãã»ã¼ã¸æ§é ä½	*/
-	T_IF_SOFTC		*sc;		/* IF ã®ã½ããã¦ã§ã¢æ
-å ±		*/
-	T_IPV6EP		dst;		/* éä¿¡å
-ã®IPã¢ãã¬ã¹/ãã¼ãçªå·	*/
-	SYSTIM			RT;		/* åéä¿¡éé				*/
-	SYSTIM			IRT;		/* åæåéä¿¡éé			*/
-	SYSTIM			MRT;		/* æå¤§åéä¿¡éé			*/
-	SYSTIM			MRD;		/* æå¤§åéä¿¡ç¶ç¶æé			*/
-	SYSTIM			next_MRD;	/* æ¬¡ã®æå¤§åéä¿¡ç¶ç¶æé		*/
+	T_DHCP6_CLI_MSG		*rcv_lst;	/* 受信メッセージ構造体リスト		*/
+	T_DHCP6_CLI_MSG		*val_lst;	/* 検証メッセージ構造体リスト		*/
+	T_DHCP6_CLI_MSG		*prf_lst;	/* 推奨メッセージ構造体リスト		*/
+	T_DHCP6_CLI_MSG		*snd_msg;	/* 送信メッセージ構造体			*/
+	T_DHCP6_CLI_MSG		*adv_msg;	/* 通知されたリース・メッセージ構造体	*/
+	T_DHCP6_CLI_MSG		*act_msg;	/* 有効なリース・メッセージ構造体	*/
+	T_IF_SOFTC		*sc;		/* IF のソフトウェア情報		*/
+	T_IPV6EP		dst;		/* 送信先のIPアドレス/ポート番号	*/
+	SYSTIM			RT;		/* 再送信間隔				*/
+	SYSTIM			IRT;		/* 初期再送信間隔			*/
+	SYSTIM			MRT;		/* 最大再送信間隔			*/
+	SYSTIM			MRD;		/* 最大再送信継続時間			*/
+	SYSTIM			next_MRD;	/* 次の最大再送信継続時間		*/
 	SYSTIM			timers[NUM_DHCP6C_TIMERS];	
-						/* ã¿ã¤ãã¼é
-å			*/
-	ER_UINT			error;		/* ã¨ã©ã¼ã»ãã¼ã¿é·		*/
+						/* タイマー配列			*/
+	ER_UINT			error;		/* エラー・データ長		*/
 	ID			cepid;		/* CEP ID			*/
-	uint32_t		xid;		/* ãã©ã³ã¶ã¯ã·ã§ã³ ID		*/
-	uint16_t		flags;		/* åç¨®ãã©ã°			*/
-	uint16_t		max_prefer;	/* åä¿¡ã¡ãã»ã¼ã¸ã®æå¤§æ¨å¥¨åº¦	*/
+	uint32_t		xid;		/* トランザクション ID		*/
+	uint16_t		flags;		/* 各種フラグ			*/
+	uint16_t		max_prefer;	/* 受信メッセージの最大推奨度	*/
 	uint8_t			duid[MAX_DUID_LEN];	
 						/* client DHCP Unique ID	*/
-	uint8_t			duid_len;	/* client DUID é·		*/
-	uint8_t			fsm;		/* ç¾å¨ã®ç¶æ
-			*/
-	uint8_t			MRC;		/* æå¤§åéä¿¡åæ°		*/
-	uint8_t			txcount;	/* åéä¿¡åæ°			*/
-	uint8_t			refresh_type;	/* REFRESH ã®ã¡ãã»ã¼ã¸ã¿ã¤ã	*/
+	uint8_t			duid_len;	/* client DUID 長		*/
+	uint8_t			fsm;		/* 現在の状態			*/
+	uint8_t			MRC;		/* 最大再送信回数		*/
+	uint8_t			txcount;	/* 再送信回数			*/
+	uint8_t			refresh_type;	/* REFRESH のメッセージタイプ	*/
 	} T_DHCP6_CLI_CONTEXT;
 
-/* fsmï¼ç¶æ
-é·ç§»ï¼ã®å®ç¾© */
+/* fsm（状態遷移）の定義 */
 
 #define DHCP6_FSM_INIT		1
@@ -186,10 +167,10 @@
 #define DHCP6_FSM_RENEW		5
 #define DHCP6_FSM_REBIND	6
-#define DHCP6_FSM_REQ_INFO	9	/* DHCPv6 ã® RFC3315 ã«ã¯ç¡ãã*/
-#define DHCP6_FSM_INFORMED	10	/* DHCPv6 ã® RFC3315 ã«ã¯ç¡ãã*/
-#define DHCP6_FSM_REL_INFO	11	/* DHCPv6 ã® RFC3315 ã«ã¯ç¡ãã*/
-#define DHCP6_FSM_SLEEP		12	/* DHCPv6 ã® RFC3315 ã«ã¯ç¡ãã*/
-
-/* flag ã®å®ç¾© */
+#define DHCP6_FSM_REQ_INFO	9	/* DHCPv6 の RFC3315 には無い。*/
+#define DHCP6_FSM_INFORMED	10	/* DHCPv6 の RFC3315 には無い。*/
+#define DHCP6_FSM_REL_INFO	11	/* DHCPv6 の RFC3315 には無い。*/
+#define DHCP6_FSM_SLEEP		12	/* DHCPv6 の RFC3315 には無い。*/
+
+/* flag の定義 */
 
 #define DHCP6C_FLAG_TMOUT_SND_SOL	(DHCP6C_FLAG_TMOUT_TIMER|DHCP6C_TIMER_SND_SOL)
@@ -211,5 +192,5 @@
 #define DHCP6C_FLAG_RENEW		UINT_C(0x0400)
 
-/* IAADDR æ§é ä½ã® FLAG ã®å®ç¾©ï¼len ã«å¤éåããï¼*/
+/* IAADDR 構造体の FLAG の定義（len に多重化する）*/
 
 #define DHCP6C_IAA_FLAG_EXPIRED		UINT_C(0x8000)
@@ -218,13 +199,13 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
- */
-
-/* æéæ¯è¼ */
+ *  関数シミュレーションマクロ
+ */
+
+/* 時間比較 */
 
 #define TIMEC_GT(a,b)		((int32_t)((a)-(b))>0)
 #define TIMEC_GE(a,b)		((int32_t)((a)-(b))>=0)
 
-/* æéå®æ°ã®å¤æ */
+/* 時間定数の変換 */
 
 #define SYSTIM2TIMER(t)		(((t)<SYSTIM_HZ/DHCP6C_TIMER_HZ)?(DHCP6C_TIMER_HZ):((t)*DHCP6C_TIMER_HZ)/SYSTIM_HZ)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dns.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dns.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dns.h	(revision 389)
@@ -5,44 +5,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,24 +39,24 @@
 
 /*
- *  DNS ã¡ãã»ã¼ã¸ã«é¢ããå®ç¾©
- *
- *    RFC1034ãRFC1035ãRFC1886ãRFC2136ã
- *    RFC2671ãRFC2845ãRFC2930ãRFC3596
- *
- *  DNS ã¡ãã»ã¼ã¸
+ *  DNS メッセージに関する定義
+ *
+ *    RFC1034、RFC1035、RFC1886、RFC2136、
+ *    RFC2671、RFC2845、RFC2930、RFC3596
+ *
+ *  DNS メッセージ
  *
  *  +---------------------+
  *  |       Header        |
  *  +---------------------+
- *  |      Question       | Question section å½¢å¼
- *  +---------------------+
- *  |       Answer        | RR (Resouce Record) å½¢å¼
- *  +---------------------+
- *  |     Authority       | RR (Resouce Record) å½¢å¼
- *  +---------------------+
- *  |     Additional      | RR (Resouce Record) å½¢å¼
- *  +---------------------+
- *
- *  DNS ããã
+ *  |      Question       | Question section 形式
+ *  +---------------------+
+ *  |       Answer        | RR (Resouce Record) 形式
+ *  +---------------------+
+ *  |     Authority       | RR (Resouce Record) 形式
+ *  +---------------------+
+ *  |     Additional      | RR (Resouce Record) 形式
+ *  +---------------------+
+ *
+ *  DNS ヘッダ
  *
  *    0                    7  8                   15
@@ -108,13 +94,13 @@
 
 /*
- *  code ã®å®ç¾©
- */
-
-/* QR ã®å®ç¾© */
+ *  code の定義
+ */
+
+/* QR の定義 */
 
 #define DNS_QR_QUERY		0x0000U
 #define DNS_QR_RESPONSE		0x8000U
 
-/* Opcode ã®å®ç¾© */
+/* Opcode の定義 */
 
 #define DNS_OPCODE_MASK		0x7800U
@@ -123,21 +109,21 @@
 #define DNS_OPCODE_STATUS	0x1000U
 
-/* AA ã®å®ç¾© */
+/* AA の定義 */
 
 #define DNS_AUTHORITATIVE	0x0400U
 
-/* TC ã®å®ç¾© */
+/* TC の定義 */
 
 #define DNS_TRUN_CATION		0x0200U
 
-/* RD ã®å®ç¾© */
+/* RD の定義 */
 
 #define DNS_RECURSION_DESIRED	0x0100U
 
-/* RA ã®å®ç¾© */
+/* RA の定義 */
 
 #define DNS_RECURSION_AVAILABLE	0x0080U
 
-/* RCODE ã®å®ç¾© */
+/* RCODE の定義 */
 
 #define DNS_RCODE_MASK		0x000fU
@@ -150,5 +136,5 @@
 
 /*
- * DNS TYPE ã®å®ç¾©
+ * DNS TYPE の定義
  */
 
@@ -161,5 +147,5 @@
 
 /*
- * DNS CLASS ã®å®ç¾©
+ * DNS CLASS の定義
  */
 
@@ -167,5 +153,5 @@
 
 /*
- *  RR (Resouce Record) å½¢å¼
+ *  RR (Resouce Record) 形式
  *
  *    0                    7  8                   15
@@ -193,6 +179,5 @@
  *  +-----------------------------------------------+
  *
- *    æ³¨æ: offset ã®åç¹ã¯ DNS message ã®å
-é ­
+ *    注意: offset の原点は DNS message の先頭
  */
 
@@ -209,5 +194,5 @@
 
 /*
- *  Question section å½¢å¼
+ *  Question section 形式
  *
  *    0                    7  8                   15
@@ -234,5 +219,5 @@
 
 /*
- *  SOA RDATA å½¢å¼
+ *  SOA RDATA 形式
  *
  *    0                    7  8                   15
@@ -266,6 +251,5 @@
  *  +-----------------------------------------------+
  *
- *    æ³¨æ: offset ã®åç¹ã¯ DNS message ã®å
-é ­
+ *    注意: offset の原点は DNS message の先頭
  */
 
@@ -283,5 +267,5 @@
 
 /*
- *  DNS ã®å®æ°ã®å®ç¾©
+ *  DNS の定数の定義
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/lcd.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/lcd.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/lcd.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -72,5 +60,5 @@
 
 /*
- *  å±æå¤æ°ã®å®ç¾©
+ *  局所変数の定義
  */
 
@@ -80,5 +68,5 @@
 
 /*
- *  lcd_cls -- LCD è¡¨ç¤ºã¯ãªã¢
+ *  lcd_cls -- LCD 表示クリア
  */
 
@@ -92,5 +80,5 @@
 
 /*
- *  lcd_newline -- LCD ã®è¡¨ç¤ºãæ¹è¡ããã
+ *  lcd_newline -- LCD の表示を改行する。
  */
 
@@ -104,5 +92,5 @@
 
 /*
- *  lcd_initialize -- LCD åæå
+ *  lcd_initialize -- LCD 初期化
  */
 
@@ -115,5 +103,5 @@
 
 /*
- *  lcd_putc -- LCD åºå
+ *  lcd_putc -- LCD 出力
  */
 
@@ -134,5 +122,5 @@
 
 /*
- *  lcd_puts -- LCD ã¸ã®æå­åã®åºå
+ *  lcd_puts -- LCD への文字列の出力
  */
 
@@ -145,9 +133,9 @@
 
 /*
- *  LCD ã¸ã®æ¸å¼ä»æå­ååºåã©ã¤ãã©ãª
- */
-
-/*
- *  æ°å¤å¤æã®ããã®å¤æè¡¨
+ *  LCD への書式付文字列出力ライブラリ
+ */
+
+/*
+ *  数値変換のための変換表
  */
 
@@ -156,5 +144,5 @@
 
 /*
- *  ãã£ã¨ãé·ãæ´æ°å (LONGEST) ã¨ç¬¦å·ãªãæ´æ°å (ULONGEST)
+ *  もっとも長い整数型 (LONGEST) と符号なし整数型 (ULONGEST)
  */
 
@@ -181,5 +169,5 @@
 
 /*
- *  convert -- lcd_printf ã®æ°å¤å¤æ
+ *  convert -- lcd_printf の数値変換
  */
 
@@ -214,5 +202,5 @@
 
 	pad = ix;
-	if (!left)	/* å³è©°ã */
+	if (!left)	/* 右詰め */
 		for ( ; pad < width; pad ++)
 			lcd_putc(portid, padchar);
@@ -221,5 +209,5 @@
 		lcd_putc(portid, digits[ix]);
 
-	if (left)	/* å·¦è©°ã */
+	if (left)	/* 左詰め */
 		for ( ; pad < width; pad ++)
 			lcd_putc(portid, padchar);
@@ -231,5 +219,5 @@
 
 /*
- *  ipv4addr -- IPv4 ã¢ãã¬ã¹åºå
+ *  ipv4addr -- IPv4 アドレス出力
  */
 
@@ -237,5 +225,5 @@
 put_ipv4addr (ID portid, T_IN4_ADDR *addr, int_t width)
 {
-	int_t len = 3;	/* 3 ã¯ '.' ã®æå­æ° */
+	int_t len = 3;	/* 3 は '.' の文字数 */
 
 	len += convert(portid, (*addr >> 24) & 0xff, 10, radhex, 0, false, ' '); 
@@ -256,5 +244,5 @@
 
 /*
- *  ipv6addr -- IPv6 ã¢ãã¬ã¹åºå
+ *  ipv6addr -- IPv6 アドレス出力
  */
 
@@ -300,5 +288,5 @@
 
 /*
- *  macaddr -- MAC ã¢ãã¬ã¹åºå
+ *  macaddr -- MAC アドレス出力
  */
 
@@ -319,5 +307,5 @@
 
 /*
- *  å¼æ°ãåãåºãããã®ãã¯ã­
+ *  引数を取り出すためのマクロ
  */
 
@@ -333,5 +321,5 @@
 
 /*
- *  lcd_printf -- ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æå­ååºå
+ *  lcd_printf -- シリアルポートへの書式付文字列出力
  */
 
@@ -350,5 +338,5 @@
 	va_start(ap, fmt);
 	while ((ch = *fmt ++) != '\0') {
-		if (ch != '%') {		/* æ¸å¼æå®ä»¥å¤ */
+		if (ch != '%') {		/* 書式指定以外 */
 			lcd_putc(portid, (char)ch);
 			continue;
@@ -358,5 +346,5 @@
 		padchar = ' ';
 
-		if (ch == '-') {		/* å·¦è©°ã */
+		if (ch == '-') {		/* 左詰め */
 			fmt ++;
 			left = -1;
@@ -365,21 +353,20 @@
 			left = 1;
 
-		if ((ch = *fmt ++) == '0') {	/* ä¸ä½æ¡ã® 0 */
+		if ((ch = *fmt ++) == '0') {	/* 上位桁の 0 */
 			padchar = '0';
 			ch = *fmt ++;
 			}
 
-		while ('0' <= ch && ch <= '9') {	/* åºåå¹
- */
+		while ('0' <= ch && ch <= '9') {	/* 出力幅 */
 			width = width * 10 + ch - '0';
 			ch = *fmt ++;
 			}
 
-		while (ch == 'l') {		/* long (long) ã®æå® */
+		while (ch == 'l') {		/* long (long) の指定 */
 			longflag ++;
 			ch = *fmt ++;
 			}
 
-		while (ch == 'h') {		/* short ã®æå® */
+		while (ch == 'h') {		/* short の指定 */
 			shortflag ++;
 			ch = *fmt ++;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/lcd.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/lcd.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/lcd.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  æ±ç¨ LCD ãã©ã¤ã
+ *  汎用 LCD ドライバ
  */
 
@@ -52,25 +40,25 @@
 
 /*
- *  lcd_cls -- LCD è¡¨ç¤ºã¯ãªã¢
+ *  lcd_cls -- LCD 表示クリア
  */
 extern void lcd_cls (void);
 
 /*
- *  lcd_initialize -- LCD åæå
+ *  lcd_initialize -- LCD 初期化
  */
 extern void lcd_initialize (intptr_t exinf);
 
 /*
- *  lcd_putc -- LCD åºå
+ *  lcd_putc -- LCD 出力
  */
 extern void lcd_putc (ID portid, int8_t data);
 
 /*
- *  lcd_puts -- LCD ã¸ã®æå­åã®åºå
+ *  lcd_puts -- LCD への文字列の出力
  */
 extern void lcd_puts (ID portid, const char *str);
 
 /*
- *  LCD ã¸ã®æ¸å¼ä»æå­ååºåã©ã¤ãã©ãª
+ *  LCD への書式付文字列出力ライブラリ
  */
 extern void lcd_printf (ID portid, const char *fmt, ...);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,5 @@
 
 /* 
- *  ãããã¯ã¼ã¯çµç±ã³ã³ã½ã¼ã«å
-¥åºå
+ *  ネットワーク経由コンソール入出力
  */
 
@@ -83,8 +70,8 @@
 
 /*
- *  ãã¯ã­å®ç¾©
- */
-
-/*  ãªãã¼ã ã®è§£é¤  */
+ *  マクロ定義
+ */
+
+/*  リネームの解除  */
 
 #undef syslog
@@ -94,5 +81,5 @@
 #define EOF		(-1)
 
-/*  TELNET ãªãã·ã§ã³ */
+/*  TELNET オプション */
 
 #define TELNET_OPT_SE		(240)
@@ -120,16 +107,14 @@
 
 /*
- *  å¤æ°
- */
-
-/*  TCP éåä¿¡ã¦ã£ã³ããããã¡  */
+ *  変数
+ */
+
+/*  TCP 送受信ウィンドバッファ  */
 
 uint8_t net_cons_swbuf[NET_CONS_SWBUF_SIZE];
 uint8_t net_cons_rwbuf[NET_CONS_RWBUF_SIZE];
 
-bool_t	connected	= false;	/* ã³ãã¯ã·ã§ã³ã®ç¶æ
-	*/
-bool_t	wait_accept	= false;	/* æ¥ç¶è¦æ±å¾
-ã¡ä¸­	*/
+bool_t	connected	= false;	/* コネクションの状態	*/
+bool_t	wait_accept	= false;	/* 接続要求待ち中	*/
 
 #if defined(SUPPORT_INET6)
@@ -156,5 +141,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -196,5 +181,5 @@
 
 /*
- *  éä¿¡ãããã¡ã®ãã©ãã·ã¥
+ *  送信バッファのフラッシュ
  */
 
@@ -218,5 +203,5 @@
 
 /*
- *  æå­éä¿¡
+ *  文字送信
  */
 
@@ -255,5 +240,5 @@
 
 /*
- *  æå­åä¿¡ï¼å¤æãªãï¼
+ *  文字受信（変換なし）
  */
 
@@ -292,5 +277,5 @@
 
 /*
- *  æå­åä¿¡ï¼TELNET ãªãã·ã§ã³ãã¹ã­ããï¼
+ *  文字受信（TELNET オプションをスキップ）
  */
 
@@ -357,5 +342,5 @@
 
 /*
- *  ã³ãã¯ã·ã§ã³ãåæ­
+ *  コネクションを切断
  */
 
@@ -389,5 +374,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã®å¶å¾¡
+ *  シリアルポートの制御
  */
 
@@ -400,5 +385,5 @@
 
 /*
- *  ã­ã°åºå
+ *  ログ出力
  */
 
@@ -421,5 +406,5 @@
 		va_start(ap, format);
 		while ((ch = *format ++) != '\0') {
-			if (ch != '%') {		/* æ¸å¼æå®ä»¥å¤ */
+			if (ch != '%') {		/* 書式指定以外 */
 				cons_putchar(CONSOLE_PORTID, (char)ch);
 				continue;
@@ -430,5 +415,5 @@
 			padchar = ' ';
 
-			if (ch == '-') {		/* å·¦è©°ã */
+			if (ch == '-') {		/* 左詰め */
 				format ++;
 				left = -1;
@@ -437,16 +422,15 @@
 				left = 1;
 
-			if ((ch = *format ++) == '0') {	/* ä¸ä½æ¡ã® 0 */
+			if ((ch = *format ++) == '0') {	/* 上位桁の 0 */
 				padchar = '0';
 				ch = *format ++;
 				}
 
-			while ('0' <= ch && ch <= '9') {	/* åºåå¹
- */
+			while ('0' <= ch && ch <= '9') {	/* 出力幅 */
 				width = width * 10 + ch - '0';
 				ch = *format ++;
 				}
 
-			while (ch == 'l') {		/* long (long) ã®æå® */
+			while (ch == 'l') {		/* long (long) の指定 */
 				longflag = true;
 				ch = *format ++;
@@ -556,5 +540,5 @@
 				}
 
-			while (ch == 'l') {		/* long (long) ã®æå® */
+			while (ch == 'l') {		/* long (long) の指定 */
 				longflag = true;
 				ch = *format ++;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,7 +33,6 @@
 
 /*
- *  ãããã¯ã¼ã¯çµç±ã³ã³ã½ã¼ã«å
-¥åºå
- *  ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ネットワーク経由コンソール入出力
+ *  システムコンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/net_cons.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,9 +33,8 @@
 
 /*
- *  ãããã¯ã¼ã¯çµç±ã³ã³ã½ã¼ã«å
-¥åºå
+ *  ネットワーク経由コンソール入出力
  */
 
-/*  TCP éåä¿¡ã¦ã£ã³ããããã¡ãµã¤ãº  */
+/*  TCP 送受信ウィンドバッファサイズ  */
 
 #define NET_CONS_SWBUF_SIZE	512
@@ -56,10 +43,10 @@
 #ifndef _MACRO_ONLY
 
-/*  TCP éåä¿¡ã¦ã£ã³ããããã¡  */
+/*  TCP 送受信ウィンドバッファ  */
 
 extern uint8_t net_cons_swbuf[];
 extern uint8_t net_cons_rwbuf[];
 
-/*  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°  */
+/*  ノンブロッキングコールのコールバック関数  */
 
 extern ER	callback_nblk_net_cons(ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,5 +36,5 @@
 
 /*
- *  IPv4 ã¨ IPv6 ã®åæããã¯ã­
+ *  IPv4 と IPv6 の切換えマクロ
  */
 
@@ -66,5 +54,5 @@
 
 /*
- *  ã³ã³ã½ã¼ã«ã«ç¨ããã·ãªã¢ã«ãã¼ãçªå·
+ *  コンソールに用いるシリアルポート番号
  */
 
@@ -74,5 +62,5 @@
 
 /*
- *  ã³ã³ã½ã¼ã«ã«ç¨ãã LCD ãã¼ãçªå·
+ *  コンソールに用いる LCD ポート番号
  */
 
@@ -80,5 +68,5 @@
 
 /*
- *  æ°å¤å¤æã®ããã®å¤æè¡¨
+ *  数値変換のための変換表
  */
 
@@ -87,5 +75,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  ãããã¯ã¼ã¯å¿ç¨ãã­ã°ã©ã ãµãã¼ãã«ã¼ãã³
+ *  ネットワーク応用プログラムサポートルーチン
  */
 
@@ -89,5 +77,5 @@
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
@@ -313,5 +301,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -326,5 +314,5 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æå­ååºåã©ã¤ãã©ãª
+ *  シリアルポートへの書式付文字列出力ライブラリ
  */
 
@@ -332,5 +320,5 @@
 
 /*
- *  æ°å¤å¤æã®ããã®å¤æè¡¨
+ *  数値変換のための変換表
  */
 
@@ -339,5 +327,5 @@
 
 /*
- *  netapp_rand -- ä¹±æ°ãè¿ãã
+ *  netapp_rand -- 乱数を返す。
  */
 
@@ -350,5 +338,5 @@
 
 /*
- *  srand -- ä¹±æ°ãåæåããã
+ *  srand -- 乱数を初期化する。
  */
 
@@ -365,5 +353,5 @@
 
 /*
- *  cons_putchar -- ã·ãªã¢ã«ãã¼ãã¸ã®æå­åºå
+ *  cons_putchar -- シリアルポートへの文字出力
  */
 
@@ -375,6 +363,5 @@
 
 /*
- *  cons_getchar -- ã·ãªã¢ã«ãã¼ãããã®æå­å
-¥å
+ *  cons_getchar -- シリアルポートからの文字入力
  */
 
@@ -393,5 +380,5 @@
 
 /*
- *  cons_putnumber -- cons_printf ã®æ°å¤å¤æ
+ *  cons_putnumber -- cons_printf の数値変換
  */
 
@@ -426,5 +413,5 @@
 
 	pad = ix;
-	if (!left)	/* å³è©°ã */
+	if (!left)	/* 右詰め */
 		for ( ; pad < width; pad ++)
 			cons_putchar(portid, padchar);
@@ -433,5 +420,5 @@
 		cons_putchar(portid, digits[ix]);
 
-	if (left)	/* å·¦è©°ã */
+	if (left)	/* 左詰め */
 		for ( ; pad < width; pad ++)
 			cons_putchar(portid, padchar);
@@ -441,5 +428,5 @@
 
 /*
- *  put_ipv4addr -- IPv4 ã¢ãã¬ã¹åºå
+ *  put_ipv4addr -- IPv4 アドレス出力
  */
 
@@ -447,5 +434,5 @@
 put_ipv4addr (ID portid, T_IN4_ADDR *addr, int_t width)
 {
-	int_t len = 3;	/* 3 ã¯ '.' ã®æå­æ° */
+	int_t len = 3;	/* 3 は '.' の文字数 */
 
 	len += cons_putnumber(portid, (*addr >> 24) & 0xff, 10, radhex, 0, false, ' '); 
@@ -464,5 +451,5 @@
 
 /*
- *  ipv6addr -- IPv6 ã¢ãã¬ã¹åºå
+ *  ipv6addr -- IPv6 アドレス出力
  */
 
@@ -523,5 +510,5 @@
 
 /*
- *  put_macaddr -- MAC ã¢ãã¬ã¹åºå
+ *  put_macaddr -- MAC アドレス出力
  */
 
@@ -544,5 +531,5 @@
 
 /*
- *  cons_printf -- ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æå­ååºå
+ *  cons_printf -- シリアルポートへの書式付文字列出力
  */
 
@@ -558,5 +545,5 @@
 	va_start(ap, fmt);
 	while ((ch = *fmt ++) != '\0') {
-		if (ch != '%') {		/* æ¸å¼æå®ä»¥å¤ */
+		if (ch != '%') {		/* 書式指定以外 */
 			cons_putchar(portid, (char)ch);
 			continue;
@@ -566,5 +553,5 @@
 		padchar = ' ';
 
-		if (*fmt == '-') {		/* å·¦è©°ã */
+		if (*fmt == '-') {		/* 左詰め */
 			fmt ++;
 			left = -1;
@@ -573,21 +560,20 @@
 			left = 1;
 
-		if ((ch = *fmt ++) == '0') {	/* ä¸ä½æ¡ã® 0 */
+		if ((ch = *fmt ++) == '0') {	/* 上位桁の 0 */
 			padchar = '0';
 			ch = *fmt ++;
 			}
 
-		while ('0' <= ch && ch <= '9') {	/* åºåå¹
- */
+		while ('0' <= ch && ch <= '9') {	/* 出力幅 */
 			width = width * 10 + ch - '0';
 			ch = *fmt ++;
 			}
 
-		while (ch == 'l') {		/* long (long) ã®æå® */
+		while (ch == 'l') {		/* long (long) の指定 */
 			longflag ++;
 			ch = *fmt ++;
 			}
 
-		while (ch == 'h') {		/* short ã®æå® */
+		while (ch == 'h') {		/* short の指定 */
 			shortflag ++;
 			ch = *fmt ++;
@@ -690,5 +676,5 @@
 
 /*
- *  host2msg16 -- 16ãããã®å¤ãããã¤ããªã¼ãã¼ãèª¿æ´ãã¦ã¡ãã»ã¼ã¸ã«æ¸ãè¾¼ãã
+ *  host2msg16 -- 16ビットの値を、バイトオーダーを調整してメッセージに書き込む。
  */
 
@@ -703,5 +689,5 @@
 
 /*
- *  host2msg32 -- 32ãããã®å¤ãããã¤ããªã¼ãã¼ãèª¿æ´ãã¦ã¡ãã»ã¼ã¸ã«æ¸ãè¾¼ãã
+ *  host2msg32 -- 32ビットの値を、バイトオーダーを調整してメッセージに書き込む。
  */
 
@@ -716,5 +702,5 @@
 
 /*
- *  msg2host16 -- 16ãããã®å¤ãããã¤ããªã¼ãã¼ãèª¿æ´ãã¦ã¡ãã»ã¼ã¸ããèª­ã¿åºãã
+ *  msg2host16 -- 16ビットの値を、バイトオーダーを調整してメッセージから読み出す。
  */
 
@@ -729,5 +715,5 @@
 
 /*
- *  msg2host32 -- 32ãããã®å¤ãããã¤ããªã¼ãã¼ãèª¿æ´ãã¦ã¡ãã»ã¼ã¸ããèª­ã¿åºãã
+ *  msg2host32 -- 32ビットの値を、バイトオーダーを調整してメッセージから読み出す。
  */
 
@@ -742,5 +728,5 @@
 
 /*
- *  skip_blanks -- ç©ºç½ã¨ TAB ãã¹ã­ããããã
+ *  skip_blanks -- 空白と TAB をスキップする。
  */
 
@@ -754,5 +740,5 @@
 
 /*
- *  get_ipv4addr -- æå­åã® IPv4 ã¢ãã¬ã¹ã T_IN4_ADDR å¤ã«å¤æããã
+ *  get_ipv4addr -- 文字列の IPv4 アドレスを T_IN4_ADDR 値に変換する。
  */
 
@@ -781,5 +767,5 @@
 
 /*
- *  get_ipv6addr -- æå­åã® IPv6 ã¢ãã¬ã¹ã T_IN6_ADDR å¤ã«å¤æããã
+ *  get_ipv6addr -- 文字列の IPv6 アドレスを T_IN6_ADDR 値に変換する。
  */
 
@@ -793,7 +779,6 @@
 
 	/*
-	 * IPv4 ã¢ãã¬ã¹ï¼æ°å­.ï¼ãæ¤åºããã IPv4 ã¢ãã¬ã¹ã¨ãã¦å
-¥åãã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ã«å¤æããã
+	 * IPv4 アドレス（数字.）を検出したら IPv4 アドレスとして入力し、
+	 * IPv4 射影アドレスに変換する。
 	 */
 	for (ipv4line = line; '0' <= *ipv4line && *ipv4line <= '9'; ipv4line ++)
@@ -844,6 +829,5 @@
 
 /*
- *  ãããã°è¡å
-¥å
+ *  デバッグ行入力
  */
 
@@ -877,5 +861,5 @@
 
 /*
- *  get_int -- æ´æ°å¤æ
+ *  get_int -- 整数変換
  */
 
@@ -905,5 +889,5 @@
 
 /*
- *  get_xuint -- ç¬¦å·ãªãæ´æ° (16é²) å¤æ
+ *  get_xuint -- 符号なし整数 (16進) 変換
  */
 
@@ -930,5 +914,5 @@
 
 /*
- *  dns_strtype -- DNS ã® type ã®æå­åãè¿ãã
+ *  dns_strtype -- DNS の type の文字列を返す。
  */
 
@@ -962,5 +946,5 @@
 
 /*
- *  dns_strclass -- DNS ã® class ãè¡¨ç¤ºããã
+ *  dns_strclass -- DNS の class を表示する。
  */
 
@@ -979,5 +963,5 @@
 
 /*
- *  resolv_hoststr -- æå­åã®FQDNã»ãã¹ãåã»IPv6/IPv4 ã¢ãã¬ã¹ãè§£æããã
+ *  resolv_hoststr -- 文字列のFQDN・ホスト名・IPv6/IPv4 アドレスを解析する。
  */
 
@@ -1053,5 +1037,5 @@
 
 /*
- *  show_dns_domain_name -- DNS ã®ãã¡ã¤ã³åãè¡¨ç¤ºããã
+ *  show_dns_domain_name -- DNS のドメイン名を表示する。
  */
 
@@ -1081,5 +1065,5 @@
 
 /*
- *  resolv_options -- ã¢ãã¬ã¹è§£æ±ºã®ãªãã·ã§ã³è§£æ
+ *  resolv_options -- アドレス解決のオプション解析
  */
 
@@ -1159,7 +1143,6 @@
 	if (*flags | DNS_LUP_FLAGS_PROTO_IPV6) {
 		/*
-		 *  IPv6 ã§ DNS ãµã¼ãã«ç
-§ä¼ãããã¨ãæå®ããã¦ãã
-		 *  ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãæå®ãå¤ãã
+		 *  IPv6 で DNS サーバに照会することが指定されても、
+		 *  サーバの IPv6 アドレスが未定義の時は、指定を外す。
 		 */
 		dns_in6_get_addr(&in6_addr);
@@ -1174,7 +1157,6 @@
 	if (*flags | DNS_LUP_FLAGS_PROTO_IPV4) {
 		/*
-		 *  IPv4 ã§ DNS ãµã¼ãã«ç
-§ä¼ãããã¨ãæå®ããã¦ãã
-		 *  ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãæå®ãå¤ãã
+		 *  IPv4 で DNS サーバに照会することが指定されても、
+		 *  サーバの IPv4 アドレスが未定義の時は、指定を外す。
 		 */
 		dns_in4_get_addr(&in4_addr);
@@ -1191,5 +1173,5 @@
 
 /*
- *  lookup_ipaddr -- ãã¹ãåã»ãªãã©ã«ã®IPã¢ãã¬ã¹ãIP ã¢ãã¬ã¹ã«å¤æããã
+ *  lookup_ipaddr -- ホスト名・リテラルのIPアドレスをIP アドレスに変換する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_subr.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_subr.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_subr.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,7 +33,6 @@
 
 /*
- *  ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³å
-±é
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  サンプルアプリケーション共通
+ *  コンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netapp_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,5 +36,5 @@
 
 /*
- *  TOPPERS/JSP ã«ã¼ãã«ãã·ã¹ãã æå» (SYSTIM) ã®å¨æ³¢æ°
+ *  TOPPERS/JSP カーネル、システム時刻 (SYSTIM) の周波数
  */
 
@@ -54,10 +42,9 @@
 
 /*
- *  IPv6/IPv4 ã«é¢ããå®ç¾©
- */
-
-/*
- *  æå®ããããã¯ã­ã«å¯¾ãããµã³ãã«ã¢ããªã±ã¼ã·ã§ã³å
-é¨ã®ãã¯ã­ã®å®ç¾©
+ *  IPv6/IPv4 に関する定義
+ */
+
+/*
+ *  指定されたマクロに対するサンプルアプリケーション内部のマクロの定義
  *
  *    SUPPORT_INET6		 .   .  ON  ON  ON  ON
@@ -81,5 +68,5 @@
 
 /*
- *  IPv4 ã¨ IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã­
+ *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
  */
 
@@ -103,5 +90,5 @@
 
 /*
- *  API IPãã­ãã³ã«ã®æå®
+ *  API IPプロトコルの指定
  */
 
@@ -113,10 +100,10 @@
 
 /*
- *  resolv_hoststr ãè¿ã flags ã®å¤ã®å®ç¾©
- *
- *    æ³¨æ:
- *
- *      dns.h ã§å®ç¾©ããã¦ãã DNS_OPCODEã
- *      resolver.h ã§å®ç¾©ããã¦ãã DNS_LUP_FLAGS ã¨éãªããªãäºã
+ *  resolv_hoststr が返す flags の値の定義
+ *
+ *    注意:
+ *
+ *      dns.h で定義されている DNS_OPCODE、
+ *      resolver.h で定義されている DNS_LUP_FLAGS と重ならない事。
  */
 
@@ -128,5 +115,5 @@
 
 /*
- *  å®æ°ã®å®ç¾©
+ *  定数の定義
  */
 
@@ -144,13 +131,13 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
- */
-
-/* ã¡ãã»ã¼ã¸ããã®èª­åºã */
+ *  関数シミュレーションマクロ
+ */
+
+/* メッセージからの読出し */
 
 #define MSG2HOST16(p)		(msg2host16((void*)&(p)))
 #define MSG2HOST32(p)		(msg2host32((void*)&(p)))
 
-/* ã¡ãã»ã¼ã¸ã¸ã®æ¸è¾¼ã¿ */
+/* メッセージへの書込み */
 
 #define HOST2MSG16(p,v)		(host2msg16((void*)&(p),(v)))
@@ -158,16 +145,15 @@
 
 /*
- *  ãããã¯ã¼ã¯çµç±ã³ã³ã½ã¼ã«å
-¥åºå
+ *  ネットワーク経由コンソール入出力
  */
 
 #ifdef USE_NET_CONS
 
-/* ãªãã¼ã  */
+/* リネーム */
 
 #define syslog		net_syslog
 #define serial_ctl_por	net_serial_ctl_por
 
-/* é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­ */
+/* 関数シミュレーションマクロ */
 
 #define FLUSH_SND_BUFF()	flush_snd_buff()
@@ -177,5 +163,5 @@
 #else	/* of #ifdef USE_NET_CONS */
 
-/* é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­ */
+/* 関数シミュレーションマクロ */
 
 #define FLUSH_SND_BUFF()
@@ -186,5 +172,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netappn_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netappn_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/netappn_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  ãããã¯ã¼ã¯å¿ç¨ãã­ã°ã©ã ãµãã¼ãã«ã¼ãã³
+ *  ネットワーク応用プログラムサポートルーチン
  */
 
@@ -51,5 +39,5 @@
 
 /*
- *  alloc_tcp_rep -- TCP åä»å£ãç²å¾ããã
+ *  alloc_tcp_rep -- TCP 受付口を獲得する。
  */
 
@@ -77,5 +65,5 @@
 
 /*
- *  free_tcp_rep -- TCP åä»å£ãè§£æ¾ããã
+ *  free_tcp_rep -- TCP 受付口を解放する。
  */
 
@@ -101,5 +89,5 @@
 
 /*
- *  tcpn_is_cepid -- TCP éä¿¡ç«¯ç¹ãæå®ããããããã¯ã¼ã¯å±¤ãªã true ãè¿ãã
+ *  tcpn_is_cepid -- TCP 通信端点が指定されたネットワーク層なら true を返す。
  */
 
@@ -117,5 +105,5 @@
 
 /*
- *  alloc_tcp_cep -- TCP éä¿¡ç«¯ç¹ãç²å¾ããã
+ *  alloc_tcp_cep -- TCP 通信端点を獲得する。
  */
 
@@ -143,5 +131,5 @@
 
 /*
- *  free_tcp_cep -- TCP éä¿¡ç«¯ç¹ãè§£æ¾ããã
+ *  free_tcp_cep -- TCP 通信端点を解放する。
  */
 
@@ -168,5 +156,5 @@
 
 /*
- *  alloc_udp_cep -- UDP éä¿¡ç«¯ç¹ãç²å¾ããã
+ *  alloc_udp_cep -- UDP 通信端点を獲得する。
  */
 
@@ -194,5 +182,5 @@
 
 /*
- *  free_udp_cep -- UDP éä¿¡ç«¯ç¹ãè§£æ¾ããã
+ *  free_udp_cep -- UDP 通信端点を解放する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/ping.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/ping.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/ping.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  ping -- ICMP ECHO ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  ping -- ICMP ECHO メッセージを送信する。
  */
 
@@ -90,5 +78,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -102,5 +90,5 @@
 
 /*
- *  icmp_reply_timeout -- ICMP REPLY ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  icmp_reply_timeout -- ICMP REPLY タイムアウト処理
  */
 
@@ -112,5 +100,5 @@
 
 /*
- *  icmp_echo_reply -- ICMP ECHO REPLY ã¡ãã»ã¼ã¸ãå¦çããã
+ *  icmp_echo_reply -- ICMP ECHO REPLY メッセージを処理する。
  */
 
@@ -130,5 +118,5 @@
 
 /*
- *  ping4 -- ICMP ECHO ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  ping4 -- ICMP ECHO メッセージを送信する。
  */
 
@@ -141,5 +129,5 @@
 	int_t		ix;
 
-	/* éä¿¡ç¨ã® IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/
+	/* 送信用の IP データグラムを獲得する。*/
 	if (in4_get_datagram(&output, ICMP4_HDR_SIZE + len, 0,
 	                     addr, NULL, IPPROTO_ICMP,
@@ -147,5 +135,5 @@
 		return;
 
-	/* ICMP ããããè¨­å®ããã*/
+	/* ICMP ヘッダを設定する。*/
 	icmp4h			= GET_ICMP4_HDR(output, IF_IP4_ICMP4_HDR_OFFSET);
 	icmp4h->type		= ICMP4_ECHO_REQUEST;
@@ -154,14 +142,14 @@
 	icmp4h->data.id_seq.seq	= 0;
 
-	/* ãã¼ã¿ãè¨­å®ããã*/
+	/* データを設定する。*/
 	sdu = GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET) + len;
 	for (ix = len; ix -- > 0; )
 		*-- sdu = ('0' + icmp_id + ix) & 0xff;
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	icmp4h->sum = 0;
 	icmp4h->sum = in_cksum(icmp4h, ICMP4_HDR_SIZE + len);
 
-	/* å¿ç­ãã§ãã¯ç¨ã®å¤æ°ãè¨­å®ããã*/
+	/* 応答チェック用の変数を設定する。*/
 #if 0
 	curr_icmp_id  = icmp_id ++;
@@ -172,5 +160,5 @@
 	NET_COUNT_MIB(icmp_stats.icmpOutEchos, 1);
 
-	/* éä¿¡å¾ãç¾å¨ã®æéãè¨æ¶ããã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 送信後、現在の時間を記憶し、タイムアウトを設定する。*/
 	ip_output(output, TMO_FEVR);
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/ping6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/ping6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/ping6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  ping6 -- ICMPv6 ECHO ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  ping6 -- ICMPv6 ECHO メッセージを送信する。
  */
 
@@ -93,5 +81,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -106,5 +94,5 @@
 
 /*
- *  icmp6_reply_timeout -- ICMP6 REPLY ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  icmp6_reply_timeout -- ICMP6 REPLY タイムアウト処理
  */
 
@@ -117,5 +105,5 @@
 
 /*
- *  icmp6_echo_reply -- ICMP6 ECHO REPLY ã¡ãã»ã¼ã¸ãå¦çããã
+ *  icmp6_echo_reply -- ICMP6 ECHO REPLY メッセージを処理する。
  */
 
@@ -134,5 +122,5 @@
 
 /*
- *  ping6 -- ICMP ECHO ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  ping6 -- ICMP ECHO メッセージを送信する。
  */
 
@@ -149,8 +137,6 @@
 
 	/*
-	 *  å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã
+	 *  宛先アドレスにふさわしい送信元アドレスを、
+	 *  ネットワークインタフェースから探索して利用する。
 	 */
 	if ((ia = in6_ifawithifp(ifp, addr)) == NULL)
@@ -160,5 +146,5 @@
 		ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_DEFHLIM);
 
-	/* éä¿¡ç¨ã® IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/
+	/* 送信用の IP データグラムを獲得する。*/
 	if (in6_get_datagram(&output, ICMP6_HDR_SIZE + size, 0,
 	                     addr, &ia->addr, IPPROTO_ICMPV6,
@@ -166,5 +152,5 @@
 		return;
 
-	/* ICMP ããããè¨­å®ããã*/
+	/* ICMP ヘッダを設定する。*/
 	icmp6h           = GET_ICMP6_HDR(output, IF_IP6_ICMP6_HDR_OFFSET);
 	icmp6h->type     = ICMP6_ECHO_REQUEST;
@@ -173,15 +159,15 @@
 	icmp6h->icmp6_seq= 0;
 
-	/* ãã¼ã¿ãè¨­å®ããã*/
+	/* データを設定する。*/
 	sdu = GET_ICMP6_SDU(output, IF_IP6_ICMP6_HDR_OFFSET) + size;
 	for (ix = size; ix -- > 0; )
 		*-- sdu = ('0' + send_icmp6_id + ix) & 0xff;
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	icmp6h->sum = 0;
 	icmp6h->sum = in6_cksum(output, IPPROTO_ICMPV6,
 	                        (uint8_t*)icmp6h - output->buf, ICMP6_HDR_SIZE + size);
 
-	/* å¿ç­ãã§ãã¯ç¨ã®å¤æ°ãè¨­å®ããã*/
+	/* 応答チェック用の変数を設定する。*/
 	reply_count = 0;
 
@@ -197,5 +183,5 @@
 #endif
 
-	/* éä¿¡å¾ãç¾å¨ã®æéãè¨æ¶ããã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+	/* 送信後、現在の時間を記憶し、タイムアウトを設定する。*/
 	ip6_output(output, ipflags, TMO_FEVR);
 	NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpOutMsgs, 1);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.c	(revision 389)
@@ -5,44 +5,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,5 +36,5 @@
 
 /*
- *  ãã¹ãåââIP ã¢ãã¬ã¹å¤æ
+ *  ホスト名←→IP アドレス変換
  */
 
@@ -87,5 +73,5 @@
 
 /*
- *  å±æå¤æ°
+ *  局所変数
  */
 
@@ -104,5 +90,5 @@
 
 /*
- *  get_dns_header -- DNS ã¡ãã»ã¼ã¸ãã DNS ããããåãåºãã
+ *  get_dns_header -- DNS メッセージから DNS ヘッダを取り出す。
  */
 
@@ -112,5 +98,5 @@
 	T_DNS_HDR	*dns_hdr;
 
-	/* DNS ããããåãåºãã*/
+	/* DNS ヘッダを取り出す。*/
 	if (length < sizeof(rslv->dns_hdr))
 		return EV_RSLV_ESIZE;
@@ -126,5 +112,5 @@
 
 /*
- *  dns_strtype -- DNS ã® type ã®æå­åãè¿ãã
+ *  dns_strtype -- DNS の type の文字列を返す。
  */
 
@@ -145,5 +131,5 @@
 
 /*
- *  udp6_dns -- UDP/IPv6 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã
+ *  udp6_dns -- UDP/IPv6 により DNS サーバからメッセージを受信する。
  */
 
@@ -155,5 +141,5 @@
 	int		retry;
 
-	/* DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãã©ã¡ã¼ã¿ã¨ã©ã¼ */
+	/* DNS サーバの IPv6 アドレスが未定義の時はパラメータエラー */
 	if (IN6_IS_ADDR_UNSPECIFIED(addr) || (in6_is_addr_ipv4mapped(addr) && addr->s6_addr32[3] == IPV4_ADDRANY)) {
 		syslog(LOG_NOTICE, "[RSLV] undefined IPv6 DNS server address.");
@@ -191,5 +177,5 @@
 
 /*
- *  udp4_dns -- UDP/IPv4 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã
+ *  udp4_dns -- UDP/IPv4 により DNS サーバからメッセージを受信する。
  */
 
@@ -201,5 +187,5 @@
 	int		retry;
 
-	/* DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯ãã©ã¡ã¼ã¿ã¨ã©ã¼ */
+	/* DNS サーバの IPv4 アドレスが未定義の時はパラメータエラー */
 	if (*addr == IPV4_ADDRANY) {
 		syslog(LOG_NOTICE, "[RSLV] undefined IPv4 DNS server address.");
@@ -235,5 +221,5 @@
 
 /*
- *  skip_label -- ã©ãã«ãèª­ã¿é£ã°ãã
+ *  skip_label -- ラベルを読み飛ばす。
  */
 
@@ -247,5 +233,5 @@
 
 /*
- *  add_name -- ã¡ãã»ã¼ã¸ã«ååãè¿½å ããã
+ *  add_name -- メッセージに名前を追加する。
  */
 
@@ -258,15 +244,14 @@
 	while (*name != '\0') {
 
-		/* ã¡ãã»ã¼ã¸ãµã¤ãºã«éãã¦ãããã¨ã©ã¼ */
+		/* メッセージサイズに達していたらエラー */
 		if (offset + 1 > size)
 			return E_BOVR;
 
-		/* ã©ãã«ã®çµãããè¦ã¤ããã*/
+		/* ラベルの終わりを見つける。*/
 		tail = skip_label(name);
 
-		/* ã©ãã«é·ãè¨­å®ããã*/
+		/* ラベル長を設定する。*/
 		label_len = tail - (uint8_t*)name;
-		if (label_len > DNS_LABEL_LENGTH) {	/* 63 ãªã¯ããããè¶
-ããã¨ã¨ã©ã¼ */
+		if (label_len > DNS_LABEL_LENGTH) {	/* 63 オクテットを超えるとエラー */
 			syslog(LOG_NOTICE, "[RSLV] label length(%d) too long > %d.",
 			                   label_len, DNS_LABEL_LENGTH);
@@ -277,7 +262,6 @@
 		offset ++;
 
-		/* ã©ãã«åãè¨­å®ããã*/
-		if (offset + label_len > size) {	/* ã¡ãã»ã¼ã¸ãµã¤ãºãè¶
-ããã¨ã¨ã©ã¼ */
+		/* ラベル名を設定する。*/
+		if (offset + label_len > size) {	/* メッセージサイズを超えるとエラー */
 			syslog(LOG_NOTICE, "[RSLV] message length(%d) too long > %d.",
 			                   offset + label_len, size);
@@ -288,9 +272,9 @@
 		offset += label_len;
 
-		/* æ¬¡ã®ã©ãã«ã«ç§»åããã*/
+		/* 次のラベルに移動する。*/
 		if (*tail == '\0')
 			name = tail;
 		else
-			name = tail + 1;	/* '.' ãã¹ã­ããããã*/
+			name = tail + 1;	/* '.' をスキップする。*/
 		}
 
@@ -299,5 +283,5 @@
 
 /*
- *  add_ipv6addr -- ã¡ãã»ã¼ã¸ã« IPv6 ã¢ãã¬ã¹ãè¿½å ããã
+ *  add_ipv6addr -- メッセージに IPv6 アドレスを追加する。
  */
 
@@ -319,5 +303,5 @@
 	for (col = sizeof(T_IN6_ADDR) * 2; -- col >= 0; ) {
 
-		/* 16é²æ° 1æ¡ã®å¤ããååã¨ãã¦è¿½å ããã*/
+		/* 16進数 1桁の値を、名前として追加する。*/
 		digit[0] = (addr.s6_addr8[col / 2] >> ((1 - (col % 2)) << 2)) & 0x0f;
 		if (digit[0] >= 10)
@@ -330,14 +314,14 @@
 		}
 
-	/* "ip6" ãè¿½å ããã*/
+	/* "ip6" を追加する。*/
 	if ((error = add_name(msg, size, offset, "ip6")) < 0)
 		return error;
 
-	/* "arpa" ãè¿½å ããã*/
+	/* "arpa" を追加する。*/
 	return add_name(msg, size, error, "arpa");
 	}
 
 /*
- *  add_ipv4addr -- ã¡ãã»ã¼ã¸ã« IPv4 ã¢ãã¬ã¹ãè¿½å ããã
+ *  add_ipv4addr -- メッセージに IPv4 アドレスを追加する。
  */
 
@@ -359,5 +343,5 @@
 	for (col = 0; col < sizeof(T_IN4_ADDR); col ++) {
 
-		/* 1ãªã¯ãããã®å¤ããæ´æ°å¤ãããªãã©ã«ã«å¤æããã*/
+		/* 1オクテットの値を、整数値からリテラルに変換する。*/
 		octet = (addr >> (col << 3)) & 0xff;
 		op = &ostr[3];
@@ -367,5 +351,5 @@
 			}
 
-		/* 1ãªã¯ãããã®å¤ããååã¨ãã¦è¿½å ããã*/
+		/* 1オクテットの値を、名前として追加する。*/
 		if ((error = add_name(msg, size, offset, op)) < 0)
 			return error;
@@ -373,14 +357,14 @@
 		}
 
-	/* "in-addr" ãè¿½å ããã*/
+	/* "in-addr" を追加する。*/
 	if ((error = add_name(msg, size, offset, "in-addr")) < 0)
 		return error;
 
-	/* "arpa" ãè¿½å ããã*/
+	/* "arpa" を追加する。*/
 	return add_name(msg, size, error, "arpa");
 	}
 
 /*
- *  setup_dns_msg -- DNS ã¡ãã»ã¼ã¸ãä½æããã
+ *  setup_dns_msg -- DNS メッセージを作成する。
  */
 
@@ -406,11 +390,10 @@
 	case DNS_LUP_FLAGS_NAME_FQDN:
 
-		/* ãã¹ãåãã¾ãã¯ FQDN ã®æã®å¦çã*/
-		/* ãã¹ãåãè¿½å ããã*/
+		/* ホスト名、または FQDN の時の処理。*/
+		/* ホスト名を追加する。*/
 		if ((offset = add_name(msg, msg_size, offset, name)) < 0)
 			return offset;
 
-		if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) {		/* ååã 255 ãªã¯ããããè¶
-ããã¨ã¨ã©ã¼ */
+		if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) {		/* 名前が 255 オクテットを超えるとエラー */
 			syslog(LOG_NOTICE, "[RSLV] name length(%d) too long > %d.",
 			                   offset - sizeof(dns_hdr), DNS_NAME_LENGTH);
@@ -418,13 +401,12 @@
 			}
 
-		/* ãã¹ãåã ãã®æã¯ããã¡ã¤ã³åãè¿½å ããã*/
+		/* ホスト名だけの時は、ドメイン名を追加する。*/
 		if ((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_HOST) {
 
-			/* ãã¡ã¤ã³åãè¿½å ããã*/
+			/* ドメイン名を追加する。*/
 			if ((offset = add_name(msg, msg_size, offset, dns_domain_name)) < 0)
 				return offset;
 
-			if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) {		/* ååã 255 ãªã¯ããããè¶
-ããã¨ã¨ã©ã¼ */
+			if (offset - sizeof(dns_hdr) > DNS_NAME_LENGTH) {		/* 名前が 255 オクテットを超えるとエラー */
 				syslog(LOG_NOTICE, "[RSLV] name length(%d) too long > %d.",
 				                   offset - sizeof(dns_hdr), DNS_NAME_LENGTH);
@@ -451,6 +433,5 @@
 		}
 
-	/* ååã®çµäºã³ã¼ããTYPEãCLASS ãè¿½å ãã¦ãã¡ãã»ã¼ã¸é·ãè¶
-ããªããã¨ãç¢ºèªããã*/
+	/* 名前の終了コード、TYPE、CLASS を追加してもメッセージ長を超えないことを確認する。*/
 	if (offset + sizeof(uint16_t) * 2 + 1 > msg_size) {
 		syslog(LOG_NOTICE, "[RSLV] message length(%d) too long > %d.",
@@ -459,9 +440,9 @@
 		}
 
-	/* ååã®çµäºã³ã¼ããè¨­å®ããã*/
+	/* 名前の終了コードを設定する。*/
 	*(msg + offset) = '\0';
 	offset ++;
 
-	/* DNS ã® TYPE ãè¨­å®ããã*/
+	/* DNS の TYPE を設定する。*/
 	if (flags & DNS_LUP_FLAGS_QTYPE_PTR)
 		host2msg16(msg + offset, DNS_TYPE_PTR);
@@ -476,5 +457,5 @@
 	offset += sizeof(uint16_t);
 
-	/* DNS ã® CLASS ãè¨­å®ããã*/
+	/* DNS の CLASS を設定する。*/
 	host2msg16(msg + offset, DNS_CLASS_IN);
 
@@ -483,8 +464,7 @@
 
 /*
- *  skip_dns_name -- DNS ã¡ãã»ã¼ã¸ã®ååãèª­ã¿é£ã°ãã
+ *  skip_dns_name -- DNS メッセージの名前を読み飛ばす。
  *
- *    æ³¨æ: å§ç¸®å½¢å¼ãèæ
-®ãããä¸ä½ 2ãããã 11ãªãå§ç¸®å½¢å¼ã
+ *    注意: 圧縮形式を考慮する。上位 2ビットが 11なら圧縮形式。
  */
 
@@ -508,5 +488,5 @@
 
 /*
- *  skip_dns_qd -- DNS Question section ãèª­ã¿é£ã°ãã
+ *  skip_dns_qd -- DNS Question section を読み飛ばす。
  */
 
@@ -517,10 +497,10 @@
 
 	while (count != 0) {
-		/* name ãèª­ã¿é£ã°ãã*/
+		/* name を読み飛ばす。*/
 		if ((next = skip_dns_name(msg, offset, length)) < 0)
 			return next;
 		offset = next;
 
-		/* typeãclass ãèª­ã¿é£ã°ãã*/
+		/* type、class を読み飛ばす。*/
 		if ((offset + sizeof(uint16_t) + sizeof(uint16_t)) > length)
 			return EV_RSLV_ESIZE;
@@ -534,5 +514,5 @@
 
 /*
- *  skip_dns_rr -- DNS RR ãèª­ã¿é£ã°ãã
+ *  skip_dns_rr -- DNS RR を読み飛ばす。
  */
 
@@ -544,15 +524,15 @@
 
 	while (count != 0) {
-		/* name ãèª­ã¿é£ã°ãã*/
+		/* name を読み飛ばす。*/
 		if ((next = skip_dns_name(msg, offset, length)) < 0)
 			return next;
 		offset = next;
 
-		/* typeãclassãTTL ãèª­ã¿é£ã°ãã*/
+		/* type、class、TTL を読み飛ばす。*/
 		if (offset + sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t) > length)
 			return EV_RSLV_ESIZE;
 		offset += sizeof(uint16_t) + sizeof(uint16_t) + sizeof(uint32_t);
 
-		/* RD length ã¨ RDATA ãèª­ã¿é£ã°ãã*/
+		/* RD length と RDATA を読み飛ばす。*/
 		if (offset + sizeof(uint16_t) > length)
 			return EV_RSLV_ESIZE;
@@ -570,5 +550,5 @@
 
 /*
- *  dns_analyze_qd -- DNS ã¡ãã»ã¼ã¸ã® question section ãè§£æããã
+ *  dns_analyze_qd -- DNS メッセージの question section を解析する。
  */
 
@@ -583,14 +563,11 @@
 	offset = error;
 
-	/* DNS ã¡ãã»ã¼ã¸å
-ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/
+	/* DNS メッセージ内の形式のサイズでチェックする。*/
 	if (offset + T_DNS_QD_SIZE > length)
 		return EV_RSLV_ESIZE;
 
 	/*
-	 *  DNS ã¡ãã»ã¼ã¸å
-ã® SOA RDATA ããã¤ããªã¼ãã¼ãèª¿æ´ãã¦
-	 *  å
-é¨æ§é ä½ã«ã³ãã¼ããã
+	 *  DNS メッセージ内の SOA RDATA をバイトオーダーを調整して
+	 *  内部構造体にコピーする。
 	 */
 	dns_qd = (T_DNS_QD*)(msg + offset);
@@ -602,5 +579,5 @@
 
 /*
- *  dns_analyze_soa -- DNS ã¡ãã»ã¼ã¸ã® SOA RDATA ãè§£æããã
+ *  dns_analyze_soa -- DNS メッセージの SOA RDATA を解析する。
  */
 
@@ -611,24 +588,21 @@
 	T_DNS_SOA	*dns_soa;
 
-	/* MNAME ãã¹ã­ããããã*/
+	/* MNAME をスキップする。*/
 	if ((error = skip_dns_name(msg, offset, length)) < 0)
 		return error;
 	offset = error;
 
-	/* RNAME ãã¹ã­ããããã*/
+	/* RNAME をスキップする。*/
 	if ((error = skip_dns_name(msg, offset, length)) < 0)
 		return error;
 	offset = error;
 
-	/* DNS ã¡ãã»ã¼ã¸å
-ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/
+	/* DNS メッセージ内の形式のサイズでチェックする。*/
 	if (offset + T_DNS_SOA_SIZE > length)
 		return EV_RSLV_ESIZE;
 
 	/*
-	 *  DNS ã¡ãã»ã¼ã¸å
-ã® SOA RDATA ããã¤ããªã¼ãã¼ãèª¿æ´ãã¦
-	 *  å
-é¨æ§é ä½ã«ã³ãã¼ããã
+	 *  DNS メッセージ内の SOA RDATA をバイトオーダーを調整して
+	 *  内部構造体にコピーする。
 	 */
 	dns_soa = (T_DNS_SOA*)(msg + offset);
@@ -643,5 +617,5 @@
 
 /*
- *  dns_analyze_rr -- DNS ã¡ãã»ã¼ã¸ã® AN/NS/AR section ãè§£æããã
+ *  dns_analyze_rr -- DNS メッセージの AN/NS/AR section を解析する。
  */
 
@@ -656,14 +630,11 @@
 	offset = error;
 
-	/* DNS ã¡ãã»ã¼ã¸å
-ã®å½¢å¼ã®ãµã¤ãºã§ãã§ãã¯ããã*/
+	/* DNS メッセージ内の形式のサイズでチェックする。*/
 	if (offset + T_DNS_RR_SIZE > length)
 		return EV_RSLV_ESIZE;
 
 	/*
-	 *  DNS ã¡ãã»ã¼ã¸å
-ã® SOA RDATA ããã¤ããªã¼ãã¼ãèª¿æ´ãã¦
-	 *  å
-é¨æ§é ä½ã«ã³ãã¼ããã
+	 *  DNS メッセージ内の SOA RDATA をバイトオーダーを調整して
+	 *  内部構造体にコピーする。
 	 */
 	dns_rr = (T_DNS_RR*)(msg + offset);
@@ -679,5 +650,5 @@
 
 /*
- *  analyze_dns_msg -- DNS ã¡ãã»ã¼ã¸ãè§£æããã
+ *  analyze_dns_msg -- DNS メッセージを解析する。
  */
 
@@ -687,24 +658,24 @@
 	ER_UINT	offset;
 
-	/* DNS ããããåãåºãã*/
+	/* DNS ヘッダを取り出す。*/
 	if ((offset = get_dns_header(msg, length, rslv)) < 0)
 		return offset;
 
-	/* question section ãèª­ã¿é£ã°ãã*/
+	/* question section を読み飛ばす。*/
 	rslv->qd_offset = offset;
 	if ((offset = skip_dns_qd(msg, offset, length, rslv->dns_hdr.qdcount)) < 0)
 		return offset;
 
-	/* answer section ãèª­ã¿é£ã°ãã*/
+	/* answer section を読み飛ばす。*/
 	rslv->an_offset = offset;
 	if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.ancount)) < 0)
 		return offset;
 
-	/* authority records section ãèª­ã¿é£ã°ãã*/
+	/* authority records section を読み飛ばす。*/
 	rslv->ns_offset = offset;
 	if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.nscount)) < 0)
 		return offset;
 
-	/* additional records  section ãèª­ã¿é£ã°ãã*/
+	/* additional records  section を読み飛ばす。*/
 	rslv->ar_offset = offset;
 	if ((offset = skip_dns_rr(msg, offset, length, rslv->dns_hdr.arcount)) < 0)
@@ -715,6 +686,5 @@
 
 /*
- *  dns_lookup_host_sub -- DNS ã«ãããã¹ãã®æ
-å ±ãåå¾ããï¼è£å©é¢æ°ï¼ã
+ *  dns_lookup_host_sub -- DNS によりホストの情報を取得する（補助関数）。
  */
 
@@ -833,5 +803,5 @@
 
 /*
- *  udp64_dns -- DNS/IPv6ãDNS/IPv4 ã«ãã DNS ãµã¼ãããã¡ãã»ã¼ã¸ãåä¿¡ããã
+ *  udp64_dns -- DNS/IPv6、DNS/IPv4 により DNS サーバからメッセージを受信する。
  */
 
@@ -844,20 +814,16 @@
 	uint16_t	proto;
 
-	/* DNS ã¡ãã»ã¼ã¸ãä½æããã*/
+	/* DNS メッセージを作成する。*/
 	if ((length = setup_dns_msg(flags, hostname, msg, msg_size)) < 0)
 		return length;
 
-	/* UDP/IPv6 ã® DNS ãµã¼ãã«ç
-§ä¼ããã*/
+	/* UDP/IPv6 の DNS サーバに照会する。*/
 	proto = DNS_LUP_FLAGS_PROTO_IPV6;
 	if ((length = udp6_dns(flags, &in6_addr_dns, msg, msg_size, length)) < 0) {
-		/*  UDP/IPv6 ã® DNS ãµã¼ãã¸ã®ç
-§ä¼ãã¨ã©ã¼ã«ãªã£ãæã¯ãUDP/IPv4 ã® DNS ãµã¼ãã«ç
-§ä¼ããã*/
+		/*  UDP/IPv6 の DNS サーバへの照会がエラーになった時は、UDP/IPv4 の DNS サーバに照会する。*/
 		if ((length = setup_dns_msg(flags, hostname, msg, msg_size)) < 0)
 			return length;
 
-		/* UDP/IPv4 ã® DNS ãµã¼ãã«ç
-§ä¼ããã*/
+		/* UDP/IPv4 の DNS サーバに照会する。*/
 		proto = DNS_LUP_FLAGS_PROTO_IPV4;
 		if ((length = udp4_dns(flags, &in4_addr_dns, msg, msg_size, length)) < 0)
@@ -865,5 +831,5 @@
 		}
 
-	/* DNS ã¡ãã»ã¼ã¸ãè§£æããã*/
+	/* DNS メッセージを解析する。*/
 	if ((error = analyze_dns_msg(msg, length, rslv)) != E_OK)
 		return error;
@@ -890,6 +856,5 @@
 
 /*
- *  dns_lookup_host -- DNS ã«ãããã¹ãã®æ
-å ±ãåå¾ããã
+ *  dns_lookup_host -- DNS によりホストの情報を取得する。
  */
 
@@ -905,7 +870,6 @@
 
 		/*
-		 *  IPv6/IPv4 ã®ä¸¡æ¹ãæå®ãããæã®å¦ç
-		 *  ã¾ã type == AAAA ã§ DNS ãµã¼ãã«ç
-§ä¼ããã
+		 *  IPv6/IPv4 の両方が指定された時の処理
+		 *  まず type == AAAA で DNS サーバに照会する。
 		 */
 		if (flags & DNS_LUP_FLAGS_QTYPE_PTR) {
@@ -925,7 +889,6 @@
 
 			/*
-			 *  type == AAAA ã§ã¢ãã¬ã¹è§£æ±ºãã§ããªãã£ãæã®å¦ç
-			 *  type == A ã§ DNS ãµã¼ãã«ç
-§ä¼ããã
+			 *  type == AAAA でアドレス解決ができなかった時の処理
+			 *  type == A で DNS サーバに照会する。
 			 */
 			if (flags & DNS_LUP_FLAGS_QTYPE_A)
@@ -943,7 +906,6 @@
 
 		/*
-		 *  type == AAAA ã¨ A ã®ä¸¡æ¹ãæå®ãããæã®å¦ç
-		 *  ã¾ã type == AAAA ã§ DNS ãµã¼ãã«ç
-§ä¼ããã
+		 *  type == AAAA と A の両方が指定された時の処理
+		 *  まず type == AAAA で DNS サーバに照会する。
 		 */
 		if ((error = dns_lookup_host_sub(flags & ~DNS_LUP_FLAGS_QTYPE_A, hostname, msg, msg_size, rslv)) < 0)
@@ -953,7 +915,6 @@
 
 			/*
-			 *  type == AAAA ã§ã¢ãã¬ã¹è§£æ±ºãã§ããªãã£ãæã®å¦ç
-			 *  type == A ã§ DNS ãµã¼ãã«ç
-§ä¼ããã
+			 *  type == AAAA でアドレス解決ができなかった時の処理
+			 *  type == A で DNS サーバに照会する。
 			 */
 			return dns_lookup_host_sub(flags & ~DNS_LUP_FLAGS_QTYPE_AAAA, hostname, msg, msg_size, rslv);
@@ -968,5 +929,5 @@
 
 	else {
-		/* IPv6/IPv4 ã®ã©ã¡ããä¸æ¹ãæå®ãããæã®å¦ç */
+		/* IPv6/IPv4 のどちらか一方が指定された時の処理 */
 		error = dns_lookup_host_sub(flags, hostname, msg, msg_size, rslv);
 		}
@@ -984,7 +945,7 @@
 
 /*
- *  dns_in6_set_dname -- DNS ã® ãã¡ã¤ã³åãè¨­å®ããï¼DHCPv6ç¨ï¼ã
+ *  dns_in6_set_dname -- DNS の ドメイン名を設定する（DHCPv6用）。
  *
- *    æ³¨æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã
+ *    注意: new に NULL を指定すると、初期値に戻す。
  */
 
@@ -1019,5 +980,5 @@
 
 /*
- *  dns_in6_get_dname -- DNS ã® ãã¡ã¤ã³åãå¾ãã
+ *  dns_in6_get_dname -- DNS の ドメイン名を得る。
  */
 
@@ -1029,7 +990,7 @@
 
 /*
- *  dns_in6_set_addr -- DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãè¨­å®ããï¼DHCPv6ç¨ï¼ã
+ *  dns_in6_set_addr -- DNS サーバの IPv6 アドレスを設定する（DHCPv6用）。
  *
- *    æ³¨æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã
+ *    注意: new に NULL を指定すると、初期値に戻す。
  */
 
@@ -1045,5 +1006,5 @@
 
 /*
- *  dns_in6_get_addr -- DNS ãµã¼ãã® IPv6 ã¢ãã¬ã¹ãå¾ãã
+ *  dns_in6_get_addr -- DNS サーバの IPv6 アドレスを得る。
  */
 
@@ -1064,7 +1025,7 @@
 
 /*
- *  dns_in4_set_dname -- DNS ã® ãã¡ã¤ã³åãè¨­å®ããï¼DHCPv4ç¨ï¼ã
+ *  dns_in4_set_dname -- DNS の ドメイン名を設定する（DHCPv4用）。
  *
- *    æ³¨æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã
+ *    注意: new に NULL を指定すると、初期値に戻す。
  */
 
@@ -1087,5 +1048,5 @@
 
 /*
- *  dns_in4_get_dname -- DNS ã® ãã¡ã¤ã³åãå¾ãã
+ *  dns_in4_get_dname -- DNS の ドメイン名を得る。
  */
 
@@ -1097,7 +1058,7 @@
 
 /*
- *  dns_in4_set_addr -- DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãè¨­å®ããï¼DHCPv4ç¨ï¼ã
+ *  dns_in4_set_addr -- DNS サーバの IPv4 アドレスを設定する（DHCPv4用）。
  *
- *    æ³¨æ: new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã
+ *    注意: new に NULL を指定すると、初期値に戻す。
  */
 
@@ -1113,5 +1074,5 @@
 
 /*
- *  dns_in4_get_addr -- DNS ãµã¼ãã® IPv4 ã¢ãã¬ã¹ãå¾ãã
+ *  dns_in4_get_addr -- DNS サーバの IPv4 アドレスを得る。
  */
 
@@ -1130,5 +1091,5 @@
 
 /*
- *  dns_host_addr -- ãã¹ãåã IP ã¢ãã¬ã¹ã«å¤æããã
+ *  dns_host_addr -- ホスト名を IP アドレスに変換する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.h	(revision 389)
@@ -5,44 +5,30 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,5 +36,5 @@
 
 /*
- *  ãã¹ãåââIP ã¢ãã¬ã¹å¤æ
+ *  ホスト名←→IP アドレス変換
  */
 
@@ -59,21 +45,21 @@
 
 /*
- *  ã³ã³ãã¤ã«æã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã®æå®
- */
-
-/* ãã¼ãçªå· */
+ *  コンパイル時コンフィギュレーションの指定
+ */
+
+/* ポート番号 */
 
 #define RSLV_CFG_DNS_PORTNO	53
 
 /*
- *  ã¿ã¤ã ã¢ã¦ãå¤
- */
-
-#define TMO_DNS_UDP_SND		ULONG_C(1*1000*1000)	/* [us]ãDNS ãµã¼ãã¸ã®   UDP éä¿¡ã¿ã¤ã ã¢ã¦ã	*/
-#define TMO_DNS_UDP_RCV		ULONG_C(5*1000*1000)	/* [us]ãDNS ãµã¼ãããã® UDP åä¿¡ã¿ã¤ã ã¢ã¦ã	*/
-#define NUM_DNS_UDP_RETRY	1		/* ãªãã©ã¤åæ°					*/
-
-/*
- *  ãã¡ã¤ã³å
+ *  タイムアウト値
+ */
+
+#define TMO_DNS_UDP_SND		ULONG_C(1*1000*1000)	/* [us]、DNS サーバへの   UDP 送信タイムアウト	*/
+#define TMO_DNS_UDP_RCV		ULONG_C(5*1000*1000)	/* [us]、DNS サーバからの UDP 受信タイムアウト	*/
+#define NUM_DNS_UDP_RETRY	1		/* リトライ回数					*/
+
+/*
+ *  ドメイン名
  */
 
@@ -84,5 +70,5 @@
 
 /*
- *  DNS ãµã¼ãã¼ã® IPã¢ãã¬ã¹
+ *  DNS サーバーの IPアドレス
  */
 
@@ -96,5 +82,5 @@
 
 /*
- *  éåä¿¡ãããã¡æ°
+ *  送受信バッファ数
  */
 
@@ -102,12 +88,11 @@
 
 /*
- *  ãã­ã°ã©ã ã§ä½¿ç¨ããæ
-å ±ã®å®ç¾©
- */
-
-/*
- *  ãã­ã°ã©ã ã§ä½¿ç¨ãã DNS ããã
- *
- *    æ³¨æ: ã¡ã³ãã¯ãã¹ããã¤ããªã¼ãã¼
+ *  プログラムで使用する情報の定義
+ */
+
+/*
+ *  プログラムで使用する DNS ヘッダ
+ *
+ *    注意: メンバはホストバイトオーダー
  *
  *    0                    7  8                   15
@@ -147,5 +132,5 @@
  *  DNS message data
  *
- *    æ³¨æ: ã¡ã³ãã¯ãã¹ããã¤ããªã¼ãã¼
+ *    注意: メンバはホストバイトオーダー
  */
 
@@ -159,5 +144,5 @@
 
 /*
- *  RR (Resouce Record) å½¢å¼
+ *  RR (Resouce Record) 形式
  *
  *    0                    7  8                   15
@@ -185,7 +170,6 @@
  *  +-----------------------------------------------+
  *
- *    æ³¨æ: offset ã®åç¹ã¯ DNS message ã®å
-é ­
- *          ã¡ã³ãã¯ãã¹ããã¤ããªã¼ãã¼
+ *    注意: offset の原点は DNS message の先頭
+ *          メンバはホストバイトオーダー
  */
 
@@ -199,5 +183,5 @@
 
 /*
- *  Question section å½¢å¼
+ *  Question section 形式
  *
  *    0                    7  8                   15
@@ -214,5 +198,5 @@
  *  +-----------------------------------------------+
  *
- *    æ³¨æ: ã¡ã³ãã¯ãã¹ããã¤ããªã¼ãã¼
+ *    注意: メンバはホストバイトオーダー
  */
 
@@ -223,5 +207,5 @@
 
 /*
- *  SOA RDATA å½¢å¼
+ *  SOA RDATA 形式
  *
  *    0                    7  8                   15
@@ -255,7 +239,6 @@
  *  +-----------------------------------------------+
  *
- *    æ³¨æ: offset ã®åç¹ã¯ DNS message ã®å
-é ­
- *          ã¡ã³ãã¯ãã¹ããã¤ããªã¼ãã¼
+ *    注意: offset の原点は DNS message の先頭
+ *          メンバはホストバイトオーダー
  */
 
@@ -269,8 +252,8 @@
 
 /*
- *  dns_lookup_host ã® flags ã®å®ç¾©
- *
- *    æ³¨æ:
- *      dns.h ã§å®ç¾©ããã¦ãã DNS_OPCODE ã¨éãªããªããã¨ã
+ *  dns_lookup_host の flags の定義
+ *
+ *    注意:
+ *      dns.h で定義されている DNS_OPCODE と重ならないこと。
  *      #define DNS_OPCODE_MASK		0x7800U
  */
@@ -299,12 +282,12 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¨ã©ã¼ã³ã¼ã
- */
-
-#define EV_RSLV_ESIZE			(-100)		/* DNSã¡ãã»ã¼ã¸ã®ååé·ç°å¸¸	*/
-#define EV_RSLV_UNEXPCT			(-101)		/* äºæããªãDNSã¡ãã»ã¼ã¸	*/
-
-/*
- *  é¢æ°
+ *  ネットワークエラーコード
+ */
+
+#define EV_RSLV_ESIZE			(-100)		/* DNSメッセージの名前長異常	*/
+#define EV_RSLV_UNEXPCT			(-101)		/* 予期しないDNSメッセージ	*/
+
+/*
+ *  関数
  */
 
@@ -316,7 +299,7 @@
 
 /*
- *  æ³¨æ: dns_in6_set_dnameãdns_in4_set_dnameã
- *        dns_in6_set_addrã dns_in4_set_addr ã§ã
- *        new ã« NULL ãæå®ããã¨ãåæå¤ã«æ»ãã
+ *  注意: dns_in6_set_dname、dns_in4_set_dname、
+ *        dns_in6_set_addr、 dns_in4_set_addr で、
+ *        new に NULL を指定すると、初期値に戻す。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver_asp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  ASP ç¨ Resolver ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ASP 用 Resolver のシステムコンフィギュレーションファイル
  */
 
@@ -51,8 +39,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_RSLV_SRBUF, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver_jsp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver_jsp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver_jsp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  JSP ç¨ Resolver ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  JSP 用 Resolver のシステムコンフィギュレーションファイル
  */
 
@@ -51,8 +39,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_RSLV_SRBUF, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,9 +33,9 @@
 
 /* 
- *  TCP DISCARD ã¯ã©ã¤ã¢ã³ã
+ *  TCP DISCARD クライアント
  *
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»IPv4
- *    ã»IPv6
+ *    ・ノンブロッキングコール
+ *    ・IPv4
+ *    ・IPv6
  */
 
@@ -79,13 +67,13 @@
 #ifdef USE_TCP_DISCARD_CLI
 
-/* discard ãµã¼ãã®ãã¼ãçªå· */
+/* discard サーバのポート番号 */
 
 #define DISCARD_SRV_PORTNO	UINT_C(9)
 
-/* è¡¨ç¤º */
+/* 表示 */
 
 /*#define SHOW_RCV_RANGE*/
 
-/* éä¿¡éé */
+/* 送信間隔 */
 
 #ifdef TOPPERS_S810_CLG3_85
@@ -103,5 +91,5 @@
 #endif	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-/* èªåå®è¡ */
+/* 自動実行 */
 
 #if defined(TCP_DISCARD_CLI_AUTO_RUN_STR)
@@ -117,5 +105,5 @@
 
 /*
- *  ãããã¡ãµã¤ãºã®å®ç¾©
+ *  バッファサイズの定義
  */
 
@@ -127,11 +115,10 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
 bool_t tcp_discard_cli_valid;
 
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+/* TCP 送受信ウィンドバッファ */
 
 #ifndef TCP_CFG_SWBUF_CSAVE_ONLY
@@ -142,5 +129,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -153,5 +140,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -187,5 +174,5 @@
 
 /*
- *  send_tcp_discard -- DISCARD/TCP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_tcp_discard -- DISCARD/TCP サーバにメッセージを送信する。
  */
 
@@ -215,6 +202,5 @@
 		}
 
-	/* æ¥ç¶ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 接続が完了するまで待つ。*/
 	syscall(wai_sem(SEM_TCP_DISCARD_CLI_NBLK_READY));
 
@@ -259,6 +245,5 @@
 			syslog(LOG_NOTICE, "[TDCn:%02u SND] close error: %s", cepid, itron_strerror(error));
 
-		/* éæ¾ãå®äºããã¾ã§å¾
-ã¤ã*/
+		/* 開放が完了するまで待つ。*/
 		syscall(wai_sem(SEM_TCP_DISCARD_CLI_NBLK_READY));
 		}
@@ -270,5 +255,5 @@
 
 /*
- *  send_tcp_discard -- DISCARD/TCP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_tcp_discard -- DISCARD/TCP サーバにメッセージを送信する。
  */
 
@@ -344,5 +329,5 @@
 
 /*
- *  getcomd -- ã³ãã³ããå¾ãã
+ *  getcomd -- コマンドを得る。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  TCP DISCARD ã¯ã©ã¤ã¢ã³ã
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP DISCARD クライアント
+ *  コンフィギュレーションファイル
  */
 
 #ifdef USE_TCP_DISCARD_CLI
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 #ifdef USE_TCP_EXTENTIONS
@@ -77,9 +65,9 @@
 #endif	/* of #ifdef USE_TCP_EXTENTIONS */
 
-/* ã³ãã³ãã­ã¥ã¼ */
+/* コマンドキュー */
 
 CRE_DTQ(DTQ_TCP_DISCARD_CLI,  { TA_TFIFO, 1, NULL });
 
-/* ã»ããã© */
+/* セマフォ */
 
 #ifdef USE_TCP_NON_BLOCKING
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_cli.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,16 +35,14 @@
 #define _TCP_DISCARD_CLI_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define TCP_DISCARD_CLI_STACK_SIZE	1024		/* TCP DISCARD ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
+#define TCP_DISCARD_CLI_STACK_SIZE	1024		/* TCP DISCARD クライアントタスクのスタックサイズ */
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define TCP_DISCARD_CLI_MAIN_PRIORITY	5	/* TCP DISCARD ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®åªå
-åº¦ */
+#define TCP_DISCARD_CLI_MAIN_PRIORITY	5	/* TCP DISCARD クライアントタスクの優先度 */
 
 /*
- *  TCP éåä¿¡ã¦ã¤ã³ããããã¡ãµã¤ãº
+ *  TCP 送受信ウインドバッファサイズ
  */
 
@@ -80,19 +66,19 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
 extern bool_t	tcp_discard_cli_valid;
 
-/* TCP éåä¿¡ãããã¡ */
+/* TCP 送受信バッファ */
 
 extern uint8_t tcp_discard_cli_swbuf[];
 extern uint8_t tcp_discard_cli_rwbuf[];
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void tcp_discard_cli_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_nblk_tcp_discard_cli (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,9 +33,9 @@
 
 /* 
- *  DISCARD ãµã¼ã
+ *  DISCARD サーバ
  *
- *    ã»çã³ãã¼ API
- *    ã»IPv4
- *    ã»IPv6
+ *    ・省コピー API
+ *    ・IPv4
+ *    ・IPv6
  */
 
@@ -80,5 +68,5 @@
 
 /*
- *  è¡¨ç¤º
+ *  表示
  */
 
@@ -87,9 +75,8 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+ *  全域変数
+ */
+
+/* TCP 送受信ウィンドバッファ */
 
 #ifndef TCP_CFG_RWBUF_CSAVE_ONLY
@@ -98,5 +85,5 @@
 
 /*
- *  TCP DISCARD ãµã¼ãã¿ã¹ã¯
+ *  TCP DISCARD サーバタスク
  */
 
@@ -236,5 +223,5 @@
 
 /*
- *  get_tcp_rep -- TCP åä»å£ãç²å¾ããã
+ *  get_tcp_rep -- TCP 受付口を獲得する。
  */
 
@@ -266,5 +253,5 @@
 
 /*
- *  get_tcp_cep -- TCP éä¿¡ç«¯ç¹ã¨ãç²å¾ããã
+ *  get_tcp_cep -- TCP 通信端点とを獲得する。
  */
 
@@ -293,5 +280,5 @@
 
 /*
- *  tcp_discard_srv_task -- TCP ã¨ã³ã¼ãµã¼ãã¿ã¹ã¯
+ *  tcp_discard_srv_task -- TCP エコーサーバタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  TCP DISCARD ãµã¼ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP DISCARD サーバコンフィギュレーションファイル
  */
 
@@ -51,5 +39,5 @@
 
 /*
- * ã¿ã¹ã¯
+ * タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_discard_srv.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,16 +35,14 @@
 #define _TCP_DISCARD_SRV_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define TCP_DISCARD_SRV_STACK_SIZE	1024		/* TCP DISCARD ãµã¼ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
+#define TCP_DISCARD_SRV_STACK_SIZE	1024		/* TCP DISCARD サーバタスクのスタックサイズ */
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define TCP_DISCARD_SRV_MAIN_PRIORITY	5	/* TCP DISCARD ãµã¼ãã¿ã¹ã¯ã®åªå
-åº¦ */
+#define TCP_DISCARD_SRV_MAIN_PRIORITY	5	/* TCP DISCARD サーバタスクの優先度 */
 
 /*
- *  TCP éåä¿¡ã¦ã¤ã³ããããã¡ãµã¤ãº
+ *  TCP 送受信ウインドバッファサイズ
  */
 
@@ -79,10 +65,10 @@
 #endif	/* of #if defined(USE_TCP_MSS_SEG) || defined(USE_IPV6_MMTU) */
 
-/* TCP éåä¿¡ãããã¡ */
+/* TCP 送受信バッファ */
 
 extern uint8_t tcp_discard_srv_swbuf[];
 extern uint8_t tcp_discard_srv_rwbuf[];
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void tcp_discard_srv_task(intptr_t exinf);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /* 
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ã
+ *  TCP ECHO クライアント
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åé¢å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»çã³ãã¼ API
- *    ã»IPv4
- *    ã»IPv6
+ *    ・送受信タスク分離型
+ *    ・ノンブロッキングコール
+ *    ・省コピー API
+ *    ・IPv4
+ *    ・IPv6
  */
 
@@ -83,9 +71,9 @@
 #ifdef USE_TCP_ECHO_CLI
 
-/* echo ãµã¼ãã®ãã¼ãçªå· */
+/* echo サーバのポート番号 */
 
 #define ECHO_SRV_PORTNO		UINT_C(7)
 
-/* ç·æ¥ãã¼ã¿ã®éä¿¡ */
+/* 緊急データの送信 */
 
 #ifdef USE_TCP_EXTENTIONS
@@ -96,5 +84,5 @@
 #endif	/* of #ifdef USE_TCP_EXTENTIONS */
 
-/* éä¿¡éé */
+/* 送信間隔 */
 
 #ifdef TOPPERS_S810_CLG3_85
@@ -114,5 +102,5 @@
 #endif	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-/* èªåå®è¡ */
+/* 自動実行 */
 
 #if defined(TCP_ECHO_CLI_AUTO_RUN_STR)
@@ -138,6 +126,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -145,5 +132,5 @@
 uint_t	tcp_echo_cli_scount;
 
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+/* TCP 送受信ウィンドバッファ */
 
 #ifndef TCP_CFG_SWBUF_CSAVE
@@ -158,6 +145,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -165,5 +151,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -224,5 +210,5 @@
 
 /*
- *  getcomd -- ã³ãã³ããå¾ãã
+ *  getcomd -- コマンドを得る。
  */
 
@@ -295,9 +281,9 @@
 
 /*
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯
- */
-
-/*
- *  IP ã¢ãã¬ã¹ã®æå®
+ *  TCP ECHO クライアント送信タスク
+ */
+
+/*
+ *  IP アドレスの指定
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ã
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO クライアント
+ *  コンフィギュレーションファイル
  */
 
 #ifdef USE_TCP_ECHO_CLI
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 #ifdef USE_TCP_EXTENTIONS
@@ -95,10 +83,10 @@
 #endif	/* of #ifdef USE_TCP_EXTENTIONS */
 
-/* ã³ãã³ãã­ã¥ã¼ */
+/* コマンドキュー */
 
 CRE_DTQ(DTQ_TCP_ECHO_CLI_SND,  { TA_TFIFO, 1, NULL });
 CRE_DTQ(DTQ_TCP_ECHO_CLI_RCV,  { TA_TFIFO, 1, NULL });
 
-/* ã»ããã© */
+/* セマフォ */
 
 #ifdef USE_TCP_NON_BLOCKING
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,28 +35,25 @@
 #define _TCP_ECHO_CLI_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
 #ifdef TOPPERS_S810_CLG3_85
 
-#define TCP_ECHO_CLI_RCV_STACK_SIZE	512		/* TCP ECHO ã¯ã©ã¤ã¢ã³ãåä¿¡ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
-#define TCP_ECHO_CLI_SND_STACK_SIZE	512		/* TCP ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define TCP_ECHO_CLI_RCV_STACK_SIZE	512		/* TCP ECHO クライアント受信タスクのスタックサイズ	*/
+#define TCP_ECHO_CLI_SND_STACK_SIZE	512		/* TCP ECHO クライアント送信タスクのスタックサイズ	*/
 
 #else	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-#define TCP_ECHO_CLI_RCV_STACK_SIZE	1024		/* TCP ECHO ã¯ã©ã¤ã¢ã³ãåä¿¡ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
-#define TCP_ECHO_CLI_SND_STACK_SIZE	1024		/* TCP ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define TCP_ECHO_CLI_RCV_STACK_SIZE	1024		/* TCP ECHO クライアント受信タスクのスタックサイズ	*/
+#define TCP_ECHO_CLI_SND_STACK_SIZE	1024		/* TCP ECHO クライアント送信タスクのスタックサイズ	*/
 
 #endif	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define TCP_ECHO_CLI_RCV_MAIN_PRIORITY	5		/* TCP ECHO ã¯ã©ã¤ã¢ã³ãåä¿¡ã¿ã¹ã¯ã®åªå
-åº¦		*/
-#define TCP_ECHO_CLI_SND_MAIN_PRIORITY	5		/* TCP ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define TCP_ECHO_CLI_RCV_MAIN_PRIORITY	5		/* TCP ECHO クライアント受信タスクの優先度		*/
+#define TCP_ECHO_CLI_SND_MAIN_PRIORITY	5		/* TCP ECHO クライアント送信タスクの優先度		*/
 
 /*
- *  TCP éåä¿¡ã¦ã¤ã³ããããã¡ãµã¤ãº
+ *  TCP 送受信ウインドバッファサイズ
  */
 
@@ -95,5 +80,5 @@
 
 /*
- *  ãããã¡ãµã¤ãºã®å®ç¾©
+ *  バッファサイズの定義
  */
 
@@ -106,5 +91,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -113,15 +98,15 @@
 extern ER_UINT	tcp_echo_cli_nblk_error;
 
-/* TCP éåä¿¡ãããã¡ */
+/* TCP 送受信バッファ */
 
 extern uint8_t tcp_echo_cli_swbuf[];
 extern uint8_t tcp_echo_cli_rwbuf[];
 
-/* ã¿ã¹ã¯*/
+/* タスク*/
 
 extern void	tcp_echo_cli_rcv_task(intptr_t exinf);
 extern void	tcp_echo_cli_snd_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_nblk_tcp_echo_cli (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli_rcv.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli_rcv.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli_rcv.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ãåä¿¡ã¿ã¹ã¯
+ *  TCP ECHO クライアント受信タスク
  */
 
@@ -77,14 +65,14 @@
 #ifdef USE_TCP_ECHO_CLI
 
-/* è¡¨ç¤º */
+/* 表示 */
 
 //#define SHOW_TIME_OUT
 //#define SHOW_RCV_RANGE
 
-/* ã¿ã¤ã ã¢ã¦ã */
+/* タイムアウト */
 
 #ifdef TOPPERS_S810_CLG3_85
 
-#define CLS_TMO		TMO_FEVR					/* Close Wait ã¯æ¨æºã§ 60ç§ */
+#define CLS_TMO		TMO_FEVR					/* Close Wait は標準で 60秒 */
 //#define RCV_TMO		TMO_FEVR
 #define RCV_TMO		(30*SYSTIM_HZ)
@@ -92,5 +80,5 @@
 #else	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-//#define CLS_TMO		TMO_FEVR				/* Close Wait ã¯æ¨æºã§ 60ç§ */
+//#define CLS_TMO		TMO_FEVR				/* Close Wait は標準で 60秒 */
 #define CLS_TMO		(70*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*10)
 //#define RCV_TMO		TMO_FEVR
@@ -100,5 +88,5 @@
 
 /*
- *  API IPãã­ãã³ã«ã®æå®
+ *  API IPプロトコルの指定
  */
 
@@ -116,5 +104,5 @@
 
 /*
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ãåä¿¡ã¿ã¹ã¯
+ *  TCP ECHO クライアント受信タスク
  */
 
@@ -166,6 +154,5 @@
 					}
 
-				/* åä¿¡ãããã¡ã®ç²å¾ãå®äºããã¾ã§å¾
-ã¤ã*/
+				/* 受信バッファの獲得が完了するまで待つ。*/
 				syscall(wai_sem(SEM_TCP_ECHO_CLI_NBLK_READY));
 				if (tcp_echo_cli_nblk_error < 0)
@@ -196,6 +183,5 @@
 				syslog(LOG_NOTICE, "[TEC%c:%02u CLS] error: %s", apip, cepid, itron_strerror(error));
 
-			/* åæ­ãå®äºããã¾ã§å¾
-ã¤ã*/
+			/* 切断が完了するまで待つ。*/
 			syscall(wai_sem(SEM_TCP_ECHO_CLI_NBLK_READY));
 
@@ -248,6 +234,5 @@
 					}
 
-				/* åä¿¡ãå®äºããã¾ã§å¾
-ã¤ã*/
+				/* 受信が完了するまで待つ。*/
 				syscall(wai_sem(SEM_TCP_ECHO_CLI_NBLK_READY));
 				if (tcp_echo_cli_nblk_error < 0)
@@ -274,6 +259,5 @@
 				syslog(LOG_NOTICE, "[TEC%c:%02u CLS] error: %s", apip, cepid, itron_strerror(error));
 
-			/* åæ­ãå®äºããã¾ã§å¾
-ã¤ã*/
+			/* 切断が完了するまで待つ。*/
 			syscall(wai_sem(SEM_TCP_ECHO_CLI_NBLK_READY));
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli_snd.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli_snd.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_cli_snd.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡é¢æ°
+ *  TCP ECHO クライアント送信関数
  */
 
@@ -75,10 +63,10 @@
 #ifdef USE_TCP_ECHO_CLI
 
-/* è¡¨ç¤º */
+/* 表示 */
 
 //#define SHOW_TIME_OUT
 //#define SHOW_SND_COUNT
 
-/* ã¿ã¤ã ã¢ã¦ã */
+/* タイムアウト */
 
 #ifdef TOPPERS_S810_CLG3_85
@@ -101,5 +89,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -123,5 +111,5 @@
 
 /*
- *  tcp4_active_open -- è½åãªã¼ãã³ãå®è¡ããã
+ *  tcp4_active_open -- 能動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	ON
@@ -142,6 +130,5 @@
 		}
 
-	/* æ¥ç¶ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 接続が完了するまで待つ。*/
 	syscall(wai_sem(SEM_TCP_ECHO_CLI_NBLK_READY));
 
@@ -160,5 +147,5 @@
 
 /*
- *  tcp_active_open -- è½åãªã¼ãã³ãå®è¡ããã
+ *  tcp_active_open -- 能動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	ON
@@ -184,6 +171,5 @@
 		}
 
-	/* æ¥ç¶ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 接続が完了するまで待つ。*/
 	syscall(wai_sem(SEM_TCP_ECHO_CLI_NBLK_READY));
 
@@ -202,5 +188,5 @@
 
 /*
- *  tcp_echo_cli_snd -- ECHO/TCP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  tcp_echo_cli_snd -- ECHO/TCP サーバにメッセージを送信する。
  *
  *    USE_TCP_NON_BLOCKING	ON
@@ -298,6 +284,5 @@
 		syslog(LOG_NOTICE, "[TEC%c:%02u SHT] error: %s", apip, cepid, itron_strerror(error));
 
-	/* åä¿¡ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 受信が完了するまで待つ。*/
 	syscall(slp_tsk());
 
@@ -310,5 +295,5 @@
 
 /*
- *  tcp4_active_open -- è½åãªã¼ãã³ãå®è¡ããã
+ *  tcp4_active_open -- 能動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -348,5 +333,5 @@
 
 /*
- *  tcp_active_open -- è½åãªã¼ãã³ãå®è¡ããã
+ *  tcp_active_open -- 能動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -387,5 +372,5 @@
 
 /*
- *  tcp_echo_cli_snd -- ECHO/TCP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  tcp_echo_cli_snd -- ECHO/TCP サーバにメッセージを送信する。
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -488,6 +473,5 @@
 		syslog(LOG_NOTICE, "[TEC%c:%02u SHT] error: %s", apip, cepid, itron_strerror(error));
 
-	/* åä¿¡ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 受信が完了するまで待つ。*/
 	syscall(slp_tsk());
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /* 
- *  TCP ECHO ãµã¼ã #1
- *
- *    ã»éåä¿¡ã¿ã¹ã¯åä¸å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»çã³ãã¼ API
- *    ã»IPv4/IPv6
- *    ã»ç·æ¥ãã¼ã¿ã®åä¿¡
+ *  TCP ECHO サーバ #1
+ *
+ *    ・送受信タスク同一型
+ *    ・ノンブロッキングコール
+ *    ・省コピー API
+ *    ・IPv4/IPv6
+ *    ・緊急データの受信
  */
 
@@ -89,5 +77,5 @@
 
 /*
- *  è¡¨ç¤º
+ *  表示
  */
 
@@ -95,5 +83,5 @@
 
 /*
- *  ã³ãã¯ã·ã§ã³åæ­æ¹æ³ã®æå®
+ *  コネクション切断方法の指定
  */
 
@@ -101,10 +89,10 @@
 
 /*
- *  ã¿ã¤ã ã¢ã¦ã
+ *  タイムアウト
  */
 
 #ifdef TOPPERS_S810_CLG3_85
 
-#define CLS_TMO		TMO_FEVR		/* Close Wait ã¯æ¨æºã§ 60ç§ */
+#define CLS_TMO		TMO_FEVR		/* Close Wait は標準で 60秒 */
 //#define RCV_TMO		TMO_FEVR
 #define RCV_TMO		(30*SYSTIM_HZ)
@@ -114,5 +102,5 @@
 #else	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-//#define CLS_TMO		TMO_FEVR	/* Close Wait ã¯æ¨æºã§ 60ç§ */
+//#define CLS_TMO		TMO_FEVR	/* Close Wait は標準で 60秒 */
 #define CLS_TMO		(70*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*10)
 //#define RCV_TMO		TMO_FEVR
@@ -124,9 +112,8 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+ *  全域変数
+ */
+
+/* TCP 送受信ウィンドバッファ */
 
 #ifndef TCP_CFG_SWBUF_CSAVE
@@ -141,5 +128,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -189,5 +176,5 @@
 
 /*
- *  tcp_passive_open -- ååãªã¼ãã³ãå®è¡ããã
+ *  tcp_passive_open -- 受動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -209,5 +196,5 @@
 #if TNUM_TCP6_REPID > 0
 
-		/* åä»å£ã¯ IPv6 */
+		/* 受付口は IPv6 */
 		if ((error = tcp6_acp_cep(info->cepid, info->repid, &info->dst, TMO_FEVR)) != E_OK)
 			return error;
@@ -225,5 +212,5 @@
 #if TNUM_TCP4_REPID > 0
 
-		/* åä»å£ã¯ IPv4 */
+		/* 受付口は IPv4 */
 		if ((error = tcp_acp_cep(info->cepid, info->repid, &dst4, TMO_FEVR)) != E_OK)
 			return error;
@@ -246,5 +233,5 @@
 
 /*
- *  tcp_passive_open -- ååãªã¼ãã³ãå®è¡ããã
+ *  tcp_passive_open -- 受動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -272,5 +259,5 @@
 
 /*
- *  tcp_echo_srv -- TCP ã¨ã³ã¼ãµã¼ã
+ *  tcp_echo_srv -- TCP エコーサーバ
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -409,5 +396,5 @@
 
 /*
- *  tcp_echo_srv -- TCP ã¨ã³ã¼ãµã¼ã
+ *  tcp_echo_srv -- TCP エコーサーバ
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -520,5 +507,5 @@
 
 /*
- *  tcp_echo_srv_task -- TCP ã¨ã³ã¼ãµã¼ãã¿ã¹ã¯
+ *  tcp_echo_srv_task -- TCP エコーサーバタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  TCP ECHO ãµã¼ã #1ãéåä¿¡ã¿ã¹ã¯åä¸å
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバ #1、送受信タスク同一型
+ *  コンフィギュレーションファイル
  */
 
 #ifdef USE_TCP_ECHO_SRV1
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(TCP_ECHO_SRV_TASK1,  {
@@ -153,5 +141,5 @@
 #endif	/* of #if NUM_TCP_ECHO_SRV_TASKS >= 8 */
 
-/* ã»ããã© */
+/* セマフォ */
 
 #ifdef USE_TCP_NON_BLOCKING
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,25 +38,23 @@
 
 /* 
- *  TCP ECHO ãµã¼ã #1
+ *  TCP ECHO サーバ #1
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åä¸å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»çã³ãã¼ API
- *    ã»IPv4/IPv6
- *    ã»ç·æ¥ãã¼ã¿ã®åä¿¡
+ *    ・送受信タスク同一型
+ *    ・ノンブロッキングコール
+ *    ・省コピー API
+ *    ・IPv4/IPv6
+ *    ・緊急データの受信
  */
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define TCP_ECHO_SRV_STACK_SIZE		1024		/* TCP ECHO ãµã¼ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº		*/
+#define TCP_ECHO_SRV_STACK_SIZE		1024		/* TCP ECHO サーバタスクのスタックサイズ		*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define TCP_ECHO_SRV_MAIN_PRIORITY	5		/* TCP ECHO ãµã¼ãã¿ã¹ã¯ã®åªå
-åº¦			*/
+#define TCP_ECHO_SRV_MAIN_PRIORITY	5		/* TCP ECHO サーバタスクの優先度			*/
 
 /*
- *  TCP éåä¿¡ã¦ã¤ã³ããããã¡ãµã¤ãº
+ *  TCP 送受信ウインドバッファサイズ
  */
 
@@ -95,5 +81,5 @@
 
 /*
- *  ã¿ã¹ã¯æ°
+ *  タスク数
  */
 
@@ -102,5 +88,5 @@
 #endif
 
-/* IPv4 ç¨ã® TCP ã¨ã³ã¼ãµã¼ãã¿ã¹ã¯ã¯ 1åã«å¶éããã*/
+/* IPv4 用の TCP エコーサーバタスクは 1個に制限する。*/
 
 #ifdef  NUM_TCP4_ECHO_SRV_TASKS
@@ -110,8 +96,8 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+/* TCP 送受信ウィンドバッファ */
 
 extern uint8_t tcp_echo_srv_swbuf[NUM_TCP_ECHO_SRV_TASKS][TCP_ECHO_SRV_SWBUF_SIZE];
@@ -119,5 +105,5 @@
 
 /*
- *  ã¿ã¹ã¯
+ *  タスク
  */
 
@@ -125,5 +111,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_ext.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_ext.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_ext.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /* 
- *  TCP ECHO ãµã¼ã #1
+ *  TCP ECHO サーバ #1
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åä¸å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»çã³ãã¼ API
- *    ã»IPv4/IPv6
- *    ã»ç·æ¥ãã¼ã¿ã®åä¿¡
+ *    ・送受信タスク同一型
+ *    ・ノンブロッキングコール
+ *    ・省コピー API
+ *    ・IPv4/IPv6
+ *    ・緊急データの受信
  */
 
@@ -85,5 +73,5 @@
 
 /*
- *  è¡¨ç¤º
+ *  表示
  */
 
@@ -91,5 +79,5 @@
 
 /*
- *  ã³ãã¯ã·ã§ã³åæ­æ¹æ³ã®æå®
+ *  コネクション切断方法の指定
  */
 
@@ -97,10 +85,10 @@
 
 /*
- *  ã¿ã¤ã ã¢ã¦ã
+ *  タイムアウト
  */
 
 #ifdef TOPPERS_S810_CLG3_85
 
-#define CLS_TMO		TMO_FEVR		/* Close Wait ã¯æ¨æºã§ 60ç§ */
+#define CLS_TMO		TMO_FEVR		/* Close Wait は標準で 60秒 */
 //#define RCV_TMO		TMO_FEVR
 #define RCV_TMO		(30*SYSTIM_HZ)
@@ -110,5 +98,5 @@
 #else	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-//#define CLS_TMO		TMO_FEVR	/* Close Wait ã¯æ¨æºã§ 60ç§ */
+//#define CLS_TMO		TMO_FEVR	/* Close Wait は標準で 60秒 */
 #define CLS_TMO		(70*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*10)
 //#define RCV_TMO		TMO_FEVR
@@ -122,12 +110,11 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
 typedef struct t_tcp_echo_srv_task_info {
-	ID	taskid;		/* ã¿ã¹ã¯ ID		*/
-	bool_t	active;		/* åä½ç¶æ
-		*/
-	char	apip;		/* API IPãã­ãã³ã«	*/
+	ID	taskid;		/* タスク ID		*/
+	bool_t	active;		/* 動作状態		*/
+	char	apip;		/* API IPプロトコル	*/
 	} T_TCP_ECHO_SRV_TASK_INFO;
 
@@ -161,5 +148,5 @@
 
 /*
- *  get_tcp_rep -- TCP åä»å£ãç²å¾ããã
+ *  get_tcp_rep -- TCP 受付口を獲得する。
  */
 
@@ -219,5 +206,5 @@
 
 /*
- *  get_tcp_cep -- TCP éä¿¡ç«¯ç¹ãç²å¾ããã
+ *  get_tcp_cep -- TCP 通信端点を獲得する。
  */
 
@@ -266,5 +253,5 @@
 
 /*
- *  wakeup_tcp_echo_srv -- TCP ã¨ã³ã¼ãµã¼ãã¿ã¹ã¯ã®ä¼æ­¢è§£é¤
+ *  wakeup_tcp_echo_srv -- TCP エコーサーバタスクの休止解除
  */
 
@@ -288,5 +275,5 @@
 
 /*
- *  tcp_echo_srv_task -- TCP ã¨ã³ã¼ãµã¼ãã¿ã¹ã¯
+ *  tcp_echo_srv_task -- TCP エコーサーバタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_nblk.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_nblk.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_nblk.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /* 
- *  TCP ECHO ãµã¼ã #1
+ *  TCP ECHO サーバ #1
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åä¸å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»çã³ãã¼ API
- *    ã»IPv4/IPv6
- *    ã»ç·æ¥ãã¼ã¿ã®åä¿¡
+ *    ・送受信タスク同一型
+ *    ・ノンブロッキングコール
+ *    ・省コピー API
+ *    ・IPv4/IPv6
+ *    ・緊急データの受信
  */
 
@@ -85,5 +73,5 @@
 
 /*
- *  è¡¨ç¤º
+ *  表示
  */
 
@@ -91,5 +79,5 @@
 
 /*
- *  ã³ãã¯ã·ã§ã³åæ­æ¹æ³ã®æå®
+ *  コネクション切断方法の指定
  */
 
@@ -97,10 +85,10 @@
 
 /*
- *  ã¿ã¤ã ã¢ã¦ã
+ *  タイムアウト
  */
 
 #ifdef TOPPERS_S810_CLG3_85
 
-#define CLS_TMO		TMO_FEVR		/* Close Wait ã¯æ¨æºã§ 60ç§ */
+#define CLS_TMO		TMO_FEVR		/* Close Wait は標準で 60秒 */
 //#define RCV_TMO		TMO_FEVR
 #define RCV_TMO		(30*SYSTIM_HZ)
@@ -110,5 +98,5 @@
 #else	/* of #ifdef TOPPERS_S810_CLG3_85 */
 
-//#define CLS_TMO		TMO_FEVR	/* Close Wait ã¯æ¨æºã§ 60ç§ */
+//#define CLS_TMO		TMO_FEVR	/* Close Wait は標準で 60秒 */
 #define CLS_TMO		(70*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*10)
 //#define RCV_TMO		TMO_FEVR
@@ -122,5 +110,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -196,6 +184,5 @@
 
 /*
- *  find_srv_info -- æ¥ç¶ç¸æã®æ
-å ±æ§é ä½ãæ¢ç´¢ããã
+ *  find_srv_info -- 接続相手の情報構造体を探索する。
  */
 
@@ -212,5 +199,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -290,5 +277,5 @@
 
 /*
- *  tcp_passive_open -- ååãªã¼ãã³ãå®è¡ããã
+ *  tcp_passive_open -- 受動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	ON
@@ -304,10 +291,9 @@
 
 	if (apip == API_PROTO_IPV6) {
-		/* åä»å£ã¯ IPv6 */
+		/* 受付口は IPv6 */
 		if ((error = tcp6_acp_cep(info->cepid, info->repid, &info->dst, TMO_NBLK)) != E_WBLK)
 			return error;
 
-		/* ç¸æããæ¥ç¶ãããã¾ã§å¾
-ã¤ã*/
+		/* 相手から接続されるまで待つ。*/
 		syscall(wai_sem(info->semid));
 
@@ -322,10 +308,9 @@
 		}
 	else {
-		/* åä»å£ã¯ IPv4 */
+		/* 受付口は IPv4 */
 		if ((error = tcp_acp_cep(info->cepid, info->repid, &dst4, TMO_NBLK)) != E_WBLK)
 			return error;
 
-		/* ç¸æããæ¥ç¶ãããã¾ã§å¾
-ã¤ã*/
+		/* 相手から接続されるまで待つ。*/
 		syscall(wai_sem(info->semid));
 
@@ -356,6 +341,5 @@
 		return error;
 
-	/* ç¸æããæ¥ç¶ãããã¾ã§å¾
-ã¤ã*/
+	/* 相手から接続されるまで待つ。*/
 	syscall(wai_sem(info->semid));
 
@@ -376,5 +360,5 @@
 
 /*
- *  tcp_echo_srv -- TCP ã¨ã³ã¼ãµã¼ã
+ *  tcp_echo_srv -- TCP エコーサーバ
  *
  *    USE_TCP_NON_BLOCKING	ON
@@ -431,19 +415,18 @@
 			}
 
-		/* åä¿¡ããã¾ã§å¾
-ã¤ã*/
+		/* 受信するまで待つ。*/
 		syscall(wai_sem(tcp_echo_srv_info[six].semid));
 
-		if (tcp_echo_srv_info[six].rlen < 0) {	/* ã¨ã©ã¼ */
+		if (tcp_echo_srv_info[six].rlen < 0) {	/* エラー */
 			syslog(LOG_NOTICE, "[TES%c:%02u RCV] error: %s", 
 	                                   apip, tcp_echo_srv_info[six].cepid, itron_strerror(tcp_echo_srv_info[six].rlen));
 			break;
 			}
-		else if (tcp_echo_srv_info[six].rlen == 0)	/* åä¿¡çµäº */
+		else if (tcp_echo_srv_info[six].rlen == 0)	/* 受信終了 */
 			break;
 
 		rblen = tcp_echo_srv_info[six].rlen;
 
-		/* ãããã¡ã®æ®ãã«ãããåä¿¡é·ãèª¿æ´ããã*/
+		/* バッファの残りにより、受信長を調整する。*/
 		if (rblen > BUF_SIZE - rlen)
 			rblen = BUF_SIZE - rlen;
@@ -478,6 +461,5 @@
 				}
 
-			/* éä¿¡ãããã¡ã®ç²å¾ãå®äºããã¾ã§å¾
-ã¤ã*/
+			/* 送信バッファの獲得が完了するまで待つ。*/
 			syscall(wai_sem(tcp_echo_srv_info[six].semid));
 
@@ -519,6 +501,5 @@
 	                           apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
 
-	/* éæ¾ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 開放が完了するまで待つ。*/
 	syscall(wai_sem(tcp_echo_srv_info[six].semid));
 
@@ -533,5 +514,5 @@
 
 /*
- *  tcp_echo_srv -- TCP ã¨ã³ã¼ãµã¼ã
+ *  tcp_echo_srv -- TCP エコーサーバ
  *
  *    USE_TCP_NON_BLOCKING	ON
@@ -574,6 +555,5 @@
 			}
 
-		/* åä¿¡å®äºã¾ã§å¾
-ã¤ã*/
+		/* 受信完了まで待つ。*/
 		syscall(wai_sem(tcp_echo_srv_info[six].semid));
 
@@ -606,6 +586,5 @@
 				}
 
-			/* éä¿¡å®äºã¾ã§å¾
-ã¤ã*/
+			/* 送信完了まで待つ。*/
 			syscall(wai_sem(tcp_echo_srv_info[six].semid));
 
@@ -639,6 +618,5 @@
 	                           apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
 
-	/* éæ¾ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* 開放が完了するまで待つ。*/
 	syscall(wai_sem(tcp_echo_srv_info[six].semid));
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,9 +38,9 @@
 
 /*
- *  æ³¨æ:
+ *  注意:
  *
- *    BUF_SIZE ã¯ TCP ã®
- *    éä¿¡ã¦ã¤ã³ãã¦ãããã¡ãµã¤ãº + åä¿¡ã¦ã¤ã³ãã¦ãããã¡ãµã¤ãºã® 
- *    3/2 åä»¥ä¸ã®å¤§ããããªããã°ããããã­ãã¯ããå¯è½æ§ãããã
+ *    BUF_SIZE は TCP の
+ *    送信ウインドウバッファサイズ + 受信ウインドウバッファサイズの 
+ *    3/2 倍以上の大きさがなければ、デッドロックする可能性がある。
  */
 
@@ -61,21 +49,19 @@
 
 /*
- *  ãµã¼ãæ
-å ±æ§é ä½
+ *  サーバ情報構造体
  */
 
 typedef struct t_tcp_echo_srv_info {
-	ID	cepid;		/* éä¿¡ç«¯ç¹ ID		*/
-	ID	repid;		/* åä»å£   ID		*/
+	ID	cepid;		/* 通信端点 ID		*/
+	ID	repid;		/* 受付口   ID		*/
 
 #ifdef USE_TCP_NON_BLOCKING
-	ID	semid;		/* NBLK ç¨ ã»ããã©ID	*/
-	ER	error;		/* NBLK ç¨ error	*/
-	ER_UINT	slen;		/* NBLK ç¨ éä¿¡ãã¼ã¿æ°	*/
-	ER_UINT	rlen;		/* NBLK ç¨ åä¿¡ãã¼ã¿æ°	*/
+	ID	semid;		/* NBLK 用 セマフォID	*/
+	ER	error;		/* NBLK 用 error	*/
+	ER_UINT	slen;		/* NBLK 用 送信データ数	*/
+	ER_UINT	rlen;		/* NBLK 用 受信データ数	*/
 #endif
 
-	T_IPEP	dst;		/* æ¥ç¶ç¸æã¢ãã¬ã¹æ
-å ±	*/
+	T_IPEP	dst;		/* 接続相手アドレス情報	*/
 
 #ifdef USE_TCP_NON_BLOCKING
@@ -96,5 +82,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -102,5 +88,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,9 +33,9 @@
 
 /* 
- *  TCP ECHO ãµã¼ã #2
+ *  TCP ECHO サーバ #2
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åé¢å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»IPv4/IPv6
+ *    ・送受信タスク分離型
+ *    ・ノンブロッキングコール
+ *    ・IPv4/IPv6
  */
 
@@ -91,5 +79,5 @@
 
 /*
- *  è¡¨ç¤º
+ *  表示
  */
 
@@ -97,5 +85,5 @@
 
 /*
- *  ã³ãã¯ã·ã§ã³åæ­æ¹æ³ã®æå®
+ *  コネクション切断方法の指定
  */
 
@@ -103,9 +91,8 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+ *  全域変数
+ */
+
+/* TCP 送受信ウィンドバッファ */
 
 #ifndef TCP_CFG_SWBUF_CSAVE
@@ -118,13 +105,13 @@
 
 /*
- *  å¤æ°
- */
-
-/*
- *  æ³¨æ:
+ *  変数
+ */
+
+/*
+ *  注意:
  *
- *    BUF_SIZE ã¯ TCP ã®
- *    éä¿¡ã¦ã¤ã³ãã¦ãããã¡ãµã¤ãº + åä¿¡ã¦ã¤ã³ãã¦ãããã¡ãµã¤ãºã® 
- *    3/2 åä»¥ä¸ã®å¤§ããããªããã°ããããã­ãã¯ããå¯è½æ§ãããã
+ *    BUF_SIZE は TCP の
+ *    送信ウインドウバッファサイズ + 受信ウインドウバッファサイズの 
+ *    3/2 倍以上の大きさがなければ、デッドロックする可能性がある。
  */
 
@@ -132,24 +119,23 @@
                           TCP_ECHO_SRV_RWBUF_SIZE) * 3 / 2)
 
-static char	buffer[BUF_SIZE];	/* ãããã¡		*/
-
-static T_IPEP	dst;			/* æ¥ç¶ç¸æ		*/
-static bool_t	ena_rcv;		/* åä¿¡å¯è½ãã©ã°	*/
-static char	*rptr = buffer;		/* åä¿¡ãã¤ã³ã¿		*/
-static char	*sptr = buffer;		/* éä¿¡ãã¤ã³ã¿		*/
-static uint32_t	rcv_total;		/* åä¿¡æå­æ°		*/
-static uint32_t	snd_total;		/* éä¿¡æå­æ°		*/
-static uint16_t	chars;			/* ãããã¡å
-ã®æå­æ°	*/
-static uint16_t	rcv_count;		/* åä¿¡åæ°		*/
-static uint16_t	snd_count;		/* éä¿¡åæ°		*/
+static char	buffer[BUF_SIZE];	/* バッファ		*/
+
+static T_IPEP	dst;			/* 接続相手		*/
+static bool_t	ena_rcv;		/* 受信可能フラグ	*/
+static char	*rptr = buffer;		/* 受信ポインタ		*/
+static char	*sptr = buffer;		/* 送信ポインタ		*/
+static uint32_t	rcv_total;		/* 受信文字数		*/
+static uint32_t	snd_total;		/* 送信文字数		*/
+static uint16_t	chars;			/* バッファ内の文字数	*/
+static uint16_t	rcv_count;		/* 受信回数		*/
+static uint16_t	snd_count;		/* 送信回数		*/
 
 #ifdef USE_TCP_NON_BLOCKING
 
-static ER	rcv_error = E_OK;	/* åä¿¡ããã³ãã­ãã­ã³ã°ã³ã¼ã«ã¨ã©ã¼ */
-static ER	snd_error = 1;		/* éä¿¡ããã³ãã­ãã­ã³ã°ã³ã¼ã«ã¨ã©ã¼ */
-
-/*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+static ER	rcv_error = E_OK;	/* 受信、ノンブロッキングコールエラー */
+static ER	snd_error = 1;		/* 送信、ノンブロッキングコールエラー */
+
+/*
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -197,5 +183,5 @@
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-			/* éä¿¡ãã¤ã³ã¿ãé²ããã*/
+			/* 送信ポインタを進める。*/
 			if (sptr - buffer + slen >= sizeof(buffer))
 				sptr -= sizeof(buffer) - slen;
@@ -203,16 +189,13 @@
 				sptr += slen;
 
-			/* ãããã¡å
-ã®æå­æ°ãæ¸ããã*/
+			/* バッファ内の文字数を減らす。*/
 			last   = chars;
 			chars -= slen;
 
- 			/* ãããã¡å
-ã«æå­ãããã°ãéä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 			/* バッファ内に文字があれば、送信タスクを起床する。*/
 			if (chars > 0 || (!ena_rcv && chars == 0))
 				sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
 
- 			/* åä¿¡å¯è½ã§ããããã¡å
-ã«ç©ºããã§ããã°ãåä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 			/* 受信可能で、バッファ内に空きができれば、受信タスクを起床する。*/
 			if (ena_rcv && last == sizeof(buffer) && sizeof(buffer) - chars > 0)
 				syscall(sig_sem(SEM_TCP_ECHO_SRV_RCV_READY));
@@ -240,5 +223,5 @@
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-			/* åä¿¡ãã¤ã³ã¿ãé²ããã*/
+			/* 受信ポインタを進める。*/
 			if (rptr - buffer + rlen >= sizeof(buffer))
 				rptr -= sizeof(buffer) - rlen;
@@ -246,17 +229,13 @@
 				rptr += rlen;
 
-			/* ãããã¡å
-ã®æå­æ°ãå¢ããã*/
+			/* バッファ内の文字数を増やす。*/
 			last   = chars;
 			chars += rlen;
 
- 			/* ãããã¡å
-ã«æå­ãå
-¥ãã°ãéä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 			/* バッファ内に文字が入れば、送信タスクを起床する。*/
 			if (last == 0 && chars > 0)
 				sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
 
- 			/* ãããã¡å
-ã«ç©ºããããã°ãåä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 			/* バッファ内に空きがあれば、受信タスクを起床する。*/
 			if (sizeof(buffer) - chars > 0)
 				sig_sem(SEM_TCP_ECHO_SRV_RCV_READY);
@@ -293,5 +272,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãåä¿¡ã«ã¼ãã³ (ãã³ãã­ãã­ã³ã°ã³ã¼ã«ä½¿ç¨)
+ *  TCP ECHO サーバ受信ルーチン (ノンブロッキングコール使用)
  */
 
@@ -312,11 +291,8 @@
 		}
 
-	/* ã³ãã¯ã·ã§ã³éè¨­å®äºã¾ã§å¾
-ã¤ã*/
+	/* コネクション開設完了まで待つ。*/
 	syscall(wai_sem(SEM_TCP_ECHO_SRV_RCV_READY));
 
-	/* å¾
-ã£ã¦ããéã«ã¨ã©ã¼ã«ãªã£ãããã³ãã¯ã·ã§ã³ã®éè¨­å¾
-ã¡ã«æ»ãã*/
+	/* 待っている間にエラーになったら、コネクションの開設待ちに戻る。*/
 	if (rcv_error != E_OK)
 		return rcv_error;
@@ -331,5 +307,5 @@
 	while (true) {
 
-		/* åä¿¡ãµã¤ãºãè¨ç®ããã*/
+		/* 受信サイズを計算する。*/
 		syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 		if (sptr > rptr)
@@ -339,5 +315,5 @@
 		syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-		/* åä¿¡ããã*/
+		/* 受信する。*/
 		if ((error = tcp_rcv_dat(cepid, rptr, blen, TMO_NBLK)) != E_WBLK) {
 			syslog(LOG_NOTICE, "[TES:%02u RCV] recv error = %s", cepid, itron_strerror(error));
@@ -345,10 +321,8 @@
 			}
 
-		/* åä¿¡ãããã¡ã«ç©ºãã§ããã¾ã§å¾
-ã¤ã*/
+		/* 受信バッファに空ができるまで待つ。*/
 		syscall(wai_sem(SEM_TCP_ECHO_SRV_RCV_READY));
 
-		/* å¾
-ã£ã¦ããéã«ãåä¿¡æå­æ°ã 0 ã«ãªãããã¨ã©ã¼ã«ãªã£ããçµäºããã*/
+		/* 待っている間に、受信文字数が 0 になるか、エラーになったら終了する。*/
 		if (rcv_error <= 0)
 			break;
@@ -356,15 +330,12 @@
 		}
 
-	/* åä¿¡å®äº */
+	/* 受信完了 */
 	ena_rcv = false;
 
-	/* åä¿¡ãããã¡ã«æå­ãå
-¥ãã®ãå¾
-ã£ã¦ããéä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+	/* 受信バッファに文字が入るのを待っている送信タスクを起床する。*/
 	if (chars == 0)
 		sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
 
-	/* ã³ãã¯ã·ã§ã³åæ­å®äºã¾ã§å¾
-ã¤ã*/
+	/* コネクション切断完了まで待つ。*/
 	syscall(wai_sem(SEM_TCP_ECHO_SRV_CLS_READY));
 
@@ -373,5 +344,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãéä¿¡ã¿ã¹ã¯ (ãã³ãã­ãã­ã³ã°ã³ã¼ã«ä½¿ç¨)
+ *  TCP ECHO サーバ送信タスク (ノンブロッキングコール使用)
  */
 
@@ -394,19 +365,16 @@
 		while (true) {
 
-			/* ãããã¡ã«æå­ãå
-¥ãã¾ã§å¾
-ã¤ã*/
+			/* バッファに文字が入るまで待つ。*/
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_SND_READY));
 
-			/* å¾
-ã£ã¦ããéã«ã¨ã©ã¼ã«ãªã£ããçµäºããã*/
+			/* 待っている間にエラーになったら終了する。*/
 			if (snd_error <= 0)
 				break;
 
-			/* åä¿¡å®äºã§ããããã¡ã«æå­ããªããã°çµäºããã*/
+			/* 受信完了で、バッファに文字がなければ終了する。*/
 			if (!ena_rcv && chars == 0)
 				break;
 
-			/* éä¿¡ãµã¤ãºãè¨ç®ããã*/
+			/* 送信サイズを計算する。*/
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 			if (rptr > sptr)
@@ -416,5 +384,5 @@
 			syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-			/* éä¿¡ããã*/
+			/* 送信する。*/
 			if ((error = tcp_snd_dat(cepid, sptr, blen, TMO_NBLK)) != E_WBLK) {
 				syslog(LOG_NOTICE, "[TES:%02u SND] send error = %s", cepid, itron_strerror(error));
@@ -423,6 +391,5 @@
 			}
 
-		/* åä¿¡ãããã¡ã«ç©ºãã§ãããå¾
-ã£ã¦ããåä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+		/* 受信バッファに空ができるを待っている受信タスクを起床する。*/
 		if (chars == sizeof(buffer))
 			sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
@@ -445,5 +412,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãåä¿¡ã«ã¼ãã³
+ *  TCP ECHO サーバ受信ルーチン
  */
 
@@ -482,5 +449,5 @@
 	while (true) {
 
-		/* åä¿¡ãµã¤ãºãè¨ç®ããã*/
+		/* 受信サイズを計算する。*/
 		syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 		if (sptr > rptr)
@@ -490,5 +457,5 @@
 		syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-		/* åä¿¡ããã*/
+		/* 受信する。*/
 		if ((rlen = tcp_rcv_dat(cepid, rptr, blen, TMO_FEVR)) <= 0) {
 			if (rlen < 0)
@@ -508,5 +475,5 @@
 		syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-		/* åä¿¡ãã¤ã³ã¿ãé²ããã*/
+		/* 受信ポインタを進める。*/
 		if (rptr - buffer + rlen >= sizeof(buffer))
 			rptr -= sizeof(buffer) - rlen;
@@ -514,17 +481,13 @@
 			rptr += rlen;
 
-		/* ãããã¡å
-ã®æå­æ°ãå¢ããã*/
+		/* バッファ内の文字数を増やす。*/
 		last   =     chars;
 		chars += (uint16_t)rlen;
 
- 				/* ãããã¡å
-ã«æå­ãå
-¥ãã°ãéä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 				/* バッファ内に文字が入れば、送信タスクを起床する。*/
 		if (last == 0 && chars > 0)
 			sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
 
- 				/* ãããã¡å
-ã«ç©ºããããã°ãåä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 				/* バッファ内に空きがあれば、受信タスクを起床する。*/
 		if (sizeof(buffer) - chars > 0)
 			sig_sem(SEM_TCP_ECHO_SRV_RCV_READY);
@@ -532,20 +495,16 @@
 		syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-		/* ãããã¡ã«ç©ºããã§ããã¾ã§å¾
-ã¤ã*/
+		/* バッファに空きができるまで待つ。*/
 		syscall(wai_sem(SEM_TCP_ECHO_SRV_RCV_READY));
 		}
 
-	/* åä¿¡å®äº */
+	/* 受信完了 */
 	ena_rcv = false;
 
-	/* åä¿¡ãããã¡ã«æå­ãå
-¥ãã®ãå¾
-ã£ã¦ããéä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+	/* 受信バッファに文字が入るのを待っている送信タスクを起床する。*/
 	if (chars == 0)
 		sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
 
-	/* ã³ãã¯ã·ã§ã³ã®åæ­ãå®äºããã¾ã§å¾
-ã¤ã*/
+	/* コネクションの切断が完了するまで待つ。*/
 	syscall(wai_sem(SEM_TCP_ECHO_SRV_CLS_READY));
 
@@ -554,5 +513,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãéä¿¡ã¿ã¹ã¯
+ *  TCP ECHO サーバ送信タスク
  */
 
@@ -578,14 +537,12 @@
 		while (true) {
 
-			/* ãããã¡ã«æå­ãå
-¥ãã¾ã§å¾
-ã¤ã*/
+			/* バッファに文字が入るまで待つ。*/
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_SND_READY));
 
-			/* åä¿¡å®äºã§ããããã¡ã«æå­ããªããã°çµäºããã*/
+			/* 受信完了で、バッファに文字がなければ終了する。*/
 			if (!ena_rcv && chars == 0)
 				break;
 
-			/* éä¿¡ãµã¤ãºãè¨ç®ããã*/
+			/* 送信サイズを計算する。*/
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 			if (rptr > sptr)
@@ -611,5 +568,5 @@
 			syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
 
-			/* éä¿¡ãã¤ã³ã¿ãé²ããã*/
+			/* 送信ポインタを進める。*/
 			if (sptr - buffer + slen >= sizeof(buffer))
 				sptr -= sizeof(buffer) - slen;
@@ -617,10 +574,9 @@
 				sptr += slen;
 
-			/* ãããã¡å
-ã®æå­æ°ãæ¸ããã*/
+			/* バッファ内の文字数を減らす。*/
 			last   =     chars;
 			chars -= (uint16_t)slen;
 
-			/* åä¿¡å®äºã§ããããã¡ã«æå­ããªããã°çµäºããã*/
+			/* 受信完了で、バッファに文字がなければ終了する。*/
 			if (!ena_rcv && chars == 0) {
 				syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
@@ -628,11 +584,9 @@
 				}
 
- 			/* ãããã¡å
-ã«æå­ãããã°ãéä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 			/* バッファ内に文字があれば、送信タスクを起床する。*/
 			if (chars > 0)
 				sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
 
- 			/* åä¿¡å¯è½ã§ããããã¡å
-ã«ç©ºããã§ããã°ãåä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+ 			/* 受信可能で、バッファ内に空きができれば、受信タスクを起床する。*/
 			if (ena_rcv && last == sizeof(buffer) && sizeof(buffer) - chars > 0)
 				sig_sem(SEM_TCP_ECHO_SRV_RCV_READY);
@@ -641,6 +595,5 @@
 			}
 
-		/* åä¿¡ãããã¡ã«ç©ºãã§ãããå¾
-ã£ã¦ããåä¿¡ã¿ã¹ã¯ãèµ·åºããã*/
+		/* 受信バッファに空ができるを待っている受信タスクを起床する。*/
 		if (chars == sizeof(buffer))
 			sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
@@ -670,5 +623,5 @@
 
 /*
- *  get_tcp_rep -- TCP åä»å£ãç²å¾ããã
+ *  get_tcp_rep -- TCP 受付口を獲得する。
  */
 
@@ -696,5 +649,5 @@
 
 /*
- *  get_tcp_cep -- TCP éä¿¡ç«¯ç¹ãç²å¾ããã
+ *  get_tcp_cep -- TCP 通信端点を獲得する。
  */
 
@@ -731,5 +684,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãåä¿¡ã¿ã¹ã¯
+ *  TCP ECHO サーバ受信タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  TCP ECHO ãµã¼ã #2ãéåä¿¡ã¿ã¹ã¯åé¢å
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバ #2、送受信タスク分離型
+ *  コンフィギュレーションファイル
  */
 
 #ifdef USE_TCP_ECHO_SRV2
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 #ifdef USE_TCP_EXTENTIONS
@@ -95,9 +83,9 @@
 #endif	/* of #ifdef USE_TCP_EXTENTIONS */
 
-/* ã³ãã³ãã­ã¥ã¼ */
+/* コマンドキュー */
 
 CRE_DTQ(DTQ_TCP_ECHO_SRV_SND,  { TA_TFIFO, 1, NULL });
 
-/* ã»ããã© */
+/* セマフォ */
 
 CRE_SEM(SEM_TCP_ECHO_SRV_LOCK,		{ TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -50,23 +38,21 @@
 
 /* 
- *  TCP ECHO ãµã¼ã #2
+ *  TCP ECHO サーバ #2
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åé¢å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»IPv4/IPv6
+ *    ・送受信タスク分離型
+ *    ・ノンブロッキングコール
+ *    ・IPv4/IPv6
  */
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define TCP_ECHO_SRV_STACK_SIZE		1024		/* TCP ECHO ãµã¼ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº		*/
+#define TCP_ECHO_SRV_STACK_SIZE		1024		/* TCP ECHO サーバタスクのスタックサイズ		*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define TCP_ECHO_SRV_MAIN_PRIORITY	5		/* TCP ECHO ãµã¼ãã¿ã¹ã¯ã®åªå
-åº¦			*/
+#define TCP_ECHO_SRV_MAIN_PRIORITY	5		/* TCP ECHO サーバタスクの優先度			*/
 
 /*
- *  TCP éåä¿¡ã¦ã¤ã³ããããã¡ãµã¤ãº
+ *  TCP 送受信ウインドバッファサイズ
  */
 
@@ -92,5 +78,5 @@
 #endif	/* of #if defined(USE_TCP_MSS_SEG) || defined(USE_IPV6_MMTU) */
 
-/* ã¿ã¹ã¯æ° */
+/* タスク数 */
 
 #if defined(USE_TCP_ECHO_SRV2)
@@ -102,8 +88,8 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+/* TCP 送受信ウィンドバッファ */
 
 extern uint8_t tcp_echo_srv_swbuf[NUM_TCP_ECHO_SRV_TASKS][TCP_ECHO_SRV_SWBUF_SIZE];
@@ -111,5 +97,5 @@
 
 /*
- *  ã¿ã¹ã¯
+ *  タスク
  */
 
@@ -118,5 +104,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dbg_cons.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dbg_cons.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dbg_cons.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  ãããã°ã³ã³ã½ã¼ã«
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  デバッグコンソール
+ *  TCP/IP コンフィギュレーションファイル
  */
 
@@ -53,5 +41,5 @@
 #ifdef USE_TCP_EXTENTIONS
 
-/* TCP åä»å£ */
+/* TCP 受付口 */
 
 #ifdef SUPPORT_INET6
@@ -79,5 +67,5 @@
 #endif	/* of #ifdef SUPPORT_INET4 */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #ifdef SUPPORT_INET6
@@ -125,5 +113,5 @@
 #ifdef USE_UDP_EXTENTIONS
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dhcp4_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dhcp4_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dhcp4_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  DHCP ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  DHCP クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
 #ifdef DHCP4_CLI_CFG
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 UDP_CRE_CEP (UDP4_DHCP_CLI_CEPID, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dhcp6_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dhcp6_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_dhcp6_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  DHCP/DHCPv6 ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  DHCP/DHCPv6 クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
 #ifdef DHCP6_CLI_CFG
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 UDP6_CRE_CEP (UDP6_DHCP_CLI_CEPID, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_net_cons.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_net_cons.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_net_cons.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,12 +33,11 @@
 
 /*
- *  ãããã¯ã¼ã¯çµç±ã³ã³ã½ã¼ã«å
-¥åºå
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ネットワーク経由コンソール入出力
+ *  TCP/IP コンフィギュレーションファイル
  */
 
 #ifdef USE_NET_CONS
 
-/* TCP åä»å£ */
+/* TCP 受付口 */
 
 #ifdef SUPPORT_INET6
@@ -74,5 +61,5 @@
 #endif	/* of #ifdef SUPPORT_INET6 */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_resolver.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_resolver.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_resolver.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  RESOLVER ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  RESOLVER クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
 #ifdef USE_RESOLVER
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp4_echo_srv1.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp4_echo_srv1.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp4_echo_srv1.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,14 +33,14 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET4
  *    USE_TCP_NON_BLOCKING: OFF
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP éä¿¡ç«¯ç¹ãNUM_TCP_ECHO_SRV_TASKS >= 2 ä»¥é
+ *    TCP 通信端点、NUM_TCP_ECHO_SRV_TASKS >= 2 以降
  * 
  */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #if defined(USE_TCP_ECHO_SRV1)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp4_echo_srv1_nblk.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp4_echo_srv1_nblk.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp4_echo_srv1_nblk.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,14 +33,14 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET4
  *    USE_TCP_NON_BLOCKING: ON
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP éä¿¡ç«¯ç¹ãNUM_TCP_ECHO_SRV_TASKS >= 2 ä»¥é
+ *    TCP 通信端点、NUM_TCP_ECHO_SRV_TASKS >= 2 以降
  * 
  */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #if defined(USE_TCP_ECHO_SRV1)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp64_echo_srv1.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp64_echo_srv1.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp64_echo_srv1.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET6
@@ -51,6 +39,6 @@
  *    USE_TCP_NON_BLOCKING: OFF
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP åä»å£
- *    TCP éä¿¡ç«¯ç¹ãNUM_TCP_ECHO_SRV_TASKS == 1
+ *    TCP 受付口
+ *    TCP 通信端点、NUM_TCP_ECHO_SRV_TASKS == 1
  * 
  */
@@ -59,5 +47,5 @@
 
 /*
- * TCP åä»å£
+ * TCP 受付口
  */
 
@@ -98,17 +86,17 @@
 
 /*
- * TCP éä¿¡ç«¯ç¹
- *
- * å®ç¾©ãã TCP éä¿¡ç«¯ç¹ï¼TCP?_ECHO_SRV_CEPID1ï¼ã®é¸æ
+ * TCP 通信端点
+ *
+ * 定義する TCP 通信端点（TCP?_ECHO_SRV_CEPID1）の選択
  *
  *   INET6 INET4 USE_TCP4  TCP6_CRE_CEP TCP_CRE_CEP
- *     â    â     â          Ã         TCP4
- *     â    â     Ã          TCP        Ã
- *     â    Ã     â          TCP        Ã
- *     â    Ã     Ã          TCP        Ã
- *     Ã    â     â          Ã         TCP
- *     Ã    â     Ã          Ã         TCP
- *     Ã    Ã     â          Ã         Ã
- *     Ã    Ã     Ã          Ã         Ã
+ *     ○    ○     ○          ×         TCP4
+ *     ○    ○     ×          TCP        ×
+ *     ○    ×     ○          TCP        ×
+ *     ○    ×     ×          TCP        ×
+ *     ×    ○     ○          ×         TCP
+ *     ×    ○     ×          ×         TCP
+ *     ×    ×     ○          ×         ×
+ *     ×    ×     ×          ×         ×
  *
  */
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp64_echo_srv1_nblk.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp64_echo_srv1_nblk.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp64_echo_srv1_nblk.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET6
@@ -51,5 +39,5 @@
  *    USE_TCP_NON_BLOCKING: ON
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP éä¿¡ç«¯ç¹ãNUM_TCP_ECHO_SRV_TASKS == 1
+ *    TCP 通信端点、NUM_TCP_ECHO_SRV_TASKS == 1
  * 
  */
@@ -58,17 +46,17 @@
 
 /*
- * TCP éä¿¡ç«¯ç¹
- *
- * å®ç¾©ãã TCP éä¿¡ç«¯ç¹ï¼TCP?_ECHO_SRV_CEPID1ï¼ã®é¸æ
+ * TCP 通信端点
+ *
+ * 定義する TCP 通信端点（TCP?_ECHO_SRV_CEPID1）の選択
  *
  *   INET6 INET4 USE_TCP4  TCP6_CRE_CEP TCP_CRE_CEP
- *     â    â     â          Ã         TCP4
- *     â    â     Ã          TCP        Ã
- *     â    Ã     â          TCP        Ã
- *     â    Ã     Ã          TCP        Ã
- *     Ã    â     â          Ã         TCP
- *     Ã    â     Ã          Ã         TCP
- *     Ã    Ã     â          Ã         Ã
- *     Ã    Ã     Ã          Ã         Ã
+ *     ○    ○     ○          ×         TCP4
+ *     ○    ○     ×          TCP        ×
+ *     ○    ×     ○          TCP        ×
+ *     ○    ×     ×          TCP        ×
+ *     ×    ○     ○          ×         TCP
+ *     ×    ○     ×          ×         TCP
+ *     ×    ×     ○          ×         ×
+ *     ×    ×     ×          ×         ×
  *
  */
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp6_echo_srv1.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp6_echo_srv1.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp6_echo_srv1.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,14 +33,14 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET6
  *    USE_TCP_NON_BLOCKING: OFF
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP éä¿¡ç«¯ç¹ãNUM_TCP_ECHO_SRV_TASKS >= 2 ä»¥é
+ *    TCP 通信端点、NUM_TCP_ECHO_SRV_TASKS >= 2 以降
  * 
  */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #if defined(USE_TCP_ECHO_SRV1)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp6_echo_srv1_nblk.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp6_echo_srv1_nblk.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp6_echo_srv1_nblk.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,14 +33,14 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET6
  *    USE_TCP_NON_BLOCKING: ON
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP éä¿¡ç«¯ç¹ãNUM_TCP_ECHO_SRV_TASKS >= 2 ä»¥é
+ *    TCP 通信端点、NUM_TCP_ECHO_SRV_TASKS >= 2 以降
  * 
  */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #if defined(USE_TCP_ECHO_SRV1)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_discard_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_discard_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_discard_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  TCP DISCARD ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP DISCARD クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
@@ -53,5 +41,5 @@
 #ifndef USE_TCP_EXTENTIONS
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_discard_srv.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_discard_srv.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_discard_srv.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  TCP DISCARD ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP DISCARD サーバの TCP/IP コンフィギュレーションファイル
  */
 
@@ -52,5 +40,5 @@
 #ifndef USE_TCP_EXTENTIONS
 
-/* TCP åä»å£ */
+/* TCP 受付口 */
 
 #ifdef SUPPORT_INET6
@@ -74,5 +62,5 @@
 #endif	/* of #ifdef SUPPORT_INET6 */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_echo_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_echo_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_echo_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  TCP ECHO ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
@@ -53,5 +41,5 @@
 #ifndef USE_TCP_EXTENTIONS
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_echo_srv2.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_echo_srv2.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_tcp_echo_srv2.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  TCP ECHO ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TCP ECHO サーバの TCP/IP コンフィギュレーションファイル
  */
 
@@ -52,5 +40,5 @@
 #ifndef USE_TCP_EXTENTIONS
 
-/* TCP åä»å£ */
+/* TCP 受付口 */
 
 #if defined(SUPPORT_INET6)
@@ -74,5 +62,5 @@
 #endif	/* of #if defined(SUPPORT_INET6) */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #if defined(SUPPORT_INET6)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp4_echo_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp4_echo_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp4_echo_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  UDP ECHO ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP ECHO クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
@@ -53,5 +41,5 @@
 #if !defined(USE_UDP_EXTENTIONS)
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #if defined(USE_UDP_NON_BLOCKING)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp4_echo_srv.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp4_echo_srv.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp4_echo_srv.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  UDP ECHO ãµã¼ã
- *  UDP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP ECHO サーバ
+ *  UDP/IP コンフィギュレーションファイル
  *
  *    IPv4
@@ -55,5 +43,5 @@
 #ifndef USE_UDP_EXTENTIONS
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #ifdef USE_UDP_NON_BLOCKING
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp6_echo_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp6_echo_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp6_echo_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  UDP ECHO ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP ECHO クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
@@ -53,5 +41,5 @@
 #if !defined(USE_UDP_EXTENTIONS)
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #if defined(USE_UDP_NON_BLOCKING)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp6_echo_srv.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp6_echo_srv.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp6_echo_srv.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  UDP ECHO ãµã¼ã
- *  UDP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP ECHO サーバ
+ *  UDP/IP コンフィギュレーションファイル
  *
  *    IPv6
@@ -55,5 +43,5 @@
 #ifndef USE_UDP_EXTENTIONS
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #ifdef USE_UDP_NON_BLOCKING
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp_discard_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp_discard_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_udp_discard_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,6 +33,6 @@
 
 /*
- *  UDP DISCARD ã¯ã©ã¤ã¢ã³ã
- *  UDP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP DISCARD クライアント
+ *  UDP/IP コンフィギュレーションファイル
  */
 
@@ -53,5 +41,5 @@
 #ifndef USE_UDP_EXTENTIONS
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #ifdef SUPPORT_INET6
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_wwws.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_wwws.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tinet_wwws.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  WWW ãµã¼ãã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  WWW サーバの TCP/IP コンフィギュレーションファイル
  *
  *    SUPPORT_INET6
@@ -51,6 +39,6 @@
  *    USE_TCP_NON_BLOCKING: OFF
  *    USE_TCP_EXTENTIONS:   OFF
- *    TCP åä»å£
- *    TCP éä¿¡ç«¯ç¹
+ *    TCP 受付口
+ *    TCP 通信端点
  * 
  */
@@ -59,5 +47,5 @@
 
 /*
- * TCP åä»å£
+ * TCP 受付口
  */
 
@@ -98,17 +86,17 @@
 
 /*
- * TCP éä¿¡ç«¯ç¹
- *
- * å®ç¾©ãã TCP éä¿¡ç«¯ç¹ï¼WWW?_CEPID1ï¼ã®é¸æ
+ * TCP 通信端点
+ *
+ * 定義する TCP 通信端点（WWW?_CEPID1）の選択
  *
  *   INET6 INET4 USE_TCP4  TCP6_CRE_CEP TCP_CRE_CEP
- *     â    â     â          Ã         WWW4
- *     â    â     Ã          WWW        Ã
- *     â    Ã     â          WWW        Ã
- *     â    Ã     Ã          WWW        Ã
- *     Ã    â     â          Ã         WWW
- *     Ã    â     Ã          Ã         WWW
- *     Ã    Ã     â          Ã         Ã
- *     Ã    Ã     Ã          Ã         Ã
+ *     ○    ○     ○          ×         WWW4
+ *     ○    ○     ×          WWW        ×
+ *     ○    ×     ○          WWW        ×
+ *     ○    ×     ×          WWW        ×
+ *     ×    ○     ○          ×         WWW
+ *     ×    ○     ×          ×         WWW
+ *     ×    ×     ○          ×         ×
+ *     ×    ×     ×          ×         ×
  *
  */
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  UDP4 ECHO ã¯ã©ã¤ã¢ã³ã
+ *  UDP4 ECHO クライアント
  */
 
@@ -76,9 +64,9 @@
 #if defined(USE_UDP4_ECHO_CLI_TSK)
 
-/* echo ãµã¼ãã®ãã¼ãçªå· */
+/* echo サーバのポート番号 */
 
 #define ECHO_SRV_PORTNO		UINT_C(7)
 
-/* éä¿¡éé */
+/* 送信間隔 */
 
 #if defined(TOPPERS_S810_CLG3_85)
@@ -92,5 +80,5 @@
 #endif	/* of #if defined(TOPPERS_S810_CLG3_85) */
 
-/* èªåå®è¡ */
+/* 自動実行 */
 
 #if defined(UDP4_ECHO_CLI_AUTO_RUN_STR)
@@ -102,6 +90,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -109,5 +96,5 @@
 
 /*
- * å¤æ°
+ * 変数
  */
 
@@ -123,5 +110,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -135,5 +122,5 @@
 
 /*
- *  udp4_echo_cli -- ECHO/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ãã (ãã³ãã­ãã­ã³ã°ã³ã¼ã«ä½¿ç¨)ã
+ *  udp4_echo_cli -- ECHO/UDP サーバにメッセージを送信する (ノンブロッキングコール使用)。
  */
 
@@ -162,5 +149,5 @@
 	syscall(slp_tsk());
 	get_tim(&time);
-	if (nblk_len < 0) {	/* 0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+	if (nblk_len < 0) {	/* 0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[UEC4:%02u CBR(NBLK)] error: %7lu,%s",
 		                   cepid, time / SYSTIM_HZ, itron_strerror(nblk_len));
@@ -176,5 +163,5 @@
 	syscall(slp_tsk());
 	get_tim(&time);
-	if (nblk_len < 0) {	/* 0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+	if (nblk_len < 0) {	/* 0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[UEC4:%02u RCV(NBLK)] error: %7lu,%s",
 		                   cepid, time / SYSTIM_HZ, itron_strerror(nblk_len));
@@ -198,5 +185,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -222,5 +209,5 @@
 
 /*
- *  udp4_echo_cli -- ECHO/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ãã (ã³ã¼ã«ããã¯é¢æ°ä½¿ç¨)ã
+ *  udp4_echo_cli -- ECHO/UDP サーバにメッセージを送信する (コールバック関数使用)。
  */
 
@@ -248,5 +235,5 @@
 
 /*
- *  udp4_echo_cli -- ECHO/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ãã (ã³ã¼ã«ããã¯é¢æ°æªä½¿ç¨)ã
+ *  udp4_echo_cli -- ECHO/UDP サーバにメッセージを送信する (コールバック関数未使用)。
  */
 
@@ -291,5 +278,5 @@
 
 /*
- *  getcomd -- ã³ãã³ããå¾ãã
+ *  getcomd -- コマンドを得る。
  */
 
@@ -339,5 +326,5 @@
 
 /*
- *  UDP4 ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯
+ *  UDP4 ECHO クライアント送信タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  ECHO ãµã¼ãè©¦é¨ãã­ã°ã©ã ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ECHO サーバ試験プログラムのシステムコンフィギュレーションファイル
  */
 
 #ifdef USE_UDP4_ECHO_CLI_TSK
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 #ifdef USE_UDP_EXTENTIONS
@@ -76,5 +64,5 @@
 #endif	/* of #ifdef USE_UDP_EXTENTIONS */
 
-/* ã³ãã³ãã­ã¥ã¼ */
+/* コマンドキュー */
 
 CRE_DTQ(DTQ_UDP4_ECHO_CLI,  { TA_TFIFO, 1, NULL });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_cli.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,23 +35,21 @@
 #define _UDP4_ECHO_CLI_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define UDP4_ECHO_CLI_STACK_SIZE	1024		/* UDP ECHO ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv4ï¼ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define UDP4_ECHO_CLI_STACK_SIZE	1024		/* UDP ECHO クライアントタスク（IPv4）のスタックサイズ	*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define UDP4_ECHO_CLI_MAIN_PRIORITY	5		/* UDP ECHO ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv4ï¼ã®åªå
-åº¦		*/
+#define UDP4_ECHO_CLI_MAIN_PRIORITY	5		/* UDP ECHO クライアントタスク（IPv4）の優先度		*/
 
-/* å¤æ° */
+/* 変数 */
 
 extern bool_t	udp4_echo_cli_valid;
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	udp4_echo_cli_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_udp4_echo_cli (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  UDP ECHO ãµã¼ã
+ *  UDP ECHO サーバ
  *
  *    IPv4
@@ -79,5 +67,5 @@
 
 /*
- *  åä¿¡ã¿ã¤ã ã¢ã¦ã
+ *  受信タイムアウト
  */
 
@@ -93,5 +81,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -134,5 +122,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -140,5 +128,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -150,5 +138,5 @@
 	get_tim(&now);
 	nblk_len = *(ER_UINT*)p_parblk;
-	if (nblk_len < 0) {	/* 0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+	if (nblk_len < 0) {	/* 0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[UES4:%02u CBR] error,      %7lu,%s, fncd: %s",
 		                   cepid, now / SYSTIM_HZ, itron_strerror(nblk_len), in_strtfn(fncd));
@@ -165,5 +153,5 @@
 
 /*
- *  UDP ECHO ãµã¼ã
+ *  UDP ECHO サーバ
  */
 
@@ -209,5 +197,5 @@
 
 /*
- *  UDP ECHO ãµã¼ã
+ *  UDP ECHO サーバ
  */
 
@@ -247,5 +235,5 @@
 
 /*
- *  UDP ECHO ãµã¼ãã¿ã¹ã¯
+ *  UDP ECHO サーバタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  UDP ECHO ãµã¼ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP ECHO サーバコンフィギュレーションファイル
  *
  *    IPv4
@@ -53,5 +41,5 @@
 
 /*
- * ã¿ã¹ã¯
+ * タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp4_echo_srv.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,19 +35,17 @@
 #define _UDP4_ECHO_SRV_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define UDP4_ECHO_SRV_STACK_SIZE	1024		/* UDP ECHO ãµã¼ãã¿ã¹ã¯ï¼IPV4ï¼ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define UDP4_ECHO_SRV_STACK_SIZE	1024		/* UDP ECHO サーバタスク（IPV4）のスタックサイズ	*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define UDP4_ECHO_SRV_MAIN_PRIORITY	5		/* UDP ECHO ãµã¼ãã¿ã¹ã¯ï¼IPV4ï¼ã®åªå
-åº¦		*/
+#define UDP4_ECHO_SRV_MAIN_PRIORITY	5		/* UDP ECHO サーバタスク（IPV4）の優先度		*/
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	udp4_echo_srv_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_udp4_echo_srv (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  UDP6 ECHO ã¯ã©ã¤ã¢ã³ã
+ *  UDP6 ECHO クライアント
  */
 
@@ -78,9 +66,9 @@
 #if defined(USE_UDP6_ECHO_CLI_TSK)
 
-/* echo ãµã¼ãã®ãã¼ãçªå· */
+/* echo サーバのポート番号 */
 
 #define ECHO_SRV_PORTNO		UINT_C(7)
 
-/* éä¿¡éé */
+/* 送信間隔 */
 
 #if defined(TOPPERS_S810_CLG3_85)
@@ -94,5 +82,5 @@
 #endif	/* of #if defined(TOPPERS_S810_CLG3_85) */
 
-/* èªåå®è¡ */
+/* 自動実行 */
 
 #if defined(UDP6_ECHO_CLI_AUTO_RUN_STR)
@@ -104,6 +92,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -111,5 +98,5 @@
 
 /*
- * å¤æ°
+ * 変数
  */
 
@@ -125,5 +112,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -137,5 +124,5 @@
 
 /*
- *  udp6_echo_cli -- ECHO/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ãã (ãã³ãã­ãã­ã³ã°ã³ã¼ã«ä½¿ç¨)ã
+ *  udp6_echo_cli -- ECHO/UDP サーバにメッセージを送信する (ノンブロッキングコール使用)。
  */
 
@@ -164,5 +151,5 @@
 	syscall(slp_tsk());
 	get_tim(&time);
-	if (nblk_len < 0) {	/* 0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+	if (nblk_len < 0) {	/* 0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[UEC6:%02u CBR] error: %7lu,%s",
 		                   cepid, time / SYSTIM_HZ, itron_strerror(nblk_len));
@@ -178,5 +165,5 @@
 	syscall(slp_tsk());
 	get_tim(&time);
-	if (nblk_len < 0) {	/* 0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+	if (nblk_len < 0) {	/* 0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[UEC6:%02u RVN] error: %7lu,%s",
 		                   cepid, time / SYSTIM_HZ, itron_strerror(nblk_len));
@@ -200,5 +187,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -224,5 +211,5 @@
 
 /*
- *  udp6_echo_cli -- ECHO/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ãã (ã³ã¼ã«ããã¯é¢æ°ä½¿ç¨)ã
+ *  udp6_echo_cli -- ECHO/UDP サーバにメッセージを送信する (コールバック関数使用)。
  */
 
@@ -250,5 +237,5 @@
 
 /*
- *  udp6_echo_cli -- ECHO/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ãã (ã³ã¼ã«ããã¯é¢æ°æªä½¿ç¨)ã
+ *  udp6_echo_cli -- ECHO/UDP サーバにメッセージを送信する (コールバック関数未使用)。
  */
 
@@ -293,5 +280,5 @@
 
 /*
- *  getcomd -- ã³ãã³ããå¾ãã
+ *  getcomd -- コマンドを得る。
  */
 
@@ -341,5 +328,5 @@
 
 /*
- *  UDP6 ECHO ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯
+ *  UDP6 ECHO クライアント送信タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  ECHO ãµã¼ãè©¦é¨ãã­ã°ã©ã ã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ECHO サーバ試験プログラムのシステムコンフィギュレーションファイル
  */
 
 #ifdef USE_UDP6_ECHO_CLI_TSK
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 #ifdef USE_UDP_EXTENTIONS
@@ -76,5 +64,5 @@
 #endif	/* of #ifdef USE_UDP_EXTENTIONS */
 
-/* ã³ãã³ãã­ã¥ã¼ */
+/* コマンドキュー */
 
 CRE_DTQ(DTQ_UDP6_ECHO_CLI,  { TA_TFIFO, 1, NULL });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_cli.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,23 +35,21 @@
 #define _UDP6_ECHO_CLI_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define UDP6_ECHO_CLI_STACK_SIZE	1024		/* UDP ECHO ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv6ï¼ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define UDP6_ECHO_CLI_STACK_SIZE	1024		/* UDP ECHO クライアントタスク（IPv6）のスタックサイズ	*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define UDP6_ECHO_CLI_MAIN_PRIORITY	5		/* UDP ECHO ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv6ï¼ã®åªå
-åº¦		*/
+#define UDP6_ECHO_CLI_MAIN_PRIORITY	5		/* UDP ECHO クライアントタスク（IPv6）の優先度		*/
 
-/* å¤æ° */
+/* 変数 */
 
 extern bool_t	udp6_echo_cli_valid;
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	udp6_echo_cli_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_udp6_echo_cli (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  UDP ECHO ãµã¼ã
+ *  UDP ECHO サーバ
  *
  *    IPv6
@@ -79,5 +67,5 @@
 
 /*
- *  åä¿¡ã¿ã¤ã ã¢ã¦ã
+ *  受信タイムアウト
  */
 
@@ -93,5 +81,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°
+ *  コールバック関数
  */
 
@@ -134,5 +122,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -140,5 +128,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -150,5 +138,5 @@
 	get_tim(&now);
 	nblk_len = *(ER_UINT*)p_parblk;
-	if (nblk_len < 0) {	/* 0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ã³ã¼ã */
+	if (nblk_len < 0) {	/* 0 以下の場合は、エラーコード */
 		syslog(LOG_NOTICE, "[UES6:%02u CBR] error: %7lu,%s, fncd: %s",
 		                   cepid, now / SYSTIM_HZ, itron_strerror(nblk_len), in_strtfn(fncd));
@@ -165,5 +153,5 @@
 
 /*
- *  UDP ECHO ãµã¼ã
+ *  UDP ECHO サーバ
  */
 
@@ -208,5 +196,5 @@
 
 /*
- *  UDP ECHO ãµã¼ã
+ *  UDP ECHO サーバ
  */
 
@@ -246,5 +234,5 @@
 
 /*
- *  UDP ECHO ãµã¼ãã¿ã¹ã¯
+ *  UDP ECHO サーバタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  UDP ECHO ãµã¼ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP ECHO サーバコンフィギュレーションファイル
  *
  *    IPv6
@@ -53,5 +41,5 @@
 
 /*
- * ã¿ã¹ã¯
+ * タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp6_echo_srv.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,19 +35,17 @@
 #define _UDP6_ECHO_SRV_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define UDP6_ECHO_SRV_STACK_SIZE	1024		/* UDP ECHO ãµã¼ãã¿ã¹ã¯ï¼IPv6ï¼ã®ã¹ã¿ãã¯ãµã¤ãº		*/
+#define UDP6_ECHO_SRV_STACK_SIZE	1024		/* UDP ECHO サーバタスク（IPv6）のスタックサイズ		*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define UDP6_ECHO_SRV_MAIN_PRIORITY	5		/* UDP ECHO ãµã¼ãã¿ã¹ã¯ï¼IPv6ï¼ã®åªå
-åº¦			*/
+#define UDP6_ECHO_SRV_MAIN_PRIORITY	5		/* UDP ECHO サーバタスク（IPv6）の優先度			*/
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	udp6_echo_srv_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_udp6_echo_srv (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  UDP DISCARD ã¯ã©ã¤ã¢ã³ã
+ *  UDP DISCARD クライアント
  */
 
@@ -79,10 +67,10 @@
 #ifdef USE_UDP_DISCARD_CLI
 
-/* discard ãµã¼ãã®ãã¼ãçªå· */
+/* discard サーバのポート番号 */
 
 #define DISCARD_SRV_PORTNO	UINT_C(9)
 
 /*
- * å¤æ°
+ * 変数
  */
 
@@ -97,6 +85,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -104,5 +91,5 @@
 
 /*
- *  send_udp_discard -- DISCARD/UDP ãµã¼ãã«ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  send_udp_discard -- DISCARD/UDP サーバにメッセージを送信する。
  */
 
@@ -156,5 +143,5 @@
 
 /*
- *  UDP DISCARD ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯
+ *  UDP DISCARD クライアント送信タスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,11 +33,11 @@
 
 /*
- *  UDP DISCARD ã¯ã©ã¤ã¢ã³ã
- *  ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  UDP DISCARD クライアント
+ *  コンフィギュレーションファイル
  */
 
 #ifdef USE_UDP_DISCARD_CLI
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 #ifdef USE_UDP_EXTENTIONS
@@ -77,5 +65,5 @@
 #endif	/* of #ifdef USE_UDP_EXTENTIONS */
 
-/* ã³ãã³ãã­ã¥ã¼ */
+/* コマンドキュー */
 
 CRE_DTQ(DTQ_UDP_DISCARD_CLI,  { TA_TFIFO, 1, NULL });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/udp_discard_cli.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,23 +35,21 @@
 #define _UDP_DISCARD_CLI_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define UDP_DISCARD_CLI_STACK_SIZE	1024		/* UDP DISCARD ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define UDP_DISCARD_CLI_STACK_SIZE	1024		/* UDP DISCARD クライアントタスクのスタックサイズ	*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define UDP_DISCARD_CLI_MAIN_PRIORITY	5		/* UDP DISCARD ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define UDP_DISCARD_CLI_MAIN_PRIORITY	5		/* UDP DISCARD クライアントタスクの優先度		*/
 
-/* å¤æ° */
+/* 変数 */
 
 extern bool_t	udp_discard_cli_valid;
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	udp_discard_cli_task(intptr_t exinf);
 
-/* é¢æ° */
+/* 関数 */
 
 extern ER callback_udp_discard_cli (ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /* 
- *  WWW ãµã¼ã
+ *  WWW サーバ
  *
- *    ã»éåä¿¡ã¿ã¹ã¯åä¸å
- *    ã»ãã³ãã­ãã­ã³ã°ã³ã¼ã«
- *    ã»çã³ãã¼ API
- *    ã»IPv4/IPv6
+ *    ・送受信タスク同一型
+ *    ・ノンブロッキングコール
+ *    ・省コピー API
+ *    ・IPv4/IPv6
  */
 
@@ -101,5 +89,5 @@
 
 /*
- *  éåä¿¡ API ã®é¸æ
+ *  送受信 API の選択
  */
 
@@ -117,5 +105,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -132,6 +120,5 @@
 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && defined(USE_WWW4_SRV)
 
-#if NUM_WWW_SRV_TASKS >= 2		/* 2 ãè¶
-ããåæ°ã¯æ³å®ãã¦ããªãã	*/
+#if NUM_WWW_SRV_TASKS >= 2		/* 2 を超える個数は想定していない。	*/
 
 #define WWW4_SRV_TASK	WWW_SRV_TASK1
@@ -156,9 +143,8 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+ *  全域変数
+ */
+
+/* TCP 送受信ウィンドバッファ */
 
 #ifndef TCP_CFG_SWBUF_CSAVE
@@ -171,5 +157,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -200,6 +186,5 @@
 
 /*
- *  æ¥ç¶ç¸æã®æ
-å ±æ§é ä½
+ *  接続相手の情報構造体
  */
 
@@ -210,8 +195,7 @@
 
 typedef struct t_www_srv_info {
-	ID	cepid;		/* éä¿¡ç«¯ç¹ ID		*/
-	ID	repid;		/* åä»å£   ID		*/
-	T_IPEP	dst;		/* æ¥ç¶ç¸æã¢ãã¬ã¹æ
-å ±	*/
+	ID	cepid;		/* 通信端点 ID		*/
+	ID	repid;		/* 受付口   ID		*/
+	T_IPEP	dst;		/* 接続相手アドレス情報	*/
 	} T_WWW_SRV_INFO;
 
@@ -221,6 +205,5 @@
 
 static T_WWW_SRV_INFO www_srv_info[NUM_WWW_SRV_TASKS];
-					/* 2 ãè¶
-ããåæ°ã¯æ³å®ãã¦ããªãã	*/
+					/* 2 を超える個数は想定していない。	*/
 
 #else	/* of #ifdef USE_TCP_EXTENTIONS */
@@ -238,6 +221,5 @@
 #endif	/* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && defined(USE_WWW4_SRV) */
 
-#if NUM_WWW_SRV_TASKS >= 2		/* 2 ãè¶
-ããåæ°ã¯æ³å®ãã¦ããªãã	*/
+#if NUM_WWW_SRV_TASKS >= 2		/* 2 を超える個数は想定していない。	*/
 	{ WWW_SRV_CEPID2, WWW_SRV_REPID },
 #endif
@@ -250,6 +232,5 @@
 
 /*
- *  get_char -- ä¸æå­å
-¥åããã
+ *  get_char -- 一文字入力する。
  */
 
@@ -286,5 +267,5 @@
 
 /*
- *  flush_sbuf -- éä¿¡ãããã¡ããã©ãã·ã¥ããã
+ *  flush_sbuf -- 送信バッファをフラッシュする。
  */
 
@@ -301,5 +282,5 @@
 
 /*
- *  put_str -- æå­åãåºåããã
+ *  put_str -- 文字列を出力する。
  */
 
@@ -343,6 +324,5 @@
 
 /*
- *  get_char -- ä¸æå­å
-¥åããã
+ *  get_char -- 一文字入力する。
  */
 
@@ -376,5 +356,5 @@
 
 /*
- *  flush_sbuf -- éä¿¡ãããã¡ããã©ãã·ã¥ããã
+ *  flush_sbuf -- 送信バッファをフラッシュする。
  */
 
@@ -396,5 +376,5 @@
 
 /*
- *  put_str -- æå­åãåºåããã
+ *  put_str -- 文字列を出力する。
  */
 
@@ -428,6 +408,5 @@
 
 /*
- *  get_line -- ä¸è¡å
-¥åããã
+ *  get_line -- 一行入力する。
  */
 
@@ -469,5 +448,5 @@
 
 /*
- *  convert -- æ°å¤å¤æ
+ *  convert -- 数値変換
  */
 
@@ -499,5 +478,5 @@
 
 /*
- * split_fields -- ãã£ã¼ã«ãã«åå²ããã
+ * split_fields -- フィールドに分割する。
  */
 
@@ -523,5 +502,5 @@
 
 /*
- *  put_status -- status line ãåºåããã
+ *  put_status -- status line を出力する。
  */
 
@@ -538,5 +517,5 @@
 
 /*
- *  put_content_length -- Content-length ãåºåããã
+ *  put_content_length -- Content-length を出力する。
  */
 
@@ -557,5 +536,5 @@
 
 /*
- *  get_method -- GET ã¡ã½ããã®å¦ç
+ *  get_method -- GET メソッドの処理
  */
 
@@ -576,5 +555,5 @@
 
 /*
- *  parse_request -- ãªã¯ã¨ã¹ããè§£æããã
+ *  parse_request -- リクエストを解析する。
  */
 
@@ -608,5 +587,5 @@
 		}
 
-	while (get_line(cepid, line, srbuf) > 0) {	/* ããããã¹ã­ããããã*/
+	while (get_line(cepid, line, srbuf) > 0) {	/* ヘッダをスキップする。*/
 		split_fields(line, ": ");
 		if (strcmp("Content-Length", &line->buf[line->off[0]]) == 0)
@@ -614,5 +593,5 @@
 		}
 	while (blen > 0 && get_line(cepid, line, srbuf) > 0) {
-		/* ã¨ã³ãã£ãã£ã»ããã£ãã¹ã­ããããã*/
+		/* エンティティ・ボディをスキップする。*/
 		blen -= line->len;
 		}
@@ -636,5 +615,5 @@
 
 /*
- *  index_html -- /index.html ãã¡ã¤ã«
+ *  index_html -- /index.html ファイル
  */
 
@@ -654,25 +633,23 @@
 		"<title>TINET TCP/IP Protocol Stack</title>\r\n"
 		"</head><body bgcolor=\"#ffffbb\">\r\n"
-		"<hr>ãã® WWW ãµã¼ãã¯<br>"
+		"<hr>この WWW サーバは<br>"
 
 #ifdef TARGET_KERNEL_ASP
-		"ASP Kernel for " TARGET_NAME " (" __DATE__ "," __TIME__ ") ã¨<br>\r\n"
+		"ASP Kernel for " TARGET_NAME " (" __DATE__ "," __TIME__ ") と<br>\r\n"
 #endif
 
 #ifdef TARGET_KERNEL_JSP
-		"JSP Kernel for " TARGET_NAME " (" __DATE__ "," __TIME__ ") ã¨<br>\r\n"
+		"JSP Kernel for " TARGET_NAME " (" __DATE__ "," __TIME__ ") と<br>\r\n"
 #endif
 
-		"TINET TCP/IP ãã­ãã³ã«ã¹ã¿ãã¯ã«ãããµã¼ãã¹ãã¦ãã¾ãã<br><hr>\r\n"
+		"TINET TCP/IP プロトコルスタックによりサービスしています。<br><hr>\r\n"
 
 #if NET_COUNT_ENABLE
 
-		"<ul><li type=\"square\"><a href=\"stat.html\">ãããã¯ã¼ã¯çµ±è¨æ
-å ±</a></ul><hr>\r\n"
+		"<ul><li type=\"square\"><a href=\"stat.html\">ネットワーク統計情報</a></ul><hr>\r\n"
 
 #else	/* of #if NET_COUNT_ENABLE */
 
-		"<ul><li type=\"square\">ãããã¯ã¼ã¯çµ±è¨æ
-å ±</ul><hr>\r\n"
+		"<ul><li type=\"square\">ネットワーク統計情報</ul><hr>\r\n"
 
 #endif	/* of #if NET_COUNT_ENABLE */
@@ -728,5 +705,5 @@
 	get_tim(&start);
 	len += put_status(cepid, srbuf, ST_OK);
-	len += put_content_length(cepid, srbuf, strlen(response) - 2);	/* 2 ã¯æåã® \r\n */
+	len += put_content_length(cepid, srbuf, strlen(response) - 2);	/* 2 は最初の \r\n */
 	len += put_str(cepid, srbuf, response);
 	get_tim(&finish);
@@ -749,5 +726,5 @@
 
 static const char time_prefix[] =
-	"çµéæé: "
+	"経過時間: "
 	;
 
@@ -762,6 +739,5 @@
 static const char table_prefix_ip4[] =
 	"<h2>IPv4</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
@@ -772,18 +748,15 @@
 static const char table_prefix_ip6[] =
 	"<h2>IPv6</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
 static const char table_prefix_icmp6[] =
 	"<h2>ICMPv6</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
 static const char table_prefix_nd6[] =
-	"<h2>è¿é£æ¢ç´¢</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<h2>近隣探索</h2><table border>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
@@ -792,15 +765,14 @@
 static const char table_prefix_tcp[] =
 	"<h2>TCP</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
 static const char table_prefix_net_buf[] =
-	"<h2>ãããã¯ã¼ã¯ãããã¡</h2><table border>\r\n"
-	"<tr><th>ãµã¤ãº</th>"
-	"<th>ç¨ææ°</th>"
-	"<th>å²å½è¦æ±æ°</th>"
-	"<th>å²å½æ°</th>"
-	"<th>å²å½ã¦<br>ã¨ã©ã¼æ°</th></tr>\r\n"
+	"<h2>ネットワークバッファ</h2><table border>\r\n"
+	"<tr><th>サイズ</th>"
+	"<th>用意数</th>"
+	"<th>割当要求数</th>"
+	"<th>割当数</th>"
+	"<th>割当て<br>エラー数</th></tr>\r\n"
 	;
 
@@ -808,17 +780,16 @@
 
 static const char table_prefix_ppp[] =
-	"<h2>PPP ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<h2>PPP ネットワークインタフェース</h2><table border>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
 static const char *ppp_item[NC_PPP_SIZE] = {
-	"åä¿¡ãªã¯ãããæ°",
-	"éä¿¡ãªã¯ãããæ°",
-	"åä¿¡ãã¬ã¼ã æ°",
-	"éä¿¡ãã¬ã¼ã æ°",
-	"åä¿¡ã¨ã©ã¼ãã¬ã¼ã æ°",
-	"éä¿¡ã¨ã©ã¼ãã¬ã¼ã æ°",
-	"ãããã¡å²ãå½ã¦å¤±ææ°",
+	"受信オクテット数",
+	"送信オクテット数",
+	"受信フレーム数",
+	"送信フレーム数",
+	"受信エラーフレーム数",
+	"送信エラーフレーム数",
+	"バッファ割り当て失敗数",
 	};
 
@@ -828,22 +799,21 @@
 
 static const char table_prefix_ether_nic[] =
-	"<h2>ã¤ã¼ãµãããã»ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹</h2><table border>\r\n"
-	"<tr><th>é 
-ç®</th><th>ã«ã¦ã³ã</th></tr>\r\n"
+	"<h2>イーサネット・ネットワークインタフェース</h2><table border>\r\n"
+	"<tr><th>項目</th><th>カウント</th></tr>\r\n"
 	;
 
 static const char *ether_nic_item[NC_ETHER_NIC_SIZE] = {
-	"ãªã»ããæ°",
-	"éä¿¡ã»ããã©è³æºè¿å´ãªã¼ãã¼æ°",
-	"éä¿¡ã¿ã¤ã ã¢ã¦ãæ°",
-	"è¡çªæ°",
-	"éä¿¡ã¨ã©ã¼ãã¬ã¼ã æ°",
-	"éä¿¡ãã¬ã¼ã æ°",
-	"éä¿¡ãªã¯ãããæ°",
-	"åä¿¡ã»ããã©è³æºè¿å´ãªã¼ãã¼æ°",
-	"åä¿¡ãããã¡å²ãå½ã¦å¤±ææ°",
-	"åä¿¡ã¨ã©ã¼ãã¬ã¼ã æ°",
-	"åä¿¡ãã¬ã¼ã æ°",
-	"åä¿¡ãªã¯ãããæ°",
+	"リセット数",
+	"送信セマフォ資源返却オーバー数",
+	"送信タイムアウト数",
+	"衝突数",
+	"送信エラーフレーム数",
+	"送信フレーム数",
+	"送信オクテット数",
+	"受信セマフォ資源返却オーバー数",
+	"受信バッファ割り当て失敗数",
+	"受信エラーフレーム数",
+	"受信フレーム数",
+	"受信オクテット数",
 	};
 
@@ -853,25 +823,24 @@
 
 static const char *ip4_item[NC_IP4_SIZE] = {
-	"åå²éä¿¡ããã©ã°ã¡ã³ãæ°",
-	"åå²éä¿¡æ°",
-	"éä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°",
-	"éä¿¡ãã¼ã¿ã°ã©ã æ°",
-	"éä¿¡ãªã¯ãããæ°",
-	"åå²åä¿¡ã¿ã¤ã ã¢ã¦ãæ°",
-	"åå²åä¿¡ãããã¡å²ãå½ã¦å¤±ææ°",
-	"åå²åä¿¡ç ´æ£æ°",
-	"åå²åä¿¡åæ§ææåæ°",
-	"åå²åä¿¡ãã©ã°ã¡ã³ãæ°",
-	"åå²åä¿¡æ°",
-	"ãªãã·ã§ã³å
-¥åæ°",
-	"ãã­ãã³ã«ã¨ã©ã¼æ°",
-	"ã¢ãã¬ã¹ã¨ã©ã¼æ°",
-	"ãã¼ã¸ã§ã³ã¨ã©ã¼æ°",
-	"é·ãã¨ã©ã¼æ°",
-	"ãã§ãã¯ãµã ã¨ã©ã¼æ°",
-	"åä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°",
-	"åä¿¡ãã¼ã¿ã°ã©ã æ°",
-	"åä¿¡ãªã¯ãããæ°",
+	"分割送信、フラグメント数",
+	"分割送信数",
+	"送信エラーデータグラム数",
+	"送信データグラム数",
+	"送信オクテット数",
+	"分割受信タイムアウト数",
+	"分割受信バッファ割り当て失敗数",
+	"分割受信破棄数",
+	"分割受信再構成成功数",
+	"分割受信フラグメント数",
+	"分割受信数",
+	"オプション入力数",
+	"プロトコルエラー数",
+	"アドレスエラー数",
+	"バージョンエラー数",
+	"長さエラー数",
+	"チェックサムエラー数",
+	"受信エラーデータグラム数",
+	"受信データグラム数",
+	"受信オクテット数",
 	};
 
@@ -881,42 +850,42 @@
 
 static const char *ip6_item[NC_IP6_SIZE] = {
-	"åå²éä¿¡ããã©ã°ã¡ã³ãæ°",
-	"åå²éä¿¡æ°",
-	"éä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°",
-	"éä¿¡ãã¼ã¿ã°ã©ã æ°",
-	"éä¿¡ãªã¯ãããæ°	",
-	"åå²åä¿¡ã¿ã¤ã ã¢ã¦ãæ°",
-	"åå²åä¿¡ãããã¡å²ãå½ã¦å¤±ææ°",
-	"åå²åä¿¡ç ´æ£æ°",
-	"åå²åä¿¡åæ§ææåæ°",
-	"åå²åä¿¡ãã©ã°ã¡ã³ãæ°",
-	"åå²åä¿¡æ°",
-	"ãã­ãã³ã«ã¨ã©ã¼æ°	",
-	"ã¢ãã¬ã¹ã¨ã©ã¼æ°	",
-	"ãã¼ã¸ã§ã³ã¨ã©ã¼æ°	",
-	"é·ãã¨ã©ã¼æ°",
-	"åä¿¡ã¨ã©ã¼ãã¼ã¿ã°ã©ã æ°",
-	"åä¿¡ãã¼ã¿ã°ã©ã æ°",
-	"åä¿¡ãªã¯ãããæ°	",
+	"分割送信、フラグメント数",
+	"分割送信数",
+	"送信エラーデータグラム数",
+	"送信データグラム数",
+	"送信オクテット数	",
+	"分割受信タイムアウト数",
+	"分割受信バッファ割り当て失敗数",
+	"分割受信破棄数",
+	"分割受信再構成成功数",
+	"分割受信フラグメント数",
+	"分割受信数",
+	"プロトコルエラー数	",
+	"アドレスエラー数	",
+	"バージョンエラー数	",
+	"長さエラー数",
+	"受信エラーデータグラム数",
+	"受信データグラム数",
+	"受信オクテット数	",
 	};
 
 static const char *icmp6_item[NC_ICMP6_SIZE] = {
-	"éä¿¡ã¨ã©ã¼ ICMP ãã¼ã¿æ°	",
-	"éä¿¡ ICMP ãã¼ã¿æ°",
-	"éä¿¡ ICMP ãªã¯ãããæ°",
-	"é·ãã¨ã©ã¼æ°",
-	"åä¿¡ã¨ã©ã¼ ICMP ãã¼ã¿æ°	",
-	"åä¿¡ ICMP ãã¼ã¿æ°",
-	"åä¿¡ ICMP ãªã¯ãããæ°",
+	"送信エラー ICMP データ数	",
+	"送信 ICMP データ数",
+	"送信 ICMP オクテット数",
+	"長さエラー数",
+	"受信エラー ICMP データ数	",
+	"受信 ICMP データ数",
+	"受信 ICMP オクテット数",
 	};
 
 static const char *nd6_item[NC_ND6_SIZE] = {
-	"éè¤ã¢ãã¬ã¹æ¤åºéä¿¡æ°",
-	"è¿é£è¦è«éä¿¡æ°",
-	"è¿é£è¦è«åä¿¡æ°",
-	"è¿é£éç¥éä¿¡æ°",
-	"è¿é£éç¥åä¿¡æ°",
-	"ã«ã¼ã¿è¦è«åºåæ°",
-	"ã«ã¼ã¿éç¥åä¿¡æ°",
+	"重複アドレス検出送信数",
+	"近隣要請送信数",
+	"近隣要請受信数",
+	"近隣通知送信数",
+	"近隣通知受信数",
+	"ルータ要請出力数",
+	"ルータ通知受信数",
 	};
 
@@ -924,33 +893,32 @@
 
 static const char *tcp_item[NC_TCP_SIZE] = {
-	"è½åãªã¼ãã³æ°",
-	"ååãªã¼ãã³æ°",
-	"RTT æ´æ°æ°",
-	"éä¿¡ RST æ°",
-	"éä¿¡ ACK æ°",
-	"éä¿¡ç·æ¥ã»ã°ã¡ã³ãæ°",
-	"éä¿¡ãã¼ã¿ã»ã°ã¡ã³ãæ°",
-	"åéã»ã°ã¡ã³ãæ°",
-	"éä¿¡ã»ã°ã¡ã³ãæ°",
-	"éä¿¡å¶å¾¡ã»ã°ã¡ã³ãæ°",
-	"éä¿¡ãã¼ã¿ãªã¯ãããæ°",
-	"åä¿¡ã­ã¥ã¼è§£æ¾æ°",
-	"åä¿¡å¤éæ°",
-	"åä¿¡ç ´æ£æ°",
-	"åä¿¡ RST æ°",
-	"åä¿¡å¤é ACK æ°",
-	"åä¿¡ ACK æ°",
-	"åä¿¡ãã§ãã¯ãµã ä¸æ­£æ°",
-	"åä¿¡ãããä¸æ­£æ°",
-	"åä¿¡ç·æ¥ã»ã°ã¡ã³ãæ°",
-	"åä¿¡ãã¼ã¿ã»ã°ã¡ã³ãæ°",
-	"åä¿¡ã»ã°ã¡ã³ãæ°",
-	"åä¿¡ãã¼ã¿ãªã¯ãããæ°",
-	"åä¿¡ãªã¯ãããæ°",
+	"能動オープン数",
+	"受動オープン数",
+	"RTT 更新数",
+	"送信 RST 数",
+	"送信 ACK 数",
+	"送信緊急セグメント数",
+	"送信データセグメント数",
+	"再送セグメント数",
+	"送信セグメント数",
+	"送信制御セグメント数",
+	"送信データオクテット数",
+	"受信キュー解放数",
+	"受信多重数",
+	"受信破棄数",
+	"受信 RST 数",
+	"受信多重 ACK 数",
+	"受信 ACK 数",
+	"受信チェックサム不正数",
+	"受信ヘッダ不正数",
+	"受信緊急セグメント数",
+	"受信データセグメント数",
+	"受信セグメント数",
+	"受信データオクテット数",
+	"受信オクテット数",
 	};
 
 /*
- *  put_count_item1 -- ã«ã¦ã³ã¿ã®å
-å®¹ãåºåãããã°ã«ã¼ã 1
+ *  put_count_item1 -- カウンタの内容を出力する。グループ 1
  */
 
@@ -995,6 +963,5 @@
 
 /*
- *  put_count_item2 -- ã«ã¦ã³ã¿ã®å
-å®¹ãåºåãããã°ã«ã¼ã 2
+ *  put_count_item2 -- カウンタの内容を出力する。グループ 2
  */
 
@@ -1021,5 +988,5 @@
 
 /*
- *  td_len_ppp -- put_count_ppp ã§åºåããæå­æ°ã
+ *  td_len_ppp -- put_count_ppp で出力する文字数。
  */
 
@@ -1036,6 +1003,5 @@
 
 /*
- *  put_count_ppp -- ã«ã¦ã³ã¿ (PPP) ã®å
-å®¹ãåºåããã
+ *  put_count_ppp -- カウンタ (PPP) の内容を出力する。
  */
 
@@ -1108,5 +1074,5 @@
 
 /*
- *  td_len_ip4 -- put_count_ip4 ã§åºåããæå­æ°ã
+ *  td_len_ip4 -- put_count_ip4 で出力する文字数。
  */
 
@@ -1123,6 +1089,5 @@
 
 /*
- *  put_count_ip4 -- ã«ã¦ã³ã¿ (IP4) ã®å
-å®¹ãåºåããã
+ *  put_count_ip4 -- カウンタ (IP4) の内容を出力する。
  */
 
@@ -1153,5 +1118,5 @@
 
 /*
- *  td_len_nd6 -- put_count_nd6 ã§åºåããæå­æ°ã
+ *  td_len_nd6 -- put_count_nd6 で出力する文字数。
  */
 
@@ -1168,6 +1133,5 @@
 
 /*
- *  put_count_nd6 -- ã«ã¦ã³ã¿ (ND6) ã®å
-å®¹ãåºåããã
+ *  put_count_nd6 -- カウンタ (ND6) の内容を出力する。
  */
 
@@ -1194,5 +1158,5 @@
 
 /*
- *  td_len_icmp6 -- put_count_icmp6 ã§åºåããæå­æ°ã
+ *  td_len_icmp6 -- put_count_icmp6 で出力する文字数。
  */
 
@@ -1209,6 +1173,5 @@
 
 /*
- *  put_count_icmp6 -- ã«ã¦ã³ã¿ (ICMP6) ã®å
-å®¹ãåºåããã
+ *  put_count_icmp6 -- カウンタ (ICMP6) の内容を出力する。
  */
 
@@ -1235,5 +1198,5 @@
 
 /*
- *  td_len_ip6 -- put_count_ip6 ã§åºåããæå­æ°ã
+ *  td_len_ip6 -- put_count_ip6 で出力する文字数。
  */
 
@@ -1250,6 +1213,5 @@
 
 /*
- *  put_count_ip6 -- ã«ã¦ã³ã¿ (IP6) ã®å
-å®¹ãåºåããã
+ *  put_count_ip6 -- カウンタ (IP6) の内容を出力する。
  */
 
@@ -1278,5 +1240,5 @@
 
 /*
- *  td_len_tcp -- put_count_tcp ã§åºåããæå­æ°ã
+ *  td_len_tcp -- put_count_tcp で出力する文字数。
  */
 
@@ -1293,6 +1255,5 @@
 
 /*
- *  put_count_tcp -- ã«ã¦ã³ã¿ (TCP) ã®å
-å®¹ãåºåããã
+ *  put_count_tcp -- カウンタ (TCP) の内容を出力する。
  */
 
@@ -1319,5 +1280,5 @@
 
 /*
- *  put_elapse_time -- çµéæéãåºåããã
+ *  put_elapse_time -- 経過時間を出力する。
  */
 
@@ -1351,6 +1312,5 @@
 
 /*
- *  put_count_net_buf -- ã«ã¦ã³ã¿ (TCP) ã®å
-å®¹ãåºåããã
+ *  put_count_net_buf -- カウンタ (TCP) の内容を出力する。
  */
 
@@ -1392,5 +1352,5 @@
 
 /*
- *  td_len_ether_nic -- put_count_ether_nic ã§åºåããæå­æ°ã
+ *  td_len_ether_nic -- put_count_ether_nic で出力する文字数。
  */
 
@@ -1407,6 +1367,5 @@
 
 /*
- *  put_count_ether_nic -- ã«ã¦ã³ã¿ (ETHER_NIC) ã®å
-å®¹ãåºåããã
+ *  put_count_ether_nic -- カウンタ (ETHER_NIC) の内容を出力する。
  */
 
@@ -1435,5 +1394,5 @@
 
 /*
- *  stat_html -- /stat.html ãã¡ã¤ã«
+ *  stat_html -- /stat.html ファイル
  */
 
@@ -1451,9 +1410,7 @@
 #endif
 
-		"<title>ãããã¯ã¼ã¯çµ±è¨æ
-å ±</title>\r\n"
+		"<title>ネットワーク統計情報</title>\r\n"
 		"</head><body bgcolor=\"#ffffbb\">\r\n"
-		"<hr><h1 align=\"center\">ãããã¯ã¼ã¯çµ±è¨æ
-å ±</h1><hr>\r\n"
+		"<hr><h1 align=\"center\">ネットワーク統計情報</h1><hr>\r\n"
 		;
 
@@ -1463,13 +1420,12 @@
 
 	static const char table_prefix1[] =
-		"<h2>ã°ã«ã¼ã 1</h2><table border>\r\n"
-		"<tr><th>é 
-ç®</th>\r\n"
-		"<th>åä¿¡ãªã¯ãããæ°</th>"
-		"<th>éä¿¡ãªã¯ãããæ°</th>\r\n"
-		"<th>åä¿¡ãã±ããæ°</th>"
-		"<th>éä¿¡ãã±ããæ°</th>\r\n"
-		"<th>åä¿¡ã¨ã©ã¼<br>ãã±ããæ°</th>"
-		"<th>éä¿¡ã¨ã©ã¼<br>ãã±ããæ°</th></tr>\r\n"
+		"<h2>グループ 1</h2><table border>\r\n"
+		"<tr><th>項目</th>\r\n"
+		"<th>受信オクテット数</th>"
+		"<th>送信オクテット数</th>\r\n"
+		"<th>受信パケット数</th>"
+		"<th>送信パケット数</th>\r\n"
+		"<th>受信エラー<br>パケット数</th>"
+		"<th>送信エラー<br>パケット数</th></tr>\r\n"
 		;
 
@@ -1477,9 +1433,8 @@
 
 	static const char table_prefix2[] =
-		"<h2>ã°ã«ã¼ã 2</h2><table border>\r\n"
-		"<tr><th>é 
-ç®</th>"
-		"<th>åä¿¡ãªã¯ãããæ°</th>"
-		"<th>åä¿¡ãã¬ã¼ã æ°</th></tr>\r\n"
+		"<h2>グループ 2</h2><table border>\r\n"
+		"<tr><th>項目</th>"
+		"<th>受信オクテット数</th>"
+		"<th>受信フレーム数</th></tr>\r\n"
 		;
 
@@ -1574,5 +1529,5 @@
 
 	                        + content_len
-	                        - 2);	/* 2 ã¯æåã® \r\n */
+	                        - 2);	/* 2 は最初の \r\n */
 
 	len += put_str(cepid, srbuf, res_prefix);
@@ -1664,5 +1619,5 @@
 
 /*
- *  get_tcp_rep -- TCP åä»å£ãç²å¾ããã
+ *  get_tcp_rep -- TCP 受付口を獲得する。
  */
 
@@ -1722,5 +1677,5 @@
 
 /*
- *  get_tcp_cep -- TCP éä¿¡ç«¯ç¹ãç²å¾ããã
+ *  get_tcp_cep -- TCP 通信端点を獲得する。
  */
 
@@ -1767,5 +1722,5 @@
 
 /*
- *  tcp_passive_open -- ååãªã¼ãã³ãå®è¡ããã
+ *  tcp_passive_open -- 受動オープンを実行する。
  *
  *    USE_TCP_NON_BLOCKING	OFF
@@ -1781,5 +1736,5 @@
 
 	if (apip == API_PROTO_IPV6) {
-		/* åä»å£ã¯ IPv6 */
+		/* 受付口は IPv6 */
 		if ((error = tcp6_acp_cep(info->cepid, info->repid, &info->dst, TMO_FEVR)) != E_OK)
 			return error;
@@ -1792,5 +1747,5 @@
 		}
 	else {
-		/* åä»å£ã¯ IPv4 */
+		/* 受付口は IPv4 */
 		if ((error = tcp_acp_cep(info->cepid, info->repid, &dst4, TMO_FEVR)) != E_OK)
 			return error;
@@ -1828,5 +1783,5 @@
 
 /*
- *  WWW ãµã¼ã
+ *  WWW サーバ
  */
 
@@ -1914,5 +1869,5 @@
 
 /*
- *  WWW ãµã¼ãã¿ã¹ã¯
+ *  WWW サーバタスク
  */
 
@@ -2008,5 +1963,5 @@
 
 /*
- *  wakeup_www_srv -- WWW ãµã¼ãã¿ã¹ã¯ã®ä¼æ­¢è§£é¤
+ *  wakeup_www_srv -- WWW サーバタスクの休止解除
  */
 
@@ -2027,5 +1982,5 @@
 
 /*
- *  WWW ãµã¼ãã¿ã¹ã¯
+ *  WWW サーバタスク
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  WWW ãµã¼ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  WWW サーバのシステムコンフィギュレーションファイル
  */
 
 #ifdef USE_WWW_SRV
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(WWW_SRV_TASK1,  {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,17 +36,16 @@
 
 /* 
- *  WWW ãµã¼ã
+ *  WWW サーバ
  */
 
 #ifdef TOPPERS_S810_CLG3_85
-#define	WWW_SRV_STACK_SIZE		768		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define	WWW_SRV_STACK_SIZE		768		/* タスクのスタックサイズ	*/
 #else	/* of #ifdef TOPPERS_S810_CLG3_85 */
-#define	WWW_SRV_STACK_SIZE		1024		/* ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define	WWW_SRV_STACK_SIZE		1024		/* タスクのスタックサイズ	*/
 #endif	/* of #ifdef TOPPERS_S810_CLG3_85 */
-#define WWW_SRV_MAIN_PRIORITY		5		/* ã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define WWW_SRV_MAIN_PRIORITY		5		/* タスクの優先度		*/
 
 /*
- *  TCP éåä¿¡ã¦ã¤ã³ããããã¡ãµã¤ãº
+ *  TCP 送受信ウインドバッファサイズ
  */
 
@@ -88,5 +75,5 @@
 
 /*
- *  ã¿ã¹ã¯æ°
+ *  タスク数
  */
 
@@ -124,13 +111,13 @@
 	} T_WWW_RWBUF;
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	www_srv_task (intptr_t exinf);
 
 /*
- *  å¤æ°
+ *  変数
  */
 
-/* TCP éåä¿¡ã¦ã£ã³ããããã¡ */
+/* TCP 送受信ウィンドバッファ */
 
 #ifdef NUM_WWW_SRV_TASKS
@@ -142,5 +129,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws_asp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  ASP ç¨ WWW ãµã¼ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ASP 用 WWW サーバのシステムコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é WWW ãµã¼ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 WWW サーバのシステムコンフィギュレーションファイルのインクルード
  */
 
@@ -58,8 +45,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* åä¿¡ãããã¡ */
+/* 受信バッファ */
 
 CRE_MPF(MPF_WWW_RWBUF, {
@@ -71,5 +58,5 @@
 	});
 
-/* è¡ãããã¡ */
+/* 行バッファ */
 
 CRE_MPF(MPF_WWW_LINE, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws_jsp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws_jsp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netapp/wwws_jsp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,9 @@
 
 /*
- *  JSP ç¨ WWW ãµã¼ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  JSP 用 WWW サーバのシステムコンフィギュレーションファイル
  */
 
 /*
- *  å
-±é WWW ãµã¼ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ã¤ã³ã¯ã«ã¼ã
+ *  共通 WWW サーバのシステムコンフィギュレーションファイルのインクルード
  */
 
@@ -58,8 +45,8 @@
 
 /*
- * åºå®ã¡ã¢ãªãã¼ã«
+ * 固定メモリプール
  */
 
-/* åä¿¡ãããã¡ */
+/* 受信バッファ */
 
 CRE_MPF(MPF_WWW_RWBUF, {
@@ -70,5 +57,5 @@
 	});
 
-/* è¡ãããã¡ */
+/* 行バッファ */
 
 CRE_MPF(MPF_WWW_LINE, {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet	(revision 389)
@@ -5,47 +5,32 @@
 #                    Tomakomai National College of Technology, JAPAN
 #  
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   @(#) $Id$
@@ -53,5 +38,5 @@
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES	:= $(INCLUDES) -I$(TINET_ROOT)/netdev/$(NET_DEV)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c	(revision 389)
@@ -63,5 +63,5 @@
 //#define PACKET_DUMP
 
-// ã¨ã©ã¼è¿å´ç¨å®æ°(-1:0xffffåºå®)
+// エラー返却用定数(-1:0xffff固定)
 #define FAILED_RFCOMM_ID_NOT_SET	0xffff
 
@@ -263,5 +263,5 @@
 		}
 		if (!bnep_do_connect) {
-			// 20ç§å¾ BNEP Query éå§
+			// 20秒後 BNEP Query 開始
 			bt_state = BT_STATE_BNEP_QUERY_WAIT;
 			bt_timer = 20 * 1000;
@@ -289,5 +289,5 @@
 				hci_send_cmd(&hci_write_local_name, bt_localname);
 				if (bt_bnep_mode == 0) {
-					// å³æ BNEP Query éå§
+					// 即時 BNEP Query 開始
 					bt_state = BT_STATE_BNEP_QUERY_WAIT;
 					bt_timer = 0;
@@ -373,5 +373,5 @@
 				log_info("BNEP channel open failed, status %02x", packet[2]);
 
-				// 30ç§å¾ BNEP Query éå§
+				// 30秒後 BNEP Query 開始
 				bt_state = BT_STATE_BNEP_QUERY_WAIT;
 				bt_timer = 30 * 1000;
@@ -403,5 +403,5 @@
 			bt_channel_closed(bnep_cid);
 
-			// 30ç§å¾ BNEP Query éå§
+			// 30秒後 BNEP Query 開始
 			bt_state = BT_STATE_BNEP_QUERY_WAIT;
 			bt_timer = 30 * 1000;
@@ -514,5 +514,5 @@
 	memset(bnep_service_buffer, 0, sizeof(bnep_service_buffer));
 
-	// ãµã¼ãã¹å®ç¾©
+	// サービス定義
 	spp_service_record_item = (service_record_item_t *)spp_service_buffer;
 	bnep_service_record_item = (service_record_item_t *)bnep_service_buffer;
@@ -599,7 +599,6 @@
 			printf_hexdump(network_buffer, len);
 #endif
-			// ãã®é¢æ°ã¯bnep_sendããåå¸°å¼ã³åºããããã®ã§ã
-			// bnep_sendãå¼ã³åºãããåã«éä¿¡ãã±ãããªãç¶æ
-ã«ãã¾ãã
+			// この関数はbnep_sendから再帰呼び出しされるので、
+			// bnep_sendを呼び出すより前に送信パケットなし状態にします。
 			network_buffer_len = 0;
 			bnep_send(network_buffer_cid, (uint8_t*)network_buffer, len);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h	(revision 389)
@@ -10,5 +10,5 @@
 #endif
 
-// ã¨ã©ã¼è¿å´ç¨å®æ°(-1:0xffffåºå®)
+// エラー返却用定数(-1:0xffff固定)
 #define FAILED_RFCOMM_ID_NOT_SET	0xffff
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014-2017 by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -145,6 +130,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããã½ããã¦ã§ã¢æ
-å ± 
+ *  ネットワークインタフェースに依存するソフトウェア情報 
  */
 
@@ -156,27 +140,23 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±
- */
-
-/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããã½ããã¦ã§ã¢æ
-å ± */
+ *  ネットワークインタフェースのソフトウェア情報
+ */
+
+/* ネットワークインタフェースに依存するソフトウェア情報 */
 
 static T_BTUSB_SOFTC btusb_softc;
 
-/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããªãã½ããã¦ã§ã¢æ
-å ± */
+/* ネットワークインタフェースに依存しないソフトウェア情報 */
 
 T_IF_SOFTC if_softc = {
-	{{0,}},						/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-	0,							/* éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
-	&btusb_softc,				/* ãã£ãã¤ã¹ä¾å­ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	SEM_IF_BTUSB_SBUF_READY,	/* éä¿¡ã»ããã©			*/
-	SEM_IF_BTUSB_RBUF_READY,	/* åä¿¡ã»ããã©			*/
+	{{0,}},						/* ネットワークインタフェースのアドレス	*/
+	0,							/* 送信タイムアウト			*/
+	&btusb_softc,				/* ディバイス依存のソフトウェア情報	*/
+	SEM_IF_BTUSB_SBUF_READY,	/* 送信セマフォ			*/
+	SEM_IF_BTUSB_RBUF_READY,	/* 受信セマフォ			*/
 
 #ifdef SUPPORT_INET6
 
-	IF_MADDR_INIT,				/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãªã¹ã	*/
+	IF_MADDR_INIT,				/* マルチキャストアドレスリスト	*/
 
 #endif	/* of #ifdef SUPPORT_INET6 */
@@ -184,5 +164,5 @@
 
 /*
- *  å±æå¤æ°
+ *  局所変数
  */
 
@@ -196,5 +176,5 @@
 
 /*
- *  ds_crc -- ã¤ã¼ãµãããã¢ãã¬ã¹ã® CRC ãè¨ç®ããã
+ *  ds_crc -- イーサネットアドレスの CRC を計算する。
  */
 
@@ -224,6 +204,6 @@
 
 /*
- *  ds_getmcaf -- ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ãªã¹ããããã«ãã­ã£ã¹ãã¢ãã¬ã¹
- *                ãã£ã«ã¿ãè¨ç®ããã
+ *  ds_getmcaf -- マルチキャストアドレスのリストからマルチキャストアドレス
+ *                フィルタを計算する。
  */
 
@@ -243,5 +223,5 @@
 
 /*
- * btusb_setrcr -- åä¿¡æ§æã¬ã¸ã¹ã¿ (RCR) ãè¨­å®ããã
+ * btusb_setrcr -- 受信構成レジスタ (RCR) を設定する。
  */
 
@@ -252,5 +232,5 @@
 
 /*
- * btusb_addmulti -- ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãè¿½å ããã
+ * btusb_addmulti -- マルチキャストアドレスを追加する。
  */
 
@@ -275,5 +255,5 @@
 	sc->bnep_cid = bnep_cid;
 
-	/* MACã¢ãã¬ã¹ãæ´æ° */
+	/* MACアドレスを更新 */
 	memcpy(if_softc.ifaddr.lladdr, local_addr, sizeof(if_softc.ifaddr.lladdr));
 
@@ -305,8 +285,7 @@
 
 /*
- *  btusb_stop -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ãåæ­¢ããã
- * 
- *    æ³¨æ: NIC å²ãè¾¼ã¿ç¦æ­¢ç¶æ
-ã§å¼ã³åºããã¨ã
+ *  btusb_stop -- ネットワークインタフェースを停止する。
+ * 
+ *    注意: NIC 割り込み禁止状態で呼び出すこと。
  */
 
@@ -320,8 +299,7 @@
 
 /*
- *  btusb_init_sub -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®åæå
- * 
- *    æ³¨æ: NIC å²ãè¾¼ã¿ç¦æ­¢ç¶æ
-ã§å¼ã³åºããã¨ã
+ *  btusb_init_sub -- ネットワークインタフェースの初期化
+ * 
+ *    注意: NIC 割り込み禁止状態で呼び出すこと。
  */
 
@@ -331,12 +309,12 @@
 #if defined(TARGET_KERNEL_ASP)
 
-	/* ã¿ã¼ã²ããä¾å­é¨ã®å²è¾¼ã¿åæå */
+	/* ターゲット依存部の割込み初期化 */
 	btusb_inter_init();
 
 #endif	/* of #if defined(TARGET_KERNEL_ASP) */
 
-#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 ä»¥é */
-
-	/* ã¿ã¼ã²ããä¾å­é¨ã®å²è¾¼ã¿åæå */
+#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 以降 */
+
+	/* ターゲット依存部の割込み初期化 */
 	btusb_inter_init();
 
@@ -345,5 +323,5 @@
 
 /*
- * btusb_reset -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããªã»ããããã
+ * btusb_reset -- ネットワークインタフェースをリセットする。
  */
 
@@ -357,6 +335,5 @@
 
 /*
- *  get_btusb_softc -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±ãè¿ãã
+ *  get_btusb_softc -- ネットワークインタフェースのソフトウェア情報を返す。
  */
 
@@ -368,5 +345,5 @@
 
 /*
- * btusb_watchdog -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¯ããããã°ã¿ã¤ã ã¢ã¦ã
+ * btusb_watchdog -- ネットワークインタフェースのワッチドッグタイムアウト
  */
 
@@ -378,5 +355,5 @@
 
 /*
- * btusb_probe -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®æ¤åº
+ * btusb_probe -- ネットワークインタフェースの検出
  */
 
@@ -387,11 +364,11 @@
 #if defined(TARGET_KERNEL_ASP)
 
-	/* ã¿ã¼ã²ããä¾å­é¨ã®ãã¹ã®åæå */
+	/* ターゲット依存部のバスの初期化 */
 	btusb_bus_init();
 
 #endif	/* of #if defined(TARGET_KERNEL_ASP) */
-#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 ä»¥é */
-
-	/* ã¿ã¼ã²ããä¾å­é¨ã®ãã¹ã®åæå */
+#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 以降 */
+
+	/* ターゲット依存部のバスの初期化 */
 	btusb_bus_init();
 
@@ -404,5 +381,5 @@
 
 /*
- * btusb_init -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®åæå
+ * btusb_init -- ネットワークインタフェースの初期化
  */
 
@@ -410,10 +387,10 @@
 btusb_init (T_IF_SOFTC *ic)
 {
-	/* btusb_init æ¬ä½ãå¼ã³åºãã*/
+	/* btusb_init 本体を呼び出す。*/
 	btusb_init_sub(ic);
 }
 
 /*
- * btstack_network_process_packet -- btstackãããã¬ã¼ã ã®åä¿¡
+ * btstack_network_process_packet -- btstackからフレームの受信
  */
 
@@ -430,5 +407,5 @@
 		log_info("btstack_network_process_packet(bnep_cid=%d)", bnep_cid);
 
-	// åä¿¡ãããã¡ããã£ã±ã
+	// 受信バッファがいっぱい
 	if (btstack_network_input[btstack_network_input_spos] != NULL) {
 		sc->over_flow = true;
@@ -443,10 +420,9 @@
 	 *   <----------------- len ---------------->
 	 *              ^
-	 *              t_net_buf ã§ 4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã
+	 *              t_net_buf で 4 オクテット境界にアラインされている。
 	 *
-	 *  tcp_input ã¨ udp_input ã§ã¯ãæ¬ä¼¼ãããã¨ SDU ã§ãã§ãã¯ãµã ã
-	 *  è¨ç®ããããn ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã
-	 *  ãããã£ã³ã°ããããã®åãèæ
-®ãã¦ net_buf ãç²å¾ããªããã°ãªããªãã
+	 *  tcp_input と udp_input では、擬似ヘッダと SDU でチェックサムを
+	 *  計算するが、n が 4 オクテット境界になるように SDU の後ろに 0 を
+	 *  パッディングする。その分を考慮して net_buf を獲得しなければならない。
 	 */
 	align = ((((size - sizeof(T_IF_HDR)) + 3) >> 2) << 2) + sizeof(T_IF_HDR);
@@ -470,5 +446,5 @@
 
 /*
- * btusb_read -- ãã¬ã¼ã ã®èª­ã¿è¾¼ã¿
+ * btusb_read -- フレームの読み込み
  */
 
@@ -502,5 +478,5 @@
 
 /*
- * btusb_start -- éä¿¡ãã¬ã¼ã ããããã¡ãªã³ã°ããã
+ * btusb_start -- 送信フレームをバッファリングする。
  */
 
@@ -534,5 +510,5 @@
 
 /*
- * btstack_network_packet_sent -- ãããã¡ããéä¿¡ãã¬ã¼ã ã®éä¿¡ãå®äºããã
+ * btstack_network_packet_sent -- バッファした送信フレームの送信が完了する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.cfg	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *  if_btusb ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  if_btusb コンフィギュレーションファイル
  */
 
@@ -61,6 +46,5 @@
 INCLUDE("<netdev/if_btusb/if_btusb.h>");
 
-/* å
-¥åºååæç¨ã»ããã© */
+/* 入出力同期用セマフォ */
 
 CRE_SEM(SEM_IF_BTUSB_SBUF_READY,	{ TA_TPRI, NUM_IF_BTUSB_TXBUF, NUM_IF_BTUSB_TXBUF });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -66,5 +51,5 @@
 
 /*
- *  NIC ã®é¸æãã¯ã­
+ *  NIC の選択マクロ
  */
 
@@ -79,14 +64,13 @@
 #define T_IF_ETHER_NIC_SOFTC		struct t_btusb_softc
 
-/* IPv6 é¢ä¿ */
+/* IPv6 関係 */
 
-#define IF_ETHER_NIC_IN6_IFID(i,a)	get_mac6_ifid(i,a)	/* ã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ã®è¨­å®		*/
-#define IF_ETHER_NIC_ADDMULTI(s)	btusb_addmulti(s)		/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ç»é²		*/
+#define IF_ETHER_NIC_IN6_IFID(i,a)	get_mac6_ifid(i,a)	/* インタフェース識別子の設定		*/
+#define IF_ETHER_NIC_ADDMULTI(s)	btusb_addmulti(s)		/* マルチキャストアドレスの登録		*/
 
 #if !defined(TOPPERS_MACRO_ONLY) && !defined(_MACRO_ONLY)
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -108,5 +92,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic.cfg	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic_asp.cfg	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *  if_btusb ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  if_btusb コンフィギュレーションファイル
  */
 
@@ -61,6 +46,5 @@
 #include "netdev/if_btusb/if_btusb.h"
 
-/* å
-¥åºååæç¨ã»ããã© */
+/* 入出力同期用セマフォ */
 
 CRE_SEM(SEM_IF_BTUSB_SBUF_READY,	{ TA_TPRI, NUM_IF_BTUSB_TXBUF, NUM_IF_BTUSB_TXBUF });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic_rename.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic_rename.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/nic_rename.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -57,6 +42,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹å
-é¨åã®ãªãã¼ã 
+ *  ネットワークインタフェース内部名のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/tinet_nic_config.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/tinet_nic_config.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/tinet_nic_config.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -57,6 +42,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®å
-é¨è­å¥åã®ãªãã¼ã 
+ *  ネットワークインタフェースの内部識別名のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/tinet_nic_defs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/tinet_nic_defs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_btusb/tinet_nic_defs.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -59,6 +44,6 @@
 
 /* 
- *  T_ETHER_HDR ã§ãã¢ã©ã¤ã³ãèª¿æ´ããå ´åã¯ãèª¿æ´éãæå®ããã
- *  èª¿æ´ããªãå ´åã¯ã0 ãæå®ããã
+ *  T_ETHER_HDR で、アラインを調整する場合は、調整量を指定する。
+ *  調整しない場合は、0 を指定する。
  */
 #define IF_ETHER_NIC_HDR_ALIGN		0
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/Makefile.tinet
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/Makefile.tinet	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/Makefile.tinet	(revision 389)
@@ -5,47 +5,32 @@
 #                    Tomakomai National College of Technology, JAPAN
 #  
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
 #   @(#) $Id$
@@ -53,5 +38,5 @@
 
 #
-#  ã³ã³ãã¤ã«ãªãã·ã§ã³
+#  コンパイルオプション
 #
 INCLUDES	:= $(INCLUDES) -I$(TINET_ROOT)/netdev/$(NET_DEV)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/ether_phy.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/ether_phy.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/ether_phy.c	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014-2017 by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -109,13 +94,12 @@
 	switch(state){
 	case PHY_STATE_UNINIT:
-		/* PHYã®ãªã»ãã */
+		/* PHYのリセット */
 		phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_RESET);
 
-		/* 500mså¾
-ã¤ */
+		/* 500ms待つ */
 		dly_tsk(500 * 1000);
 		/* continue; */
 	case PHY_STATE_RESETING:
-		/* ãªã»ããå®äºã®ç¢ºèª */
+		/* リセット完了の確認 */
 		if((phy_read_reg(phy_addr, PHY_CONTROL_REGISTER) & PHY_CONTROL_RESET) != 0)
 			return PHY_STATE_RESETING;
@@ -137,10 +121,10 @@
 	switch(state){
 	case PHY_STATE_RESET:
-		/* ãªã¼ããã´ã·ã¨ã¼ã·ã§ã³ã®ãç¥ãããæå¹ã«è¨­å® */
+		/* オートネゴシエーションのお知らせを有効に設定 */
 		phy_write_reg(phy_addr, PHY_AN_ADVERTISEMENT_REGISTER, 
 			PHY_AN_AD_100BASE_T4 | PHY_AN_AD_100BASE_TX_FULL_DUPLEX | PHY_AN_AD_100BASE_TX_HALF_DUPLEX
 			| PHY_AN_AD_10BASE_T_FULL_DUPLEX | PHY_AN_AD_10BASE_T_HALF_DUPLEX | PHY_AN_AD_SELECTOR_FIELD);
 
-		/* ãªã¼ããã´ã·ã¨ã¼ã·ã§ã³ãæå¹ã«è¨­å® */
+		/* オートネゴシエーションを有効に設定 */
 		phy_write_reg(phy_addr, PHY_CONTROL_REGISTER, PHY_CONTROL_SPEED_SELECT | PHY_CONTROL_A_N_ENABLE);
 		/* continue; */
@@ -150,5 +134,5 @@
 		if(reset < 2){
 #endif
-		/* ãªã³ã¯å®äºã®ç¢ºèª */
+		/* リンク完了の確認 */
 		if(!phy_is_link(phy_addr))
 			return PHY_STATE_LINKE_WAIT;
@@ -163,5 +147,5 @@
 		if(reset < 2){
 #endif
-		/* ãªã¼ããã´ã·ã¨ã¼ã·ã§ã³å®äºã®ç¢ºèª */
+		/* オートネゴシエーション完了の確認 */
 		if((phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_A_N_COMPLETE) == 0)
 			return PHY_STATE_LINKED;
@@ -186,5 +170,5 @@
 {
 #if !defined(_MSC_VER) && !defined(__c2__)
-	/* ãªã³ã¯ã®ç¢ºèª */
+	/* リンクの確認 */
 	return (phy_read_reg(phy_addr, PHY_STATUS_REGISTER) & PHY_STATUS_LINK_STATUS) != 0;
 #else
@@ -198,18 +182,17 @@
 	int i;
 
-	/* PRE ï¼32åã®é£ç¶ãã1b */
+	/* PRE ：32個の連続した1b */
 	for (i = 0; i < 32; i++)
 		phy_write_bit(true);
 
-	/* ST ï¼ãã¬ã¼ã ã®å
-é ­ãç¤ºã01bã®ã©ã¤ã */
-	phy_write_bit(false);
-	phy_write_bit(true);
-
-	/* OP ï¼ã¢ã¯ã»ã¹ç¨®å¥ãç¤ºãã³ã¼ãã®ã©ã¤ã */
-	phy_write_bit(true);
-	phy_write_bit(false);
-
-	/* PHYAD ï¼PHY-LSIã®ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSB ããé æ¬¡ã©ã¤ãï¼ã */
+	/* ST ：フレームの先頭を示す01bのライト */
+	phy_write_bit(false);
+	phy_write_bit(true);
+
+	/* OP ：アクセス種別を示すコードのライト */
+	phy_write_bit(true);
+	phy_write_bit(false);
+
+	/* PHYAD ：PHY-LSIのアドレスが1番の場合、00001bをライト（MSB から順次ライト）。 */
 	phy_write_bit((phy_addr & 0x10) != 0);
 	phy_write_bit((phy_addr & 0x08) != 0);
@@ -218,5 +201,5 @@
 	phy_write_bit((phy_addr & 0x01) != 0);
 
-	/* REGAD ï¼ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSBããé æ¬¡ã©ã¤ãï¼ã */
+	/* REGAD ：レジスタアドレスが1番の場合、00001bをライト（MSBから順次ライト）。 */
 	phy_write_bit((reg_addr & 0x10) != 0);
 	phy_write_bit((reg_addr & 0x08) != 0);
@@ -225,10 +208,9 @@
 	phy_write_bit((reg_addr & 0x01) != 0);
 
-	/* TA ï¼MII/RMIIã¤ã³ã¿ãã§ã¼ã¹ä¸ã§ãã¼ã¿ã®éä¿¡å
-ãåãæ¿ããæé */
-	/* ããã¹è§£æ¾ãï¼Z0ã¨è¡¨è¨ï¼ãè¡ã */
+	/* TA ：MII/RMIIインタフェース上でデータの送信元を切り替える時間 */
+	/* 「バス解放」（Z0と表記）を行う */
 	phy_release_bus();
 
-	/* DATA ï¼16ãããã®ãã¼ã¿ãMSBããé æ¬¡ãªã¼ã */
+	/* DATA ：16ビットのデータ。MSBから順次リード */
 	for (bit = 0x8000; bit != 0; bit >>= 1) {
 		if(phy_read_bit())
@@ -236,8 +218,6 @@
 	}
 
-	/* IDLE ï¼æ¬¡ã®MIIç®¡çãã©ã¼ãããå
-¥åã¾ã§ã®å¾
-æ©æé */
-	/* ãã§ã«TAæã«ãã¹è§£æ¾æ¸ã¿ã§ããå¶å¾¡ä¸è¦ */
+	/* IDLE ：次のMII管理フォーマット入力までの待機時間 */
+	/* すでにTA時にバス解放済みであり制御不要 */
 	phy_release_bus();
 
@@ -250,18 +230,17 @@
 	uint16_t bit;
 
-	/* PRE ï¼32åã®é£ç¶ãã1b */
+	/* PRE ：32個の連続した1b */
 	for (i = 0; i < 32; i++)
 		phy_write_bit(true);
 
-	/* ST ï¼ãã¬ã¼ã ã®å
-é ­ãç¤ºã01bã®ã©ã¤ã */
-	phy_write_bit(false);
-	phy_write_bit(true);
-
-	/* OP ï¼ã¢ã¯ã»ã¹ç¨®å¥ãç¤ºãã³ã¼ãã®ã©ã¤ã */
-	phy_write_bit(false);
-	phy_write_bit(true);
-
-	/* PHYAD ï¼PHY-LSIã®ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSB ããé æ¬¡ã©ã¤ãï¼ã */
+	/* ST ：フレームの先頭を示す01bのライト */
+	phy_write_bit(false);
+	phy_write_bit(true);
+
+	/* OP ：アクセス種別を示すコードのライト */
+	phy_write_bit(false);
+	phy_write_bit(true);
+
+	/* PHYAD ：PHY-LSIのアドレスが1番の場合、00001bをライト（MSB から順次ライト）。 */
 	phy_write_bit((phy_addr & 0x10) != 0);
 	phy_write_bit((phy_addr & 0x08) != 0);
@@ -270,5 +249,5 @@
 	phy_write_bit((phy_addr & 0x01) != 0);
 
-	/* REGAD ï¼ã¬ã¸ã¹ã¿ã¢ãã¬ã¹ã1çªã®å ´åã00001bãã©ã¤ãï¼MSBããé æ¬¡ã©ã¤ãï¼ã */
+	/* REGAD ：レジスタアドレスが1番の場合、00001bをライト（MSBから順次ライト）。 */
 	phy_write_bit((reg_addr & 0x10) != 0);
 	phy_write_bit((reg_addr & 0x08) != 0);
@@ -277,19 +256,16 @@
 	phy_write_bit((reg_addr & 0x01) != 0);
 
-	/* TA ï¼MII/RMIIã¤ã³ã¿ãã§ã¼ã¹ä¸ã§ãã¼ã¿ã®éä¿¡å
-ãåãæ¿ããæé */
-	/* 10bãã©ã¤ã */
-	phy_write_bit(true);
-	phy_write_bit(false);
-
-	/* DATA ï¼16ãããã®ãã¼ã¿ãMSBããé æ¬¡ã©ã¤ã */
+	/* TA ：MII/RMIIインタフェース上でデータの送信元を切り替える時間 */
+	/* 10bをライト */
+	phy_write_bit(true);
+	phy_write_bit(false);
+
+	/* DATA ：16ビットのデータ。MSBから順次ライト */
 	for (bit = 0x8000; bit != 0; bit >>= 1) {
 		phy_write_bit((reg_data & bit) != 0);
 	}
 
-	/* IDLE ï¼æ¬¡ã®MIIç®¡çãã©ã¼ãããå
-¥åã¾ã§ã®å¾
-æ©æé */
-	/* ãåç¬ãã¹è§£æ¾ãï¼Xã¨è¡¨è¨ï¼ãè¡ã */
+	/* IDLE ：次のMII管理フォーマット入力までの待機時間 */
+	/* 「単独バス解放」（Xと表記）を行う */
 	phy_single_rel_bus();
 }
@@ -298,5 +274,5 @@
 
 /*
- * 1 ããããã¼ã¿ã®ã©ã¤ã
+ * 1 ビットデータのライト
  */
 static void phy_write_bit(bool_t bit)
@@ -305,15 +281,15 @@
 	uint32_t data = bit ? ETHERC_PIR_MDO : 0;
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/);
 
 	for(i = ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | ETHERC_PIR_MDC);
 
 	for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, data | ETHERC_PIR_MMD | 0/*ETHERC_PIR_MDC*/);
 
@@ -322,5 +298,5 @@
 
 /*
- * ãã¹è§£æ¾
+ * バス解放
  */
 static void phy_release_bus()
@@ -328,15 +304,15 @@
 	int i;
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/);
 
 	for(i = ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC);
 
 	for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/);
 
@@ -345,5 +321,5 @@
 
 /*
- * 1 ããããã¼ã¿ã®ãªã¼ã
+ * 1 ビットデータのリード
  */
 static bool_t phy_read_bit()
@@ -354,15 +330,15 @@
 	for(i = ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | ETHERC_PIR_MDC);
 
 	for(i = ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	bit = (sil_rew_mem(ETHERC_PIR) & ETHERC_PIR_MDI) != 0;
 
 	for(i = ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/);
 
@@ -373,5 +349,5 @@
 
 /*
- * åç¬ãã¹è§£æ¾
+ * 単独バス解放
  */
 static void phy_single_rel_bus()
@@ -381,10 +357,10 @@
 	for(i = ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, ETHERC_PIR_MMD | ETHERC_PIR_MDC);
 
 	for(i = 2 * ETHERC_PIR_WAIT; i > 0; i--);
 
-	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ã¸ã®ã©ã¤ã */
+	/* PHY部インタフェースレジスタへのライト */
 	sil_wrw_mem(ETHERC_PIR, 0/*ETHERC_PIR_MMD*/ | 0/*ETHERC_PIR_MDC*/);
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/ether_phy.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/ether_phy.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/ether_phy.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.c	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014-2017 by Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -128,6 +113,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããã½ããã¦ã§ã¢æ
-å ± 
+ *  ネットワークインタフェースに依存するソフトウェア情報 
  */
 
@@ -142,10 +126,8 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±
- */
-
-/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããã½ããã¦ã§ã¢æ
-å ± */
+ *  ネットワークインタフェースのソフトウェア情報
+ */
+
+/* ネットワークインタフェースに依存するソフトウェア情報 */
 
 static T_RX62N_SOFTC rx62n_softc;
@@ -167,18 +149,16 @@
 #endif
 
-/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ä¾å­ããªãã½ããã¦ã§ã¢æ
-å ± */
+/* ネットワークインタフェースに依存しないソフトウェア情報 */
 
 T_IF_SOFTC if_softc = {
-	{0,},						/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-	0,							/* éä¿¡ã¿ã¤ã ã¢ã¦ã			*/
-	&rx62n_softc,				/* ãã£ãã¤ã¹ä¾å­ã®ã½ããã¦ã§ã¢æ
-å ±	*/
-	SEM_IF_RX62N_SBUF_READY,	/* éä¿¡ã»ããã©			*/
-	SEM_IF_RX62N_RBUF_READY,	/* åä¿¡ã»ããã©			*/
+	{0,},						/* ネットワークインタフェースのアドレス	*/
+	0,							/* 送信タイムアウト			*/
+	&rx62n_softc,				/* ディバイス依存のソフトウェア情報	*/
+	SEM_IF_RX62N_SBUF_READY,	/* 送信セマフォ			*/
+	SEM_IF_RX62N_RBUF_READY,	/* 受信セマフォ			*/
 
 #ifdef SUPPORT_INET6
 
-	IF_MADDR_INIT,				/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãªã¹ã	*/
+	IF_MADDR_INIT,				/* マルチキャストアドレスリスト	*/
 
 #endif	/* of #ifdef SUPPORT_INET6 */
@@ -186,5 +166,5 @@
 
 /*
- *  å±æå¤æ°
+ *  局所変数
  */
 
@@ -199,5 +179,5 @@
 
 /*
- *  ds_crc -- ã¤ã¼ãµãããã¢ãã¬ã¹ã® CRC ãè¨ç®ããã
+ *  ds_crc -- イーサネットアドレスの CRC を計算する。
  */
 
@@ -227,6 +207,6 @@
 
 /*
- *  ds_getmcaf -- ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ãªã¹ããããã«ãã­ã£ã¹ãã¢ãã¬ã¹
- *                ãã£ã«ã¿ãè¨ç®ããã
+ *  ds_getmcaf -- マルチキャストアドレスのリストからマルチキャストアドレス
+ *                フィルタを計算する。
  */
 
@@ -246,5 +226,5 @@
 
 /*
- * rx62n_setrcr -- åä¿¡æ§æã¬ã¸ã¹ã¿ (RCR) ãè¨­å®ããã
+ * rx62n_setrcr -- 受信構成レジスタ (RCR) を設定する。
  */
 
@@ -256,5 +236,5 @@
 
 /*
- * rx62n_addmulti -- ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãè¿½å ããã
+ * rx62n_addmulti -- マルチキャストアドレスを追加する。
  */
 
@@ -269,8 +249,7 @@
 
 /*
- *  rx62n_stop -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ãåæ­¢ããã
- * 
- *    æ³¨æ: NIC å²ãè¾¼ã¿ç¦æ­¢ç¶æ
-ã§å¼ã³åºããã¨ã
+ *  rx62n_stop -- ネットワークインタフェースを停止する。
+ * 
+ *    注意: NIC 割り込み禁止状態で呼び出すこと。
  */
 
@@ -278,15 +257,14 @@
 rx62n_stop (T_RX62N_SOFTC *sc)
 {
-	/* åä½ã¢ã¼ãã¯ãªã¢ */
+	/* 動作モードクリア */
 	sil_wrw_mem(ETHERC_ECMR, 0x00000000);
-	/* ãªã³ã¯å¤åå²ãè¾¼ã¿ç¡å¹ */
+	/* リンク変化割り込み無効 */
 	sil_wrw_mem(ETHERC_ECSIPR, 0x00000000);
 }
 
 /*
- *  rx62n_init_sub -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®åæå
- * 
- *    æ³¨æ: NIC å²ãè¾¼ã¿ç¦æ­¢ç¶æ
-ã§å¼ã³åºããã¨ã
+ *  rx62n_init_sub -- ネットワークインタフェースの初期化
+ * 
+ *    注意: NIC 割り込み禁止状態で呼び出すこと。
  */
 
@@ -298,5 +276,5 @@
 	PHY_STATE_T state = PHY_STATE_UNINIT;
 
-	/* MACé¨ã½ããã¦ã¨ã¢ã»ãªã»ãã */
+	/* MAC部ソフトウエア・リセット */
 	sil_wrw_mem(EDMAC_EDMR, sil_rew_mem(EDMAC_EDMR) | EDMAC_EDMR_SWR_BIT);
 
@@ -309,5 +287,5 @@
 		| (uint32_t)mac_addr[5]);
 
-	/* PHYãªã»ãã */
+	/* PHYリセット */
 	while ((state = phy_reset(state, 0)) != PHY_STATE_RESET);
 	sc->state = state;
@@ -316,5 +294,5 @@
 	sil_wrw_mem(ETHERC_ECSR, 0x00000037);
 
-	/* ãªã³ã¯å¤åå²ãè¾¼ã¿æå¹ */
+	/* リンク変化割り込み有効 */
 	sil_wrw_mem(ETHERC_ECSIPR, sil_rew_mem(ETHERC_ECSIPR) | ETHERC_ECSIPR_LCHNGIP);
 
@@ -322,11 +300,11 @@
 	sil_wrw_mem(EDMAC_EESR, 0x47FF0F9F);
 
-	/* éåä¿¡å²ãè¾¼ã¿æå¹ */
+	/* 送受信割り込み有効 */
 	sil_wrw_mem(EDMAC_EESIPR, (EDMAC_EESIPR_TCIP | EDMAC_EESIPR_FRIP | EDMAC_EESIPR_RDEIP | EDMAC_EESIPR_FROFIP));
 
-	/* åä¿¡ãã¬ã¼ã é·ä¸éï¼ãããã¡ãµã¤ãºï¼ */
+	/* 受信フレーム長上限（バッファサイズ） */
 	sil_wrw_mem(ETHERC_RFLR, IF_RX62N_BUF_PAGE_SIZE);
 
-	/* 96ãããæéï¼åæå¤ï¼ */
+	/* 96ビット時間（初期値） */
 	sil_wrw_mem(ETHERC_IPGR, 0x00000014);
 
@@ -352,12 +330,12 @@
 #if defined(TARGET_KERNEL_ASP)
 
-	/* ã¿ã¼ã²ããä¾å­é¨ã®å²è¾¼ã¿åæå */
+	/* ターゲット依存部の割込み初期化 */
 	rx62n_inter_init();
 
 #endif	/* of #if defined(TARGET_KERNEL_ASP) */
 
-#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 ä»¥é */
-
-	/* ã¿ã¼ã²ããä¾å­é¨ã®å²è¾¼ã¿åæå */
+#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 以降 */
+
+	/* ターゲット依存部の割込み初期化 */
 	rx62n_inter_init();
 
@@ -367,5 +345,5 @@
 
 /*
- *  rx62n_set_ecmr -- ECMRã¬ã¸ã¹ã¿ã®è¨­å®
+ *  rx62n_set_ecmr -- ECMRレジスタの設定
  */
 
@@ -382,10 +360,10 @@
 		ecmr |= ETHERC_ECMR_RTM;
 
-	/* åä½ã¢ã¼ãè¨­å® */
+	/* 動作モード設定 */
 	sil_wrw_mem(ETHERC_ECMR, ecmr);
 }
 
 /*
- * rx62n_reset -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããªã»ããããã
+ * rx62n_reset -- ネットワークインタフェースをリセットする。
  */
 
@@ -397,5 +375,5 @@
 #endif
 
-	/* NIC ããã®å²ãè¾¼ã¿ãç¦æ­¢ããã*/
+	/* NIC からの割り込みを禁止する。*/
 #ifdef TARGET_KERNEL_JSP
 	ipm = rx62n_dis_inter();
@@ -414,8 +392,8 @@
 	}
 
-	/* éåä¿¡ãæå¹ */
+	/* 送受信を有効 */
 	rx62n_set_ecmr(ic, 1);
 
-	/* NIC ããã®å²ãè¾¼ã¿ãè¨±å¯ããã*/
+	/* NIC からの割り込みを許可する。*/
 #ifdef TARGET_KERNEL_JSP
 	rx62n_ena_inter(ipm);
@@ -427,6 +405,5 @@
 
 /*
- *  get_rx62n_softc -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ
-å ±ãè¿ãã
+ *  get_rx62n_softc -- ネットワークインタフェースのソフトウェア情報を返す。
  */
 
@@ -438,5 +415,5 @@
 
 /*
- * rx62n_watchdog -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¯ããããã°ã¿ã¤ã ã¢ã¦ã
+ * rx62n_watchdog -- ネットワークインタフェースのワッチドッグタイムアウト
  */
 
@@ -448,5 +425,5 @@
 
 /*
- * rx62n_probe -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®æ¤åº
+ * rx62n_probe -- ネットワークインタフェースの検出
  */
 
@@ -457,11 +434,11 @@
 #if defined(TARGET_KERNEL_ASP)
 
-	/* ã¿ã¼ã²ããä¾å­é¨ã®ãã¹ã®åæå */
+	/* ターゲット依存部のバスの初期化 */
 	rx62n_bus_init();
 
 #endif	/* of #if defined(TARGET_KERNEL_ASP) */
-#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 ä»¥é */
-
-	/* ã¿ã¼ã²ããä¾å­é¨ã®ãã¹ã®åæå */
+#if defined(TARGET_KERNEL_JSP) && TKERNEL_PRVER >= 0x1042u	/* JSP-1.4.2 以降 */
+
+	/* ターゲット依存部のバスの初期化 */
 	rx62n_bus_init();
 
@@ -472,5 +449,5 @@
 
 /*
- * rx62n_init -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®åæå
+ * rx62n_init -- ネットワークインタフェースの初期化
  */
 
@@ -486,5 +463,5 @@
 	int i;
 
-	/* NIC ããã®å²ãè¾¼ã¿ãç¦æ­¢ããã*/
+	/* NIC からの割り込みを禁止する。*/
 #ifdef TARGET_KERNEL_JSP
 	ipm = rx62n_dis_inter();
@@ -518,5 +495,5 @@
 	rdsc->rdle = 1;
 
-	/* rx62n_init æ¬ä½ãå¼ã³åºãã*/
+	/* rx62n_init 本体を呼び出す。*/
 	rx62n_init_sub(ic);
 
@@ -525,8 +502,8 @@
 	}
 
-	/* éåä¿¡ãæå¹ */
+	/* 送受信を有効 */
 	rx62n_set_ecmr(ic, 1);
 
-	/* NIC ããã®å²ãè¾¼ã¿ãè¨±å¯ããã*/
+	/* NIC からの割り込みを許可する。*/
 #ifdef TARGET_KERNEL_JSP
 	rx62n_ena_inter(ipm);
@@ -541,6 +518,5 @@
 
 /* 
- * rx62n_link -- ãªã³ã¯ç¶æ
-ã®å¤åã«å¯¾ããå¦ç
+ * rx62n_link -- リンク状態の変化に対する処理
  */
 bool_t
@@ -557,5 +533,5 @@
 	}
 
-	/* PHYã®åæå */
+	/* PHYの初期化 */
 	sc->state = phy_initialize(sc->state, phy_addr, &mode);
 	if(sc->state != PHY_STATE_NEGOTIATED){
@@ -563,5 +539,5 @@
 	}
 
-	/* ECMRã¬ã¸ã¹ã¿ã®è¨­å® */
+	/* ECMRレジスタの設定 */
 	rx62n_set_ecmr(ic, mode);
 	return true;
@@ -569,5 +545,5 @@
 
 /*
- * rx62n_read -- ãã¬ã¼ã ã®èª­ã¿è¾¼ã¿
+ * rx62n_read -- フレームの読み込み
  */
 
@@ -587,6 +563,5 @@
 	if (sc->link_pre != sc->link_now) {
 		sc->link_pre = sc->link_now;
-		/* ãªã³ã¯ç¶æ
-ã«å¤åãã */
+		/* リンク状態に変化あり */
 		if (sc->link_now) {
 			ether_set_link_up();
@@ -615,10 +590,9 @@
 	 *   <----------------- len ---------------->
 	 *              ^
-	 *              t_net_buf ã§ 4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã
+	 *              t_net_buf で 4 オクテット境界にアラインされている。
 	 *
-	 *  tcp_input ã¨ udp_input ã§ã¯ãæ¬ä¼¼ãããã¨ SDU ã§ãã§ãã¯ãµã ã
-	 *  è¨ç®ããããn ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã
-	 *  ãããã£ã³ã°ããããã®åãèæ
-®ãã¦ net_buf ãç²å¾ããªããã°ãªããªãã
+	 *  tcp_input と udp_input では、擬似ヘッダと SDU でチェックサムを
+	 *  計算するが、n が 4 オクテット境界になるように SDU の後ろに 0 を
+	 *  パッディングする。その分を考慮して net_buf を獲得しなければならない。
 	 */
 	align = ((((len - sizeof(T_IF_HDR)) + 3) >> 2) << 2) + sizeof(T_IF_HDR);
@@ -650,5 +624,5 @@
 
 /*
- * rx62n_start -- éä¿¡ãã¬ã¼ã ããããã¡ãªã³ã°ããã
+ * rx62n_start -- 送信フレームをバッファリングする。
  */
 
@@ -701,5 +675,5 @@
 
 /*
- *  RX62N Ethernet Controler éåä¿¡å²ãè¾¼ã¿ãã³ãã©
+ *  RX62N Ethernet Controler 送受信割り込みハンドラ
  */
 
@@ -717,8 +691,8 @@
 
 	if (ecsr & ETHERC_ECSR_LCHNG) {
-		/* ETHERCé¨å²ãè¾¼ã¿è¦å ã¯ãªã¢ */
+		/* ETHERC部割り込み要因クリア */
 		sil_wrw_mem(ETHERC_ECSR, ETHERC_ECSR_LCHNG);
 
-		/* åä¿¡å²ãè¾¼ã¿å¦ç */
+		/* 受信割り込み処理 */
 		isig_sem(ic->semid_rxb_ready);
 	}
@@ -727,24 +701,24 @@
 
 	if (eesr & EDMAC_EESR_FR) {
-		/* DMAé¨å²ãè¾¼ã¿è¦å ã¯ãªã¢ */
+		/* DMA部割り込み要因クリア */
 		sil_wrw_mem(EDMAC_EESR, EDMAC_EESR_FR);
 
-		/* åä¿¡å²ãè¾¼ã¿å¦ç */
+		/* 受信割り込み処理 */
 		isig_sem(ic->semid_rxb_ready);
 	}
 	if (eesr & EDMAC_EESR_TC) {
-		/* DMAé¨å²ãè¾¼ã¿è¦å ã¯ãªã¢ */
+		/* DMA部割り込み要因クリア */
 		sil_wrw_mem(EDMAC_EESR, EDMAC_EESR_TC);
 
-		/* éä¿¡å²ãè¾¼ã¿å¦ç */
+		/* 送信割り込み処理 */
 		isig_sem(ic->semid_txb_ready);
 	}
 	if (eesr & (EDMAC_EESR_FROF | EDMAC_EESR_RDE)) {
-		/* DMAé¨å²ãè¾¼ã¿è¦å ã¯ãªã¢ */
+		/* DMA部割り込み要因クリア */
 		sil_wrw_mem(EDMAC_EESR, EDMAC_EESR_FROF | EDMAC_EESR_RDE);
 
 		sc->over_flow = true;
 
-		/* åä¿¡å²ãè¾¼ã¿å¦ç */
+		/* 受信割り込み処理 */
 		isig_sem(ic->semid_rxb_ready);
 	}
@@ -759,5 +733,5 @@
 	sc = ic->sc;
 
-	/* åä¿¡å²ãè¾¼ã¿å¦ç */
+	/* 受信割り込み処理 */
 	isig_sem(ic->semid_rxb_ready);
 }
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.cfg	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *  if_rx62n ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  if_rx62n コンフィギュレーションファイル
  */
 
@@ -61,15 +46,14 @@
 INCLUDE("<if_rx62nreg.h>");
 
-/* å²ãè¾¼ã¿ãã³ãã© */
+/* 割り込みハンドラ */
 
 DEF_INH(INHNO_IF_RX62N_TRX, { TA_HLNG, if_rx62n_trx_handler });
 
-/* å
-¥åºååæç¨ã»ããã© */
+/* 入出力同期用セマフォ */
 
 CRE_SEM(SEM_IF_RX62N_SBUF_READY,	{ TA_TPRI, NUM_IF_RX62N_TXBUF, NUM_IF_RX62N_TXBUF });
 CRE_SEM(SEM_IF_RX62N_RBUF_READY,	{ TA_TPRI, 0,                  NUM_IF_RX62N_RXBUF });
 
-/* ãªã³ã¯ç¢ºèªç¨å¨æãã³ãã© */
+/* リンク確認用周期ハンドラ */
 
 CRE_CYC(CYC_IF_RX62N_LINK, { TA_NULL, 0, if_rx62n_cyclic_handler, 1000, 0 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62n.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -66,5 +51,5 @@
 
 /*
- *  NIC ã®é¸æãã¯ã­
+ *  NIC の選択マクロ
  */
 
@@ -79,14 +64,13 @@
 #define T_IF_ETHER_NIC_SOFTC		struct t_rx62n_softc
 
-/* IPv6 é¢ä¿ */
+/* IPv6 関係 */
 
-#define IF_ETHER_NIC_IN6_IFID(i,a)	get_mac6_ifid(i,a)	/* ã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ã®è¨­å®		*/
-#define IF_ETHER_NIC_ADDMULTI(s)	rx62n_addmulti(s)		/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ç»é²		*/
+#define IF_ETHER_NIC_IN6_IFID(i,a)	get_mac6_ifid(i,a)	/* インタフェース識別子の設定		*/
+#define IF_ETHER_NIC_ADDMULTI(s)	rx62n_addmulti(s)		/* マルチキャストアドレスの登録		*/
 
 #if !defined(TOPPERS_MACRO_ONLY) && !defined(_MACRO_ONLY)
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -108,5 +92,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62nreg.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62nreg.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/if_rx62nreg.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014-2015 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -58,20 +43,18 @@
 #include "t_stddef.h"
 
-#define EDMAC_EDMR			((uint32_t *)0x000C0000)	/* EDMACã¢ã¼ãã¬ã¸ã¹ã¿ */
+#define EDMAC_EDMR			((uint32_t *)0x000C0000)	/* EDMACモードレジスタ */
 #define EDMAC_EDMR_SWR_BIT	0x00000001
 #define EDMAC_EDMR_DE_BIT	0x00000040
 
-#define EDMAC_EDTRR			((uint32_t *)0x000C0008)	/* EDMACéä¿¡è¦æ±ã¬ã¸ã¹ã¿ */
+#define EDMAC_EDTRR			((uint32_t *)0x000C0008)	/* EDMAC送信要求レジスタ */
 #define EDMAC_EDTRR_TR		0x00000001
 
-#define EDMAC_EDRRR			((uint32_t *)0x000C0010)	/* EDMACåä¿¡è¦æ±ã¬ã¸ã¹ã¿ */
+#define EDMAC_EDRRR			((uint32_t *)0x000C0010)	/* EDMAC受信要求レジスタ */
 #define EDMAC_EDRRR_RR		0x00000001
 
-#define EDMAC_TDLAR			((uint32_t *)0x000C0018)	/* éä¿¡ãã£ã¹ã¯ãªãã¿ãªã¹ãå
-é ­ã¢ãã¬ã¹ã¬ã¸ã¹ã¿ */
-#define EDMAC_RDLAR			((uint32_t *)0x000C0020)	/* åä¿¡ãã£ã¹ã¯ãªãã¿ãªã¹ãå
-é ­ã¢ãã¬ã¹ã¬ã¸ã¹ã¿ */
+#define EDMAC_TDLAR			((uint32_t *)0x000C0018)	/* 送信ディスクリプタリスト先頭アドレスレジスタ */
+#define EDMAC_RDLAR			((uint32_t *)0x000C0020)	/* 受信ディスクリプタリスト先頭アドレスレジスタ */
 
-#define EDMAC_EESR			((uint32_t *)0x000C0028)	/* ETHERC/EDMACã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ */
+#define EDMAC_EESR			((uint32_t *)0x000C0028)	/* ETHERC/EDMACステータスレジスタ */
 #define EDMAC_EESR_FROF		0x00010000
 #define EDMAC_EESR_RDE		0x00020000
@@ -80,5 +63,5 @@
 #define EDMAC_EESR_TWB		0x40000000
 
-#define EDMAC_EESIPR		((uint32_t *)0x000C0030)	/* ETHERC/EDMACã¹ãã¼ã¿ã¹å²ãè¾¼ã¿è¨±å¯ã¬ã¸ã¹ã¿ */
+#define EDMAC_EESIPR		((uint32_t *)0x000C0030)	/* ETHERC/EDMACステータス割り込み許可レジスタ */
 #define EDMAC_EESIPR_RMAFIP	0x00000080
 #define EDMAC_EESIPR_FROFIP	0x00010000
@@ -88,22 +71,21 @@
 #define EDMAC_EESIPR_TWBIP	0x40000000
 
-#define EDMAC_TRSCER		((uint32_t *)0x000C0038)	/* éåä¿¡ã¹ãã¼ã¿ã¹ã³ãã¼æç¤ºã¬ã¸ã¹ã¿ */
-#define EDMAC_RMFCR			((uint32_t *)0x000C0040)	/* ãã¹ããã¬ã¼ã ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define EDMAC_TFTR			((uint32_t *)0x000C0048)	/* éä¿¡FIFOãããå¤æå®ã¬ã¸ã¹ã¿ */
-#define EDMAC_FDR			((uint32_t *)0x000C0050)	/* FIFOå®¹éæå®ã¬ã¸ã¹ã¿ */
-#define EDMAC_RMCR			((uint32_t *)0x000C0058)	/* åä¿¡æ¹å¼å¶å¾¡ã¬ã¸ã¹ã¿ */
-#define EDMAC_TFUCR			((uint32_t *)0x000C0064)	/* éä¿¡FIFOã¢ã³ãã©ã³ã«ã¦ã³ã */
-#define EDMAC_RFOCR			((uint32_t *)0x000C0068)	/* åä¿¡FIFOãªã¼ããã­ã¼ã«ã¦ã³ã */
-#define EDMAC_IOSR			((uint32_t *)0x000C006C)	/* åå¥åºåä¿¡å·è¨­å®ã¬ã¸ã¹ã¿ */
-#define EDMAC_FCFTR			((uint32_t *)0x000C0070)	/* ãã­ã¼å¶å¾¡éå§FIFOãããå¤è¨­å®ã¬ã¸ã¹ã¿ */
-#define EDMAC_RPADIR		((uint32_t *)0x000C0078)	/* åä¿¡ãã¼ã¿ããã£ã³ã°æ¿å
-¥è¨­å®ã¬ã¸ã¹ã¿ */
-#define EDMAC_TRIMD			((uint32_t *)0x000C007C)	/* éä¿¡å²ãè¾¼ã¿è¨­å®ã¬ã¸ã¹ã¿ */
-#define EDMAC_RBWAR			((uint32_t *)0x000C00C8)	/* åä¿¡ãããã¡ã©ã¤ãã¢ãã¬ã¹ã¬ã¸ã¹ã¿ */
-#define EDMAC_RDFAR			((uint32_t *)0x000C00CC)	/* åä¿¡ãã£ã¹ã¯ãªãã¿ãã§ããã¢ãã¬ã¹ã¬ã¸ã¹ã¿ */
-#define EDMAC_TBRAR			((uint32_t *)0x000C00D4)	/* éä¿¡ãããã¡ãªã¼ãã¢ãã¬ã¹ã¬ã¸ã¹ã¿ */
-#define EDMAC_TDFAR			((uint32_t *)0x000C00D8)	/* éä¿¡ãã£ã¹ã¯ãªãã¿ãã§ããã¢ãã¬ã¹ã¬ã¸ã¹ã¿ */
+#define EDMAC_TRSCER		((uint32_t *)0x000C0038)	/* 送受信ステータスコピー指示レジスタ */
+#define EDMAC_RMFCR			((uint32_t *)0x000C0040)	/* ミスドフレームカウンタレジスタ */
+#define EDMAC_TFTR			((uint32_t *)0x000C0048)	/* 送信FIFOしきい値指定レジスタ */
+#define EDMAC_FDR			((uint32_t *)0x000C0050)	/* FIFO容量指定レジスタ */
+#define EDMAC_RMCR			((uint32_t *)0x000C0058)	/* 受信方式制御レジスタ */
+#define EDMAC_TFUCR			((uint32_t *)0x000C0064)	/* 送信FIFOアンダランカウント */
+#define EDMAC_RFOCR			((uint32_t *)0x000C0068)	/* 受信FIFOオーバフローカウント */
+#define EDMAC_IOSR			((uint32_t *)0x000C006C)	/* 個別出力信号設定レジスタ */
+#define EDMAC_FCFTR			((uint32_t *)0x000C0070)	/* フロー制御開始FIFOしきい値設定レジスタ */
+#define EDMAC_RPADIR		((uint32_t *)0x000C0078)	/* 受信データパディング挿入設定レジスタ */
+#define EDMAC_TRIMD			((uint32_t *)0x000C007C)	/* 送信割り込み設定レジスタ */
+#define EDMAC_RBWAR			((uint32_t *)0x000C00C8)	/* 受信バッファライトアドレスレジスタ */
+#define EDMAC_RDFAR			((uint32_t *)0x000C00CC)	/* 受信ディスクリプタフェッチアドレスレジスタ */
+#define EDMAC_TBRAR			((uint32_t *)0x000C00D4)	/* 送信バッファリードアドレスレジスタ */
+#define EDMAC_TDFAR			((uint32_t *)0x000C00D8)	/* 送信ディスクリプタフェッチアドレスレジスタ */
 
-#define ETHERC_ECMR			((uint32_t *)0x000C0100)	/* ETHERCã¢ã¼ãã¬ã¸ã¹ã¿ */
+#define ETHERC_ECMR			((uint32_t *)0x000C0100)	/* ETHERCモードレジスタ */
 #define ETHERC_ECMR_PRM		0x00000001
 #define ETHERC_ECMR_DM		0x00000002
@@ -112,10 +94,10 @@
 #define ETHERC_ECMR_RE		0x00000040
 
-#define ETHERC_RFLR			((uint32_t *)0x000C0108)	/* åä¿¡ãã¬ã¼ã é·ä¸éã¬ã¸ã¹ã¿ */
-#define ETHERC_ECSR			((uint32_t *)0x000C0110)	/* ETHERCã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ */
+#define ETHERC_RFLR			((uint32_t *)0x000C0108)	/* 受信フレーム長上限レジスタ */
+#define ETHERC_ECSR			((uint32_t *)0x000C0110)	/* ETHERCステータスレジスタ */
 #define ETHERC_ECSR_LCHNG	0x00000004
-#define ETHERC_ECSIPR		((uint32_t *)0x000C0118)	/* ETHERCå²ãè¾¼ã¿è¨±å¯ã¬ã¸ã¹ã¿ */
+#define ETHERC_ECSIPR		((uint32_t *)0x000C0118)	/* ETHERC割り込み許可レジスタ */
 #define ETHERC_ECSIPR_LCHNGIP	0x00000004
-#define ETHERC_PIR			((uint32_t *)0x000C0120)	/* PHYé¨ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¸ã¹ã¿ */
+#define ETHERC_PIR			((uint32_t *)0x000C0120)	/* PHY部インタフェースレジスタ */
 #define ETHERC_PIR_MDC		0x00000001
 #define ETHERC_PIR_MMD		0x00000002
@@ -123,31 +105,29 @@
 #define ETHERC_PIR_MDI		0x00000008
 
-#define ETHERC_PSR			((uint32_t *)0x000C0128)	/* PHYé¨ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ */
+#define ETHERC_PSR			((uint32_t *)0x000C0128)	/* PHY部ステータスレジスタ */
 #define ETHERC_PSR_LMON		0x00000001
 
-#define ETHERC_RDMLR		((uint32_t *)0x000C0140)	/* ä¹±æ°çæã«ã¦ã³ã¿ä¸éå¤è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_IPGR			((uint32_t *)0x000C0150)	/* IPGè¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_APR			((uint32_t *)0x000C0154)	/* èªåPAUSEãã¬ã¼ã è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_MPR			((uint32_t *)0x000C0158)	/* æåPAUSEãã¬ã¼ã è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_RFCF			((uint32_t *)0x000C0160)	/* åä¿¡PAUSEãã¬ã¼ã ã«ã¦ã³ã¿ */
-#define ETHERC_TPAUSER		((uint32_t *)0x000C0164)	/* èªåPAUSEãã¬ã¼ã åéåæ°è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_TPAUSECR		((uint32_t *)0x000C0168)	/* PAUSEãã¬ã¼ã åéåæ°ã«ã¦ã³ã¿ */
-#define ETHERC_BCFRR		((uint32_t *)0x000C016C)	/* Broadcastãã¬ã¼ã åä¿¡åæ°è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_MAHR			((uint32_t *)0x000C01C0)	/* MACã¢ãã¬ã¹ä¸ä½è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_MALR			((uint32_t *)0x000C01C8)	/* MACã¢ãã¬ã¹ä¸ä½è¨­å®ã¬ã¸ã¹ã¿ */
-#define ETHERC_TROCR		((uint32_t *)0x000C01D0)	/* éä¿¡ãªãã©ã¤ãªã¼ãã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_CDCR			((uint32_t *)0x000C01D4)	/* é
-å»¶è¡çªæ¤åºã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_LCCR			((uint32_t *)0x000C01D8)	/* ã­ã£ãªã¢æ¶å¤±ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_CNDCR		((uint32_t *)0x000C01DC)	/* ã­ã£ãªã¢æªæ¤åºã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_CEFCR		((uint32_t *)0x000C01E4)	/* CRCã¨ã©ã¼ãã¬ã¼ã åä¿¡ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_FRECR		((uint32_t *)0x000C01E8)	/* ãã¬ã¼ã åä¿¡ã¨ã©ã¼ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_TSFRCR		((uint32_t *)0x000C01EC)	/* 64ãã¤ãæªæºãã¬ã¼ã åä¿¡ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_TLFRCR		((uint32_t *)0x000C01F0)	/* æå®ãã¤ãè¶
-ãã¬ã¼ã åä¿¡ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_RFCR			((uint32_t *)0x000C01F4)	/* ç«¯æ°ããããã¬ã¼ã åä¿¡ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
-#define ETHERC_MAFCR		((uint32_t *)0x000C01F8)	/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãã¬ã¼ã åä¿¡ã«ã¦ã³ã¿ã¬ã¸ã¹ã¿ */
+#define ETHERC_RDMLR		((uint32_t *)0x000C0140)	/* 乱数生成カウンタ上限値設定レジスタ */
+#define ETHERC_IPGR			((uint32_t *)0x000C0150)	/* IPG設定レジスタ */
+#define ETHERC_APR			((uint32_t *)0x000C0154)	/* 自動PAUSEフレーム設定レジスタ */
+#define ETHERC_MPR			((uint32_t *)0x000C0158)	/* 手動PAUSEフレーム設定レジスタ */
+#define ETHERC_RFCF			((uint32_t *)0x000C0160)	/* 受信PAUSEフレームカウンタ */
+#define ETHERC_TPAUSER		((uint32_t *)0x000C0164)	/* 自動PAUSEフレーム再送回数設定レジスタ */
+#define ETHERC_TPAUSECR		((uint32_t *)0x000C0168)	/* PAUSEフレーム再送回数カウンタ */
+#define ETHERC_BCFRR		((uint32_t *)0x000C016C)	/* Broadcastフレーム受信回数設定レジスタ */
+#define ETHERC_MAHR			((uint32_t *)0x000C01C0)	/* MACアドレス上位設定レジスタ */
+#define ETHERC_MALR			((uint32_t *)0x000C01C8)	/* MACアドレス下位設定レジスタ */
+#define ETHERC_TROCR		((uint32_t *)0x000C01D0)	/* 送信リトライオーバカウンタレジスタ */
+#define ETHERC_CDCR			((uint32_t *)0x000C01D4)	/* 遅延衝突検出カウンタレジスタ */
+#define ETHERC_LCCR			((uint32_t *)0x000C01D8)	/* キャリア消失カウンタレジスタ */
+#define ETHERC_CNDCR		((uint32_t *)0x000C01DC)	/* キャリア未検出カウンタレジスタ */
+#define ETHERC_CEFCR		((uint32_t *)0x000C01E4)	/* CRCエラーフレーム受信カウンタレジスタ */
+#define ETHERC_FRECR		((uint32_t *)0x000C01E8)	/* フレーム受信エラーカウンタレジスタ */
+#define ETHERC_TSFRCR		((uint32_t *)0x000C01EC)	/* 64バイト未満フレーム受信カウンタレジスタ */
+#define ETHERC_TLFRCR		((uint32_t *)0x000C01F0)	/* 指定バイト超フレーム受信カウンタレジスタ */
+#define ETHERC_RFCR			((uint32_t *)0x000C01F4)	/* 端数ビットフレーム受信カウンタレジスタ */
+#define ETHERC_MAFCR		((uint32_t *)0x000C01F8)	/* マルチキャストアドレスフレーム受信カウンタレジスタ */
 
-/* éä¿¡ãã£ã¹ã¯ãªãã¿ */
+/* 送信ディスクリプタ */
 typedef struct t_rx62n_tx_desc {
 	uint32_t	tfs : 26;
@@ -163,5 +143,5 @@
 } T_RX62N_TX_DESC;
 
-/* åä¿¡ãã£ã¹ã¯ãªãã¿ */
+/* 受信ディスクリプタ */
 typedef struct t_rx62n_rx_desc {
 	uint32_t	rfs : 27;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic.cfg	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic_asp.cfg	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,5 +39,5 @@
 
 /*
- *  if_rx62n ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  if_rx62n コンフィギュレーションファイル
  */
 
@@ -61,16 +46,15 @@
 #include "if_rx62nreg.h"
 
-/* å²ãè¾¼ã¿ãã³ãã© */
+/* 割り込みハンドラ */
 
 DEF_INH(INHNO_IF_RX62N_TRX, { TA_NULL, if_rx62n_trx_handler });
 CFG_INT(INTNO_IF_RX62N_TRX, { INTATR_IF_RX62N_TRX, INTPRI_IF_RX62N_TRX });
 
-/* å
-¥åºååæç¨ã»ããã© */
+/* 入出力同期用セマフォ */
 
 CRE_SEM(SEM_IF_RX62N_SBUF_READY,	{ TA_TPRI, NUM_IF_RX62N_TXBUF, NUM_IF_RX62N_TXBUF });
 CRE_SEM(SEM_IF_RX62N_RBUF_READY,	{ TA_TPRI, 0,                  NUM_IF_RX62N_RXBUF });
 
-/* ãªã³ã¯ç¢ºèªç¨å¨æãã³ãã© */
+/* リンク確認用周期ハンドラ */
 
 CRE_CYC(CYC_IF_RX62N_LINK, { TA_NULL, { TNFY_HANDLER, 0, if_rx62n_cyclic_handler }, 1000000, 0 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic_rename.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic_rename.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/nic_rename.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -57,6 +42,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹å
-é¨åã®ãªãã¼ã 
+ *  ネットワークインタフェース内部名のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/tinet_nic_config.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/tinet_nic_config.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/tinet_nic_config.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -57,6 +42,5 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®å
-é¨è­å¥åã®ãªãã¼ã 
+ *  ネットワークインタフェースの内部識別名のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/tinet_nic_defs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/tinet_nic_defs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netdev/if_rx62n/tinet_nic_defs.h	(revision 389)
@@ -6,47 +6,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -59,6 +44,6 @@
 
 /* 
- *  T_ETHER_HDR ã§ãã¢ã©ã¤ã³ãèª¿æ´ããå ´åã¯ãèª¿æ´éãæå®ããã
- *  èª¿æ´ããªãå ´åã¯ã0 ãæå®ããã
+ *  T_ETHER_HDR で、アラインを調整する場合は、調整量を指定する。
+ *  調整しない場合は、0 を指定する。
  */
 #define IF_ETHER_NIC_HDR_ALIGN		0
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp6.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -115,11 +103,11 @@
 
 /*
- *  ICMPv6 ããã
+ *  ICMPv6 ヘッダ
  */
 
 typedef struct t_icmp6_hdr {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		code;		/* ãµãå		*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		code;		/* サブ型		*/
+	uint16_t	sum;		/* チェックサム		*/
 	union {
 		uint32_t	data32;
@@ -132,8 +120,8 @@
 #define icmp6_data16			data.data16
 #define icmp6_data8			data.data8
-#define icmp6_pptr			data.data32		/* ãã©ã¡ã¼ã¿ç°å¸¸	*/
-#define icmp6_mtu			data.data32		/* ãã©ã¡ã¼ã¿ç°å¸¸	*/
-#define icmp6_id			data.data16[0]		/* ã¨ã³ã¼è¦æ±ã¨å¿ç­	*/
-#define icmp6_seq			data.data16[1]		/* ã¨ã³ã¼è¦æ±ã¨å¿ç­	*/
+#define icmp6_pptr			data.data32		/* パラメータ異常	*/
+#define icmp6_mtu			data.data32		/* パラメータ異常	*/
+#define icmp6_id			data.data16[0]		/* エコー要求と応答	*/
+#define icmp6_seq			data.data16[1]		/* エコー要求と応答	*/
 
 #define ICMP6_HDR_SIZE			(sizeof(T_ICMP6_HDR))
@@ -147,98 +135,79 @@
 
 /*
- *  ICMP6 ã¿ã¤ã
- */
-
-#define ICMP6_DST_UNREACH		UINT_C(1)	/* å®å
-å°éä¸å¯è½		*/
-#define ICMP6_PACKET_TOO_BIG		UINT_C(2)	/* ãã±ãããå¤§ããããã	*/
-#define ICMP6_TIME_EXCEEDED		UINT_C(3)	/* TTL ãè¶
-éããã		*/
-#define ICMP6_PARAM_PROB		UINT_C(4)	/* IPv6 ããããä¸æ­£ã		*/
-
-#define ICMP6_ECHO_REQUEST		UINT_C(128)	/* ã¨ã³ã¼è¦æ±			*/
-#define ICMP6_ECHO_REPLY		UINT_C(129)	/* ã¨ã³ã¼å¿ç­			*/
-
-#define ICMP6_MEMBERSHIP_QUERY		UINT_C(130)	/* ã°ã«ã¼ãã¡ã³ãç
-§ä¼		*/
-#define ICMP6_MEMBERSHIP_REPORT		UINT_C(131)	/* ã°ã«ã¼ãã¡ã³ãå ±å		*/
-#define ICMP6_MEMBERSHIP_REDUCTION	UINT_C(132)	/* ã°ã«ã¼ãã¡ã³ãçµäº		*/
-
-#define MLD_LISTENER_QUERY		UINT_C(130)	/* ãã«ãã­ã£ã¹ãåä¿¡è
-ç
-§ä¼	*/
-#define MLD_LISTENER_REPORT		UINT_C(131)	/* ãã«ãã­ã£ã¹ãåä¿¡è
-å ±å	*/
-#define MLD_LISTENER_DONE		UINT_C(132)	/* ãã«ãã­ã£ã¹ãåä¿¡è
-çµäº	*/
-
-#define ND_ROUTER_SOLICIT		UINT_C(133)	/* ã«ã¼ã¿è¦è«			*/
-#define ND_ROUTER_ADVERT		UINT_C(134)	/* ã«ã¼ã¿éç¥			*/
-#define ND_NEIGHBOR_SOLICIT		UINT_C(135)	/* è¿é£è¦è«			*/
-#define ND_NEIGHBOR_ADVERT		UINT_C(136)	/* è¿é£éç¥			*/
-#define ND_REDIRECT			UINT_C(137)	/* åãç´ã			*/
-
-#define ICMP6_ROUTER_RENUMBERING	UINT_C(138)	/* ã«ã¼ã¿çªå·åè¨­å®		*/
-
-#define ICMP6_WRU_REQUEST		UINT_C(139)	/* è¦æ±ãã¼ãæ¢ç´¢		*/
-#define ICMP6_WRU_REPLY			UINT_C(140)	/* å¿ç­ãã¼ãæ¢ç´¢		*/
-
-#define ICMP6_FQDN_QUERY		UINT_C(139)	/* FQDN ç
-§ä¼			*/
-#define ICMP6_FQDN_REPLY		UINT_C(140)	/* FQDN å¿ç­			*/
-
-#define ICMP6_NI_QUERY			UINT_C(139)	/* ãã¼ãæ
-å ±ç
-§ä¼		*/
-#define ICMP6_NI_REPLY			UINT_C(140)	/* ãã¼ãæ
-å ±å¿ç­		*/
-
-#define ICMP6_MAX_TYPE			UINT_C(203)	/* ICMP6 ã¿ã¤ãã®æå¤§å¤		*/
-
-/*
- *  ICMP6 ã³ã¼ã
- */
-
-/* å®å
-å°éä¸å¯è½ */
-
-#define ICMP6_DST_UNREACH_NOROUTE	UINT_C(0)	/* å°éã«ã¼ããªãã		*/
-#define ICMP6_DST_UNREACH_ADMIN		UINT_C(1)	/* ç®¡çè
-ã«ããç¡å¹åä¸­ã	*/
-#define ICMP6_DST_UNREACH_NOTEIGHBOR	UINT_C(2)	/* è¿é£è
-ã§ã¯ãªããªã£ãã	*/
-#define ICMP6_DST_UNREACH_BEYOND_SCOPE	UINT_C(2)	/* ã¹ã³ã¼ããè¶
-ãã¦ããã	*/
-#define ICMP6_DST_UNREACH_ADDR		UINT_C(3)	/* å®å
-ã¢ãã¬ã¹ã«å°éä¸å¯è½ã	*/
-#define ICMP6_DST_UNREACH_NOPORT	UINT_C(4)	/* å®å
-ãã¼ãã«å°éä¸å¯è½ã	*/
-
-/* TTL è¶
-é */
-
-#define ICMP6_TIME_EXCEED_TRANSIT	UINT_C(0)	/* è»¢éæã« TTL==0 ã«ãªã£ãã	*/
-#define ICMP6_TIME_EXCEED_REASSEMBLY	UINT_C(1)	/* IP åæ§æã§ã¿ã¤ã ã¢ã¦ãããã*/
-
-/* ãããä¸æ­£ */
-
-#define ICMP6_PARAMPROB_HEADER		UINT_C(0)	/* ãããã«ä¸æ­£ããã£ãã	*/
-#define ICMP6_PARAMPROB_NEXT_HEADER	UINT_C(1)	/* æ¬¡ããããèªè­ã§ããªãã	*/
-#define ICMP6_PARAMPROB_OPTION		UINT_C(2)	/* ãªãã·ã§ã³ãèªè­ã§ããªãã	*/
-
-/* å
-é¨ä½¿ç¨ */
-#define ND_REDIRECT_ONLINK		UINT_C(0)	/* ãªã³ãªã³ã¯ã¸ã®åãç´ã	*/
-#define ND_REDIRECT_ROUTER		UINT_C(1)	/* ã«ã¼ã¿ã¸ã®åãç´ã		*/
-
-/*
- *  å¶éå¤
- */
-
-							/* ICMPv6 ã®æå¤§ãã¤ã­ã¼ãé·	*/
+ *  ICMP6 タイプ
+ */
+
+#define ICMP6_DST_UNREACH		UINT_C(1)	/* 宛先到達不可能		*/
+#define ICMP6_PACKET_TOO_BIG		UINT_C(2)	/* パケットが大きすぎる。	*/
+#define ICMP6_TIME_EXCEEDED		UINT_C(3)	/* TTL を超過した。		*/
+#define ICMP6_PARAM_PROB		UINT_C(4)	/* IPv6 ヘッダが不正。		*/
+
+#define ICMP6_ECHO_REQUEST		UINT_C(128)	/* エコー要求			*/
+#define ICMP6_ECHO_REPLY		UINT_C(129)	/* エコー応答			*/
+
+#define ICMP6_MEMBERSHIP_QUERY		UINT_C(130)	/* グループメンバ照会		*/
+#define ICMP6_MEMBERSHIP_REPORT		UINT_C(131)	/* グループメンバ報告		*/
+#define ICMP6_MEMBERSHIP_REDUCTION	UINT_C(132)	/* グループメンバ終了		*/
+
+#define MLD_LISTENER_QUERY		UINT_C(130)	/* マルチキャスト受信者照会	*/
+#define MLD_LISTENER_REPORT		UINT_C(131)	/* マルチキャスト受信者報告	*/
+#define MLD_LISTENER_DONE		UINT_C(132)	/* マルチキャスト受信者終了	*/
+
+#define ND_ROUTER_SOLICIT		UINT_C(133)	/* ルータ要請			*/
+#define ND_ROUTER_ADVERT		UINT_C(134)	/* ルータ通知			*/
+#define ND_NEIGHBOR_SOLICIT		UINT_C(135)	/* 近隣要請			*/
+#define ND_NEIGHBOR_ADVERT		UINT_C(136)	/* 近隣通知			*/
+#define ND_REDIRECT			UINT_C(137)	/* 向け直し			*/
+
+#define ICMP6_ROUTER_RENUMBERING	UINT_C(138)	/* ルータ番号再設定		*/
+
+#define ICMP6_WRU_REQUEST		UINT_C(139)	/* 要求ノード探索		*/
+#define ICMP6_WRU_REPLY			UINT_C(140)	/* 応答ノード探索		*/
+
+#define ICMP6_FQDN_QUERY		UINT_C(139)	/* FQDN 照会			*/
+#define ICMP6_FQDN_REPLY		UINT_C(140)	/* FQDN 応答			*/
+
+#define ICMP6_NI_QUERY			UINT_C(139)	/* ノード情報照会		*/
+#define ICMP6_NI_REPLY			UINT_C(140)	/* ノード情報応答		*/
+
+#define ICMP6_MAX_TYPE			UINT_C(203)	/* ICMP6 タイプの最大値		*/
+
+/*
+ *  ICMP6 コード
+ */
+
+/* 宛先到達不可能 */
+
+#define ICMP6_DST_UNREACH_NOROUTE	UINT_C(0)	/* 到達ルートなし。		*/
+#define ICMP6_DST_UNREACH_ADMIN		UINT_C(1)	/* 管理者により無効化中。	*/
+#define ICMP6_DST_UNREACH_NOTEIGHBOR	UINT_C(2)	/* 近隣者ではなくなった。	*/
+#define ICMP6_DST_UNREACH_BEYOND_SCOPE	UINT_C(2)	/* スコープを超えている。	*/
+#define ICMP6_DST_UNREACH_ADDR		UINT_C(3)	/* 宛先アドレスに到達不可能。	*/
+#define ICMP6_DST_UNREACH_NOPORT	UINT_C(4)	/* 宛先ポートに到達不可能。	*/
+
+/* TTL 超過 */
+
+#define ICMP6_TIME_EXCEED_TRANSIT	UINT_C(0)	/* 転送時に TTL==0 になった。	*/
+#define ICMP6_TIME_EXCEED_REASSEMBLY	UINT_C(1)	/* IP 再構成でタイムアウトした。*/
+
+/* ヘッダ不正 */
+
+#define ICMP6_PARAMPROB_HEADER		UINT_C(0)	/* ヘッダに不正があった。	*/
+#define ICMP6_PARAMPROB_NEXT_HEADER	UINT_C(1)	/* 次ヘッダが認識できない。	*/
+#define ICMP6_PARAMPROB_OPTION		UINT_C(2)	/* オプションが認識できない。	*/
+
+/* 内部使用 */
+#define ND_REDIRECT_ONLINK		UINT_C(0)	/* オンリンクへの向け直し	*/
+#define ND_REDIRECT_ROUTER		UINT_C(1)	/* ルータへの向け直し		*/
+
+/*
+ *  制限値
+ */
+
+							/* ICMPv6 の最大ペイロード長	*/
 #define ICMPV6_PAYLOAD_MAXLEN		(IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE))
 
 /*
- *  è¿é£è¦è«
+ *  近隣要請
  */
 
@@ -246,5 +215,5 @@
 	T_ICMP6_HDR	hdr;
 	T_IN6_ADDR	target;
-	/* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã */
+	/* この後にオプションが続く */
 	} T_NEIGHBOR_SOLICIT_HDR;
 
@@ -264,5 +233,5 @@
 
 /*
- *  è¿é£éç¥
+ *  近隣通知
  */
 
@@ -270,8 +239,8 @@
 	T_ICMP6_HDR	hdr;
 	T_IN6_ADDR	target;
-	/* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã */
+	/* この後にオプションが続く */
 	} __attribute__((packed, aligned(2))) T_NEIGHBOR_ADVERT_HDR;
 
-/* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾© */
+/* ICMP6 ヘッダのデータ部の定義 */
 
 #define nd_na_flags_reserved		hdr.data.data32
@@ -295,23 +264,23 @@
 
 /*
- *  è¿é£éç¥ãã©ã°ãnd_na_flags_reserved (hdr.data32) ã«è¨­å®ããã
+ *  近隣通知フラグ、nd_na_flags_reserved (hdr.data32) に設定する。
  */
 
 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN
 
-#define ND_NA_FLG_OVERRIDE		ULONG_C(0x20000000)	/* è¿é£ã­ã£ãã·ã¥ä¸æ¸ã	*/
-#define ND_NA_FLG_SOLICITED		ULONG_C(0x40000000)	/* è¿é£è¦è«ã¸ã®å¿ç­	*/
-#define ND_NA_FLG_ROUTER		ULONG_C(0x80000000)	/* ã«ã¼ã¿éç¥		*/
+#define ND_NA_FLG_OVERRIDE		ULONG_C(0x20000000)	/* 近隣キャッシュ上書き	*/
+#define ND_NA_FLG_SOLICITED		ULONG_C(0x40000000)	/* 近隣要請への応答	*/
+#define ND_NA_FLG_ROUTER		ULONG_C(0x80000000)	/* ルータ通知		*/
 
 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN
 
-#define ND_NA_FLG_OVERRIDE		ULONG_C(0x00000020)	/* è¿é£ã­ã£ãã·ã¥ä¸æ¸ã	*/
-#define ND_NA_FLG_SOLICITED		ULONG_C(0x00000040)	/* è¿é£è¦è«ã¸ã®å¿ç­	*/
-#define ND_NA_FLG_ROUTER		ULONG_C(0x00000080)	/* ã«ã¼ã¿éç¥		*/
+#define ND_NA_FLG_OVERRIDE		ULONG_C(0x00000020)	/* 近隣キャッシュ上書き	*/
+#define ND_NA_FLG_SOLICITED		ULONG_C(0x00000040)	/* 近隣要請への応答	*/
+#define ND_NA_FLG_ROUTER		ULONG_C(0x00000080)	/* ルータ通知		*/
 
 #endif	/* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */
 
 /*
- *  ã«ã¼ã¿éç¥
+ *  ルータ通知
  *
  *    RFC4291: IP Version 6 Addressing Architecture
@@ -322,14 +291,14 @@
 typedef struct t_router_advert_hdr {
 	T_ICMP6_HDR	hdr;
-	uint32_t	reachable;		/* [us] å°éå¯è½æé	*/
-	uint32_t	retransmit;		/* [us] è¿é£è¦è«éä¿¡éé	*/
-	/* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã */
+	uint32_t	reachable;		/* [us] 到達可能時間	*/
+	uint32_t	retransmit;		/* [us] 近隣要請送信間隔	*/
+	/* この後にオプションが続く */
 	} __attribute__((packed, aligned(2))) T_ROUTER_ADVERT_HDR;
 
-/* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾© */
+/* ICMP6 ヘッダのデータ部の定義 */
 
 #define nd_ra_current_hoplimit		hdr.data.data8[0]
 #define nd_ra_flags			hdr.data.data8[1]
-#define nd_ra_router_lifetime		hdr.data.data16[1]	/* [s] ã«ã¼ã¿æå¹æé	*/
+#define nd_ra_router_lifetime		hdr.data.data16[1]	/* [s] ルータ有効時間	*/
 
 #define ROUTER_ADVERT_HDR_SIZE		(sizeof(T_ROUTER_ADVERT_HDR))
@@ -349,5 +318,5 @@
 
 /*
- *  ã«ã¼ã¿éç¥ãããã®ãã©ã°
+ *  ルータ通知ヘッダのフラグ
  */
 
@@ -357,19 +326,16 @@
 
 /*
- *  M: RAä»¥å¤ã®æ¹æ³ã§èªåçã«ã¢ãã¬ã¹ãè¨­å®ãããã¨ãè¨±å¯ããã
- *  O: RAä»¥å¤ã®æ¹æ³ã§èªåçã«ã¢ãã¬ã¹ä»¥å¤ã®æ
-å ±ãè¨­å®ãããã¨ããè¨±å¯ããã
+ *  M: RA以外の方法で自動的にアドレスを設定することを許可する。
+ *  O: RA以外の方法で自動的にアドレス以外の情報を設定することをを許可する。
  *
  *   M   O
- *  ON  ON	ã¢ãã¬ã¹ã¨ããä»¥å¤ã®æ
-å ±ãDHCPv6ã§è¨­å®ããï¼statefullï¼
- *  ON  OFF	ã¢ãã¬ã¹ã¯DHCPv6ã§è¨­å®ããããããä»¥å¤ã¯æåã§è¨­å®ããã
- *  OFF ON	ã¢ãã¬ã¹ã¯ RA ã§è¨­å®ããããããä»¥å¤ã®æ
-å ±ãDHCPv6ã§è¨­å®ããï¼statelessï¼
- *  OFF OFF	DHCPv6 ã¯ä½¿ç¨ããªãã
- */
-
-/*
- *  ã«ã¼ã¿è¦è«
+ *  ON  ON	アドレスとそれ以外の情報をDHCPv6で設定する（statefull）
+ *  ON  OFF	アドレスはDHCPv6で設定するが、それ以外は手動で設定する。
+ *  OFF ON	アドレスは RA で設定するが、それ以外の情報をDHCPv6で設定する（stateless）
+ *  OFF OFF	DHCPv6 は使用しない。
+ */
+
+/*
+ *  ルータ要請
  */
 
@@ -378,5 +344,5 @@
 	} __attribute__((packed, aligned(2))) T_ROUTER_SOLICIT_HDR;
 
-/* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾© */
+/* ICMP6 ヘッダのデータ部の定義 */
 
 #define nd_rs_reserved			hdr.data.data32
@@ -399,8 +365,8 @@
 
 /*
- *  è¿é£æ¢ç´¢ãªãã·ã§ã³
- */
-
-/* è¿é£æ¢ç´¢ããã */
+ *  近隣探索オプション
+ */
+
+/* 近隣探索ヘッダ */
 
 typedef struct t_neighbor_hdr {
@@ -409,50 +375,45 @@
 	} __attribute__((packed, aligned(2))) T_NEIGHBOR_HDR;
 
-/* è¿é£æ¢ç´¢ãªãã·ã§ã³ããã */
+/* 近隣探索オプションヘッダ */
 
 typedef struct t_nd_opt_hdr {
-	uint8_t		type;			/* ãªãã·ã§ã³ã¿ã¤ã			*/
-	uint8_t		len;			/* ãªãã·ã§ã³é·ãåä½ã¯ 8 ãã¤ã	*/
+	uint8_t		type;			/* オプションタイプ			*/
+	uint8_t		len;			/* オプション長、単位は 8 バイト	*/
 	} __attribute__((packed, aligned(2))) T_ND_OPT_HDR;
 
 #define ND_OPT_HDR_SIZE			(sizeof(T_ND_OPT_HDR))
 
-#define ND_OPT_SOURCE_LINKADDR		UINT_C(1)	/* éä¿¡å
-ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-#define ND_OPT_TARGET_LINKADDR		UINT_C(2)	/* å¯¾è±¡ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-#define ND_OPT_PREFIX_INFORMATION	UINT_C(3)	/* ãã¬ãã£ãã¯ã¹æ
-å ±				*/
-#define ND_OPT_REDIRECTED_HEADER	UINT_C(4)	/* ãªãã¤ã¬ã¯ãã»ããã				*/
+#define ND_OPT_SOURCE_LINKADDR		UINT_C(1)	/* 送信先ネットワークインタフェースのアドレス	*/
+#define ND_OPT_TARGET_LINKADDR		UINT_C(2)	/* 対象ネットワークインタフェースのアドレス	*/
+#define ND_OPT_PREFIX_INFORMATION	UINT_C(3)	/* プレフィックス情報				*/
+#define ND_OPT_REDIRECTED_HEADER	UINT_C(4)	/* リダイレクト・ヘッダ				*/
 #define ND_OPT_MTU			UINT_C(5)	/* MTU						*/
 
-#define ND_OPT_PREFIX_INFO_COUNT	UINT_C(6)	/* ãã¬ãã£ãã¯ã¹æ
-å ±ã®åæ°			*/
-#define ND_OPT_OFF_ARRAY_SIZE		UINT_C(7)	/* ND ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããé
-åãµã¤ãº*/
-
-#define ND_OPT_OFF_ARRAY_IX(t)		((t)-1)		/* ãªãã»ããé
-åã®ã¤ã³ããã¯ã¹			*/
-
-/* ãã¬ãã£ãã¯ã¹ãªãã·ã§ã³ */
+#define ND_OPT_PREFIX_INFO_COUNT	UINT_C(6)	/* プレフィックス情報の個数			*/
+#define ND_OPT_OFF_ARRAY_SIZE		UINT_C(7)	/* ND オプションのオフセットを記録する配列サイズ*/
+
+#define ND_OPT_OFF_ARRAY_IX(t)		((t)-1)		/* オフセット配列のインデックス			*/
+
+/* プレフィックスオプション */
 
 typedef struct t_nd_opt_prefix_info {
-	uint8_t		type;		/* è¿é£æ¢ç´¢ãªãã·ã§ã³ã¿ã¤ã = 3	*/
-	uint8_t		len;		/* ãªãã·ã§ã³é· = 8Ã4=32	*/
-	uint8_t		prefix_len;	/* ãã¬ãã£ãã¯ã¹é·		*/
-	uint8_t		flags;		/* ãã©ã°			*/
-	uint32_t	valid;		/* [s] æå¹æé			*/
-	uint32_t	preferred;	/* [s] æ¨å¥¨æå¹æé		*/
+	uint8_t		type;		/* 近隣探索オプションタイプ = 3	*/
+	uint8_t		len;		/* オプション長 = 8×4=32	*/
+	uint8_t		prefix_len;	/* プレフィックス長		*/
+	uint8_t		flags;		/* フラグ			*/
+	uint32_t	valid;		/* [s] 有効時間			*/
+	uint32_t	preferred;	/* [s] 推奨有効時間		*/
 	uint32_t	reserved;
-	T_IN6_ADDR	prefix;		/* ãã¬ãã£ãã¯ã¹		*/
+	T_IN6_ADDR	prefix;		/* プレフィックス		*/
 	} __attribute__((packed, aligned(2))) T_ND_OPT_PREFIX_INFO;
 
-#define ND_OPT_PI_FLAG_ONLINK	UINT_C(0x80)		/* ãªã³ãªã³ã¯ãã¬ãã£ãã¯ã¹	*/
-#define ND_OPT_PI_FLAG_AUTO	UINT_C(0x40)		/* ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨­å®*/
-
-/* MTU ãªãã·ã§ã³ããã */
+#define ND_OPT_PI_FLAG_ONLINK	UINT_C(0x80)		/* オンリンクプレフィックス	*/
+#define ND_OPT_PI_FLAG_AUTO	UINT_C(0x40)		/* ステートレス・アドレス自動設定*/
+
+/* MTU オプションヘッダ */
 
 typedef struct t_nd_opt_mtu_hdr {
-	uint8_t		type;		/* ãªãã·ã§ã³ã¿ã¤ã		*/
-	uint8_t		len;		/* ãªãã·ã§ã³é·ãåä½ã¯ 8 ãã¤ã*/
+	uint8_t		type;		/* オプションタイプ		*/
+	uint8_t		len;		/* オプション長、単位は 8 バイト*/
 	uint16_t	reserved;
 	uint32_t	mtu;		/* MTU				*/
@@ -460,12 +421,12 @@
 
 /*
- *  åãç´ã
+ *  向け直し
  */
 
 typedef struct t_nd_redirect_hdr {
 	T_ICMP6_HDR	hdr;
-	T_IN6_ADDR	target;		/* ã«ã¼ã¿ã®ã¢ãã¬ã¹		*/
-	T_IN6_ADDR	dst;		/* åãç´ãã®çµç¹ã¢ãã¬ã¹		*/
-	/* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã */
+	T_IN6_ADDR	target;		/* ルータのアドレス		*/
+	T_IN6_ADDR	dst;		/* 向け直しの終点アドレス		*/
+	/* この後にオプションが続く */
 	} __attribute__((packed, aligned(2))) T_ND_REDIRECT_HDR;
 
@@ -475,6 +436,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -521,5 +481,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -86,6 +74,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -122,5 +110,5 @@
 
 /*
- *  ARP ã­ã£ãã·ã¥ã¨ã³ããª
+ *  ARP キャッシュエントリ
  */
 
@@ -128,5 +116,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -135,6 +123,5 @@
 
 /*
- *  in_arpinput -- TCP/IP ç¨ ARP ã®å
-¥åé¢æ°
+ *  in_arpinput -- TCP/IP 用 ARP の入力関数
  */
 
@@ -152,12 +139,11 @@
 	et_arph = GET_ETHER_ARP_HDR(input);
 
-	ntoahl(saddr, et_arph->sproto);		/* éä¿¡å
- IP ã¢ãã¬ã¹	*/
-	ntoahl(taddr, et_arph->tproto);		/* è§£æ±ºå¯¾è±¡ IP ã¢ãã¬ã¹	*/
-
-	/*
-	 *  ä»¥ä¸ã®å ´åã¯ã¨ã©ã¼
-	 *    ã»éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹ãèªå
-	 *    ã»éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
+	ntoahl(saddr, et_arph->sproto);		/* 送信元 IP アドレス	*/
+	ntoahl(taddr, et_arph->tproto);		/* 解決対象 IP アドレス	*/
+
+	/*
+	 *  以下の場合はエラー
+	 *    ・送信ホストの物理アドレスが自分
+	 *    ・送信ホストの物理アドレスがブロードキャスト
 	 */
 	if (memcmp(et_arph->shost, ifaddr->lladdr,        ETHER_ADDR_LEN) == 0 ||
@@ -166,7 +152,7 @@
 
 	/*
-	 *  éä¿¡ãã¹ãã® IP ã¢ãã¬ã¹ãèªåã®å ´åã¯ãéè¤ãã¦ããã®ã§
-	 *  ç¸æã«ãç¥ãããã
-	 *  ãã ããèªåã¨ç¸æã®ã¢ãã¬ã¹ãæªå®ç¾©ï¼IPV4_ADDRANYï¼ã®æã¯ä½ãããªãã
+	 *  送信ホストの IP アドレスが自分の場合は、重複しているので
+	 *  相手にも知らせる。
+	 *  ただし、自分と相手のアドレスが未定義（IPV4_ADDRANY）の時は何もしない。
 	 */
 	if ((saddr == ifp->in4_ifaddr.addr) && (saddr != IPV4_ADDRANY)) {
@@ -197,12 +183,9 @@
 
 	/*
-	 *  ä»¥ä¸ã®å ´åã¯ä½ãããªãã
-	 *    ã»è§£æ±ºå¯¾è±¡ IP ã¢ãã¬ã¹ãèªåã§ã¯ãªããæ³¨: å
-ã® FreeBSD ã®
-	 *      å®è£
-ã§ã¯ãARP PROXY ç­ã®ãããèªåä»¥å¤ã® IP ã¢ãã¬ã¹ã®
-	 *      è§£æ±ºãè¡ã£ã¦ããããæ¬å®è£
-ã§ã¯ãèªåä»¥å¤ã® IP
-	 *      ã¢ãã¬ã¹ã®è§£æ±ºã¯è¡ããªãã
+	 *  以下の場合は何もしない。
+	 *    ・解決対象 IP アドレスが自分ではない、注: 元の FreeBSD の
+	 *      実装では、ARP PROXY 等のため、自分以外の IP アドレスの
+	 *      解決も行っているが、本実装では、自分以外の IP
+	 *      アドレスの解決は行わない。
 	 */
 	if (taddr != ifp->in4_ifaddr.addr)
@@ -210,7 +193,6 @@
 
 	/*
-	 *  éä¿¡å
- IP ã¢ãã¬ã¹ã ARP ã­ã£ãã·ã¥ã«ãããèª¿ã¹ãã
-	 *  ã­ã£ãã·ã¥ã«ãªããã°ãæ°ãã«ã¨ã³ããªãç»é²ããã
+	 *  送信元 IP アドレスが ARP キャッシュにあるか調べる。
+	 *  キャッシュになければ、新たにエントリを登録する。
 	 */
 	syscall(wai_sem(SEM_ARP_CACHE_LOCK));
@@ -221,9 +203,9 @@
 
 	/*
-	 *  éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°éä¿¡ããã
+	 *  送信がペンデングされているフレームがあれば送信する。
 	 */
 	if (ent->hold) {
 
-		/* ãã¬ã¼ã ã® Ethernet ããããè¨­å®ããã*/
+		/* フレームの Ethernet ヘッダを設定する。*/
 		memcpy(GET_ETHER_HDR(ent->hold)->dhost, ent->mac_addr, ETHER_ADDR_LEN);
 
@@ -232,5 +214,5 @@
 		syscall(sig_sem(SEM_ARP_CACHE_LOCK));
 
-		/* ãã³ãã£ã³ã°ããã¦ãããã¬ã¼ã ãéä¿¡ããã*/
+		/* ペンディングされているフレームを送信する。*/
 		IF_RAW_OUTPUT(pending, TMO_FEVR);
 
@@ -243,9 +225,9 @@
 	arph = GET_ARP_HDR(input);
 
-	/* ã¢ãã¬ã¹è§£æ±ºè¦æ±ã§ãªããã°çµäº */
+	/* アドレス解決要求でなければ終了 */
 	if (ntohs(arph->opcode) != ARPOP_REQUEST)
 		goto buf_rel;
 
-	/* Ethernet ARP ããããè¨­å®ããã*/
+	/* Ethernet ARP ヘッダを設定する。*/
 	memcpy(et_arph->thost, et_arph->shost, ETHER_ADDR_LEN);
 	memcpy(et_arph->shost, ifaddr->lladdr, ETHER_ADDR_LEN);
@@ -253,13 +235,13 @@
 	ahtonl(et_arph->sproto, taddr);
 
-	/* Ethernet ARP ããããè¨­å®ããã*/
+	/* Ethernet ARP ヘッダを設定する。*/
 	arph->opcode = htons(ARPOP_REPLY);
 
-	/* Ethernet ããããè¨­å®ããã*/
+	/* Ethernet ヘッダを設定する。*/
 	eth = GET_ETHER_HDR(input);
 	memcpy(eth->dhost, eth->shost,     ETHER_ADDR_LEN);
 	memcpy(eth->shost, ifaddr->lladdr, ETHER_ADDR_LEN);
 
-	/* ARP å¿ç­ãéä¿¡ããã*/
+	/* ARP 応答を送信する。*/
 	IF_RAW_OUTPUT(input, TMO_FEVR);
 	return;
@@ -272,5 +254,5 @@
 
 /*
- *  arp_timer -- ARP ã­ã£ãã·ã¥ã®æ´æ°
+ *  arp_timer -- ARP キャッシュの更新
  */
 
@@ -286,5 +268,5 @@
 			arp_cache[ix].expire -= ARP_TIMER_TMO;
 			if (arp_cache[ix].expire == 0) {
-				/* éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°æ¨ã¦ãã*/
+				/* 送信がペンデングされているフレームがあれば捨てる。*/
 				if (arp_cache[ix].hold) {
 					NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1);
@@ -301,8 +283,7 @@
 
 /*
- *  arp_lookup -- ARP ã­ã£ãã·ã¥ã®æ¢ç´¢ã¨ç»é²
- *
- *    æ³¨æ: SEM_ARP_CACHE_LOCK ãç²å¾ããç¶æ
-ã§å¼åºããã¨
+ *  arp_lookup -- ARP キャッシュの探索と登録
+ *
+ *    注意: SEM_ARP_CACHE_LOCK を獲得した状態で呼出すこと
  */
 
@@ -318,8 +299,8 @@
 		}
 
-	/* create ãçãªããæ°ããªã¨ã³ããªãç»é²ããã*/
+	/* create が真なら、新たなエントリを登録する。*/
 	if (create) {
 
-		/* ã¾ããç©ºããããã°ããã®ç©ºããå©ç¨ããã*/
+		/* まず、空きがあれば、その空きを利用する。*/
 		for (ix = NUM_ARP_ENTRY; ix -- > 0; ) {
 			if (arp_cache[ix].expire == 0) {
@@ -330,6 +311,6 @@
 
 		/*
-		 *  ç©ºãããªããã°ãã¿ã¤ã ã¢ã¦ãã¾ã§æéãæç­ã®
-		 *  ã¨ã³ããªã¼ãç ´æ£ãã¦å©ç¨ããã
+		 *  空きがなければ、タイムアウトまで時間が最短の
+		 *  エントリーを破棄して利用する。
 		 */
 		syslog(LOG_NOTICE, "[ARP] cache busy, size=%d", NUM_ARP_ENTRY);
@@ -349,5 +330,5 @@
 
 /*
- *  arp_request -- MAC ã¢ãã¬ã¹è§£æ±ºè¦æ±
+ *  arp_request -- MAC アドレス解決要求
  */
 
@@ -367,5 +348,5 @@
 	if ((error = tget_net_buf(&arp_req, IF_ARP_ETHER_HDR_SIZE, TMO_ARP_GET_NET_BUF)) == E_OK) {
 
-		/* ã¤ã¼ãµãããããããè¨­å®ããã*/
+		/* イーサネットヘッダを設定する。*/
 		eth     = GET_ETHER_HDR(arp_req);
 		memcpy(eth->dhost, ether_broad_cast_addr, ETHER_ADDR_LEN);
@@ -373,5 +354,5 @@
 		eth->type = htons(ETHER_TYPE_ARP);
 
-		/* ARP ããããè¨­å®ããã*/
+		/* ARP ヘッダを設定する。*/
 		arph    = GET_ARP_HDR(arp_req);
 		arph->hrd_addr  = htons(ARPHRD_ETHER);
@@ -381,5 +362,5 @@
 		arph->opcode    = htons(ARPOP_REQUEST);
 
-		/* ã¤ã¼ãµããã ARP ããããè¨­å®ããã*/
+		/* イーサネット ARP ヘッダを設定する。*/
 		et_arph = GET_ETHER_ARP_HDR(arp_req);
 		src     = IF_GET_IFNET()->in4_ifaddr.addr;
@@ -389,5 +370,5 @@
 		ahtonl(et_arph->tproto, dst);
 
-		/* éä¿¡ããã*/
+		/* 送信する。*/
 		error = IF_RAW_OUTPUT(arp_req, TMO_ARP_OUTPUT);
 		}
@@ -398,5 +379,5 @@
 
 /*
- *  arp_get_cache -- ARP ã­ã£ãã·ã¥ãç²å¾ããã
+ *  arp_get_cache -- ARP キャッシュを獲得する。
  */
 
@@ -408,6 +389,5 @@
 
 /*
- *  arp_input -- ARP ã®å
-¥åé¢æ°
+ *  arp_input -- ARP の入力関数
  */
 
@@ -420,5 +400,5 @@
 	NET_COUNT_ARP(net_count_arp.in_packets, 1);
 
-	/* ARP ãããã®é·ãããã§ãã¯ããã*/
+	/* ARP ヘッダの長さをチェックする。*/
 	if (input->len < IF_ARP_HDR_SIZE)
 		goto buf_rel;
@@ -427,6 +407,6 @@
 
 	/*
-	 *  ç©çã¢ãã¬ã¹ãã©ã¼ãããã Ehternet ä»¥å¤
-	 *  ã¾ãã¯ããã­ãã³ã«ã IP ä»¥å¤ã¯ã¨ã©ã¼ã
+	 *  物理アドレスフォーマットが Ehternet 以外
+	 *  または、プロトコルが IP 以外はエラー。
 	 */
 	if (ntohs(arph->hrd_addr) != ARPHRD_ETHER ||
@@ -434,5 +414,5 @@
 		goto buf_rel;
 
-	/* ARP ããã + Ether ARP ãããã®é·ãããã§ãã¯ããã*/
+	/* ARP ヘッダ + Ether ARP ヘッダの長さをチェックする。*/
 	if (input->len < IF_ARP_ETHER_HDR_SIZE)
 		goto buf_rel;
@@ -447,8 +427,8 @@
 
 /*
- *  arp_resolve -- MAC ã¢ãã¬ã¹è§£æ±º
- *
- *    ã¢ãã¬ã¹è§£æ±ºãã§ããã°ãæ»ãå¤ã¯ true ãè¿ããã§ããªããã°
- *    éä¿¡ããã³ãã£ã³ã°ãã¦ãæ»ãå¤ã¯ false ãè¿ãã
+ *  arp_resolve -- MAC アドレス解決
+ *
+ *    アドレス解決ができれば、戻り値は true を返し、できなければ
+ *    送信をペンディングして、戻り値は false を返す。
  */
 
@@ -463,10 +443,8 @@
 
 	/*
-	 *  æ¬¡ã®å ´åã¯ãã¤ã¼ãµãããã®ãã­ã¼ãã­ã£ã¹ãã¢ãã¬ã¹ãè¿ãã
+	 *  次の場合は、イーサネットのブロードキャストアドレスを返す。
 	 *
-	 *    ã»å
-¨ãããã 1
-	 *    ã»ãã¹ãé¨ã®å
-¨ãããã 1 ã§ããããã¯ã¼ã¯é¨ãã­ã¼ã«ã«ã¢ãã¬ã¹
+	 *    ・全ビットが 1
+	 *    ・ホスト部の全ビットが 1 で、ネットワーク部がローカルアドレス
 	 */
 	if (gw == IPV4_ADDR_BROADCAST ||
@@ -476,6 +454,5 @@
 		}
 
-	/* éä¿¡å
- GW ã® IP ã¢ãã¬ã¹ã ARP ã­ã£ãã·ã¥ã«ãããèª¿ã¹ãã*/
+	/* 送信先 GW の IP アドレスが ARP キャッシュにあるか調べる。*/
 	syscall(wai_sem(SEM_ARP_CACHE_LOCK));
 	ent = arp_lookup(gw, true);
@@ -486,5 +463,5 @@
 		}
 	else {
-	 	/* éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°æ¨ã¦ãã*/
+	 	/* 送信がペンデングされているフレームがあれば捨てる。*/
 		if (ent->hold) {
 			NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1);
@@ -493,7 +470,7 @@
 
 		/*
-		 *  éä¿¡ããã³ãã£ã³ã°ããã
-		 *  IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ãè¨­å®ããã¦ããã¨ãã¯ã
-		 *  éä¿¡ããã³ãã£ã³ã°ããªãã
+		 *  送信をペンディングする。
+		 *  IF でネットワークバッファを開放しないフラグが設定されているときは、
+		 *  送信をペンディングしない。
 		 */
 		if ((output->flags & NB_FLG_NOREL_IFOUT) == 0)
@@ -505,5 +482,5 @@
 		syscall(sig_sem(SEM_ARP_CACHE_LOCK));
 
-		/* ã¢ãã¬ã¹è§£æ±ºè¦æ±ãéä¿¡ããã*/
+		/* アドレス解決要求を送信する。*/
 		arp_request(ifaddr, gw);
 		return false;
@@ -512,5 +489,5 @@
 
 /*
- *  arp_init -- ARP åæå
+ *  arp_init -- ARP 初期化
  */
 
@@ -523,5 +500,5 @@
 #ifdef ETHER_CFG_MULTICAST
 /*
- *  ether_map_ipv4_multicast -- IPv4 ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ããã¤ã¼ãµãããã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ
+ *  ether_map_ipv4_multicast -- IPv4 マルチキャストアドレスからイーサネット・マルチキャストアドレスへの変換
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  Ethernet ARP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  Ethernet ARP コンフィギュレーションファイル
  */
 
 #if defined(_IP4_CFG) && defined(SUPPORT_ETHER)
 
-/* ARP ã­ã£ãã·ã¥æ´æ°ç¨ã»ããã© */
+/* ARP キャッシュ更新用セマフォ */
 
 CRE_SEM(SEM_ARP_CACHE_LOCK, { TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/if_ether.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -88,13 +76,12 @@
  *  Ethernet Address Resolution Protocol.
  *
- *  RFC 826 åç
-§
+ *  RFC 826 参照
  */
 
 typedef struct t_ether_arp_hdr {
-	uint8_t		shost[ETHER_ADDR_LEN];	/* éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹	*/
-	uint8_t		sproto[IPV4_ADDR_LEN];	/* éä¿¡ãã¹ãã® IP ã¢ãã¬ã¹	*/
-	uint8_t		thost[ETHER_ADDR_LEN];	/* è§£æ±ºå¯¾è±¡ç©çã¢ãã¬ã¹		*/
-	uint8_t		tproto[IPV4_ADDR_LEN];	/* è§£æ±ºå¯¾è±¡ IP ã¢ãã¬ã¹		*/
+	uint8_t		shost[ETHER_ADDR_LEN];	/* 送信ホストの物理アドレス	*/
+	uint8_t		sproto[IPV4_ADDR_LEN];	/* 送信ホストの IP アドレス	*/
+	uint8_t		thost[ETHER_ADDR_LEN];	/* 解決対象物理アドレス		*/
+	uint8_t		tproto[IPV4_ADDR_LEN];	/* 解決対象 IP アドレス		*/
 	} __attribute__((packed, aligned(2)))T_ETHER_ARP_HDR;
 
@@ -105,17 +92,16 @@
 
 /*
- *  ARP ã­ã£ãã·ã¥ã¨ã³ããª
+ *  ARP キャッシュエントリ
  */
 
 typedef struct arp_entry {
-	T_NET_BUF	*hold;		/* ARP ã®è§£æ±ºå¾
-ã¡åºåãã¬ã¼ã 	*/
-	T_IN4_ADDR	ip_addr;	/* IP ã¢ãã¬ã¹			*/
-	uint16_t	expire;		/* ç ´æ£ã¾ã§ã®æéã0 ãªãæªä½¿ç¨	*/
-	uint8_t		mac_addr[ETHER_ADDR_LEN];	/* MAC ã¢ãã¬ã¹	*/
+	T_NET_BUF	*hold;		/* ARP の解決待ち出力フレーム	*/
+	T_IN4_ADDR	ip_addr;	/* IP アドレス			*/
+	uint16_t	expire;		/* 破棄までの時間、0 なら未使用	*/
+	uint8_t		mac_addr[ETHER_ADDR_LEN];	/* MAC アドレス	*/
 	} __attribute__((packed, aligned(2)))T_ARP_ENTRY;
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -132,5 +118,5 @@
 
 /*
- *  TINET ç¬èª API
+ *  TINET 独自 API
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -89,21 +77,19 @@
 
 /*
- *  TINET ã®ãã¼ã¸ã§ã³æ
-å ±
+ *  TINET のバージョン情報
  */
 
-#define TINET_PRVER		UINT_C(0x1070)	/* TINET ã®ãã¼ã¸ã§ã³çªå· */
+#define TINET_PRVER		UINT_C(0x1070)	/* TINET のバージョン番号 */
 
 /*
- *  ã¤ã³ã¿ã¼ãããã·ã¹ãã ã®å®ç¾©ãRFC790 åç
-§
+ *  インターネットシステムの定義、RFC790 参照
  */
 
 /*
- *  ãã­ãã³ã« (RFC1700)
+ *  プロトコル (RFC1700)
  */
 
-#define IPPROTO_IP		UINT_C(0)	/* IP ã®ããã¼				*/
-#define IPPROTO_HOPOPTS		UINT_C(0)	/* IPv6 ä¸­ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³	*/
+#define IPPROTO_IP		UINT_C(0)	/* IP のダミー				*/
+#define IPPROTO_HOPOPTS		UINT_C(0)	/* IPv6 中継点 (Hop-by-Hop) オプション	*/
 #define IPPROTO_ICMP		UINT_C(1)	/* ICMP					*/
 #define IPPROTO_IGMP		UINT_C(2)	/* IGMP					*/
@@ -111,18 +97,17 @@
 #define IPPROTO_UDP		UINT_C(17)	/* UDP					*/
 #define IPPROTO_IPV6		UINT_C(41)	/* IPv6					*/
-#define IPPROTO_ROUTING		UINT_C(43)	/* çµè·¯å¶å¾¡ãªãã·ã§ã³			*/
-#define IPPROTO_FRAGMENT	UINT_C(44)	/* æ­çåãªãã·ã§ã³			*/
+#define IPPROTO_ROUTING		UINT_C(43)	/* 経路制御オプション			*/
+#define IPPROTO_FRAGMENT	UINT_C(44)	/* 断片化オプション			*/
 #define IPPROTO_RSVP		UINT_C(46)	/* RSVP					*/
-#define IPPROTO_ESP		UINT_C(50)	/* IPv6 æå·åãªãã·ã§ã³		*/
-#define IPPROTO_AH		UINT_C(51)	/* IPv6 èªè¨¼ãªãã·ã§ã³			*/
+#define IPPROTO_ESP		UINT_C(50)	/* IPv6 暗号化オプション		*/
+#define IPPROTO_AH		UINT_C(51)	/* IPv6 認証オプション			*/
 #define IPPROTO_ICMPV6		UINT_C(58)	/* ICMPv6				*/
-#define IPPROTO_NONE		UINT_C(59)	/* IPv6 æ¬¡ãããç¡ã			*/
-#define IPPROTO_DSTOPTS		UINT_C(60)	/* IPv6 çµç¹ãªãã·ã§ã³			*/
-#define IPPROTO_IPCOMP		UINT_C(108)	/* ãã¤ã­ã¼ãå§ç¸®			*/
-#define IPPROTO_DONE		UINT_C(257)	/* IPv6 ã§ä¸ä½ãã­ãã³ã«å
-¥åçµäº	*/
+#define IPPROTO_NONE		UINT_C(59)	/* IPv6 次ヘッダ無し			*/
+#define IPPROTO_DSTOPTS		UINT_C(60)	/* IPv6 終点オプション			*/
+#define IPPROTO_IPCOMP		UINT_C(108)	/* ペイロード圧縮			*/
+#define IPPROTO_DONE		UINT_C(257)	/* IPv6 で上位プロトコル入力終了	*/
 
 /*
- *  ãã¼ãã®é·ã
+ *  ポートの長さ
  */
 
@@ -130,20 +115,20 @@
 
 /*
- *  ãã¼ãçªå·ã®å®ç¾©
+ *  ポート番号の定義
  */
 
-#define TCP_PORTANY			UINT_C(0x0000)	/* ITRON TCP/IP æ¨æº	*/
-#define UDP_PORTANY			UINT_C(0x0000)	/* ITRON TCP/IP æ¨æº	*/
+#define TCP_PORTANY			UINT_C(0x0000)	/* ITRON TCP/IP 標準	*/
+#define UDP_PORTANY			UINT_C(0x0000)	/* ITRON TCP/IP 標準	*/
 
-#define TCP_PORT_LAST_WELL_KNOWN	UINT_C(1023)	/* Well Known çµäºçªå·	*/
-#define TCP_PORT_FIRST_AUTO		UINT_C(1024)	/* èªåå²ãå½ã¦éå§çªå·	*/
-#define TCP_PORT_LAST_AUTO		UINT_C(4999)	/* èªåå²ãå½ã¦çµäºçªå·	*/
+#define TCP_PORT_LAST_WELL_KNOWN	UINT_C(1023)	/* Well Known 終了番号	*/
+#define TCP_PORT_FIRST_AUTO		UINT_C(1024)	/* 自動割り当て開始番号	*/
+#define TCP_PORT_LAST_AUTO		UINT_C(4999)	/* 自動割り当て終了番号	*/
 
-#define UDP_PORT_LAST_WELL_KNOWN	UINT_C(1023)	/* Well Known çµäºçªå·	*/
-#define UDP_PORT_FIRST_AUTO		UINT_C(1024)	/* èªåå²ãå½ã¦éå§çªå·	*/
-#define UDP_PORT_LAST_AUTO		UINT_C(4999)	/* èªåå²ãå½ã¦çµäºçªå·	*/
+#define UDP_PORT_LAST_WELL_KNOWN	UINT_C(1023)	/* Well Known 終了番号	*/
+#define UDP_PORT_FIRST_AUTO		UINT_C(1024)	/* 自動割り当て開始番号	*/
+#define UDP_PORT_LAST_AUTO		UINT_C(4999)	/* 自動割り当て終了番号	*/
 
 /*
- *  API IPãã­ãã³ã«ã®æå®
+ *  API IPプロトコルの指定
  */
 
@@ -153,5 +138,5 @@
 
 /*
- *  åççæç¨ TCP/IPv6 éä¿¡ç«¯ç¹
+ *  動的生成用 TCP/IPv6 通信端点
  */
 
@@ -159,15 +144,15 @@
 
 /*
- *  ãã¤ããªã¼ãé¢æ°ã®å®ç¾©
+ *  バイトオーダ関数の定義
  *
- *    tinet/net/net.h ã§ããã¤ããªã¼ãã®å®ç¾©ãè¡ã£ã¦ãããã
- *    tinet/net/net.h ãã¤ã³ã¯ã«ã¼ãããªã
- *    ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ç¨ã«
- *    ã¿ã¼ã²ããä¾å­ããªããã¤ããªã¼ãé¢æ°ãå®ç¾©ããã
+ *    tinet/net/net.h でもバイトオーダの定義を行っているが、
+ *    tinet/net/net.h をインクルードしない
+ *    アプリケーションプログラム用に
+ *    ターゲット依存しないバイトオーダ関数を定義する。
  */
 
 #if defined(_NET_CFG_BYTE_ORDER)
 
-/*  tinet/net/net.h ãã¤ã³ã¯ã«ã¼ããã¦ããã*/
+/*  tinet/net/net.h をインクルードしている。*/
 
 #else	/* of #if defined(_NET_CFG_BYTE_ORDER) */
@@ -186,5 +171,5 @@
 
 /*
- *  TINET ç¬èª API
+ *  TINET 独自 API
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,9 +72,8 @@
 
 /*
- *  IPv4 ã¢ãã¬ã¹
- */
-
-/* åæ¹åç
-§ */
+ *  IPv4 アドレス
+ */
+
+/* 前方参照 */
 
 #ifndef T_IN4_ADDR_DEFINED
@@ -99,10 +86,10 @@
 
 /*
- *  ITRON TCP/IPv4 ã¢ãã¬ã¹/ãã¼ãçªå·ã®å®ç¾©
+ *  ITRON TCP/IPv4 アドレス/ポート番号の定義
  */
 
 typedef struct t_ipv4ep {
-	uint32_t	ipaddr;		/* IPv4 ã¢ãã¬ã¹	*/
-	uint16_t	portno;		/* ãã¼ãçªå·		*/
+	uint32_t	ipaddr;		/* IPv4 アドレス	*/
+	uint16_t	portno;		/* ポート番号		*/
 	} T_IPV4EP;
 
@@ -110,5 +97,5 @@
 
 /*
- *  ã¢ãã¬ã¹ã®é·ã
+ *  アドレスの長さ
  */
 
@@ -116,8 +103,8 @@
 
 /*
- *  IPv4 ã¢ãã¬ã¹ã®å®ç¾©
- */
-
-#define IPV4_ADDRANY		ULONG_C(0x00000000)	/* ITRON TCP/IP æ¨æº	*/
+ *  IPv4 アドレスの定義
+ */
+
+#define IPV4_ADDRANY		ULONG_C(0x00000000)	/* ITRON TCP/IP 標準	*/
 #define IPV4_ADDRBROADCAST	ULONG_C(0xffffffff)
 
@@ -158,5 +145,5 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -167,46 +154,43 @@
 
 /*
- *  åççæç¨ TCP éä¿¡ç«¯ç¹
+ *  動的生成用 TCP 通信端点
  */
 
 typedef struct t_tcp_ccep {
-	/* æ¨æº */
-	ATR		cepatr;		/* éä¿¡ç«¯ç¹å±æ§			*/
-	void		*sbuf;		/* éä¿¡ç¨ã¦ã£ã³ããããã¡	*/
-	int_t		sbufsz;		/* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-	void		*rbuf;		/* åä¿¡ç¨ã¦ã£ã³ããããã¡	*/
-	int_t		rbufsz;		/* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-	FP		callback;	/* ã³ã¼ã«ããã¯			*/
-	/* å®è£
-ä¾å­ */
+	/* 標準 */
+	ATR		cepatr;		/* 通信端点属性			*/
+	void		*sbuf;		/* 送信用ウィンドバッファ	*/
+	int_t		sbufsz;		/* 送信用ウィンドバッファサイズ	*/
+	void		*rbuf;		/* 受信用ウィンドバッファ	*/
+	int_t		rbufsz;		/* 受信用ウィンドバッファサイズ	*/
+	FP		callback;	/* コールバック			*/
+	/* 実装依存 */
 	} T_TCP_CCEP;
 
 /*
- *  åççæç¨ TCP åä»å£
+ *  動的生成用 TCP 受付口
  */
 
 typedef struct t_tcp_crep {
-	/* æ¨æº */
-	ATR		repatr;		/* åä»å£å±æ§		*/
-	T_IPV4EP	myaddr;		/* èªåã®ã¢ãã¬ã¹	*/
-	/* å®è£
-ä¾å­ */
+	/* 標準 */
+	ATR		repatr;		/* 受付口属性		*/
+	T_IPV4EP	myaddr;		/* 自分のアドレス	*/
+	/* 実装依存 */
 	} T_TCP_CREP;
 
 /*
- *  åççæç¨ UDP éä¿¡ç«¯ç¹
+ *  動的生成用 UDP 通信端点
  */
 
 typedef struct t_udp_ccep {
-	/* æ¨æº */
-	ATR		cepatr;		/* UDP éä¿¡ç«¯ç¹å±æ§		*/
-	T_IPV4EP	myaddr;		/* èªåã®ã¢ãã¬ã¹		*/
-	FP		callback;	/* ã³ã¼ã«ããã¯é¢æ°		*/
-	/* å®è£
-ä¾å­ */
+	/* 標準 */
+	ATR		cepatr;		/* UDP 通信端点属性		*/
+	T_IPV4EP	myaddr;		/* 自分のアドレス		*/
+	FP		callback;	/* コールバック関数		*/
+	/* 実装依存 */
 	} T_UDP_CCEP;
 
 /*
- *  TINET ç¬èª API
+ *  TINET 独自 API
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -125,5 +113,5 @@
 
 /*
- *  in_rtinit -- ã«ã¼ãã£ã³ã°è¡¨ãåæåããã
+ *  in_rtinit -- ルーティング表を初期化する。
  */
 
@@ -141,5 +129,5 @@
 
 /*
- *  in_rtnewentry -- æ°ããã¨ã³ããªãç²å¾ããã
+ *  in_rtnewentry -- 新しいエントリを獲得する。
  */
 
@@ -151,5 +139,5 @@
 	int_t		ix;
 
-	/* ç©ºãã¨ã³ããªãæ¢ãã*/
+	/* 空きエントリを探す。*/
 	for (ix = NUM_IN4_STATIC_ROUTE_ENTRY; ix < NUM_IN4_ROUTE_ENTRY; ix ++) {
 		rt = &routing4_tbl[ix];
@@ -160,10 +148,10 @@
 		}
 
-	/* expire ã®åä½ã¯ [s]ã*/
+	/* expire の単位は [s]。*/
 	syscall(get_tim(&now));
 	now /= SYSTIM_HZ;
 
 	if (frt == NULL) {
-		/* ç©ºãããªããã°ãæå¹æéããã£ã¨ãç­ãã¨ã³ããªãç©ºãã«ããã*/
+		/* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/
 		T_IN4_RTENTRY	*srt = NULL;
 		int_t		diff, sdiff = INT_MAX;
@@ -174,5 +162,5 @@
 			diff = (int_t)(rt->expire - now);
 			if (diff <= 0) {	/* rt->expire <= now */
-				/* æ¢ã«ãæå¹æéãéãã¦ããã*/
+				/* 既に、有効時間が過ぎている。*/
 				frt = rt;
 				break;
@@ -195,5 +183,5 @@
 
 /*
- *  in_rttimer -- ã«ã¼ãã£ã³ã°è¡¨ã®ç®¡çã¿ã¤ãã¼
+ *  in_rttimer -- ルーティング表の管理タイマー
  */
 
@@ -204,5 +192,5 @@
 	int_t	ix;
 
-	/* expire ã®åä½ã¯ [s]ã*/
+	/* expire の単位は [s]。*/
 	syscall(get_tim(&now));
 	now /= SYSTIM_HZ;
@@ -219,5 +207,5 @@
 
 /*
- *  in4_get_maxnum_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨­å®å¯è½ãªæå¤§ã¢ãã¬ã¹æ°ãè¿ãã
+ *  in4_get_maxnum_ifaddr -- インタフェースに設定可能な最大アドレス数を返す。
  */
 
@@ -229,5 +217,5 @@
 
 /*
- *  in4_get_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨­å®ããã¦ããã¢ãã¬ã¹ãè¿ãã
+ *  in4_get_ifaddr -- インタフェースに設定されているアドレスを返す。
  */
 
@@ -241,5 +229,5 @@
 
 /*
- *  in4_set_header -- IPv4 ããããè¨­å®ããã
+ *  in4_set_header -- IPv4 ヘッダを設定する。
  */
 
@@ -251,5 +239,5 @@
 	T_IFNET		*ifp = IF_GET_IFNET();
 
-	/* IP ããããè¨­å®ããã*/
+	/* IP ヘッダを設定する。*/
 	ip4h->vhl	= IP4_MAKE_VHL(IPV4_VERSION, IP4_HDR_SIZE >> 2);
 	ip4h->len	= htons(IP4_HDR_SIZE + len);
@@ -259,5 +247,5 @@
 	ip4h->id	= ip4h->flg_off = ip4h->sum = 0;
 
-	/* IP ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* IP アドレスを設定する。*/
 	ip4h->dst	= htonl(*dstaddr);
 
@@ -271,5 +259,5 @@
 
 /*
- *  in4_get_datagram -- IPv4 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨­å®ããã
+ *  in4_get_datagram -- IPv4 データグラムを獲得し、ヘッダを設定する。
  */
 
@@ -282,8 +270,8 @@
 	uint_t	align;
 
-	/* ãã¼ã¿é·ã 4 ãªã¯ãããå¢çã«èª¿æ´ããã*/
+	/* データ長を 4 オクテット境界に調整する。*/
 	align = (len + 3) >> 2 << 2;
 
-	/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+	/* ネットワークバッファを獲得する。*/
 	if ((error = tget_net_buf_ex(nbuf, (uint_t)(IF_IP4_HDR_SIZE + align),
 	                                   (uint_t)(IF_IP4_HDR_SIZE + maxlen), nbatr, tmout)) != E_OK)
@@ -291,12 +279,12 @@
 
 	/*
-	 *  ããå¤§ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããå ´åã®ã¿é·ããèª¿æ´ããã
-	 *  ããå°ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ã®ç²å¾ã¯ãéä¿¡ã¦ã£ã³ããããã¡ã®
-	 *  çã³ãã¼æ©è½ã§ä½¿ç¨ãããå®éã«éä¿¡ããã¾ã§ããã¼ã¿ãµã¤ãºã¯æ±ºå®ã§ããªãã
+	 *  より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。
+	 *  より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの
+	 *  省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。
 	 */
 	if ((nbatr & NBA_SEARCH_ASCENT) != 0)
 		(*nbuf)->len = (uint16_t)(IF_IP4_HDR_SIZE + len);
 
-	/* IP ããããè¨­å®ããã*/
+	/* IP ヘッダを設定する。*/
 	if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK) {
 		syscall(rel_net_buf(*nbuf));
@@ -305,5 +293,5 @@
 		}
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((GET_IP4_SDU(*nbuf) + len), 0, (size_t)(align - len));
@@ -313,7 +301,7 @@
 
 /*
- *  in4_cksum -- IPv4 ã®ãã©ã³ã¹ãã¼ãå±¤ãããã®ãã§ãã¯ãµã ãè¨ç®ããã
- *
- *  æ³¨æ: æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã
+ *  in4_cksum -- IPv4 のトランスポート層ヘッダのチェックサムを計算する。
+ *
+ *  注意: 戻り値はネットワークバイトオーダ
  */
 
@@ -324,8 +312,8 @@
 	uint_t		align;
 
-	/* 4 ãªã¯ãããå¢çã®ãã¼ã¿é· */
+	/* 4 オクテット境界のデータ長 */
 	align = (len + 3) >> 2 << 2;
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((uint8_t*)nbuf->buf + off + len, 0, (size_t)(align - len));
@@ -340,16 +328,16 @@
 
 /*
- *  in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨
- *
- *  æ³¨æ: data ã¯ 4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã
- *        data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨
- *        ä¾å¤ãçºçããå¯è½æ§ãããã
- *        len  ã¯ 4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã
- *
- *        æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã
+ *  in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用
+ *
+ *  注意: data は 4 オクテット単位でパディングすること。
+ *        data が 2 オクテット単位にアラインされていないと
+ *        例外が発生する可能性がある。
+ *        len  は 4 オクテット単位にアラインされていること。
+ *
+ *        戻り値はネットワークバイトオーダ
  */
 
 uint16_t
-in_cksum (void *data, uint_t len /*ãªã¯ãããåä½*/)
+in_cksum (void *data, uint_t len /*オクテット単位*/)
 {
 	uint16_t	sum;
@@ -360,10 +348,9 @@
 
 /*
- *  in4_is_dstaddr_accept -- å®å
-ã¢ãã¬ã¹ã¨ãã¦æ­£ããããã§ãã¯ããã
- *
- *    æ³¨æ: dstaddr ã¯ã
- *          TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã
- *          TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã
+ *  in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
+ *
+ *    注意: dstaddr は、
+ *          TINET-1.2 からネットワークバイトオーダ、
+ *          TINET-1.1 までは、ホストバイトオーダ
  */
 
@@ -378,10 +365,9 @@
 
 /*
- *  inn4_is_dstaddr_accept -- å®å
-ã¢ãã¬ã¹ã¨ãã¦æ­£ããããã§ãã¯ããã
- *
- *    æ³¨æ: dstaddr ã¯ã
- *          TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã
- *          TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã
+ *  inn4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
+ *
+ *    注意: dstaddr は、
+ *          TINET-1.2 からネットワークバイトオーダ、
+ *          TINET-1.1 までは、ホストバイトオーダ
  */
 
@@ -399,10 +385,8 @@
 
 /*
- * in4_addrwithifp -- å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
- *                   ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã
- *                   in6_addrwithifp ãã·ãã¥ã¬ã¼ãããã ãã§ã
- *                   ã¨ã©ã¼ãè¿ããã¨ã¯ãªãã
+ * in4_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、
+ *                   ネットワークインタフェースから探索する。
+ *                   in6_addrwithifp をシミュレートするだけで、
+ *                   エラーを返すことはない。
  */
 
@@ -415,5 +399,5 @@
 
 /*
- *  in4_add_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã« IPv4 ã¢ãã¬ã¹ãè¨­å®ããã
+ *  in4_add_ifaddr -- インタフェースに IPv4 アドレスを設定する。
  */
 
@@ -431,5 +415,5 @@
 
 /*
- *  in4_add_route -- çµè·¯è¡¨ã«ã¨ã³ããªãè¨­å®ããã
+ *  in4_add_route -- 経路表にエントリを設定する。
  */
 
@@ -451,5 +435,5 @@
 
 /*
- *  in4_rtalloc -- ã«ã¼ãã£ã³ã°è¡¨ãæ¢ç´¢ããã
+ *  in4_rtalloc -- ルーティング表を探索する。
  */
 
@@ -477,7 +461,7 @@
 
 /*
- *  in4_rtredirect -- ã«ã¼ãã£ã³ã°è¡¨ã«ã¨ã³ããªãç»é²ããã
- *
- *    æ³¨æ: å¼æ° tmo ã®åä½ã¯ [ms]ã
+ *  in4_rtredirect -- ルーティング表にエントリを登録する。
+ *
+ *    注意: 引数 tmo の単位は [ms]。
  */
 
@@ -496,8 +480,7 @@
 
 /*
- *  in4_timer -- IPv4 å
-±éã¿ã¤ãã¼
- *
- *    1ç§å¨æã§èµ·åãããã
+ *  in4_timer -- IPv4 共通タイマー
+ *
+ *    1秒周期で起動される。
  */
 
@@ -521,6 +504,5 @@
 
 /*
- *  in4_init -- IPv4 å
-±éæ©è½ãåæåããã
+ *  in4_init -- IPv4 共通機能を初期化する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -86,27 +74,27 @@
 
 /*
- *  ã¤ã³ã¿ãã§ã¼ã¹ã¢ãã¬ã¹æ§é ä½
+ *  インタフェースアドレス構造体
  */
 
 typedef struct t_in4_ifaddr {
-	T_IN4_ADDR		addr;		/* IPv4 ã¢ãã¬ã¹	*/
-	T_IN4_ADDR		mask;		/* ãµãããããã¹ã¯	*/
+	T_IN4_ADDR		addr;		/* IPv4 アドレス	*/
+	T_IN4_ADDR		mask;		/* サブネットマスク	*/
 	} T_IN4_IFADDR;
 
 /*
- *  ã«ã¼ãã£ã³ã°è¡¨ã¨ã³ããªæ§é ä½
+ *  ルーティング表エントリ構造体
  */
 
 typedef struct t_in4_rtentry {
-	T_IN4_ADDR	target;		/* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹			*/
-	T_IN4_ADDR	mask;		/* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹ã®ãµãããããã¹ã¯	*/
-	T_IN4_ADDR	gateway;	/* ã²ã¼ãã¦ã§ã¤ã® IP ã¢ãã¬ã¹			*/
-	uint32_t	expire;		/* æå¹æéãåããæå» [s]			*/
-	uint8_t		flags;		/* ãã©ã°					*/
+	T_IN4_ADDR	target;		/* 目標ネットワークアドレス			*/
+	T_IN4_ADDR	mask;		/* 目標ネットワークアドレスのサブネットマスク	*/
+	T_IN4_ADDR	gateway;	/* ゲートウェイの IP アドレス			*/
+	uint32_t	expire;		/* 有効時間が切れる時刻 [s]			*/
+	uint8_t		flags;		/* フラグ					*/
 	} T_IN4_RTENTRY;
 /*
- *  TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©
- *
- *  TINET 1.5 ã¨ã®äºææ§ã®ããã«å®ç¾©ãç¡å¹ã«ããã
+ *  TINET 1.1 との互換性のための定義
+ *
+ *  TINET 1.5 との互換性のために定義を無効にした。
  */
 
@@ -123,5 +111,5 @@
 
 /*
- *  ã«ã¼ãã£ã³ã°è¡¨
+ *  ルーティング表
  */
 
@@ -133,6 +121,5 @@
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -148,5 +135,5 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -154,5 +141,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -171,10 +158,9 @@
 
 /*
- *  in4_is_dstaddr_accept -- å®å
-ã¢ãã¬ã¹ã¨ãã¦æ­£ããããã§ãã¯ããã
- *
- *    æ³¨æ: dstaddr ã¯ã
- *          TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã
- *          TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã
+ *  in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
+ *
+ *    注意: dstaddr は、
+ *          TINET-1.2 からネットワークバイトオーダ、
+ *          TINET-1.1 までは、ホストバイトオーダ
  */
 extern bool_t in4_is_dstaddr_accept (T_IN4_ADDR *myaddr, T_IN4_ADDR *dstaddr);
@@ -182,30 +168,30 @@
 
 /*
- *  in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨
- *
- *  æ³¨æ: data ã¯ 4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã
- *        data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨
- *        ä¾å¤ãçºçããå¯è½æ§ãããã
- *        len  ã¯ 4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã
- */
-extern uint16_t in_cksum(void *data, uint_t len /*ãªã¯ãããåä½*/);
-
-/*
- *  in_cksum_sum -- ãã§ãã¯ãµã ã®åè¨è¨ç®é¢æ°
- *
- *  æ³¨æ: data ã¯ 4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã
- *        data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨
- *        ä¾å¤ãçºçããå¯è½æ§ãããã
- *        len  ã¯ 4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã
- */
-extern uint32_t in_cksum_sum (void *data, uint_t len /*ãªã¯ãããåä½*/);
-
-/*
- *  in_cksum_carry -- ãã§ãã¯ãµã ã®æ¡ä¸ãè¨ç®é¢æ°
- *
- *  æ³¨æ: data ã¯ 4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã
- *        data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨
- *        ä¾å¤ãçºçããå¯è½æ§ãããã
- *        len  ã¯ 4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã
+ *  in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用
+ *
+ *  注意: data は 4 オクテット単位でパディングすること。
+ *        data が 2 オクテット単位にアラインされていないと
+ *        例外が発生する可能性がある。
+ *        len  は 4 オクテット単位にアラインされていること。
+ */
+extern uint16_t in_cksum(void *data, uint_t len /*オクテット単位*/);
+
+/*
+ *  in_cksum_sum -- チェックサムの合計計算関数
+ *
+ *  注意: data は 4 オクテット単位でパディングすること。
+ *        data が 2 オクテット単位にアラインされていないと
+ *        例外が発生する可能性がある。
+ *        len  は 4 オクテット単位にアラインされていること。
+ */
+extern uint32_t in_cksum_sum (void *data, uint_t len /*オクテット単位*/);
+
+/*
+ *  in_cksum_carry -- チェックサムの桁上げ計算関数
+ *
+ *  注意: data は 4 オクテット単位でパディングすること。
+ *        data が 2 オクテット単位にアラインされていないと
+ *        例外が発生する可能性がある。
+ *        len  は 4 オクテット単位にアラインされていること。
  */
 extern uint32_t in_cksum_carry (uint32_t sum);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_itron.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_itron.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_itron.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,8 +36,8 @@
 
 /*
- *  API æ©è½ã»äºè±¡ã³ã¼ã
+ *  API 機能・事象コード
  */
 
-/* TCP é¢ä¿ */
+/* TCP 関係 */
 
 #define TFN_TCP_CRE_REP		(-0x201)
@@ -76,5 +64,5 @@
 #define TEV_TCP_RCV_OOB		(0x201)
 
-/* UDP é¢ä¿ */
+/* UDP 関係 */
 
 #define TFN_UDP_CRE_CEP		(-0x221)
@@ -89,7 +77,7 @@
 #define TEV_UDP_RCV_DAT		(0x221)
 
-/* ä¸è¬ */
+/* 一般 */
 
-#define NADR			((void*)(-1))	/* ç¡å¹ã¢ãã¬ã¹ */
+#define NADR			((void*)(-1))	/* 無効アドレス */
 #define IS_PTR_DEFINED(a)	((void*)(a)!=NADR&&(void*)(a)!=NULL)
 #define TCP_REP_NONE		UINT_C(0)
@@ -98,10 +86,10 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
-/* TCP é¢ä¿ */
+/* TCP 関係 */
 
-/* ãæ¨æºæ©è½ã */
+/* 【標準機能】 */
 
 extern ER	tcp_acp_cep (ID cepid, ID repid, T_IPV4EP *p_dstaddr, TMO tmout);
@@ -120,5 +108,5 @@
 extern ER	tcp6_con_cep (ID cepid, T_IPV6EP *p_myaddr, T_IPV6EP *p_dstaddr, TMO tmout);
 
-/* ãæ¡å¼µæ©è½ã */
+/* 【拡張機能】 */
 
 extern ER	tcp_del_rep (ID cepid);
@@ -133,7 +121,7 @@
 extern ER	tcp6_cre_rep (ID repid, T_TCP6_CREP *pk_crep);
 
-/* UDP é¢ä¿ */
+/* UDP 関係 */
 
-/* ãæ¨æºæ©è½ã */
+/* 【標準機能】 */
 
 extern ER_UINT	udp_snd_dat (ID cepid, T_IPV4EP *p_dstaddr, void *data, int_t len, TMO tmout);
@@ -145,5 +133,5 @@
 extern ER	udp6_can_cep(ID cepid, FN fncd);
 
-/* ãæ¡å¼µæ©è½ã */
+/* 【拡張機能】 */
 
 extern ER	udp_del_cep (ID cepid);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_rename.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_rename.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_rename.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,6 +36,5 @@
 
 /*
- *  TCP/IP ãã­ãã³ã«ã¹ã¿ãã¯å
-é¨åã®ãªãã¼ã 
+ *  TCP/IP プロトコルスタック内部名のリネーム
  */
 
@@ -158,6 +145,6 @@
 #define tmax_tcp_repid		_tinet_tmax_tcp_repid
 #define tmax_tcp_cepid		_tinet_tmax_tcp_cepid
-#define tmax_tcp_crepid		_tinet_tmax_tcp_repid	/* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾© */
-#define tmax_tcp_ccepid		_tinet_tmax_tcp_cepid	/* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾© */
+#define tmax_tcp_crepid		_tinet_tmax_tcp_repid	/* TINET 1.3 との互換性のための定義 */
+#define tmax_tcp_ccepid		_tinet_tmax_tcp_cepid	/* TINET 1.3 との互換性のための定義 */
 
 /* netinet/udp_input.c */
@@ -195,5 +182,5 @@
 #define udp4_cep		_tinet_udp4_cep
 #define tmax_udp_cepid		_tinet_tmax_udp_cepid
-#define tmax_udp_ccepid		_tinet_tmax_udp_cepid	/* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾© */
+#define tmax_udp_ccepid		_tinet_tmax_udp_cepid	/* TINET 1.3 との互換性のための定義 */
 
 /* netinet/ip_icmp.c */
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -117,16 +105,16 @@
 
 /*
- *  in_cksum_sum -- ãã§ãã¯ãµã ã®åè¨è¨ç®é¢æ°
- *
- *  æ³¨æ: data ã¯ 4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã
- *        data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨
- *        ä¾å¤ãçºçããå¯è½æ§ãããã
- *        len  ã¯ 4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã
- *
- *        æ»ãå¤ã¯ãã¹ããã¤ããªã¼ã
+ *  in_cksum_sum -- チェックサムの合計計算関数
+ *
+ *  注意: data は 4 オクテット単位でパディングすること。
+ *        data が 2 オクテット単位にアラインされていないと
+ *        例外が発生する可能性がある。
+ *        len  は 4 オクテット単位にアラインされていること。
+ *
+ *        戻り値はホストバイトオーダ
  */
 
 uint32_t
-in_cksum_sum (void *data, uint_t len /*ãªã¯ãããåä½*/)
+in_cksum_sum (void *data, uint_t len /*オクテット単位*/)
 {
 	uint32_t sum = 0;
@@ -146,10 +134,10 @@
 
 /*
- *  in_cksum_carry -- ãã§ãã¯ãµã ã®æ¡ä¸ãè¨ç®é¢æ°
- *
- *  æ³¨æ: data ã¯ 4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã
- *        data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨
- *        ä¾å¤ãçºçããå¯è½æ§ãããã
- *        len  ã¯ 4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã
+ *  in_cksum_carry -- チェックサムの桁上げ計算関数
+ *
+ *  注意: data は 4 オクテット単位でパディングすること。
+ *        data が 2 オクテット単位にアラインされていないと
+ *        例外が発生する可能性がある。
+ *        len  は 4 オクテット単位にアラインされていること。
  */
 
@@ -168,10 +156,10 @@
 
 /*
- *  in_strtfn -- API æ©è½ã³ã¼ãã®æå­è¡¨ç¾ãè¿ãã
+ *  in_strtfn -- API 機能コードの文字表現を返す。
  */
 
 typedef struct t_strtfn {
-	FN		fncd;	/* API æ©è½ã³ã¼ã	*/
-	const char	*str;	/* æå­è¡¨ç¾		*/
+	FN		fncd;	/* API 機能コード	*/
+	const char	*str;	/* 文字表現		*/
 	} T_STRTFN;
 
@@ -222,5 +210,5 @@
 
 /*
- *  ipv42str -- IPv4 ã¢ãã¬ã¹ãæå­åã«å¤æããã
+ *  ipv42str -- IPv4 アドレスを文字列に変換する。
  */
 
@@ -256,5 +244,5 @@
 
 /*
- *  in6_is_addr_ipv4mapped -- IPv4 å°å½±ã¢ãã¬ã¹ã§ããäºãæ¤æ»ããã
+ *  in6_is_addr_ipv4mapped -- IPv4 射影アドレスである事を検査する。
  */
 
@@ -268,5 +256,5 @@
 
 /*
- *  ip_exchg_addr -- IP ã¢ãã¬ã¹ãäº¤æããã
+ *  ip_exchg_addr -- IP アドレスを交換する。
  */
 
@@ -279,5 +267,5 @@
 	iph  = GET_IP6_HDR(nbuf);
 
-	/* IPv6 ã¢ãã¬ã¹ãäº¤æããã*/
+	/* IPv6 アドレスを交換する。*/
 	ipaddr = iph->src;
 	iph->src = iph->dst;
@@ -293,5 +281,5 @@
 	iph  = GET_IP4_HDR(nbuf);
 
-	/* IPv4 ã¢ãã¬ã¹ãäº¤æããã*/
+	/* IPv4 アドレスを交換する。*/
 	ipaddr = iph->src;
 	iph->src = iph->dst;
@@ -311,5 +299,5 @@
 
 /*
- *  ip_exchg_addr -- IP ã¢ãã¬ã¹ãäº¤æããã
+ *  ip_exchg_addr -- IP アドレスを交換する。
  */
 
@@ -322,5 +310,5 @@
 	iph  = GET_IP_HDR(nbuf);
 
-	/* IP ã¢ãã¬ã¹ãäº¤æããã*/
+	/* IP アドレスを交換する。*/
 	ipaddr = iph->src;
 	iph->src = iph->dst;
@@ -333,6 +321,5 @@
 
 /*
- *  inn_is_dstaddr_accept -- å®å
-ã¢ãã¬ã¹ã¨ãã¦æ­£ããããã§ãã¯ããã
+ *  inn_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
  */
 
@@ -357,5 +344,5 @@
 
 /*
- *  inn_are_net_srcaddr_equal -- ã¢ãã¬ã¹ãåä¸ããã§ãã¯ããã
+ *  inn_are_net_srcaddr_equal -- アドレスが同一かチェックする。
  */
 
@@ -375,5 +362,5 @@
 
 /*
- *  inn_copy_to_host -- IP ããããããã¹ãè¡¨ç¾å¤æãã¦ãIP ã¢ãã¬ã¹ãã³ãã¼ããã
+ *  inn_copy_to_host -- IP ヘッダからホスト表現変換して、IP アドレスをコピーする。
  */
 
@@ -389,5 +376,5 @@
 
 /*
- *  inn_get_datagram -- IPv6/IPv4 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨­å®ããã
+ *  inn_get_datagram -- IPv6/IPv4 データグラムを獲得し、ヘッダを設定する。
  */
 
@@ -413,8 +400,6 @@
 
 /*
- * inn_addrwithifp -- å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
- *                   ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã
+ * inn_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、
+ *                   ネットワークインタフェースから探索する。
  */
 
@@ -435,5 +420,5 @@
 
 /*
- *  inn_is_addr_multicast -- ã¢ãã¬ã¹ããã«ãã­ã£ã¹ãã¢ãã¬ã¹ããã§ãã¯ããã
+ *  inn_is_addr_multicast -- アドレスがマルチキャストアドレスかチェックする。
  */
 
@@ -451,10 +436,10 @@
 
 /*
- *  ãã¤ããªã¼ãé¢æ°ã®å®ç¾©
- *
- *    tinet/net/net.h ã§ããã¤ããªã¼ãã®å®ç¾©ãè¡ã£ã¦ãããã
- *    tinet/net/net.h ãã¤ã³ã¯ã«ã¼ãããªã
- *    ã¢ããªã±ã¼ã·ã§ã³ãã­ã°ã©ã ç¨ã«
- *    ã¿ã¼ã²ããä¾å­ããªããã¤ããªã¼ãé¢æ°ãå®ç¾©ããã
+ *  バイトオーダ関数の定義
+ *
+ *    tinet/net/net.h でもバイトオーダの定義を行っているが、
+ *    tinet/net/net.h をインクルードしない
+ *    アプリケーションプログラム用に
+ *    ターゲット依存しないバイトオーダ関数を定義する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -87,25 +75,23 @@
 
 /*
- *  ç¬èªã®ã¨ã©ã¼ã³ã¼ã
- */
-
-#define EV_NOPND		(-97)		/* ãã³ãã£ã³ã°ãã¦ããªã */
-
-/*
- *  ãããã¯ã¼ã¯ã¨ã©ã¼ã³ã¼ã
- */
-
-#define EV_MSIZE		(-98)		/* ãã¼ã¿ã°ã©ã é·è¶
-é	*/
-#define EV_NURCH		(-99)		/* ãããã¯ã¼ã¯å°éä¸è½	*/
-#define EV_HDOWN		(-100)		/* ãã¹ããã¦ã³		*/
-#define EV_HURCH		(-101)		/* ãã¹ãå°éä¸è½	*/
-#define EV_CNNRF		(-102)		/* æ¥ç¶ä¸è½		*/
-#define EV_CNRST		(-103)		/* æ¥ç¶ãªã»ãã		*/
-#define EV_REXMTMO		(-104)		/* åéã¿ã¤ã ã¢ã¦ã	*/
-
-/*
- *  å
-±éã¿ã¤ãã®èµ·åå¨æã®å®ç¾©
+ *  独自のエラーコード
+ */
+
+#define EV_NOPND		(-97)		/* ペンディングしていない */
+
+/*
+ *  ネットワークエラーコード
+ */
+
+#define EV_MSIZE		(-98)		/* データグラム長超過	*/
+#define EV_NURCH		(-99)		/* ネットワーク到達不能	*/
+#define EV_HDOWN		(-100)		/* ホストダウン		*/
+#define EV_HURCH		(-101)		/* ホスト到達不能	*/
+#define EV_CNNRF		(-102)		/* 接続不能		*/
+#define EV_CNRST		(-103)		/* 接続リセット		*/
+#define EV_REXMTMO		(-104)		/* 再送タイムアウト	*/
+
+/*
+ *  共通タイマの起動周期の定義
  */
 
@@ -113,13 +99,12 @@
 
 /*
- *  ã«ã¼ãã£ã³ã°ã¨ã³ããªç¶æ
-ãã©ã°
- */
-
-#define IN_RTF_DEFINED		UINT_C(0x01)	/* å®ç¾©æ¸ã¿			*/
-#define IN_RTF_REDIRECT		UINT_C(0x10)	/* åãç´ãã«ããèªåè¨­å®ããã	*/
-
-/*
- *  IPv4 ã¨ IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã­
+ *  ルーティングエントリ状態フラグ
+ */
+
+#define IN_RTF_DEFINED		UINT_C(0x01)	/* 定義済み			*/
+#define IN_RTF_REDIRECT		UINT_C(0x10)	/* 向け直しにより自動設定された	*/
+
+/*
+ *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
  */
 
@@ -207,5 +192,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 extern bool_t	inn_is_dstaddr_accept (T_IN6_ADDR *myaddr, T_NET_BUF *nbuf);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  IPv4 ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã
+ *  IPv4 で使用するカーネルオブジェクト
  */
 
@@ -52,5 +40,5 @@
 #ifdef IP4_CFG_FRAGMENT
 
-/* ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æ */
+/* データグラムの分割・再構成 */
 
 CRE_SEM(SEM_IP4_FRAG_QUEUE, { TA_TPRI, 1, 1 });
@@ -60,5 +48,5 @@
 #if NUM_IN4_REDIRECT_ROUTE_ENTRY > 0
 
-/* ã«ã¼ãã£ã³ã°è¡¨ï¼åãç´ãï¼*/
+/* ルーティング表（向け直し）*/
 
 CRE_SEM(SEM_IN4_ROUTING_TBL, { TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -86,6 +74,5 @@
 
 /*
- *  IPv4 ã®å®ç¾©ãRFC791 åç
-§
+ *  IPv4 の定義、RFC791 参照
  */
 
@@ -93,10 +80,10 @@
 
 /*
- *  IPv4 ãããã®å®ç¾©
+ *  IPv4 ヘッダの定義
  */
 
 typedef struct t_ip4_hdr {
 	uint8_t		vhl;		/* version << 4 | header length >> 2	*/
-					/* length ã¯ 4 octets åä½		*/
+					/* length は 4 octets 単位		*/
 	uint8_t		type;		/* type of services			*/
 	uint16_t	len;		/* total length				*/
@@ -116,5 +103,5 @@
 
 /*
- *  IPv4 ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã­
+ *  IPv4 ヘッダ構造体メンバアクセスマクロ
  */
 
@@ -128,24 +115,24 @@
 
 /*
- *  IPv4 ãããã®ãã£ã¼ã«ãã®å¤ã®å®ç¾©
+ *  IPv4 ヘッダのフィールドの値の定義
  */
 
-#define IP4_VHL_BORING	UINT_C(0x45)	/* ãªãã·ã§ã³ããªã VHL å¤	*/
-#define IP4_RF		UINT_C(0x8000)	/* off: äºç´			*/
-#define IP4_DF		UINT_C(0x4000)	/* off: åå²ç¦æ­¢			*/
-#define IP4_MF		UINT_C(0x2000)	/* off: åå²ãã			*/
-#define IP4_OFFMASK	UINT_C(0x1fff)	/* ãªãã»ããé¨ã®ãã¹ã¯å¤		*/
+#define IP4_VHL_BORING	UINT_C(0x45)	/* オプションがない VHL 値	*/
+#define IP4_RF		UINT_C(0x8000)	/* off: 予約			*/
+#define IP4_DF		UINT_C(0x4000)	/* off: 分割禁止			*/
+#define IP4_MF		UINT_C(0x2000)	/* off: 分割あり			*/
+#define IP4_OFFMASK	UINT_C(0x1fff)	/* オフセット部のマスク値		*/
 
 /*
- *  å¶éå¤
+ *  制限値
  */
 
-#define IP4_MAXPACKET	UINT_C(65535)	/* æå¤§ãã±ãããµã¤ãº		*/
-#define IP4_MAXTTL	UINT_C(255)	/* TTL æå¤§å¤			*/
-#define IP4_DEFTTL	UINT_C(64)	/* TTL è¦å®å¤ (RFC1340)		*/
-#define IP4_FRAGTTL	UINT_C(60)	/* åå²ããããã¼ã¿ã°ã©ã ã®çå­æéï¼ç§ï¼*/
-#define IP4_MSS		UINT_C(576)	/* æå¤§ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤	*/
+#define IP4_MAXPACKET	UINT_C(65535)	/* 最大パケットサイズ		*/
+#define IP4_MAXTTL	UINT_C(255)	/* TTL 最大値			*/
+#define IP4_DEFTTL	UINT_C(64)	/* TTL 規定値 (RFC1340)		*/
+#define IP4_FRAGTTL	UINT_C(60)	/* 分割されたデータグラムの生存時間（秒）*/
+#define IP4_MSS		UINT_C(576)	/* 最大セグメントサイズの規定値	*/
 
-/* IPv4 ã¨ IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã­ */
+/* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */
 
 #if !defined(_IP6_CFG) && defined(_IP4_CFG)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip4_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip4_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip4_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,5 +72,5 @@
 
 /*
- *  IPv4 ãããã»ãã¤ã­ã¼ãã¢ã¯ã»ã¹ãã¯ã­
+ *  IPv4 ヘッダ・ペイロードアクセスマクロ
  */
 
@@ -99,11 +87,11 @@
 
 /*
- *  IP ã® MSS ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡
+ *  IP の MSS サイズのネットワークバッファ
  */
 
 typedef struct t_net_buf_ip_mss {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -113,15 +101,15 @@
 #endif
 	uint8_t		buf[IF_HDR_SIZE + IP4_MSS];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 	} T_NET_BUF_IP_MSS;
 
 /*
- *  65536 ãªã¯ããããµã¤ãºã®ãããã¯ã¼ã¯ãããã¡
+ *  65536 オクテットサイズのネットワークバッファ
  */
 
 typedef struct t_net_buf4_65536 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -131,8 +119,8 @@
 #endif
 	uint8_t		buf[IF_IP4_HDR_SIZE + 65536];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 #if defined(IF_PDU_HDR_PADDING)
 	uint8_t		padding[IF_PDU_HDR_PADDING];
-#endif				/* ãããã®ä½å		*/
+#endif				/* ヘッダの余分		*/
 	} T_NET_BUF4_65536;
 
@@ -140,10 +128,10 @@
 
 /*
- *  åæ§æã­ã¥ã¼ç¨ IPv4 ãããã®å®ç¾©
+ *  再構成キュー用 IPv4 ヘッダの定義
  */
 
 typedef struct t_qip4_hdr {
 	uint8_t		vhl;		/* version << 4 | header length >> 2	*/
-					/* length ã¯ 4 octets åä½		*/
+					/* length は 4 octets 単位		*/
 	uint8_t		type;		/* type of services			*/
 	uint16_t	len;		/* total length				*/
@@ -158,5 +146,5 @@
 	uint32_t	src;		/* source address			*/
 
-	T_NET_BUF	*next;		/* æ¬¡ã® IPv4 ãã©ã°ã¡ã³ã			*/
+	T_NET_BUF	*next;		/* 次の IPv4 フラグメント			*/
 	} __attribute__((packed, aligned(2))) T_QIP4_HDR;
 
@@ -171,11 +159,11 @@
 
 /*
- *  ãã¼ã¿ã°ã©ã åæ§æç¨ãããã¯ã¼ã¯ãããã¡
+ *  データグラム再構成用ネットワークバッファ
  */
 
 typedef struct t_net_buf4_reassm {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -185,5 +173,5 @@
 #endif
 	uint8_t		buf[IP4_CFG_FRAG_REASSM_SIZE];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 	} __attribute__((packed, aligned(2))) T_NET_BUF4_REASSM;
 
@@ -191,10 +179,10 @@
 
 /*
- *  TCP ã®åæ§æã­ã¥ã¼ã«ããã IPv4 ãããã®å®ç¾©
+ *  TCP の再構成キューにおける IPv4 ヘッダの定義
  */
 
 typedef struct t_ip4_tcp_q_hdr {
 	uint8_t		vhl;		/* version << 4 | header length >> 2	*/
-					/* length ã¯ 4 octets åä½		*/
+					/* length は 4 octets 単位		*/
 	uint8_t		type;		/* type of services			*/
 	uint16_t	len;		/* total length				*/
@@ -205,5 +193,5 @@
 	uint8_t		ttl;		/* time to live				*/
 	uint8_t		proto;		/* protocol				*/
-	uint16_t	thoff;		/* TCP ãããã®ãªãã»ãã		*/
+	uint16_t	thoff;		/* TCP ヘッダのオフセット		*/
 
 	T_IN4_ADDR	src;		/* source address			*/
@@ -214,6 +202,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -257,5 +244,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip6.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -115,6 +103,5 @@
 
 /*
- *  IPv6 ã®å®ç¾©ãRFC2460 åç
-§
+ *  IPv6 の定義、RFC2460 参照
  */
 
@@ -122,5 +109,5 @@
 
 /*
- *  IPv6 ãããã®å®ç¾©
+ *  IPv6 ヘッダの定義
  */
 
@@ -139,5 +126,5 @@
 
 /*
- *  IPv6 ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã­
+ *  IPv6 ヘッダ構造体メンバアクセスマクロ
  */
 
@@ -149,41 +136,37 @@
 
 /*
- *  æ¡å¼µããã
+ *  拡張ヘッダ
  */
 
 typedef struct t_ip6_ext_hdr {
 	uint8_t		next;		/* Next Header			*/
-	uint8_t		len;		/* 8 ãªã¯ãããåä½ã®é·ã	*/
+	uint8_t		len;		/* 8 オクテット単位の長さ	*/
 	} __attribute__((packed, aligned(2)))T_IP6_EXT_HDR;
 
 /*
- *  ä¸­ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³ããã
+ *  中継点 (Hop-by-Hop) オプションヘッダ
  */
 
 typedef struct t_ip6_hbh_hdr {
 	uint8_t		next;		/* Next Header			*/
-	uint8_t		len;		/* 8 ãªã¯ãããåä½ã®é·ãããã ãã
-					 * ãã®ãªãã·ã§ã³ãããå
-¨ä½ã®ãªã¯ãããæ°ã
-					 * 8 ã§å²ã£ãå¤ã® - 1 ãå
-¥ãã
+	uint8_t		len;		/* 8 オクテット単位の長さ。ただし、
+					 * このオプションヘッダ全体のオクテット数を
+					 * 8 で割った値の - 1 が入る。
 					 */
 	} __attribute__((packed, aligned(2)))T_IP6_HBH_HDR;
 
 /*
- *  çµç¹ (Destination) ãªãã·ã§ã³ããã
+ *  終点 (Destination) オプションヘッダ
  */
 
 typedef struct t_ip6_dest_hdr {
 	uint8_t		next;		/* Next Header			*/
-	uint8_t		len;		/* 8 ãªã¯ãããåä½ã®é·ãããã ãã
-					 * ãã®ãªãã·ã§ã³ãããå
-¨ä½ã®ãªã¯ãããæ°ã
-					 * 8 ã§å²ã£ãå¤ã® - 1 ãå
-¥ãã
+	uint8_t		len;		/* 8 オクテット単位の長さ。ただし、
+					 * このオプションヘッダ全体のオクテット数を
+					 * 8 で割った値の - 1 が入る。
 					 */
 	} __attribute__((packed, aligned(2)))T_IP6_DEST_HDR;
 
-/* ä¸­ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³ */
+/* 中継点 (Hop-by-Hop) オプション */
 
 #define IP6OPT_PAD1		UINT_C(0x00)	/* 00 0 00000 */
@@ -194,51 +177,47 @@
 #define IP6OPT_RTR_ALERT	UINT_C(0x05)	/* 00 0 00101 */
 
-#define IP6OPT_MINLEN		2	/* ãªãã·ã§ã³ã®æç­é·		*/
-
-/* æªç¥ã®ãªãã·ã§ã³ã®å¦çã®æå® */
-
-#define IP6OPT_TYPE_SKIP	UINT_C(0x00)	/* ç¡è¦ããã			*/
-#define IP6OPT_TYPE_DISCARD	UINT_C(0x40)	/* ãã¼ã¿ã°ã©ã ãç ´æ£ããã	*/
-#define IP6OPT_TYPE_FORCEICMP	UINT_C(0x80)	/* ç ´æ£ãã¦ãICMP ãè¿éããã	*/
+#define IP6OPT_MINLEN		2	/* オプションの最短長		*/
+
+/* 未知のオプションの処理の指定 */
+
+#define IP6OPT_TYPE_SKIP	UINT_C(0x00)	/* 無視する。			*/
+#define IP6OPT_TYPE_DISCARD	UINT_C(0x40)	/* データグラムを破棄する。	*/
+#define IP6OPT_TYPE_FORCEICMP	UINT_C(0x80)	/* 破棄して、ICMP を返送する。	*/
 #define IP6OPT_TYPE_ICMP	UINT_C(0xc0)
-		/* ç ´æ£ãã¦ããã«ãã­ã£ã¹ãã§ãªããã° ICMP ãè¿éããã	*/
+		/* 破棄して、マルチキャストでなければ ICMP を返送する。	*/
 
 #define IP6OPT_TYPE(o)		((o)&UINT_C(0xc0))
 
 /*
- *  çµè·¯å¶å¾¡ããã
+ *  経路制御ヘッダ
  */
 
 typedef struct t_ip6_rt_hdr {
 	uint8_t		next;		/* Next Header			*/
-	uint8_t		len;		/* 8 ãªã¯ãããåä½ã®é·ãããã ãã
-					 * ãã®ãªãã·ã§ã³ãããå
-¨ä½ã®ãªã¯ãããæ°ã
-					 * 8 ã§å²ã£ãå¤ã® - 1 ãå
-¥ãã
-					 */
-	uint8_t		type;		/* çµè·¯å¶å¾¡ã¿ã¤ã		*/
-	uint8_t		segleft;	/* ã»ã°ã¡ã³ãã®æ®ã		*/
+	uint8_t		len;		/* 8 オクテット単位の長さ。ただし、
+					 * このオプションヘッダ全体のオクテット数を
+					 * 8 で割った値の - 1 が入る。
+					 */
+	uint8_t		type;		/* 経路制御タイプ		*/
+	uint8_t		segleft;	/* セグメントの残り		*/
 	} __attribute__((packed, aligned(2)))T_IP6_RT_HDR;
 
 /*
- *  ã¿ã¤ã 0 çµè·¯å¶å¾¡ããã
+ *  タイプ 0 経路制御ヘッダ
  */
 
 typedef struct t_ip6_rt0_hdr {
 	uint8_t		next;		/* Next Header			*/
-	uint8_t		len;		/* 8 ãªã¯ãããåä½ã®é·ãããã ãã
-					 * ãã®ãªãã·ã§ã³ãããå
-¨ä½ã®ãªã¯ãããæ°ã
-					 * 8 ã§å²ã£ãå¤ã® - 1 ãå
-¥ãã
-					 */
-	uint8_t		type;		/* çµè·¯å¶å¾¡ã¿ã¤ã		*/
-	uint8_t		segleft;	/* ã»ã°ã¡ã³ãã®æ®ã		*/
-	uint32_t	reserved;	/* äºç´				*/
+	uint8_t		len;		/* 8 オクテット単位の長さ。ただし、
+					 * このオプションヘッダ全体のオクテット数を
+					 * 8 で割った値の - 1 が入る。
+					 */
+	uint8_t		type;		/* 経路制御タイプ		*/
+	uint8_t		segleft;	/* セグメントの残り		*/
+	uint32_t	reserved;	/* 予約				*/
 	} __attribute__((packed, aligned(2)))T_IP6_RT0_HDR;
 
 /*
- *  æ­çããã
+ *  断片ヘッダ
  */
 
@@ -246,9 +225,9 @@
 	uint8_t		next;		/* Next Header			*/
 	uint8_t		reserved;
-	uint16_t	off_flag;	/* ãªãã»ããã¨ãã©ã°		*/
-	uint32_t	ident;		/* åå²è­å¥å­			*/
+	uint16_t	off_flag;	/* オフセットとフラグ		*/
+	uint32_t	ident;		/* 分割識別子			*/
 	} __attribute__((packed, aligned(2)))T_IP6_FRAG_HDR;
 
-/* æ­çãããã®ãªãã»ããã¨ãã©ã° */
+/* 断片ヘッダのオフセットとフラグ */
 
 #ifdef _NET_CFG_BYTE_ORDER
@@ -256,13 +235,13 @@
 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN
 
-#define IP6F_OFF_MASK		UINT_C(0xfff8)		/* ãªãã»ãããååºããã¹ã¯	*/
-#define IP6F_RESERVED_MASK	UINT_C(0x0006)		/* äºç´ãååºããã¹ã¯		*/
-#define IP6F_MORE_FRAG		UINT_C(0x0001)		/* ä¸­éãã©ã°ã¡ã³ã		*/
+#define IP6F_OFF_MASK		UINT_C(0xfff8)		/* オフセットを取出すマスク	*/
+#define IP6F_RESERVED_MASK	UINT_C(0x0006)		/* 予約を取出すマスク		*/
+#define IP6F_MORE_FRAG		UINT_C(0x0001)		/* 中間フラグメント		*/
 
 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN
 
-#define IP6F_OFF_MASK		UINT_C(0xf8ff)		/* ãªãã»ãããååºããã¹ã¯	*/
-#define IP6F_RESERVED_MASK	UINT_C(0x0600)		/* äºç´ãååºããã¹ã¯		*/
-#define IP6F_MORE_FRAG		UINT_C(0x0100)		/* ä¸­éãã©ã°ã¡ã³ã		*/
+#define IP6F_OFF_MASK		UINT_C(0xf8ff)		/* オフセットを取出すマスク	*/
+#define IP6F_RESERVED_MASK	UINT_C(0x0600)		/* 予約を取出すマスク		*/
+#define IP6F_MORE_FRAG		UINT_C(0x0100)		/* 中間フラグメント		*/
 
 #endif	/* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */
@@ -271,24 +250,24 @@
 
 /*
- *  å¶éå¤
- */
-
-#define IPV6_MAXHLIM	UINT_C(255)	/* ããããªãããã®æå¤§å¤				*/
-#define IPV6_DEFHLIM	UINT_C(64)	/* ããããªãããã®è¦å®å¤				*/
-#define IPV6_FRAGTTL	UINT_C(60)	/* åå²ããããã¼ã¿ã°ã©ã ã®çå­æéï¼ç§ï¼	*/
-#define IPV6_MMTU	UINT_C(1280)	/* æå° MTUããã¤ã­ã¼ã (1024) + ããã (256)	*/
-#define IPV6_MAXPACKET	UINT_C(65535)	/* ã¸ã£ã³ããã¤ã­ã¼ããé¤ãæå¤§ãã±ãããµã¤ãº	*/
-
-/*
- *  IPv6 ã¨ IPv4 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã­
- */
-
-/*
- *  ããããªãããã®è¦å®å¤ã¯ãã«ã¼ã¿éç¥ã«ããå¤æ´ããããã¨ããã
+ *  制限値
+ */
+
+#define IPV6_MAXHLIM	UINT_C(255)	/* ホップリミットの最大値				*/
+#define IPV6_DEFHLIM	UINT_C(64)	/* ホップリミットの規定値				*/
+#define IPV6_FRAGTTL	UINT_C(60)	/* 分割されたデータグラムの生存時間（秒）	*/
+#define IPV6_MMTU	UINT_C(1280)	/* 最小 MTU。ペイロード (1024) + ヘッダ (256)	*/
+#define IPV6_MAXPACKET	UINT_C(65535)	/* ジャンボペイロードを除く最大パケットサイズ	*/
+
+/*
+ *  IPv6 と IPv4 をコンパイル時に選択するためのマクロ
+ */
+
+/*
+ *  ホップリミットの規定値は、ルータ通知により変更されることがある
  */
 
 #if NUM_ND6_DEF_RTR_ENTRY > 0
 
-/* ã«ã¼ã¿éç¥ãåä¿¡ããå ´åã¯ãéç¥ãããå¤ */
+/* ルータ通知を受信する場合は、通知された値 */
 
 #define IP6_DEFTTL	ip6_defhlim
@@ -296,5 +275,5 @@
 #else	/* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
 
-/* ã«ã¼ã¿éç¥ãåä¿¡ããªãå ´åã®å¤ã¯æ¢å®å¤ */
+/* ルータ通知を受信しない場合の値は既定値 */
 
 #define IP6_DEFTTL	IPV6_DEFHLIM
@@ -302,5 +281,5 @@
 #endif	/* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
 
-/* IPv4 ã¨ IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã­ */
+/* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */
 
 #ifdef _IP6_CFG
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_icmp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_icmp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_icmp.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -129,5 +117,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -135,6 +123,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -144,5 +131,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -159,7 +146,7 @@
 
 /*
- *  icmp_echo -- ã¨ã³ã¼è¦æ±ãåä¿¡ããã¨ãã®å¦ç
- *
- *    input ã«ã¯ IF ãããã¨ IP ããããå«ã¾ãã¦ããã
+ *  icmp_echo -- エコー要求を受信したときの処理
+ *
+ *    input には IF ヘッダと IP ヘッダも含まれている。
  */
 
@@ -173,10 +160,10 @@
 	NET_COUNT_MIB(icmp_stats.icmpInEchos, 1);
 
-	/* IPv4 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯å¿ç­ããªãã*/
+	/* IPv4 アドレスが未定義の時は応答しない。*/
 	if (!IN4_IS_ADDR_ANY(&ifp->in4_ifaddr.addr)) {
 
 		/*
-		 *  ã¡ãã»ã¼ã¸ã®åãã¨ã³ã¼è¦æ± (8) ãã
-		 *  ã¨ã³ã¼å¿ç­ (0) ã«å¤æ´ãã¦éãè¿ãã
+		 *  メッセージの型をエコー要求 (8) から
+		 *  エコー応答 (0) に変更して送り返す。
 		 */
 
@@ -185,9 +172,6 @@
 
 		/*
-		 *  å®å
-ã¢ãã¬ã¹ã¯åä¿¡ããã¡ãã»ã¼ã¸ã®éä¿¡å
-ã¢ãã¬ã¹ã
-		 *  éä¿¡å
-ã¢ãã¬ã¹ã¯èª IPv4 ã¢ãã¬ã¹ã
+		 *  宛先アドレスは受信したメッセージの送信元アドレス。
+		 *  送信元アドレスは自 IPv4 アドレス。
 		 */
 		ip4h      = GET_IP4_HDR(input);
@@ -195,10 +179,10 @@
 		ip4h->src = htonl(ifp->in4_ifaddr.addr);
 
-		/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+		/* チェックサムを計算する。*/
 		icmp4h->sum = 0;
 		icmp4h->sum = in_cksum(icmp4h,
 		                       (uint_t)(((input->len - GET_IF_IP4_HDR_SIZE(input)) + 3) >> 2 << 2));
 
-		/* éä¿¡ããã*/
+		/* 送信する。*/
 		NET_COUNT_ICMP4(net_count_icmp4.out_octets,
 		               input->len - GET_IF_IP4_HDR_SIZE(input));
@@ -211,5 +195,5 @@
 
 /*
- *  icmp_unreach -- ICMP4_UNREACH ãåä¿¡ããã¨ãã®å¦ç
+ *  icmp_unreach -- ICMP4_UNREACH を受信したときの処理
  */
 
@@ -246,5 +230,5 @@
 	error = code2error[code];
 
-	/* æçµãããã TCP/UDP ã®ã¿å¯¾å¿ããã*/
+	/* 最終ヘッダが TCP/UDP のみ対応する。*/
 	if (ip4h->proto == IPPROTO_TCP || ip4h->proto == IPPROTO_UDP) {
 
@@ -275,7 +259,7 @@
 
 /*
- *  icmp_redirect -- åãç´ãã¡ãã»ã¼ã¸ãåä¿¡ããã¨ãã®å¦ç
- *
- *    input ã«ã¯ IF ãããã¨ IP ããããå«ã¾ãã¦ããã
+ *  icmp_redirect -- 向け直しメッセージを受信したときの処理
+ *
+ *    input には IF ヘッダと IP ヘッダも含まれている。
  */
 
@@ -291,11 +275,10 @@
 
 	/*
-	 *  å
-å®¹ãã§ãã¯ãä»¥ä¸ã®å ´åã¯ã¨ã©ã¼
+	 *  内容チェック、以下の場合はエラー
 	 *
-	 *    ã»ICMP ã³ã¼ãããICMP4_REDIRECT_PORT_AND_HOST (3) ä»¥ä¸
-	 *    ã»ãã¼ã¿ã°ã©ã é·ããICMP ã®æå°é·ããç­ã (IP ããã + ICMP ããã + IP ããã + 8)
-	 *    ã»ãã¼ã¿ã°ã©ã é·ããICMP ã®æå¤§é·ããç­ã
-	 *    ã»
+	 *    ・ICMP コードが、ICMP4_REDIRECT_PORT_AND_HOST (3) 以上
+	 *    ・データグラム長が、ICMP の最小長より短い (IP ヘッダ + ICMP ヘッダ + IP ヘッダ + 8)
+	 *    ・データグラム長が、ICMP の最大長より短い
+	 *    ・
 	 */
 	if (icmp4h->code > ICMP4_REDIRECT_PORT_AND_HOST ||
@@ -313,8 +296,7 @@
 
 /*
- *  icmp_input -- ICMP ã®å
-¥åé¢æ°
- *
- *    input ã«ã¯ IF ãããã¨ IP ããããå«ã¾ãã¦ããã
+ *  icmp_input -- ICMP の入力関数
+ *
+ *    input には IF ヘッダと IP ヘッダも含まれている。
  */
 
@@ -331,5 +313,5 @@
 	NET_COUNT_ICMP4(net_count_icmp4.in_packets, 1);
 
-	/* ICMP ãããã®é·ãããã§ãã¯ããã*/
+	/* ICMP ヘッダの長さをチェックする。*/
 	if (input->len < IF_IP4_ICMP4_HDR_SIZE) {
 		NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1);
@@ -340,13 +322,13 @@
 	icmp4h = (T_ICMP4_HDR *)(input->buf + *offp);
 
-	/* 4 ãªã¯ãããå¢çã®ãã¼ã¿é· */
+	/* 4 オクテット境界のデータ長 */
 	len   = input->len - *offp;
 	align = (len + 3) >> 2 << 2;
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len));
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	if (in_cksum(icmp4h, align) != 0) {
 		NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1);
@@ -354,5 +336,5 @@
 		}
 
-	/* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/
+	/* メッセージの型により分岐する。*/
 	switch (icmp4h->type) {
 	case ICMP4_ECHO_REQUEST:
@@ -409,9 +391,9 @@
 
 /*
- *  icmp_error -- ICMP ã¨ã©ã¼éä¿¡é¢æ°ã
- *
- *    input ã«ã¯ IF ãããã¨ IP ããããå«ã¾ãã¦ããã
- *    icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ã
- *    å¼åºãå´ã§ãéæ¾ãã¦ããçµäºããã	
+ *  icmp_error -- ICMP エラー送信関数。
+ *
+ *    input には IF ヘッダと IP ヘッダも含まれている。
+ *    icmp_error では、ネットワークバッファ input を返却しないので、
+ *    呼出し側で、開放してから終了する。	
  */
 
@@ -428,5 +410,5 @@
 	ip4hl = GET_IP4_HDR_SIZE(input);
 
-	/* éä¿¡ç¨ã® IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/
+	/* 送信用の IP データグラムを獲得する。*/
 	if (input->len - ip4hl < 8)
 		len = input->len - ip4hl;
@@ -440,5 +422,5 @@
 		return;
 
-	/* ICMP ããããè¨­å®ããã*/
+	/* ICMP ヘッダを設定する。*/
 	icmp4h		= GET_ICMP4_HDR(output, IF_IP4_ICMP4_HDR_OFFSET);
 	icmp4h->type	= ICMP4_UNREACH;
@@ -446,21 +428,21 @@
 	icmp4h->data.addr= 0;
 
-	/* ã¨ã©ã¼ãçºçãã IP ãããã¨ ãã¼ã¿ 8 ãªã¯ããããã³ãã¼ããã*/
+	/* エラーが発生した IP ヘッダと データ 8 オクテットをコピーする。*/
 	memcpy(GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET),
 	       GET_IP4_HDR(input), (size_t)(ip4hl + len));
 
-	/* 4 ãªã¯ãããå¢çã®ãã¼ã¿é· */
+	/* 4 オクテット境界のデータ長 */
 	align = (len + 3) >> 2 << 2;
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((uint8_t*)GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET) + ip4hl + len,
 		       0, (size_t)(align - len));
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	icmp4h->sum = 0;
 	icmp4h->sum = in_cksum(icmp4h, (uint_t)(ICMP4_HDR_SIZE + ip4hl + align));
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_ICMP4(net_count_icmp4.out_octets,
 	               output->len - GET_IF_IP4_HDR_SIZE(output));
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_icmp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_icmp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_icmp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -86,11 +74,11 @@
 
 /*
- *  ICMP ãããã®å®ç¾©ãRFC 792
+ *  ICMP ヘッダの定義、RFC 792
  */
 
 typedef struct t_icmp_hdr {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		code;		/* ãµãå		*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		code;		/* サブ型		*/
+	uint16_t	sum;		/* チェックサム		*/
 	union {
 		struct id_seq {
@@ -116,38 +104,38 @@
 
 /*
- *  ã¡ãã»ã¼ã¸ã®å
+ *  メッセージの型
  */
 
-#define ICMP4_ECHO_REPLY	UINT_C(0)	/* ã¨ã³ã¼å¿ç­		*/
-#define ICMP4_UNREACH		UINT_C(3)	/* ã¨ã©ã¼		*/
-#define ICMP4_SOURCE_QUENCH	UINT_C(4)	/* çºä¿¡å¶é		*/
-#define ICMP4_REDIRECT		UINT_C(5)	/* æ¹åå¤æ´		*/
-#define ICMP4_ECHO_REQUEST	UINT_C(8)	/* ã¨ã³ã¼è¦æ±		*/
-#define ICMP4_TIME_EXCEEDED	UINT_C(11)	/* çºä¿¡å¶é		*/
-#define ICMP4_PARAMETER		UINT_C(12)	/* ãã©ã¡ã¼ã¿ç°å¸¸	*/
-#define ICMP4_TIME_REQUEST	UINT_C(13)	/* ã¿ã¤ã ã¹ã¿ã³ãè¦æ±	*/
-#define ICMP4_TIME_REPLY	UINT_C(14)	/* ã¿ã¤ã ã¹ã¿ã³ãå¿ç­	*/
-#define ICMP4_MASK_REQUEST	UINT_C(17)	/* ã¢ãã¬ã¹ãã¹ã¯è¦æ±	*/
-#define ICMP4_MASK_REPLY	UINT_C(18)	/* ã¢ãã¬ã¹ãã¹ã¯å¿ç­	*/
+#define ICMP4_ECHO_REPLY	UINT_C(0)	/* エコー応答		*/
+#define ICMP4_UNREACH		UINT_C(3)	/* エラー		*/
+#define ICMP4_SOURCE_QUENCH	UINT_C(4)	/* 発信制限		*/
+#define ICMP4_REDIRECT		UINT_C(5)	/* 方向変更		*/
+#define ICMP4_ECHO_REQUEST	UINT_C(8)	/* エコー要求		*/
+#define ICMP4_TIME_EXCEEDED	UINT_C(11)	/* 発信制限		*/
+#define ICMP4_PARAMETER		UINT_C(12)	/* パラメータ異常	*/
+#define ICMP4_TIME_REQUEST	UINT_C(13)	/* タイムスタンプ要求	*/
+#define ICMP4_TIME_REPLY	UINT_C(14)	/* タイムスタンプ応答	*/
+#define ICMP4_MASK_REQUEST	UINT_C(17)	/* アドレスマスク要求	*/
+#define ICMP4_MASK_REPLY	UINT_C(18)	/* アドレスマスク応答	*/
 
 /*
- *  ãµãå
+ *  サブ型
  */
 
 /* ICMP4_UNREACH (3)	*/
 
-#define ICMP4_UNREACH_NET		UINT_C(0)	/* ãããã¯ã¼ã¯		*/
-#define ICMP4_UNREACH_HOST		UINT_C(1)	/* ãã¹ã		*/
-#define ICMP4_UNREACH_PROTOCOL		UINT_C(2)	/* ãã­ãã³ã«		*/
-#define ICMP4_UNREACH_PORT		UINT_C(3)	/* ãã¼ã		*/
-#define ICMP4_UNREACH_FLAG		UINT_C(4)	/* åå²			*/
-#define ICMP4_UNREACH_SRC_FAIL		UINT_C(5)	/* ã½ã¼ã¹çµè·¯		*/
-#define ICMP4_UNREACH_NET_UNKNOWN	UINT_C(6)	/* ãããã¯ã¼ã¯ä¸æ	*/
-#define ICMP4_UNREACH_HOST_UNKNOWN	UINT_C(7)	/* ãã¹ãä¸æ		*/
-#define ICMP4_UNREACH_ISOLATED		UINT_C(8)	/* åé¢			*/
+#define ICMP4_UNREACH_NET		UINT_C(0)	/* ネットワーク		*/
+#define ICMP4_UNREACH_HOST		UINT_C(1)	/* ホスト		*/
+#define ICMP4_UNREACH_PROTOCOL		UINT_C(2)	/* プロトコル		*/
+#define ICMP4_UNREACH_PORT		UINT_C(3)	/* ポート		*/
+#define ICMP4_UNREACH_FLAG		UINT_C(4)	/* 分割			*/
+#define ICMP4_UNREACH_SRC_FAIL		UINT_C(5)	/* ソース経路		*/
+#define ICMP4_UNREACH_NET_UNKNOWN	UINT_C(6)	/* ネットワーク不明	*/
+#define ICMP4_UNREACH_HOST_UNKNOWN	UINT_C(7)	/* ホスト不明		*/
+#define ICMP4_UNREACH_ISOLATED		UINT_C(8)	/* 分離			*/
 #define ICMP4_UNREACH_NET_PROHIB	UINT_C(9)	/* 			*/
 #define ICMP4_UNREACH_HOST_PROHIB	UINT_C(10)	/* 			*/
-#define ICMP4_UNREACH_TOS_NET		UINT_C(11)	/* ãããã¯ã¼ã¯ã¸ã®ä¸æ­£TOS*/
-#define ICMP4_UNREACH_TOS_HOST		UINT_C(12)	/* ãã¹ãã¸ã®ä¸æ­£TOS	*/
+#define ICMP4_UNREACH_TOS_NET		UINT_C(11)	/* ネットワークへの不正TOS*/
+#define ICMP4_UNREACH_TOS_HOST		UINT_C(12)	/* ホストへの不正TOS	*/
 #define ICMP4_UNREACH_FILTER_PROHIB	UINT_C(13)	/* 			*/
 #define ICMP4_UNREACH_HOST_PRECEDENCE	UINT_C(14)	/* 			*/
@@ -156,16 +144,15 @@
 /* ICMP4_REDIRECT (5)	*/
 
-#define ICMP4_REDIRECT_NET		UINT_C(0)	/* ãããã¯ã¼ã¯		*/
-#define ICMP4_REDIRECT_HOST		UINT_C(1)	/* ãã¹ã		*/
-#define ICMP4_REDIRECT_PORT_AND_NET	UINT_C(2)	/* ãã¼ãçªå·ã¨ããã	*/
-#define ICMP4_REDIRECT_PORT_AND_HOST	UINT_C(3)	/* ãã¼ãçªå·ã¨ãã¹ã	*/
+#define ICMP4_REDIRECT_NET		UINT_C(0)	/* ネットワーク		*/
+#define ICMP4_REDIRECT_HOST		UINT_C(1)	/* ホスト		*/
+#define ICMP4_REDIRECT_PORT_AND_NET	UINT_C(2)	/* ポート番号とネット	*/
+#define ICMP4_REDIRECT_PORT_AND_HOST	UINT_C(3)	/* ポート番号とホスト	*/
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -177,5 +164,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -189,5 +176,5 @@
 
 /*
- *  TINET ç¬èª API
+ *  TINET 独自 API
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.c	(revision 389)
@@ -5,39 +5,27 @@
 *                   Tomakomai National College of Technology, JAPAN
 *
-*  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation
-*  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
-*  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
-*  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
-*  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-*  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-*      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-*      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-*  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-*      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-*      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-*      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-*  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-*      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
-*    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-*        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-*  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-*      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+*  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation
+*  によって公表されている GNU General Public License の Version 2 に記
+*  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+*  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+*  利用と呼ぶ）することを無償で許諾する．
+*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+*      スコード中に含まれていること．
+*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+*      の無保証規定を掲載すること．
+*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+*      用できない形で再配布する場合には，次の条件を満たすこと．
+*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+*        作権表示，この利用条件および下記の無保証規定を掲載すること．
+*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 *
-*  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-*  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
-*  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
-*  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+*  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+*  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
 *
 *  @(#) $Id$
@@ -239,5 +227,5 @@
 	NET_COUNT_IGMP(net_count_igmp.in_packets, 1);
 
-	/* ICMP ãããã®é·ãããã§ãã¯ããã*/
+	/* ICMP ヘッダの長さをチェックする。*/
 	if (input->len < IF_IP4_IGMP_HDR_SIZE) {
 		NET_COUNT_IGMP(net_count_igmp.in_err_packets, 1);
@@ -248,13 +236,13 @@
 	igmph = (T_IGMPV2_HDR *)(input->buf + *offp);
 
-	/* 4 ãªã¯ãããå¢çã®ãã¼ã¿é· */
+	/* 4 オクテット境界のデータ長 */
 	len = input->len - *offp;
 	align = (len + 3) >> 2 << 2;
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len));
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	if (in_cksum(igmph, align) != 0) {
 		NET_COUNT_IGMP(net_count_igmp.in_err_packets, 1);
@@ -262,5 +250,5 @@
 	}
 
-	/* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/
+	/* メッセージの型により分岐する。*/
 	switch (igmph->type) {
 	case IGMP_MEMBERSHIP_QUERY:
@@ -268,5 +256,5 @@
 		ret = false;
 
-		/* åå ä¸­ã®ã°ã«ã¼ãã¢ãã¬ã¹ããã®ã¯ã¨ãªã¼ã®å ´å */
+		/* 参加中のグループアドレスからのクエリーの場合 */
 		syscall(wai_sem(SEM_IGMP_GROUP_LOCK));
 
@@ -283,5 +271,5 @@
 
 		if (ret) {
-			/* ã¡ã³ãã¼ã·ãããªãã¼ããéä¿¡ */
+			/* メンバーシップリポートを送信 */
 			igmp_send_report_v2(ip4h->src);
 		}
@@ -305,5 +293,5 @@
 		return false;
 
-	/* IGMP ããããè¨­å®ããã*/
+	/* IGMP ヘッダを設定する。*/
 	igmph = GET_IGMPV2_HDR(output, IF_IP4_IGMP_HDR_OFFSET);
 	igmph->type = IGMP_MEMBERSHIP_REPORT_V2;
@@ -311,17 +299,17 @@
 	igmph->addr = htonl(dst);
 
-	/* 4 ãªã¯ãããå¢çã®ãã¼ã¿é· */
+	/* 4 オクテット境界のデータ長 */
 	align = (len + 3) >> 2 << 2;
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((uint8_t*)GET_IGMP_SDU(output, IF_IP4_IGMP_HDR_OFFSET) + len,
 			0, (size_t)(align - len));
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	igmph->sum = 0;
 	igmph->sum = in_cksum(igmph, (uint_t)(IGMP_HDR_SIZE + align));
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_IGMP(net_count_igmp.out_octets,
 		output->len - GET_IF_IP4_HDR_SIZE(output));
@@ -335,6 +323,5 @@
 
 /*
-*  igmp_timer -- IGMP å
-±éã¿ã¤ãã¼
+*  igmp_timer -- IGMP 共通タイマー
 */
 static void igmp_timer(void *ignore)
@@ -367,5 +354,5 @@
 
 /*
-*  igmp_init -- IGMP æ©è½ãåæåããã
+*  igmp_init -- IGMP 機能を初期化する。
 */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  IGMP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  IGMP コンフィギュレーションファイル
  */
 
 #if defined(_IP4_CFG) && defined(SUPPORT_IGMP)
 
-/* IGMP ã°ã«ã¼ãæ´æ°ç¨ã»ããã© */
+/* IGMP グループ更新用セマフォ */
 
 CRE_SEM(SEM_IGMP_GROUP_LOCK, { TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  *
  *  @(#) $Id$
@@ -47,64 +35,60 @@
 #define _IP_IGMP_H_
 
-#define NUM_IGMP_ENTRY				5	/* ãã«ãã­ã£ã¹ãã°ã«ã¼ãã®ã¨ã³ããªæ° */
+#define NUM_IGMP_ENTRY				5	/* マルチキャストグループのエントリ数 */
 
  /*
-  *  IGMPv1 ãããã®å®ç¾©ãRFC 1112
+  *  IGMPv1 ヘッダの定義、RFC 1112
   */
 
 typedef struct t_igmpv1_hdr
 {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		unused;		/* æªä½¿ç¨			*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
-	T_IN4_ADDR	addr;		/* ã°ã«ã¼ãã¢ãã¬ã¹ */
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		unused;		/* 未使用			*/
+	uint16_t	sum;		/* チェックサム		*/
+	T_IN4_ADDR	addr;		/* グループアドレス */
 }  __attribute__((packed)) T_IGMPV1_HDR;
 
 /*
-*  IGMPv2 ãããã®å®ç¾©ãRFC 2236
+*  IGMPv2 ヘッダの定義、RFC 2236
 */
 
 typedef struct t_igmpv2_hdr
 {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		time;		/* æå¤§å¿ç­æé		*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
-	T_IN4_ADDR	addr;		/* ã°ã«ã¼ãã¢ãã¬ã¹ */
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		time;		/* 最大応答時間		*/
+	uint16_t	sum;		/* チェックサム		*/
+	T_IN4_ADDR	addr;		/* グループアドレス */
 }  __attribute__((packed)) T_IGMPV2_HDR;
 
 typedef struct t_igmpv3_query_hdr
 {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		time;		/* æå¤§å¿ç­æé		*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
-	T_IN4_ADDR	grpaddr;	/* ã°ã«ã¼ãã¢ãã¬ã¹ */
-	uint8_t		sqrv;		/* Sãã©ã°ãQuerier Robustness Value */
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		time;		/* 最大応答時間		*/
+	uint16_t	sum;		/* チェックサム		*/
+	T_IN4_ADDR	grpaddr;	/* グループアドレス */
+	uint8_t		sqrv;		/* Sフラグ、Querier Robustness Value */
 	uint8_t		qqic;		/* Qurier's Query Interval Code */
-	uint16_t	num;		/* éä¿¡å
-ã®æ° */
-	T_IN4_ADDR	sdraddr;	/* éä¿¡å
-ã¢ãã¬ã¹ */
+	uint16_t	num;		/* 送信元の数 */
+	T_IN4_ADDR	sdraddr;	/* 送信元アドレス */
 }  __attribute__((packed)) T_IGMPV3Q_HDR;
 
 typedef struct t_igmp_group_record
 {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		len;		/* è£å©ãã¼ã¿é·		*/
-	uint16_t	num;		/* éä¿¡å
-ã®æ° */
-	T_IN4_ADDR	grpaddr;	/* ã°ã«ã¼ãã¢ãã¬ã¹ */
-	T_IN4_ADDR	sdraddr;	/* éä¿¡å
-ã¢ãã¬ã¹	*/
-							/* è£å©ãã¼ã¿		*/
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		len;		/* 補助データ長		*/
+	uint16_t	num;		/* 送信元の数 */
+	T_IN4_ADDR	grpaddr;	/* グループアドレス */
+	T_IN4_ADDR	sdraddr;	/* 送信元アドレス	*/
+							/* 補助データ		*/
 }  __attribute__((packed)) T_IGMP_GROUP_RECORD;
 
 typedef struct t_igmpv3_report_hdr
 {
-	uint8_t		type;		/* ã¡ãã»ã¼ã¸ã®å	*/
-	uint8_t		rsv1;		/* äºç´				*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
-	uint16_t	rsv2;		/* äºç´				*/
-	uint16_t	num;		/* ã°ã«ã¼ãã¬ã³ã¼ãã®æ° */
-	T_IGMP_GROUP_RECORD record;	/* ã°ã«ã¼ãã¬ã³ã¼ã */
+	uint8_t		type;		/* メッセージの型	*/
+	uint8_t		rsv1;		/* 予約				*/
+	uint16_t	sum;		/* チェックサム		*/
+	uint16_t	rsv2;		/* 予約				*/
+	uint16_t	num;		/* グループレコードの数 */
+	T_IGMP_GROUP_RECORD record;	/* グループレコード */
 }  __attribute__((packed)) T_IGMPV3R_HDR;
 
@@ -121,15 +105,15 @@
 
 /*
-*  ã¡ãã»ã¼ã¸ã®å
+*  メッセージの型
 */
 
-#define IGMP_MEMBERSHIP_QUERY		0x11	/* ã¡ã³ãã¼ã·ããã¯ã¨ãªã¼		*/
-#define IGMP_MEMBERSHIP_REPORT		0x12	/* ã¡ã³ãã¼ã·ããã¬ãã¼ã		*/
-#define IGMP_MEMBERSHIP_REPORT_V2	0x16	/* ã¡ã³ãã¼ã·ããã¬ãã¼ã		*/
-#define IGMP_LEAVE_GROUP			0x17	/* ãªã¼ãã°ã«ã¼ã				*/
-#define IGMP_MEMBERSHIP_REPORT_V3	0x22	/* ã¡ã³ãã¼ã·ããã¬ãã¼ã		*/
+#define IGMP_MEMBERSHIP_QUERY		0x11	/* メンバーシップクエリー		*/
+#define IGMP_MEMBERSHIP_REPORT		0x12	/* メンバーシップレポート		*/
+#define IGMP_MEMBERSHIP_REPORT_V2	0x16	/* メンバーシップレポート		*/
+#define IGMP_LEAVE_GROUP			0x17	/* リーブグループ				*/
+#define IGMP_MEMBERSHIP_REPORT_V3	0x22	/* メンバーシップレポート		*/
 
 /*
-*  UDPéä¿¡ç«¯ç¹ãªãã·ã§ã³
+*  UDP通信端点オプション
 */
 
@@ -164,12 +148,12 @@
 
 /*
- *  IGMP ã°ã«ã¼ãã¨ã³ããª
+ *  IGMP グループエントリ
  */
 
 typedef struct igmp_entry
 {
-	int16_t		timer;		/* éä¿¡ã¾ã§ã®æé[ç§]	*/
-	int16_t		resptime;	/* æå¤§å¿ç­æé[ç§]	*/
-	T_IN4_ADDR	ip_addr;	/* IP ã¢ãã¬ã¹			*/
+	int16_t		timer;		/* 送信までの時間[秒]	*/
+	int16_t		resptime;	/* 最大応答時間[秒]	*/
+	T_IN4_ADDR	ip_addr;	/* IP アドレス			*/
 } T_IGMP_ENTRY;
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -141,5 +129,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -147,6 +135,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -158,5 +145,5 @@
 
 /*
- *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼
+ *  データグラム再構成キュー
  */
 
@@ -165,5 +152,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -172,5 +159,5 @@
 
 /*
- *  ip_get_frag_queue -- ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãç²å¾ããã
+ *  ip_get_frag_queue -- データグラム再構成キューを獲得する。
  */
 
@@ -182,5 +169,5 @@
 
 /*
- *  ip_freef -- ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãè§£æ¾ããã
+ *  ip_freef -- データグラム再構成キューを解放する。
  */
 
@@ -200,5 +187,5 @@
 
 /*
- *  ip_frag_timer -- ãã¼ã¿ã°ã©ã åæ§æç®¡çã¿ã¤ã
+ *  ip_frag_timer -- データグラム再構成管理タイマ
  */
 
@@ -223,5 +210,5 @@
 
 /*
- *  ip_reass -- ãã¼ã¿ã°ã©ã ãåæ§æããã
+ *  ip_reass -- データグラムを再構成する。
  */
 
@@ -247,5 +234,5 @@
 
 	/*
-	 *  IDãIPã¢ãã¬ã¹ãä¸ä½ãã­ãã³ã«ãç°ãªããã©ã°ã¡ã³ããã­ã¥ã¼ã«æãã°ç ´æ£ããã
+	 *  ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。
 	 */
 	frag = ip_frag_queue[ix];
@@ -264,6 +251,5 @@
 		NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN], 1);
 
-		/* æ°è¦ã® ID ãªããå®å
-ã¢ãã¬ã¹ãä¿å­ãã¦ãã­ã¥ã¼ã«ã¤ãªãã*/
+		/* 新規の ID なら、宛先アドレスを保存して、キューにつなぐ。*/
 		frag_dst  [ix] = dst;
 		ip_frag_queue[ix] = input;
@@ -271,11 +257,10 @@
 		input = NULL;
 
-		/* åæ§æã¿ã¤ã ã¢ã¦ããè¨­å®ããã*/
+		/* 再構成タイムアウトを設定する。*/
 		ip4h->ttl = IP4_FRAGTTL;
 		}
 	else {
 
-		/* æ­£ããä½ç½®ã«æ¿å
-¥ããã*/
+		/* 正しい位置に挿入する。*/
 		prev = NULL;
 		while (frag != NULL &&
@@ -294,10 +279,9 @@
 		input = NULL;
 
-		/* å
-¨ã¦ã®ãã©ã°ã¡ã³ããæã£ã¦ãããèª¿ã¹ãã*/
+		/* 全てのフラグメントが揃っているか調べる。*/
 		off = 0;
 		for (frag = ip_frag_queue[ix]; frag != NULL; frag = GET_QIP4_HDR(frag)->next) {
 			if ((IP4_FLGOFF_OFF(GET_QIP4_HDR(frag)->flg_off) << 3) != off) {
-				/* éä¸­ãæãã¦ãããçµäºããã*/
+				/* 途中が抜けていたら終了する。*/
 				syscall(sig_sem(SEM_IP4_FRAG_QUEUE));
 				return NULL;
@@ -307,14 +291,13 @@
 			}
 
-		/* å
-¨ã¦ã®ãã©ã°ã¡ã³ããæã£ããåæ§æããã*/
+		/* 全てのフラグメントが揃ったら再構成する。*/
 		if ((GET_QIP4_HDR(prev)->flg_off & IP4_MF) == 0) {
 
-			/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+			/* ネットワークバッファを獲得する。*/
 			if (tget_net_buf(&input, IF_IP4_HDR_SIZE + off, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) {
 				NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN_OK], 1);
 				NET_COUNT_MIB(ip_stats.ipReasmOKs, 1);
 
-				/* IPv4 ããããè¨­å®ããã*/
+				/* IPv4 ヘッダを設定する。*/
 				frag  = ip_frag_queue[ix];
 				ip4h  = GET_IP4_HDR(input);
@@ -326,5 +309,5 @@
 				ip4h->flg_off = ip4h->id = 0;
 
-				/* ãã¼ã¿ã°ã©ã ãåæ§æããã*/
+				/* データグラムを再構成する。*/
 				off = IP4_HDR_SIZE;
 				while (frag != NULL) {
@@ -340,5 +323,5 @@
 				NET_COUNT_MIB(ip_stats.ipReasmFails, 1);
 				}
-			/* ã­ã¥ã¼ãç©ºã«ããã*/
+			/* キューを空にする。*/
 			ip_freef(ix);
 			}
@@ -351,5 +334,5 @@
 
 /*
- *  ip_init -- IP ã®åæå
+ *  ip_init -- IP の初期化
  */
 
@@ -361,5 +344,5 @@
 
 /*
- *  ip_remove_options -- IPv4 ãããã®ãªãã·ã§ã³ãåé¤ããä»¥éãåã«è©°ããã
+ *  ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。
  */
 
@@ -385,12 +368,10 @@
 
 /*
- *  ip_input -- IP ã®å
-¥åé¢æ°
+ *  ip_input -- IP の入力関数
  */
 
 #if defined(SUPPORT_IPSEC)
 /*
- * TODO: IPsec SPãæ¤ç´¢ãããã±ããããªã¸ã§ã¯ããããã©ããå¤å®ããå¦çãå®è£
-ãã
+ * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実装する
  */
 #endif /* of defined(SUPPORT_IPSEC) */
@@ -408,5 +389,5 @@
 	NET_COUNT_MIB(ip_stats.ipInReceives, 1);
 
-	/* IP ãããã®é·ãããã§ãã¯ããã*/
+	/* IP ヘッダの長さをチェックする。*/
 	if (input->len < IF_IP4_HDR_SIZE) {
 		NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1);
@@ -418,5 +399,5 @@
 	hlen = GET_IP4_HDR_SIZE(input);
 
-	/* ãã¼ã¸ã§ã³ããã§ãã¯ããã*/
+	/* バージョンをチェックする。*/
 	if (IP4_VHL_V(ip4h->vhl) != IPV4_VERSION) {
 		NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_VER], 1);
@@ -425,11 +406,11 @@
 		}
 
-	/* IP ãããã®é·ãããã§ãã¯ãããªãã·ã§ã³ãè§£æããã*/
+	/* IP ヘッダの長さをチェックし、オプションを解析する。*/
 	if (hlen > IP4_HDR_SIZE) {
 		NET_COUNT_IP4(net_count_ip4[NC_IP4_OPTS], 1);
-		/* %%% ãªãã·ã§ã³ã®è§£æ %%% */
-		}
-
-	/* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ããã*/
+		/* %%% オプションの解析 %%% */
+		}
+
+	/* データグラム長をチェックする。*/
 	if (ntohs(ip4h->len) > input->len - IF_HDR_SIZE) {
 		NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1);
@@ -438,8 +419,8 @@
 		}
 
-	/* ãããã¯ã¼ã¯ãããã¡ã®é·ãããã¼ã¿ã°ã©ã é·ã«èª¿æ´ããã*/
+	/* ネットワークバッファの長さをデータグラム長に調整する。*/
 	input->len = (uint16_t)(ntohs(ip4h->len) + IF_HDR_SIZE);
 
-	/* ãã§ãã¯ãµã ããã§ãã¯ããã*/
+	/* チェックサムをチェックする。*/
 	if (in_cksum(ip4h, hlen) != 0) {
 		NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_CKSUM], 1);
@@ -448,11 +429,10 @@
 		}
 
-	/* IP ãããã®é·ãããã§ãã¯ããä¸ä½ã ICMP ä»¥å¤ã¯ãªãã·ã§ã³ãæ¶å»ããã*/
+	/* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/
 	if (hlen > IP4_HDR_SIZE && ip4h->proto != IPPROTO_ICMP) {
 		memset((uint8_t*)ip4h + IP4_HDR_SIZE, 0, hlen - IP4_HDR_SIZE);
 		}
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ããã§ãã¯ããã*/
+	/* 送信元アドレスをチェックする。*/
 	src = ntohl(ip4h->src);
 	bc  = (ifp->in4_ifaddr.addr & ifp->in4_ifaddr.mask) | ~ifp->in4_ifaddr.mask;
@@ -476,6 +456,5 @@
 #endif	/* of #ifdef SUPPORT_LOOP */
 
-	/* ãã¦å
-ã¢ãã¬ã¹ããã§ãã¯ããã*/
+	/* あて先アドレスをチェックする。*/
 	dst = ntohl(ip4h->dst);
 
@@ -483,6 +462,6 @@
 
 	/*
-	 *  DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ãã­ã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾©ã®
-	 *  å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã
+	 *  DHCP_CFG が定義されているときは、ローカルアドレスが未定義の
+	 *  場合もデータグラムを受信する。
 	 */
 
@@ -529,5 +508,5 @@
 #ifdef IP4_CFG_FRAGMENT
 
-	/* åå²ããã¦ããããã§ãã¯ããã*/
+	/* 分割されているかチェックする。*/
 	if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) {
 		if ((input = ip_reass(ip4h, input)) == NULL)
@@ -537,5 +516,5 @@
 #else	/* of #ifdef IP4_CFG_FRAGMENT */
 
-	/* åå²ããã¦ããããã§ãã¯ããã*/
+	/* 分割されているかチェックする。*/
 	if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) {
 		T_IN4_ADDR	src;
@@ -555,5 +534,5 @@
 
 #if defined(SUPPORT_IPSEC)
-	/* ããã§ipsec4_in_rejectãå®è¡ãã */
+	/* ここでipsec4_in_rejectを実行する */
 	if ((ip4h->proto != IPPROTO_ESP) && ipsec4_in_reject (input)) {
 		goto buf_rel;
@@ -561,5 +540,5 @@
 #endif /* of #if defined(SUPPORT_IPSEC) */
 
-	/* ãã­ãã³ã«ãé¸æãã */
+	/* プロトコルを選択する */
 	switch (ip4h->proto) {
 
@@ -607,5 +586,5 @@
 		NET_COUNT_MIB(ip_stats.ipInUnknownProtos, 1);
 
-		/* ã­ã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/
+		/* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
 		if (dst == ifp->in4_ifaddr.addr) {
 			T_IN4_ADDR	src;
@@ -616,6 +595,6 @@
 			}
 		/*
-		 *  icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§
-		 *  éæ¾ãã¦ããçµäºããã
+		 *  icmp_error では、ネットワークバッファ input を返却しないので
+		 *  開放してから終了する。
 		 */
 		break;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_output.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_output.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_output.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -123,7 +111,7 @@
 
 /*
- *  IP output -- IP ã®åºåé¢æ°
- *
- *    æ³¨æ: ãã¼ã¸ã§ã³ã¨ãããé·ã¯ä¸ä½å±¤ã§è¨­å®ããã
+ *  IP output -- IP の出力関数
+ *
+ *    注意: バージョンとヘッダ長は上位層で設定する。
  */
 
@@ -144,7 +132,7 @@
 
 #ifdef SUPPORT_IPSEC
-        /* XXX: IPsecã®å¦çã¯ãã±ããæ­çåã®åã«è¡ããã */
-
-	/* SPDãåå¾ãã */
+        /* XXX: IPsecの処理はパケット断片化の前に行われる */
+
+	/* SPDを取得する */
 	sp = ipsec4_getpolicybyaddr(output, IPSEC_DIR_OUTBOUND, &ipsec_error);
 	if (sp==NULL) {
@@ -153,5 +141,5 @@
         }
 
-        /* ããªã·ããã§ãã¯ãã*/
+        /* ポリシをチェックする*/
 #if 0
         switch (sp->policy) {
@@ -165,7 +153,7 @@
 
         case  IPSEC_POLICY_IPSEC:
-                /* XXX: SH2ã§ã¯ããã§illegal Instructionãçºçãããã³ã³ãã¤ã©ã®ãã°? */
+                /* XXX: SH2ではここでillegal Instructionが発生する。コンパイラのバグ? */
                 if (sp->req == NULL) {
-                        /* éµäº¤æãã¼ã¢ã³ã«å¯¾ãã¦SAã®åå¾ãè¦æ±ãã */
+                        /* 鍵交換デーモンに対してSAの取得を要求する */
                         goto bad;
                 }
@@ -173,11 +161,10 @@
 
         default:
-                /* ä¸æ­£ãªããªã· */
+                /* 不正なポリシ */
                 goto bad;
                 break;
         }
 #else /* 0 */
-        /* XXX: ã³ã³ãã¤ã©ã®ä¸å
-·ååé¿ã®ãã switchãããifæã§æ¸ãç´ãã */
+        /* XXX: コンパイラの不具合回避のため switchをやめif文で書き直した */
         policy = sp->spinitb->policy;
 
@@ -188,5 +175,5 @@
         else if (policy == IPSEC_POLICY_IPSEC) {
                 if (sp->req == NULL)
-                        /* éµäº¤æãã¼ã¢ã³ã«å¯¾ãã¦SAã®åå¾ãè¦æ±ãã */
+                        /* 鍵交換デーモンに対してSAの取得を要求する */
                         goto bad;
         } else
@@ -199,11 +186,10 @@
 
 			state.m = output;
-			/* XXX: ipsec4_output()å
-ã§ã¯ãip->{len,off}ããããã¯ã¼ã¯ãã¤ããªã¼ãã¨ãã */
+			/* XXX: ipsec4_output()内では、ip->{len,off}をネットワークバイトオーダとする */
 			error = ipsec4_output (&state, sp, 0 /* flags */ );
 			output = state.m;
 
 			if (error) {
-				/* net_buf ã¯ipsec4_outputã«ãã£ã¦æ¢ã«è§£æ¾ããã¦ãã */
+				/* net_buf はipsec4_outputによって既に解放されている */
 				switch (error) {
 				default:
@@ -213,7 +199,6 @@
 		}
 
-        /* ipsec4_outputã«å½±é¿ãåããå¤ãæ´æ°ãã */
-        /* XXX: å¿
-è¦ã? */
+        /* ipsec4_outputに影響を受けた値を更新する */
+        /* XXX: 必要か? */
 
 skip_ipsec:
@@ -227,7 +212,6 @@
 
 	/*
-	 *  ãã¼ã¿ã°ã©ã ãµã¤ãºããããã¯ã¼ã¯ã® MTU ãè¶
-ãã¦ããã°ã
-	 *  åå²ãã¦éä¿¡ããã
+	 *  データグラムサイズがネットワークの MTU を超えていれば、
+	 *  分割して送信する。
 	 */
 	if (ntohs(ip4h->len) > IF_MTU) {
@@ -247,14 +231,14 @@
 				flen = len - off;
 
-			/* ãã¼ã¿é·ã¯ 4 ãªã¯ãããå¢çã«èª¿æ´ããã	*/
+			/* データ長は 4 オクテット境界に調整する。	*/
 			align = (flen + 3) >> 2 << 2;
 
-			/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+			/* ネットワークバッファを獲得する。*/
 			if (tget_net_buf(&frag, align + IF_IP4_HDR_SIZE, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) {
 
-				/* ãã©ã°ã¡ã³ããã³ãã¼ããã*/
+				/* フラグメントをコピーする。*/
 				memcpy(GET_IP4_SDU(frag), (uint8_t *)ip4h + off, flen);
 
-				/* ããããåããã*/
+				/* ヘッダを埋める。*/
 				fip4h		= GET_IP4_HDR(frag);
 				*fip4h		= *ip4h;
@@ -279,5 +263,5 @@
 				}
 			else {
-				/* ç²å¾ã§ããªããã°ãéä¿¡ããããããã*/
+				/* 獲得できなければ、送信をあきらめる。*/
 				syscall(rel_net_buf(output));
 				NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1);
@@ -294,5 +278,5 @@
 	else {
 
-		/* ããããåããã*/
+		/* ヘッダを埋める。*/
 		ip4h->id  = htons(frag_id);
 		frag_id ++;
@@ -312,10 +296,9 @@
 	ip4h = GET_IP4_HDR(output);
 
-	/* ãã¼ã¿ã°ã©ã ãµã¤ãºããããã¯ã¼ã¯ã® MTU ãè¶
-ãã¦ããã°ã¨ã©ã¼ */
+	/* データグラムサイズがネットワークの MTU を超えていればエラー */
 	if (ntohs(ip4h->len) > IF_MTU)
 		return E_PAR;
 
-	/* ããããåããã*/
+	/* ヘッダを埋める。*/
 	ip4h->id  = htons(frag_id);
 	frag_id ++;
@@ -327,5 +310,5 @@
 
 #ifdef ETHER_CFG_MULTICAST
-	/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®å ´åã¯IPã¢ãã¬ã¹ã¯ãã®ã¾ã¾ */
+	/* マルチキャストアドレスの場合はIPアドレスはそのまま */
 	gw = ntohl(ip4h->dst);
 	if(!IN4_IS_ADDR_MULTICAST(gw))
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -87,5 +75,5 @@
 
 /*
- *  IPv4 ã¨ IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã­
+ *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  TCP ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã
+ *  TCP で使用するカーネルオブジェクト
  */
 
 #ifdef SUPPORT_TCP
 
-/* åºåã¿ã¹ã¯ */
+/* 出力タスク */
 
 CRE_TSK(TCP_OUTPUT_TASK, {
@@ -61,5 +49,5 @@
 	});
 
-/* ã»ããã© */
+/* セマフォ */
 
 CRE_SEM(SEM_TCP_POST_OUTPUT,	{ TA_TPRI, 0, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,24 +72,21 @@
 
 /*
- *  TCP ããããRFC 793 åç
-§
+ *  TCP ヘッダ、RFC 793 参照
  */
 
 typedef struct t_tcp_hdr {
-	uint16_t	sport;		/* éä¿¡å
-ãã¼ãçªå·			*/
-	uint16_t	dport;		/* å®å
-ãã¼ãçªå·			*/
+	uint16_t	sport;		/* 送信元ポート番号			*/
+	uint16_t	dport;		/* 宛先ポート番号			*/
 
-	uint32_t	seq;		/* SEQ çªå·				*/
+	uint32_t	seq;		/* SEQ 番号				*/
 
-	uint32_t	ack;		/* ACK çªå·				*/
+	uint32_t	ack;		/* ACK 番号				*/
 
-	uint8_t		doff;		/* ãã¼ã¿ãªãã»ãã(ä¸ä½4ããã)	*/
-	uint8_t		flags;		/* ãã©ã°(ä¸ä½6ããã)			*/
-	uint16_t	win;		/* ã¦ã£ã³ããµã¤ãº			*/
+	uint8_t		doff;		/* データオフセット(上位4ビット)	*/
+	uint8_t		flags;		/* フラグ(下位6ビット)			*/
+	uint16_t	win;		/* ウィンドサイズ			*/
 
-	uint16_t	sum;		/* ãã§ãã¯ãµã 				*/
-	uint16_t	urp;		/* ç·æ¥ãã¤ã³ã¿				*/
+	uint16_t	sum;		/* チェックサム				*/
+	uint16_t	urp;		/* 緊急ポインタ				*/
 	} __attribute__((packed, aligned(2)))T_TCP_HDR;
 
@@ -109,5 +94,5 @@
 
 /*
- *  TCP ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã­
+ *  TCP ヘッダ構造体メンバアクセスマクロ
  */
 
@@ -117,51 +102,50 @@
 
 /*
- *  TCP ãããã®ãã©ã°ãã£ã¼ã«ãã®å¤ã®å®ç¾©
+ *  TCP ヘッダのフラグフィールドの値の定義
  */
 
-#define TCP_FLG_FIN		UINT_C(0x01)	/* FIN:	æçµ			*/
-#define TCP_FLG_SYN		UINT_C(0x02)	/* SYN:	åæ			*/
-#define TCP_FLG_RST		UINT_C(0x04)	/* RST:	ã³ãã¯ã·ã§ã³ã®ãªã»ãã	*/
-#define TCP_FLG_PUSH		UINT_C(0x08)	/* PUSH:ããã·ã¥æ©è½		*/
-#define TCP_FLG_ACK		UINT_C(0x10)	/* ACK:	è¯å®å¿ç­		*/
-#define TCP_FLG_URG		UINT_C(0x20)	/* URG:	ç·æ¥æ
-å ±		*/
+#define TCP_FLG_FIN		UINT_C(0x01)	/* FIN:	最終			*/
+#define TCP_FLG_SYN		UINT_C(0x02)	/* SYN:	同期			*/
+#define TCP_FLG_RST		UINT_C(0x04)	/* RST:	コネクションのリセット	*/
+#define TCP_FLG_PUSH		UINT_C(0x08)	/* PUSH:プッシュ機能		*/
+#define TCP_FLG_ACK		UINT_C(0x10)	/* ACK:	肯定応答		*/
+#define TCP_FLG_URG		UINT_C(0x20)	/* URG:	緊急情報		*/
 
 /*
- *  TCP ãªãã·ã§ã³ã®å®ç¾©
+ *  TCP オプションの定義
  */
 
-/* ãªãã·ã§ã³ã®å */
+/* オプションの型 */
 
-#define TCP_OPT_EOL		UINT_C(0)	/* æçµ				*/
-#define TCP_OPT_NOP		UINT_C(1)	/* ä½ãããªã			*/
-#define TCP_OPT_MAXSEG		UINT_C(2)	/* æå¤§ã»ã°ã¡ã³ãé·		*/
-#define TCP_OPT_WINDOW		UINT_C(3)	/* ã¦ã£ã³ãã¹ã±ã¼ãªã³ã°		*/
-#define TCP_OPT_SACK_PERM	UINT_C(4)	/* é¸æ ACK è¨±å¯		*/
-#define TCP_OPT_SACK		UINT_C(5)	/* é¸æ ACK			*/
-#define TCP_OPT_TIMESTAMP	UINT_C(8)	/* ã¿ã¤ã ã¹ã¿ã³ã		*/
-#define TCP_OPT_CC		UINT_C(11)	/* æ¥ç¶ã«ã¦ã³ã			*/
-#define TCP_OPT_CCNEW		UINT_C(12)	/* æ¥ç¶ã«ã¦ã³ã			*/
-#define TCP_OPT_CCECHO		UINT_C(13)	/* æ¥ç¶ã«ã¦ã³ã			*/
+#define TCP_OPT_EOL		UINT_C(0)	/* 最終				*/
+#define TCP_OPT_NOP		UINT_C(1)	/* 何もしない			*/
+#define TCP_OPT_MAXSEG		UINT_C(2)	/* 最大セグメント長		*/
+#define TCP_OPT_WINDOW		UINT_C(3)	/* ウィンドスケーリング		*/
+#define TCP_OPT_SACK_PERM	UINT_C(4)	/* 選択 ACK 許可		*/
+#define TCP_OPT_SACK		UINT_C(5)	/* 選択 ACK			*/
+#define TCP_OPT_TIMESTAMP	UINT_C(8)	/* タイムスタンプ		*/
+#define TCP_OPT_CC		UINT_C(11)	/* 接続カウント			*/
+#define TCP_OPT_CCNEW		UINT_C(12)	/* 接続カウント			*/
+#define TCP_OPT_CCECHO		UINT_C(13)	/* 接続カウント			*/
 
-/* ãªãã·ã§ã³ã®é·ã */
+/* オプションの長さ */
 
-#define TCP_OPT_LEN_MAXSEG	4		/* æå¤§ã»ã°ã¡ã³ãé·		*/
-#define TCP_OPT_LEN_WINDOW	3		/* ã¦ã£ã³ãã¹ã±ã¼ãªã³ã°		*/
-#define TCP_OPT_LEN_SACK_PERM	4		/* é¸æ ACK è¨±å¯		*/
-#define TCP_OPT_LEN_SACK	5		/* é¸æ ACK			*/
-#define TCP_OPT_LEN_TIMESTAMP	10		/* ã¿ã¤ã ã¹ã¿ã³ã		*/
-#define TCP_OPT_LEN_CC		6		/* æ¥ç¶ã«ã¦ã³ã			*/
-#define TCP_OPT_LEN_CCNEW	6		/* æ¥ç¶ã«ã¦ã³ã			*/
-#define TCP_OPT_LEN_CCECHO	6		/* æ¥ç¶ã«ã¦ã³ã			*/
+#define TCP_OPT_LEN_MAXSEG	4		/* 最大セグメント長		*/
+#define TCP_OPT_LEN_WINDOW	3		/* ウィンドスケーリング		*/
+#define TCP_OPT_LEN_SACK_PERM	4		/* 選択 ACK 許可		*/
+#define TCP_OPT_LEN_SACK	5		/* 選択 ACK			*/
+#define TCP_OPT_LEN_TIMESTAMP	10		/* タイムスタンプ		*/
+#define TCP_OPT_LEN_CC		6		/* 接続カウント			*/
+#define TCP_OPT_LEN_CCNEW	6		/* 接続カウント			*/
+#define TCP_OPT_LEN_CCECHO	6		/* 接続カウント			*/
 
 /*
- *  TCP æå¤§ã»ã°ã¡ã³ããµã¤ãº
+ *  TCP 最大セグメントサイズ
  */
 
 /*
- *  IPv4 ã® TCP æå¤§ã»ã°ã¡ã³ããµã¤ãº
- *  IP4_MSS ã¯ 576 ã§ãæ¨æºã® IPv4 ãããé· (20) ã¨
- *  TCP ãããé· (20) ãå¼ããå¤ 536 ã§ãããã512 ãæ¨æºã¨ããã
+ *  IPv4 の TCP 最大セグメントサイズ
+ *  IP4_MSS は 576 で、標準の IPv4 ヘッダ長 (20) と
+ *  TCP ヘッダ長 (20) を引いた値 536 であるが、512 を標準とする。
  */
 
@@ -169,7 +153,7 @@
 
 /*
- *  IPv6 ã® TCP æå¤§ã»ã°ã¡ã³ããµã¤ãº
- *  IPV6_MMTU ã¯ 1280 ã§ãæ¨æºã® IPv6 ãããé· (40) ã¨
- *  TCP ãããé· (20) ãå¼ããå¤ 1220 ã§ãããã1024 ãæ¨æºã¨ããã
+ *  IPv6 の TCP 最大セグメントサイズ
+ *  IPV6_MMTU は 1280 で、標準の IPv6 ヘッダ長 (40) と
+ *  TCP ヘッダ長 (20) を引いた値 1220 であるが、1024 を標準とする。
  */
 
@@ -177,7 +161,7 @@
 
 /*
- *  TCP æå°ã»ã°ã¡ã³ããµã¤ãº
+ *  TCP 最小セグメントサイズ
  *
- *  256ï¼æå°ãªã³ã¯ MTUï¼- 40 = 216
+ *  256（最小リンク MTU）- 40 = 216
  */
 
@@ -185,5 +169,5 @@
 
 /*
- *  TCP æå¤§ã¦ã£ã³ãã¦ãµã¤ãº
+ *  TCP 最大ウィンドウサイズ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_fsm.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_fsm.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_fsm.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,29 +72,21 @@
 
 /*
- *  TCP FSM ç¶æ
-ã®å®ç¾©ãRFC 793 åç
-§
+ *  TCP FSM 状態の定義、RFC 793 参照
  */
 
-#define TCP_FSM_CLOSED		0	/* ã¯ã­ã¼ãº				*/
-#define TCP_FSM_LISTEN		1	/* ååãªã¼ãã³				*/
-#define TCP_FSM_SYN_SENT	2	/* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿		*/
-#define TCP_FSM_SYN_RECVD	3	/* ååãªã¼ãã³ãSYN åä¿¡æ¸ã¿		*/
-#define TCP_FSM_ESTABLISHED	4	/* ã³ãã¯ã·ã§ã³éè¨­å®äº			*/
-#define TCP_FSM_CLOSE_WAIT	5	/* ç¸æãã FIN åä¿¡ãAPP ã®çµäºå¾
-ã¡	*/
-#define TCP_FSM_FIN_WAIT_1	6	/* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾
-ã¡	*/
-#define TCP_FSM_CLOSING		7	/* åæã¯ã­ã¼ãºãFIN äº¤ææ¸ã¿ãACK å¾
-ã¡	*/
-#define TCP_FSM_LAST_ACK	8	/* APP ãçµäºãACK å¾
-ã¡			*/
-#define TCP_FSM_FIN_WAIT_2	9	/* ç¸æããã® FIN å¾
-ã¡			*/
-#define TCP_FSM_TIME_WAIT	10	/* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾
-ã¡	*/
+#define TCP_FSM_CLOSED		0	/* クローズ				*/
+#define TCP_FSM_LISTEN		1	/* 受動オープン				*/
+#define TCP_FSM_SYN_SENT	2	/* 能動オープン、SYN 送信済み		*/
+#define TCP_FSM_SYN_RECVD	3	/* 受動オープン、SYN 受信済み		*/
+#define TCP_FSM_ESTABLISHED	4	/* コネクション開設完了			*/
+#define TCP_FSM_CLOSE_WAIT	5	/* 相手から FIN 受信、APP の終了待ち	*/
+#define TCP_FSM_FIN_WAIT_1	6	/* APP が終了、FIN 送信済み、ACK 待ち	*/
+#define TCP_FSM_CLOSING		7	/* 同時クローズ、FIN 交換済み、ACK 待ち	*/
+#define TCP_FSM_LAST_ACK	8	/* APP が終了、ACK 待ち			*/
+#define TCP_FSM_FIN_WAIT_2	9	/* 相手からの FIN 待ち			*/
+#define TCP_FSM_TIME_WAIT	10	/* 相手からの FIN 受信済み、時間待ち	*/
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -128,9 +116,9 @@
 
 /*
- *  æ»ãå¤
+ *  戻り値
  *
- *      RET_OK		æ­£å¸¸
- *	RET_DROP	ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã
- *	RET_RST_DROP	ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
+ *      RET_OK		正常
+ *	RET_DROP	エラー、セグメントを破棄する。
+ *	RET_RST_DROP	エラー、RST を送信し、セグメントを破棄する。
  */
 
@@ -142,5 +130,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -159,5 +147,5 @@
 
 /*
- *  parse_option -- TCP ãããã®ãªãã·ã§ã³ãè§£æããã
+ *  parse_option -- TCP ヘッダのオプションを解析する。
  */
 
@@ -214,5 +202,5 @@
 
 /*
- *  set_rexmt_timer -- æ°ããå¾å¾©æéãåéããåéã¿ã¤ããæ´æ°ããã
+ *  set_rexmt_timer -- 新しい往復時間を収集し、再送タイマを更新する。
  */
 
@@ -225,20 +213,20 @@
 	if (cep->srtt != 0) {
 		/*
-		 *  srtt: å¹³æ»åããã RTT
+		 *  srtt: 平滑化された RTT
 		 *
-		 *  è¨æ¸¬ããã RTT (rtt) ã¨ç¾å¨ã®å¹³æ»åããã RTT (srtt) ã®å·® (delta) ãæ±ããã
+		 *  計測された RTT (rtt) と現在の平滑化された RTT (srtt) の差 (delta) を求める。
 		 *
-		 *  delta ã¯ 2 ãããå·¦ã·ãã ( 4 å) ããå¤ã§ä¿æããã
-		 *  srtt  ã¯ 5 ãããå·¦ã·ãã (32 å) ããå¤ã§ä¿æããã¦ããã
+		 *  delta は 2 ビット左シフト ( 4 倍) した値で保持する。
+		 *  srtt  は 5 ビット左シフト (32 倍) した値で保持されている。
 		 *
 		 *    delta = rtt / 8 - srtt / 8
 		 *
-		 *  æ°ãã srtt ã¯
+		 *  新しい srtt は
 		 *
 		 *    srtt = rtt / 8 + srtt * 7 / 8
 		 *         = srtt + (rtt / 8 - srtt / 8)
 		 *
-		 *  ã§è¨ç®ããã
-		 *  ãã®ãããrtt ã 2 ãããå·¦ã·ããããsrtt ã (5 - 2) ãããå³ã·ãããã¦ delta ãæ±ããã
+		 *  で計算する。
+		 *  このため、rtt を 2 ビット左シフトし、srtt を (5 - 2) ビット右シフトして delta を求める。
 		 */
 		delta = ((rtt - 1) << TCP_DELTA_SHIFT) - (cep->srtt >> (TCP_SRTT_SHIFT - TCP_DELTA_SHIFT));
@@ -248,5 +236,5 @@
 
 		/*
-		 *  delta ã®çµ¶å¯¾å¤ | delta | ãæ±ããã
+		 *  delta の絶対値 | delta | を求める。
 		 */
 		if (delta < 0)
@@ -254,16 +242,16 @@
 
 		/*
-		 *  rttvar: å¹³æ»åãããåæ£
+		 *  rttvar: 平滑化された分散
 		 *
-		 *  rttvar ã¯ 4 ãããå·¦ã·ãã (16 å) ããå¤ã§ä¿æããã¦ããã
+		 *  rttvar は 4 ビット左シフト (16 倍) した値で保持されている。
 		 *
 		 *    delta = |delta| / 4 - rttvar / 4
 		 *
-		 *  æ°ãã rttvar ã¯
+		 *  新しい rttvar は
 		 *
 		 *    rttvar = |delta|/ 4 + rttvar * 3 /4
 		 *           = rttvar + (|delta| / 4 - rttvar / 4)
 		 *
-		 *  ã§è¨ç®ããã
+		 *  で計算する。
 		 */
 		delta -= cep->rttvar >> (TCP_RTTVAR_SHIFT - TCP_DELTA_SHIFT);
@@ -274,7 +262,7 @@
 	else {
 		/*
-		 *  ã¾ã  srtt ã®è¨­å®ãè¡ããã¦ããªãã¨ãã¯ãä»åè¨æ¸¬ããã RTT ãä½¿ç¨ããã
-		 *  å¹³æ»åããã RTT (srtt) ã«ã¯ãRTT ã 5 ãããå·¦ã·ãã (32å) ããå¤ã
-		 *  å¹³æ»åãããåæ£ (rttvar) ã«ã¯ãRTT ã® 1/2 ã 4 ãããå·¦ã·ãã (16å) ããå¤ã
+		 *  まだ srtt の設定が行われていないときは、今回計測された RTT を使用する。
+		 *  平滑化された RTT (srtt) には、RTT を 5 ビット左シフト (32倍) した値。
+		 *  平滑化された分散 (rttvar) には、RTT の 1/2 を 4 ビット左シフト (16倍) した値。
 		 */
 		cep->srtt   = rtt <<  TCP_SRTT_SHIFT;
@@ -283,10 +271,10 @@
 
 	/*
-	 *  rtt ã®æ¸¬å®ãçµäºããåéåæ°ããªã»ããããã
+	 *  rtt の測定を終了し、再送回数をリセットする。
 	 */
 	cep->rtt = cep->rxtshift = 0;
 
 	/*
-	 *  RTT ã«è¨±ãããæå°å¤ ã¨ rtt + 2 ã®å¤§ããªå¤ã®æ¹ãåéã¿ã¤ã ã¢ã¦ãã®æå°å¤ã«ããã
+	 *  RTT に許される最小値 と rtt + 2 の大きな値の方を再送タイムアウトの最小値にする。
 	 */
 	if (rtt + 2 < TCP_TVAL_MIN)
@@ -301,5 +289,5 @@
 
 /*
- *  reassemble -- åä¿¡ã»ã°ã¡ã³ããåæ§æãããé çªéãã«åä¿¡ããã¨ãã®å¦ç
+ *  reassemble -- 受信セグメントを再構成する。順番通りに受信したときの処理
  */
 
@@ -313,5 +301,5 @@
 	if (tcph->sum > cep->rbufsz - cep->rwbuf_count) {
 		/*
-		 *  åä¿¡ã¦ã£ã³ããããã¡ã«ç©ºãããªãã¨ãã¯ç ´æ£ããã
+		 *  受信ウィンドバッファに空きがないときは破棄する。
 		 */
 		NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DROP_SEGS], 1);
@@ -324,7 +312,7 @@
 	         cep->fsm_state == TCP_FSM_ESTABLISHED) {
 		/*
-		 *  é çªéãã«ã»ã°ã¡ã³ããåä¿¡ããæã®å¦ç
-		 *  åä¿¡ã»ã°ã¡ã³ãã®ä¸¦ã¹æ¿ãã¯ä¸è¦ãªã®ã§
-		 *  ãã®ã¾ã¾åä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã
+		 *  順番通りにセグメントを受信した時の処理
+		 *  受信セグメントの並べ替えは不要なので
+		 *  そのまま受信ウィンドバッファに書き込む。
 		 */
 
@@ -341,12 +329,11 @@
 		qhdr = GET_TCP_Q_HDR(input, thoff);
 
-		/*  TCP ãããã®ä½ç½®ãä¿å­ããã*/
+		/*  TCP ヘッダの位置を保存する。*/
 		SET_IP_TCP_Q_HDR_OFFSET(input, thoff);
 
-		/* SDU ã®ãªãã»ããï¼å
-ã¯ã¦ã£ã³ããµã¤ãºï¼ããªã»ããããã*/
+		/* SDU のオフセット（元はウィンドサイズ）をリセットする。*/
 		qhdr->soff = 0;
 
-		/* ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã*/
+		/* データを受信ウィンドバッファに書き込む。*/
 		TCP_WRITE_RWBUF(cep, input, thoff);
 		}
@@ -359,11 +346,10 @@
 
 /*
- *  listening -- ååãªã¼ãã³ãã¦ï¼ç¶æ
-ã LISTEN ã®å¦ç
+ *  listening -- 受動オープンして，状態が LISTEN の処理
  *
- *    æ»ãå¤:
- *      RET_OK		æ­£å¸¸
- *	RET_DROP	ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã
- *	RET_RST_DROP	ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
+ *    戻り値:
+ *      RET_OK		正常
+ *	RET_DROP	エラー、セグメントを破棄する。
+ *	RET_RST_DROP	エラー、RST を送信し、セグメントを破棄する。
  */
 
@@ -376,5 +362,5 @@
 
 	/* 
-	 *  ãã©ã°ã« RST ãã»ããããã¦ããã°ç ´æ£ããã
+	 *  フラグに RST がセットされていれば破棄する。
 	 */
 	if (tcph->flags & TCP_FLG_RST)
@@ -382,6 +368,6 @@
 
 	/*  
-	 *  ãã©ã°ã« ACK ãã»ãããã¦ãããã°ã
-	 *  ãªã»ãããéã£ã¦ç ´æ£ããã
+	 *  フラグに ACK がセットさてれいれば、
+	 *  リセットを送って破棄する。
 	 */
 	if (tcph->flags & TCP_FLG_ACK)
@@ -389,5 +375,5 @@
 
 	/* 
-	 *  ãã©ã°ã« SYN ãã»ããããã¦ããªããã°ãã°ç ´æ£ããã
+	 *  フラグに SYN がセットされていなければれば破棄する。
 	 */
 	if ((tcph->flags & TCP_FLG_SYN) == 0)
@@ -395,21 +381,21 @@
 
 	/*
-	 *  åä¿¡å¯è½ãª IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ã§ãããã¨ãç¢ºèªããã
+	 *  受信可能な IP アドレスとポート番号であることを確認する。
 	 */
 	if (!tcp_is_addr_accept(input, thoff))
 		return RET_DROP;
 
-	/* ç¸æã®ã¢ãã¬ã¹ãè¨é²ããã*/
+	/* 相手のアドレスを記録する。*/
 	IN_COPY_TO_HOST(&cep->dstaddr.ipaddr, input);
 	cep->dstaddr.portno = tcph->sport;
 
-	/* ãªãã·ã§ã³ãå¦çããã*/
+	/* オプションを処理する。*/
 	parse_option(tcph, cep);
 
-	/* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/
+	/* シーケンス番号を初期化する。*/
 	if (tcp_iss == 0)
 		tcp_init_iss();
 
-	/* èªåã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤ãè¨é²ããã*/
+	/* 自分のシーケンス番号の初期値を記録する。*/
 	if (iss != 0)
 		cep->iss = iss;
@@ -419,15 +405,15 @@
 	tcp_iss += TCP_ISS_INCR() / 4;
 
-	/* ç¸æã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤ãè¨é²ããã*/
+	/* 相手のシーケンス番号の初期値を記録する。*/
 	cep->irs = tcph->seq;
 
-	/* éåä¿¡ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/
+	/* 送受信シーケンス番号を初期化する。*/
 	init_send_seq(cep);
 	init_receive_seq(cep);
 
-	/* éä¿¡ã¦ã¤ã³ããµã¤ãºãè¨­å®ããã*/
+	/* 送信ウインドサイズを設定する。*/
 	cep->snd_wnd = tcph->win;
 
-	/* æçµè¨­å® */
+	/* 最終設定 */
 	cep->flags    |= TCP_CEP_FLG_ACK_NOW;
 	cep->fsm_state = TCP_FSM_SYN_RECVD;
@@ -438,11 +424,10 @@
 
 /*
- *  syn_sent -- è½åãªã¼ãã³ãã¦ãç¶æ
-ã SYN éä¿¡æ¸ã®å¦ç
+ *  syn_sent -- 能動オープンして、状態が SYN 送信済の処理
  *
- *    æ»ãå¤:
- *      RET_OK		æ­£å¸¸
- *	RET_DROP	ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã
- *	RET_RST_DROP	ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
+ *    戻り値:
+ *      RET_OK		正常
+ *	RET_DROP	エラー、セグメントを破棄する。
+ *	RET_RST_DROP	エラー、RST を送信し、セグメントを破棄する。
  */
 
@@ -453,9 +438,9 @@
 
 	/*
-	 *  ç¸æããåä¿¡ç¢ºèªãéããã¦æ¥ã¦ãã
+	 *  相手から受信確認が送られて来ても、
 	 *
-	 *    ACK <= iss && éä¿¡ããæå¤§ SEQ (snd_max) < ACK
+	 *    ACK <= iss && 送信した最大 SEQ (snd_max) < ACK
 	 *
-	 *  ãªãããªã»ãããéã£ã¦ã»ã°ã¡ã³ããç ´æ£ããã
+	 *  なら、リセットを送ってセグメントを破棄する。
 	 */
 	if ((tcph->flags & TCP_FLG_ACK) &&
@@ -464,6 +449,6 @@
 
 	/*
-	 *  RST/ACK ãã©ã°ã®å¿ç­ãããã°ããã¼ããéãã¦ããªã
-	 *  ãã¨ãæå³ãã¦ããã
+	 *  RST/ACK フラグの応答があれば、ポートが開いていない
+	 *  ことを意味している。
 	 */
 	if (tcph->flags & TCP_FLG_RST) {
@@ -476,31 +461,29 @@
 
 	/*
-	 *  SYN ãã©ã°ããªããã°ã»ã°ã¡ã³ããç ´æ£ããã
+	 *  SYN フラグがなければセグメントを破棄する。
 	 */
 	if ((tcph->flags & TCP_FLG_SYN) == 0)
 		return RET_DROP;
 
-	cep->snd_wnd = tcph->win;	/* snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº	*/
-	cep->irs     = tcph->seq;	/* irs:     ç¸æã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤	*/
-	init_receive_seq(cep);		/* éåä¿¡ã·ã¼ã±ã³ã¹çªå·ãåæåããã		*/
+	cep->snd_wnd = tcph->win;	/* snd_wnd: 相手の受信可能ウィンドサイズ	*/
+	cep->irs     = tcph->seq;	/* irs:     相手のシーケンス番号の初期値	*/
+	init_receive_seq(cep);		/* 送受信シーケンス番号を初期化する。		*/
 
 	if (tcph->flags & TCP_FLG_ACK) {
 		/*
-		 *  ACK ãã©ã°ãããã¨ãã®å¦ç
+		 *  ACK フラグがあるときの処理
 		 *
-		 *  åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ (rcv_adv) ã
-		 *  åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº (rcv_wnd) åé²ããã
-		 */
-		cep->rcv_adv += cep->rcv_wnd;	/* rcv_adv: åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ	*/
-						/* rcv_wnd: åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº		*/
-
-		/* æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ã SYN å (1 ãªã¯ããã) é²ããã*/
+		 *  受信を期待している最大の SEQ (rcv_adv) を
+		 *  受信可能なウィンドサイズ (rcv_wnd) 分進める。
+		 */
+		cep->rcv_adv += cep->rcv_wnd;	/* rcv_adv: 受信を期待している最大の SEQ	*/
+						/* rcv_wnd: 受信可能なウィンドサイズ		*/
+
+		/* 未確認の最小送信 SEQ (snd_una) を SYN 分 (1 オクテット) 進める。*/
 		cep->snd_una ++;
 
 #ifdef TCP_CFG_DELAY_ACK
 
-		if (tcph->sum != 0)		/* tcph->sum ã¯ SDU é· */
+		if (tcph->sum != 0)		/* tcph->sum は SDU 長 */
 			cep->flags |= TCP_CEP_FLG_DEL_ACK;
 		else
@@ -515,8 +498,7 @@
 		if (cep->flags & TCP_CEP_FLG_NEED_FIN) {
 			/*
-			 *  CEP ã§ FIN éä¿¡ãè¦æ±ããã¦ããã°ã
-			 *  åæ­å¦çãéå§ãã
-			 *  CEP ã®ç¶æ
-ã FIN Wait 1 ã«ããã
+			 *  CEP で FIN 送信が要求されていれば、
+			 *  切断処理を開始し、
+			 *  CEP の状態を FIN Wait 1 にする。
 			 */
 			cep->fsm_state = TCP_FSM_FIN_WAIT_1;
@@ -526,8 +508,6 @@
 		else {
 			/*
-			 *  ç¸æãã ACK ãå¿ç­ãããã®ã§ã
-			 *  CEP ã®ç¶æ
-ã ã³ãã¯ã·ã§ã³éè¨­å®äºç¶æ
-ã«ããã
+			 *  相手から ACK が応答されたので、
+			 *  CEP の状態を コネクション開設完了状態にする。
 			 */
 			cep->timer[TCP_TIM_KEEP] = TCP_TVAL_KEEP_IDLE;
@@ -540,5 +520,5 @@
 			if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) {
 
-				/* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/
+				/* 相手のアドレスをコピーする。*/
 
 #if defined(_IP6_CFG) && defined(_IP4_CFG)
@@ -590,6 +570,5 @@
 		}
 	else {
-		/* ACK ãã©ã°ããªãã¨ãã¯ãACK ãéã£ã¦ãCEP ã®ç¶æ
-ã SYN åä¿¡æ¸ã¿ã«ããã*/
+		/* ACK フラグがないときは、ACK を送って、CEP の状態を SYN 受信済みにする。*/
 		cep->flags |= TCP_CEP_FLG_ACK_NOW;
 		cep->timer[TCP_TIM_REXMT] = 0;
@@ -601,5 +580,5 @@
 
 /*
- *  trim_length -- åä¿¡ãã SDU é·ãèª¿æ´ããã
+ *  trim_length -- 受信した SDU 長を調整する。
  */
 
@@ -608,28 +587,28 @@
 {
 	tcph->seq ++;
-	if (tcph->sum > cep->rcv_wnd) {		/* æ³¨æ: tcph->sum ã¯ SDU é· */
-		/*
-		 *  SDU é·ãåä¿¡ã¦ã£ã³ããµã¤ãºããå¤§ããã¨ãã¯ãåä¿¡ã¦ã£ã³ããµã¤ãºä»¥éã¯
-		 *  ç ´æ£ããFIN ã«å¿ç­ããªããã¨ã§ãç ´æ£ãããã¼ã¿ãåéãããã
+	if (tcph->sum > cep->rcv_wnd) {		/* 注意: tcph->sum は SDU 長 */
+		/*
+		 *  SDU 長が受信ウィンドサイズより大きいときは、受信ウィンドサイズ以降は
+		 *  破棄し、FIN に応答しないことで、破棄したデータを再送させる。
 		 */
 		tcph->sum    = (uint16_t)cep->rcv_wnd;
 		tcph->flags &= ~TCP_FLG_FIN;
 		}
-	cep->snd_wl1 = tcph->seq - 1;		/* cep->snd_wl1: ã¦ã£ã³ãæ´æ° SEQ çªå·	*/
+	cep->snd_wl1 = tcph->seq - 1;		/* cep->snd_wl1: ウィンド更新 SEQ 番号	*/
 
 #ifdef TCP_CFG_EXTENTIONS
-	cep->rcv_up  = tcph->seq;		/* cep->rcv_up : åä¿¡ããç·æ¥ãã¤ã³ã¿	*/
+	cep->rcv_up  = tcph->seq;		/* cep->rcv_up : 受信した緊急ポインタ	*/
 #endif
 	}
 
 /*
- *  proc_ack2 -- ACK ã®å¦ç (2)
+ *  proc_ack2 -- ACK の処理 (2)
  *
- *    æ»ãå¤
+ *    戻り値
  *
- *      RET_OK		æ­£å¸¸
- *      RET_RETURN	æ­£å¸¸ããªã¿ã¼ã³ããã
- *	RET_DROP	ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã
- *	RET_RST_DROP	ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
+ *      RET_OK		正常
+ *      RET_RETURN	正常、リターンする。
+ *	RET_DROP	エラー、セグメントを破棄する。
+ *	RET_RST_DROP	エラー、RST を送信し、セグメントを破棄する。
  */
 
@@ -645,7 +624,7 @@
 
 	/*
-	 *  ç¸æã«åä¿¡ç¢ºèªããã ACK ãããã¾ã ç¢ºèªããã¦ããªã
-	 *  æå°éä¿¡ SEQ (snd_una) ãå¼ãã¨ãéä¿¡ã¦ã£ã³ããããã¡ãã
-	 *  åé¤ãã¦ãããªã¯ãããæ° (acked) ã«ãªãã
+	 *  相手に受信確認された ACK から、まだ確認されていない
+	 *  最小送信 SEQ (snd_una) を引くと、送信ウィンドバッファから
+	 *  削除してよいオクテット数 (acked) になる。
 	 */
 	acked = tcph->ack - cep->snd_una;
@@ -653,7 +632,7 @@
 
 	/*
-	 *  å¾å¾©æéè¨æ¸¬ (rtt) ãè¨­å®ããã¦ãã¦ãè¨æ¸¬éå§ SEQ ãã
-	 *  å¾ã® ACK ãåä¿¡ããããã¿ã¤ãããã¯ãªããã­ã£ã³ã»ã«ãã
-	 *  åéã¿ã¤ããåè¨­å®ããã
+	 *  往復時間計測 (rtt) が設定されていて、計測開始 SEQ より
+	 *  後の ACK を受信したら、タイマバックオフをキャンセルし、
+	 *  再送タイマを再設定する。
 	 */
 	if (cep->rtt && SEQ_GT(tcph->ack, cep->rtseq)) {
@@ -662,17 +641,16 @@
 
 	/*
-	 *  å
-¨ã¦ã®æªç¢ºèªãã¼ã¿ã ACK ãããããåéã¿ã¤ããåæ­¢ãã
-	 *  åéãè¨æ¶ãã (ããã«åºåãæç¶)ã
-	 *  ãããACK ãã¹ããããã«å¤ãã®ãã¼ã¿ããããªããåéã¿ã¤ãã«
-	 *  ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ããè¨­å®ããã
-	 */
-	if (tcph->ack == cep->snd_max) {	/* cep->snd_max: éä¿¡ããæå¤§ SEQ */
+	 *  全ての未確認データが ACK されたら、再送タイマを停止し、
+	 *  再開を記憶する (さらに出力か持続)。
+	 *  もし、ACK すべき、さらに多くのデータがあるなら、再送タイマに
+	 *  現在の再送タイムアウトを設定する。
+	 */
+	if (tcph->ack == cep->snd_max) {	/* cep->snd_max: 送信した最大 SEQ */
 
 #ifdef TCP_CFG_SWBUF_CSAVE
 
 		/*
-		 * éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã¯ã
-		 * éä¿¡æ¸ã¿ã§ãACKãå®äºããã¾ã§åéã¿ã¤ããå¤æ´ããªãã
+		 * 送信ウィンドバッファの省コピー機能が有効の場合は、
+		 * 送信済みで、ACKが完了するまで再送タイマを変更しない。
 		 */
 		if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_ACKED)
@@ -688,22 +666,22 @@
 		}
 	else if (cep->timer[TCP_TIM_PERSIST] == 0) {
-	 	cep->timer[TCP_TIM_REXMT] = cep->rxtcur;	/* cep->rxtcur: ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã */
-		}
-
-	/* ç¸æãåä¿¡ç¢ºèªãããã¼ã¿ãããã¨ãã®å¦ç */
+	 	cep->timer[TCP_TIM_REXMT] = cep->rxtcur;	/* cep->rxtcur: 現在の再送タイムアウト */
+		}
+
+	/* 相手が受信確認したデータがあるときの処理 */
 	if (acked) {
-		uint32_t cw   = cep->snd_cwnd;	/* cep->snd_cwnd: è¼»è¼³ã¦ã£ã³ããµã¤ãº	*/
-		uint32_t incr = cep->maxseg;		/* cep->maxseg:   æå¤§ã»ã°ã¡ã³ããµã¤ãº	*/
-
-		/*
-		 *  æ°ãã«ç¸æãåä¿¡ç¢ºèªãããã¼ã¿ããã£ãã¨ãã¯ã
-		 *  è¼»è¼³ã¦ã£ã³ããµã¤ãºãå¤§ããããã
-		 *  è¼»è¼³ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã
-		 *  è¼»è¼³ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ããå¤§ããã¨ãã¯
-		 *  è¼»è¼³åé¿å¶å¾¡ãè¡ãã
+		uint32_t cw   = cep->snd_cwnd;	/* cep->snd_cwnd: 輻輳ウィンドサイズ	*/
+		uint32_t incr = cep->maxseg;		/* cep->maxseg:   最大セグメントサイズ	*/
+
+		/*
+		 *  新たに相手が受信確認したデータがあったときは、
+		 *  輻輳ウィンドサイズを大きくする。
+		 *  輻輳ウィンドサイズ (snd_cwnd) が
+		 *  輻輳ウィンドサイズのしきい値 (snd_ssthresh) より大きいときは
+		 *  輻輳回避制御を行い。
 		 *
 		 *    snd_cwnd = snd_cwnd + maxseg * maxseg / snd_cwnd;
 		 *
-		 *  ç­ãããå°ããã¨ãã¯ãã¹ã­ã¼ã¹ã¿ã¼ãå¶å¾¡ãè¡ãã
+		 *  等しいか小さいときは、スロースタート制御を行う。
 		 *
 		 *    snd_cwnd = snd_cwnd + maxseg
@@ -711,5 +689,5 @@
 		 */
 		if (cw > cep->snd_ssthresh)
-			/* è¼»è¼³åé¿å¶å¾¡ */
+			/* 輻輳回避制御 */
 			incr = incr * incr / cw;
 
@@ -720,5 +698,5 @@
 
 		/*
-		 *  éä¿¡ã¦ã£ã³ããããã¡ãããç¸æãåä¿¡ç¢ºèªãããã¼ã¿æ° (acked) ã®ãã¼ã¿ãåé¤ããã
+		 *  送信ウィンドバッファから、相手が受信確認したデータ数 (acked) のデータを削除する。
 		 */
 		if (acked > cep->swbuf_count) {
@@ -733,13 +711,13 @@
 			}
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããã§ãããã¨ãç¥ãããã*/
+		/* 送信ウィンドバッファに空きができたことを知らせる。*/
 		syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
 
 		/*
-		 *  ééç¢ºèªããã¦ããªãæå°éä¿¡ SEQ (snd_una) ã
-		 *  ä»åééç¢ºèªããã ACK ã¾ã§é²ãã
-		 *  æ¬¡ã®éä¿¡ãã¼ã¿ã® SEQ (snd_nxt) ããæ°ãã
-		 *  ééç¢ºèªããã¦ããªãæå°éä¿¡ SEQ (snd_una)
-		 *  ã¾ã§é²ããã
+		 *  送達確認されていない最小送信 SEQ (snd_una) を
+		 *  今回送達確認された ACK まで進め、
+		 *  次の送信データの SEQ (snd_nxt) も、新しい
+		 *  送達確認されていない最小送信 SEQ (snd_una)
+		 *  まで進める。
 		 */
 		cep->snd_una += acked;
@@ -748,10 +726,8 @@
 
 		/*
-		 *  ç¶æ
-ã«ããåå²
+		 *  状態により分岐
 		 */
 		switch (cep->fsm_state) {
-		case TCP_FSM_FIN_WAIT_1:	/* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾
-ã¡ */
+		case TCP_FSM_FIN_WAIT_1:	/* APP が終了、FIN 送信済み、ACK 待ち */
 			if (ourfinisacked) {
 				cep->fsm_state = TCP_FSM_FIN_WAIT_2;
@@ -759,11 +735,9 @@
 				}
 			break;
-		case TCP_FSM_CLOSING:		/* åæã¯ã­ã¼ãºãFIN äº¤ææ¸ã¿ãACK å¾
-ã¡ */
+		case TCP_FSM_CLOSING:		/* 同時クローズ、FIN 交換済み、ACK 待ち */
 			if (ourfinisacked) {
 				/*
-				 *  éä¿¡ãã FIN ãç¢ºèªããã¦ããã°ç¶æ
-ãå¤æ´ãã
-				 *  ãã¹ã¦ã®ã¿ã¤ãããªã»ããããå¾ã2MSL ã¿ã¤ããè¨­å®ããã
+				 *  送信した FIN が確認されていれば状態を変更し、
+				 *  すべてのタイマをリセットした後、2MSL タイマを設定する。
 				 */
 				cep->fsm_state = TCP_FSM_TIME_WAIT;
@@ -772,10 +746,9 @@
 				}
 			break;
-		case TCP_FSM_LAST_ACK:		/* APP ãçµäºãACK å¾
-ã¡ */
+		case TCP_FSM_LAST_ACK:		/* APP が終了、ACK 待ち */
 			if (ourfinisacked) {
 				/*
-				 *  éä¿¡ãã FIN ãç¢ºèªããã¦ããã°ãcep ãã¯ã­ã¼ãºãã
-				 *  ã»ã°ã¡ã³ããç ´æ£ããã
+				 *  送信した FIN が確認されていれば、cep をクローズし、
+				 *  セグメントを破棄する。
 				 */
 				cep = tcp_close(cep);
@@ -783,9 +756,8 @@
 				}
 			break;
-		case TCP_FSM_TIME_WAIT:		/* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾
-ã¡ */
+		case TCP_FSM_TIME_WAIT:		/* 相手からの FIN 受信済み、時間待ち */
 			/*
-			 *  ç¸æãã FIN ãåéããããããä¸åº¦2MSL ã¿ã¤ããè¨­å®ãã
-			 *  ACK éä¿¡å¾ãã»ã°ã¡ã³ããç ´æ£ããã
+			 *  相手から FIN が再送された。もう一度2MSL タイマを設定し、
+			 *  ACK 送信後、セグメントを破棄する。
 			 */
 			cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL;
@@ -798,11 +770,11 @@
 
 /*
- *  proc_ack1 -- ACK ã®å¦ç (1)
+ *  proc_ack1 -- ACK の処理 (1)
  *
- *    æ»ãå¤:
- *      RET_OK		æ­£å¸¸
- *      RET_RETURN	æ­£å¸¸ããªã¿ã¼ã³ããã
- *	RET_DROP	ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã
- *	RET_RST_DROP	ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
+ *    戻り値:
+ *      RET_OK		正常
+ *      RET_RETURN	正常、リターンする。
+ *	RET_DROP	エラー、セグメントを破棄する。
+ *	RET_RST_DROP	エラー、RST を送信し、セグメントを破棄する。
  *
  */
@@ -814,8 +786,7 @@
 
 	switch (cep->fsm_state) {
-	case TCP_FSM_SYN_RECVD:		/* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿	*/
-
-		/* ç¶æ
-ãå¤æ´ããã*/
+	case TCP_FSM_SYN_RECVD:		/* SYN を受信し、SYN 送信済み	*/
+
+		/* 状態を変更する。*/
 		if (cep->flags & TCP_CEP_FLG_NEED_FIN) {
 			cep->fsm_state  = TCP_FSM_FIN_WAIT_1;
@@ -826,5 +797,5 @@
 			cep->fsm_state  = TCP_FSM_ESTABLISHED;
 
-			/* TCP éä¿¡ç«¯ç¹ããTCP åä»å£ãè§£æ¾ããã*/
+			/* TCP 通信端点からTCP 受付口を解放する。*/
 			cep->rep = NULL;
 
@@ -839,5 +810,5 @@
 			if (cep->rcv_nblk_tfn == TFN_TCP_ACP_CEP) {
 
-				/* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/
+				/* 相手のアドレスをコピーする。*/
 
 #if defined(_IP6_CFG) && defined(_IP4_CFG)
@@ -889,5 +860,5 @@
 			if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) {
 
-				/* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/
+				/* 相手のアドレスをコピーする。*/
 
 #if defined(_IP6_CFG) && defined(_IP4_CFG)
@@ -951,40 +922,35 @@
 
 		/*
-		 *  SDU ããªã FIN ãã¤ãã¦ããªããã°ãtcp_move_ra2rw() ãå¼åºãã
-		 */
-		if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0)		/* tcph->sum ã¯ SDU é· */
+		 *  SDU がなく FIN がついていなければ、tcp_move_ra2rw() を呼出す。
+		 */
+		if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0)		/* tcph->sum は SDU 長 */
 			tcph->flags = tcp_move_ra2rw(cep, tcph->flags);
 		
-		cep->snd_wl1 = tcph->seq - 1;	/* snd_wl1: ã¦ã£ã³ãæ´æ° SEQ */
-
-		/* break; ä¸ã«è½ã¡ãã*/
+		cep->snd_wl1 = tcph->seq - 1;	/* snd_wl1: ウィンド更新 SEQ */
+
+		/* break; 下に落ちる。*/
 	
-	case TCP_FSM_ESTABLISHED:	/* ã³ãã¯ã·ã§ã³éè¨­å®äº		*/
-	case TCP_FSM_FIN_WAIT_1:	/* çµäºãã¦ãFIN éä¿¡æ¸ã¿		*/
-	case TCP_FSM_FIN_WAIT_2:	/* çµäºãFIN ä¼éç¢ºèªåä¿¡ãFINå¾
-ã¡*/
-	case TCP_FSM_CLOSE_WAIT:	/* FIN åä¿¡ãã¯ã­ã¼ãºå¾
-ã¡		*/
-	case TCP_FSM_CLOSING:		/* çµäºãFIN äº¤ææ¸ã¿ãACK å¾
-ã¡	*/
-	case TCP_FSM_LAST_ACK:		/* FIN åä¿¡ãçµäºãACK å¾
-ã¡	*/
-	case TCP_FSM_TIME_WAIT:		/* çµäºãæéå¾
-ã¡		*/
+	case TCP_FSM_ESTABLISHED:	/* コネクション開設完了		*/
+	case TCP_FSM_FIN_WAIT_1:	/* 終了して、FIN 送信済み		*/
+	case TCP_FSM_FIN_WAIT_2:	/* 終了、FIN 伝達確認受信、FIN待ち*/
+	case TCP_FSM_CLOSE_WAIT:	/* FIN 受信、クローズ待ち		*/
+	case TCP_FSM_CLOSING:		/* 終了、FIN 交換済み、ACK 待ち	*/
+	case TCP_FSM_LAST_ACK:		/* FIN 受信、終了、ACK 待ち	*/
+	case TCP_FSM_TIME_WAIT:		/* 終了、時間待ち		*/
 
 		if (SEQ_LE(tcph->ack, cep->snd_una)) {
 
 			/*
-			 *  åä¿¡ç¢ºèª ACK ã æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ã¨åããä»¥åã®ã¨ãã®å¦ç
-			 *  ã¤ã¾ããå¤éã« ACK ãåä¿¡ãããã¨ãæå³ãã¦ããã
+			 *  受信確認 ACK が 未確認の最小送信 SEQ (snd_una) と同じか以前のときの処理
+			 *  つまり、多重に ACK を受信したことを意味している。
 			 */
 
-			if (tcph->sum == 0 && tcph->win == cep->snd_wnd) {	/* tcph->sum ã¯ SDU é· */
+			if (tcph->sum == 0 && tcph->win == cep->snd_wnd) {	/* tcph->sum は SDU 長 */
 
 				/*
-				 *  SDU ããªããç¸æã®ã¦ã£ã³ããµã¤ãºãå¤æ´ããã¦ããªããã°ã
-				 *  ãã§ã«éä¿¡ããã»ã°ã¡ã³ãã®ä¸­ã§ãACK (tcph->ack) ã¨
-				 *  åã SEQ ããå§ã¾ãã»ã°ã¡ã³ãããéä¸­ã§æ¶å¤±ããå¯è½æ§ãããã
-				 *  ãã®å ´åã¯ãé«éåè»¢éã¨é«éãªã«ããªãè¡ãã
+				 *  SDU がなく、相手のウィンドサイズが変更されていなければ、
+				 *  すでに送信したセグメントの中で、ACK (tcph->ack) と
+				 *  同じ SEQ から始まるセグメントが、途中で消失した可能性がある。
+				 *  この場合は、高速再転送と高速リカバリを行う。
 				 */
 				NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DUP_ACKS], 1);
@@ -993,7 +959,7 @@
 
 					/*
-					 *  åéã¿ã¤ããã»ããããã¦ããªãã¨ãã
-					 *  ã¾ãã¯ãACK (tcph->ack) ã¨æªç¢ºèªã®æå°éä¿¡ SEQã
-					 *  ä¸è´ããªãã¨ãã¯ãå¤é ACK æ°ã 0 ã«ããã
+					 *  再送タイマがセットされていないとき、
+					 *  または、ACK (tcph->ack) と未確認の最小送信 SEQが
+					 *  一致しないときは、多重 ACK 数を 0 にする。
 					 */
 					cep->dupacks = 0;
@@ -1003,15 +969,15 @@
 
 					/*
-					 *  å¤é ACK æ°ããããå¤ (æ¨æº 3) ã«ãªã£ãã
-					 *  é«éåè»¢éå¦çãéå§ããã
+					 *  多重 ACK 数がしきい値 (標準 3) になったら
+					 *  高速再転送処理を開始する。
 					 */
 					uint_t		win;
 
 					/*
-					 *  è¼»è¼³ã¦ã£ã³ããµã¤ãº(snd_cwnd)ã®ãããå¤ãè¨­å®ããã
+					 *  輻輳ウィンドサイズ(snd_cwnd)のしきい値を設定する。
 					 *
-					 *    ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã
-					 *    è¼»è¼³ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã® 1/2ã
-					 *    ãã ãã2 * maxseg ä»¥ä¸ã
+					 *    相手の受信可能ウィンドサイズ (snd_wnd) か
+					 *    輻輳ウィンドサイズ (snd_cwnd) の 1/2。
+					 *    ただし、2 * maxseg 以上。
 					 *
 					 */
@@ -1024,9 +990,9 @@
 					cep->snd_ssthresh = win * cep->maxseg;
 
-					/* åéã¿ã¤ãã¨å¾å¾©æéããªã»ããããã*/
+					/* 再送タイマと往復時間をリセットする。*/
 					cep->timer[TCP_TIM_REXMT] = 0;
 					cep->rtt = 0;
 
-					/* æ¶å¤±ããã»ã°ã¡ã³ããéä¿¡ããã*/
+					/* 消失したセグメントを送信する。*/
 					cep->snd_old_nxt = cep->snd_nxt;
 					cep->snd_nxt     = tcph->ack;
@@ -1034,7 +1000,6 @@
 
 					/*
-					 *  snd_nxt ãå
-ã«æ»ãããã«è¨­å®ãã¦
-					 *  éä¿¡ãæç¤ºããã
+					 *  snd_nxt を元に戻すように設定して
+					 *  送信を指示する。
 					 */
 					cep->flags |=  TCP_CEP_FLG_POST_OUTPUT |
@@ -1044,5 +1009,5 @@
 					sig_sem(SEM_TCP_POST_OUTPUT);
 
-					/* è¼»è¼³ã¦ã£ã³ããµã¤ãºãæ´æ°ããã*/
+					/* 輻輳ウィンドサイズを更新する。*/
 					cep->snd_cwnd = (uint16_t)(cep->snd_ssthresh
 					                   + cep->maxseg * cep->dupacks);
@@ -1054,11 +1019,10 @@
 
 					/*
-					 *  å¤é ACK æ°ããããå¤ (æ¨æº 3) ãè¶
-ããã
-					 *  è¼»è¼³ã¦ã£ã³ããµã¤ãºãå¢å ããªããåéããã
+					 *  多重 ACK 数がしきい値 (標準 3) を超えたら
+					 *  輻輳ウィンドサイズを増加しながら再送する。
 					 */
 					cep->snd_cwnd += cep->maxseg;
 
-					/* éä¿¡ãæç¤ºããã*/
+					/* 送信を指示する。*/
 					cep->flags |=  TCP_CEP_FLG_POST_OUTPUT;
 					sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1073,9 +1037,9 @@
 
 		/*
-		 *  åä¿¡ç¢ºèª ACK ã æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ä»¥éã®ã¨ãã®å¦ç
+		 *  受信確認 ACK が 未確認の最小送信 SEQ (snd_una) 以降のときの処理
 		 */
 		if (cep->dupacks >= MAX_TCP_REXMT_THRESH && cep->snd_cwnd > cep->snd_ssthresh)
 		 	/*
-			 *  é«éåè»¢éãè¡ã£ã¦ããã¨ãã¯ãè¼»è¼³ã¦ã£ã³ããµã¤ãºããããå¤ã¾ã§æ»ãã
+			 *  高速再転送を行っていたときは、輻輳ウィンドサイズをしきい値まで戻す。
 			 */
 			cep->snd_cwnd = (uint16_t)cep->snd_ssthresh;
@@ -1085,6 +1049,5 @@
 		if (SEQ_GT(tcph->ack, cep->snd_max))
 			/*
-			 *  åä¿¡ãã ACK ãéä¿¡ããæå¤§ SEQ ãè¶
-ãã¦ããã¨ãã®å¦ç
+			 *  受信した ACK が送信した最大 SEQ を超えていたときの処理
 			 */
 			return drop_after_ack(input, cep, thoff);
@@ -1092,5 +1055,5 @@
 		if (cep->flags & TCP_CEP_FLG_NEED_SYN) {
 			/*
-			 *  SYN éä¿¡è¦æ±ãåãæ¶ãã¦ãæªç¢ºèªã®æå°éä¿¡ SEQ ãé²ããã
+			 *  SYN 送信要求を取り消して、未確認の最小送信 SEQ を進める。
 			 */
 			cep->flags &= ~TCP_CEP_FLG_NEED_SYN;
@@ -1105,8 +1068,7 @@
 
 /*
- *  update_wnd -- ã¦ã£ã³ããµã¤ãºãæ´æ°ããã
+ *  update_wnd -- ウィンドサイズを更新する。
  *
- *    æ»ãå¤: éä¿¡ãå¿
-è¦ãªã true ãè¿ãã
+ *    戻り値: 送信が必要なら true を返す。
  */
 
@@ -1116,12 +1078,12 @@
 
 	/*
-	 *  æ´æ°æ¡ä»¶
+	 *  更新条件
 	 *
-	 *    ACK ãã©ã°ãã»ããããã¦ãã &&
-	 *    (ååã¦ã£ã³ããæ´æ°ãã SEQ (snd_wl1) ã SEQ ããå ||
-	 *     ååã¦ã£ã³ããæ´æ°ãã SEQ (snd_wl1) ã SEQ ã¨åã &&
-	 *     (ååã¦ã£ã³ããæ´æ°ãã ACK (snd_wl2) ã ACK ããå ||
-	 *      (ååã¦ã£ã³ããæ´æ°ãã ACK (snd_wl2) ã ACK ã¨åã &&
-	 *       WIN ãç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ããå¤§ãã
+	 *    ACK フラグがセットされている &&
+	 *    (前回ウィンドを更新した SEQ (snd_wl1) が SEQ より前 ||
+	 *     前回ウィンドを更新した SEQ (snd_wl1) が SEQ と同じ &&
+	 *     (前回ウィンドを更新した ACK (snd_wl2) が ACK より前 ||
+	 *      (前回ウィンドを更新した ACK (snd_wl2) が ACK と同じ &&
+	 *       WIN が相手の受信可能ウィンドサイズ (snd_wnd) より大きい
 	 *       )
 	 *      )
@@ -1139,5 +1101,5 @@
 
 		if (cep->snd_wnd > cep->max_sndwnd)
-			/* ä»ã¾ã§ã®æå¤§éä¿¡ã¦ã£ã³ããµã¤ãºãæ´æ°ããã*/
+			/* 今までの最大送信ウィンドサイズを更新する。*/
 			cep->max_sndwnd = cep->snd_wnd;
 
@@ -1147,13 +1109,12 @@
 
 			/*
-			 *  éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡å²ãå½ã¦ä¸­ã§ã
-			 *  ç¸æã®åä¿¡ã¦ã£ã³ããç©ºãã®ãå¾
-ã£ã¦ããã¨ãã®å¦ç
+			 *  送信ウィンドバッファ用のネットワークバッファ割り当て中で、
+			 *  相手の受信ウィンドが空くのを待っているときの処理
 			 */
 			if (cep->snd_wnd > 0) {
 
 				/*
-				 *  ç¸æã®åä¿¡ã¦ã£ã³ããç©ºããã¨ãã¯ã
-				 *  éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡å²ãå½ã¦ãåéããã
+				 *  相手の受信ウィンドが空いたときは、
+				 *  送信ウィンドバッファ用のネットワークバッファ割り当てを再開する。
 				 */
 				cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK)
@@ -1172,5 +1133,5 @@
 
 /*
- *  proc_urg -- ç·æ¥ãã¼ã¿ã¤ãã®ã»ã°ã¡ã³ãã®å¦ç
+ *  proc_urg -- 緊急データつきのセグメントの処理
  */
 
@@ -1183,5 +1144,5 @@
 	    TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) {
 
-		/* ç·æ¥ãã¼ã¿ã¤ãã®ã»ã°ã¡ã³ãã®å¦ç */
+		/* 緊急データつきのセグメントの処理 */
 
 		NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_URG_SEGS], 1);
@@ -1189,7 +1150,6 @@
 
 			/*
-			 *  ç·æ¥ãã¤ã³ã¿ã®ä½ç½®ãåä¿¡ã¦ã£ã³ããããã¡ã®
-			 *  ç¯å²ãè¶
-ããã¨ãã¯ä½ãããªãã
+			 *  緊急ポインタの位置が受信ウィンドバッファの
+			 *  範囲を超えるときは何もしない。
 			 */
 			tcph->urp    = 0;
@@ -1198,13 +1158,12 @@
 
 		if (SEQ_GT(tcph->seq + tcph->urp, cep->rcv_up))
-			/* ç·æ¥ãã¤ã³ã¿ãæ´æ°ãããã¨ãã®å¦ç */
+			/* 緊急ポインタが更新されたときの処理 */
 			cep->rcv_up = tcph->seq + tcph->urp;
 
-		if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) {	/* tcph->sum ã¯ TCP ã® SDU é· */
+		if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) {	/* tcph->sum は TCP の SDU 長 */
 
 			/*
-			 *  ç·æ¥ãã¤ã³ã¿ã®ä½ç½®ããä»ååä¿¡ããã»ã°ã¡ã³ãå
-ã®å ´åã¯ã
-			 *  ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã
+			 *  緊急ポインタの位置が、今回受信したセグメント内の場合は、
+			 *  コールバック関数を呼び出す。
 			 */
 			cep->urg_tcph = tcph;
@@ -1229,6 +1188,5 @@
 
 			if (cep->urg_tcph != NULL) {
-				/* ã³ã¼ã«ããã¯é¢æ°å
-ã§ tcp_rcv_oob() ãå¼åºããªãã£ãã*/
+				/* コールバック関数内で tcp_rcv_oob() を呼出さなかった。*/
 				cep->urg_tcph = NULL;
 				tcph->urp = 0;
@@ -1236,7 +1194,6 @@
 			else {
 				/* 
-				 *  ã³ã¼ã«ããã¯é¢æ°å
-ã§ tcp_rcv_oob() ãå¼åºããæã¯ã
-				 *  SDU é·ã®è£æ­£å¤ãè¨­å®ããã
+				 *  コールバック関数内で tcp_rcv_oob() を呼出した時は、
+				 *  SDU 長の補正値を設定する。
 				 */
 				tcph->urp = 1;
@@ -1265,9 +1222,9 @@
 
 /*
- *  drop_after_ack -- åä¿¡ã»ã°ã¡ã³ããç ´æ£ããå¾ãACK ãè¿ã (æ³¨æ: ååã¨ã¯åã£ã¦ããªã)ã
+ *  drop_after_ack -- 受信セグメントを破棄した後、ACK を返す (注意: 名前とは合っていない)。
  *
- *    æ»ãå¤:
- *      RET_RETURN	æ­£å¸¸ããªã¿ã¼ã³ããã
- *	RET_RST_DROP	ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
+ *    戻り値:
+ *      RET_RETURN	正常、リターンする。
+ *	RET_RST_DROP	エラー、RST を送信し、セグメントを破棄する。
  */
 
@@ -1278,9 +1235,8 @@
 
 	/*
-	 *    SYN åä¿¡ç¶æ
-ã§ãACK ãééç¢ºèªããã¦ããªãæå°éä¿¡ SEQ (snd_una) ãã
-	 *    åã®å¤ããéä¿¡ãããæå¤§ SEQ (snd_max) ããå¾ã®å¤ã®å ´åã¯ãç¸æã« RST ã
-	 *    éã£ã¦çµäºãããããã¯ã"LAND" DoS æ»æã¸ã®é²å¾¡ã§ãããå½é ããã SYN
-	 *    ã»ã°ã¡ã³ããéä¿¡ãã¤ã¥ãããã¼ãéã§ã® ACK ã¹ãã¼ã ãé²ãã
+	 *    SYN 受信状態で、ACK が送達確認されていない最小送信 SEQ (snd_una) より
+	 *    前の値か、送信された最大 SEQ (snd_max) より後の値の場合は、相手に RST を
+	 *    送って終了する。これは、"LAND" DoS 攻撃への防御であり、偽造された SYN
+	 *    セグメントを送信しつづけるポート間での ACK ストームを防ぐ。
 	 */
 	if (cep->fsm_state == TCP_FSM_SYN_RECVD && (tcph->flags & TCP_FLG_ACK) &&
@@ -1291,5 +1247,5 @@
 	syscall(rel_net_buf(input));
 
-	/* éä¿¡ãæç¤ºããã*/
+	/* 送信を指示する。*/
 	cep->flags |=  TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_POST_OUTPUT;
 	sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1298,5 +1254,5 @@
 
 /*
- *  close_connection -- ã³ãã¯ã·ã§ã³éæ¾å¦çãç¸æãã FIN ãåä¿¡ããã
+ *  close_connection -- コネクション開放処理、相手から FIN を受信した。
  */
 
@@ -1323,17 +1279,15 @@
 
 	switch (cep->fsm_state) {
-	case TCP_FSM_SYN_RECVD:		/* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿	*/
-	case TCP_FSM_ESTABLISHED:	/* ã³ãã¯ã·ã§ã³éè¨­å®äº		*/
+	case TCP_FSM_SYN_RECVD:		/* SYN を受信し、SYN 送信済み	*/
+	case TCP_FSM_ESTABLISHED:	/* コネクション開設完了		*/
 		cep->fsm_state = TCP_FSM_CLOSE_WAIT;
 		syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_RWBUF_READY));
 		break;
 
-	case TCP_FSM_FIN_WAIT_1:	/* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾
-ã¡ */
+	case TCP_FSM_FIN_WAIT_1:	/* APP が終了、FIN 送信済み、ACK 待ち */
 		cep->fsm_state = TCP_FSM_CLOSING;
 		break;
 
-	case TCP_FSM_FIN_WAIT_2:	/* ç¸æããã® FIN å¾
-ã¡ */
+	case TCP_FSM_FIN_WAIT_2:	/* 相手からの FIN 待ち */
 		cep->fsm_state = TCP_FSM_TIME_WAIT;
 		tcp_cancel_timers(cep);
@@ -1341,9 +1295,7 @@
 
 		/*
-		 *  FIN WAIT 2 ç¶æ
-ã§ã¯ã
-		 *  åä¿¡ã¯å¯è½ã§ãããããã§ã«éä¿¡ã¯çµäºãã¦ããã
-		 *  ç¸æã®éä¿¡ãçµäºããã®ã§ãå
-¥åã¿ã¹ã¯ã®ã¿èµ·åºããã
+		 *  FIN WAIT 2 状態では、
+		 *  受信は可能であるが、すでに送信は終了している。
+		 *  相手の送信も終了したので、入力タスクのみ起床する。
 		 */
 		syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
@@ -1351,5 +1303,5 @@
 #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0
 
-		/* ç¸æããã® FIN ã«å¯¾ãã¦å¿ç­ãè¿ãã*/
+		/* 相手からの FIN に対して応答を返す。*/
 		tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una,
 		            cep->rbufsz - cep->rwbuf_count, TCP_FLG_ACK);
@@ -1358,8 +1310,6 @@
 
 		/*
-		 *  å¿
-è¦ãªæ
-å ±ã Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã«ç§»ãã¦ã
-		 *  æ¨æºã® TCP éä¿¡ç«¯ç¹ãéæ¾ããã
+		 *  必要な情報を Time Wait 用 TCP 通信端点に移して、
+		 *  標準の TCP 通信端点を開放する。
 		 */
 		tcp_move_twcep(cep);
@@ -1369,6 +1319,5 @@
 		break;
 
-	case TCP_FSM_TIME_WAIT:		/* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾
-ã¡ */
+	case TCP_FSM_TIME_WAIT:		/* 相手からの FIN 受信済み、時間待ち */
 		cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL;
 		break;
@@ -1377,9 +1326,7 @@
 
 /*
- *  tcp_input -- TCP ã®å
-¥åé¢æ°
+ *  tcp_input -- TCP の入力関数
  *
- *	æ³¨æ: input ã«ã¯ IF ãããã¨ IP ããããå
-é ­ã«ããã
+ *	注意: input には IF ヘッダと IP ヘッダが先頭にある。
  */
 
@@ -1407,5 +1354,5 @@
 	NET_COUNT_MIB(tcp_stats.tcpInSegs, 1);
 
-	/* ãããé·ããã§ãã¯ããã*/
+	/* ヘッダ長をチェックする。*/
 	if (input->len < IF_IP_TCP_HDR_SIZE(input)) {
 		NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1);
@@ -1415,5 +1362,5 @@
 	tcph = GET_TCP_HDR(input, *offp);
 
-	seglen  = input->len - *offp;				/* TCP ã®ã»ã°ã¡ã³ãé· */
+	seglen  = input->len - *offp;				/* TCP のセグメント長 */
 
 	if (IN_CKSUM(input, IPPROTO_TCP, *offp, (uint_t)seglen) != 0) {
@@ -1422,19 +1369,19 @@
 		}
 
-	/* TCP ãããé·ããã§ãã¯ããã*/
+	/* TCP ヘッダ長をチェックする。*/
 	if (TCP_HDR_LEN(tcph->doff) < TCP_HDR_SIZE || TCP_HDR_LEN(tcph->doff) > seglen) {
 		NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1);
 		goto drop;
 		}
-	tcph->sum = seglen - TCP_HDR_LEN(tcph->doff);		/* ãããã tcph->sum ã¯ TCP ã® SDU é· */
+	tcph->sum = seglen - TCP_HDR_LEN(tcph->doff);		/* ここから tcph->sum は TCP の SDU 長 */
 
 	/*
-	 *  SYN ã¨ FIN ã®ä¸¡ããããã»ããããã¦ããã°ç ´æ£ãããnmap ç­ã®å¯¾ç­
-	 *  ãã ããRFC1644 T/TCP æ¡å¼µæ©è½ã¨ç«¶åããã
+	 *  SYN と FIN の両ビットがセットされていれば破棄する。nmap 等の対策
+	 *  ただし、RFC1644 T/TCP 拡張機能と競合する。
 	 */
 	if ((tcph->flags & (TCP_FLG_SYN | TCP_FLG_FIN)) == (TCP_FLG_SYN | TCP_FLG_FIN))
 		goto drop;
 
-	/* ãããã¯ã¼ã¯ãªã¼ãã¼ãããã¹ããªã¼ãã¼ã«å¤æããã*/
+	/* ネットワークオーダーからホストオーダーに変換する。*/
 
 	NTOHL(tcph->seq);
@@ -1445,5 +1392,5 @@
 	NTOHS(tcph->dport);
 
-	/* SDU é· ãã ç·æ¥ãã¤ã³ã¿ãå¤§ããå ´å */
+	/* SDU 長 より 緊急ポインタが大きい場合 */
 	if (tcph->urp > tcph->sum)
 		goto drop;
@@ -1454,21 +1401,20 @@
 
 	/*
-	 *  ç¶æ
-ã Time Wait ä¸­ã® CEP ãæ¢ç´¢ããã
+	 *  状態が Time Wait 中の CEP を探索する。
 	 */
 	twcep = tcp_find_twcep(input, *offp);
 	if (twcep != NULL) {
 
-		if (tcph->flags & TCP_FLG_RST)		/* RST ãã©ã°ãåä¿¡ããã¨ãã¯ç¡è¦ããã*/
+		if (tcph->flags & TCP_FLG_RST)		/* RST フラグを受信したときは無視する。*/
 			goto drop;
 		else {
 
 			/*
-			 *    TCP éä¿¡ç«¯ç¹ã Time Wait ã®æãç¸æãã¹ãããã»ã°ã¡ã³ããæ¥ãã¨ãã¯ã
-			 *    ç¸æãã¹ãã® FIN ã«å¯¾ããèªãã¹ãã® ACK ã»ã°ã¡ã³ããéä¸­ã§
-			 *    æå¤±ãããã¨ãæå³ãã¦ããã®ã§ãACK ã»ã°ã¡ã³ããåéããã
+			 *    TCP 通信端点が Time Wait の時、相手ホストからセグメントが来たときは、
+			 *    相手ホストの FIN に対する自ホストの ACK セグメントが途中で
+			 *    損失したことを意味しているので、ACK セグメントを再送する。
 			 */
 
-			/* ãã¹ããªã¼ãã¼ãããããã¯ã¼ã¯ãªã¼ãã¼ã«æ»ãã*/
+			/* ホストオーダーからネットワークオーダーに戻す。*/
 			HTONS(tcph->sport);
 			HTONS(tcph->dport);
@@ -1479,10 +1425,10 @@
 		}
 	else
-		/* æ¨æºã® TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+		/* 標準の TCP 通信端点を得る。*/
 		cep = tcp_find_cep(input, *offp);
 
 #else	/* of #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 */
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = tcp_find_cep(input, *offp);
 
@@ -1490,6 +1436,5 @@
 
 	/*
-	 *  TCP éä¿¡ç«¯ç¹ããªãå ´åã¨ CEP ã®ç¶æ
-ãã¯ã­ã¼ãºãªãç ´æ£ããã
+	 *  TCP 通信端点がない場合と CEP の状態がクローズなら破棄する。
 	 */
 	if (cep == NULL) {
@@ -1509,6 +1454,6 @@
 
 	/*
-	 *  ã³ãã¯ã·ã§ã³éè¨­æ¸ã¿ã§ã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã
-	 *  ã¢ã¤ãã«æéã¨çå­ç¢ºèªã¿ã¤ãããªã»ããããã
+	 *  コネクション開設済みでセグメントを受信したときは、
+	 *  アイドル時間と生存確認タイマをリセットする。
 	 */
 	cep->idle = 0;
@@ -1517,23 +1462,19 @@
 		}
 
-	/* CEP ã®ç¶æ
-ã LISTEN ä»¥å¤ã®æã¯ããªãã·ã§ã³ãå¦çããã*/
+	/* CEP の状態が LISTEN 以外の時は、オプションを処理する。*/
 	if (cep->fsm_state != TCP_FSM_LISTEN)
 		parse_option(tcph, cep);
 
 	/*
-	 *  åä¿¡å¯è½ã¦ã£ã³ããµã¤ãºãè¨ç®ããã
+	 *  受信可能ウィンドサイズを計算する。
 	 *
-	 *  rcv_nxt:     åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQï¼ããä»¥åã¯åä¿¡æ¸ã¿ï¼
-	 *  rcv_adv:     åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ
-	 *  rbufsz:      åä¿¡ã¦ã£ã³ããããã¡ãµã¤ãº
-	 *  rwbuf_count:  åä¿¡ã¦ã£ã³ããããã¡ã«ãããã¼ã¿é
-	 *  tcph->sum:   ä»ååä¿¡ãã SDU ãµã¤ãº
+	 *  rcv_nxt:     受信を期待している最小の SEQ（これ以前は受信済み）
+	 *  rcv_adv:     受信を期待している最大の SEQ
+	 *  rbufsz:      受信ウィンドバッファサイズ
+	 *  rwbuf_count:  受信ウィンドバッファにあるデータ量
+	 *  tcph->sum:   今回受信した SDU サイズ
 	 *
-	 *  ä»ååä¿¡ããã»ã°ã¡ã³ããé åºæ´åã­ã¥ã¼ã«é£çµãã
-	 *  å¯è½æ§ãããã®ã§ tcph->sum ãèæ
-®ããã
+	 *  今回受信したセグメントを順序整列キューに連結する
+	 *  可能性があるので tcph->sum を考慮する。
 	 *
 	 */
@@ -1546,15 +1487,14 @@
 		cep->rcv_wnd = cep->rcv_adv - cep->rcv_nxt;
 
-	/* CEP ã®ç¶æ
-ã«ããå¦çãè¡ãã*/
-
-	if (cep->fsm_state == TCP_FSM_LISTEN) {		/* ååãªã¼ãã³ (LISTEN) ã®å¦çã*/
+	/* CEP の状態により処理を行う。*/
+
+	if (cep->fsm_state == TCP_FSM_LISTEN) {		/* 受動オープン (LISTEN) の処理。*/
 		if ((ret = listening(input, cep, *offp, iss)) == RET_RST_DROP)
 			goto reset_drop;
 		else if (ret == RET_DROP)
 			goto drop;
-		trim_length(tcph, cep);			/* åä¿¡ãã SDU é·ãèª¿æ´ããã*/
-
-		if (tcph->flags & TCP_FLG_ACK) {	/* ACK ãã©ã°ã®å¦ç */
+		trim_length(tcph, cep);			/* 受信した SDU 長を調整する。*/
+
+		if (tcph->flags & TCP_FLG_ACK) {	/* ACK フラグの処理 */
 			if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP)
 				goto drop;
@@ -1565,12 +1505,12 @@
 			}
 		}
-	else if (cep->fsm_state == TCP_FSM_SYN_SENT) {	/* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿	*/
+	else if (cep->fsm_state == TCP_FSM_SYN_SENT) {	/* 能動オープン、SYN 送信済み	*/
 		if ((ret = syn_sent(tcph, cep)) == RET_RST_DROP)
 			goto reset_drop;
 		else if (ret == RET_DROP)
 			goto drop;
-		trim_length(tcph, cep);			/* åä¿¡ãã SDU é·ãèª¿æ´ããã*/
-
-		if (tcph->flags & TCP_FLG_ACK) {	/* ACK ãã©ã°ã®å¦ç */
+		trim_length(tcph, cep);			/* 受信した SDU 長を調整する。*/
+
+		if (tcph->flags & TCP_FLG_ACK) {	/* ACK フラグの処理 */
 			if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP)
 				goto drop;
@@ -1582,12 +1522,12 @@
 		}
 	else {
-		if (cep->fsm_state == TCP_FSM_SYN_RECVD) {	/* SYN ãåä¿¡ãSYN éä¿¡æ¸ã¿	*/
+		if (cep->fsm_state == TCP_FSM_SYN_RECVD) {	/* SYN を受信、SYN 送信済み	*/
 			/*
-			 *  ç¸æããåä¿¡ç¢ºèªãéããã¦æ¥ã¦ãã
+			 *  相手から受信確認が送られて来ても、
 			 *
-			 *    ACK <= æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) &&
-			 *           éä¿¡ããæå¤§     SEQ (snd_max) < ACK
+			 *    ACK <= 未確認の最小送信 SEQ (snd_una) &&
+			 *           送信した最大     SEQ (snd_max) < ACK
 			 *
-			 *  ãªãããªã»ãããéã£ã¦ã»ã°ã¡ã³ããç ´æ£ããã
+			 *  なら、リセットを送ってセグメントを破棄する。
 			 */
 			if ((tcph->flags & TCP_FLG_ACK) &&
@@ -1598,5 +1538,5 @@
 
 		/* 
-		 *  RST ãã©ã°ãåä¿¡ããã¨ãã®å¦ç (ç°å¸¸åæ­)
+		 *  RST フラグを受信したときの処理 (異常切断)
 		 */
 		if (tcph->flags & TCP_FLG_RST) {
@@ -1604,11 +1544,11 @@
 			    SEQ_LT(tcph->seq, cep->last_ack_sent + cep->rcv_wnd)) {
 				/*
-				 *  åä¿¡ããã»ã°ã¡ã³ãã® SEQ ããæå¾ã«éä¿¡ãã ACK (last_ack_sent)
-				 *  ãããåä¿¡ã¦ã¤ã³ãã¦ãµã¤ãºã¾ã§ã®éã®å¦ç
+				 *  受信したセグメントの SEQ が、最後に送信した ACK (last_ack_sent)
+				 *  から、受信ウインドウサイズまでの間の処理
 				 */
 				switch (cep->fsm_state) {
-				case TCP_FSM_SYN_RECVD:		/* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿		*/
-
-					cep->net_error = EV_CNNRF;	/* æ¥ç¶ä¸è½ */
+				case TCP_FSM_SYN_RECVD:		/* SYN を受信し、SYN 送信済み		*/
+
+					cep->net_error = EV_CNNRF;	/* 接続不能 */
 					cep->error     = E_CLS;
 					NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1);
@@ -1617,23 +1557,19 @@
 					break;
 
-				case TCP_FSM_ESTABLISHED:	/* ã³ãã¯ã·ã§ã³éè¨­å®äº			*/
-				case TCP_FSM_CLOSE_WAIT:	/* FIN åä¿¡ãã¯ã­ã¼ãºå¾
-ã¡		*/
+				case TCP_FSM_ESTABLISHED:	/* コネクション開設完了			*/
+				case TCP_FSM_CLOSE_WAIT:	/* FIN 受信、クローズ待ち		*/
 					NET_COUNT_MIB(tcp_stats.tcpEstabResets, 1);
 					/* fallthrough */
 
-				case TCP_FSM_FIN_WAIT_1:	/* çµäºãã¦ãFIN éä¿¡æ¸ã¿		*/
-				case TCP_FSM_FIN_WAIT_2:	/* çµäºãFIN ä¼éç¢ºèªåä¿¡ãFINå¾
-ã¡	*/
-
-					cep->net_error = EV_CNRST;	/* æ¥ç¶ãªã»ãã */
+				case TCP_FSM_FIN_WAIT_1:	/* 終了して、FIN 送信済み		*/
+				case TCP_FSM_FIN_WAIT_2:	/* 終了、FIN 伝達確認受信、FIN待ち	*/
+
+					cep->net_error = EV_CNRST;	/* 接続リセット */
 					cep->error     = E_CLS;
 					NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1);
 					/* no break; */
 
-				case TCP_FSM_CLOSING:		/* çµäºãFIN äº¤ææ¸ã¿ãACK å¾
-ã¡	*/
-				case TCP_FSM_LAST_ACK:		/* FIN åä¿¡ãçµäºãACK å¾
-ã¡	*/
+				case TCP_FSM_CLOSING:		/* 終了、FIN 交換済み、ACK 待ち	*/
+				case TCP_FSM_LAST_ACK:		/* FIN 受信、終了、ACK 待ち	*/
 
 					cep = tcp_close(cep);
@@ -1645,12 +1581,11 @@
 
 		/*
-		 *  CEP ã®ç¶æ
-ã SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿ã®å ´åã¯ã
-		 *  åä¿¡ã¦ã£ã³ãã«åã¾ãããã«ãã¼ã¿ã
-		 *  èª¿æ´ããåã«ããã®æ¥ç¶ã«ãããã±ãããã©ãããæ¤è¨¼ããã
+		 *  CEP の状態が SYN を受信し、SYN 送信済みの場合は、
+		 *  受信ウィンドに収まるようにデータを
+		 *  調整する前に、この接続によるパケットかどうかを検証する。
 		 *
-		 *    åä¿¡ããç¸æã® SEQ < ç¸æã® SEQ ã®åæå¤ (irs)
+		 *    受信した相手の SEQ < 相手の SEQ の初期値 (irs)
 		 *
-		 *  ããã¯ã"LAND" DoS æ»æã®é²å¾¡ã§ããã
+		 *  これは、"LAND" DoS 攻撃の防御である。
 		 */
 		if (cep->fsm_state == TCP_FSM_SYN_RECVD && SEQ_LT(tcph->seq, cep->irs)) {
@@ -1659,8 +1594,7 @@
 
 		/*
-		 *  åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ (rcv_nxt) - åä¿¡ããç¸æã® SEQ ã
-		 *  æ­£ãªããrcv_nxt ä»¥åã®ãã¼ã¿ã¯ãã§ã«åä¿¡ãã¦ããã®ã§ããã®é¨åã
-		 *  åé¤ããã
+		 *  受信を期待している最小の SEQ (rcv_nxt) - 受信した相手の SEQ が
+		 *  正なら、rcv_nxt 以前のデータはすでに受信しているので、その部分を
+		 *  削除する。
 		 *                           <---------- rcv_wnd --------->
 		 *                           rcv_nxt                      rcv_nxt + rcv_wnd
@@ -1674,5 +1608,5 @@
 		 *           ^                      ^
 		 *           seq                    seq + len
-		 *           <---------------> åé¤ããã
+		 *           <---------------> 削除する。
 		 */
 		todrop = cep->rcv_nxt - tcph->seq;
@@ -1680,6 +1614,6 @@
 
 			/*
-			 *  SYN ãã©ã°ãã¤ãã¦ããã¨ãã¯ããã®å (1 ãªã¯ããã)
-			 *  SEQ ãé²ããç·æ¥ãã¤ã³ã¿ã¨åé¤ããé·ããèª¿æ´ããã
+			 *  SYN フラグがついているときは、その分 (1 オクテット)
+			 *  SEQ を進め、緊急ポインタと削除する長さを調整する。
 			 */
 			if (tcph->flags & TCP_FLG_SYN) {
@@ -1694,22 +1628,20 @@
 
 			/*
-			 *  åé¤ããé·ãã SDU ããé·ããã¤ã¾ããåä¿¡ãæå¾
-ãã¦ãã
-			 *  æå°ã® SEQ (rcv_nxt) ã«éãã¦ããªããã
-			 *  åé¤ããé·ãã SDU ã¨åãã§ãFIN ãã©ã°ãã¤ãã¦ãªããã°
-			 *  å
-¨ã¦åé¤ããã
+			 *  削除する長さが SDU より長い、つまり、受信を期待している
+			 *  最小の SEQ (rcv_nxt) に達していないか、
+			 *  削除する長さが SDU と同じで、FIN フラグがついてなければ
+			 *  全て削除する。
 			 */
-			if ( todrop >  tcph->sum ||		/* tcph->sum ã¯ TCP ã® SDU é· */
+			if ( todrop >  tcph->sum ||		/* tcph->sum は TCP の SDU 長 */
 			    (todrop == tcph->sum && (tcph->flags & TCP_FLG_FIN) == 0)) {
 				tcph->flags &= ~TCP_FLG_FIN;
 				cep->flags |= TCP_CEP_FLG_ACK_NOW;
-				todrop = tcph->sum;		/* tcph->sum ã¯ TCP ã® SDU é· */
+				todrop = tcph->sum;		/* tcph->sum は TCP の SDU 長 */
 				}
 
 			/*
-			 *  SDU ãåã«è©°ããã
+			 *  SDU を前に詰める。
 			 */
-			if (todrop < tcph->sum) {		/* tcph->sum ã¯ TCP ã® SDU é· */
+			if (todrop < tcph->sum) {		/* tcph->sum は TCP の SDU 長 */
 				memcpy(GET_TCP_SDU(input, *offp),
 				       GET_TCP_SDU(input, *offp) + todrop, (size_t)(tcph->sum - todrop));
@@ -1717,11 +1649,11 @@
 
 			/*
-			 *  SEQ ã¨ SDU é·ãèª¿æ´ããã
+			 *  SEQ と SDU 長を調整する。
 			 */
 			tcph->seq +=     todrop;
-			tcph->sum -= (uint16_t)todrop;	/* tcph->sum ã¯ TCP ã® SDU é· */
+			tcph->sum -= (uint16_t)todrop;	/* tcph->sum は TCP の SDU 長 */
 
 			/*
-			 *  ç·æ¥ãã¤ã³ã¿ãèª¿æ´ããã
+			 *  緊急ポインタを調整する。
 			 */
 			if (tcph->urp > todrop)
@@ -1736,8 +1668,8 @@
 
 		/*  
-		 *  ããã¦ã¼ã¶ã¿ã¹ã¯ãçµäºããå¾ã«ããã¼ã¿ãåä¿¡ãã
-		 *  å ´åã¯ãRST ãéãã
-		 */
-		if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) {	/* tcph->sum ã¯ TCP ã® SDU é· */
+		 *  もしユーザタスクが終了した後に、データを受信した
+		 *  場合は、RST を送る。
+		 */
+		if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) {	/* tcph->sum は TCP の SDU 長 */
 			cep = tcp_close(cep);
 			goto reset_drop;
@@ -1745,8 +1677,6 @@
 
 		/*
-		 *  åä¿¡ã»ã°ã¡ã³ããåä¿¡ã¦ã£ã³ããè¶
-ããå ´åã¯ã
-		 *  è¶
-ããåãåãã
+		 *  受信セグメントが受信ウィンドを超える場合は、
+		 *  超えた分を削る。
 		 *
 		 *       <---------- rcv_wnd --------->
@@ -1761,17 +1691,15 @@
 		 *                    ^                      ^
 		 *                    seq                    seq + len
-		 *                                     <-----> åé¤ããã
-		 */
-		todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd);	/* tcph->sum ã¯ TCP ã® SDU é· */
+		 *                                     <-----> 削除する。
+		 */
+		todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd);	/* tcph->sum は TCP の SDU 長 */
 		if (todrop > 0) {
-			if (todrop > tcph->sum) {					/* tcph->sum ã¯ TCP ã® SDU é· */
+			if (todrop > tcph->sum) {					/* tcph->sum は TCP の SDU 長 */
 				/*
-				 *  åä¿¡ãã SDU ã®å
-¨ã¦ãåä¿¡ã¦ã£ã³ããè¶
-ããå ´åã
+				 *  受信した SDU の全てが受信ウィンドを超える場合。
 				 *
-				 *  TIME_WAIT ä¸­ã«ãæ°ããªæ¥ç¶è¦æ±ãåä¿¡ããã
-				 *  å¤ãæ¥ç¶ãç ´æ£ããæ°ããªæ¥ç¶ãéå§ããã
-				 *  ãã ããSEQ ã¯åããé²ãã§ããªããã°ãªããªãã
+				 *  TIME_WAIT 中に、新たな接続要求を受信したら
+				 *  古い接続を破棄し、新たな接続を開始する。
+				 *  ただし、SEQ は前より進んでいなければならない。
 				 */
 				if ((tcph->flags & TCP_FLG_SYN) &&
@@ -1785,8 +1713,7 @@
 
 				/*
-				 *  åä¿¡ã¦ã£ã³ãã 0 ã§ãåä¿¡ãã SEQ ã¨
-				 *  åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ ãä¸è´ããã¨ãã¯
-				 *  ACK ãè¿ããããä»¥å¤ã¯ãã¼ã¿ãç ´æ£ããACK ãè¿ãã
+				 *  受信ウィンドが 0 で、受信した SEQ と
+				 *  受信を期待している最小の SEQ が一致したときは
+				 *  ACK を返す。それ以外はデータを破棄し、ACK を返す。
 				 */
 				if (cep->rcv_wnd == 0 && (tcph->seq == cep->rcv_nxt || tcph->sum == 0)) {
@@ -1799,11 +1726,11 @@
 					}
 				}
-			tcph->sum -= (uint16_t)todrop;	/* tcph->sum ã¯ TCP ã® SDU é· */
+			tcph->sum -= (uint16_t)todrop;	/* tcph->sum は TCP の SDU 長 */
 			tcph->flags &= ~(TCP_FLG_PUSH | TCP_FLG_FIN);
 			}
 
 		/*
-		 *  ãããSYN ãã»ããããã¦ããã°ã
-		 *  ã¨ã©ã¼ãªã®ã§ RST ãéããæ¥ç¶ãç ´æ£ããã
+		 *  もし、SYN がセットされていれば、
+		 *  エラーなので RST を送り、接続を破棄する。
 		 */
 		if (tcph->flags & TCP_FLG_SYN) {
@@ -1814,9 +1741,8 @@
 
 		/*
-		 *  ãããACK ãã»ããããã¦ããªãå ´åã¯ã
-		 *  ç¶æ
-ã SYN åä¿¡æ¸ã¿ã
-		 *  SYN ãéä¿¡ãããã¨ãã¦ããã°ãå¦çãç¶ãããã
-		 *  ããä»¥å¤ã¯ã»ã°ã¡ã³ããç ´æ£ãã¦çµäºããã
+		 *  もし、ACK がセットされていない場合は、
+		 *  状態が SYN 受信済みか
+		 *  SYN を送信しようとしていれば、処理を続けるが、
+		 *  それ以外はセグメントを破棄して終了する。
 		 */
 		if ((tcph->flags & TCP_FLG_ACK) == 0) {
@@ -1826,5 +1752,5 @@
 		else {
 			/*
-			 * ACK ã®å¦ç
+			 * ACK の処理
 			 */
 			ret = proc_ack1(input, cep, *offp, &needoutput);
@@ -1840,9 +1766,9 @@
 /* step 6 */
 
-	/* éä¿¡ã¦ã£ã³ããæ´æ°ããã*/
+	/* 送信ウィンドを更新する。*/
 	if (update_wnd(tcph, cep) == true)
 		needoutput = true;
 
-	/* ç·æ¥ãã¼ã¿ãå¦çããã*/
+	/* 緊急データを処理する。*/
 	proc_urg(tcph, cep);
 
@@ -1850,11 +1776,10 @@
 
 	/*
-	 *  SDU ãããããFIN ãæªåä¿¡ã®ç¶æ
-ã§ãæåã« FIN ãåä¿¡ããã¨ãã
-	 *  åä¿¡ã»ã°ã¡ã³ãã­ã¥ã¼ã« net_buf ãè¿½å ããã
-	 *  ããä»¥å¤ã®å ´åã¯ãã»ã°ã¡ã³ããç ´æ£ããã
+	 *  SDU があるか、FIN を未受信の状態で、最初に FIN を受信したとき、
+	 *  受信セグメントキューに net_buf を追加する。
+	 *  それ以外の場合は、セグメントを破棄する。
 	 */
 	flags = tcph->flags;
-	if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) &&		/* tcph->sum ã¯ TCP ã® SDU é· */
+	if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) &&		/* tcph->sum は TCP の SDU 長 */
 	    TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) {
 		flags = reassemble(input, cep, *offp, flags);
@@ -1866,12 +1791,12 @@
 
 	/*
-	 *  FIN ãåä¿¡ãããã³ãã¯ã·ã§ã³ãã¯ã­ã¼ãºããã
+	 *  FIN を受信したらコネクションをクローズする。
 	 */
 	if (flags & TCP_FLG_FIN)
 		close_connection(cep, &needoutput);
 
-	/* åºåãè¡ã£ãå¾çµäºããã*/
+	/* 出力を行った後終了する。*/
 	if (needoutput == true || (cep->flags & TCP_CEP_FLG_ACK_NOW)) {
-		/* éä¿¡ãæç¤ºããã*/
+		/* 送信を指示する。*/
 		cep->flags |=  TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1882,5 +1807,5 @@
 reset_drop:
 	/*
-	 *  RST éä¿¡å¦ç
+	 *  RST 送信処理
 	 */
 
@@ -1888,5 +1813,5 @@
 		goto drop;
 
-	/* ãã¹ããªã¼ãã¼ãããããã¯ã¼ã¯ãªã¼ãã¼ã«æ»ãã*/
+	/* ホストオーダーからネットワークオーダーに戻す。*/
 
 	HTONS(tcph->sport);
@@ -1902,9 +1827,9 @@
 	else {
 		if (tcph->flags & TCP_FLG_SYN)
-			tcph->sum ++;		/* tcph->sum ã¯ SDU é· */
+			tcph->sum ++;		/* tcph->sum は SDU 長 */
 		tcp_respond(input, cep, tcph->seq + tcph->sum, 0, rbfree, TCP_FLG_RST | TCP_FLG_ACK);
 		}
 
-	/* input ã¯ tcp_respoond ã§è¿å´ãããã*/
+	/* input は tcp_respoond で返却される。*/
 	NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_RSTS], 1);
 	NET_COUNT_MIB(tcp_stats.tcpOutRsts, 1);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_output.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_output.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_output.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -125,5 +113,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -132,31 +120,25 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
-/* åºåæã®ãã©ã°ã FSM ç¶æ
-ã«ããé¸æããããã®è¡¨ */
+/* 出力時のフラグを FSM 状態により選択するための表 */
 
 const static uint8_t tcp_outflags[] = {
-	TCP_FLG_RST | TCP_FLG_ACK,	/*  0, ã¯ã­ã¼ãº				*/
-	0,				/*  1, ååãªã¼ãã³			*/
-	TCP_FLG_SYN,			/*  2, è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿	*/
-	TCP_FLG_SYN | TCP_FLG_ACK,	/*  3, SYM ãåä¿¡ããSYN éä¿¡æ¸ã¿	*/
-	TCP_FLG_ACK,			/*  4, ã³ãã¯ã·ã§ã³éè¨­å®äº		*/
-	TCP_FLG_ACK,			/*  5, FIN åä¿¡ãã¯ã­ã¼ãºå¾
-ã¡		*/
-	TCP_FLG_FIN | TCP_FLG_ACK,	/*  6, çµäºãã¦ãFIN éä¿¡æ¸ã¿		*/
-	TCP_FLG_FIN | TCP_FLG_ACK,	/*  7, çµäºãFIN äº¤ææ¸ã¿ãACK å¾
-ã¡	*/
-	TCP_FLG_FIN | TCP_FLG_ACK,	/*  8, FIN åä¿¡ãçµäºãACK å¾
-ã¡		*/
-	TCP_FLG_ACK,			/*  9, çµäºãFIN ä¼éç¢ºèªåä¿¡ãFINå¾
-ã¡	*/
-	TCP_FLG_ACK,			/* 10, çµäºãæéå¾
-ã¡			*/
+	TCP_FLG_RST | TCP_FLG_ACK,	/*  0, クローズ				*/
+	0,				/*  1, 受動オープン			*/
+	TCP_FLG_SYN,			/*  2, 能動オープン、SYN 送信済み	*/
+	TCP_FLG_SYN | TCP_FLG_ACK,	/*  3, SYM を受信し、SYN 送信済み	*/
+	TCP_FLG_ACK,			/*  4, コネクション開設完了		*/
+	TCP_FLG_ACK,			/*  5, FIN 受信、クローズ待ち		*/
+	TCP_FLG_FIN | TCP_FLG_ACK,	/*  6, 終了して、FIN 送信済み		*/
+	TCP_FLG_FIN | TCP_FLG_ACK,	/*  7, 終了、FIN 交換済み、ACK 待ち	*/
+	TCP_FLG_FIN | TCP_FLG_ACK,	/*  8, FIN 受信、終了、ACK 待ち		*/
+	TCP_FLG_ACK,			/*  9, 終了、FIN 伝達確認受信、FIN待ち	*/
+	TCP_FLG_ACK,			/* 10, 終了、時間待ち			*/
 	};
 
 /*
- *  send_segment -- TCP åºåå¦ç
+ *  send_segment -- TCP 出力処理
  */
 
@@ -188,13 +170,10 @@
 
 	/*
-	 *  ã»ã°ã¡ã³ãé·ããç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ãé·ã«èª¿æ´ããã
-	 *  ãããè¶
-ãã¦ããå ´åã¯ãè¶
-ããåãå¾ã§éä¿¡ããã
-	 *  ãã®ãããFIN ããããã¯ãªã¢ããã
+	 *  セグメント長を、相手の最大受信セグメント長に調整する。
+	 *  もし、超えている場合は、超えた分を後で送信する。
+	 *  このため、FIN ビットをクリアする。
 	 *
-	 *  ãªãªã¸ãã«ã§ã¯ãt_maxopd ãå¶éé·ã«ãã¦ãããã
-	 *  æ¬å®è£
-ã§ã¯ãç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ãã«ããã
+	 *  オリジナルでは、t_maxopd を制限長にしているが、
+	 *  本実装では、相手の最大受信セグメントにする。
 	 */
 	if (len + optlen > cep->maxseg) {
@@ -205,5 +184,5 @@
 
 	/*
-	 *  éä¿¡ãããã¡ãç©ºã«ãªãã¨ãã¯ PUSH ãã©ã°ãè¨­å®ããã
+	 *  送信バッファが空になるときは PUSH フラグを設定する。
 	 */
 	if (len && doff + len >= cep->swbuf_count)
@@ -216,6 +195,6 @@
 
 		/*
-		 *  éä¿¡ã¦ã¤ã³ããããã¡ãéæ¾ãããªãããã«ãã¦ã
-		 *  ãããã¯ã¼ã¯ãããã¡ãåºåã«ç§»ãã
+		 *  送信ウインドバッファが開放されないようにして、
+		 *  ネットワークバッファを出力に移す。
 		 */
 		cep->swbufq->flags |= NB_FLG_NOREL_IFOUT;
@@ -225,7 +204,6 @@
 
 		/*
-		 *  ACK å®äºç¶æ
-ã§ããã®é¢æ°ãå¼ã³åºããããã¨ãããã
-		 *  ãã®æã¯ãlen ã 0 ã«ãã¦ãå¦çãç¶ç¶ããã
+		 *  ACK 完了状態で、この関数が呼び出されることもある。
+		 *  この時は、len を 0 にして、処理を継続する。
 		 */
 		len = 0;
@@ -254,6 +232,6 @@
 
 		/*
-		 *  éä¿¡ã¦ã¤ã³ããããã¡ãéæ¾ãããªãããã«ãã¦ã
-		 *  ãããã¯ã¼ã¯ãããã¡ãåºåã«ç§»ãã
+		 *  送信ウインドバッファが開放されないようにして、
+		 *  ネットワークバッファを出力に移す。
 		 */
 		cep->swbufq->flags |= NB_FLG_NOREL_IFOUT;
@@ -263,7 +241,6 @@
 
 		/*
-		 *  ACK å®äºç¶æ
-ã§ããã®é¢æ°ãå¼ã³åºããããã¨ãããã
-		 *  ãã®æã¯ãlen ã 0 ã«ãã¦ãå¦çãç¶ç¶ããã
+		 *  ACK 完了状態で、この関数が呼び出されることもある。
+		 *  この時は、len を 0 にして、処理を継続する。
 		 */
 		len = 0;
@@ -290,7 +267,6 @@
 
 	/*
-	 *  TCP ãªãã·ã§ã³ã®è¨­å®ãè¡ãã
-	 *  æ¬å®è£
-ã§ã¯ãæå¤§ã»ã°ã¡ã³ããµã¤ãºã®ã¿è¨­å®ããã
+	 *  TCP オプションの設定を行う。
+	 *  本実装では、最大セグメントサイズのみ設定する。
 	 */
 	hdr_offset = IF_IP_TCP_HDR_OFFSET(output);
@@ -309,5 +285,5 @@
 		}
 
-	/* TCP SDU ã«éä¿¡ãã¼ã¿ãã³ãã¼ããã*/
+	/* TCP SDU に送信データをコピーする。*/
 
 	if (len > 0) {
@@ -335,10 +311,10 @@
 
 	/*
-	 * snd_max: éä¿¡ããæå¤§ SEQ
-	 * snd_nxt: æ¬¡ã«éä¿¡ãã SEQ
+	 * snd_max: 送信した最大 SEQ
+	 * snd_nxt: 次に送信する SEQ
 	 *
-	 *  ç¸æãã FIN ãåä¿¡ããã¾ã  FIN ãéä¿¡ãã¦ããªããã
-	 *  éããã¼ã¿ããªãã¨ãã¯ãFIN ãç¸æã«å±ããããã
-	 *  ã»ã°ã¡ã³ããéä¿¡ããããSEQ ã¯é²ããªãã
+	 *  相手から FIN を受信し、まだ FIN を送信していないか、
+	 *  送るデータがないときは、FIN を相手に届けるため、
+	 *  セグメントを送信するが、SEQ は進めない。
 	 */
 	if ((flags & TCP_FLG_FIN) && (cep->flags & TCP_CEP_FLG_SENT_FIN) &&
@@ -350,5 +326,5 @@
 
 	/*
-	 *  SEQãACKããã©ã°ã®è¨­å®ã
+	 *  SEQ、ACK、フラグの設定。
 	 */
 	if (len > 0 || (flags & (TCP_FLG_SYN | TCP_FLG_FIN)) || cep->timer[TCP_TIM_PERSIST] != 0)
@@ -358,6 +334,5 @@
 
 	/*
-	 *  rcv_nxt: åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ
+	 *  rcv_nxt: 受信を期待している最小の SEQ
 	 */
 	tcph->ack   = htonl(cep->rcv_nxt);
@@ -365,8 +340,8 @@
 
 	/*
-	 *  åä¿¡ã¦ã£ã³ãã®è¨ç®
+	 *  受信ウィンドの計算
 	 *
-	 *  rbufsz: åä¿¡ç¨ãããã¡ãµã¤ãº
-	 *  maxseg: ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº	
+	 *  rbufsz: 受信用バッファサイズ
+	 *  maxseg: 相手の最大受信セグメントサイズ	
 	 */
 	if (win < (cep->rbufsz / 4) && win < cep->maxseg)
@@ -374,8 +349,6 @@
 
 	/*
-	 *  rcv_nxt: åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ
-	 *  rcv_adv: åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ
+	 *  rcv_nxt: 受信を期待している最小の SEQ
+	 *  rcv_adv: 受信を期待している最大の SEQ
 	 */
 	if ((int32_t)win < (int32_t)(cep->rcv_adv - cep->rcv_nxt))
@@ -387,5 +360,5 @@
 
 	/*
-	 *  ç·æ¥ãã¤ã³ã¿ã®è¨­å®
+	 *  緊急ポインタの設定
 	 */
 	if (SEQ_GT(cep->snd_up, cep->snd_nxt)) {
@@ -404,14 +377,14 @@
 
 	/*
-	 *  ãã§ãã¯ãµã ãè¨­å®ããã
+	 *  チェックサムを設定する。
 	 */
 	tcph->sum = 0;
 	tcph->sum = IN_CKSUM(output, IPPROTO_TCP, hdr_offset, GET_TCP_HDR_SIZE(output, hdr_offset) + len);
 
-	/* ãããã¯ã¼ã¯ãããã¡é·ãèª¿æ´ããã*/
+	/* ネットワークバッファ長を調整する。*/
 	output->len = (uint16_t)(GET_IF_IP_TCP_HDR_SIZE(output, hdr_offset) + len);
 
 	/*
-	 *  ã¿ã¤ãã®èª¿æ´
+	 *  タイマの調整
 	 */
 	if ((cep->flags & TCP_CEP_FLG_FORCE) == 0 || cep->timer[TCP_TIM_PERSIST] == 0) {
@@ -419,5 +392,5 @@
 
 		/*
-		 *  æ¬¡ã«éä¿¡ãã SEQ (snd_nxt) ãä»åéä¿¡ãããã¼ã¿æ°åé²ããã
+		 *  次に送信する SEQ (snd_nxt) を今回送信するデータ数分進める。
 		 */
 		if (flags & TCP_FLG_SYN)
@@ -431,25 +404,25 @@
 
 		/*
-		 *  æ¬¡ã«éä¿¡ãã SEQ (snd_nxt) ã
-		 *  éä¿¡ããæå¤§ SEQ (snd_max) ããé²ãã§ããã°ã
-		 *  éä¿¡ããæå¤§ SEQ (snd_max) ãæ´æ°ããã
+		 *  次に送信する SEQ (snd_nxt) が
+		 *  送信した最大 SEQ (snd_max) より進んでいれば、
+		 *  送信した最大 SEQ (snd_max) を更新する。
 		 */
 		if (SEQ_GT(cep->snd_nxt, cep->snd_max)) {
 			cep->snd_max = cep->snd_nxt;
 			/*
-			 *  ãããå¾å¾©æéè¨æ¸¬ãè¡ã£ã¦ããªããã°ã
-			 *  ãã®éä¿¡ã«æéãåãããã
+			 *  もし、往復時間計測を行っていなければ、
+			 *  この送信に時間を合わせる。
 			 */
 			if (cep->rtt == 0) {
 				cep->rtt   = 1;
-				cep->rtseq = startseq;	/* æ´æ°åã® cep->snd_nxt */
-				}
-			}
-
-		/*
-		 *  ããè¨­å®ããã¦ããªãããACK ã¾ãã¯ä¿çãçºçãã¦ããªããã°ã
-		 *  åéã¿ã¤ããè¨­å®ãããè¨­å®ããåæå¤ã¯ã
-		 * ãæ»ãããªå¾å¾©æé + 2 Ã å¾å¾©æéå¤åãã§ããã
-		 *  åéæéã®ããã¯ãªãã«ä½¿ãããã·ããã«ã¦ã³ããåæåããã
+				cep->rtseq = startseq;	/* 更新前の cep->snd_nxt */
+				}
+			}
+
+		/*
+		 *  もし設定されていないか、ACK または保留が発生していなければ、
+		 *  再送タイマを設定する。設定する初期値は、
+		 * 「滑らかな往復時間 + 2 × 往復時間変動」である。
+		 *  再送時間のバックオフに使われるシフトカウントも初期化する。
 		 */
 		if (cep->timer[TCP_TIM_REXMT] == 0 && cep->snd_nxt != cep->snd_una) {
@@ -463,7 +436,7 @@
 
 	/*
-	 *  æ¬¡ã«éä¿¡ãã SEQ (snd_nxt) + ä»åéä¿¡ãããã¼ã¿æ° (len) ã
-	 *  éä¿¡ããæå¤§ SEQ (snd_max) ããé²ãã§ããã°ã
-	 *  éä¿¡ããæå¤§ SEQ (snd_max) ãæ´æ°ããã
+	 *  次に送信する SEQ (snd_nxt) + 今回送信するデータ数 (len) が
+	 *  送信した最大 SEQ (snd_max) より進んでいれば、
+	 *  送信した最大 SEQ (snd_max) を更新する。
 	 */
 	else if (SEQ_GT(cep->snd_nxt + len, cep->snd_max))
@@ -483,16 +456,13 @@
 #endif	/* of #ifdef TCP_CFG_TRACE */
 
-	/* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/
+	/* ネットワーク層 (IP) の出力関数を呼び出す。*/
 	if ((error = IP_OUTPUT(output, TMO_TCP_OUTPUT)) != E_OK)
 		goto err_ret;
 
 	/*
-	 *  ç¸æã«ä¼ããã¦ã£ã³ãã¦ãµã¤ãº (win) ã 0 ä»¥ä¸ã§ã
-	 *  åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ (rcv_nxt) + win ã
-	 *  åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ (rcv_adv) ããé²ãã§ããã°
-	 *  åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ ãæ´æ°ããã
+	 *  相手に伝えたウィンドウサイズ (win) が 0 以上で、
+	 *  受信を期待している最小の SEQ (rcv_nxt) + win が
+	 *  受信を期待している最大の SEQ (rcv_adv) より進んでいれば
+	 *  受信を期待している最大の SEQ を更新する。
 	 */
 	if (win > 0 && SEQ_GT(cep->rcv_nxt + win, cep->rcv_adv)) {
@@ -501,10 +471,10 @@
 
 	/*
-	 *  æå¾ã«éä¿¡ãã ACK (last_ack_sent) ãæ´æ°ããã
+	 *  最後に送信した ACK (last_ack_sent) を更新する。
 	 */
 	cep->last_ack_sent = cep->rcv_nxt;
 
 	/*
-	 *  ãã©ã°ã®è¨­å®ãè¡ãã
+	 *  フラグの設定を行う。
 	 */
 	cep->flags &= ~(TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_DEL_ACK);
@@ -516,7 +486,7 @@
 err_ret:
 	/*
-	 * ä»¥ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã
-	 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½
-	 * ã»åçãªéä¿¡ç«¯ç¹ã®çæã»åé¤æ©è½
+	 * 以下に関係しないフラグをクリアーする。
+	 * ・送受信ウィンドバッファの省コピー機能
+	 * ・動的な通信端点の生成・削除機能
 	 */
 	cep->flags &= TCP_CEP_FLG_NOT_CLEAR;
@@ -526,5 +496,5 @@
 
 /*
- *  tcp_output -- TCP åºåå¦ç
+ *  tcp_output -- TCP 出力処理
  */
 
@@ -539,20 +509,20 @@
 
 	/*
-	 *  snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ	 ã¾ãã¯ãç¢ºèªãããæå¤§éä¿¡ SEQ
-	 *  snd_max: éä¿¡ããæå¤§ SEQ
+	 *  snd_una: 未確認の最小送信 SEQ	 または、確認された最大送信 SEQ
+	 *  snd_max: 送信した最大 SEQ
 	 */
 	idle = (cep->snd_max == cep->snd_una);
 
 	/*
-	 *  idle:   ã¢ã¤ãã«æé
-	 *  rxtcur: ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã
+	 *  idle:   アイドル時間
+	 *  rxtcur: 現在の再送タイムアウト
 	 */
 	if (idle && cep->idle >= cep->rxtcur)
 
 		/*
-		 *  snd_cwnd: è¼»è¼³ã¦ã£ã³ããµã¤ãº
-		 *  maxseg  : ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº
+		 *  snd_cwnd: 輻輳ウィンドサイズ
+		 *  maxseg  : 相手の最大受信セグメントサイズ
 		 *
-		 *  é·æéã¢ã¤ãã«ã ã£ãã®ã§ã¹ã­ã¼ã¹ã¿ã¼ãå¶å¾¡ã«è¨­å®ããã
+		 *  長時間アイドルだったのでスロースタート制御に設定する。
 		 */
 		cep->snd_cwnd = cep->maxseg;
@@ -562,9 +532,9 @@
 
 		/*
-		 *  snd_nxt: æ¬¡ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ãã SEQ
-		 *  snd_una: æªç¢ºèªã®æå°éä¿¡ SEQãã¾ãã¯ç¢ºèªãããæå¤§éä¿¡ SEQ
+		 *  snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ
+		 *  snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ
 		 *
-		 *  doff: éä¿¡ãéå§ãããªãã»ããã
-		 *                                    swbuf_count (éä¿¡ãããã¡ã«ãããªã¯ãããæ°)
+		 *  doff: 送信を開始するオフセット。
+		 *                                    swbuf_count (送信バッファにあるオクテット数)
 		 *    0                               V
 		 *    +-------------------------------------------+
@@ -572,19 +542,19 @@
 		 *    +-------------------------------------------+
 		 *    ^               ^
-		 *    |<------------->snd_nxt (ååéä¿¡ãã SEQ)
+		 *    |<------------->snd_nxt (前回送信した SEQ)
 		 *    |       doff
-		 *    snd_una (ã¾ã ç¢ºèªããã¦ããªã)
+		 *    snd_una (まだ確認されていない)
 		 */
 		doff = (uint_t)(cep->snd_nxt - cep->snd_una);
 
 		/*
-		 *  snd_wnd:  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº
-		 *  snd_cwnd: è¼»è¼³ã¦ã£ã³ããµã¤ãº
+		 *  snd_wnd:  相手の受信可能ウィンドサイズ
+		 *  snd_cwnd: 輻輳ウィンドサイズ
 		 *
-		 *  win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨­å®ããã
+		 *  win: どちらか小さいウィンドサイズに設定する。
 		 */
 		win   = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
 	
-		/* åºåãã©ã°ã®è¨­å® */
+		/* 出力フラグの設定 */
 		flags = tcp_outflags[cep->fsm_state];
 		if (cep->flags & TCP_CEP_FLG_NEED_FIN)
@@ -595,17 +565,17 @@
 
 			/*
-			 *  ãããéä¿¡ã¦ã¤ã³ããµã¤ãº (win) ã 0 ãªã 1 ãªã¯ãããéä¿¡ããã
-			 *  ããã§ãªããã°ãæç¶ã¿ã¤ã ã¢ã¦ããã­ã£ã³ã»ã«ãã
-			 *  åéä¿¡åæ° (rxtshift) ã 0 ã«ããã
+			 *  もし、送信ウインドサイズ (win) が 0 なら 1 オクテット送信する。
+			 *  そうでなければ、持続タイムアウトをキャンセルし、
+			 *  再送信回数 (rxtshift) を 0 にする。
 			 */
 			if (win == 0) {
 
 				/*
-				 *  doff:        éä¿¡ãããªã¯ãããæ°ã
-				 *  swbuf_count: éä¿¡ãããã¡ã®ä½¿ç¨ä¸­ãµã¤ãº
+				 *  doff:        送信するオクテット数。
+				 *  swbuf_count: 送信バッファの使用中サイズ
 				 *
-				 *  éä¿¡ãããã¡ã«æ®ã£ã¦ãããªã¯ããããããããã
-				 *  éä¿¡ãããã¨ãã¦ãããªã¯ãããæ°ããå¤ããã°
-				 *  FIN ãã©ã°ãã¯ãªã¢ããã
+				 *  送信バッファに残っているオクテットが、これから
+				 *  送信しようとしているオクテット数より多ければ
+				 *  FIN フラグをクリアする。
 				 */
 				if (doff < cep->swbuf_count)
@@ -615,6 +585,6 @@
 			else {
 				/*
-				 *  TCP_TIM_PERSIST: æç¶ã¿ã¤ã
-				 *  rxtshift:        åéä¿¡åæ°ã® log(2)
+				 *  TCP_TIM_PERSIST: 持続タイマ
+				 *  rxtshift:        再送信回数の log(2)
 				 */
 				cep->timer[TCP_TIM_PERSIST] = 0;
@@ -624,6 +594,6 @@
 
 		/*
-		 *  len: ä»åéä¿¡ãããªã¯ãããæ°
-		 *        swbuf_count (éä¿¡ãããã¡ã«ãããªã¯ãããæ°)
+		 *  len: 今回送信するオクテット数
+		 *        swbuf_count (送信バッファにあるオクテット数)
 		 *                                    |
 		 *    0                               V
@@ -633,7 +603,7 @@
 		 *    ^               ^<------------->
 		 *    |               |      len
-		 *    |<------------->snd_nxt (ååéä¿¡ãã SEQ)
+		 *    |<------------->snd_nxt (前回送信した SEQ)
 		 *    |       doff
-		 *    snd_una (ã¾ã ç¢ºèªããã¦ããªã)
+		 *    snd_una (まだ確認されていない)
 		 */
 		if (cep->swbuf_count < win)
@@ -643,15 +613,14 @@
 
 		/*
-		 *  ãã§ã«éä¿¡ããã¦ããã°ãSYN ãããããªãããã
-		 *  ããããä»¥ä¸ã®æ¡ä»¶ã§ã¯éä¿¡ãæ§ããã
+		 *  すでに送信されていれば、SYN ビットをオフする。
+		 *  しかし、以下の条件では送信を控える。
 		 *
-		 *    ã»ç¶æ
-ã SYN éä¿¡ã
-		 *    ã»ã»ã°ã¡ã³ãããã¼ã¿ãå«ãã§ããã
+		 *    ・状態が SYN 送信。
+		 *    ・セグメントがデータを含んでいる。
 		 */
 		if ((flags & TCP_FLG_SYN) && SEQ_GT(cep->snd_nxt, cep->snd_una)) {
 			flags &= ~TCP_FLG_SYN;
-			doff --;		/* -1 ã¯ SYN ãã©ã°å */
-			len ++;			/* +1 ã¯ SYN ãã©ã°å */
+			doff --;		/* -1 は SYN フラグ分 */
+			len ++;			/* +1 は SYN フラグ分 */
 			if (len > 0 && cep->fsm_state == TCP_FSM_SYN_SENT)
 				break;
@@ -666,10 +635,10 @@
 
 			/*
-			 *  len ã 0 ä»¥ä¸ãªãã0 ã«è¨­å®ããã
-			 *  ãããéä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã 0 ãªãã
-			 *  åéä¿¡ã¿ã¤ããã­ã£ã³ã»ã«ãã
-			 *  ååéä¿¡ãã SEQ (snd_nxt) ã
-			 *  ç¢ºèªãããæå¤§éä¿¡ SEQ (snd_una) ã«æ»ãã
-			 *  ããã¦ãæç¶ã¿ã¤ãã¼ãæ­¢ã¾ã£ã¦ããã°ãåè¨­å®ããã
+			 *  len が 0 以下なら、0 に設定する。
+			 *  もし、送信ウィンドウサイズが 0 なら、
+			 *  再送信タイマをキャンセルし、
+			 *  前回送信した SEQ (snd_nxt) を
+			 *  確認された最大送信 SEQ (snd_una) に戻す。
+			 *  そして、持続タイマーが止まっていれば、再設定する。
 			 */
 			len = 0;
@@ -685,7 +654,6 @@
 
 		/*
-		 *  ä»åéä¿¡ãããªã¯ãããæ° (len) ã¯ã
-		 *  ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶
-ããªãããã«ããã
+		 *  今回送信するオクテット数 (len) は、
+		 *  相手の最大受信セグメントサイズ (maxseg) を超えないようにする。
 		 */
 		if (len > cep->maxseg) {
@@ -695,5 +663,5 @@
 
 		/*
-                 *        swbuf_count (éä¿¡ãããã¡ã«ãããªã¯ãããæ°)
+                 *        swbuf_count (送信バッファにあるオクテット数)
                  *                                           |
 		 *    0                                      V
@@ -703,10 +671,10 @@
 		 *    ^               ^<------------->
 		 *    |               |      len
-		 *    |<------------->snd_nxt (ååéä¿¡ãã SEQ)
+		 *    |<------------->snd_nxt (前回送信した SEQ)
 		 *    |       doff
-		 *    snd_una (ã¾ã ç¢ºèªããã¦ããªã)
+		 *    snd_una (まだ確認されていない)
 		 *
-		 *  ä»åéä¿¡å¾ããéä¿¡ãããã¡ã«ãã¼ã¿ãæ®ã£ã¦ããã°
-		 *  FIN ãã©ã°ãã¯ãªã¢ããã
+		 *  今回送信後も、送信バッファにデータが残っていれば
+		 *  FIN フラグをクリアする。
 		 */
 		if (SEQ_LT(cep->snd_nxt + len, cep->snd_una + cep->swbuf_count))
@@ -714,26 +682,25 @@
 
 		/*
-		 *  ãããã win ã¯ãåä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã
-		 *  åä¿¡ãããã¡ã®ç©ºãå®¹é
+		 *  ここから win は、受信ウィンドウサイズ。
+		 *  受信バッファの空き容量
 		 */
 		win = cep->rbufsz - cep->rwbuf_count;
 
 		/*
-		 *  æããªã¦ã£ã³ãã¦ã»ã·ã³ãã­ã¼ã ã®åé¿å¦ç (éä¿¡å´)
+		 *  愚かなウィンドウ・シンドロームの回避処理 (送信側)
 		 *
-		 *  ä»¥ä¸ã®æ¡ä»¶ã§ãéä¿¡ãè¡ãã
+		 *  以下の条件で、送信を行う。
 		 *
-		 *    ã»ãã«ãµã¤ãº (maxseg) ã®ã»ã°ã¡ã³ããéããã¨ãã§ããã
-		 *    ã»ç¸æã®æå¤§ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã® 1/2 ã®ãã¼ã¿ã
-		 *      éããã¨ãã§ããã
-		 *    ã»éä¿¡ãããã¡ãç©ºã«ã§ããã¢ã¤ãã«ãéé
-å»¶ãªãã·ã§ã³ãæå¹ãªã¨ãã
+		 *    ・フルサイズ (maxseg) のセグメントを送ることができる。
+		 *    ・相手の最大の受信ウィンドウサイズの 1/2 のデータを
+		 *      送ることができる。
+		 *    ・送信バッファを空にでき、アイドルか非遅延オプションが有効なとき。
 		 */
 		if (len) {
 
 			/*
-			 *  ä»åéä¿¡ãããªã¯ãããæ° (len) ã
-			 *  ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã«
-			 *  ä¸è´ããã¨ãã¯éä¿¡ããã
+			 *  今回送信するオクテット数 (len) が
+			 *  相手の最大受信セグメントサイズ (maxseg) に
+			 *  一致するときは送信する。
 			 */
 			if (len == cep->maxseg) {
@@ -743,6 +710,6 @@
 
 			/*
-			 *  ä»åã®éä¿¡ã§ãéä¿¡ãããã¡ãç©ºã«ã§ãã
-			 *  ã¢ã¤ãã«ãé PUSH ãªãã·ã§ã³ãæå¹ãªã¨ãã
+			 *  今回の送信で、送信バッファを空にでき、
+			 *  アイドルか非 PUSH オプションが有効なとき。
 			 */
 			if ((idle || (cep->flags & TCP_CEP_FLG_NO_DELAY)) &&
@@ -754,15 +721,15 @@
 
 			/*
-			 *  max_sndwnd: ä»ã¾ã§ã®æå¤§éä¿¡ã¦ã£ã³ããµã¤ãº
-			 *  snd_nxt:    æ¬¡ã«éä¿¡ãã SEQ
-			 *  snd_max:    éä¿¡ããæå¤§ SEQ
+			 *  max_sndwnd: 今までの最大送信ウィンドサイズ
+			 *  snd_nxt:    次に送信する SEQ
+			 *  snd_max:    送信した最大 SEQ
 			 *
-			 *  æ¬¡ã®æ¡ä»¶ã§ã¯éä¿¡ãè¡ãã
+			 *  次の条件では送信を行う。
 			 *
-			 *    ã»å¼·å¶éä¿¡ãã©ã°ãã»ããããã¦ããã
-			 *    ã»ãã¼ã¿é·ãç¸æã®æå¤§ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã® 1/2 ä»¥ä¸ã§ã
-			 *      ç¸æã®æå¤§ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã 0 ããå¤§ããã
-			 *    ã»æ¬¡ã«éä¿¡ãã SEQ ãéä¿¡ããæå¤§ SEQ ããå°ããã
-			 *      ã¤ã¾ããåéããã¨ãã
+			 *    ・強制送信フラグがセットされている。
+			 *    ・データ長が相手の最大の受信ウィンドウサイズの 1/2 以上で、
+			 *      相手の最大の受信ウィンドウサイズが 0 より大きい。
+			 *    ・次に送信する SEQ が送信した最大 SEQ より小さい、
+			 *      つまり、再送するとき。
 			 */
 			if ((cep->flags & TCP_CEP_FLG_FORCE) ||
@@ -776,9 +743,9 @@
 
 		/*
-		 *  æããªã¦ã£ã³ãã¦ã»ã·ã³ãã­ã¼ã ã®åé¿å¦ç (åä¿¡å´)
+		 *  愚かなウィンドウ・シンドロームの回避処理 (受信側)
 		 *
-		 *  ã¦ã£ã³ãã¦ãµã¤ãºããã«ãµã¤ãºã® 2 åã®ã»ã°ã¡ã³ãããããã¯
-		 *  åä¿¡ãããã¡å®¹éã® 1/2 ã®ãããããå°ããã»ãã®
-		 *  ãµã¤ãºã§å¢å ãããå ´åã¯ãã¦ã£ã³ãã¦ãµã¤ãºã®æ´æ°ãè¡ãã
+		 *  ウィンドウサイズがフルサイズの 2 倍のセグメント、あるいは
+		 *  受信バッファ容量の 1/2 の、いずれか小さいほうの
+		 *  サイズで増加される場合は、ウィンドウサイズの更新を行う。
 		 */
 		if (win > 0) {
@@ -786,10 +753,8 @@
 
 			/*
-			 *  win:              åä¿¡ãããã¡ã®ç©ºãå®¹é
-			 *  MAX_TCP_WIN_SIZE: TCP ãããã® win ãã£ã¼ã«ãã«è¨­å®ã§ããæå¤§å¤
-			 *  rcv_adv:          åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ
-			 *  rcv_nxt:          åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ
+			 *  win:              受信バッファの空き容量
+			 *  MAX_TCP_WIN_SIZE: TCP ヘッダの win フィールドに設定できる最大値
+			 *  rcv_adv:          受信を期待している最大の SEQ
+			 *  rcv_nxt:          受信を期待している最小の SEQ
 			 */
 			if (win < MAX_TCP_WIN_SIZE)
@@ -806,5 +771,5 @@
 	
 		/*
-		 *  ACK ãéä¿¡ããã
+		 *  ACK を送信する。
 		 */
 		if (cep->flags & TCP_CEP_FLG_ACK_NOW) {
@@ -829,10 +794,10 @@
 
 		/*
-		 *  snd_nxt: æ¬¡ã«éä¿¡ãã SEQ
-		 *  snd_una: æªç¢ºèªã®æå°éä¿¡ SEQãã¾ãã¯ç¢ºèªãããæå¤§éä¿¡ SEQ
+		 *  snd_nxt: 次に送信する SEQ
+		 *  snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ
 		 *
-		 *  ç¸æãã FIN ãåä¿¡ããã¾ã  FIN ãéä¿¡ãã¦ããªããã
-		 *  éããã¼ã¿ããªãã¨ãã¯ãFIN ãç¸æã«å±ããããã
-		 *  ã»ã°ã¡ã³ããéä¿¡ããã
+		 *  相手から FIN を受信し、まだ FIN を送信していないか、
+		 *  送るデータがないときは、FIN を相手に届けるため、
+		 *  セグメントを送信する。
 		 */
 		if ((flags & TCP_FLG_FIN) &&
@@ -843,6 +808,6 @@
 
 		/*
-		 *  éä¿¡ãã¹ããã¼ã¿ããããåéã¿ã¤ãã¨æç¶ã¿ã¤ããåãã¦ããã¨ãã¯
-		 *  æç¶ã¿ã¤ããè¨­å®ããã
+		 *  送信すべきデータがあり、再送タイマと持続タイマが切れているときは
+		 *  持続タイマを設定する。
 		 */
 		if (cep->swbuf_count && cep->timer[TCP_TIM_REXMT  ] == 0 &&
@@ -859,5 +824,5 @@
 
 /*
- *  tcptsk_alloc_swbufq -- éä¿¡ã¦ã£ã³ããããã¡å²ãå½ã¦
+ *  tcptsk_alloc_swbufq -- 送信ウィンドバッファ割り当て
  */
 
@@ -869,14 +834,13 @@
 
 	/*
-	 *  snd_wnd:  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº
-	 *  snd_cwnd: è¼»è¼³ã¦ã£ã³ããµã¤ãº
+	 *  snd_wnd:  相手の受信可能ウィンドサイズ
+	 *  snd_cwnd: 輻輳ウィンドサイズ
 	 *
-	 *  win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨­å®ããã
+	 *  win: どちらか小さいウィンドサイズに設定する。
 	 */
 	win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
 
 	/*
-	 *  ç¸æã®åä¿¡ã¦ã£ã³ããéãã¦ããå ´åã¯ãéãã¾ã§å¾
-æ©ããã
+	 *  相手の受信ウィンドが閉じている場合は、開くまで待機する。
 	 */
 	if (win == 0) {
@@ -887,9 +851,9 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		/* ノンブロッキングコール */
 		if (!IS_PTR_DEFINED(cep->callback)) {
 			syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
 
-			/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+			/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 			cep->snd_tskid = TA_NULL;
 			cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -906,10 +870,10 @@
 		                                   (GET_TCP_CEPID(cep) & NBA_ID_MASK)), TMO_POL)) != E_OK) {
 
-			/* ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/
+			/* ネットワークバッファを予約する。*/
 			cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_PEND;
 			}
 		else {
 
-			/* éä¿¡ã¦ã£ã³ããããã¡ãåæåããã*/
+			/* 送信ウィンドバッファを初期化する。*/
 			tcp_init_swbuf(cep);
 
@@ -920,8 +884,8 @@
 				uint_t len;
 
-				/* éä¿¡ã¦ã£ã³ããããã¡ã®æ¸ãè¾¼ã¿ã¢ãã¬ã¹ãè¨­å®ããã*/
+				/* 送信ウィンドバッファの書き込みアドレスを設定する。*/
 				len = TCP_GET_SWBUF_ADDR(cep, cep->snd_p_buf);
 
-				/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+				/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 				(*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len);
@@ -931,5 +895,5 @@
 
 
-				/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+				/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 				cep->snd_tskid = TA_NULL;
 				cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -941,10 +905,10 @@
 				uint_t len;
 
-				/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/
+				/* 送信ウィンドバッファにデータを書き込む。*/
 				len = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len);
 
 #ifdef TCP_CFG_EXTENTIONS
 
-				/* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨­å®ããã*/
+				/* 送信緊急ポインタを設定する。*/
 			        if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB)
 					cep->snd_up = cep->snd_una + len;
@@ -952,8 +916,8 @@
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
-				/* ãã©ã°ããéä¿¡å¯è½ã«è¨­å®ããå¼·å¶çã«éä¿¡ããã*/
+				/* フラグを、送信可能に設定し、強制的に送信する。*/
 				cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR | TCP_CEP_FLG_POST_OUTPUT;
 
-				/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+				/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 				(*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len);
@@ -963,5 +927,5 @@
 
 
-				/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+				/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 				cep->snd_tskid = TA_NULL;
 				cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -975,5 +939,5 @@
 
 /*
- *  tcptsk_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡éæ¾
+ *  tcptsk_free_swbufq -- 送信ウィンドバッファ開放
  */
 
@@ -982,23 +946,22 @@
 {
 	/*
-	 *  åä¿¡ç¢ºèªãå®äºãããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããã®
-	 *  åºåãå®äºããã¨ãã¯ãéä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ãè§£æ¾ããã
-	 */
-
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸­ãµã¤ãºããªã»ããããã*/
+	 *  受信確認が完了し、ネットワークインタフェースからの
+	 *  出力も完了したときは、送信ウィンドバッファキューを解放する。
+	 */
+
+	/* 送信ウィンドバッファの使用中サイズをリセットする。*/
 	cep->swbuf_count = 0;
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+	/* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
 	syscall(rel_net_buf(cep->swbufq));
 	cep->swbufq = NULL;
 
-	/* ãã©ã°ãç©ºãã«è¨­å®ããã*/
+	/* フラグを空きに設定する。*/
 	cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_FREE;
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããã§ãããã¨ãç¥ãããã*/
+	/* 送信ウィンドバッファに空きができたことを知らせる。*/
 	syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãå¾
-ã¡ã®ã¨ãã¯ãTCP åºåã¿ã¹ã¯ãèµ·åããã*/
+	/* 送信ウィンドバッファの空き待ちのときは、TCP 出力タスクを起動する。*/
 	if ((cep->flags & TCP_CEP_FLG_WBCS_NBUF_REQ) != 0) {
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1009,5 +972,5 @@
 
 /*
- *  TCP åºåã¿ã¹ã¯
+ *  TCP 出力タスク
  */
 
@@ -1028,5 +991,5 @@
 #ifdef _IP6_CFG
 
-	/* IPv6 ã®ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨­å®ãå®è¡ããã*/
+	/* IPv6 のステートレス・アドレス自動設定を実行する。*/
 	in6_if_up(IF_GET_IFNET());
 
@@ -1035,6 +998,5 @@
 	while (true) {
 
-		/* åºåããã¹ããããã¾ã§å¾
-ã¤ã*/
+		/* 出力がポストされるまで待つ。*/
 		syscall(wai_sem(SEM_TCP_POST_OUTPUT));
 
@@ -1061,6 +1023,6 @@
 
 			/*
-			 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããéä¿¡ãçµãã£ã¦ããªãã¨ãã¯ã
-			 *  éä¿¡ãäºç´ããã
+			 *  ネットワークインタフェースから送信が終わっていないときは、
+			 *  送信を予約する。
 			 */
 			if (cep->flags & TCP_CEP_FLG_POST_OUTPUT &&
@@ -1077,7 +1039,6 @@
 
 			/*
-			 *  éä¿¡äºç´ä¸­ã«ããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããéä¿¡ãçµäºãããã
-			 *  éä¿¡ãéå§ããããã ããå®å
-¨ã«éä¿¡ãçµäºããã¨ãã¯ä½ãããªãã
+			 *  送信予約中に、ネットワークインタフェースから送信が終了したら、
+			 *  送信を開始する。ただし、完全に送信が終了したときは何もしない。
 			 */
 			if (cep->flags & TCP_CEP_FLG_RESERVE_OUTPUT) {
@@ -1102,8 +1063,8 @@
 
 					/*
-					 *  tcp_con_cep ã®ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ã
-					 *  æªå²å½ã®ã®å ´åã¯ããã¼ãçªå·ãå²ãå½ã¦ãã
-					 *  p_myaddr ã NADR (-1) ãã
-					 *  èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã
+					 *  tcp_con_cep のノンブロッキングコールで、
+					 *  未割当のの場合は、ポート番号を割り当てる。
+					 *  p_myaddr が NADR (-1) か、
+					 *  自ポート番号が TCP_PORTANY なら、自動で割り当てる。
 					 */
 					if (cep->p_myaddr == NADR || cep->p_myaddr->portno == TCP_PORTANY)
@@ -1120,5 +1081,5 @@
 							syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
 
-						/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+						/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 						cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
 						cep->snd_tskid = TA_NULL;
@@ -1132,5 +1093,5 @@
 
 				if (cep->flags & TCP_CEP_FLG_CLOSE_AFTER_OUTPUT) {
-					/* ã³ãã¯ã·ã§ã³ãéããã*/
+					/* コネクションを閉じる。*/
 					tcp_close(cep);
 					cep->flags &= ~TCP_CEP_FLG_CLOSE_AFTER_OUTPUT;
@@ -1138,6 +1099,5 @@
 
 				if (cep->flags & TCP_CEP_FLG_RESTORE_NEXT_OUTPUT) {
-					/* snd_nxt ãå
-ã«æ»ãã*/
+					/* snd_nxt を元に戻す。*/
 					if (SEQ_GT(cep->snd_old_nxt, cep->snd_nxt))
 						cep->snd_nxt = cep->snd_old_nxt;
@@ -1152,5 +1112,5 @@
 			} while (ix != last_ix);
 
-		/* æ¬¡åã¯ãå¦çããéä¿¡ç«¯ç¹ãå¾åãã«ããã*/
+		/* 次回は、処理した通信端点を後回しにする。*/
 		last_ix = sel_ix;
 		}
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_seq.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_seq.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_seq.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,5 +72,5 @@
 
 /*
- *  SEQ ã¨ ACK çªå·ã¯ã32 ãããç¬¦å·ä»æ´æ°ã§æ¯è¼ããã
+ *  SEQ と ACK 番号は、32 ビット符号付整数で比較する。
  */
 
@@ -93,5 +81,5 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -99,16 +87,15 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
-extern T_TCP_SEQ tcp_iss;		/* TCP ã® SEQ ã®åæå¤ */
+extern T_TCP_SEQ tcp_iss;		/* TCP の SEQ の初期値 */
 
 /*
- *  ã¤ã³ã©ã¤ã³é¢æ°
+ *  インライン関数
  */
 
 /*
- *  init_receive_seq -- åä¿¡ SEQ çªå·ãåæåããã
+ *  init_receive_seq -- 受信 SEQ 番号を初期化する。
  */
 
@@ -120,5 +107,5 @@
 
 /*
- *  init_send_seq -- éä¿¡ SEQ çªå·ãåæåããã
+ *  init_send_seq -- 送信 SEQ 番号を初期化する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -129,11 +117,10 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-/*
- *  TCP ã® SEQ ã®åæå¤ããã­ã°ã©ã ãèµ·åãã¦ãæåã« TCP ã»ã°ã¡ã³ãã
- *  éåä¿¡ããã¨ãã«ãget_tim() ã«ããåæåããã
+ *  全域変数
+ */
+
+/*
+ *  TCP の SEQ の初期値、プログラムが起動して、最初に TCP セグメントを
+ *  送受信するときに、get_tim() により初期化する。
  */
 T_TCP_SEQ tcp_iss = 0;
@@ -142,6 +129,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -151,18 +137,17 @@
 
 /*
- *  å±æå¤æ°
- */
-
-static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO;	/* èªåå²ãå½ã¦çªå·	*/
+ *  局所変数
+ */
+
+static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO;	/* 自動割り当て番号	*/
 
 #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0
 
 /*
- *  ã¿ã¹ã¯ããã® Time Wait ç¶æ
- CEP åé¢æ©è½
- */
-
-/*
- *  å¤æ°
+ *  タスクからの Time Wait 状態 CEP 分離機能
+ */
+
+/*
+ *  変数
  */
 
@@ -170,8 +155,6 @@
 
 /*
- *  tcp_move_twcep -- å¿
-è¦ãªæ
-å ±ã Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã«ç§»ãã¦ã
- *                    æ¨æºã® TCP éä¿¡ç«¯ç¹ãéæ¾ããã
+ *  tcp_move_twcep -- 必要な情報を Time Wait 用 TCP 通信端点に移して、
+ *                    標準の TCP 通信端点を開放する。
  */
 
@@ -181,13 +164,11 @@
 	T_TCP_TWCEP*	twcep;
 
-	/* ç©ºãã® Time Wait ç¨ TCP éä¿¡ç«¯ç¹ãæ¢ç´¢ããã*/
+	/* 空きの Time Wait 用 TCP 通信端点を探索する。*/
 	for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) {
 		if (twcep->fsm_state != TCP_FSM_TIME_WAIT) {
 
 			/*
-			 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã
-			 *  å¿
-è¦ãªæ
-å ±ã Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã«ç§»ãã
+			 *  通信端点をロックし、
+			 *  必要な情報を Time Wait 用 TCP 通信端点に移す。
 			 */
 			syscall(wai_sem(cep->semid_lock));
@@ -202,8 +183,8 @@
 			twcep->timer_2msl	= cep->timer[TCP_TIM_2MSL];
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 
-			/* æ¨æº TCP éä¿¡ç«¯ç¹ãéæ¾ããã*/
+			/* 標準 TCP 通信端点を開放する。*/
 			tcp_close(cep);
 
@@ -214,5 +195,5 @@
 
 /*
- *  tcp_find_twcep -- ãã¼ãçªå·ãã Time Wait ç¨ TCP éä¿¡ç«¯ç¹ãå¾ãã
+ *  tcp_find_twcep -- ポート番号から Time Wait 用 TCP 通信端点を得る。
  */
 
@@ -226,7 +207,6 @@
 	
 	/*
-	 *  ç¶æ
-ã TIME WAIT ã§ã
-	 *  IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ããéä¿¡ç«¯ç¹ãæ¢ç´¢ããã
+	 *  状態が TIME WAIT で、
+	 *  IP アドレスとポート番号が一致する通信端点を探索する。
 	 */
 	for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) {
@@ -245,5 +225,5 @@
 
 /*
- *  tcp_find_cep -- ãã¼ãçªå·ãã TCP éä¿¡ç«¯ç¹ãå¾ãã
+ *  tcp_find_cep -- ポート番号から TCP 通信端点を得る。
  */
 
@@ -257,7 +237,6 @@
 	
 	/*
-	 *  ç¶æ
-ã SYN éä¿¡æ¸ã¿ä»¥å¾ã¯ã
-	 *  IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ãã TCP éä¿¡ç«¯ç¹ãæ¢ç´¢ããã
+	 *  状態が SYN 送信済み以後は、
+	 *  IP アドレスとポート番号が一致する TCP 通信端点を探索する。
 	 */
 	for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) {
@@ -270,6 +249,5 @@
 		}
 
-	/* IPv4 ã§ååãªã¼ãã³ä¸­ã® TCP éä¿¡ç«¯ç¹ãå
-ã«æ¢ç´¢ããã*/	
+	/* IPv4 で受動オープン中の TCP 通信端点を先に探索する。*/	
 	for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) {
 		if ((cep->flags & TCP_CEP_FLG_IPV4)                   &&
@@ -281,5 +259,5 @@
 		}
 
-	/* ååãªã¼ãã³ä¸­ã® TCP éä¿¡ç«¯ç¹ãæ¢ç´¢ããã*/	
+	/* 受動オープン中の TCP 通信端点を探索する。*/	
 	for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) {
 
@@ -327,5 +305,5 @@
 
 /*
- *  tcp_is_addr_accept -- åä¿¡å¯è½ãª IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ã§ãããã¨ãç¢ºèªããã
+ *  tcp_is_addr_accept -- 受信可能な IP アドレスとポート番号であることを確認する。
  */
 
@@ -340,9 +318,8 @@
 
 	/*
-	 *  æ¬¡ã®ã¨ãã¯ç ´æ£ããã
-	 *    ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã
-	 *      ãã ããéä¿¡å
- IP ã¢ãã¬ã¹ãã­ã¼ã«ã«ã«ã¼ãããã¯ãªãè¯ãã
-	 *    ã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹
+	 *  次のときは破棄する。
+	 *    ・ポート番号が同一で、送受信 IP アドレス が同一。
+	 *      ただし、送信元 IP アドレスがローカルループバックなら良い。
+	 *    ・マルチキャストアドレス
 	 */
 
@@ -354,7 +331,7 @@
 
 	/*
-	 *  æ¬¡ã®ã¨ãã¯ãåä¿¡å¯è½ã§ã¯ãªãã
-	 *    ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã
-	 *    ã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹
+	 *  次のときは、受信可能ではない。
+	 *    ・ポート番号が同一で、送受信 IP アドレス が同一。
+	 *    ・マルチキャストアドレス
 	 */
 	if (tcph->dport == tcph->sport && IN_ARE_HDR_ADDR_EQUAL(input))
@@ -370,11 +347,9 @@
 
 /*
- *  tcp_free_reassq -- åä¿¡åæ§æã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+ *  tcp_free_reassq -- 受信再構成キューのネットワークバッファを解放する。
  *
- *    æ³¨æ:
- *      å¿
-è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãéä¿¡ç«¯ç¹ãã­ãã¯ãã
- *      æ»ã£ãå¾ãè§£é¤ããå¿
-è¦ãããã
+ *    注意:
+ *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
+ *      戻った後、解除する必要がある。
  */
 
@@ -393,5 +368,5 @@
 
 /*
- *  tcp_alloc_auto_port -- èªåå²ãå½ã¦ãã¼ãçªå·ãè¨­å®ããã
+ *  tcp_alloc_auto_port -- 自動割り当てポート番号を設定する。
  */
 
@@ -480,5 +455,5 @@
 
 /*
- *  tcp_alloc_port -- æå®ããããã¼ãçªå·ãè¨­å®ããã
+ *  tcp_alloc_port -- 指定されたポート番号を設定する。
  */
 
@@ -500,5 +475,5 @@
 
 /*
- *  tcp_init -- TCP ã¢ã¸ã¥ã¼ã«ã®åæå
+ *  tcp_init -- TCP モジュールの初期化
  */
 
@@ -516,5 +491,5 @@
 
 /*
- * tcp_init_iss ã·ã¼ã±ã³ã¹çªå·ãåæåããã
+ * tcp_init_iss シーケンス番号を初期化する。
  */
 
@@ -530,5 +505,5 @@
 
 /*
- *  tcp_close -- ã³ãã¯ã·ã§ã³ãéæ¾ããã
+ *  tcp_close -- コネクションを開放する。
  */
 
@@ -536,10 +511,10 @@
 tcp_close (T_TCP_CEP *cep)
 {
-	/* ã¿ã¤ãã¼ãåæ­¢ããã*/
+	/* タイマーを停止する。*/
 	tcp_cancel_timers(cep);
 
 	/* 
-	 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã
-	 *  åä¿¡åæ§æã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+	 *  通信端点をロックし、
+	 *  受信再構成キューのネットワークバッファを解放する。
 	 */
 	syscall(wai_sem(cep->semid_lock));
@@ -547,13 +522,12 @@
 	syscall(sig_sem(cep->semid_lock));
 
-	/* ç¶æ
-ãæªä½¿ç¨ã«ããã*/
+	/* 状態を未使用にする。*/
 	cep->fsm_state = TCP_FSM_CLOSED;
 
 	/*
-	 * ä»¥ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã
-	 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½
-	 * ã»åçãªéä¿¡ç«¯ç¹ã®çæã»åé¤æ©è½
-	 * ã»éä¿¡ç«¯ç¹ã®ãããã¯ã¼ã¯å±¤ãã­ãã³ã«
+	 * 以下に関係しないフラグをクリアーする。
+	 * ・送受信ウィンドバッファの省コピー機能
+	 * ・動的な通信端点の生成・削除機能
+	 * ・通信端点のネットワーク層プロトコル
 	 */
 	cep->flags &= TCP_CEP_FLG_NOT_CLEAR;
@@ -562,5 +536,5 @@
 
 	if (cep->snd_nblk_tfn != TFN_TCP_UNDEF || cep->rcv_nblk_tfn != TFN_TCP_UNDEF) {
-		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		/* ノンブロッキングコール */
 
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
@@ -575,5 +549,5 @@
 
 				case TFN_TCP_ACP_CEP:
-					/* TCP éä¿¡ç«¯ç¹ããTCP åä»å£ãè§£æ¾ããã*/
+					/* TCP 通信端点からTCP 受付口を解放する。*/
 					cep->rep = NULL;
 
@@ -587,8 +561,8 @@
 				case TFN_TCP_RCV_BUF:
 
-					/* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/
+					/* 受信ウィンドバッファの空アドレスを獲得する。*/
 					len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf);
 
-					/* ç°å¸¸åæ­ç­ã®ã¨ã©ã¼ãè¨­å®ããã*/
+					/* 異常切断等のエラーを設定する。*/
 					if (cep->error == E_TMOUT)
 						len = E_CLS;
@@ -601,8 +575,8 @@
 				case TFN_TCP_RCV_DAT:
 
-					/* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/
+					/* 受信ウィンドバッファからデータを取り出す。*/
 					len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len);
 
-					/* ç°å¸¸åæ­ç­ã®ã¨ã©ã¼ãè¨­å®ããã*/
+					/* 異常切断等のエラーを設定する。*/
 					if (cep->error == E_TMOUT)
 						len = E_CLS;
@@ -626,5 +600,5 @@
 					}
 
-				/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+				/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 				cep->rcv_tskid = TA_NULL;
 				cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
@@ -636,5 +610,5 @@
 
 				case TFN_TCP_CON_CEP:
-					/* TCP éä¿¡ç«¯ç¹ãã TCP åä»å£ãè§£æ¾ããã*/
+					/* TCP 通信端点から TCP 受付口を解放する。*/
 					cep->rep = NULL;
 
@@ -659,5 +633,5 @@
 					}
 
-				/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+				/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 				cep->snd_tskid = TA_NULL;
 				cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -678,5 +652,5 @@
 				case TFN_TCP_ACP_CEP:
 
-					/* TCP éä¿¡ç«¯ç¹ããTCP åä»å£ãè§£æ¾ããã*/
+					/* TCP 通信端点からTCP 受付口を解放する。*/
 					cep->rep = NULL;
 
@@ -685,5 +659,5 @@
 #endif
 
-					/* æ¥ç¶ã¨ã©ã¼ãè¨­å®ããã*/
+					/* 接続エラーを設定する。*/
 					len      = E_CLS;
 					(*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)&len);
@@ -692,8 +666,8 @@
 				case TFN_TCP_RCV_BUF:
 
-					/* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/
+					/* 受信ウィンドバッファの空アドレスを獲得する。*/
 					len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf);
 
-					/* ç°å¸¸åæ­ç­ã®ã¨ã©ã¼ãè¨­å®ããã*/
+					/* 異常切断等のエラーを設定する。*/
 					if (cep->error == E_TMOUT)
 						len = E_CLS;
@@ -706,8 +680,8 @@
 				case TFN_TCP_RCV_DAT:
 
-					/* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/
+					/* 受信ウィンドバッファからデータを取り出す。*/
 					len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len);
 
-					/* ç°å¸¸åæ­ç­ã®ã¨ã©ã¼ãè¨­å®ããã*/
+					/* 異常切断等のエラーを設定する。*/
 					if (cep->error == E_TMOUT)
 						len = E_CLS;
@@ -731,5 +705,5 @@
 					}
 
-				/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+				/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 				cep->rcv_tskid = TA_NULL;
 				cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
@@ -743,5 +717,5 @@
 				case TFN_TCP_CON_CEP:
 
-					/* TCP éä¿¡ç«¯ç¹ããTCP åä»å£ãè§£æ¾ããã*/
+					/* TCP 通信端点からTCP 受付口を解放する。*/
 					cep->rep = NULL;
 
@@ -750,5 +724,5 @@
 #endif
 
-					/* æ¥ç¶ã¨ã©ã¼ãè¨­å®ããã*/
+					/* 接続エラーを設定する。*/
 					len      = E_CLS;
 					(*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)&len);
@@ -769,5 +743,5 @@
 					}
 
-				/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+				/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 				cep->snd_tskid = TA_NULL;
 				cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -779,6 +753,6 @@
 
 		/* 
-		 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã
-		 *  éåä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+		 *  通信端点をロックし、
+		 *  送受信ウィンドバッファキューのネットワークバッファを解放する。
 		 */
 		syscall(wai_sem(cep->semid_lock));
@@ -787,18 +761,18 @@
 		syscall(sig_sem(cep->semid_lock));
 
-		/* æªä½¿ç¨ã«ãªã£ããã¨ãç¥ãããã*/
+		/* 未使用になったことを知らせる。*/
 		syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED));
 		}
-	else {	/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	else {	/* 非ノンブロッキングコール */
 
 #endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-		/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+		/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 		cep->snd_tskid = cep->rcv_tskid = TA_NULL;
 		cep->snd_tfn   = cep->rcv_tfn   = TFN_TCP_UNDEF;
 
 		/* 
-		 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã
-		 *  éåä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+		 *  通信端点をロックし、
+		 *  送受信ウィンドバッファキューのネットワークバッファを解放する。
 		 */
 		syscall(wai_sem(cep->semid_lock));
@@ -807,11 +781,10 @@
 		syscall(sig_sem(cep->semid_lock));
 
-		/* æªä½¿ç¨ã«ãªã£ããã¨ãç¥ãããã*/
+		/* 未使用になったことを知らせる。*/
 		syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED));
 
 		/*
-		 * å
-¥åºåã¿ã¹ã¯ãèµ·åºãã¦ã
-		 * éåä¿¡ä¸å¯ã«ãªã£ããã¨ãç¥ãããã
+		 * 入出力タスクを起床して、
+		 * 送受信不可になったことを知らせる。
 		 */
 		syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
@@ -828,5 +801,5 @@
 
 /*
- *  tcp_drop -- TCP æ¥ç¶ãç ´æ£ããã
+ *  tcp_drop -- TCP 接続を破棄する。
  */
 
@@ -846,5 +819,5 @@
 		cep->fsm_state = TCP_FSM_CLOSED;
 
-		/* éä¿¡ã¨ãéä¿¡å¾ã³ãã¯ã·ã§ã³ã®åæ­ãæç¤ºããã*/
+		/* 送信と、送信後コネクションの切断を指示する。*/
 		cep->flags |=  TCP_CEP_FLG_POST_OUTPUT | TCP_CEP_FLG_CLOSE_AFTER_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -857,5 +830,5 @@
 
 /*
- *  tcp_respond -- TCP ã®åä¸ã¡ãã»ã¼ã¸ãéä¿¡ããã
+ *  tcp_respond -- TCP の単一メッセージを送信する。
  */
 
@@ -872,7 +845,6 @@
 
 	/*
-	 *  output ã NULL ã§ãªããã°ãããã¯å
-¥åããã»ã°ã¡ã³ãã®
-	 *  net_buf ã§ããã®ã¾ã¾åå©ç¨ããã
+	 *  output が NULL でなければ、これは入力したセグメントの
+	 *  net_buf で、そのまま再利用する。
 	 */
 	if (output != NULL) {
@@ -880,6 +852,6 @@
 
 		/*
-		 * IPv4 ã§ã¯ãIP ãããã®ãªãã·ã§ã³ãåé¤ããã
-		 * IPv6 ã§ã¯ãæ¡å¼µããããåé¤ããã
+		 * IPv4 では、IP ヘッダのオプションを削除する。
+		 * IPv6 では、拡張ヘッダを削除する。
 		 */
 		if (IP_REMOVE_OPTIONS(output) != E_OK) {
@@ -892,25 +864,24 @@
 #if defined(_IP6_CFG)
 
-		/* ãã©ããã¯ã¯ã©ã¹ã¨ãã­ã¼ã©ãã«ãã¯ãªã¢ããã*/
+		/* トラヒッククラスとフローラベルをクリアする。*/
 		SET_IP_CF(output, 0);
 
 #endif	/* of #if defined(_IP6_CFG) */
 
-		/* TCP SDU é·ã 0 ã«ããã*/
+		/* TCP SDU 長を 0 にする。*/
 		SET_IP_SDU_SIZE(output, TCP_HDR_SIZE);
 
 		tcph = GET_TCP_HDR(output, IF_IP_TCP_HDR_OFFSET(output));
 
-		/* ãã¼ãçªå·ãäº¤æããã*/
+		/* ポート番号を交換する。*/
 		portno = tcph->sport;
 		tcph->sport = tcph->dport;
 		tcph->dport = portno;
 
-		/* TCP ãããã«æ
-å ±ãè¨­å®ããã*/
+		/* TCP ヘッダに情報を設定する。*/
 		tcph->doff = TCP_MAKE_DATA_OFF(TCP_HDR_SIZE);
 		}
 	
-	/* cep ã NULL ã§ããã°ãä½ãããªãã§çµäºããã*/
+	/* cep が NULL であれば、何もしないで終了する。*/
 	else if (cep == NULL)
 		return;
@@ -931,5 +902,5 @@
 
 	/*
-	 *  ãã§ãã¯ãµã ãè¨­å®ããã
+	 *  チェックサムを設定する。
 	 */
 	hdr_offset = IF_IP_TCP_HDR_OFFSET(output);
@@ -937,5 +908,5 @@
 	                     (uint_t)GET_TCP_HDR_SIZE(output, hdr_offset));
 
-	/* ãããã¯ã¼ã¯ãããã¡é·ãèª¿æ´ããã*/
+	/* ネットワークバッファ長を調整する。*/
 	output->len = (uint16_t)GET_IF_IP_TCP_HDR_SIZE(output, hdr_offset);
 
@@ -946,15 +917,15 @@
 #endif	/* of #ifdef TCP_CFG_TRACE */
 
-	/* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/
+	/* ネットワーク層 (IP) の出力関数を呼び出す。*/
 	IP_OUTPUT(output, TMO_TCP_OUTPUT);
 	}
 #if 0
 /*
- *  tcp_get_segment -- TCP ã»ã°ã¡ã³ããç²å¾ããããããè¨­å®ããã
+ *  tcp_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。
  *
- *    æ»ãå¤	ã¨ã©ã¼ã³ã¼ã
- *    optlen	ãªãã·ã§ã³ãµã¤ãºã4 ãªã¯ãããåä½
- *    maxlen	æå¤§ã»ã°ã¡ã³ããµã¤ãºï¼IF/IP/TCP ããããµã¤ãºãå«ã¾ãªãï¼
- *    len	TCP SDU ãµã¤ãº
+ *    戻り値	エラーコード
+ *    optlen	オプションサイズ、4 オクテット単位
+ *    maxlen	最大セグメントサイズ（IF/IP/TCP ヘッダサイズを含まない）
+ *    len	TCP SDU サイズ
  */
 
@@ -966,5 +937,5 @@
 	ER		error;
 
-	/* IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/
+	/* IP データグラムを獲得する。*/
 	if ((error = IN_GET_DATAGRAM(nbuf,
 	                             (uint_t)(TCP_HDR_SIZE + optlen + len),
@@ -978,9 +949,7 @@
 		}
 
-	/* TCP ãããã«æ
-å ±ãè¨­å®ããã*/
-
-	/* TCP ãããã«æ
-å ±ãè¨­å®ããã*/
+	/* TCP ヘッダに情報を設定する。*/
+
+	/* TCP ヘッダに情報を設定する。*/
 	tcph = GET_TCP_HDR(*nbuf, IF_IP_TCP_HDR_OFFSET(*nbuf));
 	tcph->sport	= htons(cep->myaddr.portno);
@@ -993,10 +962,10 @@
 #endif
 /*
- *  tcpn_get_segment -- TCP ã»ã°ã¡ã³ããç²å¾ããããããè¨­å®ããã
+ *  tcpn_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。
  *
- *    æ»ãå¤	ã¨ã©ã¼ã³ã¼ã
- *    optlen	ãªãã·ã§ã³ãµã¤ãºã4 ãªã¯ãããåä½
- *    maxlen	æå¤§ã»ã°ã¡ã³ããµã¤ãºï¼IF/IP/TCP ããããµã¤ãºãå«ãï¼
- *    len	TCP SDU ãµã¤ãº
+ *    戻り値	エラーコード
+ *    optlen	オプションサイズ、4 オクテット単位
+ *    maxlen	最大セグメントサイズ（IF/IP/TCP ヘッダサイズを含む）
+ *    len	TCP SDU サイズ
  */
 
@@ -1008,5 +977,5 @@
 	ER		error;
 
-	/* IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/
+	/* IP データグラムを獲得する。*/
 	if ((error = IN_GET_DATAGRAM(nbuf,
 	                             (uint_t)(TCP_HDR_SIZE + optlen + len),
@@ -1020,9 +989,7 @@
 		}
 
-	/* TCP ãããã«æ
-å ±ãè¨­å®ããã*/
-
-	/* TCP ãããã«æ
-å ±ãè¨­å®ããã*/
+	/* TCP ヘッダに情報を設定する。*/
+
+	/* TCP ヘッダに情報を設定する。*/
 	tcph = GET_TCP_HDR(*nbuf, IF_IP_TCP_HDR_OFFSET(*nbuf));
 	tcph->sport	= htons(cep->myaddr.portno);
@@ -1035,6 +1002,5 @@
 
 /*
- *  tcp_can_send_more -- éä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã
+ *  tcp_can_send_more -- 送信できるか、通信端点の状態を見る。
  */
 
@@ -1044,6 +1010,5 @@
 	ER	error;
 
-	/* éä¿¡ã§ããããCEP ã® FSM ç¶æ
-ãè¦ãã*/
+	/* 送信できるか、CEP の FSM 状態を見る。*/
 	if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
 		if ((error = cep->error) == E_OK)
@@ -1052,11 +1017,11 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-		/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-		if (tmout == TMO_NBLK) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		/* タイムアウトをチェックする。*/
+		if (tmout == TMO_NBLK) {	/* ノンブロッキングコール */
 
 			if (!IS_PTR_DEFINED(cep->callback))
 				error = E_OBJ;
 			else {
-				/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+				/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 				(*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error);
@@ -1083,6 +1048,6 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-			/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-			if (tmout == TMO_NBLK) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+			/* タイムアウトをチェックする。*/
+			if (tmout == TMO_NBLK) {	/* ノンブロッキングコール */
 				if (!IS_PTR_DEFINED(cep->callback))
 					error = E_OBJ;
@@ -1090,5 +1055,5 @@
 					error = E_OBJ;
 
-					/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+					/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 					(*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error);
@@ -1116,11 +1081,10 @@
 
 /*
- *  tcp_can_recv_more -- åä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã
+ *  tcp_can_recv_more -- 受信できるか、通信端点の状態を見る。
  *
- *  æ³¨æ: æ»ãå¤
+ *  注意: 戻り値
  *
- *	E_OK	åä¿¡å¯è½
- *	E_OBJ	ç¸æããåæ­ãããããã¨ã©ã¼ãçºçããã
+ *	E_OK	受信可能
+ *	E_OBJ	相手から切断されたか、エラーが発生した。
  */
 
@@ -1129,6 +1093,6 @@
 {
 	/*
-	 *  åä¿¡ã§ããããfsm_state ãè¦ããåä¿¡ã§ããªãå ´åã¯
-	 *  é·ã 0ãã¾ãã¯ã¨ã©ã¼ãè¿ãã
+	 *  受信できるか、fsm_state を見る。受信できない場合は
+	 *  長さ 0、またはエラーを返す。
 	 */
 	if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) &&
@@ -1138,11 +1102,11 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-		/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-		if (tmout == TMO_NBLK) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		/* タイムアウトをチェックする。*/
+		if (tmout == TMO_NBLK) {	/* ノンブロッキングコール */
 
 			if (!IS_PTR_DEFINED(cep->callback))
 				*error = E_OBJ;
 			else {
-				/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+				/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 				(*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)*error);
@@ -1157,6 +1121,6 @@
 
 		/*
-		 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã¦ã
-		 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+		 *  通信端点をロックして、
+		 *  受信ウィンドバッファキューのネットワークバッファを解放する。
 		 */
 		syscall(wai_sem(cep->semid_lock));
@@ -1174,6 +1138,6 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-			/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-			if (tmout == TMO_NBLK) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+			/* タイムアウトをチェックする。*/
+			if (tmout == TMO_NBLK) {	/* ノンブロッキングコール */
 				if (!IS_PTR_DEFINED(cep->callback))
 					*error = E_OBJ;
@@ -1181,5 +1145,5 @@
 					*error = E_OBJ;
 
-					/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+					/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 					(*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)*error);
@@ -1206,7 +1170,5 @@
 
 /*
- *  tcp_wait_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå
-¥ãã®ãå¾
-ã¤ã
+ *  tcp_wait_rwbuf -- 受信ウィンドバッファにデータが入るのを待つ。
  */
 
@@ -1218,7 +1180,5 @@
 
 	if (cep->rwbuf_count == 0) {
-		/* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå
-¥åãããã¾ã§å¾
-ã¤ã*/
+		/* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/
 		while (cep->rwbuf_count == 0) {
 			if ((error = twai_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY, TWF_ORW, &flag, tmout)) != E_OK) {
@@ -1228,7 +1188,6 @@
 
 			/*
-			 *  åä¿¡ã§ããããfsm_state ãè¦ããåä¿¡ã§ããªãç¶æ
-ã§ã
-			 *  åä¿¡ã¦ã£ã³ããããã¡ã«æå­ããªãå ´åã¯çµäºããã
+			 *  受信できるか、fsm_state を見る。受信できない状態で、
+			 *  受信ウィンドバッファに文字がない場合は終了する。
 			 */
 			if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) &&
@@ -1236,6 +1195,6 @@
 
 				/*
-				 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã¦ã
-				 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+				 *  通信端点をロックして、
+				 *  受信ウィンドバッファキューのネットワークバッファを解放する。
 				 */
 				syscall(wai_sem(cep->semid_lock));
@@ -1255,5 +1214,5 @@
 
 /*
- *  tcp_move_ra2rw -- åä¿¡åæ§æã­ã¥ã¼ã§åæ§æããã»ã°ã¡ã³ããåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã
+ *  tcp_move_ra2rw -- 受信再構成キューで再構成したセグメントを受信ウィンドバッファに書き込む。
  */
 
@@ -1265,6 +1224,6 @@
 
 	/*
-	 *  åä¿¡ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ã¿ã
-	 *  rcv_nxt ãå®äºãã SEQ ã ãé²ããã
+	 *  受信データを受信ウィンドバッファに書き込み、
+	 *  rcv_nxt を完了した SEQ だけ進める。
 	 */
 	if (TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) {
@@ -1275,11 +1234,11 @@
 				break;
 
-			/* æ¬¡ã®ã»ã°ã¡ã³ãã«é²ãã*/
+			/* 次のセグメントに進む。*/
 			cep->reassq = qhdr->next;
 
-			/* FIN ãã©ã°ã®ã¿æ®ãã*/
+			/* FIN フラグのみ残す。*/
 			flags &= TCP_FLG_FIN;
 
-			/* ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã*/
+			/* データを受信ウィンドバッファに書き込む。*/
 			TCP_WRITE_RWBUF(cep, q, (uint_t)(GET_IP_TCP_Q_HDR_OFFSET(q)));
 			}
@@ -1293,5 +1252,5 @@
 
 /*
- *  tcp_write_raque -- åä¿¡ã»ã°ã¡ã³ããåæ§æãã¦ãåä¿¡åæ§æã­ã¥ã¼ã«ç¹ãã
+ *  tcp_write_raque -- 受信セグメントを再構成して、受信再構成キューに繋ぐ。
  */
 
@@ -1304,11 +1263,11 @@
 	int32_t		len;
 
-	/*  TCP ãããã®ä½ç½®ãä¿å­ããã*/
+	/*  TCP ヘッダの位置を保存する。*/
 	SET_IP_TCP_Q_HDR_OFFSET(input, thoff);
 
 	/*
-	 *  MAX_TCP_REALLOC_SIZE ä»¥ä¸ã®å ´åã¯ãæ°ãã«ãããã¯ã¼ã¯ãããã¡ã
-	 *  å²å½ã¦ã¦ããã¼ã¿ãã³ãã¼ããã
-	 *  ãã®ã¨ããIP ã®ãªãã·ã§ã³ï¼æ¡å¼µãããï¼ã¨ TCP ã®ãªãã·ã§ã³ã¯åé¤ããã
+	 *  MAX_TCP_REALLOC_SIZE 以下の場合は、新たにネットワークバッファを
+	 *  割当てて、データをコピーする。
+	 *  このとき、IP のオプション（拡張ヘッダ）と TCP のオプションは削除する。
 	 */
 	len  = IF_IP_TCP_HDR_SIZE(input) + inqhdr->slen;
@@ -1317,5 +1276,5 @@
 
 		/*
-		 *  ãããã¯ã¼ã¯ãããã¡ãç¢ºä¿ã§ããªãã¨ãã¯å²å½ã¦ãªãã
+		 *  ネットワークバッファが確保できないときは割当てない。
 		 */
 		if (tget_net_buf(&new, (uint_t)len, TMO_TCP_GET_NET_BUF) != E_OK)
@@ -1342,5 +1301,5 @@
 
 	/*
-	 *  ä»åè¿½å ããã»ã°ã¡ã³ãããå(p)ã¨å¾(q)ã®ã»ã°ã¡ã³ããæ¢ãã
+	 *  今回追加するセグメントより前(p)と後(q)のセグメントを探す。
 	 *
 	 *    +-------------------------+
@@ -1365,7 +1324,6 @@
 
 	/*
-	 *  å(p)ã®ã»ã°ã¡ã³ããããã°ãæ¢ã«ãä»åã¨åãã»ã°ã¡ã³ãã
-	 *  ãããã¨ãããããã®å ´åã¯ããã®é¨åã¾ãã¯å
-¨ã¦ãç ´æ£ããã
+	 *  前(p)のセグメントがあれば、既に、今回と同じセグメントが
+	 *  あることもある。その場合は、その部分または全てを破棄する。
 	 *
 	 *    qhdr->seq
@@ -1389,12 +1347,12 @@
 
 			/*
-			 *  len ãæ­£ã§ããã°ãå(p) ã®ã»ã°ã¡ã³ãã¨ä»åã®
-			 *  ã»ã°ã¡ã³ããéãªã£ã¦ããã
+			 *  len が正であれば、前(p) のセグメントと今回の
+			 *  セグメントが重なっている。
 			 */
 			if (len >= inqhdr->slen) {
 
 				/*
-				 *  len ãä»åã®ã»ã°ã¡ã³ãã¨åããªã
-				 *  ã¾ã£ããåãã»ã°ã¡ã³ããªã®ã§ä½ãããªãã
+				 *  len が今回のセグメントと同じなら
+				 *  まったく同じセグメントなので何もしない。
 				 */
 				if (new != NULL) {
@@ -1407,5 +1365,5 @@
 
 			/*
-			 *  è¿½å ããã»ã°ã¡ã³ãã® SDU ã len ååã«è©°ããã
+			 *  追加するセグメントの SDU を len 分前に詰める。
 			 */
 			inqhdr->seq  += len;
@@ -1416,6 +1374,6 @@
 
 	/*
-	 *  ã­ã¥ã¼ã«ã¤ãªãåã«ãæ°ãããããã¯ã¼ã¯ãããã¡ã«ãã¼ã¿ãç§»ãã
-	 *  TCP ã®ãªãã·ã§ã³ã¯åé¤ããã
+	 *  キューにつなぐ前に、新しいネットワークバッファにデータを移す。
+	 *  TCP のオプションは削除する。
 	 */
 	if (new != NULL) {
@@ -1430,5 +1388,5 @@
 
 	/*
-	 *  éãªãå¾(q)ã®ã»ã°ã¡ã³ããèª¿æ´ããã
+	 *  重なる後(q)のセグメントを調整する。
 	 *
 	 *    inqhdr->seq
@@ -1450,10 +1408,10 @@
 		len = inqhdr->seq + inqhdr->slen - qhdr->seq;
 		if (len <= 0)
-			/* len ãè² ãªãéãªã£ã¦ããªãã*/
+			/* len が負なら重なっていない。*/
 			break;
 		else if (len < qhdr->slen) {
 
 			/*
-			 *  å¾ãã§éãªã£ã¦ããã»ã°ã¡ã³ãã® SDU ã len ååã«è©°ããã
+			 *  後ろで重なっているセグメントの SDU を len 分前に詰める。
 			 *
 			 *    inqhdr->seq
@@ -1499,5 +1457,5 @@
 
 /*
- *  tcp_rexmt_val -- åéã¿ã¤ã ã¢ã¦ãå¤ãè¿ãã
+ *  tcp_rexmt_val -- 再送タイムアウト値を返す。
  */
 
@@ -1515,5 +1473,5 @@
 
 /*
- *  tcp_init_cep -- éä¿¡ç«¯ç¹ãåæåããã
+ *  tcp_init_cep -- 通信端点を初期化する。
  */
 
@@ -1524,8 +1482,7 @@
 #ifdef TCP_CFG_RWBUF_CSAVE
 	/*
-	 * åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã«ããå ´åã
-	 * åä¿¡ã¦ã£ã³ããããã¡ãå
-¨ã¦è§£æ¾ãããªããã¨ãããã®ã§ã
-	 * ããã§è§£æ¾ããã
+	 * 受信ウィンドバッファの省コピー機能を有効にした場合、
+	 * 受信ウィンドバッファが全て解放されないことがあるので、
+	 * ここで解放する。
 	 */
 	if (cep->rwbufq != NULL) {
@@ -1542,24 +1499,24 @@
 	cep->rbuf_rptr	= cep->rbuf_wptr = cep->rbuf;
 
-	cep->maxseg	= DEF_TCP_SND_SEG;		/* éä¿¡æå¤§ã»ã°ã¡ã³ããµã¤ãº		*/
-	cep->srtt	= TCP_TVAL_SRTT_BASE;		/* æ»ãããªç§»åå¹³å			*/
+	cep->maxseg	= DEF_TCP_SND_SEG;		/* 送信最大セグメントサイズ		*/
+	cep->srtt	= TCP_TVAL_SRTT_BASE;		/* 滑らかな移動平均			*/
 	cep->rttvar	= ((TCP_TVAL_RTO_BASE - TCP_TVAL_SRTT_BASE) << TCP_RTTVAR_SHIFT) / 4;
-							/* æ»ãããªåæ£				*/
-	cep->rxtcur	= TCP_TVAL_RTO_BASE;		/* ç¾å¨ã®åéå¤				*/
-	cep->snd_cwnd	=  MAX_TCP_WIN_SIZE;		/* è¼»è¼³ã¦ã£ã³ããµã¤ãº			*/
-	cep->snd_ssthresh= MAX_TCP_WIN_SIZE;		/* è¼»è¼³ã¦ã£ã³ããµã¤ãº(snd_cwnd)ã®	å¶éå¤	*/
+							/* 滑らかな分散				*/
+	cep->rxtcur	= TCP_TVAL_RTO_BASE;		/* 現在の再送値				*/
+	cep->snd_cwnd	=  MAX_TCP_WIN_SIZE;		/* 輻輳ウィンドサイズ			*/
+	cep->snd_ssthresh= MAX_TCP_WIN_SIZE;		/* 輻輳ウィンドサイズ(snd_cwnd)の	制限値	*/
 
 	/*
-	 * ä»¥ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã
-	 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½
-	 * ã»åçãªéä¿¡ç«¯ç¹ã®çæã»åé¤æ©è½
-	 * ã»éä¿¡ç«¯ç¹ã®ãããã¯ã¼ã¯å±¤ãã­ãã³ã«
+	 * 以下に関係しないフラグをクリアーする。
+	 * ・送受信ウィンドバッファの省コピー機能
+	 * ・動的な通信端点の生成・削除機能
+	 * ・通信端点のネットワーク層プロトコル
 	 */
 	cep->flags &= TCP_CEP_FLG_NOT_CLEAR;
 
-	/* ã»ããã©ãåæåããã*/
+	/* セマフォを初期化する。*/
 	sig_sem(cep->semid_lock);
 
-	/* ãã©ã°ãåæåããã*/
+	/* フラグを初期化する。*/
 	syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
 	syscall(clr_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY));
@@ -1567,5 +1524,5 @@
 
 /*
- *  tcp_notify -- ICMP ã¨ã©ã¼ã®å¦ç
+ *  tcp_notify -- ICMP エラーの処理
  */
 
@@ -1578,6 +1535,6 @@
 
 		/*
-		 *  ã³ãã¯ã·ã§ã³éè¨­æ¸ã§ããã¹ãå°éä¸è½ã¨ã©ã¼ã®å ´åã¯ã
-		 *  åéã«ããå¦çããã
+		 *  コネクション開設済で、ホスト到達不能エラーの場合は、
+		 *  再送により処理する。
 		 */
 		if (cep->fsm_state == TCP_FSM_ESTABLISHED &&
@@ -1586,8 +1543,6 @@
 
 		/*
-		 *  ã³ãã¯ã·ã§ã³éè¨­ä¸­ãåãã¨ã©ã¼ãä½åº¦ãåä¿¡ããå ´åã¯ã
-		 *  å¾
-ã¡ç¶æ
-ãè§£é¤ããå¯¾å¿ããé¢æ°ã«ã¨ã©ã¼ãè¿ãããã
+		 *  コネクション開設中、同じエラーを何度か受信した場合は、
+		 *  待ち状態を解除し、対応する関数にエラーを返させる。
 		 */
 		if (cep->fsm_state < TCP_FSM_ESTABLISHED && cep->rxtshift > 3 && cep->net_error != E_OK) {
@@ -1598,5 +1553,5 @@
 			cep->net_error = error;
 
-			/* éä¿¡ãæç¤ºããã*/
+			/* 送信を指示する。*/
 			cep->flags |=  TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1606,5 +1561,5 @@
 
 /*
- *  tcp_lock_cep -- TCP éä¿¡ç«¯ç¹ãã­ãã¯ããã
+ *  tcp_lock_cep -- TCP 通信端点をロックする。
  */
 
@@ -1617,15 +1572,15 @@
 	*p_cep = NULL;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* TCP éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* TCP 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	/* TCP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* TCP 通信端点をチェックする。*/
 	if (!VALID_TCP_CEP(cep)) {
 		syscall(sig_sem(cep->semid_lock));
@@ -1634,6 +1589,6 @@
 
 	/*
-	 *  API æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if (IS_TFN_TCP_RCV(tfn)) {
@@ -1657,5 +1612,5 @@
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -1667,5 +1622,5 @@
 
 /*
- *  ãã¬ã¼ã¹åºåã«ç¨ããã·ãªã¢ã«ãã¼ãçªå·
+ *  トレース出力に用いるシリアルポート番号
  */
 
@@ -1675,6 +1630,5 @@
 
 /*
- *  ã³ãã¯ã·ã§ã³ã®ç¶æ
-
+ *  コネクションの状態
  */
 
@@ -1694,5 +1648,5 @@
 
 /*
- *  trace_putchar -- ã·ãªã¢ã«ãã¼ãã¸ã®æå­åºå
+ *  trace_putchar -- シリアルポートへの文字出力
  */
 
@@ -1705,9 +1659,9 @@
 
 /*
- *  ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æå­ååºåã©ã¤ãã©ãª
- */
-
-/*
- *  æ°å¤å¤æã®ããã®å¤æè¡¨
+ *  シリアルポートへの書式付文字列出力ライブラリ
+ */
+
+/*
+ *  数値変換のための変換表
  */
 
@@ -1716,5 +1670,5 @@
 
 /*
- *  convert -- trace_printf ã®æ°å¤å¤æ
+ *  convert -- trace_printf の数値変換
  */
 
@@ -1753,5 +1707,5 @@
 
 /*
- *  trace_printf -- ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æå­ååºå
+ *  trace_printf -- シリアルポートへの書式付文字列出力
  */
 
@@ -1766,5 +1720,5 @@
 	va_start(ap, fmt);
 	while ((ch = *fmt ++) != '\0') {
-		if (ch != '%') {		/* æ¸å¼æå®ä»¥å¤ */
+		if (ch != '%') {		/* 書式指定以外 */
 			trace_putchar(portid, (char)ch);
 			continue;
@@ -1773,16 +1727,15 @@
 		width = longflag = 0;
 		padchar = ' ';
-		if ((ch = *fmt ++) == '0') {	/* ä¸ä½æ¡ã® 0 */
+		if ((ch = *fmt ++) == '0') {	/* 上位桁の 0 */
 			padchar = '0';
 			ch = *fmt ++;
 			}
 
-		while ('0' <= ch && ch <= '9') {	/* åºåå¹
- */
+		while ('0' <= ch && ch <= '9') {	/* 出力幅 */
 			width = width * 10 + ch - '0';
 			ch = *fmt ++;
 			}
 
-		while (ch == 'l') {		/* long (long) ã®æå® */
+		while (ch == 'l') {		/* long (long) の指定 */
 			longflag ++;
 			ch = *fmt ++;
@@ -1845,5 +1798,5 @@
 
 /*
- *  TCP ãã©ã°æå­å
+ *  TCP フラグ文字列
  */
 
@@ -1864,5 +1817,5 @@
 
 /*
- *  éä¿¡ TCP ãããã®ãã¬ã¼ã¹åºå
+ *  送信 TCP ヘッダのトレース出力
  */
 
@@ -1925,8 +1878,7 @@
 
 /*
- *  åä¿¡ TCP ãããã®ãã¬ã¼ã¹åºå
+ *  受信 TCP ヘッダのトレース出力
  *
- *    æ³¨æ: TCP ãããå
-ã¯ããã§ã«ãã¹ããã¤ããªã¼ã
+ *    注意: TCP ヘッダ内は、すでにホストバイトオーダ
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -134,12 +122,12 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ãªå ´å
- *  ãã ããéä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ï¼cep->sbufï¼ã®å¤ã«ããã
- *  TCP éä¿¡ç«¯ç¹æ¯ã«éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãä½¿ç¨ãããã
- *  ä½¿ç¨ããªãããåãæ¿ããã
- */
-
-/*
- *  tcp_drop_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããï¼é¸æï¼ã
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合
+ *  ただし、通信端点の送信ウィンドバッファ（cep->sbuf）の値により、
+ *  TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、
+ *  使用しないかを切り替える。
+ */
+
+/*
+ *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する（選択）。
  */
 
@@ -154,5 +142,5 @@
 
 /*
- *  tcp_write_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãï¼é¸æï¼ã
+ *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む（選択）。
  */
 
@@ -167,5 +155,5 @@
 
 /*
- *  tcp_read_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèª­ã¿åºãï¼é¸æï¼ã
+ *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す（選択）。
  */
 
@@ -178,6 +166,5 @@
 
 /*
- *  tcp_wait_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã¨ç¸æã®åä¿¡ã¦ã£ã³ããéãã®ãå¾
-ã¤ï¼é¸æï¼ã
+ *  tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ（選択）。
  */
 
@@ -192,5 +179,5 @@
 
 /*
- *  tcp_get_swbuf_addr -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããï¼é¸æï¼ã
+ *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する（選択）。
  */
 
@@ -205,5 +192,5 @@
 
 /*
- *  tcp_send_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããï¼é¸æï¼ã
+ *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする（選択）。
  */
 
@@ -218,5 +205,5 @@
 
 /*
- *  tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®è§£æ¾ãæç¤ºããï¼é¸æï¼ã
+ *  tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する（選択）。
  */
 
@@ -229,5 +216,5 @@
 
 /*
- *  tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæç¤ºããï¼é¸æï¼ã
+ *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する（選択）。
  */
 
@@ -240,5 +227,5 @@
 
 /*
- *  tcp_is_swbuf_full -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããï¼é¸æï¼ã
+ *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする（選択）。
  */
 
@@ -255,5 +242,5 @@
 
 /*
- *  tcp_drop_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããï¼å°ç¨ï¼ã
+ *  tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する（専用）。
  */
 
@@ -262,9 +249,8 @@
 {
 
-	/*éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã*/
+	/*送信ウィンドバッファから指定されたオクテット分削除する。*/
 	cep->swbuf_count -= (uint16_t)len;
 
-	/* éä¿¡æ¸ã¿ã§ãACKå¾
-ã¡ã®æã¯ãACKå®äºã«å¤æ´ããã*/
+	/* 送信済みで、ACK待ちの時は、ACK完了に変更する。*/
 	if (len > 0 && (cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_SENT) {
 		cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED;
@@ -274,5 +260,5 @@
 
 /*
- *  tcp_write_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãï¼å°ç¨ï¼ã
+ *  tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む（専用）。
  */
 
@@ -283,5 +269,5 @@
 	uint_t	hdr_size = IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr);
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -295,11 +281,10 @@
 		 *   <---------------- error --------------->
 		 *              ^
-		 *              net_buf ã§ 4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã
+		 *              net_buf で 4 オクテット境界にアラインされている。
 		 *
-		 *  tcp_output ã¨ ip_output ã§ããã§ãã¯ãµã ãè¨ç®ããã¨ãã
-		 *  n ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã
-		 *  ãããã£ã³ã°ããããã®åãèæ
-®ãã¦éä¿¡ã¦ã£ã³ããããã¡ã®
-		 *  ç©ºããµã¤ãºã 4 ãªã¯ãããå¢çã«èª¿æ´ããã
+		 *  tcp_output と ip_output で、チェックサムを計算するとき、
+		 *  n が 4 オクテット境界になるように SDU の後ろに 0 を
+		 *  パッディングする。その分を考慮して送信ウィンドバッファの
+		 *  空きサイズを 4 オクテット境界に調整する。
 		 */
 		error = (uint_t)(((error - hdr_size) >> 2 << 2) + hdr_size);
@@ -310,5 +295,5 @@
 			len = (uint_t)(error - hdr_size);
 
-		/* éä¿¡ã¦ã¤ã³ããµã¤ãºã«ãããµã¤ãºãèª¿æ´ããã*/
+		/* 送信ウインドサイズによりサイズを調整する。*/
 		if (len > cep->snd_wnd) 
 			len = cep->snd_wnd;
@@ -316,10 +301,9 @@
 			len = cep->snd_cwnd;
 
-		/* ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶
-ããªãããã«ããã*/
+		/* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/
 		if (len > cep->maxseg) 
 			len = cep->maxseg;
 
-		/* ãã¼ã¿ãç§»ãã*/
+		/* データを移す。*/
 		memcpy(cep->sbuf_wptr, (void*)((uint8_t*)data), (size_t)len);
 		cep->sbuf_wptr   += len;
@@ -327,21 +311,21 @@
 		error             = len;
 
-		/* ãããã¯ã¼ã¯ãããã¡é·ã¨ IP ãã¼ã¿ã°ã©ã é·ãè¨­å®ããã*/
+		/* ネットワークバッファ長と IP データグラム長を設定する。*/
 		cep->swbufq->len = (uint16_t)(cep->swbuf_count + hdr_size);
 		SET_IP_SDU_SIZE(cep->swbufq, cep->swbuf_count + TCP_HDR_SIZE);
 
-		/* ãã©ã°ããéä¿¡å¯è½ã«è¨­å®ããã*/
+		/* フラグを、送信可能に設定する。*/
 		cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY;
 		}
 
-	else {	/* éä¿¡ã¦ã¤ã³ããããã¡ãä¸æ­£ */
+	else {	/* 送信ウインドバッファが不正 */
 		syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.",
 		                    GET_TCP_CEPID(cep), error, hdr_size);
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
 		tcp_free_swbufq_cs(cep);
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -350,6 +334,5 @@
 
 /*
- *  tcp_wait_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã¨ç¸æã®åä¿¡ã¦ã£ã³ããéãã®ãå¾
-ã¤ï¼å°ç¨ï¼ã
+ *  tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ（専用）。
  */
 
@@ -362,15 +345,13 @@
 	int_t	win;
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ãå²å½ã¦æ¸ã¿ã§ãç©ºããããã°çµäºããã*/
+	/* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/
 	if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY &&
 	    (cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) < net_buf_siz(cep->swbufq))
 		return E_OK;
 
-	/* éä¿¡ä¸­ã§ããã°ãçµäºããã¾ã§å¾
-æ©ããã*/
+	/* 送信中であれば、終了するまで待機する。*/
 	while ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) {
 
-		/* éä¿¡å¾
-ã¡ã®æéã tmout ããæ¸ããã*/
+		/* 送信待ちの時間を tmout から減ずる。*/
 		if (!(tmout == TMO_POL || tmout == TMO_FEVR))
 			syscall(get_tim(&before));
@@ -381,6 +362,5 @@
 		syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY)));
 
-		/* éä¿¡å¾
-ã¡ã®æéã tmout ããæ¸ããã*/
+		/* 送信待ちの時間を tmout から減ずる。*/
 		if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
 			syscall(get_tim(&after));
@@ -391,9 +371,7 @@
 
 		/*
-		 *  éä¿¡ã§ããããCEP ã® FSM ç¶æ
-ãè¦ãã
-		 *  éä¿¡ã¦ã¤ã³ããããã¡ãç©ºãã¾ã§å¾
-ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã
-		 *  ã³ãã¯ã·ã§ã³ãåæ­ããããã¨ãæå³ãã¦ããã
+		 *  送信できるか、CEP の FSM 状態を見る。
+		 *  送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、
+		 *  コネクションが切断されたことを意味している。
 		 */
 		if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state))
@@ -401,13 +379,12 @@
 		}
 
-	/* ç¸æã®åä¿¡ã¦ã£ã³ããéãã¦ããå ´åã¯ãéãã¾ã§å¾
-æ©ããã*/
+	/* 相手の受信ウィンドが閉じている場合は、開くまで待機する。*/
 	while (true) {
 
 		/*
-		 *  snd_wnd:  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº
-		 *  snd_cwnd: è¼»è¼³ã¦ã£ã³ããµã¤ãº
+		 *  snd_wnd:  相手の受信可能ウィンドサイズ
+		 *  snd_cwnd: 輻輳ウィンドサイズ
 		 *
-		 *  win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨­å®ããã
+		 *  win: どちらか小さいウィンドサイズに設定する。
 		 */
 		win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
@@ -415,6 +392,5 @@
 			break;
 
-		/* éãå¾
-ã¡ã®æéã tmout ããæ¸ããã*/
+		/* 開き待ちの時間を tmout から減ずる。*/
 		if (!(tmout == TMO_POL || tmout == TMO_FEVR))
 			syscall(get_tim(&before));
@@ -425,6 +401,5 @@
 		syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY)));
 
-		/* éãå¾
-ã¡ã®æéã tmout ããæ¸ããã*/
+		/* 開き待ちの時間を tmout から減ずる。*/
 		if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
 			syscall(get_tim(&after));
@@ -435,9 +410,7 @@
 
 		/*
-		 *  éä¿¡ã§ããããCEP ã® FSM ç¶æ
-ãè¦ãã
-		 *  éä¿¡ã¦ã¤ã³ããããã¡ãç©ºãã¾ã§å¾
-ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã
-		 *  ã³ãã¯ã·ã§ã³ãåæ­ããããã¨ãæå³ãã¦ããã
+		 *  送信できるか、CEP の FSM 状態を見る。
+		 *  送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、
+		 *  コネクションが切断されたことを意味している。
 		 */
 		if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state))
@@ -445,5 +418,5 @@
 		}
 
-	/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+	/* ネットワークバッファを獲得する。*/
 	if ((error = tcpn_get_segment(&cep->swbufq, cep, 0,
 	                             TCP_CFG_SWBUF_CSAVE_MIN_SIZE,
@@ -452,5 +425,5 @@
 		return error;
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ãåæåããã*/
+	/* 送信ウィンドバッファを初期化する。*/
 	tcp_init_swbuf(cep);
 
@@ -459,5 +432,5 @@
 
 /*
- *  tcp_get_swbuf_addr_cs -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããï¼å°ç¨ï¼ã
+ *  tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する（専用）。
  */
 
@@ -467,5 +440,5 @@
 	ER_UINT	error;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -479,15 +452,14 @@
 		 *   <---------------- error --------------->
 		 *              ^
-		 *              net_buf ã§ 4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã
+		 *              net_buf で 4 オクテット境界にアラインされている。
 		 *
-		 *  tcp_output ã¨ ip_output ã§ããã§ãã¯ãµã ãè¨ç®ããã¨ãã
-		 *  n ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã
-		 *  ãããã£ã³ã°ããããã®åãèæ
-®ãã¦éä¿¡ã¦ã£ã³ããããã¡ã®
-		 *  ç©ºããµã¤ãºã 4 ãªã¯ãããå¢çã«èª¿æ´ããã
+		 *  tcp_output と ip_output で、チェックサムを計算するとき、
+		 *  n が 4 オクテット境界になるように SDU の後ろに 0 を
+		 *  パッディングする。その分を考慮して送信ウィンドバッファの
+		 *  空きサイズを 4 オクテット境界に調整する。
 		 */
 		error = (uint_t)(((error - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) >> 2 << 2) - cep->swbuf_count);
 
-		/* éä¿¡ã¦ã¤ã³ããµã¤ãºã«ãããµã¤ãºãèª¿æ´ããã*/
+		/* 送信ウインドサイズによりサイズを調整する。*/
 		if (error > cep->snd_wnd) 
 			error = cep->snd_wnd;
@@ -495,24 +467,22 @@
 			error = cep->snd_cwnd;
 
-		/* ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶
-ããªãããã«ããã*/
+		/* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/
 		if (error > cep->maxseg) 
 			error = cep->maxseg;
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨­å®ãããã®å¤ãè¿ãã*/
+		/* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
 		cep->get_buf_len = error;
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ã®å
-é ­ãè¨­å®ããã*/
+		/* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
 		*p_buf = cep->sbuf_wptr;
 		}
 
-	else {	/* ãããã¯ã¼ã¯ãããã¡ãä¸æ­£ */
-
-		/* éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+	else {	/* ネットワークバッファが不正 */
+
+		/* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
 		tcp_free_swbufq_cs(cep);
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -521,5 +491,5 @@
 
 /*
- *  tcp_send_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããï¼å°ç¨ï¼ã
+ *  tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする（専用）。
  */
 
@@ -527,5 +497,5 @@
 tcp_send_swbuf_cs (T_TCP_CEP *cep, uint_t len)
 {
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -533,15 +503,15 @@
 	cep->swbuf_count += len;
 
-	/* ãããã¯ã¼ã¯ãããã¡é·ã¨ IP ãã¼ã¿ã°ã©ã é·ãè¨­å®ããã*/
+	/* ネットワークバッファ長と IP データグラム長を設定する。*/
 	cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr));
 	SET_IP_SDU_SIZE(cep->swbufq, len + TCP_HDR_SIZE);
 
-	/* tcp_get_buf ã®å²å½ã¦é·ããªã»ããããã*/
+	/* tcp_get_buf の割当て長をリセットする。*/
 	cep->get_buf_len = 0;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
-	/* ãã©ã°ããéä¿¡å¯è½ã«è¨­å®ããå¼·å¶çã«éä¿¡ããã*/
+	/* フラグを、送信可能に設定し、強制的に送信する。*/
 	cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY
 	                                               | TCP_CEP_FLG_FORCE
@@ -551,11 +521,9 @@
 
 /*
- *  tcp_free_swbufq_cs -- éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®è§£æ¾ãæç¤ºããï¼å°ç¨ï¼ã
+ *  tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する（専用）。
  *
- *    æ³¨æ:
- *      å¿
-è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãéä¿¡ç«¯ç¹ãã­ãã¯ãã
- *      æ»ã£ãå¾ãè§£é¤ããå¿
-è¦ãããã
+ *    注意:
+ *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
+ *      戻った後、解除する必要がある。
  */
 
@@ -563,12 +531,11 @@
 tcp_free_swbufq_cs (T_TCP_CEP *cep)
 {
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãå¾
-ã¡ãåãæ¶ãã*/
+	/* 送信ウィンドバッファの空き待ちを取り消す。*/
 	cep->flags &= ~TCP_CEP_FLG_WBCS_NBUF_REQ;
 
 	if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) {
 		/*
-		 *  éä¿¡ã¦ã£ã³ããããã¡ãåé¤ããããã«ããã©ã°ã ACK å®äºã«è¨­å®ãã
-		 *  TCP åºåã¿ã¹ã¯ãèµ·åããã
+		 *  送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、
+		 *  TCP 出力タスクを起動する。
 		 */
 		cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED;
@@ -578,5 +545,5 @@
 
 /*
- *  tcp_alloc_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæç¤ºããï¼å°ç¨ï¼ã
+ *  tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する（専用）。
  */
 
@@ -587,6 +554,6 @@
 
 	/*
-	 *  éä¿¡ã¦ã£ã³ããããã¡ãæªä½¿ç¨ã®å ´åã®ã¿ã
-	 *  éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæç¤ºããã
+	 *  送信ウィンドバッファが未使用の場合のみ、
+	 *  送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
 	 */
 	if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_FREE)
@@ -595,5 +562,5 @@
 
 /*
- *  tcp_is_swbuf_full_cs -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããï¼å°ç¨ï¼ã
+ *  tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする（専用）。
  */
 
@@ -606,8 +573,8 @@
 
 /*
- *  tcp_init_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãåæåããï¼å°ç¨ï¼ã
+ *  tcp_init_swbuf -- 送信ウィンドバッファを初期化する（専用）。
  *
- *    æ³¨æ: tcp_get_segment ã§ãããã¯ã¼ã¯ãããã¡ãç²å¾ãã
- *          ç´å¾ã«å¼ã³åºããã¨ã
+ *    注意: tcp_get_segment でネットワークバッファを獲得した
+ *          直後に呼び出すこと。
  */
 
@@ -615,11 +582,11 @@
 tcp_init_swbuf (T_TCP_CEP *cep)
 {
-	/* éä¿¡ã¦ã¤ã³ããããã¡ã®ä½¿ç¨ä¸­ãµã¤ãºããªã»ããããã*/
+	/* 送信ウインドバッファの使用中サイズをリセットする。*/
 	cep->swbuf_count = 0;
 
-	/* éä¿¡ã¦ã¤ã³ããããã¡ã®ã¢ãã¬ã¹ãè¨­å®ããã*/
+	/* 送信ウインドバッファのアドレスを設定する。*/
 	cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_NET_HDR_OFFSET(&cep->dstaddr.ipaddr));
 
-	/* ãã©ã°ãããããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿ã«è¨­å®ããã*/
+	/* フラグを、ネットワークバッファ割当て済みに設定する。*/
 	cep->flags = (cep->flags & ~(TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK))
 	                         |   TCP_CEP_FLG_WBCS_NBUF_READY;
@@ -627,5 +594,5 @@
 
 /*
- *  tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããï¼å°ç¨ï¼ã
+ *  tcp_push_res_nbuf -- ネットワークバッファを予約する（専用）。
  */
 
@@ -645,9 +612,9 @@
 		if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_PEND) {
 
-			/* ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/
+			/* ネットワークバッファを予約する。*/
 			cep->swbufq = nbuf;
 			nbuf = NULL;
 
-			/* ãã©ã°ãäºç´ã«è¨­å®ããã*/
+			/* フラグを予約に設定する。*/
 			cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_RSVD;
 			sel_ix = ix;
@@ -664,5 +631,5 @@
 
 /*
- *  tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãï¼å°ç¨ï¼ã
+ *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す（専用）。
  */
 
@@ -676,9 +643,9 @@
 	if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_RSVD) {
 
-		/* äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡ãè¿ãã*/
+		/* 予約してあるネットワークバッファを返す。*/
 		nbuf = cep->swbufq;
 		cep->swbufq = NULL;
 
-		/* TCP åºåã¿ã¹ã¯ãèµ·åããã*/
+		/* TCP 出力タスクを起動する。*/
 		sig_sem(SEM_TCP_POST_OUTPUT);
 		}
@@ -698,12 +665,12 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ãªå ´å
- *  ãã ããéä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ï¼cep->rbufï¼ã®å¤ã«ããã
- *  TCP éä¿¡ç«¯ç¹æ¯ã«åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãä½¿ç¨ãããã
- *  ä½¿ç¨ããªãããåãæ¿ããã
- */
-
-/*
- *  tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®æåã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合
+ *  ただし、通信端点の受信ウィンドバッファ（cep->rbuf）の値により、
+ *  TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、
+ *  使用しないかを切り替える。
+ */
+
+/*
+ *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
  */
 
@@ -718,5 +685,5 @@
 
 /*
- *  tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèª­ã¿åºãã
+ *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
  */
 
@@ -731,5 +698,5 @@
 
 /*
- *  tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã
+ *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
  */
 
@@ -744,5 +711,5 @@
 
 /*
- *  tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ãè§£æ¾ããã
+ *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
  */
 
@@ -755,5 +722,5 @@
 
 /*
- *  tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã
+ *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
  */
 
@@ -770,9 +737,9 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹
- */
-
-/*
- *  tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®æåã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効
+ */
+
+/*
+ *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
  */
 
@@ -787,5 +754,5 @@
 		cep->rwbuf_count -= len;
 
-		/* ãããã¯ã¼ã¯ãããã¡ã«ãã¼ã¿ãç¡ããªã£ããè§£æ¾ããã*/
+		/* ネットワークバッファにデータが無くなったら解放する。*/
 		if (len == qhdr->slen) {
 			T_NET_BUF *next;
@@ -809,5 +776,5 @@
 
 /*
- *  tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèª­ã¿åºãã
+ *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
  */
 
@@ -819,10 +786,10 @@
 	uint8_t		*buf = (uint8_t*)data;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã«ãããã¯ã¼ã¯ãããã¡ãç¡ããªãã
-	 *  len ã 0 ã«ãªãã¾ã§ç¶ããã
+	 *  受信ウィンドバッファキューにネットワークバッファが無くなるか
+	 *  len が 0 になるまで続ける。
 	 */
 	while (cep->rwbufq != NULL && len > 0) {
@@ -830,7 +797,6 @@
 
 		/*
-		 *  len ã¨åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®å
-é ­ãããã¯ã¼ã¯ãããã¡ã®
-		 *  ãã¼ã¿æ°ã®å°ããæ¹ãç§»ããã¼ã¿æ°ã«ããã
+		 *  len と受信ウィンドバッファキューの先頭ネットワークバッファの
+		 *  データ数の小さい方を移すデータ数にする。
 		 */
 		if (len > qhdr->slen)
@@ -844,6 +810,6 @@
 
 		/*
-		 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã«
-		 *  ãã¼ã¿ãç¡ããªã£ããè§£æ¾ããã
+		 *  受信ウィンドバッファキューのネットワークバッファに
+		 *  データが無くなったら解放する。
 		 */
 		tcp_drop_rwbuf_cs(cep, blen);
@@ -854,5 +820,5 @@
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -861,5 +827,5 @@
 
 /*
- *  tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã
+ *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
  */
 
@@ -870,11 +836,10 @@
 	uint_t		len;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	if (cep->rwbufq == NULL) {
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ãå
-¨ã¦éæ¾ããã¦ããã¨ãã*/
+		/* 受信ウィンドバッファが全て開放されているとき。*/
 		*p_buf = NULL;
 		len = 0;
@@ -882,17 +847,16 @@
 	else {
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ã®ã¢ãã¬ã¹ã®å
-é ­ãè¨­å®ããã*/
+		/* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
 		qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq));
 		*p_buf = GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff;
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨ç®ããã*/
+		/* 受信ウィンドバッファのデータ長を計算する。*/
 		len = qhdr->slen;
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
-	/* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨­å®ãããã®å¤ãè¿ãã*/
+	/* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
 	cep->rcv_buf_len = len;
 	return len;
@@ -900,11 +864,9 @@
 
 /*
- *  tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ãè§£æ¾ããã
+ *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
  *
- *    æ³¨æ:
- *      å¿
-è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãéä¿¡ç«¯ç¹ãã­ãã¯ãã
- *      æ»ã£ãå¾ãè§£é¤ããå¿
-è¦ãããã
+ *    注意:
+ *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
+ *      戻った後、解除する必要がある。
  */
 
@@ -928,5 +890,5 @@
 			}
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸­ãµã¤ãºããªã»ããããã*/
+		/* 受信ウィンドバッファの使用中サイズをリセットする。*/
 		cep->rwbuf_count = 0;
 		}
@@ -934,11 +896,10 @@
 
 /*
- *  tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã
+ *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
  *
- *    æ³¨æ:
- *	å
-¥å input ã¯ãT_TCP_Q_HDR ã«ãããªã³ã¯ããã
- *	ä¸¦ã¹æ¿ããçµäºãã¦ããªããã°ãªããªããã¾ãã
- *	è¿½å ãããã¼ã¿ã¯ãåä¿¡ã¦ã£ã³ããããã¡ã«åã¾ããã¨ã
+ *    注意:
+ *	入力 input は、T_TCP_Q_HDR によりリンクされ、
+ *	並べ替えが終了していなければならない。また、
+ *	追加するデータは、受信ウィンドバッファに収まること。
  */
 
@@ -950,5 +911,5 @@
 	uint_t		inlen, last;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -963,14 +924,13 @@
 
 		/*
-		 *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã
-		 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®æå¤§ã¨ã³ããªæ°ãè¶
-ããã¨ãã¯ã
-		 *  åä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã
-		 *  ãã ããSDU é·ã 0 ã®ã»ã°ã¡ã³ãã¨ FIN ã»ã°ã¡ã³ãã¯ç ´æ£ããªãã
-		 *  ãªããæ­£å¸¸ã«åä¿¡ããã»ã°ã¡ã³ããç ´æ£ãããããåéåæ°ãå¢å ããã
+		 *  TCP 通信端点の受信ウィンドバッファの省コピー機能の、
+		 *  受信ウィンドバッファキューの最大エントリ数を超えるときは、
+		 *  受信したセグメントを破棄する。
+		 *  ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。
+		 *  なお、正常に受信したセグメントも破棄するため、再送回数が増加する。
 		 */
 		syscall(rel_net_buf(input));
 
-		/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点のロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 		return;
@@ -983,8 +943,8 @@
 	qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
 
-	/* åä¿¡æ¸ã¿ã·ã¼ã±ã³ã¹çªå·ãæ´æ°ããã*/
+	/* 受信済みシーケンス番号を更新する。*/
 	cep->rcv_nxt += inlen;
 
-	/* ç·æ¥ãã¼ã¿ã® SDU è£æ­£ãè¡ãã*/
+	/* 緊急データの SDU 補正を行う。*/
 	if (qhdr->urp > 0 && inlen > 0) {
 		inlen      -= qhdr->urp;
@@ -995,5 +955,5 @@
 	last  = cep->rwbuf_count;
 
-	/* ãããã¯ã¼ã¯ãããã¡ãåä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®æå¾ã«é£çµããã*/
+	/* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/
 	qhdr->next = NULL;
 	nextp = &cep->rwbufq;
@@ -1003,7 +963,7 @@
 
 	/*
-	 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-	 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-	 *  ããªããã¨ãç¥ãããããã§ããã
+	 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+	 *  これは、アプリケーションに、相手からこれ以上データが送られて
+	 *  こないことを知らせるためである。
 	 */
 	if (inlen > 0) {
@@ -1013,10 +973,10 @@
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
 #ifdef TCP_CFG_NON_BLOCKING
 
-	if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {	/* ノンブロッキングコール */
 
 		int_t	len;
@@ -1026,14 +986,14 @@
 
 		/*
-		 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-		 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-		 *  ããªããã¨ãç¥ãããããã§ããã
+		 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+		 *  これは、アプリケーションに、相手からこれ以上データが送られて
+		 *  こないことを知らせるためである。
 		 */
 		if (len > 0 || inlen == 0) {
 
-			/* tcp_rcv_buf ã®å²å½ã¦é·ãè¨­å®ããã*/
+			/* tcp_rcv_buf の割当て長を設定する。*/
 			cep->rcv_buf_len = len;
 
-			/* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/
+			/* 受信ウィンドバッファのアドレスを返す。*/
 			*cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq,
 			                  GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff;
@@ -1052,6 +1012,6 @@
 
 				/*
-				 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã¦ã
-				 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+				 *  通信端点をロックして、
+				 *  受信ウィンドバッファキューのネットワークバッファを解放する。
 				 */
 				syscall(wai_sem(cep->semid_lock));
@@ -1061,15 +1021,15 @@
 			}
 
-		/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+		/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 		cep->rcv_tskid = TA_NULL;
 		cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
 		}
 
-	else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {	/* ノンブロッキングコール */
 		int_t	len;
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/
+		/* 受信ウィンドバッファからデータを取り出す。*/
 		if ((len = tcp_read_rwbuf_cs(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
-			/* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/
+			/* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1077,7 +1037,7 @@
 
 		/*
-		 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-		 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-		 *  ããªããã¨ãç¥ãããããã§ããã
+		 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+		 *  これは、アプリケーションに、相手からこれ以上データが送られて
+		 *  こないことを知らせるためである。
 		 */
 		if (len > 0 || inlen == 0) {
@@ -1094,5 +1054,5 @@
 			}
 
-		/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+		/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 		cep->rcv_tskid = TA_NULL;
 		cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
@@ -1104,9 +1064,8 @@
 		if (inlen == 0 && cep->rwbuf_count == 0) {
 			/*
-			 *  åä¿¡ã¦ã£ã³ããããã¡å
-ã®ãã¼ã¿æ°ã 0 ã§ã
-			 *  ç¸æãã FIN ãã©ã°ãä»ããã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã
-			 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã¦ã
-			 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+			 *  受信ウィンドバッファ内のデータ数が 0 で、
+			 *  相手から FIN フラグが付いたセグメントを受信したときは、
+			 *  通信端点をロックして、
+			 *  受信ウィンドバッファキューのネットワークバッファを解放する。
 			 */
 			syscall(wai_sem(cep->semid_lock));
@@ -1116,10 +1075,8 @@
 
 		/*
-		 *  åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå
-¥ããã inlen == 0 ã®æãå
-¥åã¿ã¹ã¯ãèµ·åºããã
-		 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-		 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-		 *  ããªããã¨ãç¥ãããããã§ããã
+		 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
+		 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+		 *  これは、アプリケーションに、相手からこれ以上データが送られて
+		 *  こないことを知らせるためである。
 		 */
 		if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr_ncs.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr_ncs.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_subr_ncs.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -130,9 +118,9 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãç¡å¹
- */
-
-/*
- *  tcp_read_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèª­ã¿åºãã
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
+ */
+
+/*
+ *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
  */
 
@@ -144,5 +132,5 @@
 	uint_t	hdr_offset = IF_IP_TCP_HDR_OFFSET(output);
 
-	/* SDU ã®å¤§ããããã§ãã¯ããã*/
+	/* SDU の大きさをチェックする。*/
 	if (sdu_size < GET_TCP_HDR_SIZE(output, hdr_offset) + len) {
 		syslog(LOG_INFO, "[TCP] shrink SUD len: %d -> %d",
@@ -153,5 +141,5 @@
 	wptr = GET_TCP_SDU(output, hdr_offset);
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -159,6 +147,5 @@
 	if (rptr - (uint8_t*)cep->sbuf > cep->sbufsz) {
 
-		/* è»¢ééå§ãéä¿¡ã¦ã£ã³ããããã¡ã®çµãããè¶
-ããã¨ãã®å¦çã*/
+		/* 転送開始が送信ウィンドバッファの終わりを超えるときの処理　*/
 		rptr = (uint8_t*)cep->sbuf_rptr - (cep->sbufsz - doff);
 		}
@@ -166,5 +153,5 @@
 		uint_t sub;
 
-		/* è»¢éç¯å²ãã©ã¦ã³ãããã¨ãã®å¦ç */
+		/* 転送範囲がラウンドするときの処理 */
 		sub = (uint_t)(cep->sbufsz - (rptr - (uint8_t*)cep->sbuf));
 		memcpy((void*)wptr, rptr, (size_t)sub);
@@ -178,10 +165,10 @@
 	NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_DATA_OCTETS], len);
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 	}
 
 /*
- *  tcp_drop_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã
+ *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
  */
 
@@ -191,5 +178,5 @@
 	uint_t	last;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -197,5 +184,5 @@
 
 	if (cep->sbuf_rptr + len > (uint8_t*)cep->sbuf + cep->sbufsz)
-		/* ã©ã¦ã³ãããã¨ãã®è¨ç® */
+		/* ラウンドするときの計算 */
 		cep->sbuf_rptr -= cep->sbufsz - len;
 	else
@@ -203,30 +190,30 @@
 	cep->swbuf_count -= (uint16_t)len;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
 #ifdef TCP_CFG_NON_BLOCKING
 
-	if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {	/* ノンブロッキングコール */
+
+		/* 通信端点をロックする。*/
 		syscall(wai_sem(cep->semid_lock));
 
-		/* éä¿¡ãã¼ã¿é·ãè¨ç®ããã*/
+		/* 送信データ長を計算する。*/
 		if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
-			/* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯ãæ¸è¾¼ã¿ãã¤ã³ã¿ããéä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§ */
+			/* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
 			len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
 		else
 			len = cep->sbufsz - cep->swbuf_count;
 
-		/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点のロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 
 		if (len > 0) {
 
-			/* tcp_get_buf ã®å²å½ã¦é·ãè¨­å®ããã*/
+			/* tcp_get_buf の割当て長を設定する。*/
 			cep->get_buf_len = len;
 
-			/* éä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/
+			/* 送信ウィンドバッファのアドレスを返す。*/
 			*cep->snd_p_buf = cep->sbuf_wptr;
 
@@ -241,5 +228,5 @@
 				syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
 
-			/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+			/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 			cep->snd_tskid = TA_NULL;
 			cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -250,9 +237,9 @@
 
 	else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT ||
-	         cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	         cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {	/* ノンブロッキングコール */
 
 #else	/* of #ifdef TCP_CFG_EXTENTIONS */
 
-	else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {	/* ノンブロッキングコール */
 
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
@@ -260,10 +247,10 @@
 		ER_UINT	error;
 
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/
+	 	/* 送信ウィンドバッファにデータを書き込む。*/
 		error = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len);
 
 #ifdef TCP_CFG_EXTENTIONS
 
-		/* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨­å®ããã*/
+		/* 送信緊急ポインタを設定する。*/
 	        if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB)
 			cep->snd_up = cep->snd_una + error;
@@ -281,5 +268,5 @@
 			syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
 
-		/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+		/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 		cep->snd_tskid = TA_NULL;
 		cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
@@ -289,5 +276,5 @@
 #endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããåºæ¥ããåºåã¿ã¹ã¯ãèµ·åºããã*/
+		/* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
 		if (last == cep->sbufsz && cep->swbuf_count < cep->sbufsz)
 			syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
@@ -300,5 +287,5 @@
 
 	if (cep->swbuf_count > 0) {
-		/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°åºåããã¹ãããã*/
+		/* 送信ウィンドバッファにデータがあれば出力をポストする。*/
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -307,5 +294,5 @@
 
 /*
- *  tcp_write_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã
+ *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
  */
 
@@ -315,12 +302,12 @@
 	uint_t	offset;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	/* len ã¨éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã®å°ããæ¹ãç§»ããã¼ã¿æ°ã«ããã*/
+	/* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
 	if (len > (cep->sbufsz - cep->swbuf_count))
 		len = cep->sbufsz - cep->swbuf_count;
 
-	/* æ¸ãè¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç */
+	/* 書き込みポインタがラウンドするときの処理 */
 	if (len > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) {
 		offset = (uint_t)(cep->sbufsz - (cep->sbuf_wptr -(uint8_t*)cep->sbuf));
@@ -336,5 +323,5 @@
 	cep->swbuf_count += len - offset;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -343,6 +330,5 @@
 
 /*
- *  tcp_wait_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãç©ºãã®ãå¾
-ã¤ã
+ *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのを待つ。
  */
 
@@ -355,7 +341,6 @@
 	while (cep->swbuf_count >= cep->sbufsz) {
 		/*
-		 *  éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãããªããã°ãåºåããã¹ããã¦ã
-		 *  éä¿¡ã¦ã£ã³ããããã¡ãç©ºãã¾ã§å¾
-ã¤ã
+		 *  送信ウィンドバッファの空きがなければ、出力をポストして、
+		 *  送信ウィンドバッファが空くまで待つ。
 		 */
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
@@ -368,9 +353,7 @@
 
 		/*
-		 *  éä¿¡ã§ããããCEP ã® FSM ç¶æ
-ãè¦ãã
-		 *  éä¿¡ã¦ã£ã³ããããã¡ãç©ºãã¾ã§å¾
-ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã
-		 *  ã³ãã¯ã·ã§ã³ãåæ­ããããã¨ãæå³ãã¦ããã
+		 *  送信できるか、CEP の FSM 状態を見る。
+		 *  送信ウィンドバッファが空くまで待つ間に、送信不能になった場合は、
+		 *  コネクションが切断されたことを意味している。
 		 */
 		if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
@@ -382,5 +365,5 @@
 	}
 /*
- *  tcp_get_swbuf_addr -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã
+ *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
  */
 
@@ -390,22 +373,21 @@
 	uint_t	len;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ã®å
-é ­ãè¨­å®ããã*/
+	/* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
 	*p_buf = cep->sbuf_wptr;
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããµã¤ãºãè¨ç®ããã*/
+	/* 送信ウィンドバッファの空きサイズを計算する。*/
 	if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
-		/* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯ãæ¸è¾¼ã¿ãã¤ã³ã¿ããéä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§ */
+		/* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
 		len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
 	else
 		len = cep->sbufsz - cep->swbuf_count;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨­å®ãããã®å¤ãè¿ãã*/
+	/* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
 	cep->get_buf_len = len;
 	return (ER_UINT)len;
@@ -413,5 +395,5 @@
 
 /*
- *  tcp_send_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããã
+ *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
  */
 
@@ -419,5 +401,5 @@
 tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len)
 {
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
@@ -425,15 +407,15 @@
 	cep->swbuf_count += len;
 
-	/* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç */
+	/* 書込みポインタがラウンドするときの処理 */
 	if (cep->sbuf_wptr >= (uint8_t*)cep->sbuf + cep->sbufsz)
 		cep->sbuf_wptr  = (uint8_t*)cep->sbuf;
 
-	/* tcp_get_buf ã®å²å½ã¦é·ããªã»ããããã*/
+	/* tcp_get_buf の割当て長をリセットする。*/
 	cep->get_buf_len = 0;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/
+	/* 送信ウィンドバッファがフルのときは強制的に送信する。*/
 	if (cep->swbuf_count >= cep->sbufsz)
 		cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
@@ -441,5 +423,5 @@
 
 /*
- *  tcp_is_swbuf_full -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããã
+ *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
  */
 
@@ -455,9 +437,9 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãç¡å¹
- */
-
-/*
- *  tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
+ */
+
+/*
+ *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
  */
 
@@ -468,5 +450,5 @@
 	cep->rbuf_rptr  += len;
 
-	/* èª­ã¿åºããã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç */
+	/* 読み出しポインタがラウンドするときの処理 */
 	if (cep->rbuf_rptr >= (uint8_t*)cep->rbuf + cep->rbufsz)
 		cep->rbuf_rptr  = (uint8_t*)cep->rbuf;
@@ -474,5 +456,5 @@
 
 /*
- *  tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèª­ã¿åºãã
+ *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
  */
 
@@ -482,12 +464,12 @@
 	uint_t	offset;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	/* len ã¨åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿æ°ã®å°ããæ¹ãåãåºããã¼ã¿æ°ã«ããã*/
+	/* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
 	if (len > cep->rwbuf_count)
 		len = cep->rwbuf_count;
 
-	/* èª­ã¿åºããã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç */
+	/* 読み出しポインタがラウンドするときの処理 */
 	if (len > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
 		offset = (uint_t)(cep->rbufsz - (cep->rbuf_rptr -(uint8_t*)cep->rbuf));
@@ -503,5 +485,5 @@
 	cep->rbuf_rptr  += len - offset;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -510,5 +492,5 @@
 
 /*
- *  tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã
+ *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
  */
 
@@ -518,22 +500,21 @@
 	uint_t	len;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	/* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨ç®ããã*/
+	/* 受信ウィンドバッファのデータ長を計算する。*/
 	if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf))
-		/* ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯åä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§ */
+		/* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
 		len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
 	else
 		len = cep->rwbuf_count;
 
-	/* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ã®ã¢ãã¬ã¹ã®å
-é ­ãè¨­å®ããã*/
+	/* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
 	*p_buf = cep->rbuf_rptr;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
-	/* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨­å®ãããã®å¤ãè¿ãã*/
+	/* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
 	cep->rcv_buf_len = len;
 	return len;
@@ -541,11 +522,10 @@
 
 /*
- *  tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã
+ *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
  *
- *    æ³¨æ:
- *	å
-¥å input ã¯ãT_TCP_Q_HDR ã«ãããªã³ã¯ããã
- *	ä¸¦ã¹æ¿ããçµäºãã¦ããªããã°ãªããªããã¾ãã
- *	è¿½å ãããã¼ã¿ã¯ãåä¿¡ã¦ã£ã³ããããã¡ã«åã¾ããã¨ã
+ *    注意:
+ *	入力 input は、T_TCP_Q_HDR によりリンクされ、
+ *	並べ替えが終了していなければならない。また、
+ *	追加するデータは、受信ウィンドバッファに収まること。
  */
 
@@ -556,10 +536,10 @@
 	uint_t		offset, inlen, last;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
 
-	/* åä¿¡æ¸ã¿ã·ã¼ã±ã³ã¹çªå·ãæ´æ°ããã*/
+	/* 受信済みシーケンス番号を更新する。*/
 	cep->rcv_nxt += qhdr->slen;
 
@@ -567,5 +547,5 @@
 	inlen = qhdr->slen;
 
-	/* ç·æ¥ãã¼ã¿ã® SDU è£æ­£ãè¡ãã*/
+	/* 緊急データの SDU 補正を行う。*/
 	if (qhdr->urp > 0 && inlen > 0) {
 		inlen      -= qhdr->urp;
@@ -575,11 +555,11 @@
 
 	/*
-	 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-	 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-	 *  ããªããã¨ãç¥ãããããã§ããã
+	 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+	 *  これは、アプリケーションに、相手からこれ以上データが送られて
+	 *  こないことを知らせるためである。
 	 */
 	if (inlen > 0) {
 
-		/* æ¸ãè¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç */
+		/* 書き込みポインタがラウンドするときの処理 */
 		if (inlen > cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)) {
 			offset = (uint_t)(cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf));
@@ -604,11 +584,11 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {	/* ノンブロッキングコール */
 
 		int_t	len;
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨ç®ããã*/
+		/* 受信ウィンドバッファの空きデータ長を計算する。*/
 		if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
-			/* ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯åä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§ */
+			/* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
 			len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
 			}
@@ -616,18 +596,18 @@
 			len = cep->rwbuf_count;
 
-		/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点のロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 
 		/*
-		 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-		 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-		 *  ããªããã¨ãç¥ãããããã§ããã
+		 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+		 *  これは、アプリケーションに、相手からこれ以上データが送られて
+		 *  こないことを知らせるためである。
 		 */
 		if (len > 0 || inlen == 0) {
 
-			/* tcp_rcv_buf ã®å²å½ã¦é·ãè¨­å®ããã*/
+			/* tcp_rcv_buf の割当て長を設定する。*/
 			cep->rcv_buf_len = len;
 
-			/* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/
+			/* 受信ウィンドバッファのアドレスを返す。*/
 			*cep->rcv_p_buf = cep->rbuf_rptr;
 
@@ -646,6 +626,6 @@
 
 				/*
-				 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã¦ã
-				 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+				 *  通信端点をロックして、
+				 *  受信ウィンドバッファキューのネットワークバッファを解放する。
 				 */
 				syscall(wai_sem(cep->semid_lock));
@@ -655,18 +635,18 @@
 			}
 
-		/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+		/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 		cep->rcv_tskid = TA_NULL;
 		cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
 		}
 
-	else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {	/* ノンブロッキングコール */
 		ER_UINT	len;
 
-		/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点のロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/
+		/* 受信ウィンドバッファからデータを取り出す。*/
 		if ((len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
-			/* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/
+			/* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
@@ -674,7 +654,7 @@
 
 		/*
-		 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-		 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-		 *  ããªããã¨ãç¥ãããããã§ããã
+		 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+		 *  これは、アプリケーションに、相手からこれ以上データが送られて
+		 *  こないことを知らせるためである。
 		 */
 		if (len > 0 || inlen == 0) {
@@ -691,5 +671,5 @@
 			}
 
-		/* è¨æ¶ããã¦ããã¿ã¹ã¯ ID ã¨ API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/
+		/* 記憶されているタスク ID と API 機能コードをクリアーする。*/
 		cep->rcv_tskid = TA_NULL;
 		cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
@@ -700,14 +680,13 @@
 #endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-		/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点のロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 
 		if (inlen == 0 && cep->rwbuf_count == 0) {
 			/*
-			 *  åä¿¡ã¦ã£ã³ããããã¡å
-ã®ãã¼ã¿æ°ã 0 ã§ã
-			 *  ç¸æãã FIN ãã©ã°ãä»ããã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã
-			 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã¦ã
-			 *  åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+			 *  受信ウィンドバッファ内のデータ数が 0 で、
+			 *  相手から FIN フラグが付いたセグメントを受信したときは、
+			 *  通信端点をロックして、
+			 *  受信ウィンドバッファキューのネットワークバッファを解放する。
 			 */
 			syscall(wai_sem(cep->semid_lock));
@@ -717,10 +696,8 @@
 
 		/*
-		 *  åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå
-¥ããã inlen == 0 ã®æãå
-¥åã¿ã¹ã¯ãèµ·åºããã
-		 *  FIN ãã©ã°ãä»ããã»ã°ã¡ã³ãã¯ inlen == 0 ã«ãªããã¨ãããã
-		 *  ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æããããä»¥ä¸ãã¼ã¿ãéããã¦
-		 *  ããªããã¨ãç¥ãããããã§ããã
+		 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
+		 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
+		 *  これは、アプリケーションに、相手からこれ以上データが送られて
+		 *  こないことを知らせるためである。
 		 */
 		if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_timer.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_timer.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_timer.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -119,5 +107,5 @@
 
 /*
- *  å±æé¢æ°
+ *  局所関数
  */
 
@@ -131,7 +119,7 @@
 
 /*
- *  ããã¯ãªãæé
+ *  バックオフ時間
  *
- *  åéãè¡ããã³ã«ãã¿ã¤ã ã¢ã¦ãã®æéãå»¶é·ããã
+ *  再送を行うたびに、タイムアウトの時間を延長する。
  */
 
@@ -143,8 +131,8 @@
 	};
 
-#define TCP_TOTAL_BACK_OFF	511	/* ããã¯ãªãæéã®åè¨ */
-
-/*
- *  tcp_timers -- ã¿ã¤ã ã¢ã¦ãå¦ç
+#define TCP_TOTAL_BACK_OFF	511	/* バックオフ時間の合計 */
+
+/*
+ *  tcp_timers -- タイムアウト処理
  */
 
@@ -158,11 +146,11 @@
 
 	/*
-	 *  åéã¿ã¤ã
+	 *  再送タイマ
 	 */
 	case TCP_TIM_REXMT:
 	
 		/*
-		 *  æå¤§åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ã«ãªã£ãã¨ãã¯ã
-		 *  ã³ãã¯ã·ã§ã³ãåæ­ããã
+		 *  最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、
+		 *  コネクションを切断する。
 		 */
 		if (++ cep->rxtshift > TCP_MAX_REXMT_SHIFT) {
@@ -174,5 +162,5 @@
 
 		/*
-		 *  åéã¿ã¤ã ã¢ã¦ããè¨ç®ããã
+		 *  再送タイムアウトを計算する。
 		 */
 		cep->rxtcur = tcp_range_set((T_TCP_TIME)(tcp_rexmt_val(cep) * tcp_back_off[cep->rxtshift]),
@@ -182,10 +170,10 @@
 
 		/*
-		 *  srtt:   å¹³æ»åããã RTT
-		 *  rttvar: å¹³æ»åãããåæ£
+		 *  srtt:   平滑化された RTT
+		 *  rttvar: 平滑化された分散
 		 *
-		 *  åéåæ°ãæå¤§åéåæ°ã® 1/4 ã«ãªã£ãã¨ãã¯ã
-		 *  å¹³æ»åãããåæ£ (rttvar) ã« srtt ãå ç®ãã
-		 *  å¹³æ»åããã RTT ã 0 ã«ããã
+		 *  再送回数が最大再送回数の 1/4 になったときは、
+		 *  平滑化された分散 (rttvar) に srtt を加算し、
+		 *  平滑化された RTT を 0 にする。
 		 *  
 		 */
@@ -196,9 +184,9 @@
 
 		/*
-		 *  snd_nxt: æ¬¡ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ãã SEQ
-		 *  snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ	 ã¾ãã¯ãç¢ºèªãããæå¤§éä¿¡ SEQ
+		 *  snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ
+		 *  snd_una: 未確認の最小送信 SEQ	 または、確認された最大送信 SEQ
 		 *
-		 *  ååéä¿¡ãã SEQ (snd_nxt) ã 
-		 *  ç¢ºèªãããæå¤§éä¿¡ SEQ (snd_una) ã¾ã§æ»ãã
+		 *  前回送信した SEQ (snd_nxt) を 
+		 *  確認された最大送信 SEQ (snd_una) まで戻す。
 		 */
 		cep->snd_nxt = cep->snd_una;
@@ -206,20 +194,20 @@
 
 		/*
-		 *  rtt: å¾å¾©æéã®è¨æ¸¬ãä¸­æ­¢ããã
+		 *  rtt: 往復時間の計測を中止する。
 		 */
 		cep->rtt     = 0;
 
 		/*
-		 *  éä¿¡ã¦ã¤ã³ãã®è¨­å®
+		 *  送信ウインドの設定
 		 *
-		 *  snd_wnd:  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº
-		 *  snd_cwnd: è¼»è¼³ã¦ã£ã³ããµã¤ãº
-		 *  maxseg  : ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº
+		 *  snd_wnd:  相手の受信可能ウィンドサイズ
+		 *  snd_cwnd: 輻輳ウィンドサイズ
+		 *  maxseg  : 相手の最大受信セグメントサイズ
 		 *
-		 *  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã
-		 *  è¼»è¼³ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã®
-		 *  ã©ã¡ããå°ãããµã¤ãºã® 1/2 ããæ´ã«
-		 *  ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã§å²ã£ãå¤ã
-		 *  ãã ãã2 ä»¥ä¸
+		 *  相手の受信可能ウィンドサイズ (snd_wnd) か、
+		 *  輻輳ウィンドサイズ (snd_cwnd) の
+		 *  どちらか小さいサイズの 1/2 を、更に
+		 *  相手の最大受信セグメントサイズ (maxseg) で割った値。
+		 *  ただし、2 以上
 		 */
 		if (cep->snd_wnd < cep->snd_cwnd)
@@ -232,9 +220,9 @@
 
 		/*
-		 *  è¼»è¼³ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã¯
-		 *  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã«ã
-		 *  è¼»è¼³ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ã¯
-		 *  ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã® win åã«
-		 *  è¨­å®ããã
+		 *  輻輳ウィンドサイズ (snd_cwnd) は
+		 *  相手の受信可能ウィンドサイズ (snd_wnd) に、
+		 *  輻輳ウィンドサイズのしきい値 (snd_ssthresh) は
+		 *  相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に
+		 *  設定する。
 		 */
 		cep->snd_cwnd     = cep->maxseg;
@@ -242,5 +230,5 @@
 		cep->dupacks      = 0;
 
-		/* åºåããã¹ãããã*/
+		/* 出力をポストする。*/
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -248,15 +236,14 @@
 
 	/*
-	 *  æç¶ã¿ã¤ã	
+	 *  持続タイマ	
 	 */
 	case TCP_TIM_PERSIST:
 
 		/*
-		 *  æå¤§åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ãè¶
-ãã¦ãã¦ã
-		 *  ã¢ã¤ãã«æéããä¿çã¿ã¤ãã®æ¨æºå¤ (TCP_TVAL_KEEP_IDLEã
-		 *  æ¨æº 2 * 60 * 60 ç§) ä»¥ä¸ãã
-		 *  åéã¿ã¤ã ã¢ã¦ãå¤ * ããã¯ãªãæéã®åè¨ä»¥ä¸ãªã
-		 *  ã³ãã¯ã·ã§ã³ãåæ­ããã
+		 *  最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) を超えていて、
+		 *  アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、
+		 *  標準 2 * 60 * 60 秒) 以上か、
+		 *  再送タイムアウト値 * バックオフ時間の合計以上なら
+		 *  コネクションを切断する。
 		 */
 		if (cep->rxtshift > TCP_MAX_REXMT_SHIFT &&
@@ -268,5 +255,5 @@
 			}
 
-		/* æç¶ã¿ã¤ããåè¨­å®ããåºåããã¹ãããã*/
+		/* 持続タイマを再設定し、出力をポストする。*/
 		tcp_set_persist_timer(cep);
 
@@ -276,11 +263,11 @@
 
 	/*
-	 *  ä¿ç (keep alive) ã¿ã¤ã
+	 *  保留 (keep alive) タイマ
 	 */
 	case TCP_TIM_KEEP:
 
 		/*
-		 *  ã³ãã¯ã·ã§ã³ãéè¨­ãããã¾ã§ã«ã¿ã¤ã ã¢ã¦ãããã
-		 *  ã³ãã¯ã·ã§ã³ã®éè¨­ãä¸­æ­¢ããã
+		 *  コネクションが開設されるまでにタイムアウトしたら
+		 *  コネクションの開設を中止する。
 		 */
 		if (cep->fsm_state < TCP_FSM_ESTABLISHED) {
@@ -316,5 +303,5 @@
 
 	/*
-	 *  2MSL ã¿ã¤ã		
+	 *  2MSL タイマ		
 	 */
 	case TCP_TIM_2MSL:
@@ -332,6 +319,5 @@
 
 /*
- *  tcp_cancel_timers -- å
-¨ã¦ã®ã¿ã¤ããã­ã£ã³ã»ã«ããã
+ *  tcp_cancel_timers -- 全てのタイマをキャンセルする。
  */
 
@@ -348,5 +334,5 @@
 
 /*
- *  tcp_tw_timo -- Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã®ã¿ã¤ã ã¢ã¦ãå¦ç
+ *  tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理
  */
 
@@ -360,6 +346,6 @@
 
 	/*
-	 *  Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã§ã¿ã¤ã ã¢ã¦ãã®ã¨ã³ããªãæ¢ç´¢ãã
-	 *  æ¢ç´¢ããã¨ã³ããªãç©ºãã«ããã
+	 *  Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、
+	 *  探索したエントリを空きにする。
 	 */
 	frees = 0;
@@ -371,10 +357,8 @@
 
 	/*
-	 *  Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã®ç©ºãã¨ã³ããªãçºçããã
-	 *  æ¨æº TCP éä¿¡ç«¯ç¹ã§ Time Wait ä¸­ã® TCP éä¿¡ç«¯ç¹ãæ¢ç´¢ãã
-	 *  å¿
-è¦ãªæ
-å ±ã Time Wait ç¨ TCP éä¿¡ç«¯ç¹ã«ç§»ãã¦ã
-	 *  æ¨æºã® TCP éä¿¡ç«¯ç¹ãéæ¾ããã
+	 *  Time Wait 用 TCP 通信端点の空きエントリが発生したら
+	 *  標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、
+	 *  必要な情報を Time Wait 用 TCP 通信端点に移して、
+	 *  標準の TCP 通信端点を開放する。
 	 */
 	if (frees > 0) {
@@ -387,5 +371,5 @@
 
 		/*
-		 *  ãã£ã¨ãé·ãé Time Wait ãã¦ãã TCP éä¿¡ç«¯ç¹ãéæ¾ããã
+		 *  もっとも長い間 Time Wait している TCP 通信端点を開放する。
 		 */
 		while (waits > 0) {
@@ -410,5 +394,5 @@
 
 /*
- *  tcp_slow_timo -- 500 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°
+ *  tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数
  */
 
@@ -452,5 +436,5 @@
 
 /*
- *  tcp_fast_timo -- 200 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°
+ *  tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数
  */
 
@@ -476,5 +460,5 @@
 
 /*
- *  tcp_range_set -- æéãæå®ããç¯å²ã«è¨­å®ããã
+ *  tcp_range_set -- 時間を指定した範囲に設定する。
  */
 
@@ -491,5 +475,5 @@
 
 /*
- *  tcp_set_persist_timer -- æç¶ã¿ã¤ãã®è¨­å®
+ *  tcp_set_persist_timer -- 持続タイマの設定
  */
 
@@ -500,11 +484,11 @@
 
 	/*
-	 *  srtt:   å¹³æ»åããã RTT
-	 *  rttvar: å¹³æ»åãããåæ£
+	 *  srtt:   平滑化された RTT
+	 *  rttvar: 平滑化された分散
 	 */
 	time = ((cep->srtt >> 2) + cep->rttvar) >> 1;
 
 	/*
-	 *  åéã¿ã¤ããè¨­å®ããã¦ããã°åå¾©ä¸è½ã¨ã©ã¼
+	 *  再送タイマも設定されていれば回復不能エラー
 	 */
 	if (cep->timer[TCP_TIM_REXMT])
@@ -512,5 +496,5 @@
 
 	/*
-	 *  æç¶ã¿ã¤ããè¨­å®ããã
+	 *  持続タイマを設定する。
 	 */
 	cep->timer[TCP_TIM_PERSIST] = tcp_range_set((T_TCP_TIME)(time * tcp_back_off[cep->rxtshift]),
@@ -519,5 +503,5 @@
 
 	/*
-	 *  åéåæ°ãæ´æ°ããã
+	 *  再送回数を更新する。
 	 */
 	if (cep->rxtshift < TCP_MAX_REXMT_SHIFT)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_timer.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_timer.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_timer.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -83,17 +71,17 @@
 #define _TCP_TIMER_H_
 
-/* TCP ã¿ã¤ãå¤æ° */
+/* TCP タイマ変数 */
 
-//#define NUM_TCP_TIMERS		4	/* TCP ã®ã¿ã¤ãæ°	*/
+//#define NUM_TCP_TIMERS		4	/* TCP のタイマ数	*/
 
-#define TCP_TIM_REXMT		0	/* åéã¿ã¤ã		*/
-#define TCP_TIM_PERSIST		1	/* æç¶ã¿ã¤ã		*/
-#define TCP_TIM_KEEP		2	/* ä¿ç (keep alive) ã¿ã¤ã*/
-#define TCP_TIM_2MSL		3	/* 2MSL ã¿ã¤ã		*/
+#define TCP_TIM_REXMT		0	/* 再送タイマ		*/
+#define TCP_TIM_PERSIST		1	/* 持続タイマ		*/
+#define TCP_TIM_KEEP		2	/* 保留 (keep alive) タイマ*/
+#define TCP_TIM_2MSL		3	/* 2MSL タイマ		*/
 
-/* MSL: Maximum Segment Lifetime, æå¤§ã»ã°ã¡ã³ãçå­æé 		*/
+/* MSL: Maximum Segment Lifetime, 最大セグメント生存時間 		*/
 
 /*
- *  TCP/IP ã®ã¿ã¤ãã®å®ç¾©
+ *  TCP/IP のタイマの定義
  */
 
@@ -103,35 +91,34 @@
 #define TCP_SLOW_HZ		(ULONG_C(1000000)/TCP_SLOW_TMO/NET_TIMER_CYCLE)	/* Hz	*/
 
-/* TCP ã¿ã¤ãå¤ */
+/* TCP タイマ値 */
 
 #define TCP_TVAL_MSL		(TCP_SLOW_HZ * 30)
-					/* æå¤§ã»ã°ã¡ã³ãçå­æé	*/
+					/* 最大セグメント生存時間	*/
 
-#define TCP_TVAL_SRTT_BASE	0	/* æ»ãããªå¾å¾©æéã®åºæºå¤*/
+#define TCP_TVAL_SRTT_BASE	0	/* 滑らかな往復時間の基準値*/
 
 #define TCP_TVAL_RTO_BASE	(TCP_SLOW_HZ * 3)
-		/* æ
-å ±ãå¾ãããªãå ´åã®åéã¿ã¤ã ã¢ã¦ãã®åºæºå¤	*/
+		/* 情報が得られない場合の再送タイムアウトの基準値	*/
 
 #define TCP_TVAL_MIN_PERSIST	(TCP_SLOW_HZ * 5)
-				/* æç¶ã¿ã¤ã ã¢ã¦ãã®æå°å¤	*/
+				/* 持続タイムアウトの最小値	*/
 #define TCP_TVAL_MAX_PERSIST	(TCP_SLOW_HZ * 60)
-				/* æç¶ã¿ã¤ã ã¢ã¦ãã®æå¤§å¤	*/
+				/* 持続タイムアウトの最大値	*/
 
 #define TCP_TVAL_KEEP_INIT	(TCP_SLOW_HZ * 75)
-					/* ä¿çã¿ã¤ãã®åæå¤	*/
+					/* 保留タイマの初期値	*/
 #define TCP_TVAL_KEEP_IDLE	(TCP_SLOW_HZ * 2 * 60 * 60)
-					/* ä¿çã¿ã¤ãèµ·åã¾ã§ã®æ¨æºå¤*/
+					/* 保留タイマ起動までの標準値*/
 #define TCP_TVAL_KEEP_INTERVAL	(TCP_SLOW_HZ * 75)
-					/* ä¿çã¿ã¤ãã¤ã³ã¿ã¼ãã«ã®æ¨æºå¤*/
-#define TCP_TVAL_KEEP_COUNT	8	/* ä¿çã¿ã¤ã ã¢ã¦ãã®æå¤§å¤*/
+					/* 保留タイマインターバルの標準値*/
+#define TCP_TVAL_KEEP_COUNT	8	/* 保留タイムアウトの最大値*/
 
 #define TCP_TVAL_MIN		(TCP_SLOW_HZ * 3)
-					/* æéã®æå°åä½	*/
+					/* 時間の最小単位	*/
 #define TCP_TVAL_MAX_REXMT	(TCP_SLOW_HZ * 64)
-					/* æå¤§åéæé		*/
+					/* 最大再送時間		*/
 
 /*
- *  ä»¥ä¸ã®å¤æ°ã®å¤ã¯ãã¯ã­ã§è¨­å®ããã
+ *  以下の変数の値はマクロで設定する。
  *
  *  tcp_maixidle   = tcp_keepcnt * tcp_keepintvl
@@ -143,11 +130,11 @@
 
 /*
- *  ãã®ä»ã®å®æ°
+ *  その他の定数
  */
 
-#define TCP_MAX_REXMT_SHIFT	12	/* æå¤§åéåæ°		*/
+#define TCP_MAX_REXMT_SHIFT	12	/* 最大再送回数		*/
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_usrreq.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_usrreq.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_usrreq.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -130,7 +118,6 @@
 
 /*
- *  TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå
-¨ã¦ã®æ©è½ã
- *  ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ã­ãæå¹ã«ããã
+ *  TINET をライブラリ化しない場合は、全ての機能を
+ *  オブジェクトファイルに出力するため、マクロを有効にする。
  */
 
@@ -160,5 +147,5 @@
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
@@ -228,5 +215,5 @@
 
 /*
- *  tcp_user_closed -- ã¦ã¼ã¶ããã®ã³ãã¯ã·ã§ã³ã®éæ¾
+ *  tcp_user_closed -- ユーザからのコネクションの開放
  */
 
@@ -236,21 +223,20 @@
 	switch (cep->fsm_state) {
 
-	case TCP_FSM_CLOSED:		/* ã¯ã­ã¼ãº	*/
-	case TCP_FSM_LISTEN:		/* ååãªã¼ãã³	*/
+	case TCP_FSM_CLOSED:		/* クローズ	*/
+	case TCP_FSM_LISTEN:		/* 受動オープン	*/
 		cep->fsm_state = TCP_FSM_CLOSED;
 		cep = tcp_close(cep);
 		break;
 
-	case TCP_FSM_SYN_SENT:		/* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿	*/
-	case TCP_FSM_SYN_RECVD:		/* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿	*/
+	case TCP_FSM_SYN_SENT:		/* 能動オープン、SYN 送信済み	*/
+	case TCP_FSM_SYN_RECVD:		/* SYN を受信し、SYN 送信済み	*/
 		cep->flags |= TCP_CEP_FLG_NEED_FIN;
 		break;
 
-	case TCP_FSM_ESTABLISHED:	/* ã³ãã¯ã·ã§ã³éè¨­å®äº	*/
+	case TCP_FSM_ESTABLISHED:	/* コネクション開設完了	*/
 		cep->fsm_state = TCP_FSM_FIN_WAIT_1;
 		break;
 
-	case TCP_FSM_CLOSE_WAIT:	/* ç¸æãã FIN åä¿¡ãAPP ã®çµäºå¾
-ã¡ */
+	case TCP_FSM_CLOSE_WAIT:	/* 相手から FIN 受信、APP の終了待ち */
 		cep->fsm_state = TCP_FSM_LAST_ACK;
 		break;
@@ -263,5 +249,5 @@
 
 /*
- *  tcp_cls_cep -- éä¿¡ç«¯ç¹ã®ã¯ã­ã¼ãºãæ¨æºæ©è½ã
+ *  tcp_cls_cep -- 通信端点のクローズ【標準機能】
  */
 
@@ -275,5 +261,5 @@
 #ifndef TCP_CFG_NON_BLOCKING
 
-	/* tmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* tmout が TMO_NBLK ならエラー */
 	if (tmout == TMO_NBLK)
 		return E_PAR;
@@ -282,6 +268,6 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CLS_CEP)) != E_OK)
@@ -290,10 +276,10 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-	if (tmout == TMO_NBLK) {				/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	/* タイムアウトをチェックする。*/
+	if (tmout == TMO_NBLK) {				/* ノンブロッキングコール */
 
 		if (!IS_PTR_DEFINED(cep->callback))
 			error = E_OBJ;
-		else if (cep->fsm_state == TCP_FSM_CLOSED) {	/* ãã§ã«ã¯ã­ã¼ãºããã¦ããã¨ã */
+		else if (cep->fsm_state == TCP_FSM_CLOSED) {	/* すでにクローズされているとき */
 
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
@@ -313,38 +299,37 @@
 			}
 		else {
-			/* NBLK ã®API æ©è½ã³ã¼ããè¨­å®ããã*/
+			/* NBLK のAPI 機能コードを設定する。*/
 			cep->rcv_nblk_tfn = TFN_TCP_CLS_CEP;
 
-			if ((cep = tcp_user_closed(cep)) != NULL) {	/* ã³ãã¯ã·ã§ã³ãåæ­ããã*/
-				/* åæ­ã»ã°ã¡ã³ãåºåããã¹ãããã*/
+			if ((cep = tcp_user_closed(cep)) != NULL) {	/* コネクションを切断する。*/
+				/* 切断セグメント出力をポストする。*/
 				cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 				sig_sem(SEM_TCP_POST_OUTPUT);
 				}
 
-			/*  cep ã NULL ã§æ»ã£ã¦ããå ´åã¯ã
-			 *  æ¢ã«ã³ãã¯ã·ã§ã³ãåæ­ããã¦ãããã¨ãæå³ãã¦ããã
-			 *  ã¾ãããã®å ´åã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã¦ããã
+			/*  cep が NULL で戻ってきた場合は、
+			 *  既にコネクションが切断されていることを意味している。
+			 *  また、この場合コールバック関数が呼び出されている。
 			 */
 			return E_WBLK;
 			}
 		}
-	else {							/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
-
-		if ((cep = tcp_user_closed(cep)) == NULL) {	/* ã³ãã¯ã·ã§ã³ãåæ­ããã*/
-
-			/*  cep ã NULL ã§æ»ã£ã¦ããå ´åã¯ã
-			 *  æ¢ã«ã³ãã¯ã·ã§ã³ãåæ­ããã¦ãããã¨ãæå³ãã¦ããã
+	else {							/* 非ノンブロッキングコール */
+
+#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
+
+		if ((cep = tcp_user_closed(cep)) == NULL) {	/* コネクションを切断する。*/
+
+			/*  cep が NULL で戻ってきた場合は、
+			 *  既にコネクションが切断されていることを意味している。
 			 */
 			return error;
 			}
 		else {
-			/* åæ­ã»ã°ã¡ã³ãåºåããã¹ãããã*/
+			/* 切断セグメント出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
 
-			/* ã¤ãã³ããã©ã°ã CLOSED ã«ãªãã¾ã§å¾
-ã¤ã*/
+			/* イベントフラグが CLOSED になるまで待つ。*/
 			error = twai_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED, TWF_ORW, &flag, tmout);
 			if (error == E_OK && cep->error != E_OK)
@@ -353,15 +338,15 @@
 			if (error != E_OK) {
 				if (error == E_RLWAI) {
-					/* tcp_cls_cep ãã­ã£ã³ã»ã«ãããã¨ãã¯ãRST ãéä¿¡ããã*/
+					/* tcp_cls_cep がキャンセルされたときは、RST を送信する。*/
 					tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una - 1, 
 					            cep->rbufsz - cep->rwbuf_count, TCP_FLG_RST);
 					}
 
-				/* ã¿ã¤ãã¼ãåæ­¢ããã*/
+				/* タイマーを停止する。*/
 				tcp_cancel_timers(cep);
 
 				/* 
-				 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã
-				 *  åä¿¡åæ§æã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+				 *  通信端点をロックし、
+				 *  受信再構成キューのネットワークバッファを解放する。
 				 */
 				syscall(wai_sem(cep->semid_lock));
@@ -369,18 +354,17 @@
 				syscall(sig_sem(cep->semid_lock));
 
-				/* ç¶æ
-ãæªä½¿ç¨ã«ããã*/
+				/* 状態を未使用にする。*/
 				cep->fsm_state = TCP_FSM_CLOSED;
 
 				/*
-				 * ä»¥ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã
-				 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½
-				 * ã»åçãªéä¿¡ç«¯ç¹ã®çæã»åé¤æ©è½
+				 * 以下に関係しないフラグをクリアーする。
+				 * ・送受信ウィンドバッファの省コピー機能
+				 * ・動的な通信端点の生成・削除機能
 				 */
 				cep->flags &= TCP_CEP_FLG_NOT_CLEAR;
 
 				/* 
-				 *  éä¿¡ç«¯ç¹ãã­ãã¯ãã
-				 *  éåä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã
+				 *  通信端点をロックし、
+				 *  送受信ウィンドバッファキューのネットワークバッファを解放する。
 				 */
 				cep->rwbuf_count = 0;
@@ -410,5 +394,5 @@
 
 /*
- *  tcp_sht_cep  -- ãã¼ã¿éä¿¡ã®çµäºãæ¨æºæ©è½ã
+ *  tcp_sht_cep  -- データ送信の終了【標準機能】
  */
 
@@ -420,12 +404,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SHT_CEP)) != E_OK)
 		return error;
 
-	/* TCP éä¿¡ç«¯ç¹ã®ã³ãã¯ã·ã§ã³ãç¢ºç«ç¶æ
-ã§ãªããã°ã¨ã©ã¼ */
+	/* TCP 通信端点のコネクションが確立状態でなければエラー */
 	if (!TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) {
 		if ((error = cep->error) == E_OK)
@@ -433,7 +416,7 @@
 		}
 
-	else if ((cep = tcp_user_closed(cep)) != NULL) {		/* ã³ãã¯ã·ã§ã³ãåæ­ããã*/
-
-		/* åæ­ã»ã°ã¡ã³ãåºåããã¹ãããã*/
+	else if ((cep = tcp_user_closed(cep)) != NULL) {		/* コネクションを切断する。*/
+
+		/* 切断セグメント出力をポストする。*/
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -450,5 +433,5 @@
 
 /*
- *  tcp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã
+ *  tcp_snd_dat -- パケットの送信【標準機能】
  */
 
@@ -461,5 +444,5 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* data ã NULL ããlen < 0 ãªãã¨ã©ã¼ */
+	/* data が NULL か、len < 0 ならエラー */
 	if (data == NULL || len < 0)
 		return E_PAR;
@@ -467,5 +450,5 @@
 #else	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-	/* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
 	if (data == NULL || len < 0 || tmout == TMO_NBLK)
 		return E_PAR;
@@ -474,12 +457,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_DAT)) != E_OK)
 		return error;
 
-	/* éä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã*/
+	/* 送信できるか、通信端点の状態を見る。*/
 	if ((error = tcp_can_send_more(cep, TFN_TCP_SND_DAT, tmout)) != E_OK)
 		goto err_ret;
@@ -487,18 +469,18 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-	if (tmout == TMO_NBLK) {		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+	/* タイムアウトをチェックする。*/
+	if (tmout == TMO_NBLK) {		/* ノンブロッキングコール */
+
+		/* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
 		if (!TCP_IS_SWBUF_FULL(cep)) {
 
-		 	/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/
+		 	/* 送信ウィンドバッファにデータを書き込む。*/
 			error = TCP_WRITE_SWBUF(cep, data, (uint_t)len);
 
-			/* åºåããã¹ãããã*/
+			/* 出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
 
-			/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+			/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 			(*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_DAT, (void*)error);
@@ -518,21 +500,20 @@
 			}
 		}
-	else {		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
-
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ãç©ºãã®ãå¾
-ã¤ã*/
+	else {		/* 非ノンブロッキングコール */
+
+#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
+
+	 	/* 送信ウィンドバッファが空くのを待つ。*/
 		if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK)
 			goto err_ret;
 
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/
+	 	/* 送信ウィンドバッファにデータを書き込む。*/
 		if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) {
 
-			/* ãã¼ã¿ãéä¿¡ãããéä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/
+			/* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/
 			if (TCP_IS_SWBUF_FULL(cep))
 				cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
 
-			/* åºåããã¹ãããã*/
+			/* 出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
@@ -556,5 +537,5 @@
 
 /*
- *  tcp_get_buf -- éä¿¡ç¨ãããã¡ã®ç²å¾ãæ¨æºæ©è½ã
+ *  tcp_get_buf -- 送信用バッファの獲得【標準機能】
  */
 
@@ -567,5 +548,5 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* p_buf ã NULL ãªãã¨ã©ã¼ */
+	/* p_buf が NULL ならエラー */
 	if (p_buf == NULL)
 		return E_PAR;
@@ -573,5 +554,5 @@
 #else	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-	/* p_buf ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* p_buf が NULL か、tmout が TMO_NBLK ならエラー */
 	if (p_buf == NULL || tmout == TMO_NBLK)
 		return E_PAR;
@@ -580,12 +561,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_GET_BUF)) != E_OK)
 		return error;
 
-	/* éä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã*/
+	/* 送信できるか、通信端点の状態を見る。*/
 	if ((error = tcp_can_send_more(cep, TFN_TCP_GET_BUF, tmout)) != E_OK)
 		goto err_ret;
@@ -593,13 +573,13 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-	if (tmout == TMO_NBLK) {		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	/* タイムアウトをチェックする。*/
+	if (tmout == TMO_NBLK) {		/* ノンブロッキングコール */
 
 		if (!TCP_IS_SWBUF_FULL(cep)) {
 
-			/* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+			/* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
 			error = TCP_GET_SWBUF_ADDR(cep, p_buf);
 
-			/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+			/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 			(*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_GET_BUF, (void*)error);
@@ -618,14 +598,13 @@
 		}
 
-	else {		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
-
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ãç©ºãã®ãå¾
-ã¤ã*/
+	else {		/* 非ノンブロッキングコール */
+
+#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
+
+	 	/* 送信ウィンドバッファが空くのを待つ。*/
 		if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK)
 			goto err_ret;
 
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/
+	 	/* 送信ウィンドバッファの空アドレスを獲得する。*/
 		error = TCP_GET_SWBUF_ADDR(cep, p_buf);
 
@@ -647,6 +626,5 @@
 
 /*
- *  tcp_snd_buf -- ãããã¡å
-ã®ãã¼ã¿ã®éä¿¡ãæ¨æºæ©è½ã
+ *  tcp_snd_buf -- バッファ内のデータの送信【標準機能】
  */
 
@@ -657,20 +635,20 @@
 	ER		error;
 
-	/* éä¿¡ããé·ã len ããã§ãã¯ããã*/
+	/* 送信する長さ len をチェックする。*/
 	if (len < 0)
 		return E_PAR;
 
-	/* éä¿¡ããé·ãlen ã 0 ã§ããã°ãä½ãããªãã§æ»ãã*/
+	/* 送信する長さlen が 0 であれば、何もしないで戻る。*/
 	if (len == 0)
 		return E_OK;
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_BUF)) != E_OK)
 		return error;
 
-	/* éä¿¡ããé·ã len ããã§ãã¯ããã*/
+	/* 送信する長さ len をチェックする。*/
 	if (len > cep->get_buf_len) {
 		error = E_OBJ;
@@ -678,6 +656,5 @@
 		}
 
-	/* éä¿¡ã§ããããCEP ã® FSM ç¶æ
-ãè¦ãã*/
+	/* 送信できるか、CEP の FSM 状態を見る。*/
 	if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
 		if ((error = cep->error) == E_OK)
@@ -686,8 +663,8 @@
 		}
 
-	/* éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããã*/
+	/* 送信ウィンドバッファのデータを送信可能にする。*/
 	TCP_SEND_SWBUF(cep, (uint_t)len);
 
-	/* åºåããã¹ãããã*/
+	/* 出力をポストする。*/
 	cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 	sig_sem(SEM_TCP_POST_OUTPUT);
@@ -704,5 +681,5 @@
 
 /*
- *  tcp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã
+ *  tcp_rcv_dat -- パケットの受信【標準機能】
  */
 
@@ -715,5 +692,5 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* data ã NULL ããlen < 0 ãªãã¨ã©ã¼ */
+	/* data が NULL か、len < 0 ならエラー */
 	if (data == NULL || len < 0)
 		return E_PAR;
@@ -721,5 +698,5 @@
 #else	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-	/* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
 	if (data == NULL || len < 0 || tmout == TMO_NBLK)
 		return E_PAR;
@@ -728,12 +705,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_DAT)) != E_OK)
 		return error;
 
-	/* åä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã*/
+	/* 受信できるか、通信端点の状態を見る。*/
 	if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK)
 		goto err_ret;
@@ -741,14 +717,14 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-	if (tmout == TMO_NBLK) {		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+	/* タイムアウトをチェックする。*/
+	if (tmout == TMO_NBLK) {		/* ノンブロッキングコール */
+
+		/* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/
 		if (cep->rwbuf_count > 0) {
 
-			/* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/
+			/* 受信ウィンドバッファからデータを取り出す。*/
 			len = TCP_READ_RWBUF(cep, data, (uint_t)len);
 
-			/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+			/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 			(*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_DAT, (void*)(uint32_t)len);
@@ -766,18 +742,16 @@
 			}
 		}
-	else {		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
-
-		/* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå
-¥åãããã¾ã§å¾
-ã¤ã*/
+	else {		/* 非ノンブロッキングコール */
+
+#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
+
+		/* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/
 		if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK)
 			goto err_ret;
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/
+		/* 受信ウィンドバッファからデータを取り出す。*/
 		error = TCP_READ_RWBUF(cep, data, (uint_t)len);
 
-		/* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/
+		/* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -800,6 +774,5 @@
 
 /*
- *  tcp_rcv_buf -- åä¿¡ãããã¼ã¿ã®å
-¥ã£ããããã¡ã®ç²å¾ãæ¨æºæ©è½ã
+ *  tcp_rcv_buf -- 受信したデータの入ったバッファの獲得【標準機能】
  */
 
@@ -812,5 +785,5 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* p_buf ã NULL ãªãã¨ã©ã¼ */
+	/* p_buf が NULL ならエラー */
 	if (p_buf == NULL)
 		return E_PAR;
@@ -818,5 +791,5 @@
 #else	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-	/* p_buf ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* p_buf が NULL か、tmout が TMO_NBLK ならエラー */
 	if (p_buf == NULL || tmout == TMO_NBLK)
 		return E_PAR;
@@ -825,12 +798,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_BUF)) != E_OK)
 		return error;
 
-	/* åä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã*/
+	/* 受信できるか、通信端点の状態を見る。*/
 	if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK)
 		goto err_ret;
@@ -838,14 +810,14 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-	if (tmout == TMO_NBLK) {		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+	/* タイムアウトをチェックする。*/
+	if (tmout == TMO_NBLK) {		/* ノンブロッキングコール */
+
+		/* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/
 		if (cep->rwbuf_count > 0) {
 
-		 	/* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/
+		 	/* 受信ウィンドバッファの空アドレスを獲得する。*/
 			error = TCP_GET_RWBUF_ADDR(cep, p_buf);
 
-			/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+			/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 			(*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_BUF, (void*)error);
@@ -862,11 +834,9 @@
 			}
 		}
-	else {		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
-
-		/* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå
-¥åãããã¾ã§å¾
-ã¤ã*/
+	else {		/* 非ノンブロッキングコール */
+
+#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
+
+		/* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/
 		if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK) {
 			cep->rwbuf_count = 0;
@@ -874,5 +844,5 @@
 			}
 
-	 	/* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãç²å¾ããã*/
+	 	/* 受信ウィンドバッファのアドレスを獲得する。*/
 		error = TCP_GET_RWBUF_ADDR(cep, p_buf);
 
@@ -894,5 +864,5 @@
 
 /*
- *  tcp_rel_buf -- åä¿¡ç¨ãããã¡ã®è§£æ¾ãæ¨æºæ©è½ã
+ *  tcp_rel_buf -- 受信用バッファの解放【標準機能】
  */
 
@@ -903,16 +873,16 @@
 	ER		error;
 
-	/* è§£æ¾ããé·ã len ããã§ãã¯ããã*/
+	/* 解放する長さ len をチェックする。*/
 	if (len < 0)
 		return E_PAR;
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_REL_BUF)) != E_OK)
 		return error;
 
-	/* è§£æ¾ããé·ã len ããã§ãã¯ããã*/
+	/* 解放する長さ len をチェックする。*/
 	if (len > cep->rcv_buf_len) {
 		error = E_OBJ;
@@ -920,17 +890,17 @@
 		}
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	/* åä¿¡ã¦ã£ã³ããããã¡ããåä¿¡ãããªã¯ããããåé¤ããã*/
+	/* 受信ウィンドバッファから受信したオクテットを削除する。*/
 	TCP_DROP_RWBUF(cep, (uint_t)len);
 
-	/* tcp_rcv_buf ã®å²å½ã¦é·ããªã»ããããã*/
+	/* tcp_rcv_buf の割当て長をリセットする。*/
 	cep->rcv_buf_len -= len;
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
-	/* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/
+	/* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
 	cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 	sig_sem(SEM_TCP_POST_OUTPUT);
@@ -947,5 +917,5 @@
 
 /*
- *  tcp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ã­ã£ã³ã»ã«
+ *  tcp_can_snd -- ペンディングしている送信のキャンセル
  */
 
@@ -955,34 +925,34 @@
 	ER	error = E_OK;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 *  snd_tskid ã TA_NULL ãªãã
-	 *  ãã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼
+	 *  snd_tskid が TA_NULL なら、
+	 *  ペンディングしていないのでエラー
 	 */
 	if (cep->snd_tskid == TA_NULL)
 		error = EV_NOPND;
 
-	/* ãã³ãã£ã³ã°ä¸­ã® API æ©è½ã³ã¼ãã¨ä¸è´ããªããã°ã¨ã©ã¼ */
+	/* ペンディング中の API 機能コードと一致しなければエラー */
 	else if (fncd != TFN_TCP_ALL && fncd != cep->snd_tfn)
 		error = E_OBJ;
 
-	/* å¦çãã­ã£ã³ã»ã«ããã*/
+	/* 処理をキャンセルする。*/
 	else {
 
-		/* åä¿¡åæ§æã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 受信再構成キューのネットワークバッファを解放する。*/
 		tcp_free_reassq(cep);
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 受信ウィンドバッファキューのネットワークバッファを解放する。*/
 		cep->rwbuf_count = 0;
 		TCP_FREE_RWBUFQ(cep);
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
 		TCP_FREE_SWBUFQ(cep);
 
 #ifdef TCP_CFG_NON_BLOCKING
 
-		if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) {	/* ノンブロッキングコール */
 
 			switch (cep->snd_nblk_tfn) {
@@ -990,6 +960,6 @@
 			case TFN_TCP_CON_CEP:
 				/*
-				 *  éä¿¡ç«¯ç¹ããåä»å£ãè§£æ¾ãã
-				 *  ã¤ãã³ããã©ã°ãã¯ã­ã¼ãºã«è¨­å®ããã
+				 *  通信端点から受付口を解放し、
+				 *  イベントフラグをクローズに設定する。
 				 */
 				cep->rep = NULL;
@@ -1038,5 +1008,5 @@
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -1045,5 +1015,5 @@
 
 /*
- *  tcp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ã­ã£ã³ã»ã«
+ *  tcp_can_rcv -- ペンディングしている受信のキャンセル
  */
 
@@ -1053,34 +1023,34 @@
 	ER	error = E_OK;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 *  rcv_tskid ã TA_NULL ãªãã
-	 *  ãã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼
+	 *  rcv_tskid が TA_NULL なら、
+	 *  ペンディングしていないのでエラー
 	 */
 	if (cep->rcv_tskid == TA_NULL)
 		error = EV_NOPND;
 
-	/* ãã³ãã£ã³ã°ä¸­ã® API æ©è½ã³ã¼ãã¨ä¸è´ããªããã°ã¨ã©ã¼ */
+	/* ペンディング中の API 機能コードと一致しなければエラー */
 	else if (fncd != TFN_TCP_ALL && fncd != cep->rcv_tfn)
 		error = E_OBJ;
 
-	/* å¦çãã­ã£ã³ã»ã«ããã*/
+	/* 処理をキャンセルする。*/
 	else {
 
-		/* åä¿¡åæ§æã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 受信再構成キューのネットワークバッファを解放する。*/
 		tcp_free_reassq(cep);
 
-		/* åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 受信ウィンドバッファキューのネットワークバッファを解放する。*/
 		cep->rwbuf_count = 0;
 		TCP_FREE_RWBUFQ(cep);
 
-		/* éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ãè§£æ¾ããã*/
+		/* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
 		TCP_FREE_SWBUFQ(cep);
 
 #ifdef TCP_CFG_NON_BLOCKING
 
-		if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) {	/* ノンブロッキングコール */
 
 			switch (cep->rcv_nblk_tfn) {
@@ -1088,6 +1058,6 @@
 			case TFN_TCP_ACP_CEP:
 				/*
-				 *  éä¿¡ç«¯ç¹ããåä»å£ãè§£æ¾ãã
-				 *  ã¤ãã³ããã©ã°ãã¯ã­ã¼ãºã«è¨­å®ããã
+				 *  通信端点から受付口を解放し、
+				 *  イベントフラグをクローズに設定する。
 				 */
 				cep->rep = NULL;
@@ -1142,5 +1112,5 @@
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -1149,5 +1119,5 @@
 
 /*
- *  tcp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ã­ã£ã³ã»ã«ãæ¨æºæ©è½ã
+ *  tcp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
  */
 
@@ -1158,26 +1128,26 @@
 	ER		error = E_OK, snd_err, rcv_err;
 
-	/* API æ©è½ã³ã¼ãããã§ãã¯ããã*/
+	/* API 機能コードをチェックする。*/
 	if (!VALID_TFN_TCP_CAN(fncd))
 		return E_PAR;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* TCP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* TCP 通信端点をチェックする。*/
 	if (!VALID_TCP_CEP(cep))
 		return E_NOEXS;
 
-	if (fncd == TFN_TCP_ALL) {		/* TFN_TCP_ALL ã®å¦ç */
+	if (fncd == TFN_TCP_ALL) {		/* TFN_TCP_ALL の処理 */
 		snd_err = tcp_can_snd(cep, fncd);
 		rcv_err = tcp_can_rcv(cep, fncd);
 
 		/*
-		 *  snd_err ã¨ rcv_err ã®ã©ã¡ãã EV_NOPND
-		 *  ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼
+		 *  snd_err と rcv_err のどちらも EV_NOPND
+		 *  なら、ペンディングしていないのでエラー
 		 */
 		if (snd_err == EV_NOPND && rcv_err == EV_NOPND)
@@ -1196,10 +1166,10 @@
 		}
 
-	else if (IS_TFN_TCP_RCV(fncd)) {	/* åä¿¡å¦çã®ã­ã£ã³ã»ã« */
+	else if (IS_TFN_TCP_RCV(fncd)) {	/* 受信処理のキャンセル */
 		if ((error = tcp_can_rcv(cep, fncd)) == EV_NOPND)
 			error = E_OBJ;
 		}
 
-	else {					/* éä¿¡å¦çã®ã­ã£ã³ã»ã« */
+	else {					/* 送信処理のキャンセル */
 		if ((error = tcp_can_snd(cep, fncd)) == EV_NOPND)
 			error = E_OBJ;
@@ -1216,5 +1186,5 @@
 
 /*
- *  tcp_cre_cep -- TCP éä¿¡ç«¯ç¹ã®çæãæ¡å¼µæ©è½ã
+ *  tcp_cre_cep -- TCP 通信端点の生成【拡張機能】
  */
 
@@ -1225,24 +1195,24 @@
 	ER		error;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* pk_ccep ã NULL ãªãã¨ã©ã¼ */
+	/* pk_ccep が NULL ならエラー */
 	if (pk_ccep == NULL)
 		return E_PAR;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* TCP éä¿¡ç«¯ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼ */
+	/* TCP 通信端点が、動的生成用でなければエラー */
 	if (!DYNAMIC_TCP_CEP(cep))
 		return E_ID;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 * TCP éä¿¡ç«¯ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼
+	 * TCP 通信端点をチェックする。生成済みであればエラー
 	 */
 	if (VALID_TCP_CEP(cep))
@@ -1250,19 +1220,18 @@
 	else {
 
-		/* TCP éä¿¡ç«¯ç¹çææ
-å ±ãã³ãã¼ããã*/
-		cep->cepatr   = pk_ccep->cepatr;		/* éä¿¡ç«¯ç¹å±æ§			*/
-		cep->sbuf     = pk_ccep->sbuf;			/* éä¿¡ç¨ã¦ã£ã³ããããã¡	*/
-		cep->sbufsz   = pk_ccep->sbufsz;		/* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-		cep->rbuf     = pk_ccep->rbuf;			/* åä¿¡ç¨ã¦ã£ã³ããããã¡	*/
-		cep->rbufsz   = pk_ccep->rbufsz;		/* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-		cep->callback = (void*)pk_ccep->callback;	/* ã³ã¼ã«ããã¯			*/
-
-		/* TCP éä¿¡ç«¯ç¹ãçææ¸ã¿ã«ããã*/
+		/* TCP 通信端点生成情報をコピーする。*/
+		cep->cepatr   = pk_ccep->cepatr;		/* 通信端点属性			*/
+		cep->sbuf     = pk_ccep->sbuf;			/* 送信用ウィンドバッファ	*/
+		cep->sbufsz   = pk_ccep->sbufsz;		/* 送信用ウィンドバッファサイズ	*/
+		cep->rbuf     = pk_ccep->rbuf;			/* 受信用ウィンドバッファ	*/
+		cep->rbufsz   = pk_ccep->rbufsz;		/* 受信用ウィンドバッファサイズ	*/
+		cep->callback = (void*)pk_ccep->callback;	/* コールバック			*/
+
+		/* TCP 通信端点を生成済みにする。*/
 		cep->flags |= TCP_CEP_FLG_VALID;
 		error = E_OK;
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -1273,5 +1242,5 @@
 
 /*
- *  tcp_del_cep -- TCP éä¿¡ç«¯ç¹ã®åé¤ãæ¡å¼µæ©è½ã
+ *  tcp_del_cep -- TCP 通信端点の削除【拡張機能】
  */
 
@@ -1284,22 +1253,22 @@
 	ER		error;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* TCP éä¿¡ç«¯ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼ */
+	/* TCP 通信端点が、動的生成用でなければエラー */
 	if (!DYNAMIC_TCP_CEP(cep))
 		return E_ID;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 * TCP éä¿¡ç«¯ç¹ããã§ãã¯ãããä»¥ä¸ã®å ´åã¯ã¨ã©ã¼
-	 * ã»æªçæã
-	 * ã»ä½¿ç¨ä¸­ã
+	 * TCP 通信端点をチェックする。以下の場合はエラー
+	 * ・未生成。
+	 * ・使用中。
 	 */
 	if (!VALID_TCP_CEP(cep))
@@ -1309,10 +1278,10 @@
 	else {
 
-		/* TCP éä¿¡ç«¯ç¹ãæªçæã«ããã*/
+		/* TCP 通信端点を未生成にする。*/
 		cep->flags &= ~TCP_CEP_FLG_VALID;
 		error = E_OK;
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -1325,5 +1294,5 @@
 
 /*
- *  tcp_snd_oob -- ç·æ¥ãã¼ã¿ã®éä¿¡ãæ¡å¼µæ©è½ã
+ *  tcp_snd_oob -- 緊急データの送信【拡張機能】
  */
 
@@ -1336,5 +1305,5 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* data ã NULL ããlen < 0 ãªãã¨ã©ã¼ */
+	/* data が NULL か、len < 0 ならエラー */
 	if (data == NULL || len < 0)
 		return E_PAR;
@@ -1342,5 +1311,5 @@
 #else	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-	/* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
 	if (data == NULL || len < 0 || tmout == TMO_NBLK)
 		return E_PAR;
@@ -1349,12 +1318,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_OOB)) != E_OK)
 		return error;
 
-	/* éä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã*/
+	/* 送信できるか、通信端点の状態を見る。*/
 	if ((error = tcp_can_send_more(cep, TFN_TCP_SND_OOB, tmout)) != E_OK)
 		goto err_ret;
@@ -1362,21 +1330,21 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
-	if (tmout == TMO_NBLK) {		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+	/* タイムアウトをチェックする。*/
+	if (tmout == TMO_NBLK) {		/* ノンブロッキングコール */
+
+		/* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
 		if (!TCP_IS_SWBUF_FULL(cep)) {
 
-		 	/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/
+		 	/* 送信ウィンドバッファにデータを書き込む。*/
 			error = TCP_WRITE_SWBUF(cep, data, (uint_t)len);
 
-			/* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨­å®ããã*/
+			/* 送信緊急ポインタを設定する。*/
 			cep->snd_up = cep->snd_una + cep->swbuf_count;
 
-			/* åºåããã¹ãããã*/
+			/* 出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
 
-			/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+			/* コールバック関数を呼び出す。*/
 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14
 			(*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_OOB, (void*)error);
@@ -1396,24 +1364,23 @@
 			}
 		}
-	else {		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
-
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ãç©ºãã®ãå¾
-ã¤ã*/
+	else {		/* 非ノンブロッキングコール */
+
+#endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
+
+	 	/* 送信ウィンドバッファが空くのを待つ。*/
 		if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK)
 			goto err_ret;
 
-	 	/* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/
+	 	/* 送信ウィンドバッファにデータを書き込む。*/
 		if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) {
 
-			/* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨­å®ããã*/
+			/* 送信緊急ポインタを設定する。*/
 			cep->snd_up = cep->snd_una + cep->swbuf_count;
 
-			/* ãã¼ã¿ãéä¿¡ãããéä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/
+			/* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/
 			if (TCP_IS_SWBUF_FULL(cep))
 				cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
 
-			/* åºåããã¹ãããã*/
+			/* 出力をポストする。*/
 			cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 			sig_sem(SEM_TCP_POST_OUTPUT);
@@ -1437,8 +1404,8 @@
 
 /*
- *  tcp_rcv_oob -- ç·æ¥ãã¼ã¿ã®åä¿¡ãæ¡å¼µæ©è½ã
+ *  tcp_rcv_oob -- 緊急データの受信【拡張機能】
  *
- *    æ³¨æ: éä¿¡å´ãè¤æ°ãªã¯ãããã®ãã¼ã¿ãéä¿¡ãã¦ãã
- *          ç·æ¥ãã¤ã³ã¿ãæã 1 ãªã¯ãããã®ãã¼ã¿ã®ã¿åä¿¡ããã
+ *    注意: 送信側が複数オクテットのデータを送信しても、
+ *          緊急ポインタが指す 1 オクテットのデータのみ受信する。
  */
 
@@ -1449,41 +1416,39 @@
 	uint8_t		*urg;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* data ã NULL ããlen < 0 ãªãã¨ã©ã¼ */
+	/* data が NULL か、len < 0 ならエラー */
 	if (data == NULL || len < 0)
 		return E_PAR;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* åä¿¡ã§ããããéä¿¡ç«¯ç¹ã®ç¶æ
-ãè¦ãã*/
-	/* åä¿¡ã§ããããfsm_state ãè¦ãã*/
+	/* 受信できるか、通信端点の状態を見る。*/
+	/* 受信できるか、fsm_state を見る。*/
 	if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state))
 		return E_OBJ;
 
 	/*
-	 *  ç·æ¥ãã¼ã¿å
-¥ãã®ã»ã°ã¡ã³ãã® TCP ãããã
-	 *  è¨­å®ããã¦ããªããã°ãç·æ¥ãã¼ã¿ãåä¿¡ãã¦ããªãã
+	 *  緊急データ入りのセグメントの TCP ヘッダが
+	 *  設定されていなければ、緊急データを受信していない。
 	 */
 	if (cep->urg_tcph == NULL)
 		return E_OBJ;
 
-	/* len == 0 ãªããããã¡ãªã¼ãã¼ãã­ã¼ */
+	/* len == 0 ならバッファオーバーフロー */
 	if (len == 0)
 		return E_BOVR;
 
-	/* ç·æ¥ãã¤ã³ã¿ãæã 1 ãªã¯ãããã®ãã¼ã¿ãèª­ã¿åãã*/
+	/* 緊急ポインタが指す 1 オクテットのデータを読み取る。*/
 	urg = (uint8_t*)cep->urg_tcph + TCP_DATA_OFF(cep->urg_tcph->doff) + cep->urg_tcph->urp + TCP_CFG_URG_OFFSET;
 	*(uint8_t*)data = *urg;
 
-	/* èª­ã¿åã£ããã¼ã¿ããå¾ãã® SDU ãåã«è©°ããã*/
+	/* 読み取ったデータから後ろの SDU を前に詰める。*/
 	memcpy(urg, urg + 1, cep->urg_tcph->sum - (cep->urg_tcph->urp + TCP_CFG_URG_OFFSET) - 1);
 
-	/* tcp_rcv_oob() ãå¼åºããããã¨ç¥ãããããã«ãNULL ãè¨­å®ããã*/
+	/* tcp_rcv_oob() が呼出されたこと知らせるために、NULL を設定する。*/
 	cep->urg_tcph = NULL;
 
@@ -1500,5 +1465,5 @@
 
 /*
- *  tcp_del_rep -- TCP åä»å£ã®åé¤ãæ¡å¼µæ©è½ã
+ *  tcp_del_rep -- TCP 受付口の削除【拡張機能】
  */
 
@@ -1512,7 +1477,7 @@
 
 	/*
-	 *  TCP åä»å£ ID ããã§ãã¯ããã
-	 *  IPv6 ç¨ TCP åä»å£ã§ããã°ã
-	 *  IPv6 ç¨ã®ãTCP åä»å£ã®åé¤é¢æ°ï¼æ¬ä½ï¼ããå¼åºãã
+	 *  TCP 受付口 ID をチェックする。
+	 *  IPv6 用 TCP 受付口であれば、
+	 *  IPv6 用の「TCP 受付口の削除関数（本体）」を呼出す。
 	 */
 	//NET_DEBUG_TCP3("tcp_del_rep1[r=%d,n=%d,x=%d]\n",
@@ -1524,7 +1489,7 @@
 
 	/*
-	 *  TCP åä»å£ ID ããã§ãã¯ããã
-	 *  IPv4 ç¨ TCP åä»å£ã§ããã°ã
-	 *  IPv4 ç¨ã®ãTCP åä»å£ã®åé¤é¢æ°ï¼æ¬ä½ï¼ããå¼åºãã
+	 *  TCP 受付口 ID をチェックする。
+	 *  IPv4 用 TCP 受付口であれば、
+	 *  IPv4 用の「TCP 受付口の削除関数（本体）」を呼出す。
 	 */
 	else if (VALID_TCP4_REPID(repid))
@@ -1541,5 +1506,5 @@
 {
 
-	/* TCP åä»å£ ID ããã§ãã¯ããã*/
+	/* TCP 受付口 ID をチェックする。*/
 	if (VALID_TCP6_REPID(repid))
 		return tcp6_del_rep_body(repid);
@@ -1557,5 +1522,5 @@
 {
 
-	/* TCP åä»å£ ID ããã§ãã¯ããã*/
+	/* TCP 受付口 ID をチェックする。*/
 	if (VALID_TCP4_REPID(repid))
 		return tcp4_del_rep_body(repid);
@@ -1570,7 +1535,7 @@
 
 /*
- *  tcp_set_opt -- TCP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã®è¨­å®ãæ¡å¼µæ©è½ã
+ *  tcp_set_opt -- TCP 通信端点オプションの設定【拡張機能】
  *
- *  æ³¨æ: è¨­å®å¯è½ãª TCP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã
+ *  注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。
  */
 
@@ -1582,12 +1547,12 @@
 	T_TCP_CEP	*cep;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* TCP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* TCP 通信端点をチェックする。*/
 	if (!VALID_TCP_CEP(cep))
 		return E_NOEXS;
@@ -1599,7 +1564,7 @@
 
 /*
- *  tcp_get_opt -- TCP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã®è¨­å®ãæ¡å¼µæ©è½ã
+ *  tcp_get_opt -- TCP 通信端点オプションの設定【拡張機能】
  *
- *  æ³¨æ: è¨­å®å¯è½ãª TCP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã
+ *  注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。
  */
 
@@ -1611,12 +1576,12 @@
 	T_TCP_CEP	*cep;
 
-	/* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* TCP 通信端点 ID をチェックする。*/
 	if (!VALID_TCP_CEPID(cepid))
 		return E_ID;
 
-	/* TCP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* TCP 通信端点を得る。*/
 	cep = GET_TCP_CEP(cepid);
 
-	/* TCP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* TCP 通信端点をチェックする。*/
 	if (!VALID_TCP_CEP(cep))
 		return E_NOEXS;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,5 +72,5 @@
 
 /*
- *  TCP ãããã»ãã¤ã­ã¼ãã¢ã¯ã»ã¹ãã¯ã­
+ *  TCP ヘッダ・ペイロードアクセスマクロ
  */
 
@@ -104,5 +92,5 @@
 
 /*
- *  TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.1 との互換性のための定義
  */
 
@@ -117,5 +105,5 @@
 
 /*
- *  TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.3 との互換性のための定義
  */
 
@@ -127,5 +115,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©
+ *  コールバック関数の定義
  */
 
@@ -133,5 +121,5 @@
 
 /*
- * TCP ã§ä½¿ç¨ããå¤æ°ã®åã®å®ç¾©
+ * TCP で使用する変数の型の定義
  */
 
@@ -142,43 +130,43 @@
 
 /*
- *  TCP ã¿ã¤ãå¤æ°
- */
-
-#define NUM_TCP_TIMERS		4	/* TCP ã®ã¿ã¤ãæ°	*/
-
-/*
- *  TCP åä»å£
- */
-
-/* IPv6 ç¨ TCP åä»å£ */
+ *  TCP タイマ変数
+ */
+
+#define NUM_TCP_TIMERS		4	/* TCP のタイマ数	*/
+
+/*
+ *  TCP 受付口
+ */
+
+/* IPv6 用 TCP 受付口 */
 
 typedef struct t_tcp6_rep {
 
 	/*
-	 * ITRON TCP/IP APIãTCP åä»å£ã¨åãã¡ã³ã
+	 * ITRON TCP/IP API、TCP 受付口と同じメンバ
 	 */
-	ATR		repatr;		/* åä»å£å±æ§		*/
-	T_IPV6EP	myaddr;		/* èªåã®ã¢ãã¬ã¹	*/
+	ATR		repatr;		/* 受付口属性		*/
+	T_IPV6EP	myaddr;		/* 自分のアドレス	*/
 
 #ifdef TCP_CFG_EXTENTIONS
-	uint16_t	flags;		/* åä»å£ãã©ã°		*/
-	ID		semid_lock;	/* åä»å£ã­ãã¯		*/
+	uint16_t	flags;		/* 受付口フラグ		*/
+	ID		semid_lock;	/* 受付口ロック		*/
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
 	} T_TCP6_REP;
 
-/* IPv4 ç¨ TCP åä»å£ */
+/* IPv4 用 TCP 受付口 */
 
 typedef struct t_tcp4_rep {
 
 	/*
-	 * ITRON TCP/IP APIãTCP åä»å£ã¨åãã¡ã³ã
+	 * ITRON TCP/IP API、TCP 受付口と同じメンバ
 	 */
-	ATR		repatr;		/* åä»å£å±æ§		*/
-	T_IPV4EP	myaddr;		/* èªåã®ã¢ãã¬ã¹	*/
+	ATR		repatr;		/* 受付口属性		*/
+	T_IPV4EP	myaddr;		/* 自分のアドレス	*/
 
 #ifdef TCP_CFG_EXTENTIONS
-	uint16_t	flags;		/* åä»å£ãã©ã°		*/
-	ID		semid_lock;	/* åä»å£ã­ãã¯		*/
+	uint16_t	flags;		/* 受付口フラグ		*/
+	ID		semid_lock;	/* 受付口ロック		*/
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
@@ -202,12 +190,12 @@
 
 /*
- *  åä»å£ãã©ã°
- */
-
-#define TCP_REP_FLG_DYNAMIC	UINT_C(0x0400)	/* åççæã»åé¤å¯è½åä»å£ã	*/
-#define TCP_REP_FLG_VALID	UINT_C(0x0800)	/* çææ¸ã¿ã§æå¹ãªåä»å£ã	*/
-
-/*
- *  TCP éä¿¡ç«¯ç¹
+ *  受付口フラグ
+ */
+
+#define TCP_REP_FLG_DYNAMIC	UINT_C(0x0400)	/* 動的生成・削除可能受付口。	*/
+#define TCP_REP_FLG_VALID	UINT_C(0x0800)	/* 生成済みで有効な受付口。	*/
+
+/*
+ *  TCP 通信端点
  */
 
@@ -223,87 +211,82 @@
 
 	/*
-	 * ITRON TCP/IP APIãTCP éä¿¡ç«¯ç¹ã¨åãã¡ã³ã
+	 * ITRON TCP/IP API、TCP 通信端点と同じメンバ
 	 */
-	ATR		cepatr;		/* éä¿¡ç«¯ç¹å±æ§			*/
-	void		*sbuf;		/* éä¿¡ç¨ã¦ã£ã³ããããã¡	*/
-	int_t		sbufsz;		/* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-	void		*rbuf;		/* åä¿¡ç¨ã¦ã£ã³ããããã¡	*/
-	int_t		rbufsz;		/* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-	t_tcp_callback	callback;	/* ã³ã¼ã«ããã¯é¢æ°		*/
+	ATR		cepatr;		/* 通信端点属性			*/
+	void		*sbuf;		/* 送信用ウィンドバッファ	*/
+	int_t		sbufsz;		/* 送信用ウィンドバッファサイズ	*/
+	void		*rbuf;		/* 受信用ウィンドバッファ	*/
+	int_t		rbufsz;		/* 受信用ウィンドバッファサイズ	*/
+	t_tcp_callback	callback;	/* コールバック関数		*/
 
 	/*
-	 * TINET ç¬èªã®ã¡ã³ã
+	 * TINET 独自のメンバ
 	 */
-	uint32_t	flags;		/* éä¿¡ç«¯ç¹ãã©ã°		*/
-	ID		semid_lock;	/* éä¿¡ç«¯ç¹ã­ãã¯		*/
-	ID		est_flgid;	/* ã³ãã¯ã·ã§ã³ç¶æ
-ã¤ãã³ããã©ã°	*/
-	ID		snd_flgid;	/* éä¿¡ã¤ãã³ããã©ã°		*/
-	ID		rcv_flgid;	/* åä¿¡ã¤ãã³ããã©ã°		*/
-	ID		snd_tskid;	/* éä¿¡ã¿ã¹ã¯è­å¥å­		*/
-	ID		rcv_tskid;	/* åä¿¡ã¿ã¹ã¯è­å¥å­		*/
-	uint8_t		*sbuf_rptr;	/* éä¿¡ç¨èª­ã¿åºããã¤ã³ã¿	*/
-	uint8_t		*sbuf_wptr;	/* éä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿	*/
-	uint8_t		*rbuf_rptr;	/* åä¿¡ç¨èª­ã¿åºããã¤ã³ã¿	*/
-	uint8_t		*rbuf_wptr;	/* åä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿	*/
-	T_TCP_SEQ	snd_ssthresh;	/* è¼»è¼³ã¦ã£ã³ããµã¤ãº(snd_cwnd)	*/
-					/* ã®ãããå¤			*/
-	T_TCP_TIME	rxtcur;		/* ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã	*/
-	T_TCP_TIME	srtt;		/* å¹³æ»åããã RTT		*/
-	T_TCP_TIME	rttvar;		/* å¹³æ»åãããåæ£		*/
-	T_TCP_WND	snd_cwnd;	/* è¼»è¼³ã¦ã£ã³ããµã¤ãº		*/
+	uint32_t	flags;		/* 通信端点フラグ		*/
+	ID		semid_lock;	/* 通信端点ロック		*/
+	ID		est_flgid;	/* コネクション状態イベントフラグ	*/
+	ID		snd_flgid;	/* 送信イベントフラグ		*/
+	ID		rcv_flgid;	/* 受信イベントフラグ		*/
+	ID		snd_tskid;	/* 送信タスク識別子		*/
+	ID		rcv_tskid;	/* 受信タスク識別子		*/
+	uint8_t		*sbuf_rptr;	/* 送信用読み出しポインタ	*/
+	uint8_t		*sbuf_wptr;	/* 送信用書き込みポインタ	*/
+	uint8_t		*rbuf_rptr;	/* 受信用読み出しポインタ	*/
+	uint8_t		*rbuf_wptr;	/* 受信用書き込みポインタ	*/
+	T_TCP_SEQ	snd_ssthresh;	/* 輻輳ウィンドサイズ(snd_cwnd)	*/
+					/* のしきい値			*/
+	T_TCP_TIME	rxtcur;		/* 現在の再送タイムアウト	*/
+	T_TCP_TIME	srtt;		/* 平滑化された RTT		*/
+	T_TCP_TIME	rttvar;		/* 平滑化された分散		*/
+	T_TCP_WND	snd_cwnd;	/* 輻輳ウィンドサイズ		*/
 
 	/*
-	 *  ç¸æã®æå¤§åä¿¡ã»ã°ã¡ã³ããµã¤ãº	
+	 *  相手の最大受信セグメントサイズ	
 	 *
-	 *    ãªãªã¸ãã«ã§ã¯ãä¸è¬ã®ã»ã°ã¡ã³ãã®æå¤§ãµã¤ãº (t_maxseg) ã¨ã
-	 *    ãªãã·ã§ã³ä»ãã®ã»ã°ã¡ã³ãã®æå¤§ãµã¤ãº (t_maxopd) ãå¥ã«
-	 *    ãªã£ã¦ãããããã¯ãç¾å¨ã®ã¤ã³ã¿ã¼ãããã§ã¯ããªãã·ã§ã³ä»ãã®
-	 *    ã»ã°ã¡ã³ãã®ã»ããå¤ãããã¨èª¬æããã¦ããããã§ããã
-	 *    æ¬å®è£
-ã§ã¯ãæå¤§ã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ä»¥å¤ã®ãªãã·ã§ã³ã¯
-	 *    å®è£
-ããªãã®ã§ãt_maxseg ã®ä½¿ç¨ããã
+	 *    オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
+	 *    オプション付きのセグメントの最大サイズ (t_maxopd) が別に
+	 *    なっている。これは、現在のインターネットでは、オプション付きの
+	 *    セグメントのほうが多いからと説明されているためである。
+	 *    本実装では、最大セグメントサイズオプション以外のオプションは
+	 *    実装しないので、t_maxseg の使用する。
 	 */
 	T_TCP_SEG	maxseg;
 
-	int16_t		snd_tfn;	/* éä¿¡åä½ä¸­ã® API æ©è½ã³ã¼ã	*/
-	int16_t		rcv_tfn;	/* åä¿¡åä½ä¸­ã® API æ©è½ã³ã¼ã	*/
+	int16_t		snd_tfn;	/* 送信動作中の API 機能コード	*/
+	int16_t		rcv_tfn;	/* 受信動作中の API 機能コード	*/
 
 #ifdef TCP_CFG_NON_BLOCKING
 
-	T_IPEP 		*p_dstaddr;	/* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿	*/
-	T_IPEP	 	*p_myaddr;	/* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿	*/
+	T_IPEP 		*p_dstaddr;	/* 相手のアドレスへのポインタ	*/
+	T_IPEP	 	*p_myaddr;	/* 自分のアドレスへのポインタ	*/
 
 #if defined(_IP6_CFG) && defined(_IP4_CFG)
-	T_IPV4EP	*p_dstaddr4;	/* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿	*/
-	T_IPV4EP 	*p_myaddr4;	/* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿	*/
+	T_IPV4EP	*p_dstaddr4;	/* 相手のアドレスへのポインタ	*/
+	T_IPV4EP 	*p_myaddr4;	/* 自分のアドレスへのポインタ	*/
 #endif
 	
-	int16_t		snd_nblk_tfn;	/* éä¿¡åä½ä¸­ã® API æ©è½ã³ã¼ã	*/
-	int16_t		rcv_nblk_tfn;	/* åä¿¡åä½ä¸­ã® API æ©è½ã³ã¼ã	*/
-	void		*snd_data;	/* éä¿¡ãã¼ã¿é åã®å
-é ­ã¢ãã¬ã¹	*/
-	int_t		snd_len;	/* éä¿¡ãã¼ã¿é åã®é·ã		*/
-	void		*rcv_data;	/* åä¿¡ãã¼ã¿é åã®å
-é ­ã¢ãã¬ã¹	*/
-	int_t		rcv_len;	/* åä¿¡ãã¼ã¿é åã®é·ã		*/
-	void		**snd_p_buf;	/* éä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿	*/
-	void		**rcv_p_buf;	/* åä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿	*/
+	int16_t		snd_nblk_tfn;	/* 送信動作中の API 機能コード	*/
+	int16_t		rcv_nblk_tfn;	/* 受信動作中の API 機能コード	*/
+	void		*snd_data;	/* 送信データ領域の先頭アドレス	*/
+	int_t		snd_len;	/* 送信データ領域の長さ		*/
+	void		*rcv_data;	/* 受信データ領域の先頭アドレス	*/
+	int_t		rcv_len;	/* 受信データ領域の長さ		*/
+	void		**snd_p_buf;	/* 送信バッファへのポインタ	*/
+	void		**rcv_p_buf;	/* 受信バッファへのポインタ	*/
 
 #endif	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
 #ifdef TCP_CFG_SWBUF_CSAVE
-	T_NET_BUF	*swbufq;	/* éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼	*/
+	T_NET_BUF	*swbufq;	/* 送信ウィンドバッファキュー	*/
 #endif
 
 	/*
-	 *  ããä»¥éã®ã¡ã³ãã¼ã¯ tcp_init_cep() é¢æ°ã§ã¼ã­ã¯ãªã¢ã¼ãããã
+	 *  これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
 	 */
 
-	T_TCP_TIME	timer[NUM_TCP_TIMERS];	/* TCP ã®ã¿ã¤ã		*/
-	T_IPEP		dstaddr;	/* ç¸æã®ã¢ãã¬ã¹		*/
-	T_IPEP		myaddr;		/* èªåã®ã¢ãã¬ã¹		*/
-	T_NET_BUF	*reassq;	/* åä¿¡åæ§æã­ã¥ã¼		*/
+	T_TCP_TIME	timer[NUM_TCP_TIMERS];	/* TCP のタイマ		*/
+	T_IPEP		dstaddr;	/* 相手のアドレス		*/
+	T_IPEP		myaddr;		/* 自分のアドレス		*/
+	T_NET_BUF	*reassq;	/* 受信再構成キュー		*/
 
 #if defined(_IP6_CFG)
@@ -311,9 +294,9 @@
 #if defined(_IP4_CFG)
 
-	T_TCP4_REP	*rep4;		/* IPv4 ç¨åä»å£		*/
+	T_TCP4_REP	*rep4;		/* IPv4 用受付口		*/
 
 #endif	/* of #if defined(_IP4_CFG) */
 
-	T_TCP6_REP	*rep;		/* IPv6 ç¨åä»å£		*/
+	T_TCP6_REP	*rep;		/* IPv6 用受付口		*/
 
 #else	/* of #if defined(_IP6_CFG) */
@@ -321,5 +304,5 @@
 #if defined(_IP4_CFG)
 
-	T_TCP4_REP	*rep;		/* IPv4 ç¨åä»å£		*/
+	T_TCP4_REP	*rep;		/* IPv4 用受付口		*/
 
 #endif	/* of #if defined(_IP4_CFG) */
@@ -329,49 +312,43 @@
 
 #ifdef TCP_CFG_RWBUF_CSAVE
-	T_NET_BUF	*rwbufq;	/* åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼	*/
+	T_NET_BUF	*rwbufq;	/* 受信ウィンドバッファキュー	*/
 #endif
 
 #ifdef TCP_CFG_EXTENTIONS
-	T_TCP_HDR	*urg_tcph;	/* ç·æ¥ãã¼ã¿å
-¥ãã®ã»ã°ã¡ã³ãã® TCP ããã	*/
-	T_TCP_SEQ	snd_up;		/* éä¿¡ããç·æ¥ãã¤ã³ã¿		*/
-	T_TCP_SEQ	rcv_up;		/* åä¿¡ããç·æ¥ãã¤ã³ã¿		*/
+	T_TCP_HDR	*urg_tcph;	/* 緊急データ入りのセグメントの TCP ヘッダ	*/
+	T_TCP_SEQ	snd_up;		/* 送信した緊急ポインタ		*/
+	T_TCP_SEQ	rcv_up;		/* 受信した緊急ポインタ		*/
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
-	T_TCP_SEQ	snd_una;	/* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã	*/
-					/* ç¢ºèªãããæå¤§éä¿¡ SEQ	*/
-	T_TCP_SEQ	snd_max;	/* éä¿¡ããæå¤§ SEQ		*/
-	T_TCP_SEQ	snd_nxt;	/* æ¬¡ã«éä¿¡ãã SEQ		*/
-	T_TCP_SEQ	snd_old_nxt;	/* å
-ã® snd_nxt			*/
-	T_TCP_SEQ	snd_wl1;	/* ååã¦ã£ã³ããæ´æ°ãã SEQ	*/
-	T_TCP_SEQ	snd_wl2;	/* ååã¦ã£ã³ããæ´æ°ãã ACK	*/
-	T_TCP_SEQ	iss;		/* èªåã® SEQ ã®åæå¤		*/
-	T_TCP_SEQ	irs;		/* ç¸æã® SEQ ã®åæå¤		*/
-	T_TCP_SEQ	rcv_nxt;	/* åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ	*/
-	T_TCP_SEQ	rcv_adv;	/* åä¿¡ãæå¾
-ãã¦ããæå¤§ã® SEQ	*/
-	T_TCP_SEQ	rcv_wnd;	/* åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº	*/
-	T_TCP_SEQ	rtseq;		/* æéè¨æ¸¬ãå§ãã SEQ		*/
-	T_TCP_SEQ	last_ack_sent;	/* æå¾ã«éä¿¡ãã ACK		*/
-	T_TCP_TIME	idle;		/* ã¢ã¤ãã«æé			*/
-	ER		error;		/* éåæã«çºçããã¨ã©ã¼	*/
-	ER		net_error;	/* ãããã¯ã¼ã¯ã®ã¨ã©ã¼ç¶æ
-	*/
-	T_TCP_WND	snd_wnd;	/* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº	*/
-	T_TCP_WND	max_sndwnd;	/* ä»ã¾ã§ã®æå¤§éä¿¡ã¦ã£ã³ããµã¤ãº	*/
-	T_TCP_TIME	rtt;		/* å¾å¾©æé				*/
-	uint16_t	swbuf_count;	/* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸­ãµã¤ãº	*/
-	uint16_t	rwbuf_count;	/* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸­ãµã¤ãº	*/
-	uint16_t	rcv_buf_len;	/* tcp_rcv_buf ã®å²å½ã¦é·	*/
-	uint16_t	get_buf_len;	/* tcp_rcv_buf ã®å²å½ã¦é·	*/
-	uint8_t		rxtshift;	/* åéä¿¡åæ°ã® log(2)		*/
-	uint8_t		fsm_state;	/* FSM ç¶æ
-			*/
-	uint8_t		dupacks;	/* åé ACK æ°			*/
+	T_TCP_SEQ	snd_una;	/* 未確認の最小送信 SEQ つまり	*/
+					/* 確認された最大送信 SEQ	*/
+	T_TCP_SEQ	snd_max;	/* 送信した最大 SEQ		*/
+	T_TCP_SEQ	snd_nxt;	/* 次に送信する SEQ		*/
+	T_TCP_SEQ	snd_old_nxt;	/* 元の snd_nxt			*/
+	T_TCP_SEQ	snd_wl1;	/* 前回ウィンドを更新した SEQ	*/
+	T_TCP_SEQ	snd_wl2;	/* 前回ウィンドを更新した ACK	*/
+	T_TCP_SEQ	iss;		/* 自分の SEQ の初期値		*/
+	T_TCP_SEQ	irs;		/* 相手の SEQ の初期値		*/
+	T_TCP_SEQ	rcv_nxt;	/* 受信を期待している最小の SEQ	*/
+	T_TCP_SEQ	rcv_adv;	/* 受信を期待している最大の SEQ	*/
+	T_TCP_SEQ	rcv_wnd;	/* 受信可能なウィンドサイズ	*/
+	T_TCP_SEQ	rtseq;		/* 時間計測を始めた SEQ		*/
+	T_TCP_SEQ	last_ack_sent;	/* 最後に送信した ACK		*/
+	T_TCP_TIME	idle;		/* アイドル時間			*/
+	ER		error;		/* 非同期に発生したエラー	*/
+	ER		net_error;	/* ネットワークのエラー状態	*/
+	T_TCP_WND	snd_wnd;	/* 相手の受信可能ウィンドサイズ	*/
+	T_TCP_WND	max_sndwnd;	/* 今までの最大送信ウィンドサイズ	*/
+	T_TCP_TIME	rtt;		/* 往復時間				*/
+	uint16_t	swbuf_count;	/* 送信ウィンドバッファの使用中サイズ	*/
+	uint16_t	rwbuf_count;	/* 受信ウィンドバッファの使用中サイズ	*/
+	uint16_t	rcv_buf_len;	/* tcp_rcv_buf の割当て長	*/
+	uint16_t	get_buf_len;	/* tcp_rcv_buf の割当て長	*/
+	uint8_t		rxtshift;	/* 再送信回数の log(2)		*/
+	uint8_t		fsm_state;	/* FSM 状態			*/
+	uint8_t		dupacks;	/* 再送 ACK 数			*/
 
 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)
-	uint16_t	rwbufq_entries;	/* åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ã®ã¨ã³ããªæ°	*/
+	uint16_t	rwbufq_entries;	/* 受信ウィンドバッファキューのエントリ数	*/
 #endif
 
@@ -382,20 +359,18 @@
 
 /*
- * Time Wait ç¨ TCP éä¿¡ç«¯ç¹
+ * Time Wait 用 TCP 通信端点
  */
 
 typedef struct t_tcp_twcep {
-	int_t		rbufsz;		/* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº	*/
-	T_TCP_TIME	timer_2msl;	/* 2MSL ã¿ã¤ã			*/
-	T_IPEP		dstaddr;	/* ç¸æã®ã¢ãã¬ã¹		*/
-	T_IPEP		myaddr;		/* èªåã®ã¢ãã¬ã¹		*/
-	T_TCP_SEQ	snd_una;	/* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã	*/
-					/* ç¢ºèªãããæå¤§éä¿¡ SEQ	*/
-	T_TCP_SEQ	rcv_nxt;	/* åä¿¡ãæå¾
-ãã¦ããæå°ã® SEQ	*/
-	uint16_t	rwbuf_count;	/* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸­ãµã¤ãº	*/
-	uint8_t		fsm_state;	/* FSM ç¶æ
-			*/
-	uint8_t	flags;			/* éä¿¡ç«¯ç¹ãã©ã°		*/
+	int_t		rbufsz;		/* 受信用ウィンドバッファサイズ	*/
+	T_TCP_TIME	timer_2msl;	/* 2MSL タイマ			*/
+	T_IPEP		dstaddr;	/* 相手のアドレス		*/
+	T_IPEP		myaddr;		/* 自分のアドレス		*/
+	T_TCP_SEQ	snd_una;	/* 未確認の最小送信 SEQ つまり	*/
+					/* 確認された最大送信 SEQ	*/
+	T_TCP_SEQ	rcv_nxt;	/* 受信を期待している最小の SEQ	*/
+	uint16_t	rwbuf_count;	/* 受信ウィンドバッファの使用中サイズ	*/
+	uint8_t		fsm_state;	/* FSM 状態			*/
+	uint8_t	flags;			/* 通信端点フラグ		*/
 
 	} T_TCP_TWCEP;
@@ -404,89 +379,80 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®ç¶æ
-ãã©ã°
- */
-
-#define TCP_CEP_FLG_IPV4		ULONG_C(0x00000001)	/* IPv4 ç¨ã			*/
-#define TCP_CEP_FLG_ACK_NOW		ULONG_C(0x00000100)	/* ç´ã¡ã«ç¸æã« ACK ãéãã	*/
-#define TCP_CEP_FLG_DEL_ACK		ULONG_C(0x00000200)	/* ACK ãé
-å»¶ããã		*/
-#define TCP_CEP_FLG_SENT_FIN		ULONG_C(0x00000400)	/* FIN ãéã£ã¦ããã		*/
-#define TCP_CEP_FLG_NEED_SYN		ULONG_C(0x00000800)	/* SYN ãéä¿¡ããã		*/
-#define TCP_CEP_FLG_NEED_FIN		ULONG_C(0x00001000)	/* FIN ãéä¿¡ããã		*/
-#define TCP_CEP_FLG_FORCE		ULONG_C(0x00002000)	/* å¼·å¶éä¿¡ã			*/
-#define TCP_CEP_FLG_NO_PUSH		ULONG_C(0x00004000)	/* push ããªãã		*/
-#define TCP_CEP_FLG_NO_DELAY		ULONG_C(0x00008000)	/* é
-å»¶ããªãã			*/
-#define TCP_CEP_FLG_FORCE_CLEAR		ULONG_C(0x00010000)	/* å¼·å¶éä¿¡ããå¾ãã©ã°ãã¯ãªã¢ã¼ããã*/
-#define TCP_CEP_FLG_POST_OUTPUT		ULONG_C(0x00020000)	/* éä¿¡ãéå§ããã		*/
-#define TCP_CEP_FLG_RESERVE_OUTPUT	ULONG_C(0x00040000)	/* éä¿¡ãäºç´ããã		*/
-#define TCP_CEP_FLG_DYNAMIC		ULONG_C(0x00100000)	/* åççæã»åé¤å¯è½éä¿¡ç«¯ç¹ã	*/
-#define TCP_CEP_FLG_VALID		ULONG_C(0x00200000)	/* çææ¸ã¿ã§æå¹ãªéä¿¡ç«¯ç¹ã	*/
-#define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT	ULONG_C(0x00400000)	/* éä¿¡ããå¾ã³ãã¯ã·ã§ã³ãéããã*/
-#define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT	ULONG_C(0x00800000)	/* éä¿¡ããå¾ãsnd_nxt ãå
-ã«æ»ãã*/
-
-/* éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ */
-#define TCP_CEP_FLG_WBCS_NBUF_REQ	ULONG_C(0x80000000)	/* ãããã¯ã¼ã¯ãããã¡å²å½ã¦è¦æ±*/
-#define TCP_CEP_FLG_WBCS_MASK		ULONG_C(0x70000000)	/* ãã¹ã¯			*/
-#define TCP_CEP_FLG_WBCS_FREE		ULONG_C(0x00000000)	/* éä¿¡ã¦ã£ã³ããããã¡æªä½¿ç¨	*/
-#define TCP_CEP_FLG_WBCS_WOPEN_PEND	ULONG_C(0x10000000)	/* ç¸æã®åä¿¡ã¦ã£ã³ãã®éãå¾
-ã¡	*/
-#define TCP_CEP_FLG_WBCS_NBUF_PEND	ULONG_C(0x20000000)	/* ãããã¯ã¼ã¯ãããã¡äºç´å¾
-ã¡	*/
-#define TCP_CEP_FLG_WBCS_NBUF_RSVD	ULONG_C(0x30000000)	/* ãããã¯ã¼ã¯ãããã¡äºç´æ¸ã¿	*/
-#define TCP_CEP_FLG_WBCS_NBUF_READY	ULONG_C(0x40000000)	/* ãããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿*/
-#define TCP_CEP_FLG_WBCS_SEND_READY	ULONG_C(0x50000000)	/* éä¿¡å¯è½			*/
-#define TCP_CEP_FLG_WBCS_SENT		ULONG_C(0x60000000)	/* éä¿¡æ¸ã¿ã§ãACKå¾
-ã¡		*/
-#define TCP_CEP_FLG_WBCS_ACKED		ULONG_C(0x70000000)	/* éä¿¡æ¸ã¿ã§ãACKå®äº		*/
-
-/* åæåããé¤å¤ãããã©ã°ã®å®ç¾© */
+ *  TCP 通信端点の状態フラグ
+ */
+
+#define TCP_CEP_FLG_IPV4		ULONG_C(0x00000001)	/* IPv4 用。			*/
+#define TCP_CEP_FLG_ACK_NOW		ULONG_C(0x00000100)	/* 直ちに相手に ACK を送る。	*/
+#define TCP_CEP_FLG_DEL_ACK		ULONG_C(0x00000200)	/* ACK を遅延する。		*/
+#define TCP_CEP_FLG_SENT_FIN		ULONG_C(0x00000400)	/* FIN を送ってある。		*/
+#define TCP_CEP_FLG_NEED_SYN		ULONG_C(0x00000800)	/* SYN を送信する。		*/
+#define TCP_CEP_FLG_NEED_FIN		ULONG_C(0x00001000)	/* FIN を送信する。		*/
+#define TCP_CEP_FLG_FORCE		ULONG_C(0x00002000)	/* 強制送信。			*/
+#define TCP_CEP_FLG_NO_PUSH		ULONG_C(0x00004000)	/* push しない。		*/
+#define TCP_CEP_FLG_NO_DELAY		ULONG_C(0x00008000)	/* 遅延しない。			*/
+#define TCP_CEP_FLG_FORCE_CLEAR		ULONG_C(0x00010000)	/* 強制送信した後フラグをクリアーする。*/
+#define TCP_CEP_FLG_POST_OUTPUT		ULONG_C(0x00020000)	/* 送信を開始する。		*/
+#define TCP_CEP_FLG_RESERVE_OUTPUT	ULONG_C(0x00040000)	/* 送信を予約する。		*/
+#define TCP_CEP_FLG_DYNAMIC		ULONG_C(0x00100000)	/* 動的生成・削除可能通信端点。	*/
+#define TCP_CEP_FLG_VALID		ULONG_C(0x00200000)	/* 生成済みで有効な通信端点。	*/
+#define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT	ULONG_C(0x00400000)	/* 送信した後コネクションを閉じる。*/
+#define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT	ULONG_C(0x00800000)	/* 送信した後、snd_nxt を元に戻す。*/
+
+/* 送受信ウィンドバッファの省コピー機能 */
+#define TCP_CEP_FLG_WBCS_NBUF_REQ	ULONG_C(0x80000000)	/* ネットワークバッファ割当て要求*/
+#define TCP_CEP_FLG_WBCS_MASK		ULONG_C(0x70000000)	/* マスク			*/
+#define TCP_CEP_FLG_WBCS_FREE		ULONG_C(0x00000000)	/* 送信ウィンドバッファ未使用	*/
+#define TCP_CEP_FLG_WBCS_WOPEN_PEND	ULONG_C(0x10000000)	/* 相手の受信ウィンドの開き待ち	*/
+#define TCP_CEP_FLG_WBCS_NBUF_PEND	ULONG_C(0x20000000)	/* ネットワークバッファ予約待ち	*/
+#define TCP_CEP_FLG_WBCS_NBUF_RSVD	ULONG_C(0x30000000)	/* ネットワークバッファ予約済み	*/
+#define TCP_CEP_FLG_WBCS_NBUF_READY	ULONG_C(0x40000000)	/* ネットワークバッファ割当て済み*/
+#define TCP_CEP_FLG_WBCS_SEND_READY	ULONG_C(0x50000000)	/* 送信可能			*/
+#define TCP_CEP_FLG_WBCS_SENT		ULONG_C(0x60000000)	/* 送信済みで、ACK待ち		*/
+#define TCP_CEP_FLG_WBCS_ACKED		ULONG_C(0x70000000)	/* 送信済みで、ACK完了		*/
+
+/* 初期化から除外するフラグの定義 */
 #define TCP_CEP_FLG_NOT_CLEAR		(TCP_CEP_FLG_WBCS_NBUF_REQ|TCP_CEP_FLG_WBCS_MASK|\
 					 TCP_CEP_FLG_DYNAMIC|TCP_CEP_FLG_VALID|TCP_CEP_FLG_IPV4)
 
 /*
- *  éä¿¡ç«¯ç¹ã¤ãã³ããã©ã°
- */
-
-#define TCP_CEP_EVT_ESTABLISHED		ULONG_C(0x00000001)	/* ã³ãã¯ã·ã§ã³ç¢ºç«		*/
-#define TCP_CEP_EVT_CLOSED		ULONG_C(0x00000002)	/* æªä½¿ç¨ç¶æ
-			*/
-#define TCP_CEP_EVT_SWBUF_READY		ULONG_C(0x00000004)	/* éä¿¡ã¦ã£ã³ããããã¡ç©ºã	*/
-#define TCP_CEP_EVT_RWBUF_READY		ULONG_C(0x00000008)	/* éä¿¡ã¦ã£ã³ããããã¡ãã¼ã¿ãã*/
-#define TCP_CEP_EVT_ALL			ULONG_C(0xffffffff)	/* å
-¨ã¤ãã³ã			*/
-
-/*
- *  è¿½å  API æ©è½ã»äºè±¡ã³ã¼ã
- */
-
-/* TCP é¢ä¿ */
+ *  通信端点イベントフラグ
+ */
+
+#define TCP_CEP_EVT_ESTABLISHED		ULONG_C(0x00000001)	/* コネクション確立		*/
+#define TCP_CEP_EVT_CLOSED		ULONG_C(0x00000002)	/* 未使用状態			*/
+#define TCP_CEP_EVT_SWBUF_READY		ULONG_C(0x00000004)	/* 送信ウィンドバッファ空き	*/
+#define TCP_CEP_EVT_RWBUF_READY		ULONG_C(0x00000008)	/* 送信ウィンドバッファデータあり*/
+#define TCP_CEP_EVT_ALL			ULONG_C(0xffffffff)	/* 全イベント			*/
+
+/*
+ *  追加 API 機能・事象コード
+ */
+
+/* TCP 関係 */
 
 #define TFN_TCP_UNDEF		(0)
 
 /*
- *  srtt:   å¹³æ»åããã RTT
- *  rttvar: å¹³æ»åãããåæ£
- *  rtt:    æ¸¬å®ãããå¾å¾©æé
+ *  srtt:   平滑化された RTT
+ *  rttvar: 平滑化された分散
+ *  rtt:    測定された往復時間
  *
- *  å¹³æ»åããã RTT (srtt) ã¨å¹³æ»åãããåæ£ (rttvar) ã
- *  æ´æ°åã§è¨ç®ããããã«ãå·¦ã·ãããã¦ã¹ã±ã¼ã«ããã
- *  srtt ã¯ 2 é²å°æ°ç¹ä»¥ä¸ 3 ãããã
- *  rttvar ã¯ 2 é²å°æ°ç¹ä»¥ä¸ 2 ããããä¿æããã
+ *  平滑化された RTT (srtt) と平滑化された分散 (rttvar) を
+ *  整数型で計算するために、左シフトしてスケールする。
+ *  srtt は 2 進小数点以下 3 ビット、
+ *  rttvar は 2 進小数点以下 2 ビットを保持する。
  */
 
 #define TCP_DELTA_SHIFT		2
-			/* å·®å = rtt/8 + srtt*7/8 ã®è¨ç®ã®ããã®ã·ããå¤	*/
+			/* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値	*/
 #define TCP_SRTT_SHIFT		(TCP_DELTA_SHIFT + 3)
-					/* srtt ã®ã·ããå¤ã3(+2)ããã	*/
+					/* srtt のシフト値、3(+2)ビット	*/
 #define TCP_RTTVAR_SHIFT	(TCP_DELTA_SHIFT + 2)
-					/* rttvar ã®ã·ããå¤ã2(+2)ããã	*/
+					/* rttvar のシフト値、2(+2)ビット	*/
 #define TCP_SRTT_SCALE		(1<<TCP_SRTT_SHIFT)
 #define TCP_RTTVAR_SCALE	(1<<TCP_RTTVAR_SHIFT)
 
 /*
- *  é«éåè»¢éãéå§ããåé ACK æ°ã®ãããå¤
+ *  高速再転送を開始する再送 ACK 数のしきい値
  */
 
@@ -494,26 +460,21 @@
 
 /*
- *  åä¿¡åæ§æã­ã¥ã¼ã§ã® TCP ããã
+ *  受信再構成キューでの TCP ヘッダ
  */
 
 typedef struct t_tcp_q_hdr {
-	uint16_t	sport;		/* éä¿¡å
-ãã¼ãçªå·			*/
-	uint16_t	dport;		/* å®å
-ãã¼ãçªå·			*/
-
-	uint32_t	seq;		/* SEQ çªå·				*/
-
-	T_NET_BUF 	*next;		/* æ¬¡ã®ã»ã°ã¡ã³ããå
-ã¯ ACK çªå·(ack)	*/
-
-	uint8_t		doff;		/* ãã¼ã¿ãªãã»ãã(ä¸ä½4ããã)	*/
-	uint8_t		flags;		/* ãã©ã°(ä¸ä½6ããã)			*/
-	uint16_t	soff;		/* SDU ãªãã»ãããå
-ã¯ã¦ã£ã³ããµã¤ãº(win)	*/
-
-	uint16_t	slen;		/* SDU é·ãå
-ã¯ãã§ãã¯ãµã (sum)	*/
-	uint16_t	urp;		/* ç·æ¥ãã¤ã³ã¿ï¼SDU é·è£æ­£ï¼		*/
+	uint16_t	sport;		/* 送信元ポート番号			*/
+	uint16_t	dport;		/* 宛先ポート番号			*/
+
+	uint32_t	seq;		/* SEQ 番号				*/
+
+	T_NET_BUF 	*next;		/* 次のセグメント、元は ACK 番号(ack)	*/
+
+	uint8_t		doff;		/* データオフセット(上位4ビット)	*/
+	uint8_t		flags;		/* フラグ(下位6ビット)			*/
+	uint16_t	soff;		/* SDU オフセット、元はウィンドサイズ(win)	*/
+
+	uint16_t	slen;		/* SDU 長、元はチェックサム(sum)	*/
+	uint16_t	urp;		/* 緊急ポインタ（SDU 長補正）		*/
 	} __attribute__((packed, aligned(2)))T_TCP_Q_HDR;
 
@@ -521,19 +482,19 @@
 
 /*
- *  ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾©
- */
-
-#define	TMIN_TCP_REPID		1			/* TCP      åä»å£ ID ã®æå°å¤			*/
-#define	TMIN_TCP6_REPID		1			/* TCP/IPv6 åä»å£ ID ã®æå°å¤			*/
-#define	TMIN_TCP4_REPID		(TNUM_TCP6_REPID+1)	/* TCP/IPv4 åä»å£ ID ã®æå°å¤			*/
-
-#define	TMIN_TCP_CEPID		1			/* TCP      éä¿¡ç«¯ç¹ ID ã®æå°å¤			*/
-#define	TMIN_TCP6_CEPID		1			/* TCP/IPv6 éä¿¡ç«¯ç¹ ID ã®æå°å¤			*/
-#define	TMIN_TCP4_CEPID		(TNUM_TCP6_CEPID+1)	/* TCP/IPv4 éä¿¡ç«¯ç¹ ID ã®æå°å¤			*/
-
-#define	TMIN_TCP_TWCEPID	1			/* Time Wait ç¨ TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤	*/
-
-/*
- *  å¶å¾¡ã»ã°ã¡ã³ãï¼ãã¼ã¿ãªãï¼ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡
+ *  オブジェクト ID の最小値の定義
+ */
+
+#define	TMIN_TCP_REPID		1			/* TCP      受付口 ID の最小値			*/
+#define	TMIN_TCP6_REPID		1			/* TCP/IPv6 受付口 ID の最小値			*/
+#define	TMIN_TCP4_REPID		(TNUM_TCP6_REPID+1)	/* TCP/IPv4 受付口 ID の最小値			*/
+
+#define	TMIN_TCP_CEPID		1			/* TCP      通信端点 ID の最小値			*/
+#define	TMIN_TCP6_CEPID		1			/* TCP/IPv6 通信端点 ID の最小値			*/
+#define	TMIN_TCP4_CEPID		(TNUM_TCP6_CEPID+1)	/* TCP/IPv4 通信端点 ID の最小値			*/
+
+#define	TMIN_TCP_TWCEPID	1			/* Time Wait 用 TCP 通信端点 ID の最小値	*/
+
+/*
+ *  制御セグメント（データなし）サイズのネットワークバッファ
  */
 
@@ -541,7 +502,7 @@
 
 typedef struct t_net_buf_cseg {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -551,5 +512,5 @@
 #endif
 	uint8_t		buf[IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 	} T_NET_BUF_CSEG;
 
@@ -557,6 +518,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -575,8 +535,8 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
- */
-
-/* TCP åä»å£ */
+ *  関数シミュレーションマクロ
+ */
+
+/* TCP 受付口 */
 
 #define VALID_TCP6_REPID(id)	(TMIN_TCP6_REPID<=(id)&&(id)<=tmax_tcp6_repid)
@@ -604,5 +564,5 @@
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 #define VALID_TCP_CEPID(id)	(TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid)
@@ -634,6 +594,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -642,5 +601,5 @@
 extern T_TCP_STATS tcp_stats;
 
-/* TCP åä»å£ */
+/* TCP 受付口 */
 
 extern T_TCP6_REP tcp6_rep[];
@@ -663,5 +622,5 @@
 #endif
 
-/* TCP éä¿¡ç«¯ç¹ */
+/* TCP 通信端点 */
 
 extern T_TCP_CEP tcp_cep[];
@@ -679,5 +638,5 @@
 
 /*
- *  Inline é¢æ°
+ *  Inline 関数
  */
 
@@ -685,10 +644,10 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã
- *  ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°
- */
-
-/*
- *  tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ãè§£æ¾ããã
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能が
+ *  無効の場合は何もしないためのダミーの関数
+ */
+
+/*
+ *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
  */
 
@@ -703,10 +662,10 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã¿ã
- *  æå¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°
- */
-
-/*
- *  tcp_read_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèª­ã¿åºãã
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能のみが
+ *  有効の場合は何もしないためのダミーの関数
+ */
+
+/*
+ *  tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。
  */
 
@@ -721,10 +680,10 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã
- *  ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°
- */
-
-/*
- *  tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ã­ã¥ã¼ãè§£æ¾ããã
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能が
+ *  無効の場合は何もしないためのダミーの関数
+ */
+
+/*
+ *  tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。
  */
 
@@ -735,5 +694,5 @@
 
 /*
- *  tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæç¤ºããã
+ *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
  */
 
@@ -744,5 +703,5 @@
 
 /*
- *  tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããã
+ *  tcp_push_res_nbuf -- ネットワークバッファを予約する。
  */
 
@@ -754,5 +713,5 @@
 
 /*
- *  tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãã
+ *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。
  */
 
@@ -766,5 +725,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã­
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ
  */
 
@@ -800,5 +759,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã­
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ
  */
 
@@ -851,5 +810,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -886,10 +845,10 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°
- */
-
-/*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã
- *  é¢æ°ã®é¸æã«ä½¿ç¨ããã
+ *  TCP 通信端点の受信ウィンドバッファ用関数
+ */
+
+/*
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、
+ *  関数の選択に使用する。
  */
 
@@ -901,5 +860,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°
+ *  TCP 通信端点の受信ウィンドバッファの省コピー機能用関数
  */
 
@@ -911,5 +870,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°
+ *  TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数
  */
 
@@ -921,10 +880,10 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°
- */
-
-/*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã
- *  é¢æ°ã®é¸æã«ä½¿ç¨ããã
+ *  TCP 通信端点の送信ウィンドバッファ用関数
+ */
+
+/*
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、
+ *  関数の選択に使用する。
  */
 
@@ -943,5 +902,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°
+ *  TCP 通信端点の送信ウィンドバッファの省コピー機能用関数
  */
 
@@ -957,5 +916,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°
+ *  TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数
  */
 
@@ -973,10 +932,10 @@
 
 /*
- *  TCP ãããã®ãã¬ã¼ã¹åºåæ©è½ç¨é¢æ°
+ *  TCP ヘッダのトレース出力機能用関数
  */
 extern void tcp_output_trace (T_NET_BUF *output, T_TCP_CEP *cep);
 extern void tcp_input_trace  (T_NET_BUF *input,  T_TCP_CEP *cep);
 
-/* TCP åºåã¿ã¹ã¯ */
+/* TCP 出力タスク */
 
 extern void	tcp_output_task(intptr_t exinf);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -85,5 +73,5 @@
 
 /*
- *  tcp_cre_rep -- TCP åä»å£ã®çæãæ¡å¼µæ©è½ã
+ *  tcp_cre_rep -- TCP 受付口の生成【拡張機能】
  */
 
@@ -96,9 +84,9 @@
 	ER		error;
 
-	/* TCP åä»å£ ID ããã§ãã¯ããã*/
+	/* TCP 受付口 ID をチェックする。*/
 	if (!VALID_TCP_REPID(repid))
 		return E_ID;
 
-	/* pk_crep ã NULL ãªãã¨ã©ã¼ */
+	/* pk_crep が NULL ならエラー */
 	if (pk_crep == NULL)
 		return E_PAR;
@@ -107,6 +95,6 @@
 
 	/*
-	 * API ã IPv6 ã§ IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼
+	 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、
+	 * IPv4 射影アドレスが指定されたらエラー
 	 */
 	if (in6_is_addr_ipv4mapped(&pk_crep->myaddr.ipaddr))
@@ -115,16 +103,16 @@
 #endif	/* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */
 
-	/* TCP åä»å£ãå¾ãã*/
+	/* TCP 受付口を得る。*/
 	rep = GET_TCP_REP(repid);
 
-	/* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼ */
+	/* TCP 受付口が、動的生成用でなければエラー */
 	if (!DYNAMIC_TCP_REP(rep))
 		return E_ID;
 
-	/* åä»å£ãã­ãã¯ããã*/
+	/* 受付口をロックする。*/
 	syscall(wai_sem(rep->semid_lock));
 
 	/*
-	 * TCP åä»å£ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼
+	 * TCP 受付口をチェックする。生成済みであればエラー
 	 */
 	if (VALID_TCP_REP(rep))
@@ -132,16 +120,15 @@
 	else {
 
-		/* TCP åä»å£çææ
-å ±ãã³ãã¼ããã*/
-		rep->repatr = pk_crep->repatr;			/* åä»å£å±æ§		*/
-		rep->myaddr.ipaddr = pk_crep->myaddr.ipaddr;	/* èªåã®ã¢ãã¬ã¹	*/
-		rep->myaddr.portno = pk_crep->myaddr.portno;	/* èªåã®ã¢ãã¬ã¹	*/
-
-		/* TCP åä»å£ãçææ¸ã¿ã«ããã*/
+		/* TCP 受付口生成情報をコピーする。*/
+		rep->repatr = pk_crep->repatr;			/* 受付口属性		*/
+		rep->myaddr.ipaddr = pk_crep->myaddr.ipaddr;	/* 自分のアドレス	*/
+		rep->myaddr.portno = pk_crep->myaddr.portno;	/* 自分のアドレス	*/
+
+		/* TCP 受付口を生成済みにする。*/
 		rep->flags |= TCP_REP_FLG_VALID;
 		error = E_OK;
 		}
 
-	/* åä»å£ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 受付口のロックを解除する。*/
 	syscall(sig_sem(rep->semid_lock));
 
@@ -154,5 +141,5 @@
 
 /*
- *  tcp_find_cep_rep -- TCP åä»å£ããªã³ã¯ãã¦ãã TCP éä¿¡ç«¯ç¹ãå¾ãã
+ *  tcp_find_cep_rep -- TCP 受付口をリンクしている TCP 通信端点を得る。
  */
 
@@ -176,5 +163,5 @@
 
 /*
- *  tcp_del_rep_body -- TCP åä»å£ã®åé¤ãæ¡å¼µæ©è½ãã®æ¬ä½
+ *  tcp_del_rep_body -- TCP 受付口の削除【拡張機能】の本体
  */
 
@@ -186,17 +173,17 @@
 	ER		error = E_OK;
 
-	/* TCP åä»å£ ID ã®ãã§ãã¯ã¯çµäºãã¦ããã*/
-
-	/* TCP åä»å£ãå¾ãã*/
+	/* TCP 受付口 ID のチェックは終了している。*/
+
+	/* TCP 受付口を得る。*/
 	rep = GET_TCP_REP(repid);
 
-	/* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼ */
+	/* TCP 受付口が、動的生成用でなければエラー */
 	if (!DYNAMIC_TCP_REP(rep))
 		return E_ID;
 
-	/* åä»å£ãã­ãã¯ããã*/
+	/* 受付口をロックする。*/
 	syscall(wai_sem(rep->semid_lock));
 
-	/* TCP åä»å£ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼ */
+	/* TCP 受付口をチェックする。未生成の場合はエラー */
 	if (!VALID_TCP_REP(rep))
 		error = E_NOEXS;
@@ -204,15 +191,15 @@
 		if ((cep = TCP_FIND_CEP_REP(rep)) != NULL) {
 			/*
-			 * ãã§ã«ååãªã¼ãã³ãã¦ããã¨ã
-			 *ï¼tcp_acp_cep ãå¼ã°ãã¦ããã¨ãï¼ã¯ã
-			 * tcp_acp_cep ãçµäºãããã
+			 * すでに受動オープンしているとき
+			 *（tcp_acp_cep が呼ばれているとき）は、
+			 * tcp_acp_cep を終了させる。
 			 */
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+			/* 通信端点をロックする。*/
 			syscall(wai_sem(cep->semid_lock));
 
 			/*
-			 *  éä¿¡ç«¯ç¹ããåä»å£ãè§£æ¾ãã
-			 *  ã¤ãã³ããã©ã°ãã¯ã­ã¼ãºã«è¨­å®ããã
+			 *  通信端点から受付口を解放し、
+			 *  イベントフラグをクローズに設定する。
 			 */
 			cep->rep = NULL;
@@ -254,5 +241,5 @@
 			cep->rcv_tfn   = TFN_TCP_UNDEF;
 
-			/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+			/* 通信端点のロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 
@@ -261,9 +248,9 @@
 			error = E_OK;
 
-		/* TCP åä»å£ãæªçæã«ããã*/
+		/* TCP 受付口を未生成にする。*/
 		rep->flags &= ~TCP_REP_FLG_VALID;
 		}
 
-	/* åä»å£ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 受付口のロックを解除する。*/
 	syscall(sig_sem(rep->semid_lock));
 
@@ -280,6 +267,5 @@
 
 /*
- *  tcp_acp_cep -- æ¥ç¶è¦æ±å¾
-ã¡ (ååãªã¼ãã³)ãæ¨æºæ©è½ã
+ *  tcp_acp_cep -- 接続要求待ち (受動オープン)【標準機能】
  */
 
@@ -297,6 +283,6 @@
 
 	/*
-	 * API (tcp6_acp_cep ã¨ tcp_acp_cep) ã¨ã
-	 * TCPéä¿¡ç«¯ç¹ã®ãã­ãã³ã«ãçç¾ãã¦ããã°ã¨ã©ã¼
+	 * API (tcp6_acp_cep と tcp_acp_cep) と、
+	 * TCP通信端点のプロトコルが矛盾していればエラー
 	 */
 
@@ -317,5 +303,5 @@
 #endif	/* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
 
-	/* TCP åä»å£ããã§ãã¯ããã*/
+	/* TCP 受付口をチェックする。*/
 	if (!VALID_TCP_REPID(repid))
 		return E_ID;
@@ -323,5 +309,5 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* p_dstaddr ã NULL ãªãã¨ã©ã¼ */
+	/* p_dstaddr が NULL ならエラー */
 	if (p_dstaddr == NULL)
 		return E_PAR;
@@ -329,5 +315,5 @@
 #else	/* of #ifdef TCP_CFG_NON_BLOCKING */
 
-	/* p_dstaddr ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* p_dstaddr が NULL か、tmout が TMO_NBLK ならエラー */
 	if (p_dstaddr == NULL || tmout == TMO_NBLK)
 		return E_PAR;
@@ -338,6 +324,6 @@
 
 	/*
-	 * API ã IPv6 ã§ IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼
+	 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、
+	 * IPv4 射影アドレスが指定されたらエラー
 	 */
 	if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr))
@@ -347,12 +333,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_ACP_CEP)) != E_OK)
 		return error;
 
-	/* CEP ã® FSM ãã¯ã­ã¼ãºç¶æ
-ã§ãªããã°ã¨ã©ã¼ã*/
+	/* CEP の FSM がクローズ状態でなければエラー。*/
 	if (cep->fsm_state != TCP_FSM_CLOSED) {
 		error = E_OBJ;
@@ -361,8 +346,8 @@
 	syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED)));
 
-	/* TCP éä¿¡ç«¯ç¹ãåæåããã*/
+	/* TCP 通信端点を初期化する。*/
 	tcp_init_cep(cep);
 
-	/* TCP åä»å£ãå¾ãã*/
+	/* TCP 受付口を得る。*/
 
 	rep = GET_TCP_REP(repid);
@@ -370,8 +355,8 @@
 #ifdef TCP_CFG_EXTENTIONS
 
-	/* TCP åä»å£ãã­ãã¯ããã*/
+	/* TCP 受付口をロックする。*/
 	syscall(wai_sem(rep->semid_lock));
 
-	/* TCP åä»å£ããã§ãã¯ããã*/
+	/* TCP 受付口をチェックする。*/
 	if (!VALID_TCP_REP(rep)) {
 		syscall(sig_sem(rep->semid_lock));
@@ -382,5 +367,5 @@
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
-	/* TCP éä¿¡ç«¯ç¹ã«TCPåä»å£ãè¨é²ããã*/
+	/* TCP 通信端点にTCP受付口を記録する。*/
 
 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
@@ -404,10 +389,10 @@
 #ifdef TCP_CFG_EXTENTIONS
 
-	/* TCP åä»å£ã®ã­ãã¯ãè§£é¤ããã*/
+	/* TCP 受付口のロックを解除する。*/
 	syscall(sig_sem(rep->semid_lock));
 
 #endif	/* of #ifdef TCP_CFG_EXTENTIONS */
 
-	/* TCP åä»å£ã®ã¢ãã¬ã¹ãã³ãã¼ããã*/
+	/* TCP 受付口のアドレスをコピーする。*/
 
 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && (API_PROTO == API_PROTO_IPV4)
@@ -428,17 +413,17 @@
 #if API_PROTO == API_PROTO_IPV4
 
-	/* TCP éä¿¡ç«¯ç¹ã®ãããã¯ã¼ã¯å±¤ãã­ãã³ã«ãè¨­å®ããã*/
+	/* TCP 通信端点のネットワーク層プロトコルを設定する。*/
 	cep->flags |= TCP_CEP_FLG_IPV4;
 
 #endif	/* of #if API_PROTO == API_PROTO_IPV4 */
 
-	/* éä¿¡ç«¯ç¹ãè¨­å®ããã*/
+	/* 通信端点を設定する。*/
 	cep->fsm_state = TCP_FSM_LISTEN;
 
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
+	/* タイムアウトをチェックする。*/
 	if (tmout == TMO_NBLK) {
-		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		/* ノンブロッキングコール */
 
 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
@@ -470,7 +455,6 @@
 
 		/*
-		 *  FSM ã ESTABLISHED ã«ãªãã¾ã§å¾
-ã¤ã
-		 *  FSM ã CLOSED ã«ãªã£ãå ´åã¯ãã¨ã©ã¼ãçºçãããã¨ãæå³ãã¦ããã
+		 *  FSM が ESTABLISHED になるまで待つ。
+		 *  FSM が CLOSED になった場合は、エラーが発生したことを意味している。
 		 */
 		error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED |
@@ -486,5 +470,5 @@
 
 		if (error == E_OK) {
-			/* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/
+			/* 相手のアドレスをコピーする。*/
 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && (API_PROTO == API_PROTO_IPV4)
 			p_dstaddr->ipaddr = ntohl(cep->dstaddr.ipaddr.s6_addr32[3]);
@@ -496,6 +480,6 @@
 		else {
 			/*
-			 *  éä¿¡ç«¯ç¹ããåä»å£ãè§£æ¾ãã
-			 *  ã¤ãã³ããã©ã°ãã¯ã­ã¼ãºã«è¨­å®ããã
+			 *  通信端点から受付口を解放し、
+			 *  イベントフラグをクローズに設定する。
 			 */
 			cep->rep = NULL;
@@ -526,5 +510,5 @@
 
 /*
- *  tcp_con_cep -- æ¥ç¶è¦æ± (è½åãªã¼ãã³)ãæ¨æºæ©è½ã
+ *  tcp_con_cep -- 接続要求 (能動オープン)【標準機能】
  */
 
@@ -541,6 +525,6 @@
 
 	/*
-	 * API (tcp6_acp_cep ã¨ tcp_acp_cep) ã¨ã
-	 * TCPéä¿¡ç«¯ç¹ã®ãã­ãã³ã«ãçç¾ãã¦ããã°ã¨ã©ã¼
+	 * API (tcp6_acp_cep と tcp_acp_cep) と、
+	 * TCP通信端点のプロトコルが矛盾していればエラー
 	 */
 
@@ -562,6 +546,5 @@
 
 	/*
-	 *  ãã¦å
-ããã«ãã­ã£ã¹ãã¢ãã¬ã¹ãªãã¨ã©ã¼
+	 *  あて先がマルチキャストアドレスならエラー
 	 */
 
@@ -581,6 +564,6 @@
 
 	/*
-	 * API ã IPv6 ã§ IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼
+	 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、
+	 * IPv4 射影アドレスが指定されたらエラー
 	 */
 	if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr))
@@ -592,5 +575,5 @@
 
 	/*
-	 *  p_dstaddr ã¾ãã¯ p_myaddr ã NULL ãªãã¨ã©ã¼
+	 *  p_dstaddr または p_myaddr が NULL ならエラー
 	 */
 	if (p_myaddr == NULL || p_dstaddr == NULL)
@@ -600,6 +583,6 @@
 
 	/*
-	 *  p_dstaddr ã¾ãã¯ p_myaddr ã NULL ã
-	 *  tmout ã TMO_NBLK ãªãã¨ã©ã¼
+	 *  p_dstaddr または p_myaddr が NULL 、
+	 *  tmout が TMO_NBLK ならエラー
 	 */
 	if (p_myaddr == NULL || p_dstaddr == NULL || tmout == TMO_NBLK)
@@ -609,12 +592,11 @@
 
 	/*
-	 *  CEP ãã­ãã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯è­å¥å­ãè¨é²ããã
-	 *  ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸­ãªã®ã§ã¨ã©ã¼
+	 *  CEP をロックし、API 機能コードとタスク識別子を記録する。
+	 *  すでに記録されていれば、ペンディング中なのでエラー
 	 */
 	if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CON_CEP)) != E_OK)
 		return error;
 
-	/* CEP ã® FSM ãã¯ã­ã¼ãºç¶æ
-ã§ãªããã°ã¨ã©ã¼ã*/
+	/* CEP の FSM がクローズ状態でなければエラー。*/
 	if (cep->fsm_state != TCP_FSM_CLOSED) {
 		error = E_OBJ;
@@ -623,15 +605,15 @@
 	syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED)));
 
-	/* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/
+	/* シーケンス番号を初期化する。*/
 	if (tcp_iss == 0)
 		tcp_init_iss();
 
-	/* éä¿¡ç«¯ç¹ãåæåããã*/
+	/* 通信端点を初期化する。*/
 	tcp_init_cep(cep);
 
 	/*
-	 *  IP ã¢ãã¬ã¹ãè¨­å®ããã
-	 *  p_myaddr ã NADR (-1) ã§ã¯ãªããèª IP ã¢ãã¬ã¹ã ANY ã§ãªããã°ã
-	 *  æå®ããã IP ã¢ãã¬ã¹ãå²ãå½ã¦ãã
+	 *  IP アドレスを設定する。
+	 *  p_myaddr が NADR (-1) ではなく、自 IP アドレスが ANY でなければ、
+	 *  指定された IP アドレスを割り当てる。
 	 */
 
@@ -663,10 +645,10 @@
 #if API_PROTO == API_PROTO_IPV4
 
-	/* TCP éä¿¡ç«¯ç¹ã®ãããã¯ã¼ã¯å±¤ãã­ãã³ã«ãè¨­å®ããã*/
+	/* TCP 通信端点のネットワーク層プロトコルを設定する。*/
 	cep->flags |= TCP_CEP_FLG_IPV4;
 
 #endif	/* of #if API_PROTO == API_PROTO_IPV4 */
 
-	/* éä¿¡ç«¯ç¹ãè¨­å®ããã*/
+	/* 通信端点を設定する。*/
 	//NET_DEBUG_TCP5("tcp_con_cep3[c=%d,d=%lI.%d,s=%lI.%d]\n",
 	cep->fsm_state = TCP_FSM_SYN_SENT;
@@ -678,7 +660,7 @@
 #ifdef TCP_CFG_NON_BLOCKING
 
-	/* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/
+	/* タイムアウトをチェックする。*/
 	if (tmout == TMO_NBLK) {
-		/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+		/* ノンブロッキングコール */
 
 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
@@ -709,5 +691,5 @@
 		cep->snd_nblk_tfn = TFN_TCP_CON_CEP;
 
-		/* ã³ãã¯ã·ã§ã³ã®éè¨­ããã¹ãããã*/
+		/* コネクションの開設をポストする。*/
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
@@ -719,6 +701,6 @@
 
 		/*
-		 *  p_myaddr ã NADR (-1) ãã
-		 *  èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã
+		 *  p_myaddr が NADR (-1) か、
+		 *  自ポート番号が TCP_PORTANY なら、自動で割り当てる。
 		 */
 		if (p_myaddr == NADR || p_myaddr->portno == TCP_PORTANY)
@@ -727,13 +709,12 @@
 			goto err_ret;
 
-		/* ã³ãã¯ã·ã§ã³ã®éè¨­ããã¹ãããã*/
+		/* コネクションの開設をポストする。*/
 		cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
 		sig_sem(SEM_TCP_POST_OUTPUT);
 
 		/*
-		 *  ã¤ãã³ãã ESTABLISHED ã«ãªãã¾ã§å¾
-ã¤ã
-		 *  ã¤ãã³ãã CLOSED ã«ãªã£ãå ´åã¯ãä½ããã®ã¨ã©ã¼ãçºçãããã
-		 *  æ¥ç¶è¦æ±ãæå¦ããããã¨ãæå³ãã¦ããã
+		 *  イベントが ESTABLISHED になるまで待つ。
+		 *  イベントが CLOSED になった場合は、何らかのエラーが発生したか、
+		 *  接続要求が拒否されたことを意味している。
 		 */
 		error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED |
@@ -750,6 +731,6 @@
 		if (error != E_OK) {
 			/*
-			 *  éä¿¡ç«¯ç¹ããåä»å£ãè§£æ¾ãã
-			 *  ã¤ãã³ããã©ã°ãã¯ã­ã¼ãºã«è¨­å®ããã
+			 *  通信端点から受付口を解放し、
+			 *  イベントフラグをクローズに設定する。
 			 */
 			cep->rep = NULL;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  UDP ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã
+ *  UDP で使用するカーネルオブジェクト
  */
 
@@ -51,5 +39,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ãè¡ãå ´åã«çµã¿è¾¼ãã¿ã¹ã¯ã¨ã»ããã©
+ *  ノンブロッキングコールを行う場合に組み込むタスクとセマフォ
  */
 
@@ -65,5 +53,5 @@
 	});
 
-/* ã»ããã© */
+/* セマフォ */
 
 CRE_SEM(SEM_UDP_POST_OUTPUT,	{ TA_TPRI, 0, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,16 +72,13 @@
 
 /*
- *  UDP ããããRFC768 åç
-§
+ *  UDP ヘッダ、RFC768 参照
  */
 
 typedef struct t_udp_hdr {
-	uint16_t	sport;		/* éä¿¡å
-ãã¼ãçªå·	*/
-	uint16_t	dport;		/* å®å
-ãã¼ãçªå·	*/
+	uint16_t	sport;		/* 送信元ポート番号	*/
+	uint16_t	dport;		/* 宛先ポート番号	*/
 
-	uint16_t	ulen;		/* ãã¼ã¿ã°ã©ã é·	*/
-	uint16_t	sum;		/* ãã§ãã¯ãµã 		*/
+	uint16_t	ulen;		/* データグラム長	*/
+	uint16_t	sum;		/* チェックサム		*/
 	} __attribute__((packed, aligned(2)))T_UDP_HDR;
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -78,6 +66,5 @@
 
 /*
- *  udp_reply_no_port -- éä¿¡å
-ã«ãã¼ããå®ç¾©ããã¦ããªããã¨ãéç¥ããã
+ *  udp_reply_no_port -- 送信元にポートが定義されていないことを通知する。
  */
 
@@ -91,10 +78,10 @@
 	NET_COUNT_MIB(udp_stats.udpNoPorts, 1);
 
-	/* ã­ã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/
+	/* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
 	if (ntohl(GET_IP4_HDR(input)->dst) == IF_GET_IFNET()->in4_ifaddr.addr) {
 		syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport));
 
 		icmp_error(ICMP4_UNREACH_PORT, input);
-		/* icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ä¸ã¸æããã*/
+		/* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/
 	
 		}
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -86,12 +74,10 @@
 #ifdef ETHER_CFG_MULTICAST
 /*
- *  udp4_is_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udp4_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ãä»¥ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    DHCP_CFG が定義されているときは、以下のデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
- *      ã»ã­ã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾©
+ *      ・あて先アドレスがブロードキャスト
+ *      ・ローカルアドレスが未定義
  */
 
@@ -116,12 +102,10 @@
 #else
 /*
- *  udp4_is_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udp4_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ãä»¥ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    DHCP_CFG が定義されているときは、以下のデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
- *      ã»ã­ã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾©
+ *      ・あて先アドレスがブロードキャスト
+ *      ・ローカルアドレスが未定義
  */
 
@@ -146,11 +130,9 @@
 
 /*
- *  udp_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    ä»¥ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    以下の場合もデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
+ *      ・あて先アドレスがブロードキャスト
  */
 
@@ -176,11 +158,9 @@
 
 /*
- *  udp4_is_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udp4_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    ä»¥ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    以下の場合もデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
+ *      ・あて先アドレスがブロードキャスト
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -125,6 +113,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -134,5 +121,5 @@
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_output.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_output.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_output.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -124,5 +112,5 @@
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
@@ -166,6 +154,6 @@
 
 /*
- *  UDP åºåã¿ã¹ã¯
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ãçµã¿è¾¼ãã ã¨ãä½¿ç¨ããã
+ *  UDP 出力タスク
+ *  ノンブロッキングコールを組み込んだとき使用する。
  */
 
@@ -182,5 +170,5 @@
 #if defined(_IP6_CFG) && !defined(SUPPORT_TCP)
 
-	/* IPv6 ã®ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨­å®ãå®è¡ããã*/
+	/* IPv6 のステートレス・アドレス自動設定を実行する。*/
 	in6_if_up(IF_GET_IFNET());
 
@@ -189,6 +177,5 @@
 	while (true) {
 
-		/* åºåããã¹ããããã¾ã§å¾
-ã¤ã*/
+		/* 出力がポストされるまで待つ。*/
 		syscall(wai_sem(SEM_UDP_POST_OUTPUT));
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -126,15 +114,15 @@
 
 /*
- *  å±æå¤æ°
+ *  局所変数
  */
 
 #if (defined(_IP6_CFG) && TNUM_UDP6_CEPID > 0) || (defined(_IP4_CFG) && TNUM_UDP4_CEPID > 0)
 
-static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO;	/* èªåå²ãå½ã¦çªå·	*/
+static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO;	/* 自動割り当て番号	*/
 
 #endif	/* of #if (defined(_IP6_CFG) && TNUM_UDP6_CEPID > 0) || (defined(_IP4_CFG) && TNUM_UDP4_CEPID > 0) */
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_usrreq.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_usrreq.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_usrreq.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,5 +69,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ãçµè¾¼ã¾ãªãå ´åã«ãªã³ã¯ãããé¢æ°ã®å®ç¾©
+ *  ノンブロッキングコールを組込まない場合にリンクされる関数の定義
  */
 
@@ -128,7 +116,6 @@
 
 /*
- *  TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå
-¨ã¦ã®æ©è½ã
- *  ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ã­ãæå¹ã«ããã
+ *  TINET をライブラリ化しない場合は、全ての機能を
+ *  オブジェクトファイルに出力するため、マクロを有効にする。
  */
 
@@ -149,5 +136,5 @@
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
@@ -252,5 +239,5 @@
 
 /*
- *  udp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ã­ã£ã³ã»ã«ãæ¨æºæ©è½ã
+ *  udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
  */
 
@@ -260,15 +247,15 @@
 udp_can_cep (ID cepid, FN fncd)
 {
-	/* IPv6 ç¨ã® UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* IPv6 用の UDP 通信端点 ID をチェックする。*/
 	if (VALID_UDP6_CEPID(cepid)) {
 
-		/* UDP éä¿¡ç«¯ç¹ãå¾ã¦ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/
+		/* UDP 通信端点を得てメイン関数を呼び出す。*/
 		return udp6_cancel_cep(GET_UDP6_CEP(cepid), fncd);
 		}
 
-	/* IPv4 ç¨ã® UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* IPv4 用の UDP 通信端点 ID をチェックする。*/
 	else if (VALID_UDP4_CEPID(cepid)) {
 
-		/* UDP éä¿¡ç«¯ç¹ãå¾ã¦ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/
+		/* UDP 通信端点を得てメイン関数を呼び出す。*/
 		return udp4_cancel_cep(GET_UDP4_CEP(cepid), fncd);
 		}
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_usrreq_nblk.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_usrreq_nblk.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_usrreq_nblk.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -125,7 +113,6 @@
 
 /*
- *  TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå
-¨ã¦ã®æ©è½ã
- *  ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ã­ãæå¹ã«ããã
+ *  TINET をライブラリ化しない場合は、全ての機能を
+ *  オブジェクトファイルに出力するため、マクロを有効にする。
  */
 
@@ -142,5 +129,5 @@
 
 /*
- *  IPv6 ã¨ IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«
+ *  IPv6 と IPv4 で引数が異なる関数のコンパイル
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -84,5 +72,5 @@
 
 /*
- *  UDP ãããã»ãã¤ã­ã¼ãã¢ã¯ã»ã¹ãã¯ã­
+ *  UDP ヘッダ・ペイロードアクセスマクロ
  */
 
@@ -95,5 +83,5 @@
 
 /*
- *  TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.1 との互換性のための定義
  */
 
@@ -108,5 +96,5 @@
 
 /*
- *  ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©
+ *  コールバック関数の定義
  */
 
@@ -124,44 +112,41 @@
 
 /*
- *  UDP éä¿¡ç«¯ç¹
- */
-
-/* IPv6 ç¨ UDP éä¿¡ç«¯ç¹ */
+ *  UDP 通信端点
+ */
+
+/* IPv6 用 UDP 通信端点 */
 
 typedef struct t_udp6_cep {
 
 	/*
-	 * ITRON TCP/IP APIãTCP éä¿¡ç«¯ç¹ã¨åãã¡ã³ã
+	 * ITRON TCP/IP API、TCP 通信端点と同じメンバ
 	 */
-	ATR		cepatr;		/* UDP éä¿¡ç«¯ç¹å±æ§		*/
-	T_IPV6EP	myaddr;		/* èªåã®ã¢ãã¬ã¹		*/
-	t_udp_callback	callback;	/* ã³ã¼ã«ããã¯é¢æ°		*/
+	ATR		cepatr;		/* UDP 通信端点属性		*/
+	T_IPV6EP	myaddr;		/* 自分のアドレス		*/
+	t_udp_callback	callback;	/* コールバック関数		*/
 
 	/*
-	 * TINET ç¬èªã®ã¡ã³ã
+	 * TINET 独自のメンバ
 	 */
-	uint16_t	flags;		/* éä¿¡ç«¯ç¹ãã©ã°		*/
-	ID		semid_lock;	/* éä¿¡ç«¯ç¹ã­ãã¯		*/
-	ID		snd_tskid;	/* éä¿¡ã¿ã¹ã¯è­å¥å­		*/
-	ID		rcv_tskid;	/* åä¿¡ã¿ã¹ã¯è­å¥å­		*/
-	ID		rcvqid;		/* éã³ã¼ã«ããã¯ç¨åä¿¡ã­ã¥ã¼è­å¥å­*/
-	T_NET_BUF	*cb_netbuf;	/* ã³ã¼ã«ããã¯ç¨åä¿¡ãããã¯ã¼ã¯ãããã¡*/
+	uint16_t	flags;		/* 通信端点フラグ		*/
+	ID		semid_lock;	/* 通信端点ロック		*/
+	ID		snd_tskid;	/* 送信タスク識別子		*/
+	ID		rcv_tskid;	/* 受信タスク識別子		*/
+	ID		rcvqid;		/* 非コールバック用受信キュー識別子*/
+	T_NET_BUF	*cb_netbuf;	/* コールバック用受信ネットワークバッファ*/
 
 #ifdef UDP_CFG_NON_BLOCKING
 
-	T_IPV6EP 	*snd_p_dstaddr;	/* éä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/
-	T_IPV6EP 	*rcv_p_dstaddr;	/* åä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/
-	void		*snd_data;	/* éä¿¡ãã¼ã¿é åã®å
-é ­ã¢ãã¬ã¹	*/
-	int_t		snd_len;	/* éä¿¡ãã¼ã¿é åã®é·ã		*/
-	void		*rcv_data;	/* åä¿¡ãã¼ã¿é åã®å
-é ­ã¢ãã¬ã¹	*/
-	int_t		rcv_len;	/* åä¿¡ãã¼ã¿é åã®é·ã		*/
+	T_IPV6EP 	*snd_p_dstaddr;	/* 送信相手のアドレスへのポインタ*/
+	T_IPV6EP 	*rcv_p_dstaddr;	/* 受信相手のアドレスへのポインタ*/
+	void		*snd_data;	/* 送信データ領域の先頭アドレス	*/
+	int_t		snd_len;	/* 送信データ領域の長さ		*/
+	void		*rcv_data;	/* 受信データ領域の先頭アドレス	*/
+	int_t		rcv_len;	/* 受信データ領域の長さ		*/
 
 #endif	/* of #ifdef UDP_CFG_NON_BLOCKING */
 
 #ifdef UDP_CFG_EXTENTIONS
-	ER		error;		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼	*/
+	ER		error;		/* 待ち中に発生したエラー	*/
 #endif
 
@@ -174,41 +159,38 @@
 	} T_UDP6_CEP;
 
-/* IPv4 ç¨ UDP éä¿¡ç«¯ç¹ */
+/* IPv4 用 UDP 通信端点 */
 
 typedef struct t_udp4_cep {
 
 	/*
-	 * ITRON TCP/IP APIãTCP éä¿¡ç«¯ç¹ã¨åãã¡ã³ã
+	 * ITRON TCP/IP API、TCP 通信端点と同じメンバ
 	 */
-	ATR		cepatr;		/* UDP éä¿¡ç«¯ç¹å±æ§		*/
-	T_IPV4EP	myaddr;		/* èªåã®ã¢ãã¬ã¹		*/
-	t_udp_callback	callback;	/* ã³ã¼ã«ããã¯é¢æ°		*/
+	ATR		cepatr;		/* UDP 通信端点属性		*/
+	T_IPV4EP	myaddr;		/* 自分のアドレス		*/
+	t_udp_callback	callback;	/* コールバック関数		*/
 
 	/*
-	 * TINET ç¬èªã®ã¡ã³ã
+	 * TINET 独自のメンバ
 	 */
-	uint16_t	flags;		/* éä¿¡ç«¯ç¹ãã©ã°		*/
-	ID		semid_lock;	/* éä¿¡ç«¯ç¹ã­ãã¯		*/
-	ID		snd_tskid;	/* éä¿¡ã¿ã¹ã¯è­å¥å­		*/
-	ID		rcv_tskid;	/* åä¿¡ã¿ã¹ã¯è­å¥å­		*/
-	ID		rcvqid;		/* éã³ã¼ã«ããã¯ç¨åä¿¡ã­ã¥ã¼è­å¥å­*/
-	T_NET_BUF	*cb_netbuf;	/* ã³ã¼ã«ããã¯ç¨åä¿¡ãããã¯ã¼ã¯ãããã¡*/
+	uint16_t	flags;		/* 通信端点フラグ		*/
+	ID		semid_lock;	/* 通信端点ロック		*/
+	ID		snd_tskid;	/* 送信タスク識別子		*/
+	ID		rcv_tskid;	/* 受信タスク識別子		*/
+	ID		rcvqid;		/* 非コールバック用受信キュー識別子*/
+	T_NET_BUF	*cb_netbuf;	/* コールバック用受信ネットワークバッファ*/
 
 #ifdef UDP_CFG_NON_BLOCKING
 
-	T_IPV4EP 	*snd_p_dstaddr;	/* éä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/
-	T_IPV4EP	*rcv_p_dstaddr;	/* åä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/
-	void		*snd_data;	/* éä¿¡ãã¼ã¿é åã®å
-é ­ã¢ãã¬ã¹	*/
-	int_t		snd_len;	/* éä¿¡ãã¼ã¿é åã®é·ã		*/
-	void		*rcv_data;	/* åä¿¡ãã¼ã¿é åã®å
-é ­ã¢ãã¬ã¹	*/
-	int_t		rcv_len;	/* åä¿¡ãã¼ã¿é åã®é·ã		*/
+	T_IPV4EP 	*snd_p_dstaddr;	/* 送信相手のアドレスへのポインタ*/
+	T_IPV4EP	*rcv_p_dstaddr;	/* 受信相手のアドレスへのポインタ*/
+	void		*snd_data;	/* 送信データ領域の先頭アドレス	*/
+	int_t		snd_len;	/* 送信データ領域の長さ		*/
+	void		*rcv_data;	/* 受信データ領域の先頭アドレス	*/
+	int_t		rcv_len;	/* 受信データ領域の長さ		*/
 
 #endif	/* of #ifdef UDP_CFG_NON_BLOCKING */
 
 #ifdef UDP_CFG_EXTENTIONS
-	ER		error;		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼	*/
+	ER		error;		/* 待ち中に発生したエラー	*/
 #endif
 
@@ -236,22 +218,21 @@
 
 /*
- *  UDP éä¿¡ç«¯ç¹ãã©ã°
- */
-
-#define UDP_CEP_FLG_POST_OUTPUT	UINT_C(0x0200)	/* éä¿¡ãéå§ããã		*/
-#define UDP_CEP_FLG_DYNAMIC	UINT_C(0x0400)	/* åççæã»åé¤å¯è½éä¿¡ç«¯ç¹ã	*/
-#define UDP_CEP_FLG_VALID	UINT_C(0x0800)	/* çææ¸ã¿ã§æå¹ãªéä¿¡ç«¯ç¹ã	*/
-
-/*
- *  ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾©
- */
-
-#define	TMIN_UDP_CEPID		1			/* UDP      éä¿¡ç«¯ç¹ ID ã®æå°å¤ */
-#define	TMIN_UDP6_CEPID		1			/* UDP/IPv6 éä¿¡ç«¯ç¹ ID ã®æå°å¤ */
-#define	TMIN_UDP4_CEPID		(TNUM_UDP6_CEPID+1)	/* UDP/IPv4 éä¿¡ç«¯ç¹ ID ã®æå°å¤ */
-
-/*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  UDP 通信端点フラグ
+ */
+
+#define UDP_CEP_FLG_POST_OUTPUT	UINT_C(0x0200)	/* 送信を開始する。		*/
+#define UDP_CEP_FLG_DYNAMIC	UINT_C(0x0400)	/* 動的生成・削除可能通信端点。	*/
+#define UDP_CEP_FLG_VALID	UINT_C(0x0800)	/* 生成済みで有効な通信端点。	*/
+
+/*
+ *  オブジェクト ID の最小値の定義
+ */
+
+#define	TMIN_UDP_CEPID		1			/* UDP      通信端点 ID の最小値 */
+#define	TMIN_UDP6_CEPID		1			/* UDP/IPv6 通信端点 ID の最小値 */
+#define	TMIN_UDP4_CEPID		(TNUM_UDP6_CEPID+1)	/* UDP/IPv4 通信端点 ID の最小値 */
+
+/*
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -264,5 +245,5 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -286,11 +267,10 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
 extern T_UDP_STATS udp_stats;
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 extern T_UDP6_CEP udp6_cep[];
@@ -314,5 +294,5 @@
 
 /*
- *  TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.3 との互換性のための定義
  */
 
@@ -321,5 +301,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -350,5 +330,5 @@
 extern void udp4_input_select (T_UDP4_CEP *cep, T_NET_BUF *input, uint_t off);
 
-/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ãè¡ãå ´åã«çµã¿è¾¼ãã¿ã¹ã¯ */
+/* ノンブロッキングコールを行う場合に組み込むタスク */
 
 extern void	udp_output_task(intptr_t exinf);
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,6 +68,5 @@
 
 /*
- *  udp_input_select -- UDP ã®å
-¥åå¦çã®é¸æ
+ *  udp_input_select -- UDP の入力処理の選択
  */
 
@@ -93,5 +80,5 @@
 	para.len  = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE);
 
-	if (cep->rcv_tskid != TA_NULL) {	/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	if (cep->rcv_tskid != TA_NULL) {	/* 非ノンブロッキングコールでペンディング中 */
 		if (psnd_dtq(cep->rcvqid, (intptr_t)input) != E_OK) {
 			NET_COUNT_UDP(net_count_udp.in_err_packets, 1);
@@ -103,11 +90,11 @@
 #ifdef UDP_CFG_NON_BLOCKING
 
-	else if (cep->rcv_p_dstaddr != NULL) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
-
-		/* p_dstaddr ãè¨­å®ããã*/
+	else if (cep->rcv_p_dstaddr != NULL) {	/* ノンブロッキングコールでペンディング中 */
+
+		/* p_dstaddr を設定する。*/
 		cep->rcv_p_dstaddr->portno = ntohs(udph->sport);
 		IN_COPY_TO_HOST(&cep->rcv_p_dstaddr->ipaddr, input);
 
-		/* ãã¼ã¿ããããã¡ã«ç§»ãã*/
+		/* データをバッファに移す。*/
 		memcpy(cep->rcv_data, GET_UDP_SDU(input, off),
 		       (size_t)(para.len < cep->rcv_len ? para.len : cep->rcv_len));
@@ -130,5 +117,5 @@
 	else if (IS_PTR_DEFINED(cep->callback)) {
 
-		/* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/
+		/* コールバック関数を呼び出す。*/
 		cep->cb_netbuf = input;
 
@@ -148,7 +135,6 @@
 #endif
 		/*
-		 *  ãããã¯ã¼ã¯ãããã¡ããã®ã¾ã¾ã§ããã°ãã³ã¼ã«ããã¯é¢æ°å
-ã§
-		 *  ãã¼ã¿ãèª­ã¿åºããªãã£ããã¨ã«ãªãã®ã§ãæ¨ã¦ãã
+		 *  ネットワークバッファがそのままであれば、コールバック関数内で
+		 *  データを読み出さなかったことになるので、捨てる。
 		 */
 		if (cep->cb_netbuf != NULL) {
@@ -169,6 +155,5 @@
 
 /*
- *  udp_input -- UDP ã®å
-¥åé¢æ°
+ *  udp_input -- UDP の入力関数
  */
 
@@ -191,5 +176,5 @@
 	NET_COUNT_MIB(udp_stats.udpInDatagrams, 1);
 
-	/* ãããé·ããã§ãã¯ããã*/
+	/* ヘッダ長をチェックする。*/
 	if (input->len < hlen + UDP_HDR_SIZE)
 		goto buf_rel;
@@ -197,11 +182,10 @@
 	udph = (T_UDP_HDR *)(input->buf + *offp);
 
-	/* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ãã */
+	/* データグラム長をチェックする */
 	ulen  = ntohs(udph->ulen);
 	if (ulen != input->len - hlen)
 		goto buf_rel;
 
-	/* å®å
-ãã¼ãã 0 ã®ãã¼ã¿ã°ã©ã ã¯ç ´æ£ãããRFC768 */
+	/* 宛先ポートが 0 のデータグラムは破棄する。RFC768 */
 	if (udph->dport == 0)
 		goto buf_rel;
@@ -209,5 +193,5 @@
 #ifdef UDP_CFG_IN_CHECKSUM
 
-	/* ãã§ãã¯ãµã ããã§ãã¯ãã */
+	/* チェックサムをチェックする */
 	if (udph->sum && IN_CKSUM(input, IPPROTO_UDP, *offp, ulen) != 0)
 		goto buf_rel;
@@ -219,5 +203,5 @@
 #if TNUM_UDP4_CEPID > 0
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = udp4_find_cep(input, *offp);
 
@@ -233,5 +217,5 @@
 #else	/* of #if TNUM_UDP4_CEPID > 0 */
 
-	cep = 0;	/* warning åé¿ç¨ã®ããã¼ */
+	cep = 0;	/* warning 回避用のダミー */
 	if ((cep6 = udp6_find_cep(input, *offp)) != NULL)
 		udp6_input_select(cep6, input, *offp);
@@ -245,5 +229,5 @@
 #else	/* of #if defined(_IP6_CFG) && defined(_IP4_CFG) && API_PROTO == API_PROTO_IPV4 */
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = UDP_FIND_CEP(input, *offp);
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_output.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_output.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_output.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -78,6 +66,6 @@
 
 /*
- *  udp_output -- UDP ã®åºåé¢æ°
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ãçµã¿è¾¼ãã ã¨ãä½¿ç¨ããã
+ *  udp_output -- UDP の出力関数
+ *  ノンブロッキングコールを組み込んだとき使用する。
  */
 
@@ -93,5 +81,5 @@
 #endif	/* of #ifdef UDP_CFG_OUT_CHECKSUM */
 
-	/* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/
+	/* IP データグラムを割り当てる。*/
 	if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + cep->snd_len), 0,
 	                             &cep->snd_p_dstaddr->ipaddr,
@@ -102,6 +90,5 @@
 		}
 
-	/* UDP ãããã«æ
-å ±ãè¨­å®ããã*/
+	/* UDP ヘッダに情報を設定する。*/
 	udph		= GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET(output));
 	udph->sport	= htons(cep->myaddr.portno);
@@ -110,5 +97,5 @@
 	udph->sum	= 0;
 
-	/* ãã¼ã¿ãã³ãã¼ããã*/
+	/* データをコピーする。*/
 	memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET(output)),
 	       cep->snd_data, (size_t)cep->snd_len);
@@ -119,6 +106,5 @@
 	               (uint_t)(UDP_HDR_SIZE + cep->snd_len));
 
-	/* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå
-¥ããã*/
+	/* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/
 	if (sum == 0)
 		sum = UINT_C(0xffff);
@@ -127,8 +113,8 @@
 #endif/* of #ifdef UDP_CFG_OUT_CHECKSUM */
 
-	/* ãããã¯ã¼ã¯ãããã¡é·ãèª¿æ´ããã*/
+	/* ネットワークバッファ長を調整する。*/
 	output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE(output) + cep->snd_len);
 
-	/* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/
+	/* ネットワーク層 (IP) の出力関数を呼び出す。*/
 	if ((error = IP_OUTPUT(output, TMO_UDP_OUTPUT)) != E_OK)
 		goto err_ret;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -78,5 +66,5 @@
 
 /*
- *  udp_alloc_auto_port -- èªåå²ãå½ã¦ãã¼ãçªå·ãè¨­å®ããã
+ *  udp_alloc_auto_port -- 自動割り当てポート番号を設定する。
  */
 
@@ -114,5 +102,5 @@
 
 /*
- *  udp_alloc_port -- æå®ããããã¼ãçªå·ãè¨­å®ããã
+ *  udp_alloc_port -- 指定されたポート番号を設定する。
  */
 
@@ -134,5 +122,5 @@
 
 /*
- *  udp_find_cep -- ãã¼ãçªå·ãã UDP éä¿¡ç«¯ç¹ãå¾ãã
+ *  udp_find_cep -- ポート番号から UDP 通信端点を得る。
  */
 
@@ -146,5 +134,5 @@
 	
 	/*
-	 *  IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ããéä¿¡ç«¯ç¹ãæ¢ç´¢ããã
+	 *  IP アドレスとポート番号が一致する通信端点を探索する。
 	 */
 	for (cep = &UDP_CEP[TMAX_UDP_CEPID]; cep -- != UDP_CEP; ) {
@@ -159,5 +147,5 @@
 
 /*
- *  udp_notify -- ICMP ã¨ã©ã¼ã®å¦ç
+ *  udp_notify -- ICMP エラーの処理
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -83,5 +71,5 @@
 
 /*
- *  udp_send_data -- ãã±ããéä¿¡ã®ä¸»è¦é¨
+ *  udp_send_data -- パケット送信の主要部
  */
 
@@ -101,9 +89,9 @@
 	NET_COUNT_UDP(net_count_udp.out_packets, 1);
 
-	/* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/
+	/* IP データグラム割り当ての時間を tmout から減ずる。*/
 	if (!(tmout == TMO_POL || tmout == TMO_FEVR))
 		syscall(get_tim(&before));
 
-	/* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/
+	/* IP データグラムを割り当てる。*/
 	if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + len), 0,
 	                             &p_dstaddr->ipaddr,
@@ -113,5 +101,5 @@
 		goto err_ret;
 
-	/* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/
+	/* IP データグラム割り当ての時間を tmout から減ずる。*/
 	if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
 		syscall(get_tim(&after));
@@ -124,6 +112,5 @@
 		}
 
-	/* UDP ãããã«æ
-å ±ãè¨­å®ããã*/
+	/* UDP ヘッダに情報を設定する。*/
 	udph		= GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET(output));
 	udph->sport	= htons(cep->myaddr.portno);
@@ -132,5 +119,5 @@
 	udph->sum	= 0;
 
-	/* ãã¼ã¿ãã³ãã¼ããã*/
+	/* データをコピーする。*/
 	memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET(output)), data, (size_t)len);
 
@@ -139,6 +126,5 @@
 	sum = IN_CKSUM(output, IPPROTO_UDP, IF_IP_UDP_HDR_OFFSET(output), (uint_t)(UDP_HDR_SIZE + len));
 
-	/* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå
-¥ããã*/
+	/* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/
 	if (sum == 0)
 		sum = 0xffff;
@@ -147,8 +133,8 @@
 #endif	/* of #ifdef UDP_CFG_OUT_CHECKSUM */
 
-	/* ãããã¯ã¼ã¯ãããã¡é·ãèª¿æ´ããã*/
+	/* ネットワークバッファ長を調整する。*/
 	output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE(output) + len);
 
-	/* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/
+	/* ネットワーク層 (IP) の出力関数を呼び出す。*/
 	if ((error = IP_OUTPUT(output, tmout)) == E_OK) {
 		NET_COUNT_MIB(udp_stats.udpOutDatagrams, 1);
@@ -166,7 +152,7 @@
 
 /*
- *  udp_cancel_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çãã­ã£ã³ã»ã«ããã
- *
- *    udp_can_cep ããå¼åºãããã¡ã¤ã³é¢æ°
+ *  udp_cancel_cep -- ペンディングしている処理をキャンセルする。
+ *
+ *    udp_can_cep から呼出されるメイン関数
  */
 
@@ -178,16 +164,16 @@
 	ER	error = E_OK, snd_err, rcv_err;
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
 
-	/* API æ©è½ã³ã¼ãããã§ãã¯ããã*/
+	/* API 機能コードをチェックする。*/
 	if (!VALID_TFN_UDP_CAN(fncd))
 		return E_PAR;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
-	if (fncd == TFN_UDP_ALL) {	/* TFN_UDP_ALL ã®å¦ç */
+	if (fncd == TFN_UDP_ALL) {	/* TFN_UDP_ALL の処理 */
 
 		snd_err = UDP_CAN_SND(cep, E_RLWAI);
@@ -195,6 +181,6 @@
 
 		/*
-		 *  snd_err ã¨ rcv_err ã®ã©ã¡ãã EV_NOPND
-		 *  ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼
+		 *  snd_err と rcv_err のどちらも EV_NOPND
+		 *  なら、ペンディングしていないのでエラー
 		 */
 		if (snd_err == EV_NOPND && rcv_err == EV_NOPND)
@@ -212,9 +198,9 @@
 			}
 		}
-	else if (fncd == TFN_UDP_SND_DAT) {	/* éä¿¡å¦çã®ã­ã£ã³ã»ã« */
+	else if (fncd == TFN_UDP_SND_DAT) {	/* 送信処理のキャンセル */
 		if ((error = UDP_CAN_SND(cep, E_RLWAI)) == EV_NOPND)
 			error = E_OBJ;
 		}
-	else if (fncd == TFN_UDP_RCV_DAT) {	/* åä¿¡å¦çã®ã­ã£ã³ã»ã« */
+	else if (fncd == TFN_UDP_RCV_DAT) {	/* 受信処理のキャンセル */
 		if ((error = UDP_CAN_RCV(cep, E_RLWAI)) == EV_NOPND)
 			error = E_OBJ;
@@ -223,5 +209,5 @@
 		error = E_PAR;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点をロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -236,5 +222,5 @@
 
 /*
- *  udp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ã­ã£ã³ã»ã«ãæ¨æºæ©è½ã
+ *  udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
  */
 
@@ -246,12 +232,12 @@
 	T_UDP_CEP	*cep;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/
+	/* メイン関数を呼び出す。*/
 	return UDP_CANCEL_CEP(cep, fncd);
 	}
@@ -264,5 +250,5 @@
 
 /*
- *  udp_cre_cep -- UDP éä¿¡ç«¯ç¹ã®çæãæ¡å¼µæ©è½ã
+ *  udp_cre_cep -- UDP 通信端点の生成【拡張機能】
  */
 
@@ -275,9 +261,9 @@
 	ER		error;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* pk_ccep ã NULL ãªãã¨ã©ã¼ */
+	/* pk_ccep が NULL ならエラー */
 	if (pk_ccep == NULL)
 		return E_PAR;
@@ -286,6 +272,6 @@
 
 	/*
-	 * API ã IPv6 ã§ IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼
+	 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、
+	 * IPv4 射影アドレスが指定されたらエラー
 	 */
 	if (in6_is_addr_ipv4mapped(&pk_ccep->myaddr.ipaddr))
@@ -294,20 +280,20 @@
 #endif	/* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (VALID_UDP_CEP(cep))
 		return E_OBJ;
 
-	/* UDP éä¿¡ç«¯ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼ */
+	/* UDP 通信端点が、動的生成用でなければエラー */
 	if (!DYNAMIC_UDP_CEP(cep))
 		return E_ID;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 * UDP éä¿¡ç«¯ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼
+	 * UDP 通信端点をチェックする。生成済みであればエラー
 	 */
 	if (VALID_UDP_CEP(cep))
@@ -316,5 +302,5 @@
 
 		/*
-		 *  èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã
+		 *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
 		 */
 		if (pk_ccep->myaddr.portno == UDP_PORTANY)
@@ -324,16 +310,15 @@
 
 			if (error == E_OK) {
-				/* UDP éä¿¡ç«¯ç¹çææ
-å ±ãã³ãã¼ããã*/
-				cep->cepatr        = pk_ccep->cepatr;			/* éä¿¡ç«¯ç¹å±æ§		*/
-				cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;		/* èªåã®ã¢ãã¬ã¹	*/
-				cep->callback      = (void*)pk_ccep->callback;		/* ã³ã¼ã«ããã¯		*/
-
-				/* UDP éä¿¡ç«¯ç¹ãçææ¸ã¿ã«ããã*/
+				/* UDP 通信端点生成情報をコピーする。*/
+				cep->cepatr        = pk_ccep->cepatr;			/* 通信端点属性		*/
+				cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;		/* 自分のアドレス	*/
+				cep->callback      = (void*)pk_ccep->callback;		/* コールバック		*/
+
+				/* UDP 通信端点を生成済みにする。*/
 				cep->flags |= UDP_CEP_FLG_VALID;
 				}
 			}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -346,7 +331,7 @@
 
 /*
- *  udp_delete_cep -- UDP éä¿¡ç«¯ç¹ãåé¤ããã
- *
- *    udp_del_cep ããå¼åºãããã¡ã¤ã³é¢æ°
+ *  udp_delete_cep -- UDP 通信端点を削除する。
+ *
+ *    udp_del_cep から呼出されるメイン関数
  */
 
@@ -356,18 +341,18 @@
 	ER	error;
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
 
-	/* UDP éä¿¡ç«¯ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼ */
+	/* UDP 通信端点が、動的生成用でなければエラー */
 	if (!DYNAMIC_UDP_CEP(cep))
 		return E_ID;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	/*
-	 * UDP éä¿¡ç«¯ç¹ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼
-	 * ã»æªçæã
+	 * UDP 通信端点をチェックする。未生成の場合はエラー
+	 * ・未生成。
 	 */
 	if (!VALID_UDP_CEP(cep))
@@ -377,10 +362,10 @@
 		UDP_CAN_RCV(cep, E_DLT);
 
-		/* UDP éä¿¡ç«¯ç¹ãæªçæã«ããã*/
+		/* UDP 通信端点を未生成にする。*/
 		cep->flags &= ~UDP_CEP_FLG_VALID;
 		error = E_OK;
 		}
 
-	/* éä¿¡ç«¯ç¹ã®ã­ãã¯ãè§£é¤ããã*/
+	/* 通信端点のロックを解除する。*/
 	syscall(sig_sem(cep->semid_lock));
 
@@ -389,5 +374,5 @@
 
 /*
- *  udp_del_cep -- UDP éä¿¡ç«¯ç¹ã®åé¤ãæ¡å¼µæ©è½ã
+ *  udp_del_cep -- UDP 通信端点の削除【拡張機能】
  */
 
@@ -397,12 +382,12 @@
 	T_UDP_CEP	*cep;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/
+	/* メイン関数を呼び出す。*/
 	return UDP_DELETE_CEP(cep);
 	}
@@ -413,7 +398,7 @@
 
 /*
- *  udp_set_option -- UDP éä¿¡ç«¯ç¹ãªãã·ã§ã³ãè¨­å®ããã
- *
- *    udp_set_opt ããå¼åºãããã¡ã¤ã³é¢æ°
+ *  udp_set_option -- UDP 通信端点オプションを設定する。
+ *
+ *    udp_set_opt から呼出されるメイン関数
  */
 
@@ -421,5 +406,5 @@
 UDP_SET_OPTION (T_UDP_CEP *cep, int_t optname, void *optval, int_t optlen)
 {
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
@@ -463,7 +448,7 @@
 
 /*
- *  udp_set_opt -- UDP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã®è¨­å®ãæ¡å¼µæ©è½ã
- *
- *  æ³¨æ: è¨­å®å¯è½ãª UDP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã
+ *  udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】
+ *
+ *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
  */
 
@@ -473,12 +458,12 @@
 	T_UDP_CEP	*cep;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/
+	/* メイン関数を呼び出す。*/
 	return UDP_SET_OPTION(cep, optname, optval, optlen);
 	}
@@ -489,7 +474,7 @@
 
 /*
- *  udp_get_option -- UDP éä¿¡ç«¯ç¹ãªãã·ã§ã³ãç²å¾ããã
- *
- *    udp_get_opt ããå¼åºãããã¡ã¤ã³é¢æ°
+ *  udp_get_option -- UDP 通信端点オプションを獲得する。
+ *
+ *    udp_get_opt から呼出されるメイン関数
  */
 
@@ -497,5 +482,5 @@
 UDP_GET_OPTION (T_UDP_CEP *cep, int_t optname, void *optval, int_t optlen)
 {
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
@@ -529,7 +514,7 @@
 
 /*
- *  udp_get_opt -- UDP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã®ç²å¾ãæ¡å¼µæ©è½ã
- *
- *  æ³¨æ: è¨­å®å¯è½ãª UDP éä¿¡ç«¯ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã
+ *  udp_get_opt -- UDP 通信端点オプションの獲得【拡張機能】
+ *
+ *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
  */
 
@@ -539,12 +524,12 @@
 	T_UDP_CEP	*cep;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/
+	/* メイン関数を呼び出す。*/
 	return UDP_GET_OPTION(cep, optname, optval, optlen);
 	}
@@ -561,5 +546,5 @@
 
 /*
- *  udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ã­ã£ã³ã»ã«
+ *  udp_can_snd -- ペンディングしている送信のキャンセル
  */
 
@@ -567,11 +552,9 @@
 UDP_CAN_SND (T_UDP_CEP *cep, ER error)
 {
-	if (cep->snd_tskid != TA_NULL) {	/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	if (cep->snd_tskid != TA_NULL) {	/* 非ノンブロッキングコールでペンディング中 */
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ãè¨­å®ããã*/
+		/* 待ち中に発生したエラー情報を設定する。*/
 		cep->error = error;
 
@@ -581,5 +564,5 @@
 		cep->snd_tskid = TA_NULL;
 		}
-	else					/* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã */
+	else					/* どちらでもないならペンディングしていない */
 		error = EV_NOPND;
 
@@ -592,5 +575,5 @@
 
 /*
- *  udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ã­ã£ã³ã»ã«
+ *  udp_can_rcv -- ペンディングしている受信のキャンセル
  */
 
@@ -598,11 +581,9 @@
 UDP_CAN_RCV (T_UDP_CEP *cep, ER error)
 {
-	if (cep->rcv_tskid != TA_NULL) {	/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	if (cep->rcv_tskid != TA_NULL) {	/* 非ノンブロッキングコールでペンディング中 */
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ãè¨­å®ããã*/
+		/* 待ち中に発生したエラー情報を設定する。*/
 		cep->error = error;
 
@@ -612,5 +593,5 @@
 		cep->rcv_tskid = TA_NULL;
 		}
-	else					/* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã */
+	else					/* どちらでもないならペンディングしていない */
 		error = EV_NOPND;
 
@@ -623,5 +604,5 @@
 
 /*
- *  udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã
+ *  udp_snd_dat -- パケットの送信【標準機能】
  */
 
@@ -632,9 +613,9 @@
 	ER		error;
 
-	/* p_dstaddr ã¾ãã¯ data ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */
 	if (p_dstaddr == NULL || data == NULL || tmout == TMO_NBLK)
 		return E_PAR;
 
-	/* ãã¼ã¿é·ããã§ãã¯ããã*/
+	/* データ長をチェックする。*/
 	if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU)
 		return E_PAR;
@@ -643,6 +624,6 @@
 
 	/*
-	 * API ã IPv6 ã§ IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼
+	 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、
+	 * IPv4 射影アドレスが指定されたらエラー
 	 */
 	if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr))
@@ -651,17 +632,17 @@
 #endif	/* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
 
 	/*
-	 *  èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã
+	 *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
 	 */
 	if (cep->myaddr.portno == UDP_PORTANY) {
@@ -670,39 +651,35 @@
 		}
 	
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	if (cep->snd_tskid != TA_NULL) {
 
-		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+		/* 非ノンブロッキングコールでペンディング中 */
 		error = E_QOVR;
 
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点をロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 		}
 	else {
-		/* ç¾å¨ã®ã¿ã¹ã¯è­å¥å­ãè¨é²ããã*/
+		/* 現在のタスク識別子を記録する。*/
 		get_tid(&(cep->snd_tskid));
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ããªã»ããããã*/
+		/* 待ち中に発生したエラー情報をリセットする。*/
 		cep->error = E_OK;
 
 #endif	/* of #ifdef UDP_CFG_EXTENTIONS */
 
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点をロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 
-		/* ãã±ãããéä¿¡ããã*/
+		/* パケットを送信する。*/
 		error = UDP_SEND_DATA(cep, p_dstaddr, data, len, tmout);
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ãè¿ãã*/
+		/* 待ち中に発生したエラー情報を返す。*/
 		if (error == E_RLWAI)
 			error = cep->error;
@@ -719,5 +696,5 @@
 
 /*
- *  udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã
+ *  udp_rcv_dat -- パケットの受信【標準機能】
  */
 
@@ -731,57 +708,52 @@
 	uint_t		ulen, uhoff;
 
-	/* p_dstaddr ã¾ãã¯ data ã NULL ãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼ */
+	/* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */
 	if (p_dstaddr == NULL || data == NULL || len < 0 || tmout == TMO_NBLK)
 		return E_PAR;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
 
-	/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	/* 通信端点をロックする。*/
 	syscall(wai_sem(cep->semid_lock));
 
 	if (cep->rcv_tskid != TA_NULL) {
 
-		/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+		/* 非ノンブロッキングコールでペンディング中 */
 		error = E_QOVR;
 
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点をロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 		}
 	else {
 
-		/* ç¾å¨ã®ã¿ã¹ã¯è­å¥å­ãè¨é²ããã*/
+		/* 現在のタスク識別子を記録する。*/
 		get_tid(&(cep->rcv_tskid));
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ããªã»ããããã*/
+		/* 待ち中に発生したエラー情報をリセットする。*/
 		cep->error = E_OK;
 
 #endif	/* of #ifdef UDP_CFG_EXTENTIONS */
 
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点をロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 
-		/* å
-¥åãããã¾ã§å¾
-ã¤ã*/
+		/* 入力があるまで待つ。*/
 		if (cep->cb_netbuf != NULL) {
 
 			/*
-			 *  ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸­ãã
-			 *  udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã
-			 *  ãã§ã«å
-¥åæ¸ã¿ã§ããã
+			 *  ここにくる場合は、コールバック関数の中から
+			 *  udp_rcv_dat を呼び出していることになり、
+			 *  すでに入力済みである。
 			 */
 			input = cep->cb_netbuf;
@@ -792,7 +764,5 @@
 #ifdef UDP_CFG_EXTENTIONS
 
-			/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ãè¿ãã*/
+			/* 待ち中に発生したエラー情報を返す。*/
 			if (error == E_RLWAI)
 				error = cep->error;
@@ -804,5 +774,5 @@
 			}
 
-		/* p_dstaddr ãè¨­å®ããã*/
+		/* p_dstaddr を設定する。*/
 		uhoff = (uint_t)GET_UDP_HDR_OFFSET(input);
 		udph = GET_UDP_HDR(input, uhoff);
@@ -810,5 +780,5 @@
 		IN_COPY_TO_HOST(&p_dstaddr->ipaddr, input);
 
-		/* ãã¼ã¿ããããã¡ã«ç§»ãã*/
+		/* データをバッファに移す。*/
 		ulen = ntohs(udph->ulen);
 		if (ulen - UDP_HDR_SIZE > len)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq_nblk.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq_nblk.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq_nblk.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -83,5 +71,5 @@
 
 /*
- *  udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ã­ã£ã³ã»ã«
+ *  udp_can_snd -- ペンディングしている送信のキャンセル
  */
 
@@ -89,5 +77,5 @@
 UDP_CAN_SND (T_UDP_CEP *cep, ER error)
 {
-	if (cep->snd_p_dstaddr != NULL) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	if (cep->snd_p_dstaddr != NULL) {	/* ノンブロッキングコールでペンディング中 */
 		if (IS_PTR_DEFINED(cep->callback))
 
@@ -101,11 +89,9 @@
 		cep->snd_p_dstaddr = NULL;
 		}
-	else if (cep->snd_tskid != TA_NULL) {	/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	else if (cep->snd_tskid != TA_NULL) {	/* 非ノンブロッキングコールでペンディング中 */
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ãè¨­å®ããã*/
+		/* 待ち中に発生したエラー情報を設定する。*/
 		cep->error = error;
 
@@ -115,5 +101,5 @@
 		cep->snd_tskid = TA_NULL;
 		}
-	else					/* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã */
+	else					/* どちらでもないならペンディングしていない */
 		error = EV_NOPND;
 
@@ -126,5 +112,5 @@
 
 /*
- *  udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ã­ã£ã³ã»ã«
+ *  udp_can_rcv -- ペンディングしている受信のキャンセル
  */
 
@@ -132,5 +118,5 @@
 UDP_CAN_RCV (T_UDP_CEP *cep, ER error)
 {
-	if (cep->rcv_p_dstaddr != NULL) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	if (cep->rcv_p_dstaddr != NULL) {	/* ノンブロッキングコールでペンディング中 */
 		if (IS_PTR_DEFINED(cep->callback))
 
@@ -144,11 +130,9 @@
 		cep->rcv_p_dstaddr = NULL;
 		}
-	else if (cep->rcv_tskid != TA_NULL) {	/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+	else if (cep->rcv_tskid != TA_NULL) {	/* 非ノンブロッキングコールでペンディング中 */
 
 #ifdef UDP_CFG_EXTENTIONS
 
-		/* å¾
-ã¡ä¸­ã«çºçããã¨ã©ã¼æ
-å ±ãè¨­å®ããã*/
+		/* 待ち中に発生したエラー情報を設定する。*/
 		cep->error = error;
 
@@ -158,5 +142,5 @@
 		cep->rcv_tskid = TA_NULL;
 		}
-	else					/* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã */
+	else					/* どちらでもないならペンディングしていない */
 		error = EV_NOPND;
 
@@ -169,5 +153,5 @@
 
 /*
- *  udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã
+ *  udp_snd_dat -- パケットの送信【標準機能】
  */
 
@@ -178,9 +162,9 @@
 	ER		error;
 
-	/* p_dstaddr ã¾ãã¯ data ã NULL ãªãã¨ã©ã¼ */
+	/* p_dstaddr または data が NULL ならエラー */
 	if (p_dstaddr == NULL || data == NULL)
 		return E_PAR;
 
-	/* ãã¼ã¿é·ããã§ãã¯ããã*/
+	/* データ長をチェックする。*/
 	if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU)
 		return E_PAR;
@@ -189,6 +173,6 @@
 
 	/*
-	 * API ã IPv6 ã§ IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã
-	 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼
+	 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、
+	 * IPv4 射影アドレスが指定されたらエラー
 	 */
 	if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr))
@@ -197,17 +181,17 @@
 #endif	/* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
 
 	/*
-	 *  èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã
+	 *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
 	 */
 	if (cep->myaddr.portno == UDP_PORTANY) {
@@ -217,25 +201,25 @@
 
 	/*
-	 * ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã
+	 * タイムアウトをチェックする。
 	 */
-	if (tmout == TMO_NBLK) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	if (tmout == TMO_NBLK) {	/* ノンブロッキングコール */
+
+		/* 通信端点をロックする。*/
 		syscall(wai_sem(cep->semid_lock));
 
 		if (cep->snd_p_dstaddr != NULL) {
 
-			/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+			/* ノンブロッキングコールでペンディング中 */
 			error = E_QOVR;
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 			}
 		else if (cep->snd_tskid != TA_NULL) {
 
-			/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
-			error = E_OBJ;
-
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* 非ノンブロッキングコールでペンディング中 */
+			error = E_OBJ;
+
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 			}
@@ -246,5 +230,5 @@
 			cep->snd_len	= len;
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 
@@ -254,34 +238,34 @@
 			}
 		}
-	else {				/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
+	else {				/* 非ノンブロッキングコール */
 	
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+		/* 通信端点をロックする。*/
 		syscall(wai_sem(cep->semid_lock));
 
 		if (cep->snd_p_dstaddr != NULL) {
 
-			/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
-			error = E_OBJ;
-
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* ノンブロッキングコールでペンディング中 */
+			error = E_OBJ;
+
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 			}
 		else if (cep->snd_tskid != TA_NULL) {
 
-			/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+			/* 非ノンブロッキングコールでペンディング中 */
 			error = E_QOVR;
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 			}
 		else {
 
-			/* ç¾å¨ã®ã¿ã¹ã¯è­å¥å­ãè¨é²ããã*/
+			/* 現在のタスク識別子を記録する。*/
 			get_tid(&(cep->snd_tskid));
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
-			syscall(sig_sem(cep->semid_lock));
-
-			/* ãã±ãããéä¿¡ããã*/
+			/* 通信端点をロックを解除する。*/
+			syscall(sig_sem(cep->semid_lock));
+
+			/* パケットを送信する。*/
 			error = UDP_SEND_DATA(cep, p_dstaddr, data, len, tmout);
 			}
@@ -296,5 +280,5 @@
 
 /*
- *  udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã
+ *  udp_rcv_dat -- パケットの受信【標準機能】
  */
 
@@ -308,36 +292,36 @@
 	uint_t		ulen, uhoff;
 
-	/* p_dstaddr ã¾ãã¯ data ã NULL ããlen < 0 ãªãã¨ã©ã¼ */
+	/* p_dstaddr または data が NULL か、len < 0 ならエラー */
 	if (p_dstaddr == NULL || data == NULL || len < 0)
 		return E_PAR;
 
-	/* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/
+	/* UDP 通信端点 ID をチェックする。*/
 	if (!VALID_UDP_CEPID(cepid))
 		return E_ID;
 
-	/* UDP éä¿¡ç«¯ç¹ãå¾ãã*/
+	/* UDP 通信端点を得る。*/
 	cep = GET_UDP_CEP(cepid);
 
-	/* UDP éä¿¡ç«¯ç¹ããã§ãã¯ããã*/
+	/* UDP 通信端点をチェックする。*/
 	if (!VALID_UDP_CEP(cep))
 		return E_NOEXS;
 
 	/*
-	 * ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã
+	 * タイムアウトをチェックする。
 	 */
 
-	if (tmout == TMO_NBLK) {	/* ãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	if (tmout == TMO_NBLK) {	/* ノンブロッキングコール */
+
+		/* 通信端点をロックする。*/
 		syscall(wai_sem(cep->semid_lock));
 
 		if (cep->rcv_p_dstaddr != NULL)
 
-			/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+			/* ノンブロッキングコールでペンディング中 */
 			error = E_QOVR;
 
 		else if (cep->rcv_tskid != TA_NULL)
 
-			/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+			/* 非ノンブロッキングコールでペンディング中 */
 			error = E_OBJ;
 		else {
@@ -348,47 +332,44 @@
 			}
 
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+		/* 通信端点をロックを解除する。*/
 		syscall(sig_sem(cep->semid_lock));
 		return error;
 		}
-	else {				/* éãã³ãã­ãã­ã³ã°ã³ã¼ã« */
-
-		/* éä¿¡ç«¯ç¹ãã­ãã¯ããã*/
+	else {				/* 非ノンブロッキングコール */
+
+		/* 通信端点をロックする。*/
 		syscall(wai_sem(cep->semid_lock));
 
 		if (cep->rcv_p_dstaddr != NULL) {
 
-			/* ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
-			error = E_OBJ;
-
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* ノンブロッキングコールでペンディング中 */
+			error = E_OBJ;
+
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 			}
 		else if (cep->rcv_tskid != TA_NULL) {
 
-			/* éãã³ãã­ãã­ã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸­ */
+			/* 非ノンブロッキングコールでペンディング中 */
 			error = E_QOVR;
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
+			/* 通信端点をロックを解除する。*/
 			syscall(sig_sem(cep->semid_lock));
 			}
 		else {
 
-			/* ç¾å¨ã®ã¿ã¹ã¯è­å¥å­ãè¨é²ããã*/
+			/* 現在のタスク識別子を記録する。*/
 			get_tid(&(cep->rcv_tskid));
 
-			/* éä¿¡ç«¯ç¹ãã­ãã¯ãè§£é¤ããã*/
-			syscall(sig_sem(cep->semid_lock));
-
-			/* å
-¥åãããã¾ã§å¾
-ã¤ã*/
+			/* 通信端点をロックを解除する。*/
+			syscall(sig_sem(cep->semid_lock));
+
+			/* 入力があるまで待つ。*/
 			if (cep->cb_netbuf != NULL) {
 
 				/*
-				 *  ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸­ãã
-				 *  udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã
-				 *  ãã§ã«å
-¥åæ¸ã¿ã§ããã
+				 *  ここにくる場合は、コールバック関数の中から
+				 *  udp_rcv_dat を呼び出していることになり、
+				 *  すでに入力済みである。
 				 */
 				input = cep->cb_netbuf;
@@ -400,5 +381,5 @@
 				}
 
-			/* p_dstaddr ãè¨­å®ããã*/
+			/* p_dstaddr を設定する。*/
 			uhoff = (uint_t)GET_UDP_HDR_OFFSET(input);
 			udph = GET_UDP_HDR(input, uhoff);
@@ -406,5 +387,5 @@
 			IN_COPY_TO_HOST(&p_dstaddr->ipaddr, input);
 
-			/* ãã¼ã¿ããããã¡ã«ç§»ãã*/
+			/* データをバッファに移す。*/
 			ulen = ntohs(udph->ulen);
 			if (ulen - UDP_HDR_SIZE > len)
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,5 +68,5 @@
 
 /*
- *  RFC2402 èªè¨¼ããã
+ *  RFC2402 認証ヘッダ
  */
 
@@ -86,9 +74,8 @@
 	uint8_t		next;	/* Next Header				*/
 	uint8_t		len;	
-	/* 4 ãªã¯ãããåä½ã®é·ãããã ãããã¼ã¿é· + 1 ãå
-¥ãã	*/
+	/* 4 オクテット単位の長さ。ただし、データ長 + 1 が入る。	*/
 	uint16_t	reserved;
 	uint32_t	spi;	/* Security Parameter Index (SPI)	*/
-	uint32_t	seq;	/* ã·ã¼ã±ã³ã¹çªå·			*/
+	uint32_t	seq;	/* シーケンス番号			*/
 	} __attribute__((packed, aligned(2))) T_IP6_AH_HDR;
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah6.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,5 +68,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ah_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -116,9 +104,7 @@
 
 /*
- *  ah6_input -- èªè¨¼ãããã®å
-¥åé¢æ°
+ *  ah6_input -- 認証ヘッダの入力関数
  *
- *    æ¬å®è£
-ã§ã¯ããã¼ã¿ã°ã©ã ãç ´æ£ããã
+ *    本実装では、データグラムを破棄する。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/dest6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/dest6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/dest6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -114,10 +102,7 @@
 
 /*
- *  dest6_input -- çµç¹ãªãã·ã§ã³ãããã®å
-¥åé¢æ°
+ *  dest6_input -- 終点オプションヘッダの入力関数
  *
- *    æ¬å®è£
-ã§ã¯ãããã£ã³ã°ä»¥å¤ã®ãªãã·ã§ã³ãå
-¨ã¦æªç¥ãªãã·ã§ã³ã¨ãã¦å¦çããã
+ *    本実装では、パディング以外のオプションを全て未知オプションとして処理する。
  */
 
@@ -131,5 +116,5 @@
 	uint8_t		*opt;
 
-	/* ãããã¯ã¼ã¯ãããã¡ã®æ®ãã®é·ãããã§ãã¯ããã*/
+	/* ネットワークバッファの残りの長さをチェックする。*/
 	if (input->len - off < sizeof(T_IP6_DEST_HDR))
 		goto buf_rel;
@@ -138,5 +123,5 @@
 	len    = (desth->len + 1) << 3;
 
-	/* çµç¹ãªãã·ã§ã³ãããã®é·ãããã§ãã¯ããã*/
+	/* 終点オプションヘッダの長さをチェックする。*/
 	if (input->len < off + len)
 		goto buf_rel;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp.h	(revision 389)
@@ -6,39 +6,27 @@
  *  Copyright (C) 2008-2009 by Hokkaido Industrial Research Institute, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,14 +69,14 @@
 
 /*
- *  RFC2406 æå·åããã
+ *  RFC2406 暗号化ヘッダ
  */
 
 typedef struct t_esp_hdr {
 	int32_t	spi;	/* Security Parameter Index (SPI)	*/
-	int32_t	seq;	/* ã·ã¼ã±ã³ã¹çªå·			*/
+	int32_t	seq;	/* シーケンス番号			*/
 	} __attribute__((packed, aligned(2)))T_ESP_HDR;
 
 typedef struct t_esp_tail {
-	int8_t	padlen;	/* ããã£ã³ã°é·				*/	
+	int8_t	padlen;	/* パディング長				*/	
 	int8_t	next;	/* Next Header				*/
 	} __attribute__((packed, aligned(2)))T_ESP_TAIL;
@@ -125,5 +113,5 @@
 
 /*
- * é¢æ°
+ * 関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp6.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,5 +68,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/esp_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -118,9 +106,7 @@
 
 /*
- *  esp6_input -- æå·åãããã®å
-¥åé¢æ°
+ *  esp6_input -- 暗号化ヘッダの入力関数
  *
- *    æ¬å®è£
-ã§ã¯ããã¼ã¿ã°ã©ã ãç ´æ£ããã
+ *    本実装では、データグラムを破棄する。
  */
 
@@ -129,7 +115,6 @@
 {
 #if 0
-	*nextp = <T_ESP_TAIL ã® next ãã£ã¼ã«ãã®ä½ç½®ï¼IPv6 ãããã®å
-é ­ããã®ãªãã»ããï¼>;
-	*offp  = <æ¬¡ãããã®ä½ç½®ï¼input->buf ããã®ãªãã»ããï¼>;
+	*nextp = <T_ESP_TAIL の next フィールドの位置（IPv6 ヘッダの先頭からのオフセット）>;
+	*offp  = <次ヘッダの位置（input->buf からのオフセット）>;
 #endif
 	syscall(rel_net_buf(*inputp));
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/frag6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/frag6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/frag6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -121,6 +109,5 @@
 
 /*
- *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼é
-å
+ *  データグラム再構成キュー配列
  */
 
@@ -129,5 +116,5 @@
 
 /*
- *  ip6_get_frag_queue -- ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãç²å¾ããã
+ *  ip6_get_frag_queue -- データグラム再構成キューを獲得する。
  */
 
@@ -139,8 +126,7 @@
 
 /*
- *  frag6_free_queue -- ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãè§£æ¾ããã
+ *  frag6_free_queue -- データグラム再構成キューを解放する。
  *
- *    æ³¨æ: ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼é
-åãã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: データグラム再構成キュー配列をロックしてから呼び出すこと。
  */
 
@@ -162,5 +148,5 @@
 
 /*
- *  frag6_timer -- ãã¼ã¿ã°ã©ã åæ§æç®¡çã¿ã¤ã
+ *  frag6_timer -- データグラム再構成管理タイマ
  */
 
@@ -184,24 +170,20 @@
 
 					/*
-					 *  å
-é ­ã®æ­çã®ãªãã»ããã 0 ã®æã®ã¿
-					 *  ICMPv6 ã¨ã©ã¼ã¡ãã»ã¼ã¸ãéä¿¡ããã
+					 *  先頭の断片のオフセットが 0 の時のみ
+					 *  ICMPv6 エラーメッセージを送信する。
 					 */
 
-					/* å
-é ­ã®æ­çããã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ããå¤ãã*/
+					/* 先頭の断片をデータグラム再構成キューから外す。*/
 					ip6_frag_queue[ix] = qip6h->next_frag;
 
-					/* ãã¦å
-ã¢ãã¬ã¹ãå
-ã«æ»ãã*/
+					/* あて先アドレスを元に戻す。*/
 					GET_IP6_HDR(frag)->dst = ip6_frag_dest[ix];
 
-					/* ICMPv6 ã¨ã©ã¼ã¡ãã»ã¼ã¸ãéä¿¡ããã*/
+					/* ICMPv6 エラーメッセージを送信する。*/
 					icmp6_error(frag, ICMP6_TIME_EXCEEDED,
 					                  ICMP6_TIME_EXCEED_REASSEMBLY, 0);
 					}
 
-				/* ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãè§£æ¾ããã*/
+				/* データグラム再構成キューを解放する。*/
 				NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_IN_TMOUT], 1);
 				NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_IN_DROP], 1);
@@ -216,6 +198,5 @@
 
 /*
- *  frag6_input -- æ­çãããã®å
-¥åé¢æ°
+ *  frag6_input -- 断片ヘッダの入力関数
  */
 
@@ -241,14 +222,13 @@
 #endif	/* #ifdef IP6_CFG_FRAGMENT */
 
-	/* ãããã¯ã¼ã¯ãããã¡ã®æ®ãã®é·ãããã§ãã¯ããã*/
+	/* ネットワークバッファの残りの長さをチェックする。*/
 	if (input->len - off < sizeof(T_IP6_FRAG_HDR))
 		goto buf_rel;
 
 	/* 
-	 *  å·¨å¤§ãã¤ã­ã¼ããªãã·ã§ã³ã¨æ­çããããåæã«ä½¿ç¨ãããã¨ã¯
-	 *  ã§ããªãããã¤ã­ã¼ãé·ãã 0 ãªããå·¨å¤§ãã¤ã­ã¼ããªãã·ã§ã³ã
-	 *  æå®ããã¦ãããã¨ã«ãªãã®ã§ ICMP ã§ã¨ã©ã¼ãéä¿¡è
-ã«
-	 *  éç¥ããã
+	 *  巨大ペイロードオプションと断片ヘッダを同時に使用することは
+	 *  できない。ペイロード長がが 0 なら、巨大ペイロードオプションが
+	 *  指定されていることになるので ICMP でエラーを送信者に
+	 *  通知する。
 	 */
 	ip6h = GET_IP6_HDR(input);
@@ -262,7 +242,7 @@
 
 	/*
-	 *  ãªãã»ããã 0 ã§ãæçµãã©ã°ã¡ã³ãã§ããã°ã
-	 *  åå²ä¸è¦ã®ãã¼ã¿ã°ã©ã ãªã®ã§ã
-	 *  æ¬¡ããããæãå¤æ°ãèª¿æ´ãã¦çµäºããã
+	 *  オフセットが 0 で、最終フラグメントであれば、
+	 *  分割不要のデータグラムなので、
+	 *  次ヘッダを指す変数を調整して終了する。
 	 */
 	ip6fh = (T_IP6_FRAG_HDR *)(input->buf + off);
@@ -276,5 +256,5 @@
 
 	/*
-	 *  ãã¤ã­ã¼ãé·ããã§ãã¯ããã
+	 *  ペイロード長をチェックする。
 	 */
 	if ((ip6fh->off_flag & IP6F_MORE_FRAG) && 
@@ -291,6 +271,5 @@
 
 	/*
- 	 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼é
-åãããå¯¾å¿ããã¨ã³ããªãæ¢ãã
+ 	 *  データグラム再構成キュー配列から、対応するエントリを探す。
  	 */
 	for (ix = NUM_IP6_FRAG_QUEUE; ix -- > 0; ) {
@@ -310,5 +289,5 @@
 
 		/*
-	 	 *  æ­çã®æ­£å½æ§ããã§ãã¯ããã
+	 	 *  断片の正当性をチェックする。
 		 */
 		unfraglen = 0;
@@ -317,8 +296,6 @@
 
 			/*
-		 	 *  å
-¥åããæ­çãå
-é ­ã®æ­ç
-			 *  åå²ã§ããªãé¨åã®é·ã unfraglen ãè¨ç®ããã
+		 	 *  入力した断片が先頭の断片
+			 *  分割できない部分の長さ unfraglen を計算する。
 			 */
 			unfraglen = (off - IF_HDR_SIZE) - sizeof(T_IP6_HDR);
@@ -352,11 +329,10 @@
 
 		/*
-	 	 *  ip6fq == NULL ã§ããã°ãå¯¾å¿ããã¨ã³ããªã¯ç¡ãã®ã§ã
-	 	 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼é
-åã«ãã¨ã³ããªãè¿½å ããã
+	 	 *  ip6fq == NULL であれば、対応するエントリは無いので、
+	 	 *  データグラム再構成キュー配列に、エントリを追加する。
 	 	 */
 		for (ix = NUM_IP6_FRAG_QUEUE; ix -- > 0; ) {
 
-			/* ç©ºãã¨ã³ããªãæ¢ãã*/
+			/* 空きエントリを探す。*/
 			if (ip6_frag_queue[ix] == NULL) {
 				ip6fq = &ip6_frag_queue[ix];
@@ -366,6 +342,6 @@
 
 		/*
-		 *  ip6fq == NULL ã§ããã°ãç©ºãã¨ã³ããªãç¡ãã®ã§ã
-		 *  ã¿ã¤ã ã¢ã¦ãï¼hlimï¼ãç­ãã¨ã³ããªãéæ¾ããã
+		 *  ip6fq == NULL であれば、空きエントリが無いので、
+		 *  タイムアウト（hlim）が短いエントリを開放する。
 		 */
  		if (ip6fq == NULL) {
@@ -385,5 +361,5 @@
 
 		/*
-		 *  ã¨ã³ããªãè¨­å®ããã
+		 *  エントリを設定する。
 		 */
 		*ip6fq = input; 
@@ -398,5 +374,5 @@
 
 		/*
-	 	 *  æ­çã®æ­£å½æ§ããã§ãã¯ããã
+	 	 *  断片の正当性をチェックする。
 		 */
 		unfraglen = 0;
@@ -405,7 +381,6 @@
 
 			/*
-		 	 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ã®æåã®æ­çãå
-é ­ã®æ­ç
-			 *  åå²ã§ããªãé¨åã®é·ã unfraglen ãè¨ç®ããã
+		 	 *  データグラム再構成キューの最初の断片が先頭の断片
+			 *  分割できない部分の長さ unfraglen を計算する。
 			 */
 			unfraglen = (GET_QIP6_HDR(*ip6fq)->foff - IF_HDR_SIZE) - sizeof(T_IP6_HDR);
@@ -416,8 +391,6 @@
 
 			/*
-		 	 *  å
-¥åããæ­çãå
-é ­ã®æ­ç
-			 *  åå²ã§ããªãé¨åã®é·ã unfraglen ãè¨ç®ããã
+		 	 *  入力した断片が先頭の断片
+			 *  分割できない部分の長さ unfraglen を計算する。
 			 */
 			unfraglen = (off - IF_HDR_SIZE) - sizeof(T_IP6_HDR);
@@ -453,18 +426,15 @@
 
 			/*
-		 	 *  å
-¥åããæ­çãå
-é ­ã®æ­ç
-		 	 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ã®æå¾ã®æ­çãã
-		 	 *  ãã¼ã¿ã°ã©ã ã®æå¤§é·ãè¶
-ãã¦ããªãããã§ãã¯ããã
-			 */
-
-			/* æå¾ã®æ­çãæ¢ç´¢ããã*/
+		 	 *  入力した断片が先頭の断片
+		 	 *  データグラム再構成キューの最後の断片が、
+		 	 *  データグラムの最大長を超えていないかチェックする。
+			 */
+
+			/* 最後の断片を探索する。*/
 			next = *ip6fq;
 			while ((qip6h = GET_QIP6_HDR(next))->next_frag != NULL)
 				next = qip6h->next_frag;
 
-			/* æå¾ã®æ­çã®ãªãã»ããã¨æ­çãµã¤ãºãè¨ç®ããã*/
+			/* 最後の断片のオフセットと断片サイズを計算する。*/
 			qip6fh = (T_IP6_FRAG_HDR *)(next->buf + qip6h->foff);
 			fragoff = ntohs(qip6fh->off_flag & IP6F_OFF_MASK);
@@ -473,8 +443,6 @@
 
 				/*
-				 *  ãã¼ã¿ã°ã©ã ã®æå¤§é·ãè¶
-ãã¦ããå ´åã¯ã
-			 	 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼å
-¨ä½ãç ´æ£ããã
+				 *  データグラムの最大長を超えている場合は、
+			 	 *  データグラム再構成キュー全体を破棄する。
 			 	 */
 				frag6_free_queue(ip6fq);
@@ -484,12 +452,9 @@
 			}
 
-		/* ECN ã®æ­£å½æ§ãã§ãã¯ã¯æªå®è£
- */
-
-		/*
-		 *  æ­çãã¨ã³ããªã«æ¿å
-¥ããã
-	 	 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãããå
-¥åããæ­çããåã®æ­çãæ¢ç´¢ããã
+		/* ECN の正当性チェックは未実装 */
+
+		/*
+		 *  断片をエントリに挿入する。
+	 	 *  データグラム再構成キューから、入力した断片より前の断片を探索する。
 		 */
 		prev = NULL;
@@ -505,12 +470,8 @@
 
 		/*
-		 *  prev ã¯ãå
-¥åããæ­çããåã®æ­çããã ã NULL ã®å ´åã¯ã
-		 *  å
-¥åããæ­çããã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ã®ä¸­ã§æãåã®æ­çã
-		 *  next ã¯ãå
-¥åããæ­çããå¾ã®æ­çããã ã NULL ã®å ´åã¯ã
-		 *  å
-¥åããæ­çããã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ã®ä¸­ã§æãå¾ã®æ­çã
+		 *  prev は、入力した断片より前の断片。ただし NULL の場合は、
+		 *  入力した断片がデータグラム再構成キューの中で最も前の断片。
+		 *  next は、入力した断片より後の断片。ただし NULL の場合は、
+		 *  入力した断片がデータグラム再構成キューの中で最も後の断片。
 		 */
 		fragoff = ntohs(ip6fh->off_flag & IP6F_OFF_MASK);
@@ -518,6 +479,5 @@
 
 			/*
-			 *  åã®æ­çã¨ãå
-¥åããæ­çãéãªã£ã¦ããªãããã§ãã¯ããã
+			 *  前の断片と、入力した断片が重なっていないかチェックする。
 			 *
 			 *    qfragoff
@@ -542,6 +502,5 @@
 			if (diff > 0) {
 
-				/* éãªã£ã¦ããã°ãå
-¥åããæ­çãç ´æ£ãã¦çµäºããã*/
+				/* 重なっていれば、入力した断片を破棄して終了する。*/
 				syscall(rel_net_buf(input));
 				goto sig_ret;
@@ -552,6 +511,5 @@
 
 			/*
-			 *  å¾ã®æ­çã¨ãå
-¥åããæ­çãéãªã£ã¦ããªãããã§ãã¯ããã
+			 *  後の断片と、入力した断片が重なっていないかチェックする。
 			 *
 			 *    fragoff
@@ -576,6 +534,5 @@
 			if (diff > 0) {
 
-				/* éãªã£ã¦ããã°ãå
-¥åããæ­çãç ´æ£ãã¦çµäºããã*/
+				/* 重なっていれば、入力した断片を破棄して終了する。*/
 				syscall(rel_net_buf(input));
 				goto sig_ret;
@@ -583,6 +540,5 @@
 			}
 
-		/* å
-¥åããæ­çãè¨­å®ããã*/
+		/* 入力した断片を設定する。*/
 		qip6h  = GET_QIP6_HDR(input);
 		qip6h->foff = off;
@@ -598,6 +554,5 @@
 
 		/*
-		 *  å
-¨ã¦ã®æ­çãåä¿¡ããããã§ãã¯ããã
+		 *  全ての断片を受信したかチェックする。
 		 */
 		plen = 0;
@@ -608,5 +563,5 @@
 			if (ntohs(qip6fh->off_flag & IP6F_OFF_MASK) != plen) {
 
-				/* æ­çãé£ç¶ãã¦ããªãã*/
+				/* 断片が連続していない。*/
 				goto sig_ret;
 				}
@@ -616,14 +571,13 @@
 		if (ntohs(qip6fh->off_flag & IP6F_MORE_FRAG) != 0) {
 
-			/* æå¾ã®æ­çãåä¿¡ãã¦ããªãã*/
+			/* 最後の断片を受信していない。*/
 			goto sig_ret;
 			}
 
 		/*
-		 *  å
-¨ã¦ã®æ­çãåä¿¡ããã®ã§ãåæ§æããã
-		 */
-
-		/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+		 *  全ての断片を受信したので、再構成する。
+		 */
+
+		/* ネットワークバッファを獲得する。*/
 		qip6h  = GET_QIP6_HDR(*ip6fq);
 		qip6fh = (T_IP6_FRAG_HDR *)((*ip6fq)->buf + qip6h->foff);
@@ -631,7 +585,6 @@
 
 			/*
-			 *  æ­çãããã®ç´åã®ãããã® NEXT ãã£ã¼ã«ãã®ã¢ãã¬ã¹ãç²å¾ãã
-			 *  å
-ã«æ»ãã
+			 *  断片ヘッダの直前のヘッダの NEXT フィールドのアドレスを獲得し、
+			 *  元に戻す。
 			 */
 			if ((prev_next = ip6_get_prev_hdr(*ip6fq, qip6h->foff)) == NULL) {
@@ -646,26 +599,21 @@
 
 			/*
-			 *  IPv6 ãããã¨åå²ã§ããªãé¨åã
-			 *  ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ã®ä¸­ã®å
-é ­ã®æ­çããã³ãã¼ããã
+			 *  IPv6 ヘッダと分割できない部分を
+			 *  データグラム再構成キューの中の先頭の断片からコピーする。
 			 */
 			memcpy(input->buf, (*ip6fq)->buf, qip6h->foff);
 
-			/* éä¿¡å
-ã¢ãã¬ã¹ãå
-ã«æ»ãã*/
+			/* 送信先アドレスを元に戻す。*/
 			ip6h = GET_IP6_HDR(input);
 			memcpy(&ip6h->dst, &ip6_frag_dest[ip6fq - ip6_frag_queue], sizeof(T_IN6_ADDR));
 
-			/* offp ããåæ§æããæ­çã®å
-é ­ã«è¨­å®ããã*/
+			/* offp を、再構成した断片の先頭に設定する。*/
 			*offp = qip6h->foff;
 
-			/* ãããã¯ã¼ã¯ãããã¡é·ãè¨­å®ããã*/
+			/* ネットワークバッファ長を設定する。*/
 			input->len = plen + qip6h->foff;
 
 			/*
-			 *  å
-¨ã¦ã®æ­çãã³ãã¼ããã
+			 *  全ての断片をコピーする。
 			 */
 			frag = *ip6fq;
@@ -680,5 +628,5 @@
 				}
 
-			/* ãã¤ã­ã¼ãé·ãè¨­å®ããã*/
+			/* ペイロード長を設定する。*/
 			ip6h->plen = htons(plen);
 
@@ -692,5 +640,5 @@
 			}
 
-		/* ãã¼ã¿ã°ã©ã åæ§æã­ã¥ã¼ãè§£æ¾ããã*/
+		/* データグラム再構成キューを解放する。*/
 		frag6_free_queue(ip6fq);
  		}
@@ -703,9 +651,7 @@
 
 	/*
-	 *  ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æè¡ããªãå ´åã¯ãå
-¨æ­çãç ´æ£ãã
-	 *  æå¾ã®æ­çãåä¿¡ããã¨ãã
-	 *  ICMP ã¨ã©ã¼ãéä¿¡è
-ã«éç¥ããã
+	 *  データグラムの分割・再構成行わない場合は、全断片を破棄し、
+	 *  最後の断片を受信したとき、
+	 *  ICMP エラーを送信者に通知する。
 	 */
 	if ((ip6fh->off_flag & IP6F_MORE_FRAG) == 0) {
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/icmp6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/icmp6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/icmp6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -157,5 +145,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -163,6 +151,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -172,5 +159,5 @@
 
 /*
- *  icmp6_output -- ICMP6 ãã±ãããéä¿¡ããã
+ *  icmp6_output -- ICMP6 パケットを送信する。
  */
 
@@ -184,8 +171,6 @@
 
 	/*
-	 *  å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã
+	 *  宛先アドレスにふさわしい送信元アドレスを、
+	 *  ネットワークインタフェースから探索して利用する。
 	 */
 	ip6h = GET_IP6_HDR(output);
@@ -199,10 +184,10 @@
 	icmp6h = GET_ICMP6_HDR(output, off);
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	icmp6h->sum = 0;
 	icmp6h->sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)icmp6h - output->buf, 
 	                        ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE));
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_OUT_OCTETS],
 	               output->len - GET_IF_IP6_HDR_SIZE(output));
@@ -213,5 +198,5 @@
 
 /*
- *  icmp6_echo_request -- ã¨ã³ã¼è¦æ±ãåä¿¡ããã¨ãã®å¦ç
+ *  icmp6_echo_request -- エコー要求を受信したときの処理
  */
 
@@ -231,13 +216,13 @@
 
 	/*
-	 *  IPv6 ãããã¨ ICMPv6 ãããéã®æ¡å¼µããããé¤å»ããã
+	 *  IPv6 ヘッダと ICMPv6 ヘッダ間の拡張ヘッダを除去する。
 	 */
 	diff = off - IF_IP6_HDR_SIZE;
 	if (diff > 0) {
-		/* ICMPv6 ããããåã«è©°ããã*/
+		/* ICMPv6 ヘッダを前に詰める。*/
 		memmove(input->buf + IF_IP6_HDR_SIZE, input->buf + off, input->len - off);
 		off = IF_IP6_HDR_SIZE;
 
-		/* ãã¤ã­ã¼ãé·ãèª¿æ´ããã*/
+		/* ペイロード長を調整する。*/
 		ip6h->plen  = htons(ntohs(ip6h->plen) - diff);
 		input->len -= diff;
@@ -252,13 +237,10 @@
 
 	/*
-	 *  ã¡ãã»ã¼ã¸ã®åãã¨ã³ã¼è¦æ± (128) ãã
-	 *  ã¨ã³ã¼å¿ç­ (129) ã«å¤æ´ãã¦éãè¿ãã
+	 *  メッセージの型をエコー要求 (128) から
+	 *  エコー応答 (129) に変更して送り返す。
 	 */
 	icmp6h->type = ICMP6_ECHO_REPLY;
 
-	/* IPv6 ãããã®çºä¿¡å
-ã¢ãã¬ã¹ã¨å®å
-ã¢ãã¬ã¹ãå
-¥æ¿ããã*/
+	/* IPv6 ヘッダの発信元アドレスと宛先アドレスを入替える。*/
 	memcpy(&dst, &ip6h->dst, sizeof(T_IN6_ADDR));
 	memcpy(&ip6h->dst, &ip6h->src, sizeof(T_IN6_ADDR));
@@ -266,11 +248,7 @@
 
 	/*
-	 *  å
-ã®å®å
-ã¢ãã¬ã¹ããã«ãã­ã£ã¹ãã®å ´åã¯ã
-	 *  å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã
+	 *  元の宛先アドレスがマルチキャストの場合は、
+	 *  宛先アドレスにふさわしい送信元アドレスを、
+	 *  ネットワークインタフェースから探索して利用する。
 	 */
 	if (IN6_IS_ADDR_MULTICAST(&dst)) {
@@ -283,14 +261,14 @@
 		}
 
-	/* æ¬¡ãããã¨ããããªããããè¨­å®ããã*/
+	/* 次ヘッダとホップリミットを設定する。*/
 	ip6h->next = IPPROTO_ICMPV6;
 	ip6h->hlim = IP6_DEFTTL;
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	icmp6h->sum = 0;
 	icmp6h->sum = in6_cksum(input, IPPROTO_ICMPV6, (uint8_t*)icmp6h - input->buf, 
 	                        ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE));
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_OUT_OCTETS],
 	               input->len - GET_IF_IP6_HDR_SIZE(input));
@@ -302,5 +280,5 @@
 
 /*
- *  icmp6_notify_error -- ã¨ã©ã¼ãéç¥ããã
+ *  icmp6_notify_error -- エラーを通知する。
  */
 
@@ -314,5 +292,5 @@
 	len  = input->len - poff;
 
-	/* ãã¼ã¿ã°ã©ã é·ã ICMP6 ãããé· + IP6 ãããé·ä»¥ä¸ãªãä½ãããªãã*/
+	/* データグラム長が ICMP6 ヘッダ長 + IP6 ヘッダ長以下なら何もしない。*/
 	if (len < ICMP6_HDR_SIZE + IP6_HDR_SIZE)
 		return;
@@ -320,8 +298,8 @@
 	icmp6h = GET_ICMP6_HDR(input, poff);
 
-	/* æçµããããæ¢ç´¢ããã*/
+	/* 最終ヘッダを探索する。*/
 	loff = ip6_lasthdr(input, poff + ICMP6_HDR_SIZE, IPPROTO_IPV6, &next);
 
-	/* æçµãããã TCP/UDP ã®ã¿å¯¾å¿ããã*/
+	/* 最終ヘッダが TCP/UDP のみ対応する。*/
 	if (loff >= 0 && (next == IPPROTO_TCP || next == IPPROTO_UDP)) {
 
@@ -354,5 +332,5 @@
 
 /*
- *  icmp6_mtudisc_update -- Path MTU ãæ´æ°ããã
+ *  icmp6_mtudisc_update -- Path MTU を更新する。
  */
 
@@ -379,5 +357,5 @@
 
 /*
- *  icmp6_redirect_input -- åãç´ãã¡ãã»ã¼ã¸ã®å¦ç
+ *  icmp6_redirect_input -- 向け直しメッセージの処理
  */
 
@@ -398,7 +376,7 @@
 
 	/*
-	 *  IP ãããã®ãã§ãã¯ãä»¥ä¸ã®å ´åã¯ç ´æ£ããã
-	 *    ã»ãªã³ã¯ã­ã¼ã«ã«ä»¥å¤ããéããã¦ããã¡ãã»ã¼ã¸
-	 *    ã»ããããªãããã IPV6_MAXHLIM (255) ä»¥å¤
+	 *  IP ヘッダのチェック、以下の場合は破棄する。
+	 *    ・リンクローカル以外から送られてきたメッセージ
+	 *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
 	 */
 	if (!IN6_IS_ADDR_LINKLOCAL(&ip6h->src) || ip6h->hlim != IPV6_MAXHLIM)
@@ -407,16 +385,15 @@
 	rdh  = (T_ND_REDIRECT_HDR *)(input->buf + off);
 
-	/* åãç´ãã®çµç¹ã¢ãã¬ã¹ããã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®å ´åã¯ç ´æ£ããã*/
+	/* 向け直しの終点アドレスがマルチキャストアドレスの場合は破棄する。*/
 	if (IN6_IS_ADDR_MULTICAST(&rdh->dst))
 		goto err_ret;
 
-	/* ã¿ã¼ã²ããã¢ãã¬ã¹ãçµè·¯è¡¨ã«ç»é²ããã¦ããããã§ãã¯ããã*/
+	/* ターゲットアドレスが経路表に登録されているかチェックする。*/
 	if ((gw = in6_rtalloc(ifp, &rdh->dst)) != NULL) {
-		/* GW ã¢ãã¬ã¹ã¨éä¿¡å
-ã¢ãã¬ã¹ãç°ãªã£ã¦ããã°ç ´æ£ããã*/
+		/* GW アドレスと送信元アドレスが異なっていれば破棄する。*/
 		if (!IN6_ARE_ADDR_EQUAL(gw, &ip6h->src))
 			goto err_ret;
 		}
-	else	/* çµè·¯è¡¨ã«ãªããã°ç ´æ£ããã*/
+	else	/* 経路表になければ破棄する。*/
 		goto err_ret;
 
@@ -424,6 +401,6 @@
 
 	/*
-	 *  ã¿ã¼ã²ããã¢ãã¬ã¹ããªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã§ããã°ã
-	 *  ã¿ã¼ã²ããã¯ã«ã¼ã¿
+	 *  ターゲットアドレスがリンクローカルアドレスであれば、
+	 *  ターゲットはルータ
 	 */
 	if (IN6_IS_ADDR_LINKLOCAL(&rdh->target))
@@ -431,5 +408,5 @@
 
 	/*
-	 *  ã¿ã¼ã²ããã¢ãã¬ã¹ã¨çµç¹ã¢ãã¬ã¹ãåä¸ã§ããã°ããªã³ãªã³ã¯
+	 *  ターゲットアドレスと終点アドレスが同一であれば、オンリンク
 	 */
 	if (IN6_ARE_ADDR_EQUAL(&rdh->target, &rdh->dst))
@@ -437,20 +414,19 @@
 		
 	/*
-	 *  ã«ã¼ã¿ã§ãããªã³ãªã³ã¯ã§ããªããã°ã¨ã©ã¼
+	 *  ルータでも、オンリンクでもなければエラー
 	 */
 	if (!router && !onlink)
 		goto err_ret;
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããã*/
+	/* 近隣探索オプションのオフセットを記録する。*/
 	if (nd6_options(nd_opt_off, input->buf +  off + ND_REDIRECT_HDR_SIZE,
 	                            input->len - (off + ND_REDIRECT_HDR_SIZE)) != E_OK)
 		goto err_ret;
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ (åãç´ãã®ã«ã¼ã¿ã®ãªã³ã¯ã¢ãã¬ã¹) */
+	/* 近隣探索オプション (向け直しのルータのリンクアドレス) */
 	if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)]) {
 		opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + ND_REDIRECT_HDR_SIZE) +
 		                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)] - 8);
-	 	/* æ³¨æ: ãªãã·ã§ã³ãªãã»ããé
-åã«ã¯ããªãã»ãã + 8 ãè¨­å®ããã¦ããã*/
+	 	/* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
 		lladdr     = (uint8_t *)(opth + 1);
 		lladdr_len = (opth->len << 3);
@@ -458,14 +434,14 @@
 
 	/*
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹é·ãä¸è´ããªããã°ã¨ã©ã¼
+	 *  ネットワークインタフェースのアドレス長が一致しなければエラー
 	 */
 	if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
 		goto err_ret;
 
-	/* åãç´ãã®ã«ã¼ã¿ã®ãªã³ã¯ã¢ãã¬ã¹ãè¿é£ã­ã£ãã·ã¥ã«ç»é²ããã*/
+	/* 向け直しのルータのリンクアドレスを近隣キャッシュに登録する。*/
 	nd6_cache_lladdr(ifp, &rdh->target, (T_IF_ADDR *)lladdr, ND_REDIRECT, 
 	                 onlink ? ND_REDIRECT_ONLINK : ND_REDIRECT_ROUTER);
 
-	/* ã«ã¼ãã£ã³ã°è¡¨ã«ç»é²ããã*/
+	/* ルーティング表に登録する。*/
 	in6_rtredirect(&rdh->target, &rdh->dst, 128, IN_RTF_REDIRECT, TMO_IN_REDIRECT);
 
@@ -482,6 +458,5 @@
 
 /*
- *  icmp6_input -- ICMP6 ã®å
-¥åé¢æ°
+ *  icmp6_input -- ICMP6 の入力関数
  */
 
@@ -500,5 +475,5 @@
 	NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInMsgs, 1);
 
-	/* ICMP6 ãããã®é·ãããã§ãã¯ããã*/
+	/* ICMP6 ヘッダの長さをチェックする。*/
 	len  = input->len - off;
 	if (len < ICMP6_HDR_SIZE) {
@@ -511,5 +486,5 @@
 	icmp6h = GET_ICMP6_HDR(input, off);
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	if ((in6_cksum(input, IPPROTO_ICMPV6, off, ntohs(ip6h->plen) - (off - IF_IP6_HDR_SIZE)) & 0xffff) != 0) {
 		NET_COUNT_ICMP6(net_count_icmp6[NC_ICMP6_IN_ERR_PACKETS], 1);
@@ -520,19 +495,18 @@
 	code = icmp6h->code;
 
-	/* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/
+	/* メッセージの型により分岐する。*/
 	switch (icmp6h->type) {
 
-	case ICMP6_DST_UNREACH:			/* å®å
-å°éä¸å¯è½		*/
+	case ICMP6_DST_UNREACH:			/* 宛先到達不可能		*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInDestUnreachs, 1);
 		icmp6_notify_error(input, off);
 		break;
 
-	case ICMP6_ECHO_REQUEST:		/* ã¨ã³ã¼è¦æ±			*/
+	case ICMP6_ECHO_REQUEST:		/* エコー要求			*/
 		icmp6_echo_request(input, off);
 		return IPPROTO_DONE;
 		break;
 
-	case ICMP6_ECHO_REPLY:			/* ã¨ã³ã¼å¿ç­			*/
+	case ICMP6_ECHO_REPLY:			/* エコー応答			*/
 
 #ifdef ICMP_CFG_CALLBACK_ECHO_REPLY
@@ -544,5 +518,5 @@
 		break;
 
-	case ND_ROUTER_ADVERT:			/* ã«ã¼ã¿éç¥			*/
+	case ND_ROUTER_ADVERT:			/* ルータ通知			*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRouterAdvertisements, 1);
 		if (code != 0 || len < ROUTER_ADVERT_HDR_SIZE)
@@ -552,5 +526,5 @@
 		break;
 
-	case ND_NEIGHBOR_SOLICIT:		/* è¿é£è¦è«			*/
+	case ND_NEIGHBOR_SOLICIT:		/* 近隣要請			*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInNeighborSolicits, 1);
 		if (code != 0 || len < NEIGHBOR_SOLICIT_HDR_SIZE)
@@ -560,5 +534,5 @@
 		break;
 
-	case ND_NEIGHBOR_ADVERT:		/* è¿é£éç¥			*/
+	case ND_NEIGHBOR_ADVERT:		/* 近隣通知			*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInNeighborAdvertisements, 1);
 		if (code != 0 || len < NEIGHBOR_ADVERT_HDR_SIZE)
@@ -568,5 +542,5 @@
 		break;
 
-	case ND_REDIRECT:			/* åãç´ã			*/
+	case ND_REDIRECT:			/* 向け直し			*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInRedirects, 1);
 
@@ -592,5 +566,5 @@
 		break;
 
-	case ICMP6_PACKET_TOO_BIG:		/* ãã±ãããå¤§ããããã	*/
+	case ICMP6_PACKET_TOO_BIG:		/* パケットが大きすぎる。	*/
 
 #if NUM_IN6_HOSTCACHE_ENTRY > 0
@@ -603,25 +577,19 @@
 		break;
 
-	case ICMP6_TIME_EXCEEDED:		/* TTL ãè¶
-éããã		*/
+	case ICMP6_TIME_EXCEEDED:		/* TTL を超過した。		*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInTimeExcds, 1);
 		break;
 
-	case ICMP6_PARAM_PROB:			/* IPv6 ããããä¸æ­£ã		*/
+	case ICMP6_PARAM_PROB:			/* IPv6 ヘッダが不正。		*/
 		NET_COUNT_MIB(icmp6_ifstat.ipv6IfIcmpInParmProblems, 1);
 		break;
 
-	case MLD_LISTENER_QUERY:		/* ãã«ãã­ã£ã¹ãåä¿¡è
-ç
-§ä¼	*/
-	case MLD_LISTENER_REPORT:		/* ãã«ãã­ã£ã¹ãåä¿¡è
-å ±å	*/
-	case MLD_LISTENER_DONE:			/* ãã«ãã­ã£ã¹ãåä¿¡è
-çµäº	*/
-	case ND_ROUTER_SOLICIT:			/* ã«ã¼ã¿è¦è«			*/
-	case ICMP6_ROUTER_RENUMBERING:		/* ã«ã¼ã¿çªå·åè¨­å®		*/
-	case ICMP6_FQDN_QUERY:			/* FQDN ç
-§ä¼			*/
-	case ICMP6_FQDN_REPLY:			/* FQDN å¿ç­			*/
+	case MLD_LISTENER_QUERY:		/* マルチキャスト受信者照会	*/
+	case MLD_LISTENER_REPORT:		/* マルチキャスト受信者報告	*/
+	case MLD_LISTENER_DONE:			/* マルチキャスト受信者終了	*/
+	case ND_ROUTER_SOLICIT:			/* ルータ要請			*/
+	case ICMP6_ROUTER_RENUMBERING:		/* ルータ番号再設定		*/
+	case ICMP6_FQDN_QUERY:			/* FQDN 照会			*/
+	case ICMP6_FQDN_REPLY:			/* FQDN 応答			*/
 		syslog(LOG_INFO, "[ICMP6] unsupported type: %d.", icmp6h->type);
 		break;
@@ -640,5 +608,5 @@
 
 /*
- *  icmp6_error -- ICMP6 ã¨ã©ã¼éä¿¡é¢æ°
+ *  icmp6_error -- ICMP6 エラー送信関数
  */
 
@@ -655,10 +623,9 @@
 
 	/*
-	 *  å®å
-ã¢ãã¬ã¹ãããã«ãã­ã£ã¹ãã®å ´åã¯ã
-	 *  ä»¥ä¸ã®æ¡ä»¶ä»¥å¤ã®ã¨ãã¯å¦çãè¡ããªãã
+	 *  宛先アドレスが、マルチキャストの場合は、
+	 *  以下の条件以外のときは処理を行わない。
 	 *
-	 *    ã»ãã¼ã¿ã°ã©ã ãå¤§ããããã
-	 *    ã»IPv6 ãããã®ä¸æ­£ã§ããªãã·ã§ã³ãèªè­ã§ããªãã
+	 *    ・データグラムが大きすぎる。
+	 *    ・IPv6 ヘッダの不正で、オプションが認識できない。
 	 */
 	if (IN6_IS_ADDR_MULTICAST(&ip6h->dst) &&
@@ -668,8 +635,8 @@
 
 	/*
-	 *  å§ç¹ã¢ãã¬ã¹ããä»¥ä¸ã®å ´åã¯å¦çãè¡ããªãã
+	 *  始点アドレスが、以下の場合は処理を行わない。
 	 *
-	 *    ã»ç¡æå®
-	 *    ã»ãã«ãã­ã£ã¹ã
+	 *    ・無指定
+	 *    ・マルチキャスト
 	 */
 	if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src) ||
@@ -677,9 +644,9 @@
 		goto buf_rel;
 
-	/* æå¾ã®ããããæ¢ç´¢ããã*/
+	/* 最後のヘッダを探索する。*/
 	off = ip6_lasthdr(input, 0, IPPROTO_IPV6, &next);
 
 	/*
-	 *  ã¿ã¤ãããã¨ã©ã¼ãåãç´ãã® ICMP6 ãã±ããã®ã¨ã©ã¼ã«ã¯è¿ç­ããªãã
+	 *  タイプが、エラーか向け直しの ICMP6 パケットのエラーには返答しない。
 	 */
 	if (off >= 0 && next == IPPROTO_ICMPV6) {
@@ -695,9 +662,8 @@
 		}
 
-	/* DoS æ»æã«å¯¾ããé²å¾¡ã¯æªå®è£
- */
-
-	/*
-	 *  éãè¿ãã¡ãã»ã¼ã¸é·ããICMPv6 ã®æå¤§ãã¤ã­ã¼ãé·ã«èª¿æ´ããã
+	/* DoS 攻撃に対する防御は未実装 */
+
+	/*
+	 *  送り返すメッセージ長を、ICMPv6 の最大ペイロード長に調整する。
 	 *  IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE)
 	 */
@@ -707,5 +673,5 @@
 		len = input->len - IF_HDR_SIZE;
 
-	/* éä¿¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+	/* 送信用のネットワークバッファを獲得する。*/
 	if (in6_get_datagram(&output, len + ICMP6_HDR_SIZE, 0,
 	                     &ip6h->src, &in6_addr_unspecified,
@@ -714,5 +680,5 @@
 		goto buf_rel;
 
-	/* ICMP6 ããããè¨­å®ããã*/
+	/* ICMP6 ヘッダを設定する。*/
  	icmp6h = GET_ICMP6_HDR(output, IF_IP6_ICMP6_HDR_OFFSET);
  	icmp6h->type       = type;
@@ -720,5 +686,5 @@
  	icmp6h->icmp6_pptr = htonl(param);
  
- 	/* ã¨ã©ã¼ãã¼ã¿ãè¨­å®ããã*/
+ 	/* エラーデータを設定する。*/
  	memcpy(GET_ICMP6_SDU(output, IF_IP6_ICMP6_HDR_OFFSET), (uint8_t *)ip6h, len);
 
@@ -741,5 +707,5 @@
 #endif	/* of #ifdef SUPPORT_MIB */
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	icmp6_output(output, IF_IP6_HDR_SIZE);
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/if6_ether.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/if6_ether.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/if6_ether.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -117,5 +105,5 @@
 
 /*
- *  ether_map_ipv6_multicast -- IPv6 ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ããã¤ã¼ãµãããã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ
+ *  ether_map_ipv6_multicast -- IPv6 マルチキャストアドレスからイーサネット・マルチキャストアドレスへの変換
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/if6_ether.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/if6_ether.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/if6_ether.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -81,5 +69,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -156,6 +144,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -170,5 +157,5 @@
 
 /*
- *  in6_addmulti -- ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãç»é²ããã
+ *  in6_addmulti -- マルチキャストアドレスを登録する。
  */
 
@@ -185,6 +172,5 @@
 
 /*
- *  in6_ifinit -- ã¤ã³ã¿ãã§ã¼ã¹ã«ã¢ãã¬ã¹æ
-å ±ãè¨­å®ããåæåããã
+ *  in6_ifinit -- インタフェースにアドレス情報を設定し、初期化する。
  */
 
@@ -192,13 +178,13 @@
 in6_ifinit (T_IFNET *ifp, T_IN6_IFADDR *ia, const T_IN6_ADDR *addr, uint_t prefix_len)
 {
-	/* ã¢ãã¬ã¹ã¨ãã¬ãã£ãã¯ã¹é·ãè¨­å®ããã*/
+	/* アドレスとプレフィックス長を設定する。*/
 	ia->addr       = *addr;
 	ia->prefix_len = prefix_len;
 
-	/* ãã©ã°ãåæåããã*/
+	/* フラグを初期化する。*/
 	ia->flags = 0;
 
 	/*
-	 *  åãã¦ã¢ãã¬ã¹ãè¨­å®ãããã¨ããã¤ã³ã¿ãã§ã¼ã¹ç¬èªã®åæåãè¡ãã
+	 *  初めてアドレスが設定されたとき、インタフェース独自の初期化を行う。
 	 */
 
@@ -207,5 +193,5 @@
 
 /*
- *  in6_ifainit -- ã¤ã³ã¿ãã§ã¼ã¹ã¢ãã¬ã¹æ§é ä½ã®åæå
+ *  in6_ifainit -- インタフェースアドレス構造体の初期化
  */
 
@@ -226,5 +212,5 @@
 
 /*
- *  in6_if2idlen -- ã¤ã³ã¿ãã§ã¼ã¹ ID é·ãè¿ãã
+ *  in6_if2idlen -- インタフェース ID 長を返す。
  */
 
@@ -240,6 +226,5 @@
 
 /*
- *  in6_addr2ifaix -- ã¢ãã¬ã¹ããã¤ã³ã¿ãã§ã¼ã¹ã¢ãã¬ã¹æ
-å ±ã®ã¤ã³ããã¯ã¹ã«å¤æããã
+ *  in6_addr2ifaix -- アドレスからインタフェースアドレス情報のインデックスに変換する。
  */
 
@@ -262,5 +247,5 @@
 
 /*
- *  in6_addr2maix -- ã¢ãã¬ã¹ãããã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®ã¤ã³ããã¯ã¹ã«å¤æããã
+ *  in6_addr2maix -- アドレスからマルチキャストアドレスのインデックスに変換する。
  */
 
@@ -283,6 +268,5 @@
 
 /*
- *  in6_update_ifa -- ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹æ
-å ±ãæ´æ°ããã
+ *  in6_update_ifa -- インタフェースのアドレス情報を更新する。
  */
 
@@ -296,11 +280,11 @@
 	SYSTIM		now;
 
-	/* å¼æ°ããã§ãã¯ããã*/
+	/* 引数をチェックする。*/
 	if (addr == NULL)
 		return E_PAR;
 
 	/*
-	 *  æå¹æéããã§ãã¯ããã
-	 *  vltime (æå¹æé) ã¨ pltime (æ¨å¥¨æå¹æé) ã®åä½ã¯ [s]ã
+	 *  有効時間をチェックする。
+	 *  vltime (有効時間) と pltime (推奨有効時間) の単位は [s]。
 	 */
 	syscall(get_tim(&now));
@@ -313,5 +297,5 @@
 		return E_PAR;
 
-	/* ã¤ã³ã¿ãã§ã¼ã¹ãåæåããã*/
+	/* インタフェースを初期化する。*/
 	if ((error = in6_ifinit(ifp, ia, addr, prefix_len)) != E_OK)
 		return error;
@@ -319,5 +303,5 @@
 	if (IN6_IS_ADDR_LINKLOCAL(addr)) {
 
-		/* è¦è«ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãç»é²ããã*/
+		/* 要請マルチキャストアドレスを登録する。*/
 		llsol.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
 		llsol.s6_addr32[1] = 0x00000000;
@@ -328,6 +312,5 @@
 			return error;
 
-		/* å
-¨ãã¼ãã»ãªã³ã¯ã­ã¼ã«ã«ã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãç»é²ããã*/
+		/* 全ノード・リンクローカル・マルチキャストアドレスを登録する。*/
 		llsol.s6_addr32[2] = 0x00000000;
 		llsol.s6_addr32[3] = IPV6_ADDR_INT32_ONE;
@@ -337,17 +320,17 @@
 		}
 
-	/* ã«ã¼ã¿ã¤ã³ããã¯ã¹ãè¨­å®ããã*/
+	/* ルータインデックスを設定する。*/
 	ia->router_index = router_index;
 
-	/* ãã¬ãã£ãã¯ã¹ã¤ã³ããã¯ã¹ãè¨­å®ããã*/
+	/* プレフィックスインデックスを設定する。*/
 	ia->prefix_index = prefix_index;
 
-	/* ãã©ã°ãè¨­å®ããã*/
+	/* フラグを設定する。*/
 	ia->flags  = flags & ~(IN6_IFF_DUPLICATED | IN6_IFF_NODAD);
 	ia->flags |= IN6_IFF_DEFINED;
 
  	/*
- 	 *  ã¢ãã¬ã¹æå¹æéãè¨­å®ããã
-	 *  vltime (æå¹æé) ã¨ pltime (æ¨å¥¨æå¹æé) ã®åä½ã¯ [s]ã
+ 	 *  アドレス有効時間を設定する。
+	 *  vltime (有効時間) と pltime (推奨有効時間) の単位は [s]。
  	 */
 	syscall(get_tim(&now));
@@ -366,8 +349,8 @@
  		ia->lifetime.preferred = 0;
 
-	/* è¿é£æ¢ç´¢ã®åæè¨­å®ãè¡ãã*/
+	/* 近隣探索の初期設定を行う。*/
 	nd6_ifattach(ifp);
 
-	/* éè¤ã¢ãã¬ã¹æ¤åºãè¡ãã*/
+	/* 重複アドレス検出を行う。*/
 	if ((flags & IN6_IFF_NODAD) == 0) {
 		ia->flags |= IN6_IFF_TENTATIVE;
@@ -379,6 +362,6 @@
 
 /*
- * in6ifa_ifpwithix -- ã¤ã³ããã¯ã¹çªå·ããããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«
- *                     å²ãå½ã¦ããã¦ããã¢ãã¬ã¹ãæ¢ç´¢ããã
+ * in6ifa_ifpwithix -- インデックス番号から、ネットワークインタフェースに
+ *                     割り当てられているアドレスを探索する。
  */
 
@@ -390,6 +373,6 @@
 
 /*
- * in6ifa_ifpwithrtrix -- ã«ã¼ã¿ã®ã¤ã³ããã¯ã¹çªå·ããããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«
- *                        å²ãå½ã¦ããã¦ããã¢ãã¬ã¹ãæ¢ç´¢ããã
+ * in6ifa_ifpwithrtrix -- ルータのインデックス番号から、ネットワークインタフェースに
+ *                        割り当てられているアドレスを探索する。
  */
 
@@ -406,9 +389,6 @@
 
 /*
- * in6_ifawithifp -- å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹æ
-å ±ãã
- *                   ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã
+ * in6_ifawithifp -- 宛先アドレスにふさわしい送信元アドレス情報を、
+ *                   ネットワークインタフェースから探索する。
  */
 
@@ -419,6 +399,5 @@
 	int_t	ix;
 
-	/* å®å
-ã¢ãã¬ã¹ã¨åãã¹ã³ã¼ãã®ã¢ãã¬ã¹ãè¿ãã*/
+	/* 宛先アドレスと同じスコープのアドレスを返す。*/
 	if ((ix = in6_addr2ifaix(dst)) != IPV6_IFADDR_IX_INVALID)
 		return &ifp->in6_ifaddrs[ix];
@@ -440,8 +419,6 @@
 
 /*
- * in6_addrwithifp -- å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
- *                    ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã
+ * in6_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、
+ *                    ネットワークインタフェースから探索する。
  */
 
@@ -460,5 +437,5 @@
 
 /*
- * in6_if_up -- ã¤ã³ã¿ãã§ã¼ã¹èµ·åå¾ã®éè¤ã¢ãã¬ã¹æ¤åºãè¡ãã
+ * in6_if_up -- インタフェース起動後の重複アドレス検出を行う。
  */
 
@@ -466,5 +443,5 @@
 in6_if_up (T_IFNET *ifp)
 {
-#if 0						/* ä¿ç */
+#if 0						/* 保留 */
 	int_t dad_delay, ix;
 #endif	/* of #if 0 */
@@ -472,6 +449,6 @@
 	in6_ifattach(ifp);
 
-#if 0						/* ä¿ç */
-	/* éè¤ã¢ãã¬ã¹æ¤åºãè¡ãã*/
+#if 0						/* 保留 */
+	/* 重複アドレス検出を行う。*/
 	dad_delay = 0;
 	for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; )
@@ -483,5 +460,5 @@
 #if NUM_ND6_RTR_SOL_RETRY > 0
 
-	/* ã«ã¼ã¿è¦è«ãåºåããã*/
+	/* ルータ要請を出力する。*/
 	nd6_rtrsol_ctl();
 
@@ -490,5 +467,5 @@
 
 /*
- *  in6_are_prefix_equal -- ãã¬ãã£ãã¯ã¹ãåä¸ãèª¿ã¹ãã
+ *  in6_are_prefix_equal -- プレフィックスが同一か調べる。
  */
 
@@ -511,5 +488,5 @@
 
 /*
- *  in6_ifaddr_timer -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ã®ç®¡çã¿ã¤ãã¼
+ *  in6_ifaddr_timer -- ネットワークインタフェースのアドレスの管理タイマー
  */
 
@@ -530,5 +507,5 @@
 
 			/*
-			 *  æå¹æéãéããã®ã§åé¤ããã
+			 *  有効時間を過ぎたので削除する。
 			 */
 			ia->flags &= ~IN6_IFF_DEFINED;
@@ -538,5 +515,5 @@
 
 			/*
-			 *  æ¨å¥¨æå¹æéãéããã®ã§éæ¨å¥¨ã«ããã
+			 *  推奨有効時間を過ぎたので非推奨にする。
 			 */
 			ia->flags |= IN6_IFF_DEPRECATED;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -115,11 +103,11 @@
 
 /*
- *  IPv6 ã¢ãã¬ã¹æ§é 
- *
- *    RFC4291ï¼RFC1884ãRFC2373ãRFC3513 ã®ã¢ãããã¼ãï¼
- */
-
-/*
- *  IPv6 ã¢ãã¬ã¹
+ *  IPv6 アドレス構造
+ *
+ *    RFC4291（RFC1884、RFC2373、RFC3513 のアップデート）
+ */
+
+/*
+ *  IPv6 アドレス
  */
 
@@ -146,5 +134,5 @@
 
 /*
- *  IPv6 ã¢ãã¬ã¹ã®åæåãã¼ã¿
+ *  IPv6 アドレスの初期化データ
  */
 
@@ -168,13 +156,13 @@
 
 /*
- *  ç¹å¥ãªã¢ãã¬ã¹ã®ãã§ãã¯
- */
-
-/* ç¡æå® */
+ *  特別なアドレスのチェック
+ */
+
+/* 無指定 */
 
 #define IN6_IS_ADDR_UNSPECIFIED(a)	\
 	(memcmp((void *)(a), (void *)&in6_addr_unspecified, sizeof(T_IN6_ADDR)) == 0)
 
-/* ã«ã¼ãããã¯ */
+/* ループバック */
 
 #define IN6_IS_ADDR_LOOPBACK(a)		\
@@ -183,5 +171,5 @@
 
 /*
- *  ã¹ã³ã¼ã ID
+ *  スコープ ID
  */
 
@@ -193,21 +181,20 @@
 
 /*
- *  ã¦ãã­ã£ã¹ãã»ã¹ã³ã¼ã
- *
- *  æ³¨æ: ä¸ä½ 10 ãããã®ã¿ãã§ãã¯ããªããã°ãªããªããRFC2373 åç
-§
- */
-
-/* ãªã³ã¯ã­ã¼ã«ã« */
+ *  ユニキャスト・スコープ
+ *
+ *  注意: 上位 10 ビットのみチェックしなければならない。RFC2373 参照
+ */
+
+/* リンクローカル */
 
 #define IN6_IS_ADDR_LINKLOCAL(a)	\
 	(((a)->s6_addr8[0] == UINT_C(0xfe)) && (((a)->s6_addr8[1] & UINT_C(0xc0)) == UINT_C(0x80)))
 
-/* ãµã¤ãã­ã¼ã«ã« */
+/* サイトローカル */
 
 #define IN6_IS_ADDR_SITELOCAL(a)	\
 	(((a)->s6_addr8[0] == UINT_C(0xfe)) && (((a)->s6_addr8[1] & UINT_C(0xc0)) == UINT_C(0xc0)))
 
-/* éç´å¯è½ã¦ãã­ã£ã¹ã (ã°ã­ã¼ãã«) */
+/* 集約可能ユニキャスト (グローバル) */
 
 #define IN6_IS_ADDR_AGGREGATE_UNICAST(a)	\
@@ -215,5 +202,5 @@
 
 /*
- *  ãã«ãã­ã£ã¹ã
+ *  マルチキャスト
  */
 
@@ -221,5 +208,5 @@
 
 /*
- *  åä¸ã®ãã§ãã¯
+ *  同一のチェック
  */
 
@@ -227,23 +214,23 @@
 
 /*
- *  çµè·¯å¶å¾¡ç¨å®ç¾©
- */
-
-#define IPV6_RTHDR_TYPE_0		UINT_C(0)	/* IPv6 çµè·¯å¶å¾¡ãããã¿ã¤ã 0	*/
-
-/*
- *  è¦å®å¤ã¨å¶éå¤
- */
-
-#define IPV6_DEFAULT_MULTICAST_HOPS	1	/* ãã«ãã­ã£ã¹ãæã®ããããªãããã®è¦å®å¤	*/
-#define ND6_INFINITE_LIFETIME		0xffffffff	/* ã¢ãã¬ã¹ã®ç¡å¶éæå¹æé		*/
-
-/*
- *  ITRON TCP/IPv6 ã¢ãã¬ã¹/ãã¼ãçªå·ã®å®ç¾©
+ *  経路制御用定義
+ */
+
+#define IPV6_RTHDR_TYPE_0		UINT_C(0)	/* IPv6 経路制御ヘッダタイプ 0	*/
+
+/*
+ *  規定値と制限値
+ */
+
+#define IPV6_DEFAULT_MULTICAST_HOPS	1	/* マルチキャスト時のホップリミットの規定値	*/
+#define ND6_INFINITE_LIFETIME		0xffffffff	/* アドレスの無制限有効時間		*/
+
+/*
+ *  ITRON TCP/IPv6 アドレス/ポート番号の定義
  */
 
 typedef struct t_ipv6ep {
-	T_IN6_ADDR	ipaddr;		/* IPv6 ã¢ãã¬ã¹	*/
-	uint16_t	portno;		/* ãã¼ãçªå·	*/
+	T_IN6_ADDR	ipaddr;		/* IPv6 アドレス	*/
+	uint16_t	portno;		/* ポート番号	*/
 	} T_IPV6EP;
 
@@ -251,5 +238,5 @@
 
 /*
- *  ITRON/TCP/IP ç¨ IP ã¢ãã¬ã¹ã®å®ç¾©
+ *  ITRON/TCP/IP 用 IP アドレスの定義
  */
 
@@ -257,31 +244,28 @@
 
 /*
- *  åççæç¨ IPv6 TCP åä»å£
+ *  動的生成用 IPv6 TCP 受付口
  */
 
 typedef struct t_tcp6_crep {
-	/* æ¨æº */
-	ATR		repatr;		/* åä»å£å±æ§		*/
-	T_IPV6EP	myaddr;		/* èªåã®ã¢ãã¬ã¹	*/
-	/* å®è£
-ä¾å­ */
+	/* 標準 */
+	ATR		repatr;		/* 受付口属性		*/
+	T_IPV6EP	myaddr;		/* 自分のアドレス	*/
+	/* 実装依存 */
 	} T_TCP6_CREP;
 
 /*
- *  åççæç¨ IPv6 UDP éä¿¡ç«¯ç¹
+ *  動的生成用 IPv6 UDP 通信端点
  */
 
 typedef struct t_udp6_ccep {
-	/* æ¨æº */
-	ATR		cepatr;		/* UDP éä¿¡ç«¯ç¹å±æ§		*/
-	T_IPV6EP	myaddr;		/* èªåã®ã¢ãã¬ã¹		*/
-	FP		callback;	/* ã³ã¼ã«ããã¯é¢æ°		*/
-	/* å®è£
-ä¾å­ */
+	/* 標準 */
+	ATR		cepatr;		/* UDP 通信端点属性		*/
+	T_IPV6EP	myaddr;		/* 自分のアドレス		*/
+	FP		callback;	/* コールバック関数		*/
+	/* 実装依存 */
 	} T_UDP6_CCEP;
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -295,6 +279,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -306,5 +289,5 @@
 
 /*
- *  TINET ç¬èª API
+ *  TINET 独自 API
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -114,5 +102,5 @@
 
 /*
- * EUI64 ã®å®ç¾©
+ * EUI64 の定義
  */
 
@@ -122,5 +110,5 @@
 
 /*
- * get_mac6_ifid -- MAC (6 ãªã¯ããã) ã¢ãã¬ã¹ã§ãã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ãè¨­å®ããã
+ * get_mac6_ifid -- MAC (6 オクテット) アドレスで、インタフェース識別子を設定する。
  */
 
@@ -145,5 +133,5 @@
 
 /*
- * get_rand_ifid -- ä¹±æ°ã«ãããã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ãè¨­å®ããã
+ * get_rand_ifid -- 乱数により、インタフェース識別子を設定する。
  */
 
@@ -159,5 +147,5 @@
 
 /*
- *  in6_ifattach_linklocal -- ã¤ã³ã¿ãã§ã¼ã¹ã«ãªã³ã¯ã­ã¼ã«ã«ã»ã¢ãã¬ã¹ãå²ãå½ã¦ãã
+ *  in6_ifattach_linklocal -- インタフェースにリンクローカル・アドレスを割り当てる。
  */
 
@@ -169,15 +157,14 @@
 
 	/*
-	 *  ãªã³ã¯ã­ã¼ã«ã«ã»ãã¬ãã£ãã¯ã¹ fe80::/64 ãè¨­å®ããã
+	 *  リンクローカル・プレフィックス fe80::/64 を設定する。
 	 */
 	addr.s6_addr32[0] = IPV6_ADDR_INT32_ULL;
 	addr.s6_addr32[1] = ULONG_C(0);
 
-	/* ã¤ã³ã¿ãã§ã¼ã¹è­å¥å­ãè¨­å®ããã*/
+	/* インタフェース識別子を設定する。*/
 	if ((error = IF_IN6_IFID(ifp, &addr)) != E_OK)
 		return error;
 
-	/* ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹æ
-å ±ãæ´æ°ããã*/
+	/* インタフェースのアドレス情報を更新する。*/
 	if ((error = in6_update_ifa(ifp, &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL],
 	                            &addr, 64, ND6_INFINITE_LIFETIME,
@@ -192,5 +179,5 @@
 
 /*
- *  in6_ifattach -- ã¤ã³ã¿ãã§ã¼ã¹ã«ã¢ãã¬ã¹ãå²ãå½ã¦ãã
+ *  in6_ifattach -- インタフェースにアドレスを割り当てる。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_ifattach.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,5 +68,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_rename.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_rename.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_rename.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,6 +36,5 @@
 
 /*
- *  TCP/IPv6 ãã­ãã³ã«ã¹ã¿ãã¯å
-é¨åã®ãªãã¼ã 
+ *  TCP/IPv6 プロトコルスタック内部名のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -150,8 +138,8 @@
 
 /*
- *  in6_make_ipv4mapped -- IPv4 å°å½±ã¢ãã¬ã¹ãçæããã
- *
- *  æ³¨æ:
- *    src ã¯ãã¹ããã¤ããªã¼ãã¼
+ *  in6_make_ipv4mapped -- IPv4 射影アドレスを生成する。
+ *
+ *  注意:
+ *    src はホストバイトオーダー
  *
  */
@@ -173,5 +161,5 @@
 
 /*
- *  in6_rtinit -- ã«ã¼ãã£ã³ã°è¡¨ãåæåããã
+ *  in6_rtinit -- ルーティング表を初期化する。
  */
 
@@ -189,5 +177,5 @@
 
 /*
- *  in6_rtnewentry -- æ°ããã¨ã³ããªãç²å¾ããã
+ *  in6_rtnewentry -- 新しいエントリを獲得する。
  */
 
@@ -199,5 +187,5 @@
 	int_t		ix;
 
-	/* ç©ºãã¨ã³ããªãæ¢ãã*/
+	/* 空きエントリを探す。*/
 	for (ix = NUM_IN6_STATIC_ROUTE_ENTRY; ix < NUM_IN6_ROUTE_ENTRY; ix ++) {
 		rt = &routing6_tbl[ix];
@@ -208,10 +196,10 @@
 		}
 
-	/* expire ã®åä½ã¯ [s]ã*/
+	/* expire の単位は [s]。*/
 	syscall(get_tim(&now));
 	now /= SYSTIM_HZ;
 
 	if (frt == NULL) {
-		/* ç©ºãããªããã°ãæå¹æéããã£ã¨ãç­ãã¨ã³ããªãç©ºãã«ããã*/
+		/* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/
 		T_IN6_RTENTRY	*srt = NULL;
 		int_t		diff, sdiff = INT_MAX;
@@ -222,5 +210,5 @@
 			diff = (int_t)(rt->expire - now);
 			if (diff <= 0) {	/* rt->expire <= now */
-				/* æ¢ã«ãæå¹æéãéãã¦ããã*/
+				/* 既に、有効時間が過ぎている。*/
 				frt = rt;
 				break;
@@ -243,5 +231,5 @@
 
 /*
- *  in6_rttimer -- ã«ã¼ãã£ã³ã°è¡¨ã®ç®¡çã¿ã¤ãã¼
+ *  in6_rttimer -- ルーティング表の管理タイマー
  */
 
@@ -252,5 +240,5 @@
 	int_t	ix;
 
-	/* expire ã®åä½ã¯ [s]ã*/
+	/* expire の単位は [s]。*/
 	syscall(get_tim(&now));
 	now /= SYSTIM_HZ;
@@ -269,5 +257,5 @@
 
 /*
- *  ãã¹ãã­ã£ãã·ã¥
+ *  ホストキャッシュ
  */
 
@@ -277,5 +265,5 @@
 
 /*
- *  in6_lookup_ifaddr -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«å²ãå½ã¦ããã¦ããã¢ãã¬ã¹ãæ¢ç´¢ããã
+ *  in6_lookup_ifaddr -- ネットワークインタフェースに割り当てられているアドレスを探索する。
  */
 
@@ -294,5 +282,5 @@
 
 /*
- *  in6_lookup_multi -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãæ¤ç´¢ããã
+ *  in6_lookup_multi -- ネットワークインタフェースのマルチキャストアドレスを検索する。
  */
 
@@ -309,5 +297,5 @@
 
 /*
- *  in6_set_header -- IPv6 ããããè¨­å®ããã
+ *  in6_set_header -- IPv6 ヘッダを設定する。
  */
 
@@ -322,8 +310,6 @@
 
 	/*
-	 *  å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã
+	 *  宛先アドレスにふさわしい送信元アドレスを、
+	 *  ネットワークインタフェースから探索して利用する。
 	 */
 	if (srcaddr == NULL || !IN6_IS_ADDR_UNSPECIFIED(srcaddr))
@@ -334,5 +320,5 @@
 		srcaddr = &ia->addr;
 
-	/* IPv6 ããããè¨­å®ããã*/
+	/* IPv6 ヘッダを設定する。*/
 	ip6h		= GET_IP6_HDR(nbuf);
 	ip6h->vcf	= htonl(IP6_MAKE_VCF(IPV6_VERSION, 0));
@@ -355,5 +341,5 @@
 
 /*
- *  in6_get_datagram -- IPv6 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨­å®ããã
+ *  in6_get_datagram -- IPv6 データグラムを獲得し、ヘッダを設定する。
  */
 
@@ -366,8 +352,8 @@
 	uint_t		align;
 
-	/* ãã¼ã¿é·ã¯ 4 ãªã¯ãããå¢çã«èª¿æ´ããã	*/
+	/* データ長は 4 オクテット境界に調整する。	*/
 	align = (len + 3) >> 2 << 2;
 
-	/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã	*/
+	/* ネットワークバッファを獲得する。	*/
 	if ((error = tget_net_buf_ex(nbuf, IF_IP6_HDR_SIZE + align,
 	                                   IF_IP6_HDR_SIZE + maxlen, nbatr, tmout)) != E_OK)
@@ -375,12 +361,12 @@
 
 	/*
-	 *  ããå¤§ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããå ´åã®ã¿é·ããèª¿æ´ããã
-	 *  ããå°ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ã®ç²å¾ã¯ãéä¿¡ã¦ã£ã³ããããã¡ã®
-	 *  çã³ãã¼æ©è½ã§ä½¿ç¨ãããå®éã«éä¿¡ããã¾ã§ããã¼ã¿ãµã¤ãºã¯æ±ºå®ã§ããªãã
+	 *  より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。
+	 *  より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの
+	 *  省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。
 	 */
 	if ((nbatr & NBA_SEARCH_ASCENT) != 0)
 		(*nbuf)->len = IF_IP6_HDR_SIZE + len;
 
-	/* IPv6 ããããè¨­å®ããã*/
+	/* IPv6 ヘッダを設定する。*/
 	if ((error = in6_set_header(*nbuf, len, dstaddr, srcaddr, next, hlim)) != E_OK) {
 		syscall(rel_net_buf(*nbuf));
@@ -389,5 +375,5 @@
 		}
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset(GET_IP6_SDU(*nbuf) + len, 0, align - len);
@@ -397,5 +383,5 @@
 
 /*
- *  in6_get_maxnum_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨­å®å¯è½ãªæå¤§ã¢ãã¬ã¹æ°ãè¿ãã
+ *  in6_get_maxnum_ifaddr -- インタフェースに設定可能な最大アドレス数を返す。
  */
 
@@ -407,5 +393,5 @@
 
 /*
- *  in6_get_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨­å®ããã¦ããã¢ãã¬ã¹ãè¿ãã
+ *  in6_get_ifaddr -- インタフェースに設定されているアドレスを返す。
  */
 
@@ -423,5 +409,5 @@
 
 /*
- *  ipv62str -- IPv6 ã¢ãã¬ã¹ãæå­åã«å¤æããã
+ *  ipv62str -- IPv6 アドレスを文字列に変換する。
  */
 
@@ -493,7 +479,7 @@
 
 /*
- *  in6_cksum -- IPv6 ã®ãã©ã³ã¹ãã¼ãå±¤ãããã®ãã§ãã¯ãµã ãè¨ç®ããã
- *
- *  æ³¨æ: æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã
+ *  in6_cksum -- IPv6 のトランスポート層ヘッダのチェックサムを計算する。
+ *
+ *  注意: 戻り値はネットワークバイトオーダ
  */
 
@@ -504,8 +490,8 @@
 	uint_t		align;
 
-	/* 4 ãªã¯ãããå¢çã®ãã¼ã¿é· */
+	/* 4 オクテット境界のデータ長 */
 	align = (len + 3) >> 2 << 2;
 
-	/* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/
+	/* 4 オクテット境界までパディングで埋める。*/
 	if (align > len)
 		memset((uint8_t*)nbuf->buf + off + len, 0, align - len);
@@ -520,5 +506,5 @@
 
 /*
- *  get_ip6_hdr_size -- æ¡å¼µããããå«ãã IPv6 ãããé·ãè¿ãã
+ *  get_ip6_hdr_size -- 拡張ヘッダも含めた IPv6 ヘッダ長を返す。
  */
 
@@ -533,13 +519,13 @@
 	while (1) {
 		next = *hdr;
-		if (curr ==IPPROTO_NONE)		/* æ¬¡ãããç¡ã			*/
+		if (curr ==IPPROTO_NONE)		/* 次ヘッダ無し			*/
 			break;
-		else if (curr == IPPROTO_FRAGMENT)	/* æ­çå			*/
+		else if (curr == IPPROTO_FRAGMENT)	/* 断片化			*/
 			hsize = sizeof(T_IP6_FRAG_HDR);
-		else if (curr == IPPROTO_AH)		/* IPv6 èªè¨¼			*/
+		else if (curr == IPPROTO_AH)		/* IPv6 認証			*/
 			hsize = (((T_IP6_AH_HDR *)hdr)->len + 2) * 4;
-		else if (curr == IPPROTO_HOPOPTS ||	/* ä¸­ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³	*/
-		         curr == IPPROTO_DSTOPTS ||	/* IPv6 çµç¹ãªãã·ã§ã³		*/
-		         curr == IPPROTO_ROUTING)	/* çµè·¯å¶å¾¡			*/
+		else if (curr == IPPROTO_HOPOPTS ||	/* 中継点 (Hop-by-Hop) オプション	*/
+		         curr == IPPROTO_DSTOPTS ||	/* IPv6 終点オプション		*/
+		         curr == IPPROTO_ROUTING)	/* 経路制御			*/
 			hsize = (((T_IP6_EXT_HDR *)hdr)->len + 1) * 8;
 		else
@@ -553,5 +539,5 @@
 
 /*
- *  in6_plen2pmask -- ãã¬ãã£ãã¯ã¹é·ãããã¹ã¯ãçæããã
+ *  in6_plen2pmask -- プレフィックス長からマスクを生成する。
  */
 
@@ -571,5 +557,5 @@
 
 /*
- *  in6_rtalloc -- ã«ã¼ãã£ã³ã°è¡¨ãæ¢ç´¢ããã
+ *  in6_rtalloc -- ルーティング表を探索する。
  */
 
@@ -585,7 +571,6 @@
 
 		/*
-		 *  ãµã¤ãã­ã¼ã«ã«ã¢ãã¬ã¹ãéç´å¯è½ï¼ã°ã­ã¼ãã«ï¼ã¢ãã¬ã¹ã®å ´åã¯ã
-		 *  åä¸ãªã³ã¯å
-ã®ãã¼ãã§ãããããã§ãã¯ããã
+		 *  サイトローカルアドレスか集約可能（グローバル）アドレスの場合は、
+		 *  同一リンク内のノードであるかをチェックする。
 		 */
 
@@ -593,6 +578,5 @@
 		now /= SYSTIM_HZ;
 
-		/* æ¨å¥¨æå¹æéå
-ã®ã¢ãã¬ã¹ãæ¢ç´¢ããã*/
+		/* 推奨有効時間内のアドレスを探索する。*/
 		for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) {
 			ia = &ifp->in6_ifaddrs[ix];
@@ -605,6 +589,5 @@
 			}
 
-		/* æå¹æéå
-ã®ã¢ãã¬ã¹ãæ¢ç´¢ããã*/
+		/* 有効時間内のアドレスを探索する。*/
 		for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) {
 			ia = &ifp->in6_ifaddrs[ix];
@@ -617,5 +600,5 @@
 
 		/*
-		 *  ãã¬ãã£ãã¯ã¹ãæ¢ç´¢ããã
+		 *  プレフィックスを探索する。
 		 */
 		if (nd6_onlink_prefix_lookup (dst) != NULL)
@@ -623,5 +606,5 @@
 
 		/*
-		 *  éççµè·¯è¡¨ãæ¢ç´¢ããã
+		 *  静的経路表を探索する。
 		 */
 
@@ -635,7 +618,7 @@
 
 				/*
-				 *  åãç´ãã«ããã¨ã³ããªã¯ãæå¹æéãåããæå»ãå»¶é·ããã
-				 *  expire ã®åä½ã¯ [s]ã
-				 *  TMO_IN_REDIRECT ã®åä½ã¯ [ms]ã
+				 *  向け直しによるエントリは、有効時間が切れる時刻を延長する。
+				 *  expire の単位は [s]。
+				 *  TMO_IN_REDIRECT の単位は [ms]。
 				 */
 				if (ix > NUM_IN6_STATIC_ROUTE_ENTRY) {
@@ -655,5 +638,5 @@
 
 		/*
-		 *  ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ããæ¢ç´¢ããã
+		 *  ディフォルトルータ・リストを探索する。
 		 */
 		return nd6_router_lookup();
@@ -664,5 +647,5 @@
 
 /*
- *  in6_gateway_lookup -- ã«ã¼ãã£ã³ã°è¡¨ã®ã«ã¼ã¿ãæ¢ç´¢ããã
+ *  in6_gateway_lookup -- ルーティング表のルータを探索する。
  */
 
@@ -680,7 +663,7 @@
 
 /*
- *  in6_rtredirect -- ã«ã¼ãã£ã³ã°è¡¨ã«ã¨ã³ããªãç»é²ããã
- *
- *    æ³¨æ: å¼æ° tmo ã®åä½ã¯ [us]ã
+ *  in6_rtredirect -- ルーティング表にエントリを登録する。
+ *
+ *    注意: 引数 tmo の単位は [us]。
  */
 
@@ -701,5 +684,5 @@
 
 /*
- *  in6_hostcache_lookup -- IPv6 ãã¹ãã­ã£ãã·ã¥ãæ¢ç´¢ããã
+ *  in6_hostcache_lookup -- IPv6 ホストキャッシュを探索する。
  */
 
@@ -717,5 +700,5 @@
 
 /*
- *  in6_hostcache_update -- IPv6 ãã¹ãã­ã£ãã·ã¥ãæ´æ°ããã
+ *  in6_hostcache_update -- IPv6 ホストキャッシュを更新する。
  */
 
@@ -729,8 +712,8 @@
 	syscall(get_tim(&now));
 
-	/* æ¢ã«ç»é²ããã¦ãããæ¢ç´¢ããã*/
+	/* 既に登録されているか探索する。*/
 	if ((hc = in6_hostcache_lookup (dst)) == NULL) {
 
-		/* ç©ºãã®ãã¹ãã­ã£ãã·ã¥ãæ¢ãã*/
+		/* 空きのホストキャッシュを探す。*/
 		for (ix = NUM_IN6_HOSTCACHE_ENTRY; ix -- > 0; ) {
 			if (IN6_IS_HOSTCACHE_FREE(&in6_hostcache[ix]))
@@ -740,6 +723,6 @@
 		if (ix < 0) {
 			/*
-			 *  ç©ºããç¡ãæã¯ãæå¹æéã®åããæéãã
-			 *  æãç­ããã¹ãã­ã£ãã·ã¥ãç½®æããã
+			 *  空きが無い時は、有効時間の切れる時間が、
+			 *  最も短いホストキャッシュを置換する。
 			 */
 			old = now - 1;
@@ -761,6 +744,6 @@
 
 		/*
-		 *  æ¢ã«ç»é²ããã¦ãã¦ãæ°ãã MTU ããç»é²ããã¦ãã MTU ããå¤§ããã¨ãã
-		 *  IN6_HOSTCACHE_INCREASEï¼æ¨å¥¨ 10 åï¼éã¯æ´æ°ããªãã
+		 *  既に登録されていて、新しい MTU が、登録されている MTU より大きいとき、
+		 *  IN6_HOSTCACHE_INCREASE（推奨 10 分）間は更新しない。
 		 */
 		return;
@@ -772,7 +755,7 @@
 
 /*
- *  in6_hostcache_getmtu -- IPv6 ãã¹ãã­ã£ãã·ã¥ããã MTU ãåå¾ããã
- *
- *    æ»ãå¤ã 0 ã§ããã°ããã¹ãã­ã£ãã·ã¥ã«ç»é²ããã¦ããªãã
+ *  in6_hostcache_getmtu -- IPv6 ホストキャッシュをから MTU を取得する。
+ *
+ *    戻り値が 0 であれば、ホストキャッシュに登録されていない。
  */
 
@@ -782,5 +765,5 @@
 	T_IN6_HOSTCACHE_ENTRY	*hc;
 
-	/* æ¢ã«ç»é²ããã¦ãããæ¢ç´¢ããã*/
+	/* 既に登録されているか探索する。*/
 	if ((hc = in6_hostcache_lookup(dst)) == NULL)
 		return 0;
@@ -790,7 +773,7 @@
 
 /*
- *  in6_hostcache_timer -- IPv6 ãã¹ãã­ã£ãã·ã¥æ´æ°ã¿ã¤ãã¼
- *
- *    1ç§å¨æã§èµ·åãããã
+ *  in6_hostcache_timer -- IPv6 ホストキャッシュ更新タイマー
+ *
+ *    1秒周期で起動される。
  */
 
@@ -812,8 +795,7 @@
 
 /*
- *  in6_timer -- IPv6 å
-±éã¿ã¤ãã¼
- *
- *    1ç§å¨æã§èµ·åãããã
+ *  in6_timer -- IPv6 共通タイマー
+ *
+ *    1秒周期で起動される。
  */
 
@@ -843,6 +825,5 @@
 
 /*
- *  in6_init -- IPv6 å
-±éæ©è½ãåæåããã
+ *  in6_init -- IPv6 共通機能を初期化する。
  */
 
@@ -861,6 +842,5 @@
 
 /*
- *  in6_is_dstaddr_accept -- å®å
-ã¢ãã¬ã¹ã¨ãã¦æ­£ããããã§ãã¯ããã
+ *  in6_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
  */
 
@@ -877,7 +857,7 @@
 
 /*
- *  in6_add_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã« IPv6 ã¢ãã¬ã¹ãè¨­å®ããã
- *
- *    vltime ã¨ pltime ã®åä½ã¯[s]
+ *  in6_add_ifaddr -- インタフェースに IPv6 アドレスを設定する。
+ *
+ *    vltime と pltime の単位は[s]
  */
 
@@ -890,10 +870,10 @@
 	int_t		ix;
 
-	/* ç©ºãã®ã¨ã³ããªã¼ãæ¢ãã*/
+	/* 空きのエントリーを探す。*/
 	ix = 0;
 	while (true) {
 		ia = in6ifa_ifpwithix(ifp, ix ++);
 
-		/* ç©ºããç¡ããã°ã¨ã©ã¼ */
+		/* 空きが無ければエラー */
 		if (ia == NULL)
 			return E_OBJ;
@@ -903,5 +883,5 @@
 		}
 
-	/* ç»é²ããã*/
+	/* 登録する。*/
 	return in6_update_ifa(ifp, ia, addr, prefix_len, vltime, pltime,
 	                      IN6_RTR_IX_UNREACH, ND6_PREFIX_IX_INVALID, 0);
@@ -909,8 +889,8 @@
 
 /*
- *  in6_upd_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨­å®ããã¦ãã IPv6 ã¢ãã¬ã¹ãæ´æ°ããã
- *
- *    ç»é²ããã¦ããªããã°ãè¿½å ããã
- *    vltime ã¨ pltime ã®åä½ã¯[s]
+ *  in6_upd_ifaddr -- インタフェースに設定されている IPv6 アドレスを更新する。
+ *
+ *    登録されていなければ、追加する。
+ *    vltime と pltime の単位は[s]
  */
 
@@ -924,6 +904,6 @@
 
 	/*
-	 *  ã¢ãã¬ã¹ãä¸è´ããã¨ã³ããªã¼ãæ¢ãã
-	 *  ç¡ããã°ç»é²ããã
+	 *  アドレスが一致するエントリーを探す。
+	 *  無ければ登録する。
 	 */
 	if ((ix = in6_addr2ifaix(addr)) == IPV6_IFADDR_IX_INVALID)
@@ -931,11 +911,11 @@
 
 	/*
-	 *  ã¤ã³ããã¯ã¹çªå·ãããã¨ã³ããªã¼ã«å¤æããã
-	 *  ã¨ã©ã¼ã«ãªããªãã¯ãã§ããããç¢ºèªããã
+	 *  インデックス番号から、エントリーに変換する。
+	 *  エラーにならないはずであるが、確認する。
 	 */
 	if ((ia = in6ifa_ifpwithix (ifp, ix)) == NULL)
 		return E_OBJ;
 
-	/* æ´æ°ããã*/
+	/* 更新する。*/
 	return in6_update_ifa(ifp, ia, addr, prefix_len, vltime, pltime,
 	                      IN6_RTR_IX_UNREACH, ND6_PREFIX_IX_INVALID, 0);
@@ -943,5 +923,5 @@
 
 /*
- *  in6_del_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨­å®ããã¦ãã IPv6 ã¢ãã¬ã¹ãåé¤ããã
+ *  in6_del_ifaddr -- インタフェースに設定されている IPv6 アドレスを削除する。
  */
 
@@ -952,8 +932,8 @@
 	int_t		ix;
 
-	/* ã¢ãã¬ã¹ãä¸è´ããã¨ã³ããªã¼ãæ¢ãã*/
+	/* アドレスが一致するエントリーを探す。*/
 	if ((ix = in6_addr2ifaix(addr)) != IPV6_IFADDR_IX_INVALID) {
 
-		/* ã¨ã³ããªã¼ãç¡å¹ã«ããã*/
+		/* エントリーを無効にする。*/
 		ifp->in6_ifaddrs[ix].flags &= ~IN6_IFF_DEFINED;
 		return E_OK;
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/in6_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -115,5 +103,5 @@
 
 /*
- *  ã¢ãã¬ã¹ã®å®ç¾©
+ *  アドレスの定義
  */
 
@@ -149,8 +137,8 @@
 
 /*
- *  ç¹å¥ãªã¢ãã¬ã¹ã®ãã§ãã¯
- */
-
-/* IPv4 äºæ */
+ *  特別なアドレスのチェック
+ */
+
+/* IPv4 互換 */
 
 #ifdef _NET_CFG_BYTE_ORDER
@@ -160,5 +148,5 @@
 #endif
 
-/* IPv4 å°å½± */
+/* IPv4 射影 */
 
 #ifdef _NET_CFG_BYTE_ORDER
@@ -169,5 +157,5 @@
 #endif
 
-/* è¦è«ãã«ãã­ã£ã¹ã */
+/* 要請マルチキャスト */
 
 #ifdef _NET_CFG_BYTE_ORDER
@@ -182,5 +170,5 @@
 
 /*
- *  ã¢ãã¬ã¹æå¹æéæ§é ä½
+ *  アドレス有効時間構造体
  */
 
@@ -188,50 +176,47 @@
 
 	/*
-	 * expire ã¨ perferred ã¯ãã·ã¹ãã ãèµ·åãã¦ããã®çµéæé
+	 * expire と perferred は、システムが起動してからの経過時間
 	 */
-	uint32_t	expire;		/* æå¹æéãåããæå» [s]	*/
-	uint32_t	preferred;	/* æ¨å¥¨æå¹æéãåããæå» [s]	*/
+	uint32_t	expire;		/* 有効時間が切れる時刻 [s]	*/
+	uint32_t	preferred;	/* 推奨有効時間が切れる時刻 [s]	*/
 
 	/*
-	 * vltime ã¨ pltime ã¯ãè¿½å /å¤æ´ãã¦ããã®ç¸å¯¾æé
+	 * vltime と pltime は、追加/変更してからの相対時間
 	 */
-	uint32_t	vltime;		/* æå¹æé [us]			*/
-	uint32_t	pltime;		/* æ¨å¥¨æå¹æé [us]		*/
+	uint32_t	vltime;		/* 有効時間 [us]			*/
+	uint32_t	pltime;		/* 推奨有効時間 [us]		*/
 	} __attribute__((packed, aligned(2)))T_IN6_ADDR_LIFETIME;
 
 /*
- *  ã¤ã³ã¿ãã§ã¼ã¹ã¢ãã¬ã¹æ§é ä½
+ *  インタフェースアドレス構造体
  */
 
 typedef struct t_in6_ifaddr {
-	T_IN6_ADDR		addr;		/* IPv6 ã¢ãã¬ã¹		*/
-	T_IN6_ADDR_LIFETIME	lifetime;	/* æå¹æé		*/
-	uint8_t			flags;		/* ãã©ã°		*/
-	uint8_t			prefix_len;	/* ãã¬ãã£ãã¯ã¹é·	*/
-	uint8_t			router_index;	/* ã«ã¼ã¿ã¤ã³ããã¯ã¹	*/
-	uint8_t			prefix_index;	/* ãã¬ãã£ãã¯ã¹ã¤ã³ããã¯ã¹	*/
-	uint8_t			na_icount;	/* éè¤ã¢ãã¬ã¹æ¤åº (DAD) éç¥ã®å
-¥ååæ°	*/
-	uint8_t			ns_icount;	/* éè¤ã¢ãã¬ã¹æ¤åº (DAD) è¦è«ã®å
-¥ååæ°	*/
-	uint8_t			ns_ocount;	/* éè¤ã¢ãã¬ã¹æ¤åº (DAD) è¦è«ã®åºååæ°	*/
+	T_IN6_ADDR		addr;		/* IPv6 アドレス		*/
+	T_IN6_ADDR_LIFETIME	lifetime;	/* 有効時間		*/
+	uint8_t			flags;		/* フラグ		*/
+	uint8_t			prefix_len;	/* プレフィックス長	*/
+	uint8_t			router_index;	/* ルータインデックス	*/
+	uint8_t			prefix_index;	/* プレフィックスインデックス	*/
+	uint8_t			na_icount;	/* 重複アドレス検出 (DAD) 通知の入力回数	*/
+	uint8_t			ns_icount;	/* 重複アドレス検出 (DAD) 要請の入力回数	*/
+	uint8_t			ns_ocount;	/* 重複アドレス検出 (DAD) 要請の出力回数	*/
 	} __attribute__((packed, aligned(2)))T_IN6_IFADDR;
 
 /*
- *  ã¢ãã¬ã¹ç¶æ
-ãã©ã°
- */
-
-#define IN6_IFF_ANYCAST		UINT_C(0x01)	/* ã¨ãã¼ã­ã£ã¹ã	*/
-#define IN6_IFF_DEFINED		UINT_C(0x02)	/* å®ç¾©æ¸ã¿		*/
-#define IN6_IFF_TENTATIVE	UINT_C(0x04)	/* éè¤æ¤åºä¸­		*/
-#define IN6_IFF_DUPLICATED	UINT_C(0x08)	/* éè¤ãæ¤åºãã	*/
-#define IN6_IFF_DEPRECATED	UINT_C(0x10)	/* éæ¨å¥¨		*/
-#define IN6_IFF_NODAD		UINT_C(0x20)	/* éè¤æ¤åºä¸è¦		*/
-#define IN6_IFF_AUTOCONF	UINT_C(0x40)	/* èªåè¨­å®ããã	*/
-#define IN6_IFF_DETACHED	UINT_C(0x80)	/* éä½¿ç¨		*/
-
-/*
- *  ã¢ãã¬ã¹ã®æå¹æ§ãã§ãã¯
+ *  アドレス状態フラグ
+ */
+
+#define IN6_IFF_ANYCAST		UINT_C(0x01)	/* エニーキャスト	*/
+#define IN6_IFF_DEFINED		UINT_C(0x02)	/* 定義済み		*/
+#define IN6_IFF_TENTATIVE	UINT_C(0x04)	/* 重複検出中		*/
+#define IN6_IFF_DUPLICATED	UINT_C(0x08)	/* 重複を検出した	*/
+#define IN6_IFF_DEPRECATED	UINT_C(0x10)	/* 非推奨		*/
+#define IN6_IFF_NODAD		UINT_C(0x20)	/* 重複検出不要		*/
+#define IN6_IFF_AUTOCONF	UINT_C(0x40)	/* 自動設定された	*/
+#define IN6_IFF_DETACHED	UINT_C(0x80)	/* 非使用		*/
+
+/*
+ *  アドレスの有効性チェック
  */
 
@@ -248,5 +233,5 @@
 
 /*
- *  ã«ã¼ã¿ã®ã¤ã³ããã¯ã¹
+ *  ルータのインデックス
  */
 
@@ -254,13 +239,11 @@
 
 /*
- *  å¶éå¤
- */
-
-#define IP6_HDR_NEST_LIMIT	50	/* IPv6 ãããã®ãã¹ãå¶éå¤	*/
-
-/*
- *  ã¢ãã¬ã¹æ
-å ±é
-åã®ã¤ã³ããã¯ã¹
+ *  制限値
+ */
+
+#define IP6_HDR_NEST_LIMIT	50	/* IPv6 ヘッダのネスト制限値	*/
+
+/*
+ *  アドレス情報配列のインデックス
  */
 
@@ -269,42 +252,39 @@
 
 /*
- *  IPv6 ãã«ãã­ã£ã¹ãã¢ãã¬ã¹é
-åã®ã¤ã³ããã¯ã¹
- */
-
-#define IPV6_MADDR_IX_SOL_NODE		0	/* è¦è«ãã«ãã­ã£ã¹ãã»ã¢ãã¬ã¹			*/
-#define IPV6_MADDR_IX_LL_ALL_NODE	1	/* å
-¨ãã¼ãã»ãªã³ã¯ã­ã¼ã«ã«ã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹	*/
+ *  IPv6 マルチキャストアドレス配列のインデックス
+ */
+
+#define IPV6_MADDR_IX_SOL_NODE		0	/* 要請マルチキャスト・アドレス			*/
+#define IPV6_MADDR_IX_LL_ALL_NODE	1	/* 全ノード・リンクローカル・マルチキャストアドレス	*/
 #define IPV6_MADDR_IX_EXTRA		2
 
 #define MAX_IN6_MADDR_CNT		MAX_IF_MADDR_CNT
-						/* IPv6 ãã«ãã­ã£ã¹ãã¢ãã¬ã¹é
-åã®æå¤§ãµã¤ãº	*/
-
-/* ã«ã¼ãã£ã³ã°è¡¨ã¨ã³ããªæ§é ä½ */
+						/* IPv6 マルチキャストアドレス配列の最大サイズ	*/
+
+/* ルーティング表エントリ構造体 */
 
 typedef struct t_in6_rtentry {
-	T_IN6_ADDR	target;		/* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹	*/
-	T_IN6_ADDR	gateway;	/* ã²ã¼ãã¦ã§ã¤ã® IP ã¢ãã¬ã¹	*/
-	uint32_t	expire;		/* æå¹æéãåããæå» [s]	*/
-	uint8_t		flags;		/* ãã©ã°			*/
-	uint8_t		prefix_len;	/* ãã¬ãã£ãã¯ã¹é·		*/
+	T_IN6_ADDR	target;		/* 目標ネットワークアドレス	*/
+	T_IN6_ADDR	gateway;	/* ゲートウェイの IP アドレス	*/
+	uint32_t	expire;		/* 有効時間が切れる時刻 [s]	*/
+	uint8_t		flags;		/* フラグ			*/
+	uint8_t		prefix_len;	/* プレフィックス長		*/
 	} __attribute__((packed, aligned(2)))T_IN6_RTENTRY;
 
 /*
- *  ãã¹ãã­ã£ãã·ã¥
- */
-
-/* ãã¹ãã­ã£ãã·ã¥æ§é ä½ */
+ *  ホストキャッシュ
+ */
+
+/* ホストキャッシュ構造体 */
 
 typedef struct t_in6_hostcache_entry {
-	T_IN6_ADDR	dst;		/* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹	*/
-	uint32_t	expire;		/* æå¹æéãåããæå» [s]	*/
+	T_IN6_ADDR	dst;		/* 目標ネットワークアドレス	*/
+	uint32_t	expire;		/* 有効時間が切れる時刻 [s]	*/
 	uint32_t	mtu;		/* Path MTU			*/
 	} __attribute__((packed, aligned(2)))T_IN6_HOSTCACHE_ENTRY;
 
-#define IN6_HOSTCACHE_EXPIRE	(60*60*SYSTIM_HZ)	/* æå¹æé	*/
-#define IN6_HOSTCACHE_PRUNE	(5*60*SYSTIM_HZ)	/* æ´æ°éé	*/
-#define IN6_HOSTCACHE_INCREASE	(10*60*SYSTIM_HZ)	/* å¢å ããå ´åã®ä¿è­·æé	*/
+#define IN6_HOSTCACHE_EXPIRE	(60*60*SYSTIM_HZ)	/* 有効時間	*/
+#define IN6_HOSTCACHE_PRUNE	(5*60*SYSTIM_HZ)	/* 更新間隔	*/
+#define IN6_HOSTCACHE_INCREASE	(10*60*SYSTIM_HZ)	/* 増加する場合の保護時間	*/
 
 #define IN6_IS_HOSTCACHE_FREE(e)	IN6_IS_ADDR_UNSPECIFIED(&((e)->dst))
@@ -312,5 +292,5 @@
 
 /*
- *  ã«ã¼ãã£ã³ã°è¡¨
+ *  ルーティング表
  */
 
@@ -318,6 +298,5 @@
 
 /*
- *  åæ¹åç
-§
+ *  前方参照
  */
 
@@ -331,5 +310,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -337,5 +316,5 @@
 
 /*
- *  é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã­
+ *  関数シミュレーションマクロ
  */
 
@@ -345,5 +324,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,10 +33,10 @@
 
 /*
- *  IPv6 ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã
+ *  IPv6 で使用するカーネルオブジェクト
  */
 
 #ifdef _IP6_CFG
 
-/* è¿é£ã­ã£ãã·ã¥ */
+/* 近隣キャッシュ */
 
 CRE_SEM(SEM_ND6_CACHE, { TA_TPRI, 1, 1 });
@@ -56,5 +44,5 @@
 #if NUM_ND6_DEF_RTR_ENTRY > 0
 
-/* ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ã */
+/* ディフォルトルータ・リスト */
 
 CRE_SEM(SEM_ND6_DEFRTRLIST, { TA_TPRI, 1, 1 });
@@ -64,5 +52,5 @@
 #ifdef IP6_CFG_FRAGMENT
 
-/* åå²ããã */
+/* 分割ヘッダ */
 
 CRE_SEM(SEM_IP6_FRAG_QUEUE, { TA_TPRI, 1, 1 });
@@ -72,5 +60,5 @@
 #if NUM_IN6_ROUTE_ENTRY > 0
 
-/* ã«ã¼ãã£ã³ã°è¡¨ */
+/* ルーティング表 */
 
 CRE_SEM(SEM_IN6_ROUTING_TBL, { TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -161,5 +149,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
@@ -167,21 +155,20 @@
 
 /*
- *  ä¸ä½ãã­ãã³ã«é¸ææ§é ä½
+ *  上位プロトコル選択構造体
  */
 
 typedef struct t_proto_switch {
-	uint_t (*func)(T_NET_BUF **, uint_t *, uint_t *);	/* å
-¥åé¢æ°		*/
-	uint_t proto;						/* ãã­ãã³ã«çªå·	*/
+	uint_t (*func)(T_NET_BUF **, uint_t *, uint_t *);	/* 入力関数		*/
+	uint_t proto;						/* プロトコル番号	*/
 	} T_PROTO_SWITCH;
 
 static const T_PROTO_SWITCH proto_switch[] = {
-	{ esp6_input,	IPPROTO_ESP		},	/* IPv6 æå·åããã	*/
-	{ ah6_input,	IPPROTO_AH		},	/* IPv6 èªè¨¼ããã	*/
-	{ frag6_input,	IPPROTO_FRAGMENT	},	/* æ­çããã		*/
-	{ route6_input,	IPPROTO_ROUTING		},	/* çµè·¯å¶å¾¡ããã	*/
-	{ dest6_input,	IPPROTO_DSTOPTS		},	/* IPv6 çµç¹ãªãã·ã§ã³	*/
+	{ esp6_input,	IPPROTO_ESP		},	/* IPv6 暗号化ヘッダ	*/
+	{ ah6_input,	IPPROTO_AH		},	/* IPv6 認証ヘッダ	*/
+	{ frag6_input,	IPPROTO_FRAGMENT	},	/* 断片ヘッダ		*/
+	{ route6_input,	IPPROTO_ROUTING		},	/* 経路制御ヘッダ	*/
+	{ dest6_input,	IPPROTO_DSTOPTS		},	/* IPv6 終点オプション	*/
 	{ ip6_no_header_input,
-			IPPROTO_NONE		},	/* æ¬¡ãããç¡ã		*/
+			IPPROTO_NONE		},	/* 次ヘッダ無し		*/
 	{ icmp6_input,	IPPROTO_ICMPV6		},
 
@@ -207,5 +194,5 @@
 
 /*
- *  get_upper_proto -- ä¸ä½ãã­ãã³ã«å¦çé¢æ°ãè¿ãã
+ *  get_upper_proto -- 上位プロトコル処理関数を返す。
  */
 
@@ -222,6 +209,5 @@
 
 /*
- *  ip6_no_header_input -- æ¬¡ããããç¡ãã®å ´åã®å
-¥åå¦ç
+ *  ip6_no_header_input -- 次ヘッダが無しの場合の入力処理
  */
 
@@ -234,16 +220,13 @@
 
 /*
- *  ip6_hopopts_input -- ä¸­ç¶ç¹ãªãã·ã§ã³å
-¥åå¦ç
- *
- *    æ¬å®è£
-ã§ã¯ãããã£ã³ã°ä»¥å¤ã®ãªãã·ã§ã³ãå
-¨ã¦æªç¥ãªãã·ã§ã³ã¨ãã¦å¦çããã
- *
- *    æ»ãå¤:
- *
- *      0 ä»¥ä¸ 		æ­£å¸¸
- *      IP6_OPT_RET_ERR (-1)	ã¨ã©ã¼ãå¼åºå´ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããã
- *      IP6_OPT_RET_REL (-2)	ã¨ã©ã¼ããããã¯ã¼ã¯ãããã¡ã¯éæ¾ããã¦ããã
+ *  ip6_hopopts_input -- 中継点オプション入力処理
+ *
+ *    本実装では、パディング以外のオプションを全て未知オプションとして処理する。
+ *
+ *    戻り値:
+ *
+ *      0 以上 		正常
+ *      IP6_OPT_RET_ERR (-1)	エラー、呼出側でネットワークバッファを開放する。
+ *      IP6_OPT_RET_REL (-2)	エラー、ネットワークバッファは開放されている。
  */
 
@@ -293,7 +276,7 @@
 
 /*
- *  ip6_get_prev_hdr -- ç´åã®æ¡å¼µãããã® next ãã£ã¼ã«ãã®ã¢ãã¬ã¹ãè¿ãã
- *
- *    æ³¨æ: off ã«ã¯ IF_HDR_SIZE ãå«ã¾ãã¦ããã
+ *  ip6_get_prev_hdr -- 直前の拡張ヘッダの next フィールドのアドレスを返す。
+ *
+ *    注意: off には IF_HDR_SIZE も含まれている。
  */
 
@@ -339,5 +322,5 @@
 
 /*
- *  ip6_init -- IPv6 ã®åæåé¢æ°
+ *  ip6_init -- IPv6 の初期化関数
  */
 
@@ -350,6 +333,5 @@
 
 /*
- *  ip6_input -- IPv6 ã®å
-¥åé¢æ°
+ *  ip6_input -- IPv6 の入力関数
  */
 
@@ -368,5 +350,5 @@
 	NET_COUNT_MIB(in6_ifstat.ipv6IfStatsInReceives, 1);
 
-	/* IP ãããã®é·ãããã§ãã¯ããã*/
+	/* IP ヘッダの長さをチェックする。*/
 	if (input->len < IF_IP6_HDR_SIZE) {
 		NET_COUNT_IP6(net_count_ip6[NC_IP6_IN_ERR_SHORT], 1);
@@ -377,5 +359,5 @@
 	ip6h = GET_IP6_HDR(input);
 
-	/* ãã¼ã¸ã§ã³ããã§ãã¯ããã*/
+	/* バージョンをチェックする。*/
 	if (IP6_VCF_V(ntohl(ip6h->vcf)) != IPV6_VERSION) {
 		NET_COUNT_IP6(net_count_ip6[NC_IP6_IN_ERR_VER], 1);
@@ -385,22 +367,22 @@
 
 	/*
-	 *  æ¬¡ã®ãã¼ã¿ã°ã©ã ã¯ç ´æ£ããã
+	 *  次のデータグラムは破棄する。
 	 *
-	 *    ã»å§ç¹ã¢ãã¬ã¹ããã«ãã­ã£ã¹ã
-	 *    ã»çµç¹ã¢ãã¬ã¹ãæªå®ç¾©
+	 *    ・始点アドレスがマルチキャスト
+	 *    ・終点アドレスが未定義
 	 *
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ãã«ã¼ãããã¯ã§ãªãã¨ãã
-	 *  æ¬¡ã®ãã¼ã¿ã°ã©ã ãç ´æ£ããã
+	 *  ネットワークインタフェースがループバックでないとき、
+	 *  次のデータグラムも破棄する。
 	 *
-	 *    ã»å§ç¹ã¢ãã¬ã¹ãã«ã¼ãããã¯
-	 *    ã»çµç¹ã¢ãã¬ã¹ãã«ã¼ãããã¯
+	 *    ・始点アドレスがループバック
+	 *    ・終点アドレスがループバック
 	 *
-	 *  æªæã®ããã¦ã¼ã¶ã TCP/UDP ã¹ã¿ãã¯ã®æ··ä¹±ã
-	 *  ã»ã­ã¥ãªãã£ãã§ãã¯ããã¤ãã¹ãããããIPv4
-	 *  ãããã¢ãã¬ã¹ãæªç¨ãããã¨ãé²ããã
-	 *  ä»¥ä¸ã®ãã¼ã¿ã°ã©ã ã¯ç ´æ£ããã  
+	 *  悪意のあるユーザが TCP/UDP スタックの混乱や
+	 *  セキュリティチェックをバイパスするため、IPv4
+	 *  マップアドレスを悪用することを防ぐため
+	 *  以下のデータグラムは破棄する。  
 	 *
-	 *    ã»å§ç¹ã¢ãã¬ã¹ã ::ffff:127.0.0.1
-	 *    ã»çµç¹ã¢ãã¬ã¹ã ::ffff:127.0.0.1
+	 *    ・始点アドレスが ::ffff:127.0.0.1
+	 *    ・終点アドレスが ::ffff:127.0.0.1
 	 */
 
@@ -435,6 +417,5 @@
 
 	if (IN6_IS_ADDR_MULTICAST(&ip6h->dst)) {
-		/* å®å
-ããã«ãã­ã£ã¹ãã®å ´åã®å¦ç */
+		/* 宛先がマルチキャストの場合の処理 */
 		NET_COUNT_MIB(in6_ifstat.ipv6IfStatsInMcastPkts, 1);
 		if (!in6_lookup_multi(ifp, &ip6h->dst)) {
@@ -451,5 +432,5 @@
 			}
 
-		/*  ã¢ãã¬ã¹ãæªè§£æ±ºã®å ´åã¯ãã¼ã¿ã°ã©ã ãç ´æ£ããã*/
+		/*  アドレスが未解決の場合はデータグラムを破棄する。*/
 		if (IFA6_IS_NOTREADY(ia6)) {
 			NET_COUNT_IP6(net_count_ip6[NC_IP6_IN_ERR_ADDR], 1);
@@ -459,20 +440,20 @@
 		}
 
-	/* ãªãã»ãããè¨­å®ããã*/
+	/* オフセットを設定する。*/
 	offp  = GET_IP6_NEXT_HDR(input) - input->buf;
 
-	/* ãã¤ã­ã¼ãé·ãåãåºãã*/
+	/* ペイロード長を取り出す。*/
 	plen = ntohs(ip6h->plen);
 
 
-	/* æ¬¡ãããã®ä½ç½®ãåæåããã*/
+	/* 次ヘッダの位置を初期化する。*/
 	nextp = offsetof(T_IP6_HDR, next);
 
 	/*
-	 *  ä¸­ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³ãããã®ãã§ãã¯
+	 *  中継点 (Hop-by-Hop) オプションヘッダのチェック
 	 */
 	if (ip6h->next == IPPROTO_HOPOPTS) {
 
-		/* ä¸­ç¶ç¹ãããã®é·ãããã§ãã¯ããã*/
+		/* 中継点ヘッダの長さをチェックする。*/
 		if (plen < sizeof(T_IP6_HBH_HDR)) {
 			NET_COUNT_IP6(net_count_ip6[NC_IP6_IN_ERR_SHORT], 1);
@@ -495,12 +476,10 @@
 
 		/*
-		 *  ãã¤ã­ã¼ãé·ã 0 ã§ãä¸­ç¶ç¹ãªãã·ã§ã³ãããã¨ãã¯ã
-		 *  å·¨å¤§ãã¤ã­ã¼ãã»ãªãã·ã§ã³ãå«ã¾ããªããã°ãªããªãã
-		 *  ãã®ã¨ããå·¨å¤§ãã¤ã­ã¼ãã»ãªãã·ã§ã³ã«ãã
-		 *  ãã¤ã­ã¼ãé·ããã§ãã¯ããå¿
-è¦ãããããæ¬å®è£
-ã§ã¯ã
-		 *  å·¨å¤§ãã¤ã­ã¼ãã»ãªãã·ã§ã³ãæªç¥ã®ãªãã·ã§ã³ã¨ãã¦
-		 *  æ±ãã®ã§ãä½ãããªãã
+		 *  ペイロード長が 0 で、中継点オプションがあるときは、
+		 *  巨大ペイロード・オプションが含まれなければならない。
+		 *  このとき、巨大ペイロード・オプションにある
+		 *  ペイロード長をチェックする必要があるが、本実装では、
+		 *  巨大ペイロード・オプションを未知のオプションとして
+		 *  扱うので、何もしない。
 		 */
 		next = ((T_IP6_HBH_HDR *)(ip6h + 1))->next;
@@ -509,5 +488,5 @@
 		next = ip6h->next;
 
-	/* IPv6 ãã¼ã¿ã°ã©ã é·ããã§ãã¯ããã*/
+	/* IPv6 データグラム長をチェックする。*/
 	if (input->len - IF_IP6_HDR_SIZE < plen) {
 		NET_COUNT_IP6(net_count_ip6[NC_IP6_IN_ERR_SHORT], 1);
@@ -518,5 +497,5 @@
 		input->len = IF_IP6_HDR_SIZE + plen;
 
-	/* ä¸ä½ãã­ãã³ã«å¦çé¢æ°ãå¼ã³åºãã*/
+	/* 上位プロトコル処理関数を呼び出す。*/
 	nest = 0;
 	while (next != IPPROTO_DONE) {
@@ -531,5 +510,5 @@
 			NET_COUNT_MIB(in6_ifstat.ipv6IfStatsInUnknownProtos, 1);
 
-			/* icmp6_error ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããã*/
+			/* icmp6_error でネットワークバッファを開放する。*/
 			icmp6_error(input, ICMP6_PARAM_PROB,
 			                   ICMP6_PARAMPROB_NEXT_HEADER, nextp);
@@ -548,8 +527,8 @@
 
 /*
- *  ip6_nexthdr -- æ¬¡ã®ãããã®ãªãã»ãããè¿ãã
- *
- *    æ»ãå¤ == -1 : æå¾ã®ããããã¾ãã¯ã¨ã©ã¼ã
- *    æ»ãå¤ >   0 : ããã«ããããç¶ãã
+ *  ip6_nexthdr -- 次のヘッダのオフセットを返す。
+ *
+ *    戻り値 == -1 : 最後のヘッダ、またはエラー。
+ *    戻り値 >   0 : さらにヘッダが続く。
  */
 
@@ -569,9 +548,9 @@
 		break;
 
-	case IPPROTO_FRAGMENT:			/* æ­çããã */
+	case IPPROTO_FRAGMENT:			/* 断片ヘッダ */
 		if (nbuf->len < off + sizeof(T_IP6_FRAG_HDR))
 			return (ER_UINT)-1;
 
-		/* ä¸­éã®ãã©ã°ã¡ã³ãã®å ´åã¯å¦çããããã*/
+		/* 中間のフラグメントの場合は処理をやめる。*/
 		ip6fh = (T_IP6_FRAG_HDR *)(nbuf->buf + off);
 		if (ntohs(ip6fh->off_flag) & IP6F_MORE_FRAG)
@@ -582,8 +561,8 @@
 		break;
 
-	case IPPROTO_AH:		/* IPv6 èªè¨¼ããã			*/
-	case IPPROTO_HOPOPTS:		/* IPv6 ä¸­ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³	*/
-	case IPPROTO_ROUTING:		/* çµè·¯å¶å¾¡ããã			*/
-	case IPPROTO_DSTOPTS:		/* IPv6 çµç¹ãªãã·ã§ã³			*/
+	case IPPROTO_AH:		/* IPv6 認証ヘッダ			*/
+	case IPPROTO_HOPOPTS:		/* IPv6 中継点 (Hop-by-Hop) オプション	*/
+	case IPPROTO_ROUTING:		/* 経路制御ヘッダ			*/
+	case IPPROTO_DSTOPTS:		/* IPv6 終点オプション			*/
 		if (nbuf->len < off + sizeof(T_IP6_EXT_HDR))
 			return (ER_UINT)-1;
@@ -602,5 +581,5 @@
 
 /*
- *  ip6_lasthdr -- æå¾ã®ãããã®ãªãã»ãããè¿ãã
+ *  ip6_lasthdr -- 最後のヘッダのオフセットを返す。
  */
 
@@ -621,11 +600,11 @@
 
 /*
- *  ip6_unknown_opt -- æªç¥ã®ãªãã·ã§ã³ã®å¦ç
- *
- *    æ»ãå¤:
- *
- *      0 ä»¥ä¸ 			æ­£å¸¸ããªãã·ã§ã³é·ã
- *      IP6_OPT_RET_ERR (-1)	ã¨ã©ã¼ãå¼åºå´ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããã
- *      IP6_OPT_RET_REL (-2)	ã¨ã©ã¼ããããã¯ã¼ã¯ãããã¡ã¯éæ¾ããã¦ããã
+ *  ip6_unknown_opt -- 未知のオプションの処理
+ *
+ *    戻り値:
+ *
+ *      0 以上 			正常、オプション長。
+ *      IP6_OPT_RET_ERR (-1)	エラー、呼出側でネットワークバッファを開放する。
+ *      IP6_OPT_RET_REL (-2)	エラー、ネットワークバッファは開放されている。
  */
 
@@ -634,12 +613,12 @@
 {
 	switch (IP6OPT_TYPE(*opt)) {
-	case IP6OPT_TYPE_SKIP:		/* ç¡è¦ããã			*/
+	case IP6OPT_TYPE_SKIP:		/* 無視する。			*/
 		return *(opt + 1);
 		break;
-	case IP6OPT_TYPE_ICMP:		/* ç ´æ£ãã¦ããã«ãã­ã£ã¹ãã§ãªããã° ICMP ãè¿éããã	*/
+	case IP6OPT_TYPE_ICMP:		/* 破棄して、マルチキャストでなければ ICMP を返送する。	*/
 		if (IN6_IS_ADDR_MULTICAST(&GET_IP6_HDR(input)->dst))
 			return IP6_OPT_RET_ERR;
 		/* no break; */
-	case IP6OPT_TYPE_FORCEICMP:	/* ç ´æ£ãã¦ãICMP ãè¿éããã	*/
+	case IP6OPT_TYPE_FORCEICMP:	/* 破棄して、ICMP を返送する。	*/
 		icmp6_error(input, ICMP6_PARAM_PROB,
 		                   ICMP6_PARAMPROB_OPTION,
@@ -647,5 +626,5 @@
 		return IP6_OPT_RET_REL;
 		break;
-	/*case IP6OPT_TYPE_DISCARD:	ãã¼ã¿ã°ã©ã ãç ´æ£ããã	*/
+	/*case IP6OPT_TYPE_DISCARD:	データグラムを破棄する。	*/
 		}
 
@@ -654,5 +633,5 @@
 
 /*
- *  ip6_remove_exthdrs -- IPv6 æ¡å¼µããããåé¤ããä»¥éãåã«è©°ããã
+ *  ip6_remove_exthdrs -- IPv6 拡張ヘッダを削除し、以降を前に詰める。
  */
 
@@ -663,8 +642,8 @@
 	uint_t	next;
 
-	/* éå§ãªãã»ããã IP ãããã«è¨­å®ããã*/
+	/* 開始オフセットを IP ヘッダに設定する。*/
 	off = ((uint8_t *)GET_IP6_HDR(nbuf)) - nbuf->buf;
 
-	/* æçµããããæ¢ç´¢ããã*/
+	/* 最終ヘッダを探索する。*/
 	off = ip6_lasthdr(nbuf, off, IPPROTO_IPV6, &next);
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_output.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_output.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_output.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -154,14 +142,13 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-/* ãªã³ã¯ MTU */
+ *  全域変数
+ */
+
+/* リンク MTU */
 
 uint32_t	linkmtu = IF_MTU;
 
 /*
- *  å±æå¤æ°
+ *  局所変数
  */
 
@@ -173,5 +160,5 @@
 
 /*
- *  ip6_output -- IPv6 ã®åºåé¢æ°
+ *  ip6_output -- IPv6 の出力関数
  */
 
@@ -204,7 +191,6 @@
 
 	/*
-	 *  éè¤ã¢ãã¬ã¹æ¤åºè¦è«ä»¥å¤ã«ã¯ãéä¿¡å
-ã¢ãã¬ã¹ã«
-	 *  ç¡æå®ãæå®ã§ããªãã
+	 *  重複アドレス検出要請以外には、送信元アドレスに
+	 *  無指定を指定できない。
 	 */
 	if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src) && (flags & IPV6_OUT_FLG_DAD) == 0) {
@@ -213,6 +199,5 @@
 		}
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ã«ã¯ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãæå®ã§ããªãã*/
+	/* 送信元アドレスにはマルチキャストアドレスを指定できない。*/
 	if (IN6_IS_ADDR_MULTICAST(&ip6h->src)) {
 		error = E_PAR;
@@ -221,5 +206,5 @@
 
 	/*
-	 *  çµè·¯é¸æãè¡ãã
+	 *  経路選択を行う。
 	 */
 	if ((gw = in6_rtalloc(ifp, &ip6h->dst)) == NULL) {
@@ -229,8 +214,8 @@
 
 	if (!IN6_IS_ADDR_MULTICAST(&ip6h->dst)) {
-		/* ã¦ãã­ã£ã¹ãã¢ãã¬ã¹ã®å¦ç */
+		/* ユニキャストアドレスの処理 */
 		}
 	else {
-		/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã®å¦ç */
+		/* マルチキャストアドレスの処理 */
 		NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutMcastPkts, 1);
 		if (flags & IPV6_OUT_FLG_HOP_LIMIT)
@@ -240,5 +225,5 @@
 		}
 
-	/* Traffic Class ã¨ Flow Label ããµãã¼ãããªãã®ã§ 0 ã«è¨­å®ããã*/
+	/* Traffic Class と Flow Label をサポートしないので 0 に設定する。*/
 	ip6h->vcf = htonl(IP6_MAKE_VCF(IPV6_VERSION, 0));
 
@@ -253,7 +238,7 @@
 
 		/*
-		 *  Path MTU ãç»é²ããã¦ããå ´åã
-		 *  MTU ã IPv6 MMTUï¼1280 ãªã¯ãããï¼ä»¥ä¸ã®å ´åã¯ã
-		 *  MTU ã IPv6 MMTU ã«è¨­å®ãåå²ãã¦éä¿¡ããã
+		 *  Path MTU が登録されている場合、
+		 *  MTU が IPv6 MMTU（1280 オクテット）以下の場合は、
+		 *  MTU を IPv6 MMTU に設定し分割して送信する。
 		 */
 		mtu = IPV6_MMTU;
@@ -272,6 +257,5 @@
 	if (plen + IP6_HDR_SIZE <= mtu && !alwaysfrag) {
 
-		/* åå²ããå¿
-è¦ããªãã¨ãã®å¦ç */
+		/* 分割する必要がないときの処理 */
 		if ((error = nd6_output(ifp, output, gw, NULL, tmout)) != E_OK) {
 			NET_COUNT_IP6(net_count_ip6[NC_IP6_OUT_ERR_PACKETS], 1);
@@ -281,18 +265,16 @@
 	else {
 
-		/* æ­ç ID ãè¨­å®ããã*/
+		/* 断片 ID を設定する。*/
 		id = ip6_id ++;
 
-		/* MTU ã IPv6 ã®æå¤§ãã±ãããµã¤ãºãè¶
-ããªãããã«ããã*/
+		/* MTU が IPv6 の最大パケットサイズを超えないようにする。*/
 		if (mtu > IPV6_MAXPACKET)
 			mtu = IPV6_MAXPACKET;
 
 		/*
-		 *  MTU ãããåå²ä¸è½é¨åï¼TINET-1.4 ã§ã¯ãåå²ãããä»¥å¤ã®
-		 *  æ¡å¼µãããã®åºåã¯æªå®è£
-ã®ãã 0 ãªã¯ãããï¼
-		 *  ã¨æ­çãããã®ãµã¤ãºãå¼ããã¨ãã8 ãªã¯ãããä»¥ä¸ãªããã°
-		 *  åå²ãã¦éä¿¡ã§ããªãããã¨ã©ã¼ã«ããã
+		 *  MTU から、分割不能部分（TINET-1.4 では、分割ヘッダ以外の
+		 *  拡張ヘッダの出力は未実装のため 0 オクテット）
+		 *  と断片ヘッダのサイズを引いたとき、8 オクテット以上なければ
+		 *  分割して送信できないためエラーにする。
 		 */
 		if (((mtu - sizeof(T_IP6_FRAG_HDR)) & ~7) < 8) {
@@ -302,17 +284,16 @@
 
 		/*
-		 *  IPv6 ãããã® next ãã£ã¼ã«ãã«è¨­å®ããå¤ã¯ãæ­çãããã
-		 *  æ­çãããã®  next ãã£ã¼ã«ãã«è¨­å®ããå¤ã¯ã
-		 *  å
-ã®ãã¼ã¿ã°ã©ã ã® next ãã£ã¼ã«ãã®å¤ã
+		 *  IPv6 ヘッダの next フィールドに設定する値は、断片ヘッダ。
+		 *  断片ヘッダの  next フィールドに設定する値は、
+		 *  元のデータグラムの next フィールドの値。
 		 */
 		nextproto  = ip6h->next;
 		ip6h->next = IPPROTO_FRAGMENT;
 
-		/* åå²ãã¦éä¿¡ããã*/
+		/* 分割して送信する。*/
 		NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_OUT], 1);
 		for (foff = 0; foff < plen; foff += flen) {
 
-			/* æ­çã®é·ããè¨ç®ãã8 ãªã¯ãããå¢çã«èª¿æ´ããã*/
+			/* 断片の長さを計算し、8 オクテット境界に調整する。*/
 			if (foff + (mtu - (IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR))) < plen)
 				flen = (mtu - (IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR))) >> 3 << 3;
@@ -320,15 +301,15 @@
 				flen = plen - foff;
 
-			/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/
+			/* ネットワークバッファを獲得する。*/
 			if (tget_net_buf(&frag, flen + IF_IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR), TMO_IP6_FRAG_GET_NET_BUF) == E_OK) {
 
-				/* IPv6 ããããã³ãã¼ããã*/
+				/* IPv6 ヘッダをコピーする。*/
 				fip6h = GET_IP6_HDR(frag);
 				*fip6h = *ip6h;
 
-				/* IPv6 ããããåããã*/
+				/* IPv6 ヘッダを埋める。*/
 				fip6h->plen	= htons(flen + sizeof(T_IP6_FRAG_HDR));
 
-				/* æ­çããããåããã*/
+				/* 断片ヘッダを埋める。*/
 				fip6f = (T_IP6_FRAG_HDR *)GET_IP6_NEXT_HDR(frag);
 				fip6f->off_flag	= htons((uint16_t)(foff & ~7));
@@ -339,10 +320,10 @@
 				fip6f->next	= nextproto;
 
-				/* SDU ãã³ãã¼ããã*/
+				/* SDU をコピーする。*/
 				memcpy((uint8_t*)(fip6f + 1), GET_IP6_NEXT_HDR(output) + foff, flen);
 				NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_OUT_FRAGS], 1);
 				NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutFragCreates, 1);
 
-				/* éä¿¡ããã*/
+				/* 送信する。*/
 				if ((error = nd6_output(ifp, frag, gw, NULL, tmout)) != E_OK) {
 					NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutFragFails, 1);
@@ -351,5 +332,5 @@
 				}
 			else {
-				/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ã§ããªããã°ãéä¿¡ããããããã*/
+				/* ネットワークバッファが獲得できなければ、送信をあきらめる。*/
 				error = E_NOMEM;
 				goto drop;
@@ -357,5 +338,5 @@
 			}
 
-		/* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/
+		/* IF でネットワークバッファを開放しないフラグをチェックする。*/
 		if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
 			syscall(rel_net_buf(output));
@@ -379,5 +360,5 @@
 
 drop:
-	/* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/
+	/* IF でネットワークバッファを開放しないフラグをチェックする。*/
 	if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
 		syscall(rel_net_buf(output));
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_var.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_var.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ip6_var.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -115,5 +103,5 @@
 
 /*
- *  IPv6 ãããã»ãã¤ã­ã¼ãã¢ã¯ã»ã¹ãã¯ã­
+ *  IPv6 ヘッダ・ペイロードアクセスマクロ
  */
 
@@ -131,10 +119,10 @@
 #define SET_IP6_SDU_SIZE(nbuf,slen)	(GET_IP6_HDR(nbuf)->plen=htons(slen))
 
-/* ip6_output ã®ãã©ã° */
-
-#define IPV6_OUT_FLG_DAD		0x0100	/* éè¤ã¢ãã¬ã¹æ¤åº	*/
-#define IPV6_OUT_FLG_HOP_LIMIT		0x0200	/* ããããªãããæå®	*/
-
-/* ããããªããããã©ã°ãä»ãæãããããªãããå¤ãæä½ãããã¯ã­ */
+/* ip6_output のフラグ */
+
+#define IPV6_OUT_FLG_DAD		0x0100	/* 重複アドレス検出	*/
+#define IPV6_OUT_FLG_HOP_LIMIT		0x0200	/* ホップリミット指定	*/
+
+/* ホップリミットフラグが付く時、ホップリミット値を操作するマクロ */
 
 #define IPV6_OUT_GET_HOP_LIMIT(f)	((f)&0x00ff)
@@ -142,11 +130,11 @@
 
 /*
- *  ip6_unknown_opt -- æªç¥ã®ãªãã·ã§ã³ã®å¦ç
- *
- *    æ»ãå¤:
- *
- *      0 ä»¥ä¸ 			æ­£å¸¸ããªãã·ã§ã³é·ã
- *      IP6_OPT_RET_ERR (-1)	ã¨ã©ã¼ãå¼åºå´ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããã
- *      IP6_OPT_RET_REL (-2)	ã¨ã©ã¼ããããã¯ã¼ã¯ãããã¡ã¯éæ¾ããã¦ããã
+ *  ip6_unknown_opt -- 未知のオプションの処理
+ *
+ *    戻り値:
+ *
+ *      0 以上 			正常、オプション長。
+ *      IP6_OPT_RET_ERR (-1)	エラー、呼出側でネットワークバッファを開放する。
+ *      IP6_OPT_RET_REL (-2)	エラー、ネットワークバッファは開放されている。
  */
 
@@ -155,5 +143,5 @@
 
 /*
- *  IPv6 ã® MMTU ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡
+ *  IPv6 の MMTU サイズのネットワークバッファ
  */
 
@@ -161,7 +149,7 @@
 
 typedef struct t_net_buf_ipv6_mmtu {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		unit;	/* ã¤ã³ã¿ãã§ã¼ã¹çªå·	*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		unit;	/* インタフェース番号	*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -171,5 +159,5 @@
 #endif
 	uint8_t		buf[IF_HDR_SIZE + IPV6_MMTU];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 	} T_NET_BUF_IPV6_MMTU;
 
@@ -177,11 +165,11 @@
 
 /*
- *  65536 ãªã¯ããããµã¤ãºã®ãããã¯ã¼ã¯ãããã¡
+ *  65536 オクテットサイズのネットワークバッファ
  */
 
 typedef struct t_net_buf6_65536 {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -191,8 +179,8 @@
 #endif
 	uint8_t		buf[IF_IP6_HDR_SIZE + 65536];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 #if defined(IF_PDU_HDR_PADDING)
 	uint8_t		padding[IF_PDU_HDR_PADDING];
-#endif				/* ãããã®ä½å		*/
+#endif				/* ヘッダの余分		*/
 	} T_NET_BUF6_65536;
 
@@ -200,5 +188,5 @@
 
 /*
- *  åæ§æã­ã¥ã¼ç¨ IPv6 ãããã®å®ç¾©
+ *  再構成キュー用 IPv6 ヘッダの定義
  */
 
@@ -211,8 +199,8 @@
 	uint8_t		hlim;		/* Hop Limit				*/
 	T_IN6_ADDR	src;		/* Source Address			*/
-	T_NET_BUF	*next_frag;	/* æ¬¡ã® IPv6 ãã©ã°ã¡ã³ã	*/
-	uint16_t	foff;		/* æ­çãããã®ãªãã»ãã		*/
-	uint16_t	flen;		/* æ­çé·				*/
-	uint16_t	ftim;		/* åæ§æã¿ã¤ã ã¢ã¦ã			*/
+	T_NET_BUF	*next_frag;	/* 次の IPv6 フラグメント	*/
+	uint16_t	foff;		/* 断片ヘッダのオフセット		*/
+	uint16_t	flen;		/* 断片長				*/
+	uint16_t	ftim;		/* 再構成タイムアウト			*/
 	uint16_t	dummy1;
 	uint8_t		dummy2[sizeof(T_IN6_ADDR) - (sizeof(T_NET_BUF*) + sizeof(uint16_t) * 4)];
@@ -229,11 +217,11 @@
 
 /*
- *  ãã¼ã¿ã°ã©ã åæ§æç¨ãããã¯ã¼ã¯ãããã¡
+ *  データグラム再構成用ネットワークバッファ
  */
 
 typedef struct t_net_buf6_reassm {
-	uint16_t	len;	/* ãã¼ã¿ã®é·ã		*/
-	uint8_t		idix;	/* mpfid ã®ã¤ã³ããã¯ã¹	*/
-	uint8_t		flags;	/* ãã©ã°		*/
+	uint16_t	len;	/* データの長さ		*/
+	uint8_t		idix;	/* mpfid のインデックス	*/
+	uint8_t		flags;	/* フラグ		*/
 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN
 	uint8_t		nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
@@ -243,5 +231,5 @@
 #endif
 	uint8_t		buf[IP6_CFG_FRAG_REASSM_SIZE];
-				/* ãããã¡æ¬ä½		*/
+				/* バッファ本体		*/
 	} T_NET_BUF6_REASSM;
 
@@ -249,5 +237,5 @@
 
 /*
- *  TCP ã®åæ§æã­ã¥ã¼ã«ããã IPv6 ãããã®å®ç¾©
+ *  TCP の再構成キューにおける IPv6 ヘッダの定義
  */
 
@@ -256,5 +244,5 @@
 	uint8_t cf;		/* Traffic Class:  8 bit		*/
 			/* Flow Label:     4 bit (20 bit)	*/
-	uint16_t thoff;	/* TCP ãããã®ãªãã»ãã		*/
+	uint16_t thoff;	/* TCP ヘッダのオフセット		*/
 	uint16_t plen;	/* Payload Length			*/
 	uint8_t next;	/* Next Header				*/
@@ -267,6 +255,5 @@
 
 /*
- *  SNMP ã® ç®¡çæ
-å ±ãã¼ã¹ (MIB)
+ *  SNMP の 管理情報ベース (MIB)
  */
 
@@ -299,5 +286,5 @@
 
 /*
- *  å¤æ°
+ *  変数
  */
 
@@ -305,5 +292,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ipsec.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ipsec.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/ipsec.cfg	(revision 389)
@@ -7,39 +7,27 @@
  *  Copyright (C) 2008-2009 by Hokkaido Industrial Research Institute, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -47,5 +35,5 @@
 
 /*
- *  IPsec ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã
+ *  IPsec で使用するカーネルオブジェクト
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -132,5 +120,5 @@
 
 /*
- *  è¿é£ã­ã£ãã·ã¥
+ *  近隣キャッシュ
  */
 
@@ -138,5 +126,5 @@
 
 /*
- *  nd6_free -- ã«ã¼ã¿ãåé¤ããã
+ *  nd6_free -- ルータを削除する。
  */
 
@@ -150,5 +138,5 @@
 		ln->state = ND6_LLINFO_INCOMPLETE;
 
-		/* ãã¬ãã£ãã¯ã¹ã»ãªã¹ãããã«ã¼ã¿ãåé¤ããã*/
+		/* プレフィックス・リストからルータを削除する。*/
 		nd6_defrtrlist_del(dr);
 		}
@@ -156,5 +144,5 @@
 
 /*
- *  nd6_timer -- è¿é£æ¢ç´¢ç®¡çã¿ã¤ãã¼
+ *  nd6_timer -- 近隣探索管理タイマー
  */
 
@@ -167,5 +155,5 @@
 	int_t		ix;
 
-	/* è¿é£ã­ã£ãã·ã¥ã®å¦ç */
+	/* 近隣キャッシュの処理 */
 	syscall(wai_sem(SEM_ND6_CACHE));
 	syscall(get_tim(&now));
@@ -177,11 +165,11 @@
 			switch (ln->state) {
 
-			case ND6_LLINFO_INCOMPLETE:	/* æªè§£æ±º		*/
+			case ND6_LLINFO_INCOMPLETE:	/* 未解決		*/
 				if (ln->asked < ND6_MAX_MCAST_QUERY) {
 					/*
-					 *  ãã«ãã­ã£ã¹ãã¢ãã¬ã¹è¦è«ã®åéåæ°ä»¥ä¸ã®å ´åã®å¦ç
+					 *  マルチキャストアドレス要請の再送回数以下の場合の処理
 					 */
 					ln->asked ++;
-					ln->expire = now + ND6_RETRANS_TIME;	/* è¿é£æ¢ç´¢éä¿¡éé */
+					ln->expire = now + ND6_RETRANS_TIME;	/* 近隣探索送信間隔 */
 					nd6_ns_output(ifp, &in6_addr_unspecified, &ln->addr, ln, false);
 					}
@@ -189,13 +177,11 @@
 					if (ln->hold != NULL) {
 						/*
-						 *  æçµçã«ã¯ãä¿çããã¦ãããããã¯ã¼ã¯ãããã¡ã
-						 *  ããã°ãICMP6 ERROR ãèªåèªèº«ã«è¿ãããã¨ã
-						 *  ãããã¯ã¼ã¯ãããã¡ãéæ¾ããã
-						 *  ããããç¾å¨ãicmp6_error ã®å®è£
-ãä¸å®å
-¨ã®ããã
-						 *  ãããã¯ã¼ã¯ãããã¡ã®éæ¾ã®ã¿è¡ãã
+						 *  最終的には、保留されているネットワークバッファが
+						 *  あれば、ICMP6 ERROR を自分自身に返したあと、
+						 *  ネットワークバッファを開放する。
+						 *  しかし、現在、icmp6_error の実装が不完全のため、
+						 *  ネットワークバッファの開放のみ行う。
 						 */
-#if 0	/* ä¿ç */
+#if 0	/* 保留 */
 						icmp6_error(ln->hold, ICMP6_DST_UNREACH,
 						                      ICMP6_DST_UNREACH_ADDR, 0);
@@ -209,5 +195,5 @@
 				break;
 
-			case ND6_LLINFO_REACHABLE:	/* å°éå¯è½		*/
+			case ND6_LLINFO_REACHABLE:	/* 到達可能		*/
 				if (ln->expire) {
 					ln->expire = now + ND6_GCOLLECTION_TIME;
@@ -216,5 +202,5 @@
 				break;
 
-			case ND6_LLINFO_STALE:		/* å°éå¯è½æ§ã¯æªç¢ºèª	*/
+			case ND6_LLINFO_STALE:		/* 到達可能性は未確認	*/
 				if (ln->expire) {
 					if (ln->hold != NULL) {
@@ -227,19 +213,18 @@
 				break;
 
-			case ND6_LLINFO_DELAY:		/* å°éå¯è½æ§ã®ç¢ºèªå¾
-æ©	*/
+			case ND6_LLINFO_DELAY:		/* 到達可能性の確認待機	*/
 				ln->asked = 1;
-				ln->expire = now + ND6_RETRANS_TIME;		/* è¿é£æ¢ç´¢éä¿¡éé */
+				ln->expire = now + ND6_RETRANS_TIME;		/* 近隣探索送信間隔 */
 				ln->state = ND6_LLINFO_PROBE;
 				nd6_ns_output(ifp, &ln->addr, &ln->addr, ln, false);
 				break;
 
-			case ND6_LLINFO_PROBE:		/* å°éå¯è½æ§ãç¢ºèªä¸­	*/
+			case ND6_LLINFO_PROBE:		/* 到達可能性を確認中	*/
 				if (ln->asked < ND6_MAX_UCAST_QUERY) {
 					/*
-					 *  ã¦ãã­ã£ã¹ãã¢ãã¬ã¹è¦è«ã®åéåæ°ä»¥ä¸ã®å ´åã®å¦ç
+					 *  ユニキャストアドレス要請の再送回数以下の場合の処理
 					 */
 					ln->asked ++;
-					ln->expire += ND6_RETRANS_TIME;	/* è¿é£æ¢ç´¢éä¿¡éé */
+					ln->expire += ND6_RETRANS_TIME;	/* 近隣探索送信間隔 */
 					nd6_ns_output(ifp, &ln->addr, &ln->addr, ln, false);
 					}
@@ -259,16 +244,15 @@
 	syscall(sig_sem(SEM_ND6_CACHE));
 
-	/* ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãã®å¦ç */
+	/* ディフォルトルータ・リストの処理 */
 	nd6_defrtrlist_timer();
 
-	/* ãã¬ãã£ãã¯ã¹ã»ãªã¹ãã®å¦ç */
+	/* プレフィックス・リストの処理 */
 	nd6_prelist_timer();
 
-	/* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ã®å¦ç */
+	/* ネットワークインタフェースのアドレスの処理 */
 	in6_ifaddr_timer(ifp);
 
 	/*
-	 *  å°éå¯è½ç¶æ
-ã®æå¹æéã®æ´æ°
+	 *  到達可能状態の有効時間の更新
 	 */
 	if ((int32_t)(nd6_recalc_reachtm_interval - now) < 0) {
@@ -281,5 +265,5 @@
 
 /*
- *  nd6_get_cache -- è¿é£ã­ã£ãã·ã¥ãç²å¾ããã
+ *  nd6_get_cache -- 近隣キャッシュを獲得する。
  */
 
@@ -291,5 +275,5 @@
 
 /*
- *  nd6_ifattach -- è¿é£æ¢ç´¢ã®åæè¨­å®ãè¡ãã
+ *  nd6_ifattach -- 近隣探索の初期設定を行う。
  */
 
@@ -300,10 +284,8 @@
 
 /*
- *  nd6_output_hold -- è¿é£æ¢ç´¢ã­ã£ãã·ã¥ã«ä¿çããã¦ãã
- *                     ã¢ãã¬ã¹è§£æ±ºå¾
-ã¡ã®ãã¼ã¿ã°ã©ã ãããã°éä¿¡ããã
- *
- *    æ³¨æ: ã»ããã© SEM_ND6_CACHE ã«ããã­ãã¯ç¶æ
-ã§å¼åºããã¨ã
+ *  nd6_output_hold -- 近隣探索キャッシュに保留されている
+ *                     アドレス解決待ちのデータグラムがあれば送信する。
+ *
+ *    注意: セマフォ SEM_ND6_CACHE によりロック状態で呼出すこと。
  */
 
@@ -313,15 +295,13 @@
 	SYSTIM now;
 
-	/* ã¢ãã¬ã¹è§£æ±ºå¾
-ã¡ã®ãã¼ã¿ã°ã©ã ãããã°éä¿¡ããã*/
+	/* アドレス解決待ちのデータグラムがあれば送信する。*/
 	if (ln->hold) {
 
-		/* ã¿ã¤ã ã¢ã¦ãã®å¦ç */
+		/* タイムアウトの処理 */
 		if (ln->tmout != TMO_FEVR) {
 
 			/*
-			 *  ã¿ã¤ã ã¢ã¦ãã®æå®ãæ°¸ä¹
-ã§ãªããæéãéãã¦ããã°ã
-			 *  åºåããªãã§çµäºããã
+			 *  タイムアウトの指定が永久でなく、時間を過ぎていれば、
+			 *  出力しないで終了する。
 			 */
 			syscall(get_tim(&now));
@@ -341,8 +321,7 @@
 
 /*
- *  nd6_lookup -- è¿é£æ¢ç´¢ã­ã£ãã·ã¥ãæ¢ç´¢ããã
- *
- *    æ³¨æ: ã»ããã© SEM_ND6_CACHE ã«ããã­ãã¯ç¶æ
-ã§å¼åºããã¨ã
+ *  nd6_lookup -- 近隣探索キャッシュを探索する。
+ *
+ *    注意: セマフォ SEM_ND6_CACHE によりロック状態で呼出すこと。
  *
  */
@@ -356,5 +335,5 @@
 	for (ix = NUM_ND6_CACHE_ENTRY; ix -- > 0; ) {
 		if (nd6_cache[ix].state == 0) {
-			/* æªä½¿ç¨ã¨ã³ããªã®ã¤ã³ããã¯ã¹ãè¨é²ããã*/
+			/* 未使用エントリのインデックスを記録する。*/
 			if (fix == -1)
 				fix = ix;
@@ -364,5 +343,5 @@
 			}
 		else if ((int32_t)(nd6_cache[ix].expire - min) < 0) {	/* nd6_cache[ix].expire < min */
-			/* æå¹æéãæç­ã¨ã³ããªã®ã¤ã³ããã¯ã¹ãè¨é²ããã*/
+			/* 有効期限が最短エントリのインデックスを記録する。*/
 			min = nd6_cache[ix].expire;
 			mix = ix;
@@ -388,5 +367,5 @@
 
 /*
- *  nd6_cache_lladdr -- è¿é£æ¢ç´¢ã­ã£ãã·ã¥ã«ç»é²ããã
+ *  nd6_cache_lladdr -- 近隣探索キャッシュに登録する。
  */
 
@@ -400,9 +379,9 @@
 	int_t		newstate = ND6_LLINFO_INCOMPLETE;
 
-	/* ã¢ãã¬ã¹ãç¡æå®ãªãä½ãããªãã*/
+	/* アドレスが無指定なら何もしない。*/
 	if (IN6_IS_ADDR_UNSPECIFIED(from))
 		return NULL;
 
-	/* è¿é£ã­ã£ãã·ã¥ã«ç»é²ããã*/
+	/* 近隣キャッシュに登録する。*/
 	syscall(wai_sem(SEM_ND6_CACHE));
 	if ((ln = nd6_lookup(from, false)) == NULL) {
@@ -422,9 +401,8 @@
 
 	/*
-	 *  ç¶æ
-é·ç§»è¡¨
+	 *  状態遷移表
 	 *
 	 *  nd_na_flags
-	 *  newnetry olladdr lladdr llchange å¦ç (L: lladdr ãç»é²ãã)
+	 *  newnetry olladdr lladdr llchange 処理 (L: lladdr を登録する)
 	 *
 	 *      F       F       N       -    (1)
@@ -437,5 +415,5 @@
 	 */
 
-	/* ãã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹ãéç¥ããã¦ããã°æ´æ°ããã*/
+	/* データリンク層のアドレスが通知されていれば更新する。*/
 	if (lladdr != NULL) {
 		ln->ifaddr = *(T_IF_ADDR *)lladdr;
@@ -459,5 +437,5 @@
 		}
 
-	/* è¿é£ã­ã£ãã·ã¥ã¨ã³ããªãæ´æ°ããã*/
+	/* 近隣キャッシュエントリを更新する。*/
 	if (doupdate) {
 		ln->state = newstate;
@@ -467,6 +445,5 @@
 			ln->expire = now + ND6_GCOLLECTION_TIME;
 
-			/* ã¢ãã¬ã¹è§£æ±ºå¾
-ã¡ã®ãã¼ã¿ã°ã©ã ãããã°éä¿¡ããã*/
+			/* アドレス解決待ちのデータグラムがあれば送信する。*/
 			nd6_output_hold(ifp, ln);
 			}
@@ -477,5 +454,5 @@
 
 
-	/* ã«ã¼ã¿éç¥ã®å¦ç */
+	/* ルータ通知の処理 */
 	switch (type) {
 
@@ -507,5 +484,5 @@
 
 /*
- *  nd6_is_addr_neighbor -- æå®ãããã¢ãã¬ã¹ã®ãã¼ããåä¸ãªã³ã¯ã«ããããã§ãã¯ããã
+ *  nd6_is_addr_neighbor -- 指定されたアドレスのノードが同一リンクにあるかチェックする。
  */
 
@@ -526,8 +503,7 @@
 
 /*
- *  nd6_output -- è¿é£æ¢ç´¢ã®åºåé¢æ°
- *
- *    æ³¨æ: ã»ããã© SEM_ND6_CACHE ã«ããã­ãã¯ç¶æ
-ã§å¼åºããã¨ã
+ *  nd6_output -- 近隣探索の出力関数
+ *
+ *    注意: セマフォ SEM_ND6_CACHE によりロック状態で呼出すこと。
  */
 
@@ -539,15 +515,14 @@
 
 	/*
-	 *  ãã¦å
-ã¢ãã¬ã¹ããã«ãã­ã£ã¹ãããè¿é£ã­ã£ãã·ã¥ã
-	 *  ä¸è¦ã®å ´åã¯ç´ã¡ã«éä¿¡ããã
+	 *  あて先アドレスがマルチキャストか、近隣キャッシュが
+	 *  不要の場合は直ちに送信する。
 	 */
 	if (!(IN6_IS_ADDR_MULTICAST(dst) || !IF_IN6_NEED_CACHE(ifp))) {
 		if (ln == NULL) {
-			/* è¿é£ã­ã£ãã·ã¥ãæªå®ç¾©ã®å ´å */
+			/* 近隣キャッシュが未定義の場合 */
 			if (nd6_is_addr_neighbor(ifp, dst)) {
 				/*
-				 *  æå®ãããã¢ãã¬ã¹ã®ãã¼ããåä¸ãªã³ã¯ã«ããæã¯ã
-				 *  è¿é£ã­ã£ãã·ã¥ãæ¢ç´¢ããæªå®ç¾©ã®å ´åã¯ç»é²ããã
+				 *  指定されたアドレスのノードが同一リンクにある時は、
+				 *  近隣キャッシュを探索し、未定義の場合は登録する。
 				 */
 				ln = nd6_lookup(dst, true);
@@ -560,7 +535,6 @@
 
 		/*
-		 *  è¿é£ã­ã£ãã·ã¥ã®ç¶æ
-ãããã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹ãåãã£ã¦ãã¦ãã
-		 *  å°éå¯è½æ§ãç¢ºèªããã¦ããªãã¨ãã¯ãå°éä¸è½éç¥ãéå§ããã
+		 *  近隣キャッシュの状態が、データリンク層のアドレスが分かっていても、
+		 *  到達可能性が確認されていないときは、到達不能通知を開始する。
 		 */
 		if (ln->state == ND6_LLINFO_STALE) {
@@ -572,11 +546,10 @@
 
 		/*
-		 *  è¿é£ã­ã£ãã·ã¥ã®ç¶æ
-ãããã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹æªè§£æ±ºã®å ´åã¯
-		 *  è¿é£æ¢ç´¢ãè¡ãã
+		 *  近隣キャッシュの状態が、データリンク層のアドレス未解決の場合は
+		 *  近隣探索を行う。
 		 */
 		if (ln->state <= ND6_LLINFO_INCOMPLETE) {
 
-			/* ã¿ã¤ã ã¢ã¦ãã®æå®ããã¼ãªã³ã°ãªãã¿ã¤ã ã¢ã¦ãã§çµäºããã*/
+			/* タイムアウトの指定がポーリングならタイムアウトで終了する。*/
 			if (tmout == TMO_POL) {
 				error = E_TMOUT;
@@ -587,5 +560,5 @@
 				ln->state = ND6_LLINFO_INCOMPLETE;
 
-			/* ãã§ã«ãæªè§£æ±ºã®ãããã¯ã¼ã¯ãããã¡ãããã°ãéæ¾ããã*/
+			/* すでに、未解決のネットワークバッファがあれば、開放する。*/
 			if (ln->hold != NULL) {
 				syscall(rel_net_buf(ln->hold));
@@ -594,12 +567,12 @@
 
 			/*
-			 *  éä¿¡ããã³ãã£ã³ã°ããã
-			 *  IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ãè¨­å®ããã¦ããã¨ãã¯ã
-			 *  éä¿¡ããã³ãã£ã³ã°ããªãã
+			 *  送信をペンディングする。
+			 *  IF でネットワークバッファを開放しないフラグが設定されているときは、
+			 *  送信をペンディングしない。
 			 */
 			if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
 				ln->hold = output;
 
-				/* ã¿ã¤ã ã¢ã¦ãã®è¨­å® */
+				/* タイムアウトの設定 */
 				if (tmout == TMO_FEVR)
 					ln->tmout = tmout;
@@ -620,5 +593,5 @@
 					if ((int32_t)(ln->expire - now) < 0) {
 					           /* ln->expire < now */
-						ln->expire += ND6_RETRANS_TIME;	/* è¿é£æ¢ç´¢éä¿¡éé */
+						ln->expire += ND6_RETRANS_TIME;	/* 近隣探索送信間隔 */
 						ln->asked ++;
 						nd6_ns_output(ifp, &in6_addr_unspecified, dst, ln, false);
@@ -631,5 +604,5 @@
 
 	/*
-	 *  éè¤ãæ¤åºãããã¤ã³ã¿ãã§ã¼ã¹ã«ã¯åºåããªãã
+	 *  重複が検出されたインタフェースには出力しない。
 	 */
 	if ((ifp->flags & ND6_IFF_IFDISABLED) != 0) {
@@ -647,5 +620,5 @@
 
 /*
- *  nd6_storelladdr -- åºåãããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ãè¿ãã
+ *  nd6_storelladdr -- 出力するネットワークインタフェースのアドレスを返す。
  */
 
@@ -664,8 +637,7 @@
 
 /*
- *  nd6_option -- è¿é£æ¢ç´¢ãªãã·ã§ã³ã®å¦ç
- *
- *    æ³¨æ: ãªãã·ã§ã³ãªãã»ããé
-åã«ã¯ããªãã»ãã + 8 ãè¨­å®ããã¦ããã
+ *  nd6_option -- 近隣探索オプションの処理
+ *
+ *    注意: オプションオフセット配列には、オフセット + 8 が設定されている。
  */
 
@@ -675,6 +647,5 @@
 	T_ND_OPT_HDR	*opth;
 	ER		error = E_OK;
-	int_t		pi_count = 0;	/* ãã¬ãã£ãã¯ã¹æ
-å ±ã®åæ° */
+	int_t		pi_count = 0;	/* プレフィックス情報の個数 */
 
 	opth = (T_ND_OPT_HDR *)nh;
@@ -683,5 +654,5 @@
 	while (error == E_OK && ((uint8_t *)opth - (uint8_t *)nh) < (256 - 8) && len > 0) {
 
-		/* ãªãã·ã§ã³é·ã 0 ã®æã¯ãä¸æ­£ãªãªãã·ã§ã³ã¨ãã¦å¦çããã*/
+		/* オプション長が 0 の時は、不正なオプションとして処理する。*/
 		if (opth->len == 0) {
 			error = E_PAR;
@@ -689,14 +660,12 @@
 			}
 
-		/* ãªãã·ã§ã³ã®ã¿ã¤ãã«ããåå²ããã*/
+		/* オプションのタイプにより分岐する。*/
 		switch (opth->type) {
-		case ND_OPT_SOURCE_LINKADDR:		/* éä¿¡å
-ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-		case ND_OPT_TARGET_LINKADDR:		/* å¯¾è±¡ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹	*/
-		case ND_OPT_REDIRECTED_HEADER:		/* ãªãã¤ã¬ã¯ãã»ããã				*/
+		case ND_OPT_SOURCE_LINKADDR:		/* 送信先ネットワークインタフェースのアドレス	*/
+		case ND_OPT_TARGET_LINKADDR:		/* 対象ネットワークインタフェースのアドレス	*/
+		case ND_OPT_REDIRECTED_HEADER:		/* リダイレクト・ヘッダ				*/
 		case ND_OPT_MTU:			/* MTU						*/
 			if (opt[ND_OPT_OFF_ARRAY_IX(opth->type)]) {
-				/* ãã¬ãã£ãã¯ã¹æ
-å ±ä»¥å¤ã®åããªãã·ã§ã³ãè¤æ°æå®ããã¦ããã*/
+				/* プレフィックス情報以外の同じオプションが複数指定されている。*/
 				error = E_PAR;
 				}
@@ -705,10 +674,8 @@
 				}
 			break;
-		case ND_OPT_PREFIX_INFORMATION:		/* ãã¬ãã£ãã¯ã¹æ
-å ±				*/
+		case ND_OPT_PREFIX_INFORMATION:		/* プレフィックス情報				*/
 			if (!opt[ND_OPT_OFF_ARRAY_IX(ND_OPT_PREFIX_INFORMATION)]) {
 				/*
-				 *  ãã¬ãã£ãã¯ã¹æ
-å ±ã¯æåã«ç¾ãããªãã»ããã®ã¿è¨é²ããã
+				 *  プレフィックス情報は最初に現れたオフセットのみ記録する。
 				 */
 				opt[ND_OPT_OFF_ARRAY_IX(opth->type)] = (uint8_t *)opth - (uint8_t *)nh + 8;
@@ -718,10 +685,10 @@
 		default:
 			/*
-			 *  å°æ¥å®ç¾©ããããã­ãã³ã«ã¸ã®æ¡å¼µã«å¯¾å¿ããããã
-			 *  èªè­ã§ããªããªãã·ã§ã³ã¯åã«ç¡è¦ããå¦çãç¶è¡ããã
+			 *  将来定義されるプロトコルへの拡張に対応するため、
+			 *  認識できないオプションは単に無視し、処理を続行する。
 			 */
 			break;
 			}
-		len -= opth->len << 3;		/* ãªãã·ã§ã³é·ã®åä½ã¯ 8 ãã¤ã */
+		len -= opth->len << 3;		/* オプション長の単位は 8 バイト */
 		opth = (T_ND_OPT_HDR *)((uint8_t *)opth + (opth->len << 3));
 		}
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -80,11 +68,11 @@
 
 /*
- *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ï¼T_IFNETï¼ã®ãã©ã°
- */
-
-#define ND6_IFF_IFDISABLED	UINT_C(0x01)	/* ã¤ã³ã¿ãã§ã¼ã¹ãç¡å¹ã«ããã*/
-
-/*
- *  è¿é£ã­ã£ãã·ã¥ 
+ *  ネットワークインタフェース構造体（T_IFNET）のフラグ
+ */
+
+#define ND6_IFF_IFDISABLED	UINT_C(0x01)	/* インタフェースを無効にする。*/
+
+/*
+ *  近隣キャッシュ 
  */
 
@@ -93,5 +81,5 @@
 	T_NET_BUF	*hold;
 	TMO		tmout;
-	SYSTIM		expire;		/* [us] æå¹æéãåããæå»	*/
+	SYSTIM		expire;		/* [us] 有効時間が切れる時刻	*/
 	T_IF_ADDR	ifaddr;
 	uint8_t		state;
@@ -100,76 +88,62 @@
 	} T_LLINFO_ND6;
 
-/* è¿é£ã­ã£ãã·ã¥ã®ç¶æ
- */
-
-#define ND6_LLINFO_FREE			0	/* æªä½¿ç¨		*/
-#define ND6_LLINFO_NO_STATE		1	/* ç¶æ
-æªå®ç¾©		*/
-#define ND6_LLINFO_INCOMPLETE		2	/* æªè§£æ±º		*/
-#define ND6_LLINFO_REACHABLE		3	/* å°éå¯è½		*/
-#define ND6_LLINFO_STALE		4	/* å°éå¯è½æ§ã¯æªç¢ºèª	*/
-#define ND6_LLINFO_DELAY		5	/* å°éå¯è½æ§ã®ç¢ºèªå¾
-æ©	*/
-#define ND6_LLINFO_PROBE		6	/* å°éå¯è½æ§ãç¢ºèªä¸­	*/
+/* 近隣キャッシュの状態 */
+
+#define ND6_LLINFO_FREE			0	/* 未使用		*/
+#define ND6_LLINFO_NO_STATE		1	/* 状態未定義		*/
+#define ND6_LLINFO_INCOMPLETE		2	/* 未解決		*/
+#define ND6_LLINFO_REACHABLE		3	/* 到達可能		*/
+#define ND6_LLINFO_STALE		4	/* 到達可能性は未確認	*/
+#define ND6_LLINFO_DELAY		5	/* 到達可能性の確認待機	*/
+#define ND6_LLINFO_PROBE		6	/* 到達可能性を確認中	*/
 
 #define ND6_IS_LLINFO_PROBREACH(n)	((n)->state > ND6_LLINFO_INCOMPLETE)
 
-/* è¿é£ã­ã£ãã·ã¥ã®å¶å¾¡ããã */
-
-#define ND6_LLIF_ROUTER			UINT_C(0x80)	/* ã«ã¼ã¿		*/
-#define ND6_LLIF_ASKED			UINT_C(0x40)	/* éç¥æ¸ã¿		*/
-#define ND6_LLIF_STATE_MASK		UINT_C(0x07)	/* ç¶æ
-ãã¹ã¯		*/
-
-/* è¿é£æ¢ç´¢ã­ã£ãã·ã¥ãæå¹æéã®å®ç¾© */
+/* 近隣キャッシュの制御ビット */
+
+#define ND6_LLIF_ROUTER			UINT_C(0x80)	/* ルータ		*/
+#define ND6_LLIF_ASKED			UINT_C(0x40)	/* 通知済み		*/
+#define ND6_LLIF_STATE_MASK		UINT_C(0x07)	/* 状態マスク		*/
+
+/* 近隣探索キャッシュ、有効時間の定義 */
 
 #define ND6_SLOW_TMO			((60*60*1000)/NET_TIMER_HZ)
-							/* 1 [æé]				*/
-							/* è¿é£æ¢ç´¢ã­ã£ãã·ã¥æ´æ°ã¿ã¤ã ã¢ã¦ã	*/
-
-#define ND6_MAX_DAD_TRY			15		/* éè¤ã¢ãã¬ã¹æ¤åºã®åéåæ°		*/
-#define ND6_MAX_MCAST_QUERY		3		/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹è¦è«ã®åéåæ°	*/
-#define ND6_MAX_UCAST_QUERY		3		/* ã¦ãã­ã£ã¹ãã¢ãã¬ã¹è¦è«ã®åéåæ°	*/
+							/* 1 [時間]				*/
+							/* 近隣探索キャッシュ更新タイムアウト	*/
+
+#define ND6_MAX_DAD_TRY			15		/* 重複アドレス検出の再送回数		*/
+#define ND6_MAX_MCAST_QUERY		3		/* マルチキャストアドレス要請の再送回数	*/
+#define ND6_MAX_UCAST_QUERY		3		/* ユニキャストアドレス要請の再送回数	*/
 
 #define ND6_GCOLLECTION_TIME		(60*60*24*SYSTIM_HZ)
-							/* ã´ãæ¾ãå¨æã1 æ¥			*/
-#define	ND6_DELAY_TIME			(5*SYSTIM_HZ)	/* ç¢ºèªå¾
-æ©é
-å»¶				*/
-#define ND6_FIRST_DAD_DELAY_TIME	(1*SYSTIM_HZ)	/* æåã®éè¤ã¢ãã¬ã¹æ¤åºéä¿¡é
-å»¶	*/
+							/* ゴミ拾い周期、1 日			*/
+#define	ND6_DELAY_TIME			(5*SYSTIM_HZ)	/* 確認待機遅延				*/
+#define ND6_FIRST_DAD_DELAY_TIME	(1*SYSTIM_HZ)	/* 最初の重複アドレス検出送信遅延	*/
 #define ND6_DAD_DELAY_TIME		(5*SYSTIM_HZ/10)
-							/* éè¤ã¢ãã¬ã¹æ¤åºéä¿¡é
-å»¶		*/
-
-/* è¿é£æ¢ç´¢ç¨ã¿ã¤ãã®è¨­å® */
-
-#define ND6_TIMER_TMO			((SYSTIM_HZ/NET_TIMER_CYCLE)/5)	/* 0.2[s] éé		*/
-
-/*
- *  å°éå¯è½ç¶æ
-ã®æå¹æé
- */
-
-#define	ND6_DEF_REACHABLE_TIME		(30*SYSTIM_HZ)	/* å°éå¯è½ç¶æ
-ã®æå¹æéã®æ¢å®å¤		*/
+							/* 重複アドレス検出送信遅延		*/
+
+/* 近隣探索用タイマの設定 */
+
+#define ND6_TIMER_TMO			((SYSTIM_HZ/NET_TIMER_CYCLE)/5)	/* 0.2[s] 間隔		*/
+
+/*
+ *  到達可能状態の有効時間
+ */
+
+#define	ND6_DEF_REACHABLE_TIME		(30*SYSTIM_HZ)	/* 到達可能状態の有効時間の既定値		*/
 #define	ND6_MAX_REACHABLE_TIME		(60*60*SYSTIM_HZ)
-							/* å°éå¯è½ç¶æ
-ã®æå¹æéã®æ¢å®å¤		*/
+							/* 到達可能状態の有効時間の既定値		*/
 #define	ND6_RECALC_REACHTM_INTERVAL	(60*60*2*SYSTIM_HZ)
-							/* å°éå¯è½ç¶æ
-ã®æå¹æéåè¨ç®éé	*/
-
-#define	ND6_MIN_REACHTM_RAND_FACTOR	512		/* æå°ä¹±æ°è£æ­£å¤ã1,024 * 0.5		*/
-
-#if 1							/* ã¿ã¤ãã¼ã®èµ·åééãèæ
-®ããè¦å®ããç­ãè¨­å®	*/
-#define	ND6_MAX_REACHTM_RAND_FACTOR	1484		/* æå°ä¹±æ°è£æ­£å¤ã1,024 * 1.45			*/
+							/* 到達可能状態の有効時間再計算間隔	*/
+
+#define	ND6_MIN_REACHTM_RAND_FACTOR	512		/* 最小乱数補正値、1,024 * 0.5		*/
+
+#if 1							/* タイマーの起動間隔を考慮し、規定より短く設定	*/
+#define	ND6_MAX_REACHTM_RAND_FACTOR	1484		/* 最小乱数補正値、1,024 * 1.45			*/
 #else
-#define	ND6_MAX_REACHTM_RAND_FACTOR	1536		/* æå°ä¹±æ°è£æ­£å¤ã1,024 * 1.5			*/
+#define	ND6_MAX_REACHTM_RAND_FACTOR	1536		/* 最小乱数補正値、1,024 * 1.5			*/
 #endif
 
-/* å°éå¯è½ç¶æ
-ã®æå¹æéã®è¨ç®ãã¯ã­ */
+/* 到達可能状態の有効時間の計算マクロ */
 
 #define ND6_CALC_REACH_TIME(b)		\
@@ -178,5 +152,5 @@
 
 /*
- *  è¿é£æ¢ç´¢ã®éä¿¡éé
+ *  近隣探索の送信間隔
  */
 
@@ -184,10 +158,10 @@
 
 /*
- *  ã«ã¼ã¿éç¥ã«ããå¤æ´ããããã¨ãããå¤
+ *  ルータ通知により変更されることがある値
  */
 
 #if NUM_ND6_DEF_RTR_ENTRY > 0
 
-/* ã«ã¼ã¿éç¥ãåä¿¡ããå ´åã¯ãéç¥ãããå¤ */
+/* ルータ通知を受信する場合は、通知された値 */
 
 #define	ND6_REACHABLE_TIME		nd6_reachable_time
@@ -196,5 +170,5 @@
 #else	/* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
 
-/* ã«ã¼ã¿éç¥ãåä¿¡ããªãå ´åã®å¤ã¯æ¢å®å¤ */
+/* ルータ通知を受信しない場合の値は既定値 */
 
 #define	ND6_REACHABLE_TIME		ND6_DEF_REACHABLE_TIME
@@ -204,53 +178,50 @@
 
 /*
- *  ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ã
+ *  ディフォルトルータ・リスト
  */
 
 typedef struct t_def_router {
 	T_IN6_ADDR	addr;
-	SYSTIM		expire;		/* [us] æå¹æéãåããæå»	*/
-	uint32_t	lifetime;	/* [us] æå¹æé			*/
-	uint16_t	plistmap;	/* ãã¬ãã£ãã¯ã¹ããã		*/
-	uint8_t		flags;		/* ã«ã¼ã¿éç¥ã®ãã©ã°		*/
+	SYSTIM		expire;		/* [us] 有効時間が切れる時刻	*/
+	uint32_t	lifetime;	/* [us] 有効時間			*/
+	uint16_t	plistmap;	/* プレフィックスマップ		*/
+	uint8_t		flags;		/* ルータ通知のフラグ		*/
 	uint8_t		state;
 	} T_DEF_ROUTER;
 
-/* ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãã®ç¶æ
- */
-
-#define ND6_DEF_RTR_BUSY		0xff	/* ä½¿ç¨ä¸­		*/
-
-/* ãã¬ãã£ãã¯ã¹ã®ã¤ã³ããã¯ã¹ */
+/* ディフォルトルータ・リストの状態 */
+
+#define ND6_DEF_RTR_BUSY		0xff	/* 使用中		*/
+
+/* プレフィックスのインデックス */
 
 #define ND6_PREFIX_IX_INVALID		0xff
 
 /*
- *  ãã¬ãã£ãã¯ã¹ã»ãªã¹ã
+ *  プレフィックス・リスト
  */
 
 typedef struct t_nd6_prefix {
-	T_IN6_ADDR	prefix;		/* ãã¬ãã£ãã¯ã¹		*/
-	uint32_t	expire;		/* [s] æå¹æéãåããæå»	*/
-	uint32_t	preferred;	/* [s] æ¨å¥¨æå¹æéãåããæå»	*/
-	uint32_t	vltime;		/* [s] æå¹æé			*/
-	uint32_t	pltime;		/* [s] æ¨å¥¨æå¹æé		*/
-	uint16_t	routermap;	/* ã«ã¼ã¿ããã			*/
-	uint8_t		flags;		/* ãã©ã°			*/
-	uint8_t		prefix_len;	/* ãã¬ãã£ãã¯ã¹é·		*/
+	T_IN6_ADDR	prefix;		/* プレフィックス		*/
+	uint32_t	expire;		/* [s] 有効時間が切れる時刻	*/
+	uint32_t	preferred;	/* [s] 推奨有効時間が切れる時刻	*/
+	uint32_t	vltime;		/* [s] 有効時間			*/
+	uint32_t	pltime;		/* [s] 推奨有効時間		*/
+	uint16_t	routermap;	/* ルータマップ			*/
+	uint8_t		flags;		/* フラグ			*/
+	uint8_t		prefix_len;	/* プレフィックス長		*/
 	} T_ND6_PREFIX;
 
-/* ãã©ã° */
-
-#define ND6_PREFIX_FLAG_ONLINK		UINT_C(0x80)	/* ãªã³ãªã³ã¯ãã¬ãã£ãã¯ã¹	*/
-#define ND6_PREFIX_FLAG_AUTO		UINT_C(0x40)	/* ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨­å®*/
-
-#define ND6_PREFIX_STATE_BUSY		UINT_C(0x01)	/* ä½¿ç¨ä¸­		*/
-#define ND6_PREFIX_STATE_ONLINK		UINT_C(0x02)	/* ãªã³ãªã³ã¯ç¶æ
-	*/
-#define ND6_PREFIX_STATE_DETACHED	UINT_C(0x04)	/* éä½¿ç¨ç¶æ
-	*/
-
-/*
- *  å¤æ°
+/* フラグ */
+
+#define ND6_PREFIX_FLAG_ONLINK		UINT_C(0x80)	/* オンリンクプレフィックス	*/
+#define ND6_PREFIX_FLAG_AUTO		UINT_C(0x40)	/* ステートレス・アドレス自動設定*/
+
+#define ND6_PREFIX_STATE_BUSY		UINT_C(0x01)	/* 使用中		*/
+#define ND6_PREFIX_STATE_ONLINK		UINT_C(0x02)	/* オンリンク状態	*/
+#define ND6_PREFIX_STATE_DETACHED	UINT_C(0x04)	/* 非使用状態	*/
+
+/*
+ *  変数
  */
 
@@ -261,5 +232,5 @@
 
 /*
- *  é¢æ°
+ *  関数
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_nbr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_nbr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_nbr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -124,5 +112,5 @@
 
 /*
- *  å±æé¢æ°
+ *  局所関数
  */
 
@@ -134,5 +122,5 @@
 
 /*
- *  nd6_dad_duplicated -- éè¤ã¢ãã¬ã¹ãæ¤åºããæã®å¦ç
+ *  nd6_dad_duplicated -- 重複アドレスを検出した時の処理
  */
 
@@ -147,13 +135,13 @@
 		ifa->flags |=  IN6_IFF_DUPLICATED;
 
-		/* ã¿ã¤ãã¼ãåæ­¢ããã*/
+		/* タイマーを停止する。*/
 		untimeout((callout_func)nd6_dad_timer, ifa);
 
 		/*
-		 *  ãã IPv6 ã¢ãã¬ã¹ããã¦ãã¼ã¯ã«å²ãå½ã¦ãã
-		 * ï¼ã¤ã¼ãµãããç¨ã® EUI-64ï¼ãã¼ãã¦ã§ã¢ã¢ãã¬ã¹ããã¼ã¹ã¨ãã
-		 *  ã¤ã³ã¿ãã§ã¼ã¹ ID ã§çæãããã®ã§ããã°ã
-		 *  ãã®ã¤ã³ã¿ãã§ã¼ã¹ã§ã® IPv6 ã®åä½ã¯ç¡å¹ã«ãã¹ãã§ãã
-		 * ï¼RFC2462bis-03 ã»ã¯ã·ã§ã³ 5.4.5ï¼ã
+		 *  もし IPv6 アドレスが、ユニークに割り当てらた
+		 * （イーサネット用の EUI-64）ハードウェアアドレスをベースとした
+		 *  インタフェース ID で生成されたのであれば、
+		 *  このインタフェースでの IPv6 の動作は無効にすべきである
+		 * （RFC2462bis-03 セクション 5.4.5）。
 		 */
 		if (IN6_IS_ADDR_LINKLOCAL(&ifa->addr))
@@ -163,5 +151,5 @@
 
 /*
- *  nd6_dad_ns_output -- éè¤ã¢ãã¬ã¹æ¤åº (DAD) è¦è«ãåºåããã
+ *  nd6_dad_ns_output -- 重複アドレス検出 (DAD) 要請を出力する。
  */
 
@@ -176,6 +164,5 @@
 
 /*
- *  nd6_dad_ns_input -- éè¤ã¢ãã¬ã¹æ¤åº (DAD) è¦è«å
-¥å
+ *  nd6_dad_ns_input -- 重複アドレス検出 (DAD) 要請入力
  */
 
@@ -186,5 +173,5 @@
 
 	/*
-	 *  ã¾ã ãéè¤ã¢ãã¬ã¹æ¤åºè¦è«ãåºåãã¦ããªãå ´å
+	 *  まだ、重複アドレス検出要請を出力していない場合
 	 */
 	if (ifa->ns_ocount == 0)
@@ -195,6 +182,5 @@
 
 /*
- *  nd6_dad_na_input -- éè¤ã¢ãã¬ã¹æ¤åº (DAD) éç¥å
-¥å
+ *  nd6_dad_na_input -- 重複アドレス検出 (DAD) 通知入力
  */
 
@@ -208,5 +194,5 @@
 
 /*
- *  nd6_dad_timer -- éè¤ã¢ãã¬ã¹æ¤åº (DAD) ã¿ã¤ãã¼
+ *  nd6_dad_timer -- 重複アドレス検出 (DAD) タイマー
  */
 
@@ -229,5 +215,5 @@
 		nd6_dad_ns_output(ifp, ifa);
 
-		/* ã¿ã¤ã ã¢ã¦ããè¿é£æ¢ç´¢ã®éä¿¡ééã«è¨­å®ããã*/
+		/* タイムアウトを近隣探索の送信間隔に設定する。*/
 		timeout((callout_func)nd6_dad_timer, ifa, ND6_RETRANS_TIME * NET_TIMER_HZ / SYSTIM_HZ);
 		}
@@ -241,6 +227,5 @@
 
 /*
- *  nd6_ns_input -- è¿é£è¦è«ã®å
-¥åå¦çã
+ *  nd6_ns_input -- 近隣要請の入力処理。
  */
 
@@ -264,7 +249,7 @@
 
 	/*
-	 *  ãããã®ãã§ãã¯ãä»¥ä¸ã®å ´åã¯ç ´æ£ããã
-	 *    ã»ããããªãããã IPV6_MAXHLIM (255) ä»¥å¤
-	 *    ã»ãããé·ãç­ã
+	 *  ヘッダのチェック、以下の場合は破棄する。
+	 *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
+	 *    ・ヘッダ長が短い
 	 */
 	if (ip6h->hlim != IPV6_MAXHLIM || input->len - off < NEIGHBOR_SOLICIT_HDR_SIZE)
@@ -275,7 +260,6 @@
 	if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src)) {
 		/*
-		 *  å§ç¹ã¢ãã¬ã¹ãç¡æå®ãªããéè¤ã¢ãã¬ã¹æ¤åº
-		 *  ãã¦å
-ã¢ãã¬ã¹ã¯ãè¦è«ãã«ãã­ã£ã¹ãã§ãªããã°ãªããªãã
+		 *  始点アドレスが無指定なら、重複アドレス検出
+		 *  あて先アドレスは、要請マルチキャストでなければならない。
 		 */
 		if (!IN6_IS_ADDR_NS_MULTICAST(&ip6h->dst))
@@ -283,19 +267,18 @@
 		}
 
-	/* ç®çã¢ãã¬ã¹ããã«ãã­ã£ã¹ããªãã¨ã©ã¼ */
+	/* 目的アドレスがマルチキャストならエラー */
 	if (IN6_IS_ADDR_MULTICAST(&nsh->target))
 		goto err_ret;
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããã*/
+	/* 近隣探索オプションのオフセットを記録する。*/
 	if (nd6_options(nd_opt_off, input->buf + (off + NEIGHBOR_SOLICIT_HDR_SIZE),
 	                            input->len - (off + NEIGHBOR_SOLICIT_HDR_SIZE)) != E_OK)
 		goto err_ret;
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ (å§ç¹ãªã³ã¯ã¢ãã¬ã¹) */
+	/* 近隣探索オプション (始点リンクアドレス) */
 	if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)]) {
 		opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + NEIGHBOR_SOLICIT_HDR_SIZE) +
 		                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)] - 8);
-	 	/* æ³¨æ: ãªãã·ã§ã³ãªãã»ããé
-åã«ã¯ããªãã»ãã + 8 ãè¨­å®ããã¦ããã*/
+	 	/* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
 		lladdr     = (uint8_t *)(opth + 1);
 		lladdr_len = (opth->len << 3);
@@ -305,6 +288,5 @@
 		goto err_ret;
 
-	/* å®å
-ã¢ãã¬ã¹ããã«ãã­ã£ã¹ããªãè¿é£éç¥ã«ãã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹ãä»ããã*/
+	/* 宛先アドレスがマルチキャストなら近隣通知にデータリンク層のアドレスを付ける。*/
 	if (IN6_IS_ADDR_MULTICAST(&ip6h->dst))
 		tlladdr = true;
@@ -313,8 +295,7 @@
 
 	/*
-	 *  ç®çã¢ãã¬ã¹ããèªåã®ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«
-	 *  å²ãå½ã¦ããã¦ããã¢ãã¬ã¹ãèª¿ã¹ãã
-	 *  ãªããä»£çãµã¼ãã¹ã¯å®è£
-ãã¦ããªãã
+	 *  目的アドレスが、自分のネットワークインタフェースに
+	 *  割り当てられているアドレスか調べる。
+	 *  なお、代理サービスは実装していない。
 	 */
 	ifa = in6_lookup_ifaddr(ifp, &nsh->target);
@@ -323,10 +304,10 @@
 		goto free_ret;
 
-	/* æ¢ç´¢çµæã¢ãã¬ã¹ãéè¤ãã¦ããã°å¿ç­ããªãã§çµäºããã*/
+	/* 探索結果アドレスが重複していれば応答しないで終了する。*/
 	if (ifa->flags & IN6_IFF_DUPLICATED)
 		goto err_ret;
 
 	/*
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹é·ãä¸è´ããªããã°ã¨ã©ã¼
+	 *  ネットワークインタフェースのアドレス長が一致しなければエラー
 	 */
 	if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
@@ -334,10 +315,10 @@
 
 	/*
-	 *  å§ç¹ã¢ãã¬ã¹ãèªåã®ã¢ãã¬ã¹ã¨ä¸è´ããã°éè¤ãã¦ããã
+	 *  始点アドレスが自分のアドレスと一致すれば重複している。
 	 */
 	if (IN6_ARE_ADDR_EQUAL(&ifa->addr, &ip6h->src))
 		goto free_ret;
 
-	/* éè¤æ¤åºä¸­ã«ãè¿é£è¦è«ãåä¿¡ããã¨ãã®å¦ç */
+	/* 重複検出中に、近隣要請を受信したときの処理 */
 	if (ifa->flags & IN6_IFF_TENTATIVE) {
 		if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src))
@@ -352,8 +333,7 @@
 
 	/*
-	 *  å§ç¹ã¢ãã¬ã¹ãç¡æå®ãªããéä¿¡ç¸æã¯éè¤ã¢ãã¬ã¹æ¤åºä¸­ã§ã
-	 *  ç´æ¥éä¿¡ãããã¨ã¯ã§ããªãã®ã§ãå
-¨ãã¼ããã«ãã­ã£ã¹ã
-	 *  ã¢ãã¬ã¹ã«éä¿¡ããã
+	 *  始点アドレスが無指定なら、送信相手は重複アドレス検出中で、
+	 *  直接送信することはできないので、全ノードマルチキャスト
+	 *  アドレスに送信する。
 	 */
 	if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src)) {
@@ -362,5 +342,5 @@
 		}
 
-	/* è¿é£ã­ã£ãã·ã¥ã«ç»é²ããã*/
+	/* 近隣キャッシュに登録する。*/
 	nd6_cache_lladdr(ifp, &ip6h->src, (T_IF_ADDR *)lladdr, ND_NEIGHBOR_SOLICIT, 0);
 
@@ -377,5 +357,5 @@
 
 /*
- *  nd6_ns_output -- è¿é£è¦è«ãåºåããã
+ *  nd6_ns_output -- 近隣要請を出力する。
  */
 
@@ -396,5 +376,5 @@
 		return;
 
-	/* è¿é£è¦è«ãã¤ã­ã¼ãé·ãè¨ç®ããã*/
+	/* 近隣要請ペイロード長を計算する。*/
 	if (!dad && IF_SOFTC_TO_IFADDR(ifp->ic))
 		len = (NEIGHBOR_SOLICIT_HDR_SIZE + ND_OPT_HDR_SIZE + sizeof(T_IF_ADDR) + 7) >> 3 << 3;
@@ -403,12 +383,12 @@
 
 	/*
-	 *  è¦è«ãã«ãã­ã£ã¹ãã»ã¢ãã¬ã¹å®ã®è¿é£æ¢ç´¢ã§ã¯ã
-	 *  ä»ã®ãªã³ã¯ããã®å½é ããããã¼ã¿ã°ã©ã ã
-	 *  æé¤ãããããããããªãããã« IPV6_MAXHLIM (255) ãè¨­å®ããã
+	 *  要請マルチキャスト・アドレス宛の近隣探索では、
+	 *  他のリンクからの偽造されたデータグラムを
+	 *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
 	 */
 	if (IN6_IS_ADDR_UNSPECIFIED(daddr) || IN6_IS_ADDR_MULTICAST(daddr))
 		ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_MAXHLIM);
 
-	/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããIPv6 ããããè¨­å®ããã*/
+	/* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
 	if (in6_get_datagram(&output, len, 0, daddr, NULL,
 	                     IPPROTO_ICMPV6, IPV6_MAXHLIM,
@@ -420,6 +400,5 @@
 	if (IN6_IS_ADDR_UNSPECIFIED(daddr)) {
 
-		/* å®å
-ã¢ãã¬ã¹ãç¡æå®ã®å ´åã¯ãè¦è«ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãè¨­å®ããã*/
+		/* 宛先アドレスが無指定の場合は、要請マルチキャストアドレスを設定する。*/
 		ip6h->dst.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
 		ip6h->dst.s6_addr32[2] = IPV6_ADDR_INT32_ONE;
@@ -428,17 +407,14 @@
 		}
 
-	/* éä¿¡å
-ã¢ãã¬ã¹ã®è¨­å® */
+	/* 送信元アドレスの設定 */
 	if (!dad) {
 
-		/* éè¤ã¢ãã¬ã¹æ¤åºã§ã¯ãªãæã®éä¿¡å
-ã¢ãã¬ã¹æ±ºå®å¦çã*/
+		/* 重複アドレス検出ではない時の送信元アドレス決定処理。*/
 		T_IN6_ADDR *saddr;
 
 		if (ln && ln->hold) {
 			/*
-			 * éä¿¡ããã³ãã£ã³ã°ããã¦ãããã¼ã¿ã°ã©ã ã®
-			 * éä¿¡å
-ã¢ãã¬ã¹ãå©ç¨ããã
+			 * 送信がペンディングされているデータグラムの
+			 * 送信元アドレスを利用する。
 			 */
 			if (ln->hold->len > IF_IP6_HDR_SIZE)
@@ -454,8 +430,6 @@
 		else {
 			/*
-			 *  å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
-			 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã
+			 *  宛先アドレスにふさわしい送信元アドレスを、
+			 *  ネットワークインタフェースから探索して利用する。
 			 */
 			T_IN6_IFADDR *ifa;
@@ -470,10 +444,9 @@
 	else {
 
-		/* éè¤ã¢ãã¬ã¹æ¤åºæã®éä¿¡å
-ã¢ãã¬ã¹ã¯ç¡æå®ã*/
+		/* 重複アドレス検出時の送信元アドレスは無指定。*/
 		memset(&ip6h->src, 0, sizeof(T_IN6_ADDR));
 		}
 
- 	/* è¿é£è¦è«ããããè¨­å®ããã*/
+ 	/* 近隣要請ヘッダを設定する。*/
  	nsh = GET_NEIGHBOR_SOLICIT_HDR(output, IF_IP6_NEIGHBOR_SOLICIT_HDR_OFFSET);
  	nsh->hdr.type        = ND_NEIGHBOR_SOLICIT;
@@ -484,5 +457,5 @@
 	if (!dad && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) {
 
-		/* è¿é£æ¢ç´¢ãªãã·ã§ã³ã¨ãã¦ãæ¢ç´¢ç®æ¨ã® MAC ã¢ãã¬ã¹ãè¨­å®ããã*/
+		/* 近隣探索オプションとして、探索目標の MAC アドレスを設定する。*/
 		T_ND_OPT_HDR	*opth;
 		uint_t		optlen;
@@ -496,9 +469,9 @@
 		}
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	nsh->hdr.sum = 0;
 	nsh->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)nsh - output->buf, len);
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
 	               output->len - GET_IF_IP6_HDR_SIZE(output));
@@ -510,6 +483,5 @@
 
 /*
- *  nd6_na_input -- è¿é£éç¥ã®å
-¥åå¦çã
+ *  nd6_na_input -- 近隣通知の入力処理。
  */
 
@@ -534,7 +506,7 @@
 
 	/*
-	 *  ãããã®ãã§ãã¯ãä»¥ä¸ã®å ´åã¯ç ´æ£ããã
-	 *    ã»ããããªãããã IPV6_MAXHLIM (255) ä»¥å¤
-	 *    ã»ãããé·ãç­ã
+	 *  ヘッダのチェック、以下の場合は破棄する。
+	 *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
+	 *    ・ヘッダ長が短い
 	 */
 	if (ip6h->hlim != IPV6_MAXHLIM || input->len - off < NEIGHBOR_ADVERT_HDR_SIZE)
@@ -543,25 +515,23 @@
 	nah  = (T_NEIGHBOR_ADVERT_HDR *)(input->buf + off);
 
-	/* ç®çã¢ãã¬ã¹ããã«ãã­ã£ã¹ããªãã¨ã©ã¼ */
+	/* 目的アドレスがマルチキャストならエラー */
 	if (IN6_IS_ADDR_MULTICAST(&nah->target))
 		goto err_ret;
 
-	/* è¿é£è¦è«ã¸ã®å¿ç­ã§ãå®å
-ã¢ãã¬ã¹ããã«ãã­ã£ã¹ããªãã¨ã©ã¼ */
+	/* 近隣要請への応答で、宛先アドレスがマルチキャストならエラー */
 	if ((nah->nd_na_flags_reserved & ND_NA_FLG_SOLICITED) &&
 	    IN6_IS_ADDR_MULTICAST(&ip6h->dst))
 		goto err_ret;
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããã*/
+	/* 近隣探索オプションのオフセットを記録する。*/
 	if (nd6_options(nd_opt_off, input->buf + (off + NEIGHBOR_ADVERT_HDR_SIZE), 
 	                            input->len - (off + NEIGHBOR_ADVERT_HDR_SIZE)) != E_OK)
 		goto err_ret;
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ (ç®çãªã³ã¯ã¢ãã¬ã¹) */
+	/* 近隣探索オプション (目的リンクアドレス) */
 	if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)]) {
 		opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + NEIGHBOR_ADVERT_HDR_SIZE) +
 		                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)] - 8);
-	 	/* æ³¨æ: ãªãã·ã§ã³ãªãã»ããé
-åã«ã¯ããªãã»ãã + 8 ãè¨­å®ããã¦ããã*/
+	 	/* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
 		lladdr     = (uint8_t *)(opth + 1);
 		lladdr_len = (opth->len << 3);
@@ -571,6 +541,6 @@
 
 	/*
-	 *  ç®çã¢ãã¬ã¹ãèªåã®ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«å²ãå½ã¦ããã¦ããã¢ãã¬ã¹ã®
-	 *  ããããã«ä¸è´ããã¨ãã¯ãéè¤ãã¦ãããã¨ãæå³ãã¦ããã
+	 *  目的アドレスが自分のネットワークインタフェースに割り当てられているアドレスの
+	 *  いずれかに一致したときは、重複していることを意味している。
 	 */
 	if (ifa) {
@@ -583,18 +553,17 @@
 
 	/*
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹é·ãä¸è´ããªããã°ã¨ã©ã¼
+	 *  ネットワークインタフェースのアドレス長が一致しなければエラー
 	 */
 	if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
 		goto err_ret;
 
-	/* è¿é£ã­ã£ãã·ã¥ãæ¢ç´¢ããã*/
+	/* 近隣キャッシュを探索する。*/
 	syscall(wai_sem(SEM_ND6_CACHE));
 	if ((ln = nd6_lookup(&nah->target, false)) == NULL)
 		goto free_ret;
 
-	/* è¿é£ã­ã£ãã·ã¥ã®ç¶æ
-ãããã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹æªè§£æ±ºã®å ´å */
+	/* 近隣キャッシュの状態が、データリンク層のアドレス未解決の場合 */
 	if (ln->state == ND6_LLINFO_INCOMPLETE) {
-		/* éç¥ããããã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹ã®é·ãã 0 ã®å ´å */
+		/* 通知されたデータリンク層のアドレスの長さが 0 の場合 */
 		if (lladdr == NULL)
 			goto free_ret;
@@ -631,9 +600,8 @@
 
 		/*
-		 *  ç¶æ
-é·ç§»è¡¨
+		 *  状態遷移表
 		 *
 		 *  nd_na_flags_reserved
-		 *  OVERRIDE    SOLICTED lladdr llchange å¦ç (L: lladdr ãç»é²ãã)
+		 *  OVERRIDE    SOLICTED lladdr llchange 処理 (L: lladdr を登録する)
 		 *
 		 *      F           F       N      -    (2c)
@@ -651,6 +619,5 @@
 		 */
 		if ((nah->nd_na_flags_reserved & ND_NA_FLG_OVERRIDE) == 0 && (lladdr != NULL && llchange)) {	/* (1) */
-			/* ç¶æ
-ã REACHABLE ãªã STALE ã«é·ç§»ããã*/
+			/* 状態が REACHABLE なら STALE に遷移する。*/
 			if (ln->state == ND6_LLINFO_REACHABLE) {
 				syscall(get_tim(&now));
@@ -664,9 +631,9 @@
 		         lladdr == NULL) {										/* (2c) */
 
-			/* ãã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹ãéç¥ããã¦ããã°æ´æ°ããã*/
+			/* データリンク層のアドレスが通知されていれば更新する。*/
 			if (lladdr != NULL)
 				ln->ifaddr = *(T_IF_ADDR *)lladdr;
 
-			/* è¿é£è¦è«ã¸ã®å¿ç­ãªã REACHABLE ã«é·ç§»ããã*/
+			/* 近隣要請への応答なら REACHABLE に遷移する。*/
 			if (nah->nd_na_flags_reserved & ND_NA_FLG_SOLICITED) {
 				ln->state = ND6_LLINFO_REACHABLE;
@@ -678,6 +645,6 @@
 				}
 			/*
-			 *  ãã¼ã¿ãªã³ã¯å±¤ã®ã¢ãã¬ã¹ãéç¥ããã
-			 *  ç°ãªãã¢ãã¬ã¹ãªãæ´æ°ããã
+			 *  データリンク層のアドレスが通知され、
+			 *  異なるアドレスなら更新する。
 			 */
 			else if (lladdr != NULL && llchange) {
@@ -688,11 +655,11 @@
 			}
 
-		/* ã«ã¼ã¿éç¥ãã©ã°ã®å¦ç */
+		/* ルータ通知フラグの処理 */
 		if ((ln->flags        & ND6_LLIF_ROUTER ) != 0 &&
 		    (nah->nd_na_flags_reserved & ND_NA_FLG_ROUTER) == 0) {
 			/*
-			 *  éä¿¡ç¸æãã«ã¼ã¿éç¥ãã©ã°ãç¡å¹ã«ããå ´åã
-			 *  ãã£ãã©ã«ãã»ã«ã¼ã¿ãªã¹ãããå¯¾è±¡ã®ã«ã¼ã¿ãåé¤ãã
-			 *  è¿é£æ¢ç´¢ã­ã£ãã·ã¥ãæ´æ°ããã
+			 *  送信相手がルータ通知フラグを無効にした場合。
+			 *  ディフォルト・ルータリストから対象のルータを削除し、
+			 *  近隣探索キャッシュを更新する。
 			 */
 			T_DEF_ROUTER	*dr = NULL;
@@ -712,6 +679,5 @@
 	ln->asked = 0;
 
-	/* ã¢ãã¬ã¹è§£æ±ºå¾
-ã¡ã®ãã¼ã¿ã°ã©ã ãããã°éä¿¡ããã*/
+	/* アドレス解決待ちのデータグラムがあれば送信する。*/
 	nd6_output_hold(ifp, ln);
 
@@ -727,5 +693,5 @@
 
 /*
- *  nd6_na_output -- è¿é£éç¥ãåºåããã
+ *  nd6_na_output -- 近隣通知を出力する。
  */
 
@@ -745,6 +711,6 @@
 
 	/*
-	 *  è¿é£éç¥ãã¤ã­ã¼ãé·ãè¨ç®ããã
-	 *  tlladdr ãçãªããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ãè¿½å ããã
+	 *  近隣通知ペイロード長を計算する。
+	 *  tlladdr が真ならネットワークインタフェースのアドレスを追加する。
 	 */
 	if (tlladdr && IF_SOFTC_TO_IFADDR(ifp->ic))
@@ -754,10 +720,10 @@
 
 	/*
-	 *  ä»ã®ãªã³ã¯ããã®å½é ããããã¼ã¿ã°ã©ã ã
-	 *  æé¤ãããããããããªãããã« IPV6_MAXHLIM (255) ãè¨­å®ããã
+	 *  他のリンクからの偽造されたデータグラムを
+	 *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
 	 */
 	ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_MAXHLIM);
 
-	/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããIPv6 ããããè¨­å®ããã*/
+	/* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
 	if (in6_get_datagram(&output, len, 0, daddr, NULL,
 	                     IPPROTO_ICMPV6, IPV6_MAXHLIM,
@@ -769,8 +735,6 @@
 	if (IN6_IS_ADDR_UNSPECIFIED(daddr)) {
 		/*
-		 *  å®å
-ã¢ãã¬ã¹ãç¡æå®ã®å ´åã¯ã
-		 *  ãªã³ã¯ã­ã¼ã«ã«å
-¨ãã¼ãã»ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ãè¨­å®ããã
+		 *  宛先アドレスが無指定の場合は、
+		 *  リンクローカル全ノード・マルチキャストアドレスを設定する。
 		 */
 		ip6h->dst.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
@@ -784,8 +748,6 @@
 
 	/*
-	 *  å®å
-ã¢ãã¬ã¹ã«ãµããããéä¿¡å
-ã¢ãã¬ã¹ãã
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ãã¦å©ç¨ããã
+	 *  宛先アドレスにふさわしい送信元アドレスを、
+	 *  ネットワークインタフェースから探索して利用する。
 	 */
 	if ((ifa = in6_ifawithifp(ifp, &ip6h->dst)) == NULL) {
@@ -795,5 +757,5 @@
 	memcpy(&ip6h->src, &ifa->addr, sizeof(T_IN6_ADDR));
 
-	/* è¿é£éç¥ããããè¨­å®ããã*/
+	/* 近隣通知ヘッダを設定する。*/
 	nah = GET_NEIGHBOR_ADVERT_HDR(output, IF_IP6_NEIGHBOR_ADVERT_HDR_OFFSET);
 	nah->hdr.type        = ND_NEIGHBOR_ADVERT;
@@ -801,5 +763,5 @@
 	memcpy(&nah->target, taddr, sizeof(T_IN6_ADDR));
 
-	/* tlladdr ãçãªããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ãè¿½å ããã*/
+	/* tlladdr が真ならネットワークインタフェースのアドレスを追加する。*/
 	if (tlladdr && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) {
 
@@ -819,9 +781,9 @@
 	nah->nd_na_flags_reserved = flags;
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	nah->hdr.sum = 0;
 	nah->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)nah - output->buf, len);
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
 	               output->len - GET_IF_IP6_HDR_SIZE(output));
@@ -833,9 +795,8 @@
 
 /*
- *  nd6_dad_start -- éè¤ã¢ãã¬ã¹æ¤åº (DAD) ãéå§ããã
+ *  nd6_dad_start -- 重複アドレス検出 (DAD) を開始する。
  *
- *    ç¬¬3å¼æ°ã®tick ã¯ãã¤ã³ã¿ãã§ã¼ã¹ãèµ·åããã¦ãããéè¤æ¤åºã
- *    éä¿¡ããã¾ã§ã®æå°é
-å»¶å¤ã§ããã
+ *    第3引数のtick は、インタフェースが起動されてから、重複検出を
+ *    送信するまでの最小遅延値である。
  */
 
@@ -843,5 +804,5 @@
 nd6_dad_start (T_IFNET *ifp, T_IN6_IFADDR *ifa, int_t *tick)
 {
-	/* ãã©ã°ããã§ãã¯ããã*/
+	/* フラグをチェックする。*/
 	if (!(ifa->flags & IN6_IFF_TENTATIVE))
 		return;
@@ -860,16 +821,15 @@
 		return;
 
-	/* éè¤ã¢ãã¬ã¹æ¤åºã«ã¦ã³ã¿ããªã»ããããã*/
+	/* 重複アドレス検出カウンタをリセットする。*/
 	ifa->ns_icount = ifa->na_icount = ifa->ns_ocount = 0;
 
 	/*
-	 *  éè¤ã¢ãã¬ã¹æ¤åºè¦è«ãéä¿¡ããããã ããã¤ã³ã¿ãã§ã¼ã¹ã
-	 *  åæåããç´å¾ã«ãæåã«éä¿¡ããå ´åã¯ãã©ã³ãã ãªé
-å»¶ãè¡ãã
+	 *  重複アドレス検出要請を送信する。ただし、インタフェースを
+	 *  初期化した直後に、最初に送信する場合は、ランダムな遅延を行う。
 	 */
 	if (tick == NULL) {
 		nd6_dad_ns_output(ifp, ifa);
 
-		/* ã¿ã¤ã ã¢ã¦ããè¿é£æ¢ç´¢ã®éä¿¡ééã«è¨­å®ããã*/
+		/* タイムアウトを近隣探索の送信間隔に設定する。*/
 		timeout((callout_func)nd6_dad_timer, ifa, ND6_RETRANS_TIME * NET_TIMER_HZ / SYSTIM_HZ);
 		}
@@ -877,5 +837,5 @@
 		int_t ntick;
 
-		if (*tick == 0)	/* æåã®éä¿¡ */
+		if (*tick == 0)	/* 最初の送信 */
 			ntick = net_rand() % (ND6_FIRST_DAD_DELAY_TIME * NET_TIMER_HZ / SYSTIM_HZ);
 		else
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_rtr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_rtr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_rtr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -123,5 +111,5 @@
 
 /*
- *  å¤é¨é¢æ°ã®å®ç¾©
+ *  外部関数の定義
  */
 
@@ -133,21 +121,19 @@
 
 /*
- *  å
-¨åå¤æ°
- */
-
-SYSTIM	nd6_base_reachable_time		= ND6_DEF_REACHABLE_TIME;	/* ã«ã¼ã¿ããéç¥ãããå¤		*/
-SYSTIM	nd6_reachable_time		= ND6_DEF_REACHABLE_TIME;	/* ã«ã¼ã¿ããéç¥ãããå¤ã®è£æ­£å¤	*/
-SYSTIM	nd6_recalc_reachtm_interval	= ND6_RECALC_REACHTM_INTERVAL;	/* å°éå¯è½ç¶æ
-ã®æå¹æéåè¨ç®éé	*/
-SYSTIM	nd6_retrans_time		= ND6_DEF_RETRANS_TIME;		/* è¿é£æ¢ç´¢ã®éä¿¡éé			*/
-uint8_t	ip6_defhlim			= IPV6_DEFHLIM;			/* ããããªãããã®è¦å®å¤		*/
-
-/*
- *  å±æå¤æ°
- */
-
-/*
- *  ãã¬ãã£ãã¯ã¹ã»ãªã¹ã
+ *  全域変数
+ */
+
+SYSTIM	nd6_base_reachable_time		= ND6_DEF_REACHABLE_TIME;	/* ルータから通知された値		*/
+SYSTIM	nd6_reachable_time		= ND6_DEF_REACHABLE_TIME;	/* ルータから通知された値の補正値	*/
+SYSTIM	nd6_recalc_reachtm_interval	= ND6_RECALC_REACHTM_INTERVAL;	/* 到達可能状態の有効時間再計算間隔	*/
+SYSTIM	nd6_retrans_time		= ND6_DEF_RETRANS_TIME;		/* 近隣探索の送信間隔			*/
+uint8_t	ip6_defhlim			= IPV6_DEFHLIM;			/* ホップリミットの規定値		*/
+
+/*
+ *  局所変数
+ */
+
+/*
+ *  プレフィックス・リスト
  */
 
@@ -155,12 +141,12 @@
 
 /*
- *  ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ã
+ *  ディフォルトルータ・リスト
  */
 
 static T_DEF_ROUTER	nd6_def_router[NUM_ND6_DEF_RTR_ENTRY];
-static uint_t		def_router_count = 0;				/* ãªã¹ãã«ããã«ã¼ã¿æ° */
-
-/*
- *  make_mask -- ãããç¨ã®ãã¹ã¯ãçæããã
+static uint_t		def_router_count = 0;				/* リストにあるルータ数 */
+
+/*
+ *  make_mask -- マップ用のマスクを生成する。
  */
 
@@ -171,5 +157,5 @@
 	int_t	ix;
 
-	/* ãã¹ã¯ãçæããã*/
+	/* マスクを生成する。*/
 	mask = 1;
 	for (ix = index; ix -- > 0; )
@@ -181,5 +167,5 @@
 /*
  *  find_pfxlist_reachable_router --
- *      æå®ãããã¬ãã£ãã¯ã¹ãéç¥ããã«ã¼ã¿ããªã³ã¯ä¸ã«å­å¨ããããã§ãã¯ããã
+ *      指定したプレフィックスを通知したルータがリンク上に存在するかチェックする。
  */
 
@@ -205,9 +191,8 @@
 
 /*
- *  pfxlist_onlink_check -- ãã¬ãã£ãã¯ã¹ã»ãªã¹ãã®ãªã³ãªã³ã¯ç¶æ
-ããã§ãã¯ããã
+ *  pfxlist_onlink_check -- プレフィックス・リストのオンリンク状態をチェックする。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -230,10 +215,7 @@
 	if (ix >= 0) {
 		/*
-		 *  ãªã³ãªã³ã¯ç¶æ
-ã®ãã¬ãã£ãã¯ã¹ãæä½ä¸ã¤å­å¨ããã¨ãã®å¦çã
-		 *  åãã¬ãã£ãã¯ã¹ã®ãªã³ãªã³ã¯ç¶æ
-ããããããéç¥ãã¦ããã«ã¼ã¿ã®
-		 *  ç¶æ
-ã«å¾ã£ã¦è¨­å®ããã
+		 *  オンリンク状態のプレフィックスが最低一つ存在するときの処理。
+		 *  各プレフィックスのオンリンク状態を、それらを通知してきたルータの
+		 *  状態に従って設定する。
 		 */
 
@@ -256,8 +238,7 @@
 	else {
 		/*
-		 *  ã©ã®ãã¬ãã£ãã¯ã¹ããªã³ãªã³ã¯ã§ã¯ãªãã
-		 *  ãã£ãã©ã«ãã«ã¼ã¿ãå­å¨ããªãã¨ãã®å¦çã
-		 *  ãã¹ã¦ã®ãã¬ãã£ãã¯ã¹ãä½¿ç¨å¯è½ç¶æ
-ã«è¨­å®ããã
+		 *  どのプレフィックスもオンリンクではなく、
+		 *  ディフォルトルータも存在しないときの処理。
+		 *  すべてのプレフィックスを使用可能状態に設定する。
 		 */
 
@@ -275,9 +256,6 @@
 
 	/*
-	 *  åãã¬ãã£ãã¯ã¹æ¯ã«ãéç¥ãã¦ããã«ã¼ã¿ã®ç¶æ
-ã¨
-	 *  ãªã³ãªã³ã¯ã®ç¶æ
-ãä¸è´ããªããã°ããªã³ãªã³ã¯ç¶æ
-ãæ´æ°ããã
+	 *  各プレフィックス毎に、通知してきたルータの状態と
+	 *  オンリンクの状態が一致しなければ、オンリンク状態を更新する。
 	 */
 	for (ix = NUM_ND6_PREFIX_ENTRY; ix -- > 0; ) {
@@ -302,6 +280,6 @@
 
 	/*
-	 *  ãªã³ã¯ä¸ã«ãã¬ãã£ãã¯ã¹ãéç¥ãã¦ããã«ã¼ã¿ã
-	 *  å°ãªãã¨ã 1 å°å­å¨ãããç¢ºèªããã
+	 *  リンク上にプレフィックスを通知しているルータが
+	 *  少なくとも 1 台存在するか確認する。
 	 */
 	for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) {
@@ -317,6 +295,6 @@
 	if (ix >= 0) {
 		/*
-		 *  ãªã³ã¯ä¸ã«ãã¬ãã£ãã¯ã¹ãéç¥ãã¦ããã«ã¼ã¿ã
-		 *  å°ãªãã¨ã 1 å°å­å¨ããæã®å¦çã
+		 *  リンク上にプレフィックスを通知しているルータが
+		 *  少なくとも 1 台存在する時の処理。
 		 */
 		for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) {
@@ -334,7 +312,6 @@
 	else {
 		/*
-		 *  ãªã³ã¯ä¸ã«ãã¬ãã£ãã¯ã¹ãéç¥ãã¦ããã«ã¼ã¿ã
-		 *  1 å°å­å¨ããªãæã¯å
-¨ã¦ã®ã¢ãã¬ã¹ãå©ç¨ã§ããããã«ããã
+		 *  リンク上にプレフィックスを通知しているルータが
+		 *  1 台存在しない時は全てのアドレスを利用できるようにする。
 		 */
 		for (ix = NUM_IN6_IFADDR_ENTRY; ix -- > 0; ) {
@@ -347,8 +324,8 @@
 
 /*
- *  pfxrtr_add -- ãã¬ãã£ãã¯ã¹ã¨ã³ããªã¨ãã£ãã©ã«ãã«ã¼ã¿ã»ã¨ã³ããªããªã³ã¯ããã
+ *  pfxrtr_add -- プレフィックスエントリとディフォルトルータ・エントリをリンクする。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -356,5 +333,5 @@
 pfxrtr_add (int_t prefix_index, int_t rtr_index)
 {
-	/*  ãã¬ãã£ãã¯ã¹ã¨ã³ããªã¨ãã£ãã©ã«ãã«ã¼ã¿ã»ã¨ã³ããªããªã³ã¯ããã*/
+	/*  プレフィックスエントリとディフォルトルータ・エントリをリンクする。*/
 	nd6_prefix[prefix_index].routermap |= make_mask(rtr_index);
 	nd6_def_router[rtr_index].plistmap |= make_mask(prefix_index);
@@ -364,5 +341,5 @@
 
 /*
- *  nd6_pfxrtr_lookup -- ãã¬ãã£ãã¯ã¹ã¨ã³ããªããã«ã¼ã¿ãæ¢ç´¢ããã
+ *  nd6_pfxrtr_lookup -- プレフィックスエントリからルータを探索する。
  */
 
@@ -374,9 +351,8 @@
 
 /*
- *  defrouter_select -- åªå
-ãã£ãã©ã«ãã»ã«ã¼ã¿ãé¸æããªããã
+ *  defrouter_select -- 優先ディフォルト・ルータを選択しなおす。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -392,6 +368,5 @@
 		if ((ln = nd6_lookup(&dr->addr, false)) != NULL && ND6_IS_LLINFO_PROBREACH(ln)) {
 		
-			/* é¸æããã«ã¼ã¿ãå
-é ­ã«ç§»ãã*/
+			/* 選択したルータを先頭に移す。*/
 			router = *dr;
 			for (tix = ix; tix > 0; tix --)
@@ -404,8 +379,8 @@
 
 /*
- *  defrtrlist_update -- ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ããæ´æ°ããã
+ *  defrtrlist_update -- ディフォルトルータ・リストを更新する。
  *
- *  	æ»ãå¤ã¯ãã«ã¼ã¿ã®ã¤ã³ããã¯ã¹ã
- *      ãã ããå¤ã -1 ãªãããã¬ãã£ãã¯ã¹ã»ãªã¹ãã¯æ´æ°ããªãã
+ *  	戻り値は、ルータのインデックス。
+ *      ただし、値が -1 なら、プレフィックス・リストは更新しない。
  */
 
@@ -420,7 +395,7 @@
 	syscall(wai_sem(SEM_ND6_DEFRTRLIST));
 
-	/* ç»é²æ¸ãèª¿ã¹ãã*/
+	/* 登録済か調べる。*/
 	if ((fdr = nd6_defrtrlist_lookup(src)) != NULL) {
-		/* ç»é²æ¸ã¿ã®å ´åã®å¦ç */
+		/* 登録済みの場合の処理 */
 		if (lifetime == 0) {
 			nd6_defrtrlist_del(fdr);
@@ -429,5 +404,5 @@
 			}
 		else {
-			fdr->lifetime = lifetime * SYSTIM_HZ;		/* lifetime ã®åä½ã¯ç§ */
+			fdr->lifetime = lifetime * SYSTIM_HZ;		/* lifetime の単位は秒 */
 			fdr->flags    = flags;
 			fdr->expire   = now + fdr->lifetime;
@@ -443,11 +418,11 @@
 	if (fdr == NULL && def_router_count < NUM_ND6_DEF_RTR_ENTRY) {
 		/*
-		 *  def_router_count < NUM_ND6_DEF_RTR_ENTRY ã§ããã°ã
-		 *  nd6_def_router[def_router_count]; ãç©ºãã¨ã³ããª
+		 *  def_router_count < NUM_ND6_DEF_RTR_ENTRY であれば、
+		 *  nd6_def_router[def_router_count]; が空きエントリ
 		 */
 		fdr = &nd6_def_router[def_router_count];
 		}
 
-	/* ç©ºãã¨ã³ããªããªããã°ãæå¹æéãç­ãã¨ã³ããªãåé¤ããã*/
+	/* 空きエントリがなければ、有効時間が短いエントリを削除する。*/
 	if (fdr == NULL) {
 		T_DEF_ROUTER	*sdr = NULL;
@@ -458,5 +433,5 @@
 			diff = (int32_t)(dr->expire - now);
 			if (diff <= 0) {	/* dr->expire <= now */
-				/* æ¢ã«ãæå¹æéãéãã¦ããã*/
+				/* 既に、有効時間が過ぎている。*/
 				sdr = dr;
 				break;
@@ -471,8 +446,8 @@
 		}
 
-	/* åã¡ã³ãã«å¤ãè¨­å®ããã*/
+	/* 各メンバに値を設定する。*/
 	fdr->plistmap = 0;
 	memcpy(&fdr->addr, src, sizeof(T_IN6_ADDR));
-	fdr->lifetime = lifetime * SYSTIM_HZ;		/* lifetime ã®åä½ã¯ç§ */
+	fdr->lifetime = lifetime * SYSTIM_HZ;		/* lifetime の単位は秒 */
 	fdr->flags    = flags;
 	fdr->expire   = now + fdr->lifetime;
@@ -481,6 +456,6 @@
 
 	/*
-	 *  ãã£ãã©ã«ãã«ã¼ã¿ã¨ãã¦ç»é²ãããã
-	 *  æ¢ã«ãã£ãã©ã«ãã«ã¼ã¿ãããã°é¸æããªãããªãã
+	 *  ディフォルトルータとして登録するが、
+	 *  既にディフォルトルータがあれば選択しなおさない。
 	 */
 	if (fdr - nd6_def_router != 0)
@@ -492,5 +467,5 @@
 
 /*
- *  in6_ifadd -- ã¤ã³ã¿ãã§ã¼ã¹ã«ã¢ãã¬ã¹ãè¿½å ããã
+ *  in6_ifadd -- インタフェースにアドレスを追加する。
  */
 
@@ -506,5 +481,5 @@
 
 	/*
-	 *  ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ãæªç»é²ã§ããã°ä½ãããªãã
+	 *  リンクローカルアドレスが未登録であれば何もしない。
 	 */
 	if ((lla->flags & IN6_IFF_DEFINED) == 0)
@@ -512,20 +487,20 @@
 
 	/*
-	 *  ã«ã¼ã¿ããéç¥ããããã¬ãã£ãã¯ã¹é·ãã
-	 *  ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã®ãã¬ãã£ãã¯ã¹é·ã¨
-	 *  ç°ãªã£ã¦ããã°ã¨ã©ã¼
+	 *  ルータから通知されたプレフィックス長が、
+	 *  リンクローカルアドレスのプレフィックス長と
+	 *  異なっていればエラー
 	 */
 	if (lla->prefix_len != pr->prefix_len)
 		return E_PAR;
 
-	/* ãã¬ãã£ãã¯ã¹ãã¹ã¯ãçæããã*/
+	/* プレフィックスマスクを生成する。*/
 	in6_plen2pmask(&mask, pr->prefix_len);
 
-	/* ã¢ãã¬ã¹ãçæããã*/
+	/* アドレスを生成する。*/
 	for (ix = 0; ix < 4; ix ++)
 		addr.s6_addr32[ix] = (pr->prefix.s6_addr32[ix] &  mask.s6_addr32[ix])
 		                   | ( lla->addr.s6_addr32[ix] & ~mask.s6_addr32[ix]);
 
-	/* ãã©ã°ãåæåããã*/
+	/* フラグを初期化する。*/
 	ia->flags = 0;
 
@@ -536,5 +511,5 @@
 
 /*
- *  nd6_prefix_lookup -- ãã¬ãã£ãã¯ã¹ãæ¢ç´¢ããã
+ *  nd6_prefix_lookup -- プレフィックスを探索する。
  */
 
@@ -556,8 +531,8 @@
 
 /*
- *  prelist_remove -- ãã¬ãã£ãã¯ã¹ãªã¹ããããã¬ãã£ãã¯ã¹ãåé¤ããã
+ *  prelist_remove -- プレフィックスリストからプレフィックスを削除する。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -569,5 +544,5 @@
 	int_t	rix;
 
-	/* æå¹æéåãã«ããã*/
+	/* 有効時間切れにする。*/
 	pr->vltime = 0;
 	pr->pltime = 0;
@@ -579,5 +554,5 @@
 		}
 
-	/*  ãã¬ãã£ãã¯ã¹ã¨ã³ããªã¨ãã£ãã©ã«ãã«ã¼ã¿ã»ã¨ã³ããªã®ãªã³ã¯ãè§£é¤ããã*/
+	/*  プレフィックスエントリとディフォルトルータ・エントリのリンクを解除する。*/
 	pr->routermap = 0;
 	mask = make_mask(pr - nd6_prefix);
@@ -585,5 +560,5 @@
 		nd6_def_router[rix].plistmap &= ~mask;
 
-	/* ãã¬ãã£ãã¯ã¹ãç¡å¹ã«ããã*/
+	/* プレフィックスを無効にする。*/
 	pr->flags &= ~ND6_PREFIX_STATE_BUSY;
 
@@ -592,8 +567,8 @@
 
 /*
- *  nd6_prefix_onlink -- ãã¬ãã£ãã¯ã¹ããªã³ãªã³ã¯ã«è¨­å®ããã¢ãã¬ã¹ãä½¿ç¨å¯è½ã«ããã
+ *  nd6_prefix_onlink -- プレフィックスをオンリンクに設定し、アドレスを使用可能にする。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -605,10 +580,9 @@
 	int_t		ix;
 
-	/* æ¢ã«ãªã³ãªã³ã¯ç¶æ
-ã«ãªã£ã¦ããå ´åã¯ã¨ã©ã¼ã*/
+	/* 既にオンリンク状態になっている場合はエラー。*/
 	if ((pr->flags & ND6_PREFIX_STATE_ONLINK) != 0)
 		return E_OBJ;
 
-	/* ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ãæªç»é²ã§ããã°ä½ãããªãã*/
+	/* リンクローカルアドレスが未登録であれば何もしない。*/
 	lla = &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL];
 	if ((lla->flags & IN6_IFF_DEFINED) == 0)
@@ -616,7 +590,6 @@
 
 	/*
-	 *  æå®ããããã¬ãã£ãã¯ã¹ãå²ãå½ã¦ããã¦ããã¤ã³ã¿ãã§ã¼ã¹ã®
-	 *  ã¢ãã¬ã¹æ
-å ±ãæ¢ãã
+	 *  指定されたプレフィックスが割り当てられているインタフェースの
+	 *  アドレス情報を探す。
 	 */
 	for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) {
@@ -628,9 +601,8 @@
 	if (ix >= 0) {
 
-		/* ã¢ãã¬ã¹æ
-å ±ãä½¿ç¨å¯è½ã«ããã*/
+		/* アドレス情報を使用可能にする。*/
 		ia->flags &= ~IN6_IFF_DETACHED;
 
-		/* ãã¬ãã£ãã¯ã¹ããªã³ãªã³ã¯ã«è¨­å®ããã*/
+		/* プレフィックスをオンリンクに設定する。*/
 		pr->flags |= ND6_PREFIX_STATE_ONLINK;
 		}
@@ -640,8 +612,8 @@
 
 /*
- *  nd6_prefix_offlink -- ãã¬ãã£ãã¯ã¹ããªããªã³ã¯ã«è¨­å®ããã¢ãã¬ã¹ãä½¿ç¨ä¸å¯ã«ããã
+ *  nd6_prefix_offlink -- プレフィックスをオフリンクに設定し、アドレスを使用不可にする。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -653,13 +625,11 @@
 	int_t		ix;
 
-	/* æ¢ã«ãªããªã³ã¯ç¶æ
-ã«ãªã£ã¦ããå ´åã¯ã¨ã©ã¼ã*/
+	/* 既にオフリンク状態になっている場合はエラー。*/
 	if ((pr->flags & ND6_PREFIX_STATE_ONLINK) == 0)
 		return E_OBJ;
 
 	/*
-	 *  æå®ããããã¬ãã£ãã¯ã¹ãå²ãå½ã¦ããã¦ããã¤ã³ã¿ãã§ã¼ã¹ã®
-	 *  ã¢ãã¬ã¹æ
-å ±ãæ¢ãã
+	 *  指定されたプレフィックスが割り当てられているインタフェースの
+	 *  アドレス情報を探す。
 	 */
 	for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) {
@@ -671,9 +641,8 @@
 	if (ix >= 0) {
 
-		/* ã¢ãã¬ã¹æ
-å ±ãä½¿ç¨ä¸å¯ã«ããã*/
+		/* アドレス情報を使用不可にする。*/
 		ia->flags |= IN6_IFF_DETACHED;
 
-		/* ãã¬ãã£ãã¯ã¹ããªããªã³ã¯ã«è¨­å®ããã*/
+		/* プレフィックスをオフリンクに設定する。*/
 		pr->flags &= ~ND6_PREFIX_STATE_ONLINK;
 		}
@@ -683,5 +652,5 @@
 
 /*
- *  in6_init_prefix_ltimes -- ãã¬ãã£ãã¯ã¹ã®æå¹æéãè¨­å®ããã
+ *  in6_init_prefix_ltimes -- プレフィックスの有効時間を設定する。
  */
 
@@ -691,5 +660,5 @@
 	SYSTIM		now;
 
-	/* æ¨å¥¨æå¹æéãæå¹æéããé·ãã¨ãã¯ã¨ã©ã¼ */
+	/* 推奨有効時間が有効時間より長いときはエラー */
 	if (pr->pltime > pr->vltime)
 		return E_PAR;
@@ -712,8 +681,8 @@
 
 /*
- *  nd6_prelist_add -- ãã¬ãã£ãã¯ã¹ãªã¹ãã«ãã¬ãã£ãã¯ã¹ãè¿½å ããã
+ *  nd6_prelist_add -- プレフィックスリストにプレフィックスを追加する。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -724,5 +693,5 @@
 	int_t		ix;
 
-	/* ãã¬ãã£ãã¯ã¹ãªã¹ãããç©ºãã®ãã¬ãã£ãã¯ã¹ã¨ã³ããªãæ¢ç´¢ããã*/
+	/* プレフィックスリストから空きのプレフィックスエントリを探索する。*/
 	for (ix = NUM_ND6_PREFIX_ENTRY; ix --; ) {
 		pr = &nd6_prefix[ix];
@@ -731,5 +700,5 @@
 		}
 
-	/* ãã¬ãã£ãã¯ã¹ãªã¹ãã«ç©ºãããªããã°ã¨ã©ã¼ */
+	/* プレフィックスリストに空きがなければエラー */
 	if (ix < 0)
 		return NULL;
@@ -737,9 +706,9 @@
 	pr->flags |= ND6_PREFIX_STATE_BUSY;
 
-	/* ãã¬ãã£ãã¯ã¹ãè¿½å ããã*/
+	/* プレフィックスを追加する。*/
 	pr->prefix     = pi->prefix;
 	pr->prefix_len = pi->prefix_len;
 
-	/* ãã©ã°ãè¨­å®ããã*/
+	/* フラグを設定する。*/
 	if ((pi->flags & ND_OPT_PI_FLAG_ONLINK) != 0)
 		pr->flags |= ND6_PREFIX_FLAG_ONLINK;
@@ -747,5 +716,5 @@
 		pr->flags |= ND6_PREFIX_FLAG_AUTO;
 
-	/* ãã¬ãã£ãã¯ã¹ã®æå¹æéãè¨­å®ããã*/
+	/* プレフィックスの有効時間を設定する。*/
 	pr->vltime = ntohl(pi->valid);
 	pr->pltime = ntohl(pi->preferred);
@@ -757,8 +726,8 @@
 		}
 
-	/* ã«ã¼ã¿ããããåæåããã*/
+	/* ルータマップを初期化する。*/
 	pr->routermap = 0;
 
-	/* ã«ã¼ã¿ãè¿½å ããã*/
+	/* ルータを追加する。*/
 	pfxrtr_add(pr - nd6_prefix, rtr_index);
 
@@ -767,5 +736,5 @@
 
 /*
- *  prelist_update -- ãã¬ãã£ãã¯ã¹ã»ãªã¹ããæ´æ°ããã
+ *  prelist_update -- プレフィックス・リストを更新する。
  */
 
@@ -781,11 +750,11 @@
 	if ((pr = nd6_prefix_lookup(&pi->prefix, pi->prefix_len)) != NULL) {
 		/*
-		 *  ç»é²æ¸ã¿ã®å ´åã¯ããã¬ãã£ãã¯ã¹ãªã¹ããæ´æ°ããã
+		 *  登録済みの場合は、プレフィックスリストを更新する。
 		 */
 
 		/*
-		 *  ãã©ã°ã®æ´æ°ã®æ³¨æ:
-		 *    on-link ãããã¨ autonomous ãããã¯
-		 *    1 ãã 0 ã«å¤æ´ãã¦ã¯ãªããªãã
+		 *  フラグの更新の注意:
+		 *    on-link ビットと autonomous ビットは
+		 *    1 から 0 に変更してはならない。
 		 */
 
@@ -797,6 +766,6 @@
 		if ((pi->flags & ND_OPT_PI_FLAG_ONLINK) != 0) {
 			/*
-			 *  éç¥ããããã¬ãã£ãã¯ã¹ããªã³ãªã³ã¯ã®æã¯ã
-			 *  æå¹æéãæ´æ°ããã
+			 *  通知されたプレフィックスがオンリンクの時は、
+			 *  有効時間を更新する。
 			 */
 			pr->vltime = ntohl(pi->valid);
@@ -808,5 +777,5 @@
 		    (pr->flags & ND6_PREFIX_STATE_ONLINK) == 0) {
 			/*
-			 *  ãªããªã³ã¯ã®ãã¬ãã£ãã¯ã¹ããªã³ãªã³ã¯ã«ãªã£ãæã®å¦çãå®è¡ããã
+			 *  オフリンクのプレフィックスがオンリンクになった時の処理を実行する。
 			 */
 			if (nd6_prefix_onlink(pr) != E_OK) {
@@ -820,7 +789,7 @@
 			pfxrtr_add(pr - nd6_prefix, router_index);
 		}
-	else {	/* æªç»é²ã®å ´å */
-
-		/* æå¹æé 0 ã®ãã¬ãã£ãã¯ã¹ã¯è¿½å ããªãã*/
+	else {	/* 未登録の場合 */
+
+		/* 有効時間 0 のプレフィックスは追加しない。*/
 		if (pi->valid == 0) {
 			syscall(sig_sem(SEM_ND6_DEFRTRLIST));
@@ -828,5 +797,5 @@
 			}
 
-		/* ãªããªã³ã¯ã§ã¢ãã¬ã¹èªåè¨­å®ã«ä½¿ç¨ããªããã°è¿½å ããªãã*/
+		/* オフリンクでアドレス自動設定に使用しなければ追加しない。*/
 		if ((pi->flags & (ND_OPT_PI_FLAG_ONLINK | ND_OPT_PI_FLAG_AUTO)) !=
 		                 (ND_OPT_PI_FLAG_ONLINK | ND_OPT_PI_FLAG_AUTO)) {
@@ -835,5 +804,5 @@
 			}
 
-		/* ãã¬ãã£ãã¯ã¹ãè¿½å ããã*/
+		/* プレフィックスを追加する。*/
 		if ((pr = nd6_prelist_add(pi, router_index)) == NULL) {
 			syslog(LOG_ERROR, "[ND6 RTR] prefix add failed.");
@@ -842,5 +811,5 @@
 			}
 
-#if 1		/* ãã¬ãã£ãã¯ã¹ãæªç»é²ã®å ´åã ãè¡¨ç¤ºããã*/
+#if 1		/* プレフィックスが未登録の場合だけ表示する。*/
 		syslog(LOG_NOTICE, "[ND6 RTR] add prefix: flags[MOH]: %02x, addr: %s\n"
 		                   "                                      from: %s.",
@@ -851,6 +820,6 @@
 		if ((pr->flags & ND6_PREFIX_FLAG_ONLINK) == 0) {
 			/*
-			 *  ãªããªã³ã¯ã»ãã¬ãã£ãã¯ã¹ã®å ´åã¯ãæå¹æéã 0 ã«è¨­å®ããã
-			 *  ãã¨ã§æå¹æéåãã¨ãªãããªã¹ãããåé¤ãããã
+			 *  オフリンク・プレフィックスの場合は、有効時間を 0 に設定する。
+			 *  あとで有効期限切れとなり、リストから削除される。
 			 */
 			pr->vltime = 0;
@@ -861,5 +830,5 @@
 
 	/*
-	 *  ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨­å®ãè¡ãã
+	 *  ステートレス・アドレス自動設定を行う。
 	 */
 	if ((pr->flags & ND6_PREFIX_FLAG_AUTO) == 0) {
@@ -869,7 +838,6 @@
 
 	/*
-	 *  éç¥ããããã¬ãã£ãã¯ã¹ãå²ãå½ã¦ããã¦ããã¤ã³ã¿ãã§ã¼ã¹ã®
-	 *  ã¢ãã¬ã¹æ
-å ±ãæ¢ãã
+	 *  通知されたプレフィックスが割り当てられているインタフェースの
+	 *  アドレス情報を探す。
 	 */
 	for (ix = NUM_IN6_IFADDR_ENTRY; ix --; ) {
@@ -881,9 +849,9 @@
 		}
 
-	if (ix >= 0) {	/* ç»é²æ¸ã¿ã®ã¨ã */
+	if (ix >= 0) {	/* 登録済みのとき */
 		if ((ia->flags & IN6_IFF_AUTOCONF) == 0) {
 			/*
-			 *  ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨­å®ã«ãã
-			 *  è¨­å®ããã¦ããªããã°æ´æ°ããªãã
+			 *  ステートレス・アドレス自動設定により
+			 *  設定されていなければ更新しない。
 			 */
 			;
@@ -891,5 +859,5 @@
 		else if (ia->flags & IN6_IFF_TENTATIVE) {
 			/*
-			 *  éè¤æ¤åºä¸­ãªãæ´æ°ããªãã
+			 *  重複検出中なら更新しない。
 			 */
 			;
@@ -902,5 +870,5 @@
 			int_t		ix;
 
-			/* æå¹æéãè¨­å®ããã*/
+			/* 有効時間を設定する。*/
 			syscall(get_tim(&now));
 
@@ -914,8 +882,8 @@
 			if (pr->vltime > (2 * 60 * 60) || pr->vltime > vltime) {
 				/*
-				 *  lifetime.expireãpi->valid (æå¹æé) ã¨
-				 *  pi->preferred (æ¨å¥¨æå¹æé) ã®åä½ã¯ [s]ã
-				 *  éç¥ãããæå¹æéã 2 æéä»¥ä¸ããç¾å¨ã®æ®ãæéãã
-				 *  é·ããã°ãæ°ããæå¹æéã«ã¯ãéç¥ãããæå¹æéãè¨­å®ããã
+				 *  lifetime.expire、pi->valid (有効時間) と
+				 *  pi->preferred (推奨有効時間) の単位は [s]。
+				 *  通知された有効時間が 2 時間以上か、現在の残り時間より
+				 *  長ければ、新しい有効時間には、通知された有効時間を設定する。
 				 */
 				vltime = pr->vltime;
@@ -925,6 +893,5 @@
 			else {
 				/*
-				 *  IPsec ã¯æªå®è£
-ã®ããã2 æéãè¨­å®ããã
+				 *  IPsec は未実装のため、2 時間を設定する。
 				 */
 				vltime = 2 * 60 * 60;
@@ -933,8 +900,8 @@
 			lla = &ifp->in6_ifaddrs[IPV6_IFADDR_IX_LINKLOCAL];
 
-			/* ãã¬ãã£ãã¯ã¹ãã¹ã¯ãçæããã*/
+			/* プレフィックスマスクを生成する。*/
 			in6_plen2pmask(&mask, pr->prefix_len);
 
-			/* ã¢ãã¬ã¹ãçæããã*/
+			/* アドレスを生成する。*/
 			for (ix = 0; ix < 4; ix ++)
 				addr.s6_addr32[ix] = (pr->prefix.s6_addr32[ix] &  mask.s6_addr32[ix])
@@ -947,11 +914,10 @@
 		}
 
-	else { /* æªç»é²ã®ã¨ã */
+	else { /* 未登録のとき */
 
 		/*
-		 *  ãã¬ãã£ãã¯ã¹é·ããã§ãã¯ããã
-		 *  ããããã¬ãã£ãã¯ã¹é·ã¨ã¤ã³ã¿ãã§ã¼ã¹ ID ã®åè¨ã
-		 *  128 ãããã«ä¸è´ããªãæã¯ããã¬ãã£ãã¯ã¹æ
-å ±ãç¡è¦ããã
+		 *  プレフィックス長をチェックする。
+		 *  もし、プレフィックス長とインタフェース ID の合計が
+		 *  128 ビットに一致しない時は、プレフィックス情報を無視する。
 		 */
 		if ((ifidlen = in6_if2idlen(ifp)) < 0)
@@ -978,5 +944,5 @@
 
 /*
- *  nd6_prelist_timer -- ãã¬ãã£ãã¯ã¹ã»ãªã¹ãã®ç®¡çã¿ã¤ãã¼
+ *  nd6_prelist_timer -- プレフィックス・リストの管理タイマー
  */
 
@@ -989,5 +955,5 @@
 
 	syscall(get_tim(&now));
-	now /= SYSTIM_HZ;		/* æå¹æéã®åä½ã¯ [s] */
+	now /= SYSTIM_HZ;		/* 有効時間の単位は [s] */
 
 	syscall(wai_sem(SEM_ND6_DEFRTRLIST));
@@ -1002,5 +968,5 @@
 
 /*
- *  nd6_rs_output -- ã«ã¼ã¿è¦è«ãåºåããã
+ *  nd6_rs_output -- ルータ要請を出力する。
  */
 
@@ -1017,7 +983,6 @@
 
 	/*
-	 *  éä¿¡å
-ã¢ãã¬ã¹ã«ã¯ããªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ãè¨­å®ãããã
-	 *  ã¾ã è¨­å®ããããªããã°ãç¡æå®ãè¨­å®ããã
+	 *  送信元アドレスには、リンクローカルアドレスを設定するが、
+	 *  まだ設定されいなければ、無指定を設定する。
 	 */
 	if ((ifa = in6ifa_ifpwithix(IF_GET_IFNET(), IPV6_IFADDR_IX_LINKLOCAL)) != NULL && !IFA6_IS_NOTREADY(ifa))
@@ -1028,5 +993,5 @@
 	len = (ROUTER_SOLICIT_HDR_SIZE + 7) >> 3 << 3;
 
-	/* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããIPv6 ããããè¨­å®ããã*/
+	/* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
 	if (in6_get_datagram(&output, len, 0, &in6_addr_linklocal_allrouters,
 	                     saddr, IPPROTO_ICMPV6,
@@ -1034,5 +999,5 @@
 		return;
 
-	/* ã«ã¼ã¿è¦è«ããããè¨­å®ããã*/
+	/* ルータ要請ヘッダを設定する。*/
 	rsh = GET_ROUTER_SOLICIT_HDR(output, IF_IP6_ROUTER_SOLICIT_HDR_OFFSET);
 	rsh->hdr.type       = ND_ROUTER_SOLICIT;
@@ -1040,9 +1005,9 @@
 	rsh->nd_rs_reserved = 0;
 
-	/* ãã§ãã¯ãµã ãè¨ç®ããã*/
+	/* チェックサムを計算する。*/
 	rsh->hdr.sum = 0;
 	rsh->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)rsh - output->buf, len);
 
-	/* éä¿¡ããã*/
+	/* 送信する。*/
 	NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
 	               output->len - GET_IF_IP6_HDR_SIZE(output));
@@ -1054,5 +1019,5 @@
 
 /*
- *  nd6_defrtrlist_lookup -- ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ããæ¢ç´¢ããã
+ *  nd6_defrtrlist_lookup -- ディフォルトルータ・リストを探索する。
  */
 
@@ -1073,5 +1038,5 @@
 
 /*
- *  nd6_router_lookup -- ã«ã¼ã¿ã®ã¢ãã¬ã¹ãè¿ãã
+ *  nd6_router_lookup -- ルータのアドレスを返す。
  *
  */
@@ -1087,8 +1052,8 @@
 
 /*
- *  nd6_defrtrlist_del -- ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãããã«ã¼ã¿ãåé¤ããã
+ *  nd6_defrtrlist_del -- ディフォルトルータ・リストからルータを削除する。
  *
- *    æ³¨æ: ãã®é¢æ°ãå¼ã³åºãã¨ãã¯ãSEM_ND6_DEFRTRLIST ã§ã
- *          ã­ãã¯ãã¦ããå¼ã³åºããã¨ã
+ *    注意: この関数を呼び出すときは、SEM_ND6_DEFRTRLIST で、
+ *          ロックしてから呼び出すこと。
  */
 
@@ -1104,23 +1069,23 @@
 	if ((ia = in6ifa_ifpwithrtrix(ifp, rtrix)) != NULL) {
 		/*
-		 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ãã¬ãã£ãã¯ã¹ãéç¥ãã
-		 *  ã«ã¼ã¿ãå°éä¸è½ã«ããã
+		 *  ネットワークインタフェースのプレフィックスを通知した
+		 *  ルータを到達不能にする。
 		 */
 		ia->router_index = IN6_RTR_IX_UNREACH;
 		}
 
-	/* ãã¬ãã£ãã¯ã¹ãªã¹ãããã«ã¼ã¿ãåé¤ããã*/
+	/* プレフィックスリストからルータを削除する。*/
 	mask = make_mask(rtrix);
 	for (pix = NUM_ND6_PREFIX_ENTRY; pix --; )
 		nd6_prefix[pix].routermap &= ~mask;
 
-	/* åé¤ããã«ã¼ã¿ä»¥éãåã«è©°ããã*/
+	/* 削除したルータ以降を前に詰める。*/
 	for (rix = rtrix + 1; rix < def_router_count; rix ++)
 		nd6_def_router[rix - 1] = nd6_def_router[rix];
 
-	/* ãã¬ãã£ãã¯ã¹ãªã¹ãã®ã«ã¼ã¿ãæ´æ°ããã*/
+	/* プレフィックスリストのルータも更新する。*/
 	if (dr != nd6_def_router) {
 
-		/* ãã¹ã¯ãçæããã*/
+		/* マスクを生成する。*/
 		mask = 1;
 		for (ix = rtrix - 1; ix -- > 0; )
@@ -1134,13 +1099,10 @@
 	def_router_count --;
 
-	/* ãã¬ãã£ãã¯ã¹ã®ãªã³ãªã³ã¯ç¶æ
-ãç¢ºèªããã*/
+	/* プレフィックスのオンリンク状態を確認する。*/
 	pfxlist_onlink_check();
 
 	/*
-	 *  åé¤ããã«ã¼ã¿ãåªå
-ãã£ãã©ã«ãã«ã¼ã¿ã®å ´åã¯ã
-	 *  åªå
-ãã£ãã©ã«ãã«ã¼ã¿ãé¸æããªããã
+	 *  削除するルータが優先ディフォルトルータの場合は、
+	 *  優先ディフォルトルータを選択しなおす。
 	 */
 	if (rtrix == 0)
@@ -1149,5 +1111,5 @@
 
 /*
- *  nd6_defrtrlist_timer -- ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãã®ç®¡çã¿ã¤ãã¼
+ *  nd6_defrtrlist_timer -- ディフォルトルータ・リストの管理タイマー
  */
 
@@ -1173,5 +1135,5 @@
 
 /*
- *  nd6_get_drl -- ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ããç²å¾ããã
+ *  nd6_get_drl -- ディフォルトルータ・リストを獲得する。
  */
 
@@ -1184,5 +1146,5 @@
 
 /*
- *  nd6_get_prl -- ãã¬ãã£ãã¯ã¹ã»ãªã¹ããç²å¾ããã
+ *  nd6_get_prl -- プレフィックス・リストを獲得する。
  */
 
@@ -1196,6 +1158,5 @@
 
 /*
- *  nd6_ra_input -- ã«ã¼ã¿éç¥ã®å
-¥åå¦çã
+ *  nd6_ra_input -- ルータ通知の入力処理。
  */
 
@@ -1221,8 +1182,8 @@
 
 	/*
-	 *  ãããã®ãã§ãã¯ãä»¥ä¸ã®å ´åã¯ç ´æ£ããã
-	 *    ã»ããããªãããã IPV6_MAXHLIM (255) ä»¥å¤
-	 *    ã»ãããé·ãç­ã
-	 *    ã»å§ç¹ã¢ãã¬ã¹ãããªã³ã¯ã­ã¼ã«ã«ã§ã¯ãªã (RFC2461)
+	 *  ヘッダのチェック、以下の場合は破棄する。
+	 *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
+	 *    ・ヘッダ長が短い
+	 *    ・始点アドレスが、リンクローカルではない (RFC2461)
 	 */
 	if (ip6h->hlim != IPV6_MAXHLIM                ||
@@ -1233,15 +1194,14 @@
 	rah  = GET_ROUTER_ADVERT_HDR(input, off);
 
-	/* è¿é£æ¢ç´¢ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããã*/
+	/* 近隣探索オプションのオフセットを記録する。*/
 	if (nd6_options(nd_opt_off, input->buf + (off + ROUTER_ADVERT_HDR_SIZE),
 	                            input->len - (off + ROUTER_ADVERT_HDR_SIZE)) != E_OK)
 		goto err_ret;
 	/*
-	 *  å°éå¯è½ç¶æ
-ã®æå¹æéã®æ´æ°
+	 *  到達可能状態の有効時間の更新
 
 	 */
 	if (rah->reachable) {
-		advrea = ntohl(rah->reachable) * SYSTIM_HZ / 1000;	/* rah->reachable ã®åä½ã¯ ms */
+		advrea = ntohl(rah->reachable) * SYSTIM_HZ / 1000;	/* rah->reachable の単位は ms */
 		if (advrea <= ND6_MAX_REACHABLE_TIME &&
 		    advrea != nd6_base_reachable_time) {
@@ -1255,21 +1215,21 @@
 		}
 
-	/* è¿é£æ¢ç´¢ã®éä¿¡ééã®æ´æ° */
+	/* 近隣探索の送信間隔の更新 */
 	if (rah->retransmit) {
 		nd6_retrans_time = ntohl(rah->retransmit) * SYSTIM_HZ / 1000;
-									/* rah->retransmit ã®åä½ã¯ ms */
-		}
-
-	/* ããããªãããã®è¦å®å¤ã®æ´æ° */
+									/* rah->retransmit の単位は ms */
+		}
+
+	/* ホップリミットの規定値の更新 */
 	if (rah->nd_ra_current_hoplimit) {
 		ip6_defhlim = rah->nd_ra_current_hoplimit;
 		}
 
-	/* ãã£ãã©ã«ãã«ã¼ã¿ãªã¹ãã®æ´æ° */
+	/* ディフォルトルータリストの更新 */
 	rix = defrtrlist_update(&ip6h->src,
 	                       ntohs(rah->nd_ra_router_lifetime),
-	                       rah->nd_ra_flags);		/* rah->nd_ra_router_lifetime ã®åä½ã¯ç§ */
-
-	/* ãã¬ãã£ãã¯ã¹ãªã¹ãã®æ´æ° */
+	                       rah->nd_ra_flags);		/* rah->nd_ra_router_lifetime の単位は秒 */
+
+	/* プレフィックスリストの更新 */
 	if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_PREFIX_INFO_COUNT)]) {
 		T_ND_OPT_PREFIX_INFO	*pi;
@@ -1279,35 +1239,32 @@
 		pi_off   = off + ROUTER_ADVERT_HDR_SIZE
 		               + nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_PREFIX_INFORMATION)] - 8;
-	 	/* æ³¨æ: ãªãã·ã§ã³ãªãã»ããé
-åã«ã¯ããªãã»ãã + 8 ãè¨­å®ããã¦ããã*/
+	 	/* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
 		while (pi_count -- > 0) {
 			pi = (T_ND_OPT_PREFIX_INFO*)(input->buf + pi_off);
 			if (pi->type != ND_OPT_PREFIX_INFORMATION)
-				/* ãªãã·ã§ã³ã¿ã¤ãããã¬ãã£ãã¯ã¹æ
-å ±ã§ãªããã°ä½ãããªãã*/
+				/* オプションタイプがプレフィックス情報でなければ何もしない。*/
 				;
 			else if (pi->len != 4)
-			    	/* ãã¬ãã£ãã¯ã¹æ
-å ±ã®é·ãã 32 (8Ã4) ã§ãªããã°ä¸æ­£ */
+			    	/* プレフィックス情報の長さが 32 (8×4) でなければ不正 */
 				syslog(LOG_NOTICE, "[ND6 RTR] prefix opt len: %d.", pi->len);
 			else if (pi->prefix_len > 128)
-				/* ãã¬ãã£ãã¯ã¹é·ã¯ 128 ãããä»¥ä¸ */
+				/* プレフィックス長は 128 ビット以下 */
 				syslog(LOG_NOTICE, "[ND6 RTR] prefix len: %d.", pi->prefix_len);
 			else if (IN6_IS_ADDR_MULTICAST(&pi->prefix) ||
 			         IN6_IS_ADDR_LINKLOCAL(&pi->prefix))
-				/* ãã«ãã­ã£ã¹ãã¨ãªã³ã¯ã­ã¼ã«ã«ã¯ä¸æ­£ */
+				/* マルチキャストとリンクローカルは不正 */
 				syslog(LOG_NOTICE, "[ND6 RTR] invalid addr: %s from %s.",
 				                   ipv62str(NULL, &pi->prefix), ipv62str(NULL, &ip6h->src));
-#if 0	/* FreeBSD 6.3 ã§åé¤ããã¦ããã*/
+#if 0	/* FreeBSD 6.3 で削除されている。*/
 			else if (IN6_IS_ADDR_AGGREGATE_UNICAST(&pi->prefix) &&		
 			         (pi->prefix_len != 64)                       )
-				/* éç´å¯è½ã¦ãã­ã£ã¹ãã§ããã¬ãã£ãã¯ã¹é·ã 64 ãããä»¥å¤ã¯ä¸æ­£ */
+				/* 集約可能ユニキャストで、プレフィックス長が 64 ビット以外は不正 */
 				syslog(LOG_NOTICE, "[ND6 RTR] invalid prefix len for global: %d.", pi->prefix_len);
 #endif
 			else if (ntohl(pi->preferred) > ntohl(pi->valid))
-				/* æ¨å¥¨æå¹æéãæå¹æéããé·ããã°ä¸æ­£ */
+				/* 推奨有効時間が有効時間より長ければ不正 */
 				syslog(LOG_NOTICE, "[ND6 RTR] preferred(%d) > valid time(%d).", ntohl(pi->preferred), ntohl(pi->valid));
 			else {
-#if 0	/* ãã¬ãã£ãã¯ã¹ãæªç»é²ã®å ´åã ãè¡¨ç¤ºããã*/
+#if 0	/* プレフィックスが未登録の場合だけ表示する。*/
 				syslog(LOG_NOTICE, "[ND6 RTR] update prefix: flags[MOH]: %02x, addr: %s\n"
 				                   "                                         from: %s.",
@@ -1316,15 +1273,15 @@
 				if (rix >= 0) {
 					/*
-					 *  defrtrlist_update ã®æ»ãå¤ã¯ãã«ã¼ã¿ã®ã¤ã³ããã¯ã¹ã
-					 *  ãã ããå¤ã -1 ãªãããã¬ãã£ãã¯ã¹ã»ãªã¹ãã¯æ´æ°ããªãã
+					 *  defrtrlist_update の戻り値は、ルータのインデックス。
+					 *  ただし、値が -1 なら、プレフィックス・リストは更新しない。
 					 */
-					prelist_update(pi, rix);	/* ãã¬ãã£ãã¯ã¹ã»ãªã¹ããæ´æ°ããã*/
+					prelist_update(pi, rix);	/* プレフィックス・リストを更新する。*/
 					}
 				}
-			pi_off += pi->len << 3;		/* ãªãã·ã§ã³é·ã®åä½ã¯ 8 ãã¤ã */
-			}
-		}
-
-	/* MTU ã®æ´æ° */
+			pi_off += pi->len << 3;		/* オプション長の単位は 8 バイト */
+			}
+		}
+
+	/* MTU の更新 */
 	if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_MTU)]) {
 		T_ND_OPT_MTU_HDR	*optmtuh;
@@ -1335,13 +1292,13 @@
 
 		/*
-		 *  å¤ã®ãã§ãã¯
+		 *  値のチェック
 		 *
-		 *    ãªãã·ã§ã³é·: 1
-		 *    äºç´:         0
+		 *    オプション長: 1
+		 *    予約:         0
 		 */
 		if (optmtuh->len != 1 || optmtuh->reserved != 0)
 			goto err_ret;
 
-		/* MTU ã IPv6 MMTUï¼1280 ãªã¯ãããï¼ä»¥ä¸ãªãç¡è¦ããã*/
+		/* MTU が IPv6 MMTU（1280 オクテット）以下なら無視する。*/
 		mtu = ntohl(optmtuh->mtu);
 		if (mtu >= IPV6_MMTU) {
@@ -1352,11 +1309,10 @@
 
 	/*
-	 *  ã«ã¼ã¿ã®å§ç¹ãªã³ã¯ã¢ãã¬ã¹ãè¿é£ã­ã£ãã·ã¥ã«ç»é²ããã
+	 *  ルータの始点リンクアドレスを近隣キャッシュに登録する。
 	 */
 	if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)]) {
 		opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + ROUTER_ADVERT_HDR_SIZE) +
 		                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)] - 8);
-	 	/* æ³¨æ: ãªãã·ã§ã³ãªãã»ããé
-åã«ã¯ããªãã»ãã + 8 ãè¨­å®ããã¦ããã*/
+	 	/* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
 		lladdr     = (uint8_t *)(opth + 1);
 		lladdr_len = (opth->len << 3);
@@ -1364,16 +1320,15 @@
 
 	/*
-	 *  ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹é·ãä¸è´ããªããã°ã¨ã©ã¼
+	 *  ネットワークインタフェースのアドレス長が一致しなければエラー
 	 */
 	if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
 		goto err_ret;
 
-	/* è¿é£ã­ã£ãã·ã¥ã«ç»é²ããã*/
+	/* 近隣キャッシュに登録する。*/
 	nd6_cache_lladdr(ifp, &ip6h->src, (T_IF_ADDR *)lladdr, ND_ROUTER_ADVERT, 0);
 
 	/*
-	 *  ã«ã¼ã¿ã®å§ç¹ãªã³ã¯ã¢ãã¬ã¹ãè¿é£ã­ã£ãã·ã¥ã«ç»é²ããã®ã§ã
-	 *  ãªã³ãªã³ã¯ç¶æ
-ãå¤åããå¯è½æ§ããããããããããã§ãã¯ããã
+	 *  ルータの始点リンクアドレスを近隣キャッシュに登録したので、
+	 *  オンリンク状態が変化する可能性があるため、それをチェックする。
 	 */
 	pfxlist_onlink_check();
@@ -1389,5 +1344,5 @@
 
 	/*
-	 *  ã«ã¼ã¿éç¥ãåä¿¡ããªãå ´åã¯ãç ´æ£ãã¦çµäºããã
+	 *  ルータ通知を受信しない場合は、破棄して終了する。
 	 */
 	NET_COUNT_ICMP6(net_count_nd6[NC_ND6_RA_IN_PACKETS], 1);
@@ -1400,5 +1355,5 @@
 
 /*
- *  nd6_rtrsol_ctl -- ã«ã¼ã¿è¦è«åºåã®å¶å¾¡
+ *  nd6_rtrsol_ctl -- ルータ要請出力の制御
  */
 
@@ -1409,18 +1364,14 @@
 	int_t		try;
 
-	/* ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã®ã¢ãã¬ã¹æ
-å ±ãå¾ãã*/
+	/* リンクローカルアドレスのアドレス情報を得る。*/
 	if ((ifa = in6ifa_ifpwithix(IF_GET_IFNET(), IPV6_IFADDR_IX_LINKLOCAL)) == NULL)
 		return;
 
-	/* ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã®éè¤æ¤åºçµäºãå¾
-ã¤ã*/
+	/* リンクローカルアドレスの重複検出終了を待つ。*/
 	do {
-		/* ãªã³ã¯ã­ã¼ã«ã«ã¢ãã¬ã¹ã®éè¤æ¤åºçµäºå¾
-ã¡æéãè¨­å®ããã*/
+		/* リンクローカルアドレスの重複検出終了待ち時間を設定する。*/
 		syscall(dly_tsk(net_rand() % TMO_ND6_RTR_SOL_DELAY));
 
-		/* å¾
-ã£ã¦ããéã«éè¤ãæ¤åºããããçµäºããã*/
+		/* 待っている間に重複が検出されたら終了する。*/
 		if (ifa->flags & IN6_IFF_DUPLICATED)
 			return;
@@ -1430,13 +1381,12 @@
 	for (try = 0; try < NUM_ND6_RTR_SOL_RETRY; try ++) {
 
-		/* ãã£ãã©ã«ãã«ã¼ã¿ã»ãªã¹ãã«ã¨ã³ããªãããã°çµäº */
+		/* ディフォルトルータ・リストにエントリがあれば終了 */
 		if (def_router_count > 0)
 			return;
 
-		/* ã«ã¼ã¿è¦è«ãåºåããã*/
+		/* ルータ要請を出力する。*/
 		nd6_rs_output();
 
-		/* åºåã® 2 åç®ä»¥éã®é
-å»¶æéãè¨­å®ããã*/
+		/* 出力の 2 回目以降の遅延時間を設定する。*/
 		syscall(dly_tsk(TMO_ND6_RTR_SOL_INTERVAL));
 		}
@@ -1446,5 +1396,5 @@
 
 /*
- *  nd6_onlink_prefix_lookup -- ãã¬ãã£ãã¯ã¹ãæ¢ç´¢ããã
+ *  nd6_onlink_prefix_lookup -- プレフィックスを探索する。
  */
 
@@ -1459,6 +1409,5 @@
 	now /= SYSTIM_HZ;
 
-	/* æ¨å¥¨æå¹æéå
-ã®ãã¬ãã£ãã¯ã¹ãæ¢ç´¢ããã*/
+	/* 推奨有効時間内のプレフィックスを探索する。*/
 	for (ix = NUM_ND6_PREFIX_ENTRY; ix -- > 0; ) {
 		pr = &nd6_prefix[ix];
@@ -1472,6 +1421,5 @@
 		}
 
-	/* æå¹æéå
-ã®ãã¬ãã£ãã¯ã¹ãæ¢ç´¢ããã*/
+	/* 有効時間内のプレフィックスを探索する。*/
 	for (ix = NUM_ND6_PREFIX_ENTRY; ix -- > 0; ) {
 		pr = &nd6_prefix[ix];
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/route6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/route6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/route6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -115,11 +103,10 @@
 #if 0
 /*
- *  éä¿¡å¸¯åãé£ãã¤ã¶ãæ»æã¸ã®å¯¾å¿ã®ããã
- *  ã¿ã¤ã 0 çµè·¯å¶å¾¡ãããã®å¦çãè¡ããªãã
- */
-
-/*
- *  ip6_rthdr0 -- ã¿ã¤ã 0 çµè·¯å¶å¾¡ãããã®å
-¥åé¢æ°
+ *  通信帯域を食いつぶす攻撃への対応のため、
+ *  タイプ 0 経路制御ヘッダの処理を行わない。
+ */
+
+/*
+ *  ip6_rthdr0 -- タイプ 0 経路制御ヘッダの入力関数
  */
 
@@ -128,9 +115,9 @@
 {
 	if (rt0h->segleft == 0) {
-		/* ä¸­ç¶ãã¼ãæ°ã¯ 0 ãªã®ã§ãçµç¹ãã¼ã */
+		/* 中継ノード数は 0 なので、終点ノード */
 		return E_OK;
 		}
 
-	/* len ã¨ segleft ã®æ­£å½æ§ãã§ãã¯ */
+	/* len と segleft の正当性チェック */
 #ifdef IP6_CFG_COMPAT_RFC1883
 	if ((rt0h->len % 2) || (rt0h->len > 46)) {
@@ -139,6 +126,6 @@
 #endif
 		/*
-		 *  len ã¯å¶æ°ã§ã(23 * 2) ã¾ã§ã
-		 *  ãã ãã(23 * 2) ã®å¶éã¯ RFC 2462 ã§åé¤ããã¦ããã
+		 *  len は偶数で、(23 * 2) まで。
+		 *  ただし、(23 * 2) の制限は RFC 2462 で削除されている。
 		 */
 		icmp6_error(input, ICMP6_PARAM_PROB,
@@ -148,10 +135,10 @@
 		}
 
-	/* len ãä¸­ç¶ãã¼ãæ°ã¨çç¾ãã¦ããªãããã§ãã¯ããã*/
+	/* len が中継ノード数と矛盾していないかチェックする。*/
 	if ((rt0h->len / 2) < rt0h->segleft) {
 		/*
-		 *  len ã¯ 8ãªã¯ãããåä½ãsegleft ã¯ 16ãªã¯ãããåä½ãªã®ã§ã
-		 *  len / 2 == segleft ã¨ãªãã¯ãã
-		 *  len / 2 <  segleft ã¯ã¨ã©ã¼ã
+		 *  len は 8オクテット単位、segleft は 16オクテット単位なので、
+		 *  len / 2 == segleft となるはず。
+		 *  len / 2 <  segleft はエラー。
 		 */
 		icmp6_error(input, ICMP6_PARAM_PROB,
@@ -162,9 +149,7 @@
 
 	/*
-	 *  æ®ãã®ä¸­ç¶ãã¼ãæ°ã 1 ä»¥ä¸ã§ããã°ããã®ãã¼ãã¯æçµçãª
-	 *  çµç¹ãã¼ãã§ã¯ãªããæ¬å®è£
-ã§ã¯ãä¸­ç¶ãããªãã®ã§ã
-	 *  å
-¥åãã¼ã¿ã°ã©ã ã®å¦çãçµäºããã
+	 *  残りの中継ノード数が 1 以上であれば、このノードは最終的な
+	 *  終点ノードではない。本実装では、中継をしないので、
+	 *  入力データグラムの処理を終了する。
 	 */
 	syscall(rel_net_buf(input));
@@ -175,6 +160,5 @@
 
 /*
- *  route6_input -- çµè·¯å¶å¾¡ãããã®å
-¥åé¢æ°
+ *  route6_input -- 経路制御ヘッダの入力関数
  */
 
@@ -186,5 +170,5 @@
 	uint_t		len, off = *offp;
 
-	/* ãããã¯ã¼ã¯ãããã¡ã®æ®ãã®é·ãããã§ãã¯ããã*/
+	/* ネットワークバッファの残りの長さをチェックする。*/
 	if (input->len - off < sizeof(T_IP6_RT_HDR))
 		goto buf_rel;
@@ -193,5 +177,5 @@
 	len = (rth->len + 1) << 3;
 
-	/* çµè·¯å¶å¾¡ãããã®é·ãããã§ãã¯ããã*/
+	/* 経路制御ヘッダの長さをチェックする。*/
 	if (input->len < off + len)
 		goto buf_rel;
@@ -199,11 +183,11 @@
 #if 0
 	/*
-	 *  éä¿¡å¸¯åãé£ãã¤ã¶ãæ»æã¸ã®å¯¾å¿ã®ããã
-	 *  ã¿ã¤ã 0 çµè·¯å¶å¾¡ãããã®å¦çãè¡ããªãã
+	 *  通信帯域を食いつぶす攻撃への対応のため、
+	 *  タイプ 0 経路制御ヘッダの処理を行わない。
 	 */
 	if (rth->type == IPV6_RTHDR_TYPE_0) {
 		if (ip6_rthdr0(input, (T_IP6_RT0_HDR*)rth) != E_OK) {
 
-			/* ã¨ã©ã¼ã®å ´åã¯ãip6_rthdr0 ã§ãããã¡ãéæ¾ãã¦ããã*/
+			/* エラーの場合は、ip6_rthdr0 でバッファを開放している。*/
 			return IPPROTO_DONE;
 			}
@@ -212,8 +196,7 @@
 
 		/*
-		 *  æ®ãã®ä¸­ç¶ãã¼ãæ°ã 1 ä»¥ä¸ã§ããã°ããã®ãã¼ãã¯æçµçãª
-		 *  çµç¹ãã¼ãã§ã¯ãªããæ¬å®è£
-ã§ã¯ãä¸­ç¶ãããªãã®ã§ã
-		 *  ICMP6 ã¨ã©ã¼ãè¿éãã¦å¦çãçµäºããã
+		 *  残りの中継ノード数が 1 以上であれば、このノードは最終的な
+		 *  終点ノードではない。本実装では、中継をしないので、
+		 *  ICMP6 エラーを返送して処理を終了する。
 		 */
 		icmp6_error(input, ICMP6_PARAM_PROB,
@@ -226,8 +209,7 @@
 
 		/*
-		 *  æ®ãã®ä¸­ç¶ãã¼ãæ°ã 1 ä»¥ä¸ã§ããã°ããã®ãã¼ãã¯æçµçãª
-		 *  çµç¹ãã¼ãã§ã¯ãªããæ¬å®è£
-ã§ã¯ãä¸­ç¶ãããªãã®ã§ã
-		 *  ICMP6 ã¨ã©ã¼ãè¿éãã¦å¦çãçµäºããã
+		 *  残りの中継ノード数が 1 以上であれば、このノードは最終的な
+		 *  終点ノードではない。本実装では、中継をしないので、
+		 *  ICMP6 エラーを返送して処理を終了する。
 		 */
 		icmp6_error(input, ICMP6_PARAM_PROB,
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/scope6.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/scope6.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/scope6.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -147,5 +135,5 @@
 
 /*
- *  in6_addrscope -- ã¢ãã¬ã¹ã®ã¹ã³ã¼ã ID ãè¿ãã
+ *  in6_addrscope -- アドレスのスコープ ID を返す。
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/udp6_input.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/udp6_input.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/udp6_input.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -78,6 +66,5 @@
 
 /*
- *  udp_reply_no_port -- éä¿¡å
-ã«ãã¼ããå®ç¾©ããã¦ããªããã¨ãéç¥ããã
+ *  udp_reply_no_port -- 送信元にポートが定義されていないことを通知する。
  */
 
@@ -93,9 +80,9 @@
 	if (GET_IP_VER(input)==IPV6_VERSION) {
 
-		/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã¯ ICMP ã¨ã©ã¼ãéç¥ããªãã*/
+		/* マルチキャストアドレスに届いたデータグラムは ICMP エラーを通知しない。*/
 		if (!IN6_IS_ADDR_MULTICAST(&GET_IP6_HDR(input)->dst)) {
 			syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport));
 
-			/* icmp6_error ã§ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããã*/
+			/* icmp6_error で、ネットワークバッファ input を返却する。*/
 			icmp6_error(input, ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_NOPORT, 0);
 			}
@@ -105,10 +92,10 @@
 	else /*if (GET_IP_VER(input)==IPV4_VERSION)*/ {
 
-		/* ã­ã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/
+		/* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
 		if (ntohl(GET_IP4_HDR(input)->dst) == IF_GET_IFNET()->in4_ifaddr.addr) {
 			syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport));
 
 			icmp_error(ICMP4_UNREACH_PORT, input);
-			/* icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ä¸ã¸æããã*/
+			/* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/
 			}
 		syscall(rel_net_buf(input));
@@ -119,9 +106,9 @@
 	NET_COUNT_MIB(udp_stats.udpNoPorts, 1);
 
-	/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã¯ ICMP ã¨ã©ã¼ãéç¥ããªãã*/
+	/* マルチキャストアドレスに届いたデータグラムは ICMP エラーを通知しない。*/
 	if (!IN6_IS_ADDR_MULTICAST(&GET_IP6_HDR(input)->dst)) {
 		syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport));
 
-		/* icmp6_error ã§ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããã*/
+		/* icmp6_error で、ネットワークバッファ input を返却する。*/
 		icmp6_error(input, ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_NOPORT, 0);
 		}
Index: azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/udp6_subr.c
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/udp6_subr.c	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/udp6_subr.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -78,11 +66,9 @@
 
 /*
- *  udp6_is_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udp6_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    ä»¥ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    以下の場合もデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã«ãã­ã£ã¹ã
+ *      ・あて先アドレスがマルチキャスト
  */
 
@@ -105,12 +91,10 @@
 
 /*
- *  udpn_is_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udpn_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ãä»¥ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    DHCP_CFG が定義されているときは、以下のデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
- *      ã»ã­ã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾©
+ *      ・あて先アドレスがブロードキャスト
+ *      ・ローカルアドレスが未定義
  */
 
@@ -139,11 +123,9 @@
 
 /*
- *  udpn_is_dstaddr_accept -- UDP ã®ãã¦å
-ã¢ãã¬ã¹ãæ­£ããããã§ãã¯ããã
+ *  udpn_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
  *
- *    ä»¥ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã
+ *    以下の場合もデータグラムを受信する。
  *
- *      ã»ãã¦å
-ã¢ãã¬ã¹ããã­ã¼ãã­ã£ã¹ã
+ *      ・あて先アドレスがブロードキャスト
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/tinet.trb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/tinet.trb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/tinet.trb	(revision 389)
@@ -6,43 +6,30 @@
 #                    Tomakomai National College of Technology, JAPAN
 #  
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 # 
 #   @(#) $Id$
@@ -51,5 +38,5 @@
 
 # =====================================================================
-# tinet_cfg.h ã®çæ
+# tinet_cfg.h の生成
 # =====================================================================
 
@@ -119,5 +106,5 @@
 
 # =====================================================================
-# tinet_cfg.c ã®çæ
+# tinet_cfg.c の生成
 # =====================================================================
 
@@ -149,5 +136,5 @@
 EOS
 # 
-#  ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼
+#  インクルードディレクティブ（#include）
 # 
 $tinetCfgC.add()
@@ -187,5 +174,5 @@
 $tinetCfgC.add("#endif")
 
-#	// TCP (IPv6) åä»å£
+#	// TCP (IPv6) 受付口
 $sem_tcp_rep_lock_id = 0
 if $cfgData[:TCP6_CRE_REP].size > 0 || $cfgData[:VRID_TCP6_REP].size > 0
@@ -217,5 +204,5 @@
 end
 
-#	// TCP (IPv4) åä»å£
+#	// TCP (IPv4) 受付口
 if $cfgData[:TCP_CRE_REP].size > 0 || $cfgData[:VRID_TCP_REP].size > 0
 	$tinetCfgC.add()
@@ -246,5 +233,5 @@
 end
 
-#	// TCP éä¿¡ç«¯ç¹
+#	// TCP 通信端点
 if $cfgData[:TCP6_CRE_CEP].size > 0 || $cfgData[:VRID_TCP6_CEP].size > 0 || $cfgData[:TCP_CRE_CEP].size > 0 || $cfgData[:VRID_TCP_CEP].size > 0
 	$tinetCfgC.add()
@@ -313,5 +300,5 @@
 end
 
-#	// UDP (IPv6) éä¿¡ç«¯ç¹
+#	// UDP (IPv6) 通信端点
 if $cfgData[:UDP6_CRE_CEP].size > 0 || $cfgData[:VRID_UDP6_CEP].size > 0
 	$tinetCfgC.add()
@@ -344,5 +331,5 @@
 end
 
-#	// UDP (IPv4) éä¿¡ç«¯ç¹
+#	// UDP (IPv4) 通信端点
 if $cfgData[:UDP_CRE_CEP].size > 0 || $cfgData[:VRID_UDP_CEP].size > 0
 	$tinetCfgC.add()
@@ -376,8 +363,8 @@
 
 # =====================================================================
-# tinet_kern.cfg ã®çæ
-# =====================================================================
-
-#	// TCP (IPv6) åä»å£
+# tinet_kern.cfg の生成
+# =====================================================================
+
+#	// TCP (IPv6) 受付口
 $sem_tcp_rep_lock_id = 0
 if $cfgData[:TCP6_CRE_REP].size > 0 || $cfgData[:VRID_TCP6_REP].size > 0
@@ -404,5 +391,5 @@
 end
 
-#	// TCP (IPv4) åä»å£
+#	// TCP (IPv4) 受付口
 if $cfgData[:TCP_CRE_REP].size > 0 || $cfgData[:VRID_TCP_REP].size > 0
 	$cfgData[:TCP_CRE_REP].each do |key, params|
@@ -428,5 +415,5 @@
 end
 
-#	// TCP (IPv6) éä¿¡ç«¯ç¹
+#	// TCP (IPv6) 通信端点
 if $cfgData[:TCP6_CRE_CEP].size > 0 || $cfgData[:VRID_TCP6_CEP].size > 0
 	$cfgData[:TCP6_CRE_CEP].each do |key, params|
@@ -484,5 +471,5 @@
 end
 
-#	// TCP (IPv4) éä¿¡ç«¯ç¹
+#	// TCP (IPv4) 通信端点
 if $cfgData[:TCP_CRE_CEP].size > 0 || $cfgData[:VRID_TCP_CEP].size > 0
 	$cfgData[:TCP_CRE_CEP].each do |key, params|
@@ -540,5 +527,5 @@
 end
 
-#	// UDP (IPv6) éä¿¡ç«¯ç¹
+#	// UDP (IPv6) 通信端点
 if $cfgData[:UDP6_CRE_CEP].size > 0 || $cfgData[:VRID_UDP6_CEP].size > 0
 	$cfgData[:UDP6_CRE_CEP].each do |key, params|
@@ -574,5 +561,5 @@
 end
 
-#	// UDP (IPv4) éä¿¡ç«¯ç¹
+#	// UDP (IPv4) 通信端点
 if $cfgData[:UDP_CRE_CEP].size > 0 || $cfgData[:VRID_UDP_CEP].size > 0
 	$cfgData[:UDP_CRE_CEP].each do |key, params|
Index: azure_iot_hub/trunk/asp3_dcre/tinet/tinet_asp.cfg
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/tinet_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/tinet_asp.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  TINET ã®æ¨æºã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  TINET の標準システムコンフィギュレーションファイル
  */
 
@@ -75,6 +63,5 @@
 
 /*
- *  TINET ãã­ãã³ã«ã¹ã¿ãã¯å
-é¨ã®ã«ã¼ãã«ãªãã¸ã§ã¯ãã®æå®
+ *  TINET プロトコルスタック内部のカーネルオブジェクトの指定
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/tinet_config.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/tinet_config.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/tinet_config.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -48,8 +36,8 @@
 
 /*
- *  TINET 1.2 ã¨ã®äºææ§ã®ããã®å®ç¾©
- */
-
-/* TCPã®ååãªã¼ãã³ããµãã¼ããããTINET 1.7 ä»¥éä¸è¦ã«ãªã£ããã*/
+ *  TINET 1.2 との互換性のための定義
+ */
+
+/* TCPの受動オープンをサポートする【TINET 1.7 以降不要になった】。*/
 
 #if 0
@@ -57,15 +45,15 @@
 #endif
 
-/* TCPã®ãã³ãã­ãã­ã³ã°ã³ã¼ã«æ©è½ãçµè¾¼ãã*/
+/* TCPのノンブロッキングコール機能を組込む。*/
 
 #define TCP_CFG_NON_BLOCKING
 
-/* UDPã®ãã³ãã­ãã­ã³ã°ã³ã¼ã«æ©è½ãçµè¾¼ãã*/
+/* UDPのノンブロッキングコール機能を組込む。*/
 
 #define UDP_CFG_NON_BLOCKING
 
 /*
- *  NICãã·ã¹ãã ãCPUãå¿ç¨ãã­ã°ã©ã ã«
- *  ä¾å­ããå®ç¾©ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããã
+ *  NIC、システム、CPU、応用プログラムに
+ *  依存する定義ファイルをインクルードする。
  */
 
@@ -96,5 +84,5 @@
 
 /*
- *  TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.1 との互換性のための定義
  */
 
@@ -104,5 +92,5 @@
 
 /*
- *  TINET 1.2 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.2 との互換性のための定義
  */
 
@@ -112,5 +100,5 @@
 
 /*
- *  TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©
+ *  TINET 1.3 との互換性のための定義
 
 #ifdef  NUM_MPF_NET_BUF_REASSM
@@ -120,16 +108,16 @@
 
 /*
- *  TINET 1.5 ã¨ã®äºææ§ã®ããã®å®ç¾©
- */
-
-/* ã«ã¼ãã£ã³ã°è¡¨ã®ã¨ã³ããªæ°ã®å®ç¾© */
+ *  TINET 1.5 との互換性のための定義
+ */
+
+/* ルーティング表のエントリ数の定義 */
 
 #define NUM_IN6_ROUTE_ENTRY			\
 	(NUM_IN6_STATIC_ROUTE_ENTRY + NUM_IN6_REDIRECT_ROUTE_ENTRY)
-					/* ã«ã¼ãã£ã³ã°è¡¨ã®ã¨ã³ããªæ°	*/
+					/* ルーティング表のエントリ数	*/
 
 #define NUM_IN4_ROUTE_ENTRY		\
 	(NUM_IN4_STATIC_ROUTE_ENTRY + NUM_IN4_REDIRECT_ROUTE_ENTRY)
-					/* ã«ã¼ãã£ã³ã°è¡¨ã®ã¨ã³ããªæ°	*/
+					/* ルーティング表のエントリ数	*/
 
 #if defined(SUPPORT_INET6)
@@ -175,5 +163,5 @@
 #endif	/* of #if defined(SUPPORT_INET6) */
 
-/* DHCP ã®å®ç¾© */
+/* DHCP の定義 */
 
 #ifdef  DHCP4_CLI_CFG
@@ -182,10 +170,9 @@
 
 /*
- *  IPv6/IPv4 ã«é¢ããå®ç¾©
- */
-
-/*
- *  æå®ããããã¯ã­ã«å¯¾ãã TINET å
-é¨ã®ãã¯ã­ã®å®ç¾©
+ *  IPv6/IPv4 に関する定義
+ */
+
+/*
+ *  指定されたマクロに対する TINET 内部のマクロの定義
  *
  *    SUPPORT_INET6		 .   .  ON  ON  ON  ON
@@ -211,11 +198,11 @@
 
 /*
- *  TCP ã«é¢ããå®ç¾©
- */
-
-/*
- *  MAX_TCP_RCV_SEG: åä¿¡ã»ã°ã¡ã³ããµã¤ãºã®æå¤§å¤
+ *  TCP に関する定義
+ */
+
+/*
+ *  MAX_TCP_RCV_SEG: 受信セグメントサイズの最大値
  *
- *    æ³¨æ: å¤æ´ãã¹ãã§ã¯ãªãã
+ *    注意: 変更すべきではない。
  */
 
@@ -225,5 +212,5 @@
 
 /*
- *  DEF_TCP_SND_SEG: éä¿¡ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤
+ *  DEF_TCP_SND_SEG: 送信セグメントサイズの規定値
  */
 
@@ -233,5 +220,5 @@
 
 /*
- *  TCP éä¿¡ç«¯ç¹ã®éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½
+ *  TCP 通信端点の送受信ウィンドバッファの省コピー機能
  */
 
@@ -249,9 +236,8 @@
 
 /*
- *  TCP_CFG_URG_OFFSET: ç·æ¥ãã¼ã¿ã®æå¾ã®ãã¤ãã®ãªãã»ãã
+ *  TCP_CFG_URG_OFFSET: 緊急データの最後のバイトのオフセット
  *
- *    -1: BSD ã®å®è£
-ãç·æ¥ãã¤ã³ã¿ã¯ãç·æ¥ãã¼ã¿ã®æå¾ã®ãã¤ãã®æ¬¡ã®ãã¤ããå·®ãã
- *     0: RFC1122 ã®è¦å®ãç·æ¥ãã¤ã³ã¿ã¯ãç·æ¥ãã¼ã¿ã®æå¾ã®ãã¤ããå·®ãã
+ *    -1: BSD の実装、緊急ポインタは、緊急データの最後のバイトの次のバイトを差す。
+ *     0: RFC1122 の規定、緊急ポインタは、緊急データの最後のバイトを差す。
  */
 
@@ -261,24 +247,24 @@
 
 /*
- *  ARP ã«é¢ããå®ç¾©
+ *  ARP に関する定義
  */
 
 #ifndef ARP_CACHE_KEEP
-#define ARP_CACHE_KEEP		(20*60*NET_TIMER_HZ)	/* ARP ã­ã£ãã·ã¥ã®ã¿ã¤ã ã¢ã¦ã	*/
-#endif
-
-/*
- *  ã«ã¼ãããã¯ã¤ã³ã¿ãã§ã¼ã¹ã«é¢ããå®ç¾©
+#define ARP_CACHE_KEEP		(20*60*NET_TIMER_HZ)	/* ARP キャッシュのタイムアウト	*/
+#endif
+
+/*
+ *  ループバックインタフェースに関する定義
  */
 
 #ifndef LOMTU
-#define LOMTU			1500	/* ã«ã¼ãããã¯ã® MTU			*/
-#endif
-
-/*
- * TINET ãµãã¼ãé¢æ°ã«é¢ããå®ç¾©
- */
-
-#ifndef NUM_IPV4ADDR_STR_BUFF		/* ip2str ã«ããã IP ã¢ãã¬ã¹æå­åç¨ãããã¡æ° */
+#define LOMTU			1500	/* ループバックの MTU			*/
+#endif
+
+/*
+ * TINET サポート関数に関する定義
+ */
+
+#ifndef NUM_IPV4ADDR_STR_BUFF		/* ip2str における IP アドレス文字列用バッファ数 */
 
 #if defined(SUPPORT_PPP)
@@ -295,8 +281,8 @@
 
 #ifndef NUM_IPV6ADDR_STR_BUFF
-#define NUM_IPV6ADDR_STR_BUFF	2	/* ip62str ã«ããã IP ã¢ãã¬ã¹æå­åç¨ãããã¡æ° */
-#endif
-
-#ifndef NUM_MACADDR_STR_BUFF		/* macstr ã«ããã MAC ã¢ãã¬ã¹æå­åç¨ãããã¡æ° */
+#define NUM_IPV6ADDR_STR_BUFF	2	/* ip62str における IP アドレス文字列用バッファ数 */
+#endif
+
+#ifndef NUM_MACADDR_STR_BUFF		/* macstr における MAC アドレス文字列用バッファ数 */
 
 #if defined(SUPPORT_INET4) && defined(ETHER_CFG_ACCEPT_ALL) && defined(ETHER_CFG_MCAST_WARNING)
@@ -313,205 +299,184 @@
 
 /*
- *  TINET å
-é¨ã®ã¿ã¤ã ã¢ã¦ãå¤ã®è¨­å®
+ *  TINET 内部のタイムアウト値の設定
  */
 
 #ifndef TMO_IP4_FRAG_GET_NET_BUF
-#define TMO_IP4_FRAG_GET_NET_BUF	ULONG_C(1000000)	/* [us]ãIPv4 ãã¼ã¿ã°ã©ã åæ§æç¨ãããã¯ã¼ã¯ãããã¡ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+#define TMO_IP4_FRAG_GET_NET_BUF	ULONG_C(1000000)	/* [us]、IPv4 データグラム再構成用ネットワークバッファ獲得タイムアウト	*/
 #endif
 
 #ifndef TMO_IP6_FRAG_GET_NET_BUF
-#define TMO_IP6_FRAG_GET_NET_BUF	ULONG_C(1000000)	/* [us]ãIPv6 ãã¼ã¿ã°ã©ã åæ§æç¨ãããã¯ã¼ã¯ãããã¡ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+#define TMO_IP6_FRAG_GET_NET_BUF	ULONG_C(1000000)	/* [us]、IPv6 データグラム再構成用ネットワークバッファ獲得タイムアウト	*/
 #endif
 
 #ifndef TMO_PPP_GET_NET_BUF
-#define TMO_PPP_GET_NET_BUF		ULONG_C(1000000)	/* [us]ãPPP åä¿¡ç¨ãããã¯ã¼ã¯ãããã¡ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+#define TMO_PPP_GET_NET_BUF		ULONG_C(1000000)	/* [us]、PPP 受信用ネットワークバッファ獲得タイムアウト	*/
 #endif
 
 #ifndef TMO_ARP_GET_NET_BUF
-#define TMO_ARP_GET_NET_BUF		ULONG_C(1000000)	/* [us]ãARP ã®ãããã¯ã¼ã¯ãããã¡ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+#define TMO_ARP_GET_NET_BUF		ULONG_C(1000000)	/* [us]、ARP のネットワークバッファ獲得タイムアウト	*/
 #endif
 
 #ifndef TMO_TCP_GET_NET_BUF
-#define TMO_TCP_GET_NET_BUF		ULONG_C(1000000)	/* [us]ãTCP ã®ãããã¯ã¼ã¯ãããã¡ç²å¾ã¿ã¤ã ã¢ã¦ã	*/
+#define TMO_TCP_GET_NET_BUF		ULONG_C(1000000)	/* [us]、TCP のネットワークバッファ獲得タイムアウト	*/
 #endif
 
 #ifndef TMO_TCP_OUTPUT
-#define TMO_TCP_OUTPUT			ULONG_C(1000000)	/* [us]ãTCP åºåã¿ã¤ã ã¢ã¦ã				*/
+#define TMO_TCP_OUTPUT			ULONG_C(1000000)	/* [us]、TCP 出力タイムアウト				*/
 #endif
 
 #ifndef TMO_UDP_OUTPUT
-#define TMO_UDP_OUTPUT			ULONG_C(1000000)	/* [us]ãUDP åºåã¿ã¤ã ã¢ã¦ã				*/
+#define TMO_UDP_OUTPUT			ULONG_C(1000000)	/* [us]、UDP 出力タイムアウト				*/
 #endif
 
 #ifndef TMO_ICMP_OUTPUT
-#define TMO_ICMP_OUTPUT			ULONG_C(1000000)	/* [us]ãICMP åºåã¿ã¤ã ã¢ã¦ã				*/
+#define TMO_ICMP_OUTPUT			ULONG_C(1000000)	/* [us]、ICMP 出力タイムアウト				*/
 #endif
 
 #ifndef TMO_IGMP_OUTPUT
-#define TMO_IGMP_OUTPUT			ULONG_C(1000000)	/* [us]ãIGMP åºåã¿ã¤ã ã¢ã¦ã				*/
+#define TMO_IGMP_OUTPUT			ULONG_C(1000000)	/* [us]、IGMP 出力タイムアウト				*/
 #endif
 
 #ifndef TMO_ND6_NS_OUTPUT
-#define TMO_ND6_NS_OUTPUT		ULONG_C(1000000)	/* [us]ãè¿é£è¦è«åºåã¿ã¤ã ã¢ã¦ã			*/
+#define TMO_ND6_NS_OUTPUT		ULONG_C(1000000)	/* [us]、近隣要請出力タイムアウト			*/
 #endif
 
 #ifndef TMO_ND6_NA_OUTPUT
-#define TMO_ND6_NA_OUTPUT		ULONG_C(1000000)	/* [us]ãè¿é£éç¥åºåã¿ã¤ã ã¢ã¦ã			*/
+#define TMO_ND6_NA_OUTPUT		ULONG_C(1000000)	/* [us]、近隣通知出力タイムアウト			*/
 #endif
 
 #ifndef TMO_ND6_RS_OUTPUT
-#define TMO_ND6_RS_OUTPUT		ULONG_C(1000000)	/* [us]ãã«ã¼ã¿è¦è«åºåã¿ã¤ã ã¢ã¦ã			*/
+#define TMO_ND6_RS_OUTPUT		ULONG_C(1000000)	/* [us]、ルータ要請出力タイムアウト			*/
 #endif
 
 #ifndef TMO_ARP_OUTPUT
-#define TMO_ARP_OUTPUT			ULONG_C(1000000)	/* [us]ãã¢ãã¬ã¹è§£æ±ºè¦æ±åºåã¿ã¤ã ã¢ã¦ã		*/
+#define TMO_ARP_OUTPUT			ULONG_C(1000000)	/* [us]、アドレス解決要求出力タイムアウト		*/
 #endif
 
 #ifndef TMO_ND6_RTR_SOL_DELAY
-#define TMO_ND6_RTR_SOL_DELAY		ULONG_C(1000000)	/* [us]ãã«ã¼ã¿è¦è«åºåé
-å»¶				*/
+#define TMO_ND6_RTR_SOL_DELAY		ULONG_C(1000000)	/* [us]、ルータ要請出力遅延				*/
 #endif
 
 #ifndef TMO_ND6_RTR_SOL_INTERVAL
-#define TMO_ND6_RTR_SOL_INTERVAL	ULONG_C(4000000)	/* [us]ãã«ã¼ã¿è¦è«åºåéé				*/
+#define TMO_ND6_RTR_SOL_INTERVAL	ULONG_C(4000000)	/* [us]、ルータ要請出力間隔				*/
 #endif
 
 #ifndef TMO_IN_REDIRECT
-					/* [s]ãåãç´ãã«ã¼ãã£ã³ã°ã¨ã³ããªã¿ã¤ã ã¢ã¦ã*/
+					/* [s]、向け直しルーティングエントリタイムアウト*/
 #define TMO_IN_REDIRECT			(10*60*NET_TIMER_HZ)
 #endif
 
 /*
- *  TINET å
-é¨ã®ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®è¨­å®
+ *  TINET 内部のタスクのスタックサイズの設定
  */
 
 #ifndef TCP_OUT_TASK_STACK_SIZE
-#define	TCP_OUT_TASK_STACK_SIZE	1024	/* TCP åºåã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº		*/
+#define	TCP_OUT_TASK_STACK_SIZE	1024	/* TCP 出力タスクのスタックサイズ		*/
 #endif
 
 #ifndef UDP_OUT_TASK_STACK_SIZE
-#define	UDP_OUT_TASK_STACK_SIZE	1024	/* UDP åºåã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº			*/
+#define	UDP_OUT_TASK_STACK_SIZE	1024	/* UDP 出力タスクのスタックサイズ			*/
 #endif
 
 #ifndef PPP_INPUT_STACK_SIZE
-#define	PPP_INPUT_STACK_SIZE	1024	/* PPP ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº		*/
+#define	PPP_INPUT_STACK_SIZE	1024	/* PPP タスクのスタックサイズ		*/
 #endif
 
 #ifndef PPP_OUTPUT_STACK_SIZE
-#define	PPP_OUTPUT_STACK_SIZE	1024	/* PPP åºåã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº		*/
+#define	PPP_OUTPUT_STACK_SIZE	1024	/* PPP 出力タスクのスタックサイズ		*/
 #endif
 
 #ifndef ETHER_INPUT_STACK_SIZE
-#define	ETHER_INPUT_STACK_SIZE	1024	/* Ethernet å
-¥åã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define	ETHER_INPUT_STACK_SIZE	1024	/* Ethernet 入力タスクのスタックサイズ	*/
 #endif
 
 #ifndef ETHER_OUTPUT_STACK_SIZE
-#define	ETHER_OUTPUT_STACK_SIZE	1024	/* Ethernet åºåã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define	ETHER_OUTPUT_STACK_SIZE	1024	/* Ethernet 出力タスクのスタックサイズ	*/
 #endif
 
 #ifndef LOOP_INPUT_STACK_SIZE
-#define	LOOP_INPUT_STACK_SIZE	1024	/* ã«ã¼ãããã¯å
-¥åã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define	LOOP_INPUT_STACK_SIZE	1024	/* ループバック入力タスクのスタックサイズ	*/
 #endif
 
 #ifndef LOOP_OUTPUT_STACK_SIZE
-#define	LOOP_OUTPUT_STACK_SIZE	1024	/* ã«ã¼ãããã¯åºåã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define	LOOP_OUTPUT_STACK_SIZE	1024	/* ループバック出力タスクのスタックサイズ	*/
 #endif
 
 #ifndef NET_TIMER_STACK_SIZE
-#define	NET_TIMER_STACK_SIZE	1024	/* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº */
-#endif
-
-/*
- *  TINET å
-é¨ã®ã¿ã¹ã¯ã®åªå
-åº¦ã®è¨­å®
+#define	NET_TIMER_STACK_SIZE	1024	/* ネットワークタイマタスクのスタックサイズ */
+#endif
+
+/*
+ *  TINET 内部のタスクの優先度の設定
  */
 
 #ifndef TCP_OUT_TASK_PRIORITY
-#define TCP_OUT_TASK_PRIORITY	5	/* TCP åºåã¿ã¹ã¯ã®åªå
-åº¦			*/
+#define TCP_OUT_TASK_PRIORITY	5	/* TCP 出力タスクの優先度			*/
 #endif
 
 #ifndef UDP_OUT_TASK_PRIORITY
-#define UDP_OUT_TASK_PRIORITY	5	/* UDP åºåã¿ã¹ã¯ã®åªå
-åº¦				*/
+#define UDP_OUT_TASK_PRIORITY	5	/* UDP 出力タスクの優先度				*/
 #endif
 
 #ifndef PPP_INPUT_PRIORITY
-#define PPP_INPUT_PRIORITY	5	/* PPP ã¿ã¹ã¯ã®åªå
-åº¦			*/
+#define PPP_INPUT_PRIORITY	5	/* PPP タスクの優先度			*/
 #endif
 
 #ifndef PPP_OUTPUT_PRIORITY
-#define PPP_OUTPUT_PRIORITY	5	/* PPP ã¿ã¹ã¯ã®åªå
-åº¦			*/
+#define PPP_OUTPUT_PRIORITY	5	/* PPP タスクの優先度			*/
 #endif
 
 #ifndef ETHER_INPUT_PRIORITY
-#define ETHER_INPUT_PRIORITY	5	/* Ethernet å
-¥åã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define ETHER_INPUT_PRIORITY	5	/* Ethernet 入力タスクの優先度		*/
 #endif
 
 #ifndef ETHER_OUTPUT_PRIORITY
-#define ETHER_OUTPUT_PRIORITY	5	/* Ethernet åºåã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define ETHER_OUTPUT_PRIORITY	5	/* Ethernet 出力タスクの優先度		*/
 #endif
 
 #ifndef LOOP_INPUT_PRIORITY
-#define LOOP_INPUT_PRIORITY	5	/* ã«ã¼ãããã¯å
-¥åã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define LOOP_INPUT_PRIORITY	5	/* ループバック入力タスクの優先度		*/
 #endif
 
 #ifndef LOOP_OUTPUT_PRIORITY
-#define LOOP_OUTPUT_PRIORITY	5	/* ã«ã¼ãããã¯åºåã¿ã¹ã¯ã®åªå
-åº¦		*/
+#define LOOP_OUTPUT_PRIORITY	5	/* ループバック出力タスクの優先度		*/
 #endif
 
 #ifndef NET_TIMER_PRIORITY
-#define NET_TIMER_PRIORITY	5	/* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ã®åªå
-åº¦ */
-#endif
-
-/*
- *  TINET å
-é¨ã®ãã¼ã¿ã­ã¥ã¼ã®ã¨ã³ããªæ°ã®è¨­å®
- */
-
-/* UDP åä¿¡ã­ã¥ã¼ãµã¤ãº */
+#define NET_TIMER_PRIORITY	5	/* ネットワークタイマタスクの優先度 */
+#endif
+
+/*
+ *  TINET 内部のデータキューのエントリ数の設定
+ */
+
+/* UDP 受信キューサイズ */
 
 #ifndef NUM_DTQ_UDP_RCVQ
-#define NUM_DTQ_UDP_RCVQ	1	/* éã³ã¼ã«ããã¯ç¨	*/
+#define NUM_DTQ_UDP_RCVQ	1	/* 非コールバック用	*/
 #endif
 
 #ifndef NUM_DTQ_UDP_OUTPUT
-#define NUM_DTQ_UDP_OUTPUT	1	/* UDP åºåãã¼ã¿ã­ã¥ã¼ãµã¤ãº			*/
+#define NUM_DTQ_UDP_OUTPUT	1	/* UDP 出力データキューサイズ			*/
 #endif
 
 #ifndef NUM_DTQ_PPP_OUTPUT
-#define NUM_DTQ_PPP_OUTPUT	2	/* PPP åºåãã¼ã¿ã­ã¥ã¼ãµã¤ãºã2 ä»¥ä¸	*/
+#define NUM_DTQ_PPP_OUTPUT	2	/* PPP 出力データキューサイズ、2 以上	*/
 #endif
 
 #ifndef NUM_DTQ_ETHER_OUTPUT
-#define NUM_DTQ_ETHER_OUTPUT	2	/* Ethernet åºåãã¼ã¿ã­ã¥ã¼ãµã¤ãº	*/
+#define NUM_DTQ_ETHER_OUTPUT	2	/* Ethernet 出力データキューサイズ	*/
 #endif
 
 #ifndef NUM_DTQ_LOOP_INPUT
-#define NUM_DTQ_LOOP_INPUT	0	/* ã«ã¼ãããã¯å
-¥åãã¼ã¿ã­ã¥ã¼ãµã¤ãº	*/
+#define NUM_DTQ_LOOP_INPUT	0	/* ループバック入力データキューサイズ	*/
 #endif
 
 #ifndef NUM_DTQ_LOOP_OUTPUT
-#define NUM_DTQ_LOOP_OUTPUT	0	/* ã«ã¼ãããã¯åºåãã¼ã¿ã­ã¥ã¼ãµã¤ãº	*/
-#endif
-
-/*
- *  TINET ãã­ãã³ã«ã¹ã¿ãã¯å
-é¨ã®ãªãã¼ã 
+#define NUM_DTQ_LOOP_OUTPUT	0	/* ループバック出力データキューサイズ	*/
+#endif
+
+/*
+ *  TINET プロトコルスタック内部のリネーム
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/tinet_defs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/tinet_defs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/tinet_defs.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -56,5 +44,5 @@
 
 /*
- *  ã«ã¼ãã«ã®è­å¥
+ *  カーネルの識別
  */
 
Index: azure_iot_hub/trunk/asp3_dcre/tinet/tinet_kernel_defs.h
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/tinet/tinet_kernel_defs.h	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/tinet/tinet_kernel_defs.h	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /*
- *  ã«ã¼ãã«ã«é¢ããäºææ§å®ç¾©ãã¡ã¤ã«
+ *  カーネルに関する互換性定義ファイル
  */
 
@@ -56,51 +44,51 @@
 
 /*
- *  ãã¼ã¿åã®å®ç¾©ï¼inttype.hï¼
+ *  データ型の定義（inttype.h）
  */
 
 #ifdef _int8_
-typedef _int8_			int8_t;		/* ç¬¦å·ä»ã 8 ãããæ´æ° */
-typedef unsigned _int8_		uint8_t;	/* ç¬¦å·ç¡ã 8 ãããæ´æ° */
+typedef _int8_			int8_t;		/* 符号付き 8 ビット整数 */
+typedef unsigned _int8_		uint8_t;	/* 符号無し 8 ビット整数 */
 #endif	/* of #ifdef _int8_ */
 
 #ifdef _int16_
-typedef _int16_			int16_t;	/* ç¬¦å·ä»ã 16 ãããæ´æ° */
-typedef unsigned _int16_	uint16_t;	/* ç¬¦å·ç¡ã 16 ãããæ´æ° */
+typedef _int16_			int16_t;	/* 符号付き 16 ビット整数 */
+typedef unsigned _int16_	uint16_t;	/* 符号無し 16 ビット整数 */
 #endif	/* of #ifdef _int16_ */
 
 #ifdef _int32_
-typedef _int32_			int32_t;	/* ç¬¦å·ä»ã 32 ãããæ´æ° */
-typedef unsigned _int32_	uint32_t;	/* ç¬¦å·ç¡ã 32 ãããæ´æ° */
+typedef _int32_			int32_t;	/* 符号付き 32 ビット整数 */
+typedef unsigned _int32_	uint32_t;	/* 符号無し 32 ビット整数 */
 #endif	/* of #ifdef _int32_ */
 
 #ifdef _int64_
-typedef unsigned _int64_	uint64_t;	/* ç¬¦å·ç¡ã 64 ãããæ´æ° */
+typedef unsigned _int64_	uint64_t;	/* 符号無し 64 ビット整数 */
 #endif	/* of #ifdef _int64_ */
 
-typedef signed int		int_t;		/* èªç¶ãªãµã¤ãºã®ç¬¦å·ä»ãæ´æ° */
-typedef unsigned int		uint_t;		/* èªç¶ãªãµã¤ãºã®ç¬¦å·ç¡ãæ´æ° */
+typedef signed int		int_t;		/* 自然なサイズの符号付き整数 */
+typedef unsigned int		uint_t;		/* 自然なサイズの符号無し整数 */
 
-typedef signed long		long_t;		/* é·ãã®ãµã¤ãºã®ç¬¦å·ä»ãæ´æ° */
-typedef unsigned long		ulong_t;	/* é·ãã®ãµã¤ãºã®ç¬¦å·ç¡ãæ´æ° */
+typedef signed long		long_t;		/* 長めのサイズの符号付き整数 */
+typedef unsigned long		ulong_t;	/* 長めのサイズの符号無し整数 */
 
 #ifdef _vp_int_
-typedef _vp_int_		intptr_t;	/* ãã¤ã³ã¿ã¾ãã¯ç¬¦å·ä»ãæ´æ° */
+typedef _vp_int_		intptr_t;	/* ポインタまたは符号付き整数 */
 #else	/* of #ifdef _vp_int_ */
-typedef VP			intptr_t;	/* ãã¤ã³ã¿ã¾ãã¯ç¬¦å·ä»ãæ´æ° */
+typedef VP			intptr_t;	/* ポインタまたは符号付き整数 */
 #endif	/* of #ifdef _vp_int_ */
 
-typedef int			bool_t;		/* çå½å¤ */
+typedef int			bool_t;		/* 真偽値 */
 
 #ifndef true
-#define true			1		/* ç */
+#define true			1		/* 真 */
 #endif /* true */
 
 #ifndef false
-#define false			0		/* å½ */
+#define false			0		/* 偽 */
 #endif /* false */
 
 #endif	/* of #ifndef _MACRO_ONLY */
 
-/* æ§é ä½ structure ä¸­ã®ãã£ã¼ã«ã field ã®ãã¤ãä½ç½®ãè¿ããã¯ã­ */
+/* 構造体 structure 中のフィールド field のバイト位置を返すマクロ */
 #ifndef offsetof
 #define offsetof(structure, field) ((size_t) &(((structure *) 0)->field))
@@ -108,12 +96,12 @@
 
 /*
- *  æ´æ°å®æ°ãä½ããã¯ã­
+ *  整数定数を作るマクロ
  */
 #ifndef UINT_C
-#define UINT_C(val)		(val ## U)	/* uint_tåã®å®æ°ãä½ããã¯ã­ */
+#define UINT_C(val)		(val ## U)	/* uint_t型の定数を作るマクロ */
 #endif /* UINT_C */
 
 #ifndef ULONG_C
-#define ULONG_C(val)		(val ## UL)	/* ulong_tåã®å®æ°ãä½ããã¯ã­ */
+#define ULONG_C(val)		(val ## UL)	/* ulong_t型の定数を作るマクロ */
 #endif /* ULONG_C */
 
Index: azure_iot_hub/trunk/asp3_dcre/utils/applyrename.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/utils/applyrename.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/utils/applyrename.rb	(revision 389)
@@ -10,47 +10,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -60,5 +45,5 @@
 
 #
-#  ãã¡ã¤ã«ã«ãªãã¼ã ãé©ç¨ãã
+#  ファイルにリネームを適用する
 #
 def applyRename(inFileName, syms)
@@ -82,10 +67,8 @@
 
   if FileUtils.cmp(inFileName, outFileName)
-    # ãã¡ã¤ã«ã®å
-å®¹ãå¤åããªãã£ãå ´å
+    # ファイルの内容が変化しなかった場合
     FileUtils.remove(outFileName)
   else
-    # ãã¡ã¤ã«ã®å
-å®¹ãå¤åããå ´å
+    # ファイルの内容が変化した場合
     FileUtils.move(inFileName, inFileName + ".bak")
     FileUtils.move(outFileName, inFileName)
@@ -95,5 +78,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯
+#  エラーチェック
 #
 if ARGV.length < 1
@@ -102,5 +85,5 @@
 
 #
-#  åæå
+#  初期化
 #
 syms = []
@@ -108,5 +91,5 @@
 
 #
-#  ã·ã³ãã«ãªã¹ããèª­ã¿è¾¼ã
+#  シンボルリストを読み込む
 #
 defFileName = name + "_rename.def"
@@ -130,5 +113,5 @@
 
 #
-#  ãã¡ã¤ã«ã«ãªãã¼ã ãé©ç¨ãã
+#  ファイルにリネームを適用する
 #
 ARGV.each do |inFileName|
Index: azure_iot_hub/trunk/asp3_dcre/utils/genrename.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/utils/genrename.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/utils/genrename.rb	(revision 389)
@@ -10,47 +10,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -58,6 +43,5 @@
 
 #
-#  å
-é ­ã«ã¤ããæå­å
+#  先頭につける文字列
 #
 def prefixString(sym)
@@ -70,5 +54,5 @@
 
 #
-#  ãªãã¼ã å®ç¾©ãçæãã
+#  リネーム定義を生成する
 #
 def generateDefine(outFile, sym, prefix)
@@ -79,5 +63,5 @@
 
 #
-#  ãªãã¼ã è§£é¤ãçæãã
+#  リネーム解除を生成する
 #
 def generateUndef(outFile, sym, prefix)
@@ -86,5 +70,5 @@
 
 #
-#  ã³ã¡ã³ããçæãã
+#  コメントを生成する
 #
 def generateComment(outFile, comment)
@@ -95,5 +79,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯
+#  エラーチェック
 #
 if ARGV.length < 1
@@ -102,5 +86,5 @@
 
 #
-#  åæå
+#  初期化
 #
 syms = []
@@ -112,5 +96,5 @@
 
 #
-#  ã·ã³ãã«ãªã¹ããèª­ã¿è¾¼ã
+#  シンボルリストを読み込む
 #
 begin
@@ -125,5 +109,5 @@
 
 #
-#  ???_rename.h ãçæãã
+#  ???_rename.h を生成する
 #
 begin
@@ -162,5 +146,5 @@
 
 #
-#  ???_unrename.h ãçæãã
+#  ???_unrename.h を生成する
 #
 begin
Index: azure_iot_hub/trunk/asp3_dcre/utils/gentest.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/utils/gentest.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/utils/gentest.rb	(revision 389)
@@ -8,47 +8,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -56,9 +41,9 @@
 
 #
-#		ãã¹ããã­ã°ã©ã çæãã¼ã«
+#		テストプログラム生成ツール
 #
 	
 #
-#  çæåä½ãæ±ºããããã®è¨­å®
+#  生成動作を決めるための設定
 #
 $parameterDefinition = {
@@ -117,17 +102,17 @@
 
 #
-#  å¦çåä½ã®ã³ã¼ããæ ¼ç´ããã¯ã©ã¹
+#  処理単位のコードを格納するクラス
 #
 class PUCode
-  # åæå
+  # 初期化
   def initialize(puName)
-    @puName = puName						# å¦çåä½ã®åå
-    @currentCount = ""						# å¦çã«ã¦ã³ã
-    @countFlag = false						# å¦çã«ã¦ã³ããä½¿ãããã
-    @code = Hash.new { |h,k| h[k] = [] }	# å¦çåä½ã®ã³ã¼ã
-    @variableList = {}						# å¦çåä½ã®å¤æ°
-    @silFlag = false						# SILãä½¿ãããã
-
-    # å¦çã«ã¦ã³ãå¤æ°åã®çæ
+    @puName = puName						# 処理単位の名前
+    @currentCount = ""						# 処理カウント
+    @countFlag = false						# 処理カウントが使われたか
+    @code = Hash.new { |h,k| h[k] = [] }	# 処理単位のコード
+    @variableList = {}						# 処理単位の変数
+    @silFlag = false						# SILが使われたか
+
+    # 処理カウント変数名の生成
     case puName
     when /^TASK([0-9]*)$/
@@ -152,5 +137,5 @@
   end
 
-  # å¦çã«ã¦ã³ãã®è¨­å®
+  # 処理カウントの設定
   def setCount(count)
     @countFlag = true if count != ""
@@ -158,5 +143,5 @@
   end
 
-  # å¦çã«ã¦ã³ãã®ã¤ã³ã¯ãªã¡ã³ã
+  # 処理カウントのインクリメント
   def incrementCount
     if @currentCount != ""
@@ -165,5 +150,5 @@
   end
 
-  # ã³ã¼ãã®è¿½å 
+  # コードの追加
   def append(*lines)
     lines.each do |line|
@@ -172,25 +157,25 @@
   end
 
-  # å¤æ°ã®è¿½å 
+  # 変数の追加
   def addVariable(varName, typeName)
     @variableList[varName] = typeName
   end
 
-  # SILã®ä½¿ç¨
+  # SILの使用
   def useSil
     @silFlag = true
   end
 
-  # å¦çåä½ã®ã³ã¼ãã®åºå
+  # 処理単位のコードの出力
   def generateCode
-    # ä¸è¦ãªå¦çåä½ã®å¤å®
+    # 不要な処理単位の判定
     return if @code.length == 0
 
-    # å¦çã«ã¦ã³ãå¤æ°ã®çæ
+    # 処理カウント変数の生成
     if @countFlag
       print("\nstatic uint_t\t#{@count_var} = 0;\n")
     end
 
-    # é¢æ°ãããã®çæ
+    # 関数ヘッダの生成
     case @puName
     when /^TASK([0-9]*)$/
@@ -282,5 +267,5 @@
 
 #
-#  ãµã¼ãã¹ã³ã¼ã«å¼ã³åºãã®èª­ã¿è¾¼ã¿
+#  サービスコール呼び出しの読み込み
 #
 def genServiceCall(pu, svc_call, error_code)
@@ -303,8 +288,8 @@
 
   if !error_code
-    # E_OKãè¿ãå ´å
+    # E_OKが返る場合
     pu.append("\tcheck_ercd(ercd, E_OK);", "")
   elsif error_code == "noreturn"
-    # ãªã¿ã¼ã³ããªãå ´å
+    # リターンしない場合
     pu.append("")
   else
@@ -314,8 +299,8 @@
 
 #
-#  ãã¹ãéå§ã³ã¼ãã®çæ
+#  テスト開始コードの生成
 #
 def testStartCode(pu)
-  # ãã¹ãéå§ã³ã¼ãã¯ä¸åº¦ã®ã¿åºåãã
+  # テスト開始コードは一度のみ出力する
   if $startFlag == 0
     pu.append("\ttest_start(__FILE__);", "")
@@ -325,5 +310,5 @@
 
 #
-#  ã¿ã¼ã²ããä¾å­é¨é¢æ°ã®æ¯ãèãã®èª­ã¿è¾¼ã¿
+#  ターゲット依存部関数の振る舞いの読み込み
 #
 def targetFunction(line, checkNum)
@@ -332,5 +317,5 @@
     line = $2
     if (pu = $puList[functionName]).nil?
-      # æ°ããå¦çåä½ã®çæ
+      # 新しい処理単位の生成
       pu = $puList[functionName] = PUCode.new(functionName)
       pu.setCount("1")
@@ -362,14 +347,14 @@
 
 #
-#  ãã¹ãã¹ã¯ãªããã®èª­ã¿è¾¼ã¿
+#  テストスクリプトの読み込み
 #
 def parseLine(line)
   if /^==\s*(([a-zA-Z_]+)[0-9]*)(.*)$/ =~ line
-    # å¦çåä½ã®éå§
+    # 処理単位の開始
     $procFlag = 1
     puName = $1
     line2 = $3
     if (pu = $puList[puName]).nil?
-      # æ°ããå¦çåä½ã®çæ
+      # 新しい処理単位の生成
       pu = $puList[puName] = PUCode.new(puName)
     end
@@ -388,5 +373,5 @@
     pu = $currentPu
     if /^([0-9]+\:)\s*(.*)$/ =~ line
-      # ãã§ãã¯ãã¤ã³ãçªå·ã®å¦ç
+      # チェックポイント番号の処理
       originalCheckNum = $1
       line = $2
@@ -433,5 +418,5 @@
 
 #
-#  ã¨ã©ã¼ãã§ãã¯
+#  エラーチェック
 #
 if ARGV.length < 1
@@ -440,16 +425,16 @@
 
 #
-#  åæå
+#  初期化
 #
 inFileName = ARGV.shift
 
 #
-#  ã¹ã¯ãªãããã¡ã¤ã«èª­ã¿è¾¼ã¿å¦ç
-#
-$lastCheckPoint = 0		# æå¾ã®ãã§ãã¯ãã¤ã³ãçªå·
-$procFlag = 0				# ã¹ã¯ãªããå¦çä¸­ãã©ã°
-$startFlag = 0			# ãã¹ãéå§ã³ã¼ãã®åºåãã©ã°
-$currentPu = nil			# èª­ã¿è¾¼ã¿ä¸­ã®å¦çåä½
-$puList = {}				# å¦çåä½ã®ãªã¹ã
+#  スクリプトファイル読み込み処理
+#
+$lastCheckPoint = 0		# 最後のチェックポイント番号
+$procFlag = 0				# スクリプト処理中フラグ
+$startFlag = 0			# テスト開始コードの出力フラグ
+$currentPu = nil			# 読み込み中の処理単位
+$puList = {}				# 処理単位のリスト
 
 begin
@@ -481,5 +466,5 @@
 
 #
-#  ãã¹ããã­ã°ã©ã åºåå¦ç
+#  テストプログラム出力処理
 #
 $puList.keys.sort.each do |puName|
Index: azure_iot_hub/trunk/asp3_dcre/utils/makerelease.rb
===================================================================
--- azure_iot_hub/trunk/asp3_dcre/utils/makerelease.rb	(revision 388)
+++ azure_iot_hub/trunk/asp3_dcre/utils/makerelease.rb	(revision 389)
@@ -8,47 +8,32 @@
 #              Graduate School of Information Science, Nagoya Univ., JAPAN
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  $Id$
@@ -58,8 +43,8 @@
 
 #
-#  ".."ãå«ããã¹ã®æ´å½¢
+#  ".."を含むパスの整形
 #
-#  ä¾ï¼"yyy/../zzz" â "zzz"
-#  ä¾ï¼"xxx/yyy/../zzz" â "xxx/zzz"
+#  例）"yyy/../zzz" → "zzz"
+#  例）"xxx/yyy/../zzz" → "xxx/zzz"
 #
 def canonicalPath(path)
@@ -69,5 +54,5 @@
 
 #
-#  ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿
+#  ファイルの読み込み
 #
 def readFile(inFileName)
@@ -135,5 +120,5 @@
 
 #
-#  åæå
+#  初期化
 #
 $package = ""
@@ -143,5 +128,5 @@
 
 #
-#  ããªãã£ãã¯ã¹ï¼./ã«ã¬ã³ããã£ã¬ã¯ããªåï¼ã®åãåºã
+#  プリフィックス（./カレントディレクトリ名）の取り出し
 #
 cwd = Shell.new.cwd
@@ -149,5 +134,5 @@
 
 #
-#  ãã©ã¡ã¼ã¿ã®åãåºã
+#  パラメータの取り出し
 #
 if ARGV.length >= 1
@@ -160,5 +145,5 @@
 
 #
-#  ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿
+#  ファイルの読み込み
 #
 readFile(arg)
@@ -171,5 +156,5 @@
 
 #
-#  RELEASEãã£ã¬ã¯ããªã®ä½æ
+#  RELEASEディレクトリの作成
 #
 if !File.directory?("RELEASE")
@@ -178,5 +163,5 @@
 
 #
-#  ã¢ã¼ã«ã¤ãï¼.tar.gzï¼ã®ä½æ
+#  アーカイブ（.tar.gz）の作成
 #
 archiveName = $package + "-" + $version + ".tar.gz"
Index: azure_iot_hub/trunk/azure_iothub/.cproject
===================================================================
--- azure_iot_hub/trunk/azure_iothub/.cproject	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/.cproject	(revision 389)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+	<storageModule moduleId="org.eclipse.cdt.core.settings">
+		<cconfiguration id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib.1147582331">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib.1147582331" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/app_iothub_client"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/azure_iothub"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/app_iothub_client/Debug"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/azure_iothub/Debug"/>
+						<entry flags="RESOLVED" kind="libraryFile" name="app_iothub_client" srcPrefixMapping="" srcRootPath=""/>
+						<entry flags="RESOLVED" kind="libraryFile" name="azure_iothub" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="com.renesas.cdt.managedbuild.core.toolchainInfo">
+				<option id="toolchain.id" value="RENESAS_GCC_RX"/>
+				<option id="toolchain.version" value="4.8.4.201803"/>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib.1147582331" name="Debug" parent="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib">
+					<folderInfo id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib.1147582331." name="/" resourcePath="">
+						<toolChain id="com.renesas.cdt.managedbuild.gcc.rx.ui.toolChain.debug.lib.1204364355" name="GCC for Renesas RX" superClass="com.renesas.cdt.managedbuild.gcc.rx.ui.toolChain.debug.lib">
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.optimization.optimizationLevel.1522851200" name="Optimization Level" superClass="com.renesas.cdt.managedbuild.gcc.core.option.optimization.optimizationLevel" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.optimization.optimizationLevel.debug" valueType="enumerated"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.optimization.fdatasections.232071790" name="Data sections (-fdata-sections)" superClass="com.renesas.cdt.managedbuild.gcc.core.option.optimization.fdatasections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.debug.debugFormat.2049562845" name="Debug format" superClass="com.renesas.cdt.managedbuild.gcc.core.option.debug.debugFormat" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.debug.debugFormat.Default" valueType="enumerated"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture.2140028846" name="Architecture" superClass="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.gcc.rx.architecture.v1" valueType="enumerated"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture.applicability.495364278" name="Architecture Applicability" superClass="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture.applicability" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.deviceShortName.284528877" name="DeviceName" superClass="com.renesas.cdt.managedbuild.gcc.core.option.deviceShortName" useByScannerDiscovery="false" value="R5F563NBDxFP" valueType="string"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.deviceCommand.1123020123" name="DeviceCommand" superClass="com.renesas.cdt.managedbuild.gcc.core.option.deviceCommand" useByScannerDiscovery="false" value="R5F563NB" valueType="string"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.optimization.functionsections.1608575239" name="Function sections (-ffunction-sections)" superClass="com.renesas.cdt.managedbuild.gcc.core.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.cpu.64bitdouble.1748526067" name="Make the double data type be 64 bits in size" superClass="com.renesas.cdt.managedbuild.gcc.core.option.cpu.64bitdouble" useByScannerDiscovery="true" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.debug.warnStackSize.211865635" name="Warn if stack size exceeds the limit (-Wstack-usage) (H')" superClass="com.renesas.cdt.managedbuild.gcc.core.option.debug.warnStackSize" useByScannerDiscovery="false" value="100" valueType="string"/>
+							<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.gcc.core.option.debug.otherFlags.540013108" name="Other flags" superClass="com.renesas.cdt.managedbuild.gcc.core.option.debug.otherFlags" useByScannerDiscovery="false" valueType="stringList">
+								<listOptionValue builtIn="false" value="-nostdinc"/>
+							</option>
+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.renesas.cdt.managedbuild.gcc.core.targetPlatform.586655381" isAbstract="false" osList="all" superClass="com.renesas.cdt.managedbuild.gcc.core.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/app_iothub_client}/Debug" id="com.renesas.cdt.managedbuild.gcc.core.builder.2039692157" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GCC for Renesas Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.renesas.cdt.managedbuild.gcc.core.builder"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.libgen.1941731977" name="Library Generator" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.libgen">
+								<option id="com.renesas.cdt.managedbuild.gcc.rx.option.selectlibrary.541067605" name="Select Library" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.selectlibrary" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.librarygenerator.settings.selectLibrary.newLib" valueType="enumerated"/>
+								<option id="com.renesas.cdt.managedbuild.gcc.rx.option.libraryType.936774991" name="Library type" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.libraryType" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.librarygenerator.settings.libraryType.preBuilt" valueType="enumerated"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.compiler.1209063629" name="Compiler" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.compiler">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir.149607231" name="Include file directories" superClass="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir" useByScannerDiscovery="false" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/musl-1.1.18/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/include}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/mbed}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/arch/gcc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/arch/rx630_gcc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/asp3_dcre/target/gr_sakura_gcc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/c-utility/inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/c-utility/pal/toppers}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/iothub_client/inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/iothub_client/inc/internal}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/deps/parson}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/umqtt/inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/wolfssl-3.15.7/wolfssl}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/wolfssl-3.15.7/wolfssl/wolfcrypt}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/wolfssl-3.15.7}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/curl-7.57.0/include}&quot;"/>
+								</option>
+								<option id="com.renesas.cdt.managedbuild.gcc.core.option.compiler.source.std.1830375473" name="Language standard" superClass="com.renesas.cdt.managedbuild.gcc.core.option.compiler.source.std" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.compiler.common.gnu99" valueType="enumerated"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.macroDefines.526399039" name="Macro Defines" superClass="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.macroDefines" useByScannerDiscovery="false" valueType="definedSymbols">
+									<listOptionValue builtIn="false" value="USE_WOLFSSL=1"/>
+								</option>
+								<inputType id="com.renesas.cdt.managedbuild.gcc.core.inputType.compiler.c.1180149000" superClass="com.renesas.cdt.managedbuild.gcc.core.inputType.compiler.c"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.compiler.1418116643" name="Compiler CPP" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.compiler">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir.661908907" name="Include file directories" superClass="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir" useByScannerDiscovery="false" valueType="includePath"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.assembler.431159709" name="Assembler" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.assembler">
+								<option id="com.renesas.cdt.managedbuild.gcc.core.option.assembler.source.usepreprocessor.1619298191" name="Use preprocessor" superClass="com.renesas.cdt.managedbuild.gcc.core.option.assembler.source.usepreprocessor" useByScannerDiscovery="false"/>
+								<inputType id="com.renesas.cdt.managedbuild.gcc.core.inputType.assembler.670000795" superClass="com.renesas.cdt.managedbuild.gcc.core.inputType.assembler"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.linker.2007197882" name="Linker" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.linker">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.rx.option.linker.archives.archiveSearchDirectories.1948958568" name="Standard archive search directories" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.linker.archives.archiveSearchDirectories" useByScannerDiscovery="false" valueType="stringList"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.linker.1001918836" name="Linker CPP" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.linker">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.rx.option.linker.cpp.archives.archiveSearchDirectories.460388117" name="Standard archive search directories" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.linker.cpp.archives.archiveSearchDirectories" useByScannerDiscovery="false" valueType="stringList"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.objcopy.1400446087" name="Objcopy" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.objcopy"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.archiver.875651585" name="Archiver" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry excluding="adapters/httpapi_compact.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="c-utility"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="certs"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="deps"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="iothub_client"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="umqtt"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+		<cconfiguration id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib.1078548993">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib.1078548993" moduleId="org.eclipse.cdt.core.settings" name="Release">
+				<externalSettings>
+					<externalSetting>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/app_iothub_client"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/azure_iothub"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/app_iothub_client/Release"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/azure_iothub/Release"/>
+						<entry flags="RESOLVED" kind="libraryFile" name="app_iothub_client" srcPrefixMapping="" srcRootPath=""/>
+						<entry flags="RESOLVED" kind="libraryFile" name="azure_iothub" srcPrefixMapping="" srcRootPath=""/>
+					</externalSetting>
+				</externalSettings>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="com.renesas.cdt.managedbuild.core.toolchainInfo">
+				<option id="toolchain.id" value="RENESAS_GCC_RX"/>
+				<option id="toolchain.version" value="4.8.4.201803"/>
+			</storageModule>
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf *.lst *.lis *.lpp *.map" description="" id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib.1078548993" name="Release" parent="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib">
+					<folderInfo id="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib.1078548993." name="/" resourcePath="">
+						<toolChain id="com.renesas.cdt.managedbuild.gcc.rx.ui.toolChain.release.lib.1498412657" name="GCC for Renesas RX" superClass="com.renesas.cdt.managedbuild.gcc.rx.ui.toolChain.release.lib">
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.optimization.optimizationLevel.852772146" name="Optimization Level" superClass="com.renesas.cdt.managedbuild.gcc.core.option.optimization.optimizationLevel" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.optimization.optimizationLevel.codeSize" valueType="enumerated"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.optimization.fdatasections.373471077" name="Data sections (-fdata-sections)" superClass="com.renesas.cdt.managedbuild.gcc.core.option.optimization.fdatasections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.debug.debugFormat.1306817090" name="Debug format" superClass="com.renesas.cdt.managedbuild.gcc.core.option.debug.debugFormat" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.debug.debugFormat.Default" valueType="enumerated"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture.567171323" name="Architecture" superClass="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.gcc.rx.architecture.v1" valueType="enumerated"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture.applicability.1630219768" name="Architecture Applicability" superClass="com.renesas.cdt.managedbuild.gcc.core.option.cpu.architecture.applicability" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.deviceShortName.1117446994" name="DeviceName" superClass="com.renesas.cdt.managedbuild.gcc.core.option.deviceShortName" useByScannerDiscovery="false" value="R5F563NBDxFP" valueType="string"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.deviceCommand.1867113554" name="DeviceCommand" superClass="com.renesas.cdt.managedbuild.gcc.core.option.deviceCommand" useByScannerDiscovery="false" value="R5F563NB" valueType="string"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.optimization.functionsections.578508159" name="Function sections (-ffunction-sections)" superClass="com.renesas.cdt.managedbuild.gcc.core.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.cpu.64bitdouble.643923291" name="Make the double data type be 64 bits in size" superClass="com.renesas.cdt.managedbuild.gcc.core.option.cpu.64bitdouble" useByScannerDiscovery="true" value="true" valueType="boolean"/>
+							<option id="com.renesas.cdt.managedbuild.gcc.core.option.debug.warnStackSize.1803245489" name="Warn if stack size exceeds the limit (-Wstack-usage) (H')" superClass="com.renesas.cdt.managedbuild.gcc.core.option.debug.warnStackSize" useByScannerDiscovery="false" value="100" valueType="string"/>
+							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.renesas.cdt.managedbuild.gcc.core.targetPlatform.1836433679" isAbstract="false" osList="all" superClass="com.renesas.cdt.managedbuild.gcc.core.targetPlatform"/>
+							<builder buildPath="${workspace_loc:/app_iothub_client}/Release" id="com.renesas.cdt.managedbuild.gcc.core.builder.187337495" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GCC for Renesas Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.renesas.cdt.managedbuild.gcc.core.builder"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.libgen.1543655645" name="Library Generator" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.libgen">
+								<option id="com.renesas.cdt.managedbuild.gcc.rx.option.selectlibrary.1491495817" name="Select Library" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.selectlibrary" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.librarygenerator.settings.selectLibrary.newLib" valueType="enumerated"/>
+								<option id="com.renesas.cdt.managedbuild.gcc.rx.option.libraryType.85800918" name="Library type" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.libraryType" useByScannerDiscovery="true" value="com.renesas.cdt.managedbuild.gcc.core.option.librarygenerator.settings.libraryType.preBuilt" valueType="enumerated"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.compiler.699345248" name="Compiler" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.compiler">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir.2108290367" name="Include file directories" superClass="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir" useByScannerDiscovery="false" valueType="includePath"/>
+								<inputType id="com.renesas.cdt.managedbuild.gcc.core.inputType.compiler.c.2118951029" superClass="com.renesas.cdt.managedbuild.gcc.core.inputType.compiler.c"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.compiler.506062600" name="Compiler CPP" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.compiler">
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir.1189215111" name="Include file directories" superClass="com.renesas.cdt.managedbuild.gcc.core.option.compiler.includes.includeFileDir" useByScannerDiscovery="false" valueType="includePath"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.assembler.1875322534" name="Assembler" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.assembler">
+								<option id="com.renesas.cdt.managedbuild.gcc.core.option.assembler.source.usepreprocessor.1936342554" name="Use preprocessor" superClass="com.renesas.cdt.managedbuild.gcc.core.option.assembler.source.usepreprocessor" useByScannerDiscovery="false"/>
+								<inputType id="com.renesas.cdt.managedbuild.gcc.core.inputType.assembler.601724157" superClass="com.renesas.cdt.managedbuild.gcc.core.inputType.assembler"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.linker.929926370" name="Linker" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.linker">
+								<option id="com.renesas.cdt.managedbuild.gcc.core.option.linker.misc.inputsections.1692252399" name="Enable garbage collection of unused input sections(-gc-sections)" superClass="com.renesas.cdt.managedbuild.gcc.core.option.linker.misc.inputsections" useByScannerDiscovery="false"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.rx.option.linker.archives.archiveSearchDirectories.1575007580" name="Standard archive search directories" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.linker.archives.archiveSearchDirectories" useByScannerDiscovery="false" valueType="stringList"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.linker.1418459446" name="Linker CPP" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.cpp.linker">
+								<option id="com.renesas.cdt.managedbuild.gcc.core.option.linker.misc.inputsections.849703273" name="Enable garbage collection of unused input sections(-gc-sections)" superClass="com.renesas.cdt.managedbuild.gcc.core.option.linker.misc.inputsections" useByScannerDiscovery="false"/>
+								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.gcc.rx.option.linker.cpp.archives.archiveSearchDirectories.762644511" name="Standard archive search directories" superClass="com.renesas.cdt.managedbuild.gcc.rx.option.linker.cpp.archives.archiveSearchDirectories" useByScannerDiscovery="false" valueType="stringList"/>
+							</tool>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.objcopy.760889558" name="Objcopy" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.objcopy"/>
+							<tool id="com.renesas.cdt.managedbuild.gcc.rx.tool.archiver.1601305310" name="Archiver" superClass="com.renesas.cdt.managedbuild.gcc.rx.tool.archiver"/>
+						</toolChain>
+					</folderInfo>
+					<sourceEntries>
+						<entry excluding="adapters/httpapi_compact.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="c-utility"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="certs"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="deps"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="iothub_client"/>
+						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="umqtt"/>
+					</sourceEntries>
+				</configuration>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="app_iothub_client.com.renesas.cdt.managedbuild.gcc.rx.ui.projectType.lib.173965709" name="static ã©ã¤ãã©ãªã¼" projectType="com.renesas.cdt.managedbuild.gcc.rx.ui.projectType.lib"/>
+	</storageModule>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		<scannerConfigBuildInfo instanceId="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib.1078548993;com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.release.lib.1078548993.;com.renesas.cdt.managedbuild.gcc.rx.tool.compiler.699345248;com.renesas.cdt.managedbuild.gcc.core.inputType.compiler.c.2118951029">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib.1147582331;com.renesas.cdt.managedbuild.gcc.rx.ui.configuration.debug.lib.1147582331.;com.renesas.cdt.managedbuild.gcc.rx.tool.compiler.1209063629;com.renesas.cdt.managedbuild.gcc.core.inputType.compiler.c.1180149000">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+	<storageModule moduleId="refreshScope"/>
+</cproject>
Index: azure_iot_hub/trunk/azure_iothub/.project
===================================================================
--- azure_iot_hub/trunk/azure_iothub/.project	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/.project	(revision 389)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>azure_iothub</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+	</natures>
+</projectDescription>
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/agenttime_mbed.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/agenttime_mbed.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/agenttime_mbed.c	(revision 389)
@@ -0,0 +1,28 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "azure_c_shared_utility/agenttime.h"
+
+// mbed version of gmtime() returns NULL.
+// system RTC should be set to UTC as its localtime 
+
+time_t get_time(time_t* currentTime)
+{
+    return time(currentTime);
+}
+
+double get_difftime(time_t stopTime, time_t startTime)
+{
+    return difftime(stopTime, startTime);
+}
+
+
+struct tm* get_gmtime(time_t* currentTime)
+{
+    return localtime(currentTime);
+}
+
+char* get_ctime(time_t* timeToGet)
+{
+    return ctime(timeToGet);
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/httpapi_compact.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/httpapi_compact.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/httpapi_compact.c	(revision 389)
@@ -0,0 +1,1570 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <limits.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/httpheaders.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/tlsio.h"
+#include "azure_c_shared_utility/threadapi.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+#include "azure_c_shared_utility/http_proxy_io.h"
+
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_001: [ The httpapi_compact shall implement the methods defined by the httpapi.h. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_002: [ The httpapi_compact shall support the http requests. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_003: [ The httpapi_compact shall return error codes defined by HTTPAPI_RESULT. ]*/
+#include "azure_c_shared_utility/httpapi.h"
+
+#define MAX_HOSTNAME     64
+#define TEMP_BUFFER_SIZE 1024
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_077: [ The HTTPAPI_ExecuteRequest shall wait, at least, 10 seconds for the SSL open process. ]*/
+#define MAX_OPEN_RETRY   100
+/*Codes_SRS_HTTPAPI_COMPACT_21_084: [ The HTTPAPI_CloseConnection shall wait, at least, 10 seconds for the SSL close process. ]*/
+#define MAX_CLOSE_RETRY   100
+/*Codes_SRS_HTTPAPI_COMPACT_21_079: [ The HTTPAPI_ExecuteRequest shall wait, at least, 20 seconds to send a buffer using the SSL connection. ]*/
+#define MAX_SEND_RETRY   200
+/*Codes_SRS_HTTPAPI_COMPACT_21_081: [ The HTTPAPI_ExecuteRequest shall try to read the message with the response up to 20 seconds. ]*/
+#define MAX_RECEIVE_RETRY   200
+/*Codes_SRS_HTTPAPI_COMPACT_21_083: [ The HTTPAPI_ExecuteRequest shall wait, at least, 100 milliseconds between retries. ]*/
+#define RETRY_INTERVAL_IN_MICROSECONDS  100
+
+MU_DEFINE_ENUM_STRINGS(HTTPAPI_RESULT, HTTPAPI_RESULT_VALUES)
+
+typedef struct HTTP_HANDLE_DATA_TAG
+{
+    char*           hostName;
+    char*           certificate;
+    char*           x509ClientCertificate;
+    char*           x509ClientPrivateKey;
+    const char*     proxy_host;
+    int             proxy_port;
+    const char*     proxy_username;
+    const char*     proxy_password;
+    XIO_HANDLE      xio_handle;
+    size_t          received_bytes_count;
+    unsigned char*  received_bytes;
+    unsigned int    is_io_error : 1;
+    unsigned int    is_connected : 1;
+    unsigned int    send_completed : 1;
+} HTTP_HANDLE_DATA;
+
+/*the following function does the same as sscanf(pos2, "%d", &sec)*/
+/*this function only exists because some of platforms do not have sscanf. */
+static int ParseStringToDecimal(const char *src, int* dst)
+{
+    int result;
+    char* next;
+    long num = strtol(src, &next, 0);
+    if (src == next || num < INT_MIN || num > INT_MAX)
+    {
+        result = EOF;
+    }
+    else
+    {
+        result = 1;
+    }
+    if (num < INT_MIN) num = INT_MIN;
+    if (num > INT_MAX) num = INT_MAX;
+    *dst = (int)num;
+    return result;
+}
+
+/*the following function does the same as sscanf(pos2, "%x", &sec)*/
+/*this function only exists because some of platforms do not have sscanf. This is not a full implementation; it only works with well-defined x numbers. */
+#define HEXA_DIGIT_VAL(c)         (((c>='0') && (c<='9')) ? (c-'0') : ((c>='a') && (c<='f')) ? (c-'a'+10) : ((c>='A') && (c<='F')) ? (c-'A'+10) : -1)
+static int ParseStringToHexadecimal(const char *src, size_t* dst)
+{
+    int result;
+    int digitVal;
+    if (src == NULL)
+    {
+        result = EOF;
+    }
+    else if (HEXA_DIGIT_VAL(*src) == -1)
+    {
+        result = EOF;
+    }
+    else
+    {
+        (*dst) = 0;
+        while ((digitVal = HEXA_DIGIT_VAL(*src)) != -1)
+        {
+            (*dst) *= 0x10;
+            (*dst) += (size_t)digitVal;
+            src++;
+        }
+        result = 1;
+    }
+    return result;
+}
+
+/*the following function does the same as sscanf(buf, "HTTP/%*d.%*d %d %*[^\r\n]", &ret) */
+/*this function only exists because some of platforms do not have sscanf. This is not a full implementation; it only works with well-defined HTTP response. */
+static int  ParseHttpResponse(const char* src, int* dst)
+{
+    int result;
+    static const char HTTPPrefix[] = "HTTP/";
+    bool fail;
+    const char* runPrefix;
+
+    if ((src == NULL) || (dst == NULL))
+    {
+        result = EOF;
+    }
+    else
+    {
+        fail = false;
+        runPrefix = HTTPPrefix;
+
+        while((*runPrefix) != '\0')
+        {
+            if ((*runPrefix) != (*src))
+            {
+                fail = true;
+                break;
+            }
+            src++;
+            runPrefix++;
+        }
+
+        if (!fail)
+        {
+            while ((*src) != '.')
+            {
+                if ((*src) == '\0')
+                {
+                    fail = true;
+                    break;
+                }
+                src++;
+            }
+        }
+
+        if (!fail)
+        {
+            while ((*src) != ' ')
+            {
+                if ((*src) == '\0')
+                {
+                    fail = true;
+                    break;
+                }
+                src++;
+            }
+        }
+
+        if (fail)
+        {
+            result = EOF;
+        }
+        else
+        {
+            result = ParseStringToDecimal(src, dst);
+        }
+    }
+
+    return result;
+}
+
+HTTPAPI_RESULT HTTPAPI_Init(void)
+{
+/*Codes_SRS_HTTPAPI_COMPACT_21_004: [ The HTTPAPI_Init shall allocate all memory to control the http protocol. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_007: [ If there is not enough memory to control the http protocol, the HTTPAPI_Init shall return HTTPAPI_ALLOC_FAILED. ]*/
+/**
+ * No memory is necessary.
+ */
+
+ /*Codes_SRS_HTTPAPI_COMPACT_21_006: [ If HTTPAPI_Init succeed allocating all the needed memory, it shall return HTTPAPI_OK. ]*/
+return HTTPAPI_OK;
+}
+
+void HTTPAPI_Deinit(void)
+{
+    /*Codes_SRS_HTTPAPI_COMPACT_21_009: [ The HTTPAPI_Init shall release all memory allocated by the httpapi_compact. ]*/
+    /**
+    * No memory was necessary.
+    */
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_011: [ The HTTPAPI_CreateConnection shall create an http connection to the host specified by the hostName parameter. ]*/
+HTTP_HANDLE HTTPAPI_CreateConnection(const char* hostName)
+{
+    HTTP_HANDLE_DATA* http_instance;
+
+    if (hostName == NULL)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_014: [ If the hostName is NULL, the HTTPAPI_CreateConnection shall return NULL as the handle. ]*/
+        LogError("Invalid host name. Null hostName parameter.");
+        http_instance = NULL;
+    }
+    else if (*hostName == '\0')
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_015: [ If the hostName is empty, the HTTPAPI_CreateConnection shall return NULL as the handle. ]*/
+        LogError("Invalid host name. Empty string.");
+        http_instance = NULL;
+    }
+    else
+    {
+        http_instance = (HTTP_HANDLE_DATA*)malloc(sizeof(HTTP_HANDLE_DATA));
+        /*Codes_SRS_HTTPAPI_COMPACT_21_013: [ If there is not enough memory to control the http connection, the HTTPAPI_CreateConnection shall return NULL as the handle. ]*/
+        if (http_instance == NULL)
+        {
+            LogError("There is no memory to control the http connection");
+        }
+        else if(mallocAndStrcpy_s((char**)&(http_instance->hostName), hostName) != 0)
+        {
+            LogError("failure allocate host name");
+            free(http_instance);
+            http_instance = NULL;
+        }
+        else
+        {
+            http_instance->xio_handle = NULL;
+            http_instance->is_connected = 0;
+            http_instance->is_io_error = 0;
+            http_instance->received_bytes_count = 0;
+            http_instance->received_bytes = NULL;
+            http_instance->certificate = NULL;
+            http_instance->x509ClientCertificate = NULL;
+            http_instance->x509ClientPrivateKey = NULL;
+            http_instance->proxy_host = NULL;
+            http_instance->proxy_port = 0;
+            http_instance->proxy_username = NULL;
+            http_instance->proxy_password = NULL;
+        }
+    }
+
+    /*Codes_SRS_HTTPAPI_COMPACT_21_012: [ The HTTPAPI_CreateConnection shall return a non-NULL handle on success. ]*/
+    return (HTTP_HANDLE)http_instance;
+}
+
+static void on_io_close_complete(void* context)
+{
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)context;
+
+    if (http_instance != NULL)
+    {
+        http_instance->is_connected = 0;
+    }
+}
+
+void HTTPAPI_CloseConnection(HTTP_HANDLE handle)
+{
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)handle;
+
+    /*Codes_SRS_HTTPAPI_COMPACT_21_020: [ If the connection handle is NULL, the HTTPAPI_CloseConnection shall not do anything. ]*/
+    if (http_instance != NULL)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_019: [ If there is no previous connection, the HTTPAPI_CloseConnection shall not do anything. ]*/
+        if (http_instance->xio_handle != NULL)
+        {
+            http_instance->is_io_error = 0;
+            /*Codes_SRS_HTTPAPI_COMPACT_21_017: [ The HTTPAPI_CloseConnection shall close the connection previously created in HTTPAPI_ExecuteRequest. ]*/
+            if (xio_close(http_instance->xio_handle, on_io_close_complete, http_instance) != 0)
+            {
+                LogError("The SSL got error closing the connection");
+                /*Codes_SRS_HTTPAPI_COMPACT_21_087: [ If the xio return anything different than 0, the HTTPAPI_CloseConnection shall destroy the connection anyway. ]*/
+                http_instance->is_connected = 0;
+            }
+            else
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_084: [ The HTTPAPI_CloseConnection shall wait, at least, 10 seconds for the SSL close process. ]*/
+                int countRetry = MAX_CLOSE_RETRY;
+                while (http_instance->is_connected == 1)
+                {
+                    xio_dowork(http_instance->xio_handle);
+                    if ((countRetry--) < 0)
+                    {
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_085: [ If the HTTPAPI_CloseConnection retries 10 seconds to close the connection without success, it shall destroy the connection anyway. ]*/
+                        LogError("Close timeout. The SSL didn't close the connection");
+                        http_instance->is_connected = 0;
+                    }
+                    else if (http_instance->is_io_error == 1)
+                    {
+                        LogError("The SSL got error closing the connection");
+                        http_instance->is_connected = 0;
+                    }
+                    else if (http_instance->is_connected == 1)
+                    {
+                        LogInfo("Waiting for TLS close connection");
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_086: [ The HTTPAPI_CloseConnection shall wait, at least, 100 milliseconds between retries. ]*/
+                        ThreadAPI_Sleep(RETRY_INTERVAL_IN_MICROSECONDS);
+                    }
+                }
+            }
+            /*Codes_SRS_HTTPAPI_COMPACT_21_076: [ After close the connection, The HTTPAPI_CloseConnection shall destroy the connection previously created in HTTPAPI_CreateConnection. ]*/
+            xio_destroy(http_instance->xio_handle);
+        }
+
+        if (http_instance->hostName != NULL)
+        {
+            free((void*)http_instance->hostName);
+        }
+
+#ifndef DO_NOT_COPY_TRUSTED_CERTS_STRING
+        /*Codes_SRS_HTTPAPI_COMPACT_21_018: [ If there is a certificate associated to this connection, the HTTPAPI_CloseConnection shall free all allocated memory for the certificate. ]*/
+        if (http_instance->certificate)
+        {
+            free(http_instance->certificate);
+        }
+#endif
+
+        /*Codes_SRS_HTTPAPI_COMPACT_06_001: [ If there is a x509 client certificate associated to this connection, the HTTAPI_CloseConnection shall free all allocated memory for the certificate. ]*/
+        if (http_instance->x509ClientCertificate)
+        {
+            free(http_instance->x509ClientCertificate);
+        }
+
+        /*Codes_SRS_HTTPAPI_COMPACT_06_002: [ If there is a x509 client private key associated to this connection, then HTTP_CloseConnection shall free all the allocated memory for the private key. ]*/
+        if (http_instance->x509ClientPrivateKey)
+        {
+            free(http_instance->x509ClientPrivateKey);
+        }
+
+        if (http_instance->proxy_host != NULL)
+        {
+            free((void*)http_instance->proxy_host);
+        }
+        if (http_instance->proxy_username != NULL)
+        {
+            free((void*)http_instance->proxy_username);
+        }
+        if (http_instance->proxy_password != NULL)
+        {
+            free((void*)http_instance->proxy_password);
+        }
+
+        free(http_instance);
+    }
+}
+
+static void on_io_open_complete(void* context, IO_OPEN_RESULT open_result)
+{
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)context;
+
+    if (http_instance != NULL)
+    {
+        if (open_result == IO_OPEN_OK)
+        {
+            http_instance->is_connected = 1;
+            http_instance->is_io_error = 0;
+        }
+        else
+        {
+            http_instance->is_io_error = 1;
+        }
+    }
+}
+
+static void on_send_complete(void* context, IO_SEND_RESULT send_result)
+{
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)context;
+
+    if (http_instance != NULL)
+    {
+        if (send_result == IO_SEND_OK)
+        {
+            http_instance->send_completed = 1;
+            http_instance->is_io_error = 0;
+        }
+        else
+        {
+            http_instance->is_io_error = 1;
+        }
+    }
+}
+
+#define TOLOWER(c) (((c>='A') && (c<='Z'))?c-'A'+'a':c)
+static int InternStrnicmp(const char* s1, const char* s2, size_t n)
+{
+    int result;
+
+    if (s1 == NULL) result = -1;
+    else if (s2 == NULL) result = 1;
+    else
+    {
+        result = 0;
+
+        while(n-- && result == 0)
+        {
+            if (*s1 == 0) result = -1;
+            else if (*s2 == 0) result = 1;
+            else
+            {
+
+                result = TOLOWER(*s1) - TOLOWER(*s2);
+                ++s1;
+                ++s2;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void on_bytes_received(void* context, const unsigned char* buffer, size_t size)
+{
+    unsigned char* new_received_bytes;
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)context;
+
+    if (http_instance != NULL)
+    {
+
+        if (buffer == NULL)
+        {
+            http_instance->is_io_error = 1;
+            LogError("NULL pointer error");
+        }
+        else
+        {
+            /* Here we got some bytes so we'll buffer them so the receive functions can consumer it */
+            new_received_bytes = (unsigned char*)realloc(http_instance->received_bytes, http_instance->received_bytes_count + size);
+            if (new_received_bytes == NULL)
+            {
+                http_instance->is_io_error = 1;
+                LogError("Error allocating memory for received data");
+            }
+            else
+            {
+                http_instance->received_bytes = new_received_bytes;
+                if (memcpy(http_instance->received_bytes + http_instance->received_bytes_count, buffer, size) == NULL)
+                {
+                    http_instance->is_io_error = 1;
+                    LogError("Error copping received data to the HTTP bufffer");
+                }
+                else
+                {
+                    http_instance->received_bytes_count += size;
+                }
+            }
+        }
+    }
+}
+
+static void on_io_error(void* context)
+{
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)context;
+    if (http_instance != NULL)
+    {
+        http_instance->is_io_error = 1;
+        LogError("Error signalled by underlying IO");
+    }
+}
+
+static int conn_receive(HTTP_HANDLE_DATA* http_instance, char* buffer, int count)
+{
+    int result;
+
+    if ((http_instance == NULL) || (buffer == NULL) || (count < 0))
+    {
+        LogError("conn_receive: %s", ((http_instance == NULL) ? "Invalid HTTP instance" : "Invalid HTTP buffer"));
+        result = -1;
+    }
+    else
+    {
+        result = 0;
+        while (result < count)
+        {
+            xio_dowork(http_instance->xio_handle);
+
+            /* if any error was detected while receiving then simply break and report it */
+            if (http_instance->is_io_error != 0)
+            {
+                LogError("xio reported error on dowork");
+                result = -1;
+                break;
+            }
+
+            if (http_instance->received_bytes_count >= (size_t)count)
+            {
+                /* Consuming bytes from the receive buffer */
+                (void)memcpy(buffer, http_instance->received_bytes, count);
+                (void)memmove(http_instance->received_bytes, http_instance->received_bytes + count, http_instance->received_bytes_count - count);
+                http_instance->received_bytes_count -= count;
+
+                /* we're not reallocating at each consumption so that we don't trash due to byte by byte consumption */
+                if (http_instance->received_bytes_count == 0)
+                {
+                    free(http_instance->received_bytes);
+                    http_instance->received_bytes = NULL;
+                }
+
+                result = count;
+                break;
+            }
+
+            /*Codes_SRS_HTTPAPI_COMPACT_21_083: [ The HTTPAPI_ExecuteRequest shall wait, at least, 100 milliseconds between retries. ]*/
+            ThreadAPI_Sleep(RETRY_INTERVAL_IN_MICROSECONDS);
+        }
+    }
+
+    return result;
+}
+
+static void conn_receive_discard_buffer(HTTP_HANDLE_DATA* http_instance)
+{
+    if (http_instance != NULL)
+    {
+        if (http_instance->received_bytes != NULL)
+        {
+            free(http_instance->received_bytes);
+            http_instance->received_bytes = NULL;
+        }
+        http_instance->received_bytes_count = 0;
+    }
+}
+
+static int readLine(HTTP_HANDLE_DATA* http_instance, char* buf, const size_t maxBufSize)
+{
+    int resultLineSize;
+
+    if ((http_instance == NULL) || (buf == NULL) || (maxBufSize == 0))
+    {
+        LogError("%s", ((http_instance == NULL) ? "Invalid HTTP instance" : "Invalid HTTP buffer"));
+        resultLineSize = -1;
+    }
+    else
+    {
+        char* destByte = buf;
+        /*Codes_SRS_HTTPAPI_COMPACT_21_081: [ The HTTPAPI_ExecuteRequest shall try to read the message with the response up to 20 seconds. ]*/
+        int countRetry = MAX_RECEIVE_RETRY;
+        bool endOfSearch = false;
+        resultLineSize = -1;
+        while (!endOfSearch)
+        {
+            xio_dowork(http_instance->xio_handle);
+
+            /* if any error was detected while receiving then simply break and report it */
+            if (http_instance->is_io_error != 0)
+            {
+                LogError("xio reported error on dowork");
+                endOfSearch = true;
+            }
+            else
+            {
+                unsigned char* receivedByte = http_instance->received_bytes;
+                while (receivedByte < (http_instance->received_bytes + http_instance->received_bytes_count))
+                {
+                    if ((*receivedByte) != '\r')
+                    {
+                        (*destByte) = (*receivedByte);
+                        destByte++;
+                        receivedByte++;
+
+                        if (destByte >= (buf + maxBufSize - 1))
+                        {
+                            LogError("Received message is bigger than the http buffer");
+                            receivedByte = http_instance->received_bytes + http_instance->received_bytes_count;
+                            endOfSearch = true;
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        receivedByte++;
+                        if ((receivedByte < (http_instance->received_bytes + http_instance->received_bytes_count)) && ((*receivedByte) == '\n'))
+                        {
+                            receivedByte++;
+                        }
+                        (*destByte) = '\0';
+                        resultLineSize = (int)(destByte - buf);
+                        endOfSearch = true;
+                        break;
+                    }
+                }
+
+                http_instance->received_bytes_count -= (receivedByte - http_instance->received_bytes);
+                if (http_instance->received_bytes_count != 0)
+                {
+                    (void)memmove(http_instance->received_bytes, receivedByte, http_instance->received_bytes_count);
+                }
+                else
+                {
+                    conn_receive_discard_buffer(http_instance);
+                }
+            }
+
+            if (!endOfSearch)
+            {
+                if ((countRetry--) > 0)
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_083: [ The HTTPAPI_ExecuteRequest shall wait, at least, 100 milliseconds between retries. ]*/
+                    ThreadAPI_Sleep(RETRY_INTERVAL_IN_MICROSECONDS);
+                }
+                else
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+                    LogError("Receive timeout. The HTTP request is incomplete");
+                    endOfSearch = true;
+                }
+            }
+        }
+    }
+
+    return resultLineSize;
+}
+
+static int readChunk(HTTP_HANDLE_DATA* http_instance, char* buf, size_t size)
+{
+    int cur, offset;
+
+    // read content with specified length, even if it is received
+    // only in chunks due to fragmentation in the networking layer.
+    // returns -1 in case of error.
+    offset = 0;
+    while (size > (size_t)0)
+    {
+        cur = conn_receive(http_instance, buf + offset, (int)size);
+
+        // end of stream reached
+        if (cur == 0)
+        {
+            break;
+        }
+
+        // read cur bytes (might be less than requested)
+        size -= (size_t)cur;
+        offset += cur;
+    }
+
+    return offset;
+}
+
+static int skipN(HTTP_HANDLE_DATA* http_instance, size_t n)
+{
+    // read and abandon response content with specified length
+    // returns -1 in case of error.
+
+    int result;
+
+    if (http_instance == NULL)
+    {
+        LogError("Invalid HTTP instance");
+        result = -1;
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_081: [ The HTTPAPI_ExecuteRequest shall try to read the message with the response up to 20 seconds. ]*/
+        int countRetry = MAX_RECEIVE_RETRY;
+        result = (int)n;
+        while (n > 0)
+        {
+            xio_dowork(http_instance->xio_handle);
+
+            /* if any error was detected while receiving then simply break and report it */
+            if (http_instance->is_io_error != 0)
+            {
+                LogError("xio reported error on dowork");
+                result = -1;
+                n = 0;
+            }
+            else
+            {
+                if (http_instance->received_bytes_count <= n)
+                {
+                    n -= http_instance->received_bytes_count;
+                    http_instance->received_bytes_count = 0;
+                }
+                else
+                {
+                    http_instance->received_bytes_count -= n;
+                    (void)memmove(http_instance->received_bytes, http_instance->received_bytes + n, http_instance->received_bytes_count);
+                    n = 0;
+                }
+
+                if (n > 0)
+                {
+                    if ((countRetry--) > 0)
+                    {
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_083: [ The HTTPAPI_ExecuteRequest shall wait, at least, 100 milliseconds between retries. ]*/
+                        ThreadAPI_Sleep(RETRY_INTERVAL_IN_MICROSECONDS);
+                    }
+                    else
+                    {
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+                        LogError("Receive timeout. The HTTP request is incomplete");
+                        n = 0;
+                        result = -1;
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_021: [ The HTTPAPI_ExecuteRequest shall execute the http communtication with the provided host, sending a request and reciving the response. ]*/
+static HTTPAPI_RESULT OpenXIOConnection(HTTP_HANDLE_DATA* http_instance)
+{
+    HTTPAPI_RESULT result;
+    TLSIO_CONFIG tlsio_config;
+    HTTP_PROXY_IO_CONFIG http_proxy_io_config;
+
+    if (http_instance->is_connected != 0)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        result = HTTPAPI_OK;
+    }
+    else
+    {
+        http_instance->is_io_error = 0;
+        tlsio_config.hostname = http_instance->hostName;
+        tlsio_config.port = 443;
+
+        if (http_instance->proxy_host != NULL) {
+            tlsio_config.underlying_io_interface = http_proxy_io_get_interface_description();
+        }
+        else {
+            tlsio_config.underlying_io_interface = NULL;
+        }
+
+        if (tlsio_config.underlying_io_interface != NULL) {
+            tlsio_config.underlying_io_parameters = (void*)&http_proxy_io_config;
+
+            http_proxy_io_config.proxy_hostname = http_instance->proxy_host;
+            http_proxy_io_config.proxy_port = http_instance->proxy_port;
+            http_proxy_io_config.username = http_instance->proxy_username;
+            http_proxy_io_config.password = http_instance->proxy_password;
+            http_proxy_io_config.hostname = http_instance->hostName;
+            http_proxy_io_config.port = 443;
+        }
+        else {
+            tlsio_config.underlying_io_parameters = NULL;
+        }
+
+        http_instance->xio_handle = xio_create(platform_get_default_tlsio(), (void*)&tlsio_config);
+
+        if (http_instance->xio_handle == NULL)
+        {
+            LogError("Create connection failed");
+            free(http_instance);
+            http_instance = NULL;
+        }
+        /*Codes_SRS_HTTPAPI_COMPACT_21_022: [ If a Certificate was provided, the HTTPAPI_ExecuteRequest shall set this option on the transport layer. ]*/
+        else if ((http_instance->certificate != NULL) &&
+            (xio_setoption(http_instance->xio_handle, OPTION_TRUSTED_CERT, http_instance->certificate) != 0))
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_023: [ If the transport failed setting the Certificate, the HTTPAPI_ExecuteRequest shall not send any request and return HTTPAPI_SET_OPTION_FAILED. ]*/
+            result = HTTPAPI_SET_OPTION_FAILED;
+            LogInfo("Could not load certificate");
+        }
+        /*Codes_SRS_HTTPAPI_COMPACT_06_003: [ If the x509 client certificate is provided, the HTTPAPI_ExecuteRequest shall set this option on the transport layer. ]*/
+        else if ((http_instance->x509ClientCertificate != NULL) &&
+            (xio_setoption(http_instance->xio_handle, SU_OPTION_X509_CERT, http_instance->x509ClientCertificate) != 0))
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_06_005: [ If the transport failed setting the client certificate, the HTTPAPI_ExecuteRequest shall not send any request and return HTTPAPI_SET_OPTION_FAILED. ]*/
+            result = HTTPAPI_SET_OPTION_FAILED;
+            LogInfo("Could not load the client certificate");
+        }
+        else if ((http_instance->x509ClientPrivateKey != NULL) &&
+            (xio_setoption(http_instance->xio_handle, SU_OPTION_X509_PRIVATE_KEY, http_instance->x509ClientPrivateKey) != 0))
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_06_006: [ If the transport failed setting the client certificate private key, the HTTPAPI_ExecuteRequest shall not send any request and return HTTPAPI_SET_OPTION_FAILED. ] */
+            result = HTTPAPI_SET_OPTION_FAILED;
+            LogInfo("Could not load the client certificate private key");
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_024: [ The HTTPAPI_ExecuteRequest shall open the transport connection with the host to send the request. ]*/
+            if (xio_open(http_instance->xio_handle, on_io_open_complete, http_instance, on_bytes_received, http_instance, on_io_error, http_instance) != 0)
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_025: [ If the open process failed, the HTTPAPI_ExecuteRequest shall not send any request and return HTTPAPI_OPEN_REQUEST_FAILED. ]*/
+                result = HTTPAPI_OPEN_REQUEST_FAILED;
+            }
+            else
+            {
+                int countRetry;
+                /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+                result = HTTPAPI_OK;
+                /*Codes_SRS_HTTPAPI_COMPACT_21_077: [ The HTTPAPI_ExecuteRequest shall wait, at least, 10 seconds for the SSL open process. ]*/
+                countRetry = MAX_OPEN_RETRY;
+                while ((http_instance->is_connected == 0) &&
+                    (http_instance->is_io_error == 0))
+                {
+                    xio_dowork(http_instance->xio_handle);
+                    //LogInfo("Waiting for TLS connection");
+                    if ((countRetry--) < 0)
+                    {
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_078: [ If the HTTPAPI_ExecuteRequest cannot open the connection in 10 seconds, it shall fail and return HTTPAPI_OPEN_REQUEST_FAILED. ]*/
+                        LogError("Open timeout. The HTTP request is incomplete");
+                        result = HTTPAPI_OPEN_REQUEST_FAILED;
+                        break;
+                    }
+                    else
+                    {
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_083: [ The HTTPAPI_ExecuteRequest shall wait, at least, 100 milliseconds between retries. ]*/
+                        ThreadAPI_Sleep(RETRY_INTERVAL_IN_MICROSECONDS);
+                    }
+                }
+            }
+        }
+    }
+
+    if ((http_instance->is_io_error != 0) && (result == HTTPAPI_OK))
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_025: [ If the open process failed, the HTTPAPI_ExecuteRequest shall not send any request and return HTTPAPI_OPEN_REQUEST_FAILED. ]*/
+        result = HTTPAPI_OPEN_REQUEST_FAILED;
+    }
+
+    return result;
+}
+
+static HTTPAPI_RESULT conn_send_all(HTTP_HANDLE_DATA* http_instance, const unsigned char* buf, size_t bufLen)
+{
+    HTTPAPI_RESULT result;
+
+    http_instance->send_completed = 0;
+    http_instance->is_io_error = 0;
+    if (xio_send(http_instance->xio_handle, buf, bufLen, on_send_complete, http_instance) != 0)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_028: [ If the HTTPAPI_ExecuteRequest cannot send the request header, it shall return HTTPAPI_HTTP_HEADERS_FAILED. ]*/
+        result = HTTPAPI_SEND_REQUEST_FAILED;
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_079: [ The HTTPAPI_ExecuteRequest shall wait, at least, 20 seconds to send a buffer using the SSL connection. ]*/
+        int countRetry = MAX_SEND_RETRY;
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        result = HTTPAPI_OK;
+        while ((http_instance->send_completed == 0) && (result == HTTPAPI_OK))
+        {
+            xio_dowork(http_instance->xio_handle);
+            if (http_instance->is_io_error != 0)
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_028: [ If the HTTPAPI_ExecuteRequest cannot send the request header, it shall return HTTPAPI_HTTP_HEADERS_FAILED. ]*/
+                result = HTTPAPI_SEND_REQUEST_FAILED;
+            }
+            else if ((countRetry--) <= 0)
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_080: [ If the HTTPAPI_ExecuteRequest retries to send the message for 20 seconds without success, it shall fail and return HTTPAPI_SEND_REQUEST_FAILED. ]*/
+                LogError("Send timeout. The HTTP request is incomplete");
+                /*Codes_SRS_HTTPAPI_COMPACT_21_028: [ If the HTTPAPI_ExecuteRequest cannot send the request header, it shall return HTTPAPI_HTTP_HEADERS_FAILED. ]*/
+                result = HTTPAPI_SEND_REQUEST_FAILED;
+            }
+            else
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_083: [ The HTTPAPI_ExecuteRequest shall wait, at least, 100 milliseconds between retries. ]*/
+                ThreadAPI_Sleep(RETRY_INTERVAL_IN_MICROSECONDS);
+            }
+        }
+    }
+
+    return result;
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_035: [ The HTTPAPI_ExecuteRequest shall execute resquest for types GET, POST, PUT, DELETE, PATCH, HEAD. ]*/
+const char httpapiRequestString[6][7] = { "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD" };
+const char* get_request_type(HTTPAPI_REQUEST_TYPE requestType)
+{
+    return (const char*)httpapiRequestString[requestType];
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_026: [ If the open process succeed, the HTTPAPI_ExecuteRequest shall send the request message to the host. ]*/
+static HTTPAPI_RESULT SendHeadsToXIO(HTTP_HANDLE_DATA* http_instance, HTTPAPI_REQUEST_TYPE requestType, const char* relativePath, HTTP_HEADERS_HANDLE httpHeadersHandle, size_t headersCount)
+{
+    HTTPAPI_RESULT result;
+    char    buf[TEMP_BUFFER_SIZE];
+    int     ret;
+
+    //Send request
+    /*Codes_SRS_HTTPAPI_COMPACT_21_038: [ The HTTPAPI_ExecuteRequest shall execute the resquest for the path in relativePath parameter. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_036: [ The request type shall be provided in the parameter requestType. ]*/
+    if (((ret = snprintf(buf, sizeof(buf), "%s %s HTTP/1.1\r\n", get_request_type(requestType), relativePath)) < 0) ||
+        ((size_t)ret >= sizeof(buf)))
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_027: [ If the HTTPAPI_ExecuteRequest cannot create a buffer to send the request, it shall not send any request and return HTTPAPI_STRING_PROCESSING_ERROR. ]*/
+        result = HTTPAPI_STRING_PROCESSING_ERROR;
+    }
+        /*Codes_SRS_HTTPAPI_COMPACT_21_028: [ If the HTTPAPI_ExecuteRequest cannot send the request header, it shall return HTTPAPI_HTTP_HEADERS_FAILED. ]*/
+    else if ((result = conn_send_all(http_instance, (const unsigned char*)buf, strlen(buf))) == HTTPAPI_OK)
+    {
+        size_t i;
+        //Send default headers
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        for (i = 0; ((i < headersCount) && (result == HTTPAPI_OK)); i++)
+        {
+            char* header;
+            if (HTTPHeaders_GetHeader(httpHeadersHandle, i, &header) != HTTP_HEADERS_OK)
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_027: [ If the HTTPAPI_ExecuteRequest cannot create a buffer to send the request, it shall not send any request and return HTTPAPI_STRING_PROCESSING_ERROR. ]*/
+                result = HTTPAPI_STRING_PROCESSING_ERROR;
+            }
+            else
+            {
+                if ((result = conn_send_all(http_instance, (const unsigned char*)header, strlen(header))) == HTTPAPI_OK)
+                {
+                    result = conn_send_all(http_instance, (const unsigned char*)"\r\n", (size_t)2);
+                }
+                free(header);
+            }
+        }
+
+        //Close headers
+        if (result == HTTPAPI_OK)
+        {
+            result = conn_send_all(http_instance, (const unsigned char*)"\r\n", (size_t)2);
+        }
+    }
+    return result;
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_042: [ The request can contain the a content message, provided in content parameter. ]*/
+static HTTPAPI_RESULT SendContentToXIO(HTTP_HANDLE_DATA* http_instance, const unsigned char* content, size_t contentLength)
+{
+    HTTPAPI_RESULT result;
+
+    //Send data (if available)
+    /*Codes_SRS_HTTPAPI_COMPACT_21_045: [ If the contentLength is lower than one, the HTTPAPI_ExecuteRequest shall send the request without content. ]*/
+    if (content && contentLength > 0)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_044: [ If the content is not NULL, the number of bytes in the content shall be provided in contentLength parameter. ]*/
+        result = conn_send_all(http_instance, content, contentLength);
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_043: [ If the content is NULL, the HTTPAPI_ExecuteRequest shall send the request without content. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        result = HTTPAPI_OK;
+    }
+    return result;
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_030: [ At the end of the transmission, the HTTPAPI_ExecuteRequest shall receive the response from the host. ]*/
+static HTTPAPI_RESULT ReceiveHeaderFromXIO(HTTP_HANDLE_DATA* http_instance, unsigned int* statusCode)
+{
+    HTTPAPI_RESULT result;
+    char    buf[TEMP_BUFFER_SIZE];
+    int     ret;
+
+    http_instance->is_io_error = 0;
+
+    //Receive response
+    if (readLine(http_instance, buf, TEMP_BUFFER_SIZE) < 0)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_032: [ If the HTTPAPI_ExecuteRequest cannot read the message with the request result, it shall return HTTPAPI_READ_DATA_FAILED. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+        result = HTTPAPI_READ_DATA_FAILED;
+    }
+    //Parse HTTP response
+    else if (ParseHttpResponse(buf, &ret) != 1)
+    {
+        //Cannot match string, error
+        /*Codes_SRS_HTTPAPI_COMPACT_21_055: [ If the HTTPAPI_ExecuteRequest cannot parser the received message, it shall return HTTPAPI_RECEIVE_RESPONSE_FAILED. ]*/
+        LogInfo("Not a correct HTTP answer");
+        result = HTTPAPI_RECEIVE_RESPONSE_FAILED;
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_046: [ The HTTPAPI_ExecuteRequest shall return the http status reported by the host in the received response. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_048: [ If the statusCode is NULL, the HTTPAPI_ExecuteRequest shall report not report any status. ]*/
+        if (statusCode)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_047: [ The HTTPAPI_ExecuteRequest shall report the status in the statusCode parameter. ]*/
+            *statusCode = ret;
+        }
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        result = HTTPAPI_OK;
+    }
+
+    return result;
+}
+
+static HTTPAPI_RESULT ReceiveContentInfoFromXIO(HTTP_HANDLE_DATA* http_instance, HTTP_HEADERS_HANDLE responseHeadersHandle, size_t* bodyLength, bool* chunked)
+{
+    HTTPAPI_RESULT result;
+    char    buf[TEMP_BUFFER_SIZE];
+    const char* substr;
+    char* whereIsColon;
+    int lengthInMsg;
+    const char ContentLength[] = "content-length:";
+    const size_t ContentLengthSize = sizeof(ContentLength) - 1;
+    const char TransferEncoding[] = "transfer-encoding:";
+    const size_t TransferEncodingSize = sizeof(TransferEncoding) - 1;
+    const char Chunked[] = "chunked";
+    const size_t ChunkedSize = sizeof(Chunked) - 1;
+
+    http_instance->is_io_error = 0;
+
+    //Read HTTP response headers
+    if (readLine(http_instance, buf, sizeof(buf)) < 0)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_032: [ If the HTTPAPI_ExecuteRequest cannot read the message with the request result, it shall return HTTPAPI_READ_DATA_FAILED. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+        result = HTTPAPI_READ_DATA_FAILED;
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        result = HTTPAPI_OK;
+
+        while (*buf && (result == HTTPAPI_OK))
+        {
+            if (InternStrnicmp(buf, ContentLength, ContentLengthSize) == 0)
+            {
+                substr = buf + ContentLengthSize;
+                if (ParseStringToDecimal(substr, &lengthInMsg) != 1)
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_032: [ If the HTTPAPI_ExecuteRequest cannot read the message with the request result, it shall return HTTPAPI_READ_DATA_FAILED. ]*/
+                    result = HTTPAPI_READ_DATA_FAILED;
+                }
+                else
+                {
+                    (*bodyLength) = (size_t)lengthInMsg;
+                }
+            }
+            else if (InternStrnicmp(buf, TransferEncoding, TransferEncodingSize) == 0)
+            {
+                substr = buf + TransferEncodingSize;
+
+                while (isspace(*substr)) substr++;
+
+                if (InternStrnicmp(substr, Chunked, ChunkedSize) == 0)
+                {
+                    (*chunked) = true;
+                }
+            }
+
+            if (result == HTTPAPI_OK)
+            {
+                whereIsColon = strchr((char*)buf, ':');
+                /*Codes_SRS_HTTPAPI_COMPACT_21_049: [ If responseHeadersHandle is provide, the HTTPAPI_ExecuteRequest shall prepare a Response Header usign the HTTPHeaders_AddHeaderNameValuePair. ]*/
+                if (whereIsColon && (responseHeadersHandle != NULL))
+                {
+                    *whereIsColon = '\0';
+                    HTTPHeaders_AddHeaderNameValuePair(responseHeadersHandle, buf, whereIsColon + 1);
+                }
+
+                if (readLine(http_instance, buf, sizeof(buf)) < 0)
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_032: [ If the HTTPAPI_ExecuteRequest cannot read the message with the request result, it shall return HTTPAPI_READ_DATA_FAILED. ]*/
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+                    result = HTTPAPI_READ_DATA_FAILED;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+static HTTPAPI_RESULT ReadHTTPResponseBodyFromXIO(HTTP_HANDLE_DATA* http_instance, size_t bodyLength, bool chunked, BUFFER_HANDLE responseContent)
+{
+    HTTPAPI_RESULT result;
+    char    buf[TEMP_BUFFER_SIZE];
+    const unsigned char* receivedContent;
+
+    http_instance->is_io_error = 0;
+
+    //Read HTTP response body
+    if (!chunked)
+    {
+        if (bodyLength)
+        {
+            if (responseContent != NULL)
+            {
+                if (BUFFER_pre_build(responseContent, bodyLength) != 0)
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_052: [ If any memory allocation get fail, the HTTPAPI_ExecuteRequest shall return HTTPAPI_ALLOC_FAILED. ]*/
+                    result = HTTPAPI_ALLOC_FAILED;
+                }
+                else if (BUFFER_content(responseContent, &receivedContent) != 0)
+                {
+                    (void)BUFFER_unbuild(responseContent);
+
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_052: [ If any memory allocation get fail, the HTTPAPI_ExecuteRequest shall return HTTPAPI_ALLOC_FAILED. ]*/
+                    result = HTTPAPI_ALLOC_FAILED;
+                }
+                else if (readChunk(http_instance, (char*)receivedContent, bodyLength) < 0)
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_032: [ If the HTTPAPI_ExecuteRequest cannot read the message with the request result, it shall return HTTPAPI_READ_DATA_FAILED. ]*/
+                    result = HTTPAPI_READ_DATA_FAILED;
+                }
+                else
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+                    result = HTTPAPI_OK;
+                }
+            }
+            else
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_051: [ If the responseContent is NULL, the HTTPAPI_ExecuteRequest shall ignore any content in the response. ]*/
+                if (skipN(http_instance, bodyLength) < 0)
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+                    result = HTTPAPI_READ_DATA_FAILED;
+                }
+                else
+                {
+                    result = HTTPAPI_OK;
+                }
+            }
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+            result = HTTPAPI_OK;
+        }
+    }
+    else
+    {
+        size_t size = 0;
+        /*Codes_SRS_HTTPAPI_COMPACT_21_033: [ If the whole process succeed, the HTTPAPI_ExecuteRequest shall retur HTTPAPI_OK. ]*/
+        result = HTTPAPI_OK;
+        while (result == HTTPAPI_OK)
+        {
+            size_t chunkSize;
+            if (readLine(http_instance, buf, sizeof(buf)) < 0)    // read [length in hex]/r/n
+            {
+                /*Codes_SRS_HTTPAPI_COMPACT_21_032: [ If the HTTPAPI_ExecuteRequest cannot read the message with the request result, it shall return HTTPAPI_READ_DATA_FAILED. ]*/
+                /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+                result = HTTPAPI_READ_DATA_FAILED;
+            }
+            else if (ParseStringToHexadecimal(buf, &chunkSize) != 1)     // chunkSize is length of next line (/r/n is not counted)
+            {
+                //Cannot match string, error
+                /*Codes_SRS_HTTPAPI_COMPACT_21_055: [ If the HTTPAPI_ExecuteRequest cannot parser the received message, it shall return HTTPAPI_RECEIVE_RESPONSE_FAILED. ]*/
+                result = HTTPAPI_RECEIVE_RESPONSE_FAILED;
+            }
+            else if (chunkSize == 0)
+            {
+                // 0 length means next line is just '\r\n' and end of chunks
+                if (readChunk(http_instance, (char*)buf, (size_t)2) < 0
+                    || buf[0] != '\r' || buf[1] != '\n') // skip /r/n
+                {
+                    (void)BUFFER_unbuild(responseContent);
+
+                    result = HTTPAPI_READ_DATA_FAILED;
+                }
+                break;
+            }
+            else
+            {
+                if (responseContent != NULL)
+                {
+                    if (BUFFER_enlarge(responseContent, chunkSize) != 0)
+                    {
+                        (void)BUFFER_unbuild(responseContent);
+
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_052: [ If any memory allocation get fail, the HTTPAPI_ExecuteRequest shall return HTTPAPI_ALLOC_FAILED. ]*/
+                        result = HTTPAPI_ALLOC_FAILED;
+                    }
+                    else if (BUFFER_content(responseContent, &receivedContent) != 0)
+                    {
+                        (void)BUFFER_unbuild(responseContent);
+
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_052: [ If any memory allocation get fail, the HTTPAPI_ExecuteRequest shall return HTTPAPI_ALLOC_FAILED. ]*/
+                        result = HTTPAPI_ALLOC_FAILED;
+                    }
+                    else if (readChunk(http_instance, (char*)receivedContent + size, chunkSize) < 0)
+                    {
+                        result = HTTPAPI_READ_DATA_FAILED;
+                    }
+                }
+                else
+                {
+                    /*Codes_SRS_HTTPAPI_COMPACT_21_051: [ If the responseContent is NULL, the HTTPAPI_ExecuteRequest shall ignore any content in the response. ]*/
+                    if (skipN(http_instance, chunkSize) < 0)
+                    {
+                        /*Codes_SRS_HTTPAPI_COMPACT_21_082: [ If the HTTPAPI_ExecuteRequest retries 20 seconds to receive the message without success, it shall fail and return HTTPAPI_READ_DATA_FAILED. ]*/
+                        result = HTTPAPI_READ_DATA_FAILED;
+                    }
+                }
+
+                if (result == HTTPAPI_OK)
+                {
+                    if (readChunk(http_instance, (char*)buf, (size_t)2) < 0
+                        || buf[0] != '\r' || buf[1] != '\n') // skip /r/n
+                    {
+                        result = HTTPAPI_READ_DATA_FAILED;
+                    }
+                    size += chunkSize;
+                }
+            }
+        }
+
+    }
+    return result;
+}
+
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_037: [ If the request type is unknown, the HTTPAPI_ExecuteRequest shall return HTTPAPI_INVALID_ARG. ]*/
+static bool validRequestType(HTTPAPI_REQUEST_TYPE requestType)
+{
+    bool result;
+
+    if ((requestType == HTTPAPI_REQUEST_GET) ||
+        (requestType == HTTPAPI_REQUEST_POST) ||
+        (requestType == HTTPAPI_REQUEST_PUT) ||
+        (requestType == HTTPAPI_REQUEST_DELETE) ||
+        (requestType == HTTPAPI_REQUEST_PATCH) ||
+        (requestType == HTTPAPI_REQUEST_HEAD))
+    {
+        result = true;
+    }
+    else
+    {
+        result = false;
+    }
+
+    return result;
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_021: [ The HTTPAPI_ExecuteRequest shall execute the http communtication with the provided host, sending a request and reciving the response. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_050: [ If there is a content in the response, the HTTPAPI_ExecuteRequest shall copy it in the responseContent buffer. ]*/
+//Note: This function assumes that "Host:" and "Content-Length:" headers are setup
+//      by the caller of HTTPAPI_ExecuteRequest() (which is true for httptransport.c).
+HTTPAPI_RESULT HTTPAPI_ExecuteRequest(HTTP_HANDLE handle, HTTPAPI_REQUEST_TYPE requestType, const char* relativePath,
+    HTTP_HEADERS_HANDLE httpHeadersHandle, const unsigned char* content,
+    size_t contentLength, unsigned int* statusCode,
+    HTTP_HEADERS_HANDLE responseHeadersHandle, BUFFER_HANDLE responseContent)
+{
+    HTTPAPI_RESULT result = HTTPAPI_ERROR;
+    size_t  headersCount;
+    size_t  bodyLength = 0;
+    bool    chunked = false;
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)handle;
+
+    /*Codes_SRS_HTTPAPI_COMPACT_21_034: [ If there is no previous connection, the HTTPAPI_ExecuteRequest shall return HTTPAPI_INVALID_ARG. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_037: [ If the request type is unknown, the HTTPAPI_ExecuteRequest shall return HTTPAPI_INVALID_ARG. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_039: [ If the relativePath is NULL or invalid, the HTTPAPI_ExecuteRequest shall return HTTPAPI_INVALID_ARG. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_041: [ If the httpHeadersHandle is NULL or invalid, the HTTPAPI_ExecuteRequest shall return HTTPAPI_INVALID_ARG. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_053: [ The HTTPAPI_ExecuteRequest shall produce a set of http header to send to the host. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_040: [ The request shall contain the http header provided in httpHeadersHandle parameter. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_054: [ If Http header maker cannot provide the number of headers, the HTTPAPI_ExecuteRequest shall return HTTPAPI_INVALID_ARG. ]*/
+    if (http_instance == NULL ||
+        relativePath == NULL ||
+        httpHeadersHandle == NULL ||
+        !validRequestType(requestType) ||
+        HTTPHeaders_GetHeaderCount(httpHeadersHandle, &headersCount) != HTTP_HEADERS_OK)
+    {
+        result = HTTPAPI_INVALID_ARG;
+        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    /*Codes_SRS_HTTPAPI_COMPACT_21_024: [ The HTTPAPI_ExecuteRequest shall open the transport connection with the host to send the request. ]*/
+    else if ((result = OpenXIOConnection(http_instance)) != HTTPAPI_OK)
+    {
+        LogError("Open HTTP connection failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    /*Codes_SRS_HTTPAPI_COMPACT_21_026: [ If the open process succeed, the HTTPAPI_ExecuteRequest shall send the request message to the host. ]*/
+    else if ((result = SendHeadsToXIO(http_instance, requestType, relativePath, httpHeadersHandle, headersCount)) != HTTPAPI_OK)
+    {
+        LogError("Send heads to HTTP failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    /*Codes_SRS_HTTPAPI_COMPACT_21_042: [ The request can contain the a content message, provided in content parameter. ]*/
+    else if ((result = SendContentToXIO(http_instance, content, contentLength)) != HTTPAPI_OK)
+    {
+        LogError("Send content to HTTP failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    /*Codes_SRS_HTTPAPI_COMPACT_21_030: [ At the end of the transmission, the HTTPAPI_ExecuteRequest shall receive the response from the host. ]*/
+    /*Codes_SRS_HTTPAPI_COMPACT_21_073: [ The message received by the HTTPAPI_ExecuteRequest shall starts with a valid header. ]*/
+    else if ((result = ReceiveHeaderFromXIO(http_instance, statusCode)) != HTTPAPI_OK)
+    {
+        LogError("Receive header from HTTP failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    /*Codes_SRS_HTTPAPI_COMPACT_21_074: [ After the header, the message received by the HTTPAPI_ExecuteRequest can contain addition information about the content. ]*/
+    else if ((result = ReceiveContentInfoFromXIO(http_instance, responseHeadersHandle, &bodyLength, &chunked)) != HTTPAPI_OK)
+    {
+        LogError("Receive content information from HTTP failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    /*Codes_SRS_HTTPAPI_COMPACT_42_084: [ The message received by the HTTPAPI_ExecuteRequest should not contain http body. ]*/
+    else if (requestType != HTTPAPI_REQUEST_HEAD)
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_075: [ The message received by the HTTPAPI_ExecuteRequest can contain a body with the message content. ]*/
+        if ((result = ReadHTTPResponseBodyFromXIO(http_instance, bodyLength, chunked, responseContent)) != HTTPAPI_OK)
+        {
+            LogError("Read HTTP response body from HTTP failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+        }
+    }
+
+    conn_receive_discard_buffer(http_instance);
+
+    return result;
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_056: [ The HTTPAPI_SetOption shall change the HTTP options. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_057: [ The HTTPAPI_SetOption shall receive a handle that identiry the HTTP connection. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_058: [ The HTTPAPI_SetOption shall receive the option as a pair optionName/value. ]*/
+HTTPAPI_RESULT HTTPAPI_SetOption(HTTP_HANDLE handle, const char* optionName, const void* value)
+{
+    HTTPAPI_RESULT result;
+    HTTP_HANDLE_DATA* http_instance = (HTTP_HANDLE_DATA*)handle;
+
+    if (
+        (http_instance == NULL) ||
+        (optionName == NULL) ||
+        (value == NULL)
+        )
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_059: [ If the handle is NULL, the HTTPAPI_SetOption shall return HTTPAPI_INVALID_ARG. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_060: [ If the optionName is NULL, the HTTPAPI_SetOption shall return HTTPAPI_INVALID_ARG. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_061: [ If the value is NULL, the HTTPAPI_SetOption shall return HTTPAPI_INVALID_ARG. ]*/
+        result = HTTPAPI_INVALID_ARG;
+    }
+    else if (strcmp(OPTION_TRUSTED_CERT, optionName) == 0)
+    {
+#ifdef DO_NOT_COPY_TRUSTED_CERTS_STRING
+        result = HTTPAPI_OK;
+        http_instance->certificate = (char*)value;
+#else
+        int len;
+
+        if (http_instance->certificate)
+        {
+            free(http_instance->certificate);
+        }
+
+        len = (int)strlen((char*)value);
+        http_instance->certificate = (char*)malloc((len + 1) * sizeof(char));
+        if (http_instance->certificate == NULL)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_062: [ If any memory allocation get fail, the HTTPAPI_SetOption shall return HTTPAPI_ALLOC_FAILED. ]*/
+            result = HTTPAPI_ALLOC_FAILED;
+            LogInfo("unable to allocate memory for the certificate in HTTPAPI_SetOption");
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_064: [ If the HTTPAPI_SetOption get success setting the option, it shall return HTTPAPI_OK. ]*/
+            (void)strcpy(http_instance->certificate, (const char*)value);
+            result = HTTPAPI_OK;
+        }
+#endif // DO_NOT_COPY_TRUSTED_CERTS_STRING
+    }
+    else if (strcmp(SU_OPTION_X509_CERT, optionName) == 0)
+    {
+        int len;
+        if (http_instance->x509ClientCertificate)
+        {
+            free(http_instance->x509ClientCertificate);
+        }
+
+        len = (int)strlen((char*)value);
+        http_instance->x509ClientCertificate = (char*)malloc((len + 1) * sizeof(char));
+        if (http_instance->x509ClientCertificate == NULL)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_062: [ If any memory allocation get fail, the HTTPAPI_SetOption shall return HTTPAPI_ALLOC_FAILED. ]*/
+            result = HTTPAPI_ALLOC_FAILED;
+            LogInfo("unable to allocate memory for the client certificate in HTTPAPI_SetOption");
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_064: [ If the HTTPAPI_SetOption get success setting the option, it shall return HTTPAPI_OK. ]*/
+            (void)strcpy(http_instance->x509ClientCertificate, (const char*)value);
+            result = HTTPAPI_OK;
+        }
+    }
+    else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0)
+    {
+        int len;
+        if (http_instance->x509ClientPrivateKey)
+        {
+            free(http_instance->x509ClientPrivateKey);
+        }
+
+        len = (int)strlen((char*)value);
+        http_instance->x509ClientPrivateKey = (char*)malloc((len + 1) * sizeof(char));
+        if (http_instance->x509ClientPrivateKey == NULL)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_062: [ If any memory allocation get fail, the HTTPAPI_SetOption shall return HTTPAPI_ALLOC_FAILED. ]*/
+            result = HTTPAPI_ALLOC_FAILED;
+            LogInfo("unable to allocate memory for the client private key in HTTPAPI_SetOption");
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_064: [ If the HTTPAPI_SetOption get success setting the option, it shall return HTTPAPI_OK. ]*/
+            (void)strcpy(http_instance->x509ClientPrivateKey, (const char*)value);
+            result = HTTPAPI_OK;
+        }
+    }
+    else if (strcmp(OPTION_HTTP_PROXY, optionName) == 0)
+    {
+        HTTP_PROXY_OPTIONS* proxy_data = (HTTP_PROXY_OPTIONS*)value;
+        if (proxy_data->host_address == NULL || proxy_data->port <= 0)
+        {
+            LogError("invalid proxy_data values ( host_address = %p, port = %d)", proxy_data->host_address, proxy_data->port);
+            result = HTTPAPI_ERROR;
+        }
+        else
+        {
+            if(http_instance->proxy_host != NULL)
+            {
+                free((void*)http_instance->proxy_host);
+                http_instance->proxy_host = NULL;
+            }
+            if(mallocAndStrcpy_s((char**)&(http_instance->proxy_host), (const char*)proxy_data->host_address) != 0)
+            {
+                LogError("failure allocate proxy host");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                http_instance->proxy_port = proxy_data->port;
+
+                if (proxy_data->username != NULL && proxy_data->password != NULL)
+                {
+                    if(http_instance->proxy_username != NULL)
+                    {
+                        free((void*)http_instance->proxy_username);
+                        http_instance->proxy_username = NULL;
+                    }
+                    if(mallocAndStrcpy_s((char**)&(http_instance->proxy_username), (const char*)proxy_data->username) != 0)
+                    {
+                        LogError("failure allocate proxy username");
+                        free((void*)http_instance->proxy_host);
+                        http_instance->proxy_host = NULL;
+                        result = HTTPAPI_ERROR;
+                    }
+                    else
+                    {
+                        if(http_instance->proxy_password != NULL)
+                        {
+                          free((void*)http_instance->proxy_password);
+                          http_instance->proxy_password = NULL;
+                        }
+                        if(mallocAndStrcpy_s((char**)&(http_instance->proxy_password), (const char*)proxy_data->password) != 0)
+                        {
+                            LogError("failure allocate proxy password");
+                            free((void*)http_instance->proxy_host);
+                            http_instance->proxy_host = NULL;
+                            free((void*)http_instance->proxy_username);
+                            http_instance->proxy_username = NULL;
+                            result = HTTPAPI_ERROR;
+                        }
+                        else
+                        {
+                          result = HTTPAPI_OK;
+                        }
+                    }
+                }
+                else
+                {
+                    result = HTTPAPI_OK;
+                }
+            }
+        }
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_063: [ If the HTTP do not support the optionName, the HTTPAPI_SetOption shall return HTTPAPI_INVALID_ARG. ]*/
+        result = HTTPAPI_INVALID_ARG;
+        LogInfo("unknown option %s", optionName);
+    }
+    return result;
+}
+
+/*Codes_SRS_HTTPAPI_COMPACT_21_065: [ The HTTPAPI_CloneOption shall provide the means to clone the HTTP option. ]*/
+/*Codes_SRS_HTTPAPI_COMPACT_21_066: [ The HTTPAPI_CloneOption shall return a clone of the value identified by the optionName. ]*/
+HTTPAPI_RESULT HTTPAPI_CloneOption(const char* optionName, const void* value, const void** savedValue)
+{
+    HTTPAPI_RESULT result;
+    size_t certLen;
+    char* tempCert;
+
+    if (
+        (optionName == NULL) ||
+        (value == NULL) ||
+        (savedValue == NULL)
+        )
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_067: [ If the optionName is NULL, the HTTPAPI_CloneOption shall return HTTPAPI_INVALID_ARG. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_068: [ If the value is NULL, the HTTPAPI_CloneOption shall return HTTPAPI_INVALID_ARG. ]*/
+        /*Codes_SRS_HTTPAPI_COMPACT_21_069: [ If the savedValue is NULL, the HTTPAPI_CloneOption shall return HTTPAPI_INVALID_ARG. ]*/
+        result = HTTPAPI_INVALID_ARG;
+    }
+    else if (strcmp(OPTION_TRUSTED_CERT, optionName) == 0)
+    {
+#ifdef DO_NOT_COPY_TRUSTED_CERTS_STRING
+        *savedValue = (const void*)value;
+        result = HTTPAPI_OK;
+#else
+        certLen = strlen((const char*)value);
+        tempCert = (char*)malloc((certLen + 1) * sizeof(char));
+        if (tempCert == NULL)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_070: [ If any memory allocation get fail, the HTTPAPI_CloneOption shall return HTTPAPI_ALLOC_FAILED. ]*/
+            result = HTTPAPI_ALLOC_FAILED;
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_072: [ If the HTTPAPI_CloneOption get success setting the option, it shall return HTTPAPI_OK. ]*/
+            (void)strcpy(tempCert, (const char*)value);
+            *savedValue = tempCert;
+            result = HTTPAPI_OK;
+        }
+#endif // DO_NOT_COPY_TRUSTED_CERTS_STRING
+    }
+    else if (strcmp(SU_OPTION_X509_CERT, optionName) == 0)
+    {
+        certLen = strlen((const char*)value);
+        tempCert = (char*)malloc((certLen + 1) * sizeof(char));
+        if (tempCert == NULL)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_070: [ If any memory allocation get fail, the HTTPAPI_CloneOption shall return HTTPAPI_ALLOC_FAILED. ]*/
+            result = HTTPAPI_ALLOC_FAILED;
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_072: [ If the HTTPAPI_CloneOption get success setting the option, it shall return HTTPAPI_OK. ]*/
+            (void)strcpy(tempCert, (const char*)value);
+            *savedValue = tempCert;
+            result = HTTPAPI_OK;
+        }
+    }
+    else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0)
+    {
+        certLen = strlen((const char*)value);
+        tempCert = (char*)malloc((certLen + 1) * sizeof(char));
+        if (tempCert == NULL)
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_070: [ If any memory allocation get fail, the HTTPAPI_CloneOption shall return HTTPAPI_ALLOC_FAILED. ]*/
+            result = HTTPAPI_ALLOC_FAILED;
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPI_COMPACT_21_072: [ If the HTTPAPI_CloneOption get success setting the option, it shall return HTTPAPI_OK. ]*/
+            (void)strcpy(tempCert, (const char*)value);
+            *savedValue = tempCert;
+            result = HTTPAPI_OK;
+        }
+    }
+    else if (strcmp(OPTION_HTTP_PROXY, optionName) == 0)
+    {
+        HTTP_PROXY_OPTIONS* proxy_data = (HTTP_PROXY_OPTIONS*)value;
+
+        HTTP_PROXY_OPTIONS* new_proxy_info = malloc(sizeof(HTTP_PROXY_OPTIONS));
+        if (new_proxy_info == NULL)
+        {
+            LogError("unable to allocate proxy option information");
+            result = HTTPAPI_ERROR;
+        }
+        else
+        {
+            new_proxy_info->host_address = proxy_data->host_address;
+            new_proxy_info->port = proxy_data->port;
+            new_proxy_info->password = proxy_data->password;
+            new_proxy_info->username = proxy_data->username;
+            *savedValue = new_proxy_info;
+            result = HTTPAPI_OK;
+        }
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPI_COMPACT_21_071: [ If the HTTP do not support the optionName, the HTTPAPI_CloneOption shall return HTTPAPI_INVALID_ARG. ]*/
+        result = HTTPAPI_INVALID_ARG;
+        LogInfo("unknown option %s", optionName);
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/httpapi_curl.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/httpapi_curl.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/httpapi_curl.c	(revision 389)
@@ -0,0 +1,991 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stddef.h>
+#include <ctype.h>
+
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/httpapi.h"
+#include "azure_c_shared_utility/httpheaders.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "curl/curl.h"
+#include "azure_c_shared_utility/xlogging.h"
+#ifdef USE_OPENSSL
+#include "azure_c_shared_utility/x509_openssl.h"
+#elif USE_WOLFSSL
+#define WOLFSSL_OPTIONS_IGNORE_SYS
+#include "wolfssl/options.h"
+#include "wolfssl/ssl.h"
+#include "wolfssl/error-ssl.h"
+#endif
+#include "azure_c_shared_utility/shared_util_options.h"
+
+#define TEMP_BUFFER_SIZE 1024
+
+MU_DEFINE_ENUM_STRINGS(HTTPAPI_RESULT, HTTPAPI_RESULT_VALUES);
+
+typedef struct HTTP_HANDLE_DATA_TAG
+{
+    CURL* curl;
+    char* hostURL;
+    long timeout;
+    long lowSpeedLimit;
+    long lowSpeedTime;
+    long forbidReuse;
+    long freshConnect;
+    long verbose;
+    const char* x509privatekey;
+    const char* x509certificate;
+    const char* certificates; /*a list of CA certificates*/
+} HTTP_HANDLE_DATA;
+
+typedef struct HTTP_RESPONSE_CONTENT_BUFFER_TAG
+{
+    unsigned char* buffer;
+    size_t bufferSize;
+    unsigned char error;
+} HTTP_RESPONSE_CONTENT_BUFFER;
+
+static size_t nUsersOfHTTPAPI = 0; /*used for reference counting (a weak one)*/
+
+HTTPAPI_RESULT HTTPAPI_Init(void)
+{
+    HTTPAPI_RESULT result;
+    if (nUsersOfHTTPAPI == 0)
+    {
+        if (curl_global_init(CURL_GLOBAL_NOTHING) != 0)
+        {
+            result = HTTPAPI_INIT_FAILED;
+            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+        }
+        else
+        {
+            nUsersOfHTTPAPI++;
+            result = HTTPAPI_OK;
+        }
+    }
+    else
+    {
+        nUsersOfHTTPAPI++;
+        result = HTTPAPI_OK;
+    }
+
+    return result;
+}
+
+void HTTPAPI_Deinit(void)
+{
+    if (nUsersOfHTTPAPI > 0)
+    {
+        nUsersOfHTTPAPI--;
+        if (nUsersOfHTTPAPI == 0)
+        {
+            curl_global_cleanup();
+        }
+    }
+}
+
+HTTP_HANDLE HTTPAPI_CreateConnection(const char* hostName)
+{
+    HTTP_HANDLE_DATA* httpHandleData;
+
+    if (hostName == NULL)
+    {
+        LogError("invalid arg const char* hostName = %p", hostName);
+        httpHandleData = NULL;
+    }
+    else
+    {
+        httpHandleData = (HTTP_HANDLE_DATA*)malloc(sizeof(HTTP_HANDLE_DATA));
+        if (httpHandleData != NULL)
+        {
+            size_t hostURL_size = strlen("https://") + strlen(hostName) + 1;
+            httpHandleData->hostURL = malloc(hostURL_size);
+            if (httpHandleData->hostURL == NULL)
+            {
+                LogError("unable to malloc");
+                free(httpHandleData);
+                httpHandleData = NULL;
+            }
+            else
+            {
+                if ((strcpy_s(httpHandleData->hostURL, hostURL_size, "https://") == 0) &&
+                    (strcat_s(httpHandleData->hostURL, hostURL_size, hostName) == 0))
+                {
+                    httpHandleData->curl = curl_easy_init();
+                    if (httpHandleData->curl == NULL)
+                    {
+                        free(httpHandleData->hostURL);
+                        free(httpHandleData);
+                        httpHandleData = NULL;
+                    }
+                    else
+                    {
+                        httpHandleData->timeout = 242 * 1000; /*242 seconds seems like a nice enough time. Reasone for 242:
+                                                                1. http://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html says Normally, name lookups can take a considerable time and limiting operations to less than a few minutes risk aborting perfectly normal operations.
+                                                                2. 256KB of data... at 9600 bps transfers in about 218 seconds. Add to that a buffer of 10%... round it up to 242 :)*/
+                        httpHandleData->lowSpeedTime = 0;
+                        httpHandleData->lowSpeedLimit = 0;
+                        httpHandleData->forbidReuse = 0;
+                        httpHandleData->freshConnect = 0;
+                        httpHandleData->verbose = 0;
+                        httpHandleData->x509certificate = NULL;
+                        httpHandleData->x509privatekey = NULL;
+                        httpHandleData->certificates = NULL;
+                    }
+                }
+                else
+                {
+                    free(httpHandleData->hostURL);
+                    free(httpHandleData);
+                    httpHandleData = NULL;
+                }
+            }
+        }
+    }
+
+    return (HTTP_HANDLE)httpHandleData;
+}
+
+void HTTPAPI_CloseConnection(HTTP_HANDLE handle)
+{
+    HTTP_HANDLE_DATA* httpHandleData = (HTTP_HANDLE_DATA*)handle;
+    if (httpHandleData != NULL)
+    {
+        free(httpHandleData->hostURL);
+        curl_easy_cleanup(httpHandleData->curl);
+        free(httpHandleData);
+    }
+}
+
+static size_t HeadersWriteFunction(void *ptr, size_t size, size_t nmemb, void *userdata)
+{
+    HTTP_HEADERS_HANDLE responseHeadersHandle = (HTTP_HEADERS_HANDLE)userdata;
+    char* headerLine = (char*)ptr;
+
+    if (headerLine != NULL)
+    {
+        char* token = strtok(headerLine, "\r\n");
+        while ((token != NULL) &&
+               (token[0] != '\0'))
+        {
+            char* whereIsColon = strchr(token, ':');
+            if(whereIsColon!=NULL)
+            {
+                *whereIsColon='\0';
+                HTTPHeaders_AddHeaderNameValuePair(responseHeadersHandle, token, whereIsColon+1);
+                *whereIsColon=':';
+            }
+            else
+            {
+                /*not a header, maybe a status-line*/
+            }
+            token = strtok(NULL, "\r\n");
+        }
+    }
+
+    return size * nmemb;
+}
+
+static size_t ContentWriteFunction(void *ptr, size_t size, size_t nmemb, void *userdata)
+{
+    HTTP_RESPONSE_CONTENT_BUFFER* responseContentBuffer = (HTTP_RESPONSE_CONTENT_BUFFER*)userdata;
+    if ((userdata != NULL) &&
+        (ptr != NULL) &&
+        (size * nmemb > 0))
+    {
+        void* newBuffer = realloc(responseContentBuffer->buffer, responseContentBuffer->bufferSize + (size * nmemb));
+        if (newBuffer != NULL)
+        {
+            responseContentBuffer->buffer = newBuffer;
+            memcpy(responseContentBuffer->buffer + responseContentBuffer->bufferSize, ptr, size * nmemb);
+            responseContentBuffer->bufferSize += size * nmemb;
+        }
+        else
+        {
+            LogError("Could not allocate buffer of size %lu", (unsigned long)(responseContentBuffer->bufferSize + (size * nmemb)));
+            responseContentBuffer->error = 1;
+            if (responseContentBuffer->buffer != NULL)
+            {
+                free(responseContentBuffer->buffer);
+            }
+        }
+    }
+
+    return size * nmemb;
+}
+
+static CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *userptr)
+{
+    CURLcode result;
+
+    if (
+        (curl == NULL) ||
+        (ssl_ctx == NULL) ||
+        (userptr == NULL)
+        )
+    {
+        LogError("unexpected parameter CURL *curl=%p, void *ssl_ctx=%p, void *userptr=%p", curl, ssl_ctx, userptr);
+        result = CURLE_SSL_CERTPROBLEM;
+    }
+    else
+    {
+        HTTP_HANDLE_DATA *httpHandleData = (HTTP_HANDLE_DATA *)userptr;
+#ifdef USE_OPENSSL
+        /*trying to set the x509 per device certificate*/
+        if (
+            (httpHandleData->x509certificate != NULL) && (httpHandleData->x509privatekey != NULL) &&
+            (x509_openssl_add_credentials(ssl_ctx, httpHandleData->x509certificate, httpHandleData->x509privatekey) != 0)
+           )
+        {
+            LogError("unable to x509_openssl_add_credentials");
+            result = CURLE_SSL_CERTPROBLEM;
+        }
+        /*trying to set CA certificates*/
+        else if (
+            (httpHandleData->certificates != NULL) &&
+            (x509_openssl_add_certificates(ssl_ctx, httpHandleData->certificates) != 0)
+            )
+        {
+            LogError("failure in x509_openssl_add_certificates");
+            result = CURLE_SSL_CERTPROBLEM;
+        }
+#elif USE_WOLFSSL
+        if (
+            (httpHandleData->x509certificate != NULL) &&
+            (httpHandleData->x509privatekey != NULL) &&
+            (
+             ((wolfSSL_use_certificate_chain_buffer(ssl_ctx, (unsigned char*)httpHandleData->x509certificate, strlen(httpHandleData->x509certificate)) != SSL_SUCCESS)) ||
+             ((wolfSSL_use_PrivateKey_buffer(ssl_ctx, (unsigned char*)httpHandleData->x509privatekey, strlen(httpHandleData->x509privatekey), SSL_FILETYPE_PEM) != SSL_SUCCESS))
+            )
+            )
+        {
+            LogError("unable to add x509 certs to wolfssl");
+            result = CURLE_SSL_CERTPROBLEM;
+        }
+        else if (
+            (httpHandleData->certificates != NULL) &&
+            (wolfSSL_CTX_load_verify_buffer(ssl_ctx, (const unsigned char*)httpHandleData->certificates, strlen(httpHandleData->certificates), SSL_FILETYPE_PEM) != SSL_SUCCESS)
+            )
+        {
+            LogError("failure in adding trusted certificate to client");
+            result = CURLE_SSL_CERTPROBLEM;
+        }
+#else
+        if (httpHandleData->x509certificate != NULL || httpHandleData->x509privatekey != NULL)
+        {
+            LogError("Failure no platform is enabled to handle certificates");
+            result = CURLE_SSL_CERTPROBLEM;
+        }
+#endif
+        else
+        {
+            result = CURLE_OK;
+        }
+    }
+
+    return result;
+}
+
+HTTPAPI_RESULT HTTPAPI_ExecuteRequest(HTTP_HANDLE handle, HTTPAPI_REQUEST_TYPE requestType, const char* relativePath,
+                                      HTTP_HEADERS_HANDLE httpHeadersHandle, const unsigned char* content,
+                                      size_t contentLength, unsigned int* statusCode,
+                                      HTTP_HEADERS_HANDLE responseHeadersHandle, BUFFER_HANDLE responseContent)
+{
+    HTTPAPI_RESULT result;
+    HTTP_HANDLE_DATA* httpHandleData = (HTTP_HANDLE_DATA*)handle;
+    size_t headersCount;
+    HTTP_RESPONSE_CONTENT_BUFFER responseContentBuffer;
+
+    if ((httpHandleData == NULL) ||
+        (relativePath == NULL) ||
+        (httpHeadersHandle == NULL) ||
+        ((content == NULL) && (contentLength > 0))
+    )
+    {
+        result = HTTPAPI_INVALID_ARG;
+        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    else if (HTTPHeaders_GetHeaderCount(httpHeadersHandle, &headersCount) != HTTP_HEADERS_OK)
+    {
+        result = HTTPAPI_INVALID_ARG;
+        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+    }
+    else
+    {
+        char* tempHostURL;
+        size_t tempHostURL_size = strlen(httpHandleData->hostURL) + strlen(relativePath) + 1;
+        tempHostURL = malloc(tempHostURL_size);
+        if (tempHostURL == NULL)
+        {
+            result = HTTPAPI_ERROR;
+            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+        }
+        else
+        {
+            if (curl_easy_setopt(httpHandleData->curl, CURLOPT_VERBOSE, httpHandleData->verbose) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_VERBOSE (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if ((strcpy_s(tempHostURL, tempHostURL_size, httpHandleData->hostURL) != 0) ||
+                (strcat_s(tempHostURL, tempHostURL_size, relativePath) != 0))
+            {
+                result = HTTPAPI_STRING_PROCESSING_ERROR;
+                LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            /* set the URL */
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_URL, tempHostURL) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_URL (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_TIMEOUT_MS, httpHandleData->timeout) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_TIMEOUT_MS (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_LOW_SPEED_LIMIT, httpHandleData->lowSpeedLimit) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_LOW_SPEED_LIMIT (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_LOW_SPEED_TIME, httpHandleData->lowSpeedTime) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_LOW_SPEED_TIME (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_FRESH_CONNECT, httpHandleData->freshConnect) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_FRESH_CONNECT (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_FORBID_REUSE, httpHandleData->forbidReuse) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_FORBID_REUSE (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1) != CURLE_OK)
+            {
+                result = HTTPAPI_SET_OPTION_FAILED;
+                LogError("failed to set CURLOPT_HTTP_VERSION (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else
+            {
+                result = HTTPAPI_OK;
+
+                switch (requestType)
+                {
+                default:
+                    result = HTTPAPI_INVALID_ARG;
+                    LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    break;
+
+                case HTTPAPI_REQUEST_GET:
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_HTTPGET, 1L) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else
+                    {
+                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_CUSTOMREQUEST, NULL) != CURLE_OK)
+                        {
+                            result = HTTPAPI_SET_OPTION_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                        }
+                    }
+
+                    break;
+
+                case HTTPAPI_REQUEST_HEAD:
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_HTTPGET, 1L) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_NOBODY, 1L) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else if (curl_easy_setopt(httpHandleData->curl, CURLOPT_CUSTOMREQUEST, NULL) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+
+                    break;
+
+                case HTTPAPI_REQUEST_POST:
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_POST, 1L) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else
+                    {
+                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_CUSTOMREQUEST, NULL) != CURLE_OK)
+                        {
+                            result = HTTPAPI_SET_OPTION_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                        }
+                    }
+
+                    break;
+
+                case HTTPAPI_REQUEST_PUT:
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_POST, 1L))
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else
+                    {
+                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_CUSTOMREQUEST, "PUT") != CURLE_OK)
+                        {
+                            result = HTTPAPI_SET_OPTION_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                        }
+                    }
+                    break;
+
+                case HTTPAPI_REQUEST_DELETE:
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_POST, 1L) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else
+                    {
+                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_CUSTOMREQUEST, "DELETE") != CURLE_OK)
+                        {
+                            result = HTTPAPI_SET_OPTION_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                        }
+                    }
+                    break;
+
+                case HTTPAPI_REQUEST_PATCH:
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_POST, 1L) != CURLE_OK)
+                    {
+                        result = HTTPAPI_SET_OPTION_FAILED;
+                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                    }
+                    else
+                    {
+                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_CUSTOMREQUEST, "PATCH") != CURLE_OK)
+                        {
+                            result = HTTPAPI_SET_OPTION_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                        }
+                    }
+
+                    break;
+                }
+
+                if (result == HTTPAPI_OK)
+                {
+                    /* add headers */
+                    struct curl_slist* headers = NULL;
+                    size_t i;
+
+                    for (i = 0; i < headersCount; i++)
+                    {
+                        char *tempBuffer;
+                        if (HTTPHeaders_GetHeader(httpHeadersHandle, i, &tempBuffer) != HTTP_HEADERS_OK)
+                        {
+                            /* error */
+                            result = HTTPAPI_HTTP_HEADERS_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                            break;
+                        }
+                        else
+                        {
+                            struct curl_slist* newHeaders = curl_slist_append(headers, tempBuffer);
+                            if (newHeaders == NULL)
+                            {
+                                result = HTTPAPI_ALLOC_FAILED;
+                                LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                free(tempBuffer);
+                                break;
+                            }
+                            else
+                            {
+                                free(tempBuffer);
+                                headers = newHeaders;
+                            }
+                        }
+                    }
+
+                    if (result == HTTPAPI_OK)
+                    {
+                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_HTTPHEADER, headers) != CURLE_OK)
+                        {
+                            result = HTTPAPI_SET_OPTION_FAILED;
+                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                        }
+                        else
+                        {
+                            /* add content */
+                            if ((content != NULL) &&
+                                (contentLength > 0))
+                            {
+                                if ((curl_easy_setopt(httpHandleData->curl, CURLOPT_POSTFIELDS, (void*)content) != CURLE_OK) ||
+                                    (curl_easy_setopt(httpHandleData->curl, CURLOPT_POSTFIELDSIZE, contentLength) != CURLE_OK))
+                                {
+                                    result = HTTPAPI_SET_OPTION_FAILED;
+                                    LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                }
+                            }
+                            else
+                            {
+                                if (requestType != HTTPAPI_REQUEST_GET)
+                                {
+                                    if ((curl_easy_setopt(httpHandleData->curl, CURLOPT_POSTFIELDS, (void*)NULL) != CURLE_OK) ||
+                                        (curl_easy_setopt(httpHandleData->curl, CURLOPT_POSTFIELDSIZE, 0) != CURLE_OK))
+                                    {
+                                        result = HTTPAPI_SET_OPTION_FAILED;
+                                        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                    }
+                                }
+                                else
+                                {
+                                    /*GET request cannot POST, so "do nothing*/
+                                }
+                            }
+
+                            if (result == HTTPAPI_OK)
+                            {
+                                if ((curl_easy_setopt(httpHandleData->curl, CURLOPT_WRITEHEADER, NULL) != CURLE_OK) ||
+                                    (curl_easy_setopt(httpHandleData->curl, CURLOPT_HEADERFUNCTION, NULL) != CURLE_OK) ||
+                                    (curl_easy_setopt(httpHandleData->curl, CURLOPT_WRITEFUNCTION, ContentWriteFunction) != CURLE_OK))
+                                {
+                                    result = HTTPAPI_SET_OPTION_FAILED;
+                                    LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                }
+                                else
+                                {
+                                    if (responseHeadersHandle != NULL)
+                                    {
+                                        /* setup the code to get the response headers */
+                                        if ((curl_easy_setopt(httpHandleData->curl, CURLOPT_WRITEHEADER, responseHeadersHandle) != CURLE_OK) ||
+                                            (curl_easy_setopt(httpHandleData->curl, CURLOPT_HEADERFUNCTION, HeadersWriteFunction) != CURLE_OK))
+                                        {
+                                            result = HTTPAPI_SET_OPTION_FAILED;
+                                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                        }
+                                    }
+
+                                    if (result == HTTPAPI_OK)
+                                    {
+                                        responseContentBuffer.buffer = NULL;
+                                        responseContentBuffer.bufferSize = 0;
+                                        responseContentBuffer.error = 0;
+
+                                        if (curl_easy_setopt(httpHandleData->curl, CURLOPT_WRITEDATA, &responseContentBuffer) != CURLE_OK)
+                                        {
+                                            result = HTTPAPI_SET_OPTION_FAILED;
+                                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                        }
+
+                                        if (result == HTTPAPI_OK)
+                                        {
+                                            /* Execute request */
+                                            CURLcode curlRes = curl_easy_perform(httpHandleData->curl);
+                                            if (curlRes != CURLE_OK)
+                                            {
+                                                LogError("curl_easy_perform() failed: %s\n", curl_easy_strerror(curlRes));
+                                                result = HTTPAPI_OPEN_REQUEST_FAILED;
+                                                LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                            }
+                                            else
+                                            {
+                                                long httpCode;
+
+                                                /* get the status code */
+                                                if (curl_easy_getinfo(httpHandleData->curl, CURLINFO_RESPONSE_CODE, &httpCode) != CURLE_OK)
+                                                {
+                                                    result = HTTPAPI_QUERY_HEADERS_FAILED;
+                                                    LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                                }
+                                                else if (responseContentBuffer.error)
+                                                {
+                                                    result = HTTPAPI_READ_DATA_FAILED;
+                                                    LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                                }
+                                                else
+                                                {
+                                                    if (statusCode != NULL)
+                                                    {
+                                                        *statusCode = (unsigned int)httpCode;
+                                                    }
+
+                                                    /* fill response content length */
+                                                    if (responseContent != NULL)
+                                                    {
+                                                        if ((responseContentBuffer.bufferSize > 0) && (BUFFER_build(responseContent, responseContentBuffer.buffer, responseContentBuffer.bufferSize) != 0))
+                                                        {
+                                                            result = HTTPAPI_INSUFFICIENT_RESPONSE_BUFFER;
+                                                            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+                                                        }
+                                                        else
+                                                        {
+                                                            /*all nice*/
+                                                        }
+                                                    }
+
+                                                    if (httpCode >= 300)
+                                                    {
+                                                        LogError("Failure in HTTP communication: server reply code is %ld", httpCode);
+                                                        LogInfo("HTTP Response:%*.*s", (int)responseContentBuffer.bufferSize,
+                                                            (int)responseContentBuffer.bufferSize, responseContentBuffer.buffer);
+                                                    }
+                                                    else
+                                                    {
+                                                        result = HTTPAPI_OK;
+                                                    }
+                                                }
+                                            }
+                                        }
+
+                                        if (responseContentBuffer.buffer != NULL)
+                                        {
+                                            free(responseContentBuffer.buffer);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    curl_slist_free_all(headers);
+                }
+            }
+            free(tempHostURL);
+        }
+    }
+
+    return result;
+}
+
+HTTPAPI_RESULT HTTPAPI_SetOption(HTTP_HANDLE handle, const char* optionName, const void* value)
+{
+    HTTPAPI_RESULT result;
+    if (
+        (handle == NULL) ||
+        (optionName == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = HTTPAPI_INVALID_ARG;
+        LogError("invalid parameter (NULL) passed to HTTPAPI_SetOption");
+    }
+    else
+    {
+        HTTP_HANDLE_DATA* httpHandleData = (HTTP_HANDLE_DATA*)handle;
+        if (strcmp(OPTION_HTTP_TIMEOUT, optionName) == 0)
+        {
+            long timeout = (long)(*(unsigned int*)value);
+            httpHandleData->timeout = timeout;
+            result = HTTPAPI_OK;
+        }
+        else if (strcmp(OPTION_CURL_LOW_SPEED_LIMIT, optionName) == 0)
+        {
+            httpHandleData->lowSpeedLimit = *(const long*)value;
+            result = HTTPAPI_OK;
+        }
+        else if (strcmp(OPTION_CURL_LOW_SPEED_TIME, optionName) == 0)
+        {
+            httpHandleData->lowSpeedTime = *(const long*)value;
+            result = HTTPAPI_OK;
+        }
+        else if (strcmp(OPTION_CURL_FRESH_CONNECT, optionName) == 0)
+        {
+            httpHandleData->freshConnect = *(const long*)value;
+            result = HTTPAPI_OK;
+        }
+        else if (strcmp(OPTION_CURL_FORBID_REUSE, optionName) == 0)
+        {
+            httpHandleData->forbidReuse = *(const long*)value;
+            result = HTTPAPI_OK;
+        }
+        else if (strcmp(OPTION_CURL_VERBOSE, optionName) == 0)
+        {
+            httpHandleData->verbose = *(const long*)value;
+            result = HTTPAPI_OK;
+        }
+        else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 || strcmp(OPTION_X509_ECC_KEY, optionName) == 0)
+        {
+            httpHandleData->x509privatekey = value;
+            if (httpHandleData->x509certificate != NULL)
+            {
+                if (curl_easy_setopt(httpHandleData->curl, CURLOPT_SSL_CTX_FUNCTION, ssl_ctx_callback) != CURLE_OK)
+                {
+                    LogError("unable to curl_easy_setopt");
+                    result = HTTPAPI_ERROR;
+                }
+                else
+                {
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_SSL_CTX_DATA, httpHandleData) != CURLE_OK)
+                    {
+                        LogError("unable to curl_easy_setopt");
+                        result = HTTPAPI_ERROR;
+                    }
+                    else
+                    {
+                        result = HTTPAPI_OK;
+                    }
+                }
+            }
+            else
+            {
+                /*if privatekey comes 1st and certificate is not set yet, then return OK and wait for the certificate to be set*/
+                result = HTTPAPI_OK;
+            }
+        }
+        else if (strcmp(SU_OPTION_X509_CERT, optionName) == 0 || strcmp(OPTION_X509_ECC_CERT, optionName) == 0)
+        {
+            httpHandleData->x509certificate = value;
+            if (httpHandleData->x509privatekey != NULL)
+            {
+                if (curl_easy_setopt(httpHandleData->curl, CURLOPT_SSL_CTX_FUNCTION, ssl_ctx_callback) != CURLE_OK)
+                {
+                    LogError("unable to curl_easy_setopt");
+                    result = HTTPAPI_ERROR;
+                }
+                else
+                {
+                    if (curl_easy_setopt(httpHandleData->curl, CURLOPT_SSL_CTX_DATA, httpHandleData) != CURLE_OK)
+                    {
+                        LogError("unable to curl_easy_setopt");
+                        result = HTTPAPI_ERROR;
+                    }
+                    else
+                    {
+                        result = HTTPAPI_OK;
+                    }
+                }
+            }
+            else
+            {
+                /*if certificate comes 1st and private key is not set yet, then return OK and wait for the private key to be set*/
+                result = HTTPAPI_OK;
+            }
+        }
+        else if (strcmp(OPTION_HTTP_PROXY, optionName) == 0)
+        {
+            char proxy[MAX_HOSTNAME_LEN];
+            char* proxy_auth;
+
+            HTTP_PROXY_OPTIONS* proxy_data = (HTTP_PROXY_OPTIONS*)value;
+
+            if (sprintf_s(proxy, MAX_HOSTNAME_LEN, "%s:%d", proxy_data->host_address, proxy_data->port) <= 0)
+            {
+                LogError("failure constructing proxy address");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                if (curl_easy_setopt(httpHandleData->curl, CURLOPT_PROXY, proxy) != CURLE_OK)
+                {
+                    LogError("failure setting curl proxy address");
+                    result = HTTPAPI_ERROR;
+                }
+                else
+                {
+                    if (proxy_data->username != NULL && proxy_data->password != NULL)
+                    {
+                        size_t authLen = strlen(proxy_data->username)+strlen(proxy_data->password)+1;
+                        proxy_auth = malloc(authLen+1);
+                        if (proxy_auth == NULL)
+                        {
+                            LogError("failure allocating proxy authentication");
+                            result = HTTPAPI_ERROR;
+                        }
+                        else
+                        {
+                            // From curl website 'Pass a char * as parameter, which should be [user name]:[password]'
+                            if (sprintf_s(proxy_auth, MAX_HOSTNAME_LEN, "%s:%s", proxy_data->username, proxy_data->password) <= 0)
+                            {
+                                LogError("failure constructing proxy authentication");
+                                result = HTTPAPI_ERROR;
+                            }
+                            else
+                            {
+                                if (curl_easy_setopt(httpHandleData->curl, CURLOPT_PROXYUSERPWD, proxy_auth) != CURLE_OK)
+                                {
+                                    LogError("failure setting curl proxy authentication");
+                                    result = HTTPAPI_ERROR;
+                                }
+                                else
+                                {
+                                    result = HTTPAPI_OK;
+                                }
+                            }
+                            free(proxy_auth);
+                        }
+                    }
+                    else
+                    {
+                        result = HTTPAPI_OK;
+                    }
+                }
+            }
+        }
+        else if (strcmp("TrustedCerts", optionName) == 0)
+        {
+            /*TrustedCerts needs to trigger the CURLOPT_SSL_CTX_FUNCTION in curl so we can pass the CAs*/
+            if (curl_easy_setopt(httpHandleData->curl, CURLOPT_SSL_CTX_FUNCTION, ssl_ctx_callback) != CURLE_OK)
+            {
+                LogError("failure in curl_easy_setopt - CURLOPT_SSL_CTX_FUNCTION");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                if (curl_easy_setopt(httpHandleData->curl, CURLOPT_SSL_CTX_DATA, httpHandleData) != CURLE_OK)
+                {
+                    LogError("failure in curl_easy_setopt - CURLOPT_SSL_CTX_DATA");
+                    result = HTTPAPI_ERROR;
+                }
+                else
+                {
+                    httpHandleData->certificates = (const char*)value;
+                    result = HTTPAPI_OK;
+                }
+            }
+        }
+        else
+        {
+            result = HTTPAPI_INVALID_ARG;
+            LogError("unknown option %s", optionName);
+        }
+    }
+
+    return result;
+}
+
+HTTPAPI_RESULT HTTPAPI_CloneOption(const char* optionName, const void* value, const void** savedValue)
+{
+    HTTPAPI_RESULT result;
+    if (
+        (optionName == NULL) ||
+        (value == NULL) ||
+        (savedValue == NULL)
+        )
+    {
+        result = HTTPAPI_INVALID_ARG;
+        LogError("invalid argument(NULL) passed to HTTPAPI_CloneOption");
+    }
+    else
+    {
+        if (strcmp(OPTION_HTTP_TIMEOUT, optionName) == 0)
+        {
+            /*by convention value is pointing to an unsigned int */
+            unsigned int* temp = malloc(sizeof(unsigned int)); /*shall be freed by HTTPAPIEX*/
+            if (temp == NULL)
+            {
+                result = HTTPAPI_ERROR;
+                LogError("malloc failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else
+            {
+                *temp = *(const unsigned int*)value;
+                *savedValue = temp;
+                result = HTTPAPI_OK;
+            }
+        }
+        else if (strcmp(SU_OPTION_X509_CERT, optionName) == 0 || strcmp(OPTION_X509_ECC_CERT, optionName) == 0)
+        {
+            /*this is getting the x509 certificate. In this case, value is a pointer to a const char* that contains the certificate as a null terminated string*/
+            if (mallocAndStrcpy_s((char**)savedValue, value) != 0)
+            {
+                LogError("unable to clone the x509 certificate content");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                /*return OK when the certificate has been clones successfully*/
+                result = HTTPAPI_OK;
+            }
+        }
+        else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 || strcmp(OPTION_X509_ECC_KEY, optionName) == 0)
+        {
+            /*this is getting the x509 private key. In this case, value is a pointer to a const char* that contains the private key as a null terminated string*/
+            if (mallocAndStrcpy_s((char**)savedValue, value) != 0)
+            {
+                LogError("unable to clone the x509 private key content");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                /*return OK when the private key has been clones successfully*/
+                result = HTTPAPI_OK;
+            }
+        }
+        else if (strcmp("TrustedCerts", optionName) == 0)
+        {
+            if (mallocAndStrcpy_s((char**)savedValue, value) != 0)
+            {
+                LogError("unable to clone TrustedCerts");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                /*return OK when the certificates have been clones successfully*/
+                result = HTTPAPI_OK;
+            }
+        }
+        else if (strcmp(OPTION_HTTP_PROXY, optionName) == 0)
+        {
+            HTTP_PROXY_OPTIONS* proxy_data = (HTTP_PROXY_OPTIONS*)value;
+
+            HTTP_PROXY_OPTIONS* new_proxy_info = malloc(sizeof(HTTP_PROXY_OPTIONS));
+            if (new_proxy_info == NULL)
+            {
+                LogError("unable to allocate proxy option information");
+                result = HTTPAPI_ERROR;
+            }
+            else
+            {
+                new_proxy_info->host_address = proxy_data->host_address;
+                new_proxy_info->port = proxy_data->port;
+                new_proxy_info->password = proxy_data->password;
+                new_proxy_info->username = proxy_data->username;
+                *savedValue = new_proxy_info;
+                result = HTTPAPI_OK;
+            }
+        }
+        /*all "long" options are cloned in the same way*/
+        else if (
+            (strcmp(OPTION_CURL_LOW_SPEED_LIMIT, optionName) == 0) ||
+            (strcmp(OPTION_CURL_LOW_SPEED_TIME, optionName) == 0) ||
+            (strcmp(OPTION_CURL_FRESH_CONNECT, optionName) == 0) ||
+            (strcmp(OPTION_CURL_FORBID_REUSE, optionName) == 0) ||
+            (strcmp(OPTION_CURL_VERBOSE, optionName) == 0)
+            )
+        {
+            /*by convention value is pointing to an long */
+            long* temp = malloc(sizeof(long)); /*shall be freed by HTTPAPIEX*/
+            if (temp == NULL)
+            {
+                result = HTTPAPI_ERROR;
+                LogError("malloc failed (result = %s)", MU_ENUM_TO_STRING(HTTPAPI_RESULT, result));
+            }
+            else
+            {
+                *temp = *(const long*)value;
+                *savedValue = temp;
+                result = HTTPAPI_OK;
+            }
+        }
+        else
+        {
+            result = HTTPAPI_INVALID_ARG;
+            LogError("unknown option %s", optionName);
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/platform_toppers.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/platform_toppers.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/platform_toppers.c	(revision 389)
@@ -0,0 +1,65 @@
+/*
+ *  TOPPERS PROJECT Home Network Working Group Software
+ * 
+ *  Copyright (C) 2019 Cores Co., Ltd. Japan
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+#include <stdint.h>
+#include <stdlib.h>
+#include <kernel.h>
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/tlsio_wolfssl.h"
+#include "target_syssvc.h"
+
+int platform_init(void)
+{
+	return 0;
+}
+
+const IO_INTERFACE_DESCRIPTION* platform_get_default_tlsio(void)
+{
+	return tlsio_wolfssl_get_interface_description();
+}
+
+STRING_HANDLE platform_get_platform_info(PLATFORM_INFO_OPTION options)
+{
+	// Expected format: "(<runtime name>; <operating system name>; <platform>)"
+
+	return STRING_construct("(native; TOPPERS/ASP3; "TARGET_NAME")");
+}
+
+void platform_deinit(void)
+{
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/socketio_berkeley.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/socketio_berkeley.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/socketio_berkeley.c	(revision 389)
@@ -0,0 +1,1137 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE
+#define SOCKETIO_BERKELEY_UNDEF_BSD_SOURCE
+#endif
+
+#define _DEFAULT_SOURCE
+#include <net/if.h>
+#undef _DEFAULT_SOURCE
+
+#ifdef SOCKETIO_BERKELEY_UNDEF_BSD_SOURCE
+#undef _BSD_SOURCE
+#undef SOCKETIO_BERKELEY_UNDEF_BSD_SOURCE
+#endif
+
+#include <signal.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include "azure_c_shared_utility/socketio.h"
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/select.h>
+#ifdef TIZENRT
+#include <net/lwip/tcp.h>
+#else
+#include <netinet/tcp.h>
+#endif
+#include <netdb.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "azure_c_shared_utility/singlylinkedlist.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/gbnetwork.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/optionhandler.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/const_defines.h"
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/un.h>
+
+#define SOCKET_SUCCESS                 0
+#define INVALID_SOCKET                 -1
+#define MAC_ADDRESS_STRING_LENGTH      18
+
+#ifndef IFREQ_BUFFER_SIZE
+#define IFREQ_BUFFER_SIZE              1024
+#endif
+
+// connect timeout in seconds
+#define CONNECT_TIMEOUT         10
+
+typedef enum IO_STATE_TAG
+{
+    IO_STATE_CLOSED,
+    IO_STATE_OPENING,
+    IO_STATE_OPEN,
+    IO_STATE_CLOSING,
+    IO_STATE_ERROR
+} IO_STATE;
+
+typedef struct PENDING_SOCKET_IO_TAG
+{
+    unsigned char* bytes;
+    size_t size;
+    ON_SEND_COMPLETE on_send_complete;
+    void* callback_context;
+    SINGLYLINKEDLIST_HANDLE pending_io_list;
+} PENDING_SOCKET_IO;
+
+typedef struct SOCKET_IO_INSTANCE_TAG
+{
+    int socket;
+    SOCKETIO_ADDRESS_TYPE address_type;
+    ON_BYTES_RECEIVED on_bytes_received;
+    ON_IO_ERROR on_io_error;
+    void* on_bytes_received_context;
+    void* on_io_error_context;
+    char* hostname;
+    int port;
+    char* target_mac_address;
+    IO_STATE io_state;
+    SINGLYLINKEDLIST_HANDLE pending_io_list;
+    unsigned char recv_bytes[RECEIVE_BYTES_VALUE];
+} SOCKET_IO_INSTANCE;
+
+typedef struct NETWORK_INTERFACE_DESCRIPTION_TAG
+{
+    char* name;
+    char* mac_address;
+    char* ip_address;
+    struct NETWORK_INTERFACE_DESCRIPTION_TAG* next;
+} NETWORK_INTERFACE_DESCRIPTION;
+
+/*this function will clone an option given by name and value*/
+static void* socketio_CloneOption(const char* name, const void* value)
+{
+    void* result;
+
+    if (name != NULL)
+    {
+        result = NULL;
+
+        if (strcmp(name, OPTION_NET_INT_MAC_ADDRESS) == 0)
+        {
+            if (value == NULL)
+            {
+                LogError("Failed cloning option %s (value is NULL)", name);
+            }
+            else
+            {
+                if ((result = malloc(sizeof(char) * (strlen((char*)value) + 1))) == NULL)
+                {
+                    LogError("Failed cloning option %s (malloc failed)", name);
+                }
+                else if (strcpy((char*)result, (char*)value) == NULL)
+                {
+                    LogError("Failed cloning option %s (strcpy failed)", name);
+                    free(result);
+                    result = NULL;
+                }
+            }
+        }
+        else
+        {
+            LogError("Cannot clone option %s (not suppported)", name);
+        }
+    }
+    else
+    {
+        result = NULL;
+    }
+    return result;
+}
+
+/*this function destroys an option previously created*/
+static void socketio_DestroyOption(const char* name, const void* value)
+{
+    if (name != NULL)
+    {
+        if (strcmp(name, OPTION_NET_INT_MAC_ADDRESS) == 0 && value != NULL)
+        {
+            free((void*)value);
+        }
+    }
+}
+
+static OPTIONHANDLER_HANDLE socketio_retrieveoptions(CONCRETE_IO_HANDLE handle)
+{
+    OPTIONHANDLER_HANDLE result;
+
+    if (handle == NULL)
+    {
+        LogError("failed retrieving options (handle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)handle;
+
+        result = OptionHandler_Create(socketio_CloneOption, socketio_DestroyOption, socketio_setoption);
+        if (result == NULL)
+        {
+            LogError("unable to OptionHandler_Create");
+        }
+        else if (socket_io_instance->target_mac_address != NULL &&
+            OptionHandler_AddOption(result, OPTION_NET_INT_MAC_ADDRESS, socket_io_instance->target_mac_address) != OPTIONHANDLER_OK)
+        {
+            LogError("failed retrieving options (failed adding net_interface_mac_address)");
+            OptionHandler_Destroy(result);
+            result = NULL;
+        }
+    }
+
+    return result;
+}
+
+static const IO_INTERFACE_DESCRIPTION socket_io_interface_description =
+{
+    socketio_retrieveoptions,
+    socketio_create,
+    socketio_destroy,
+    socketio_open,
+    socketio_close,
+    socketio_send,
+    socketio_dowork,
+    socketio_setoption
+};
+
+static void indicate_error(SOCKET_IO_INSTANCE* socket_io_instance)
+{
+    socket_io_instance->io_state = IO_STATE_ERROR;
+    if (socket_io_instance->on_io_error != NULL)
+    {
+        socket_io_instance->on_io_error(socket_io_instance->on_io_error_context);
+    }
+}
+
+static int add_pending_io(SOCKET_IO_INSTANCE* socket_io_instance, const unsigned char* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context)
+{
+    int result;
+    PENDING_SOCKET_IO* pending_socket_io = (PENDING_SOCKET_IO*)malloc(sizeof(PENDING_SOCKET_IO));
+    if (pending_socket_io == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        pending_socket_io->bytes = (unsigned char*)malloc(size);
+        if (pending_socket_io->bytes == NULL)
+        {
+            LogError("Allocation Failure: Unable to allocate pending list.");
+            free(pending_socket_io);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            pending_socket_io->size = size;
+            pending_socket_io->on_send_complete = on_send_complete;
+            pending_socket_io->callback_context = callback_context;
+            pending_socket_io->pending_io_list = socket_io_instance->pending_io_list;
+            (void)memcpy(pending_socket_io->bytes, buffer, size);
+
+            if (singlylinkedlist_add(socket_io_instance->pending_io_list, pending_socket_io) == NULL)
+            {
+                LogError("Failure: Unable to add socket to pending list.");
+                free(pending_socket_io->bytes);
+                free(pending_socket_io);
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+static STATIC_VAR_UNUSED void signal_callback(int signum)
+{
+    AZURE_UNREFERENCED_PARAMETER(signum);
+    LogError("Socket received signal %d.", signum);
+}
+
+static int lookup_address_and_initiate_socket_connection(SOCKET_IO_INSTANCE* socket_io_instance)
+{
+    int result;
+    int err;
+
+    struct addrinfo addrInfoHintIp;
+    struct sockaddr_un addrInfoUn;
+    struct sockaddr* connect_addr = NULL;
+    socklen_t connect_addr_len;
+    struct addrinfo* addrInfoIp = NULL;
+
+    if (socket_io_instance->address_type == ADDRESS_TYPE_IP)
+    {
+        char portString[16];
+
+        memset(&addrInfoHintIp, 0, sizeof(addrInfoHintIp));
+        addrInfoHintIp.ai_family = AF_INET;
+        addrInfoHintIp.ai_socktype = SOCK_STREAM;
+
+        sprintf(portString, "%u", socket_io_instance->port);
+        err = getaddrinfo(socket_io_instance->hostname, portString, &addrInfoHintIp, &addrInfoIp);
+        if (err != 0)
+        {
+            LogError("Failure: getaddrinfo failure %d.", err);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            connect_addr = addrInfoIp->ai_addr;
+            connect_addr_len = sizeof(*addrInfoIp->ai_addr);
+            result = 0;
+        }
+    }
+    else
+    {
+        size_t hostname_len = strlen(socket_io_instance->hostname);
+        if (hostname_len + 1 > sizeof(addrInfoUn.sun_path))
+        {
+            LogError("Hostname %s is too long for a unix socket (max len = %lu)", socket_io_instance->hostname, (unsigned long)sizeof(addrInfoUn.sun_path));
+            result = MU_FAILURE;
+        }
+        else
+        {
+            memset(&addrInfoUn, 0, sizeof(addrInfoUn));
+            addrInfoUn.sun_family = AF_UNIX;
+            // No need to add NULL terminator due to the above memset
+            (void)memcpy(addrInfoUn.sun_path, socket_io_instance->hostname, hostname_len);
+
+            connect_addr = (struct sockaddr*)&addrInfoUn;
+            connect_addr_len = sizeof(addrInfoUn);
+            result = 0;
+        }
+    }
+
+    if (result == 0)
+    {
+        int flags;
+
+        if ((-1 == (flags = fcntl(socket_io_instance->socket, F_GETFL, 0))) ||
+            (fcntl(socket_io_instance->socket, F_SETFL, flags | O_NONBLOCK) == -1))
+        {
+            LogError("Failure: fcntl failure.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            err = connect(socket_io_instance->socket, connect_addr, connect_addr_len);
+            if ((err != 0) && (errno != EINPROGRESS))
+            {
+                LogError("Failure: connect failure %d.", errno);
+                result = MU_FAILURE;
+            }
+        }
+    }
+
+    if (addrInfoIp != NULL)
+    {
+        freeaddrinfo(addrInfoIp);
+    }
+
+    return result;
+}
+
+static int wait_for_connection(SOCKET_IO_INSTANCE* socket_io_instance)
+{
+    int result;
+    int err;
+    int retval;
+    int select_errno = 0;
+
+    fd_set fdset;
+    struct timeval tv;
+
+    FD_ZERO(&fdset);
+    FD_SET(socket_io_instance->socket, &fdset);
+    tv.tv_sec = CONNECT_TIMEOUT;
+    tv.tv_usec = 0;
+
+    do
+    {
+        retval = select(socket_io_instance->socket + 1, NULL, &fdset, NULL, &tv);
+
+        if (retval < 0)
+        {
+            select_errno = errno;
+        }
+    } while (retval < 0 && select_errno == EINTR);
+
+    if (retval != 1)
+    {
+        LogError("Failure: select failure.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        int so_error = 0;
+        socklen_t len = sizeof(so_error);
+        err = getsockopt(socket_io_instance->socket, SOL_SOCKET, SO_ERROR, &so_error, &len);
+        if (err != 0)
+        {
+            LogError("Failure: getsockopt failure %d.", errno);
+            result = MU_FAILURE;
+        }
+        else if (so_error != 0)
+        {
+            err = so_error;
+            LogError("Failure: connect failure %d.", so_error);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+
+
+#ifndef __APPLE__
+static void destroy_network_interface_descriptions(NETWORK_INTERFACE_DESCRIPTION* nid)
+{
+    if (nid != NULL)
+    {
+        if (nid->next != NULL)
+        {
+            destroy_network_interface_descriptions(nid->next);
+        }
+
+        if (nid->name != NULL)
+        {
+            free(nid->name);
+        }
+
+        if (nid->mac_address != NULL)
+        {
+            free(nid->mac_address);
+        }
+
+        if (nid->ip_address != NULL)
+        {
+            free(nid->ip_address);
+        }
+
+        free(nid);
+    }
+}
+
+static NETWORK_INTERFACE_DESCRIPTION* create_network_interface_description(struct ifreq *ifr, NETWORK_INTERFACE_DESCRIPTION* previous_nid)
+{
+    NETWORK_INTERFACE_DESCRIPTION* result;
+
+    if ((result = (NETWORK_INTERFACE_DESCRIPTION*)malloc(sizeof(NETWORK_INTERFACE_DESCRIPTION))) == NULL)
+    {
+        LogError("Failed allocating NETWORK_INTERFACE_DESCRIPTION");
+    }
+    else if ((result->name = (char*)malloc(sizeof(char) * (strlen(ifr->ifr_name) + 1))) == NULL)
+    {
+        LogError("failed setting interface description name (malloc failed)");
+        destroy_network_interface_descriptions(result);
+        result = NULL;
+    }
+    else if (strcpy(result->name, ifr->ifr_name) == NULL)
+    {
+        LogError("failed setting interface description name (strcpy failed)");
+        destroy_network_interface_descriptions(result);
+        result = NULL;
+    }
+    else
+    {
+        char* ip_address;
+        unsigned char* mac = (unsigned char*)ifr->ifr_hwaddr.sa_data;
+
+        if ((result->mac_address = (char*)malloc(sizeof(char) * MAC_ADDRESS_STRING_LENGTH)) == NULL)
+        {
+            LogError("failed formatting mac address (malloc failed)");
+            destroy_network_interface_descriptions(result);
+            result = NULL;
+        }
+        else if (sprintf(result->mac_address, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]) <= 0)
+        {
+            LogError("failed formatting mac address (sprintf failed)");
+            destroy_network_interface_descriptions(result);
+            result = NULL;
+        }
+        else if ((ip_address = inet_ntoa(((struct sockaddr_in*)&ifr->ifr_addr)->sin_addr)) == NULL)
+        {
+            LogError("failed setting the ip address (inet_ntoa failed)");
+            destroy_network_interface_descriptions(result);
+            result = NULL;
+        }
+        else if ((result->ip_address = (char*)malloc(sizeof(char) * (strlen(ip_address) + 1))) == NULL)
+        {
+            LogError("failed setting the ip address (malloc failed)");
+            destroy_network_interface_descriptions(result);
+            result = NULL;
+        }
+        else if (strcpy(result->ip_address, ip_address) == NULL)
+        {
+            LogError("failed setting the ip address (strcpy failed)");
+            destroy_network_interface_descriptions(result);
+            result = NULL;
+        }
+        else
+        {
+            result->next = NULL;
+
+            if (previous_nid != NULL)
+            {
+                previous_nid->next = result;
+            }
+        }
+    }
+
+    return result;
+}
+
+static int get_network_interface_descriptions(int socket, NETWORK_INTERFACE_DESCRIPTION** nid)
+{
+    int result;
+
+    struct ifreq ifr;
+    struct ifconf ifc;
+    char buf[IFREQ_BUFFER_SIZE];
+
+    ifc.ifc_len = sizeof(buf);
+    ifc.ifc_buf = buf;
+
+    if (ioctl(socket, SIOCGIFCONF, &ifc) == -1)
+    {
+        LogError("ioctl failed querying socket (SIOCGIFCONF, errno=%d)", errno);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        NETWORK_INTERFACE_DESCRIPTION* root_nid = NULL;
+        NETWORK_INTERFACE_DESCRIPTION* new_nid = NULL;
+
+        struct ifreq* it = ifc.ifc_req;
+        const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq));
+
+        result = 0;
+
+        for (; it != end; ++it)
+        {
+            strcpy(ifr.ifr_name, it->ifr_name);
+
+            if (ioctl(socket, SIOCGIFFLAGS, &ifr) != 0)
+            {
+                LogError("ioctl failed querying socket (SIOCGIFFLAGS, errno=%d)", errno);
+                result = MU_FAILURE;
+                break;
+            }
+            else if (ioctl(socket, SIOCGIFHWADDR, &ifr) != 0)
+            {
+                LogError("ioctl failed querying socket (SIOCGIFHWADDR, errno=%d)", errno);
+                result = MU_FAILURE;
+                break;
+            }
+            else if (ioctl(socket, SIOCGIFADDR, &ifr) != 0)
+            {
+                LogError("ioctl failed querying socket (SIOCGIFADDR, errno=%d)", errno);
+                result = MU_FAILURE;
+                break;
+            }
+            else if ((new_nid = create_network_interface_description(&ifr, new_nid)) == NULL)
+            {
+                LogError("Failed creating network interface description");
+                result = MU_FAILURE;
+                break;
+            }
+            else if (root_nid == NULL)
+            {
+                root_nid = new_nid;
+            }
+        }
+
+        if (result == 0)
+        {
+            *nid = root_nid;
+        }
+        else
+        {
+            destroy_network_interface_descriptions(root_nid);
+        }
+    }
+
+    return result;
+}
+
+static int set_target_network_interface(int socket, char* mac_address)
+{
+    int result;
+    NETWORK_INTERFACE_DESCRIPTION* nid;
+
+    if (get_network_interface_descriptions(socket, &nid) != 0)
+    {
+        LogError("Failed getting network interface descriptions");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        NETWORK_INTERFACE_DESCRIPTION* current_nid = nid;
+
+        while(current_nid != NULL)
+        {
+            if (strcmp(mac_address, current_nid->mac_address) == 0)
+            {
+                break;
+            }
+
+            current_nid = current_nid->next;
+        }
+
+        if (current_nid == NULL)
+        {
+            LogError("Did not find a network interface matching MAC ADDRESS");
+            result = MU_FAILURE;
+        }
+        else if (setsockopt(socket, SOL_SOCKET, SO_BINDTODEVICE, current_nid->name, strlen(current_nid->name)) != 0)
+        {
+            LogError("setsockopt failed (%d)", errno);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+
+        destroy_network_interface_descriptions(nid);
+    }
+
+    return result;
+}
+#endif //__APPLE__
+
+CONCRETE_IO_HANDLE socketio_create(void* io_create_parameters)
+{
+    SOCKETIO_CONFIG* socket_io_config = io_create_parameters;
+    SOCKET_IO_INSTANCE* result;
+
+    if (socket_io_config == NULL)
+    {
+        LogError("Invalid argument: socket_io_config is NULL");
+        result = NULL;
+    }
+    else
+    {
+        result = malloc(sizeof(SOCKET_IO_INSTANCE));
+        if (result != NULL)
+        {
+            result->address_type = ADDRESS_TYPE_IP;
+            result->pending_io_list = singlylinkedlist_create();
+            if (result->pending_io_list == NULL)
+            {
+                LogError("Failure: singlylinkedlist_create unable to create pending list.");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                if (socket_io_config->hostname != NULL)
+                {
+                    result->hostname = (char*)malloc(strlen(socket_io_config->hostname) + 1);
+                    if (result->hostname != NULL)
+                    {
+                        (void)strcpy(result->hostname, socket_io_config->hostname);
+                    }
+
+                    result->socket = INVALID_SOCKET;
+                }
+                else
+                {
+                    result->hostname = NULL;
+                    result->socket = *((int*)socket_io_config->accepted_socket);
+                }
+
+                if ((result->hostname == NULL) && (result->socket == INVALID_SOCKET))
+                {
+                    LogError("Failure: hostname == NULL and socket is invalid.");
+                    singlylinkedlist_destroy(result->pending_io_list);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    result->port = socket_io_config->port;
+                    result->target_mac_address = NULL;
+                    result->on_bytes_received = NULL;
+                    result->on_io_error = NULL;
+                    result->on_bytes_received_context = NULL;
+                    result->on_io_error_context = NULL;
+                    result->io_state = IO_STATE_CLOSED;
+                }
+            }
+        }
+        else
+        {
+            LogError("Allocation Failure: SOCKET_IO_INSTANCE");
+        }
+    }
+
+    return result;
+}
+
+void socketio_destroy(CONCRETE_IO_HANDLE socket_io)
+{
+    if (socket_io != NULL)
+    {
+        SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)socket_io;
+        /* we cannot do much if the close fails, so just ignore the result */
+        if (socket_io_instance->socket != INVALID_SOCKET)
+        {
+            close(socket_io_instance->socket);
+        }
+
+        /* clear allpending IOs */
+        LIST_ITEM_HANDLE first_pending_io = singlylinkedlist_get_head_item(socket_io_instance->pending_io_list);
+        while (first_pending_io != NULL)
+        {
+            PENDING_SOCKET_IO* pending_socket_io = (PENDING_SOCKET_IO*)singlylinkedlist_item_get_value(first_pending_io);
+            if (pending_socket_io != NULL)
+            {
+                free(pending_socket_io->bytes);
+                free(pending_socket_io);
+            }
+
+            (void)singlylinkedlist_remove(socket_io_instance->pending_io_list, first_pending_io);
+            first_pending_io = singlylinkedlist_get_head_item(socket_io_instance->pending_io_list);
+        }
+
+        singlylinkedlist_destroy(socket_io_instance->pending_io_list);
+        free(socket_io_instance->hostname);
+        free(socket_io_instance->target_mac_address);
+        free(socket_io);
+    }
+}
+
+int socketio_open(CONCRETE_IO_HANDLE socket_io, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context)
+{
+    int result;
+
+    SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)socket_io;
+    if (socket_io == NULL)
+    {
+        LogError("Invalid argument: SOCKET_IO_INSTANCE is NULL");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (socket_io_instance->io_state != IO_STATE_CLOSED)
+        {
+            LogError("Failure: socket state is not closed.");
+            result = MU_FAILURE;
+        }
+        else if (socket_io_instance->socket != INVALID_SOCKET)
+        {
+            // Opening an accepted socket
+            socket_io_instance->on_bytes_received_context = on_bytes_received_context;
+            socket_io_instance->on_bytes_received = on_bytes_received;
+            socket_io_instance->on_io_error = on_io_error;
+            socket_io_instance->on_io_error_context = on_io_error_context;
+
+            socket_io_instance->io_state = IO_STATE_OPEN;
+
+            result = 0;
+        }
+        else
+        {
+            socket_io_instance->socket = socket (socket_io_instance->address_type == ADDRESS_TYPE_IP ? AF_INET : AF_UNIX, SOCK_STREAM, 0);
+            if (socket_io_instance->socket < SOCKET_SUCCESS)
+            {
+                LogError("Failure: socket create failure %d.", socket_io_instance->socket);
+                result = MU_FAILURE;
+            }
+#ifndef __APPLE__
+            else if (socket_io_instance->target_mac_address != NULL &&
+                     set_target_network_interface(socket_io_instance->socket, socket_io_instance->target_mac_address) != 0)
+            {
+                LogError("Failure: failed selecting target network interface (MACADDR=%s).", socket_io_instance->target_mac_address);
+                result = MU_FAILURE;
+            }
+#endif //__APPLE__
+            else if ((result = lookup_address_and_initiate_socket_connection(socket_io_instance)) != 0)
+            {
+                LogError("lookup_address_and_connect_socket failed");
+            }
+            else if ((result = wait_for_connection(socket_io_instance)) != 0)
+            {
+                LogError("wait_for_connection failed");
+            }
+
+            if (result == 0)
+            {
+                socket_io_instance->on_bytes_received = on_bytes_received;
+                socket_io_instance->on_bytes_received_context = on_bytes_received_context;
+
+                socket_io_instance->on_io_error = on_io_error;
+                socket_io_instance->on_io_error_context = on_io_error_context;
+
+                socket_io_instance->io_state = IO_STATE_OPEN;
+            }
+            else
+            {
+                if (socket_io_instance->socket >= SOCKET_SUCCESS)
+                {
+                    close(socket_io_instance->socket);
+                }
+                socket_io_instance->socket = INVALID_SOCKET;
+            }
+        }
+    }
+
+    if (on_io_open_complete != NULL)
+    {
+        on_io_open_complete(on_io_open_complete_context, result == 0 ? IO_OPEN_OK : IO_OPEN_ERROR);
+    }
+
+    return result;
+}
+
+int socketio_close(CONCRETE_IO_HANDLE socket_io, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* callback_context)
+{
+    int result = 0;
+
+    if (socket_io == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)socket_io;
+        if ((socket_io_instance->io_state != IO_STATE_CLOSED) && (socket_io_instance->io_state != IO_STATE_CLOSING))
+        {
+            // Only close if the socket isn't already in the closed or closing state
+            (void)shutdown(socket_io_instance->socket, SHUT_RDWR);
+            close(socket_io_instance->socket);
+            socket_io_instance->socket = INVALID_SOCKET;
+            socket_io_instance->io_state = IO_STATE_CLOSED;
+        }
+
+        if (on_io_close_complete != NULL)
+        {
+            on_io_close_complete(callback_context);
+        }
+
+        result = 0;
+    }
+
+    return result;
+}
+
+int socketio_send(CONCRETE_IO_HANDLE socket_io, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context)
+{
+    int result;
+
+    if ((socket_io == NULL) ||
+        (buffer == NULL) ||
+        (size == 0))
+    {
+        /* Invalid arguments */
+        LogError("Invalid argument: send given invalid parameter");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)socket_io;
+        if (socket_io_instance->io_state != IO_STATE_OPEN)
+        {
+            LogError("Failure: socket state is not opened.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            LIST_ITEM_HANDLE first_pending_io = singlylinkedlist_get_head_item(socket_io_instance->pending_io_list);
+            if (first_pending_io != NULL)
+            {
+                if (add_pending_io(socket_io_instance, buffer, size, on_send_complete, callback_context) != 0)
+                {
+                    LogError("Failure: add_pending_io failed.");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    result = 0;
+                }
+            }
+            else
+            {
+                signal(SIGPIPE, SIG_IGN);
+
+                ssize_t send_result = send(socket_io_instance->socket, buffer, size, 0);
+                if ((send_result < 0) || ((size_t)send_result != size))
+                {
+                    if (send_result == INVALID_SOCKET)
+                    {
+                        if (errno == EAGAIN) /*send says "come back later" with EAGAIN - likely the socket buffer cannot accept more data*/
+                        {
+                            /*do nothing*/
+                            result = 0;
+                        }
+                        else
+                        {
+                            LogError("Failure: sending socket failed. errno=%d (%s).", errno, strerror(errno));
+                            result = MU_FAILURE;
+                        }
+                    }
+                    else
+                    {
+                        /* queue data */
+                        if (add_pending_io(socket_io_instance, buffer + send_result, size - send_result, on_send_complete, callback_context) != 0)
+                        {
+                            LogError("Failure: add_pending_io failed.");
+                            result = MU_FAILURE;
+                        }
+                        else
+                        {
+                            result = 0;
+                        }
+                    }
+                }
+                else
+                {
+                    if (on_send_complete != NULL)
+                    {
+                        on_send_complete(callback_context, IO_SEND_OK);
+                    }
+
+                    result = 0;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+void socketio_dowork(CONCRETE_IO_HANDLE socket_io)
+{
+    if (socket_io != NULL)
+    {
+        SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)socket_io;
+        LIST_ITEM_HANDLE first_pending_io = singlylinkedlist_get_head_item(socket_io_instance->pending_io_list);
+        while (first_pending_io != NULL)
+        {
+            PENDING_SOCKET_IO* pending_socket_io = (PENDING_SOCKET_IO*)singlylinkedlist_item_get_value(first_pending_io);
+            if (pending_socket_io == NULL)
+            {
+                indicate_error(socket_io_instance);
+                LogError("Failure: retrieving socket from list");
+                break;
+            }
+
+            signal(SIGPIPE, SIG_IGN);
+
+            ssize_t send_result = send(socket_io_instance->socket, pending_socket_io->bytes, pending_socket_io->size, 0);
+            if ((send_result < 0) || ((size_t)send_result != pending_socket_io->size))
+            {
+                if (send_result == INVALID_SOCKET)
+                {
+                    if (errno == EAGAIN) /*send says "come back later" with EAGAIN - likely the socket buffer cannot accept more data*/
+                    {
+                        /*do nothing until next dowork */
+                        break;
+                    }
+                    else
+                    {
+                        free(pending_socket_io->bytes);
+                        free(pending_socket_io);
+                        (void)singlylinkedlist_remove(socket_io_instance->pending_io_list, first_pending_io);
+
+                        LogError("Failure: sending Socket information. errno=%d (%s).", errno, strerror(errno));
+                        indicate_error(socket_io_instance);
+                    }
+                }
+                else
+                {
+                    /* simply wait until next dowork */
+                    (void)memmove(pending_socket_io->bytes, pending_socket_io->bytes + send_result, pending_socket_io->size - send_result);
+                    pending_socket_io->size -= send_result;
+                    break;
+                }
+            }
+            else
+            {
+                if (pending_socket_io->on_send_complete != NULL)
+                {
+                    pending_socket_io->on_send_complete(pending_socket_io->callback_context, IO_SEND_OK);
+                }
+
+                free(pending_socket_io->bytes);
+                free(pending_socket_io);
+                if (singlylinkedlist_remove(socket_io_instance->pending_io_list, first_pending_io) != 0)
+                {
+                    indicate_error(socket_io_instance);
+                    LogError("Failure: unable to remove socket from list");
+                }
+            }
+
+            first_pending_io = singlylinkedlist_get_head_item(socket_io_instance->pending_io_list);
+        }
+
+        if (socket_io_instance->io_state == IO_STATE_OPEN)
+        {
+            ssize_t received = 0;
+            do
+            {
+                received = recv(socket_io_instance->socket, socket_io_instance->recv_bytes, RECEIVE_BYTES_VALUE, 0);
+                if (received > 0)
+                {
+                    if (socket_io_instance->on_bytes_received != NULL)
+                    {
+                        /* Explicitly ignoring here the result of the callback */
+                        (void)socket_io_instance->on_bytes_received(socket_io_instance->on_bytes_received_context, socket_io_instance->recv_bytes, received);
+                    }
+                }
+                else if (received == 0)
+                {
+                    // Do not log error here due to this is probably the socket being closed on the other end
+                    indicate_error(socket_io_instance);
+                }
+                else if (received < 0 && errno != EAGAIN)
+                {
+                    LogError("Socketio_Failure: Receiving data from endpoint: errno=%d.", errno);
+                    indicate_error(socket_io_instance);
+                }
+
+            } while (received > 0 && socket_io_instance->io_state == IO_STATE_OPEN);
+        }
+    }
+}
+
+// Edison is missing this from netinet/tcp.h, but this code still works if we manually define it.
+#ifndef SOL_TCP
+#define SOL_TCP 6
+#endif
+
+#ifndef __APPLE__
+static void strtoup(char* str)
+{
+    if (str != NULL)
+    {
+        while (*str != '\0')
+        {
+            if (isalpha((int)*str) && islower((int)*str))
+            {
+                *str = (char)toupper((int)*str);
+            }
+            str++;
+        }
+    }
+}
+#endif // __APPLE__
+
+static int socketio_setaddresstype_option(SOCKET_IO_INSTANCE* socket_io_instance, const char* addressType)
+{
+    int result;
+
+    if (socket_io_instance->io_state != IO_STATE_CLOSED)
+    {
+        LogError("Socket's type can only be changed when in state 'IO_STATE_CLOSED'.  Current state=%d", socket_io_instance->io_state);
+        result = MU_FAILURE;
+    }
+    else if (strcmp(addressType, OPTION_ADDRESS_TYPE_DOMAIN_SOCKET) == 0)
+    {
+        socket_io_instance->address_type = ADDRESS_TYPE_DOMAIN_SOCKET;
+        result = 0;
+    }
+    else if (strcmp(addressType, OPTION_ADDRESS_TYPE_IP_SOCKET) == 0)
+    {
+        socket_io_instance->address_type = ADDRESS_TYPE_IP;
+        result = 0;
+    }
+    else
+    {
+        LogError("Address type %s is not supported", addressType);
+        result = MU_FAILURE;
+    }
+
+    return result;
+}
+
+int socketio_setoption(CONCRETE_IO_HANDLE socket_io, const char* optionName, const void* value)
+{
+    int result;
+
+    if (socket_io == NULL ||
+        optionName == NULL ||
+        value == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        SOCKET_IO_INSTANCE* socket_io_instance = (SOCKET_IO_INSTANCE*)socket_io;
+
+        if (strcmp(optionName, "tcp_keepalive") == 0)
+        {
+            result = setsockopt(socket_io_instance->socket, SOL_SOCKET, SO_KEEPALIVE, value, sizeof(int));
+            if (result == -1) result = errno;
+        }
+        else if (strcmp(optionName, "tcp_keepalive_time") == 0)
+        {
+#ifdef __APPLE__
+            result = setsockopt(socket_io_instance->socket, IPPROTO_TCP, TCP_KEEPALIVE, value, sizeof(int));
+#else
+            result = setsockopt(socket_io_instance->socket, SOL_TCP, TCP_KEEPIDLE, value, sizeof(int));
+#endif
+            if (result == -1) result = errno;
+        }
+        else if (strcmp(optionName, "tcp_keepalive_interval") == 0)
+        {
+            result = setsockopt(socket_io_instance->socket, SOL_TCP, TCP_KEEPINTVL, value, sizeof(int));
+            if (result == -1) result = errno;
+        }
+        else if (strcmp(optionName, OPTION_NET_INT_MAC_ADDRESS) == 0)
+        {
+#ifdef __APPLE__
+            LogError("option not supported.");
+            result = MU_FAILURE;
+#else
+            if (strlen(value) == 0)
+            {
+                LogError("option value must be a valid mac address");
+                result = MU_FAILURE;
+            }
+            else if ((socket_io_instance->target_mac_address = (char*)malloc(sizeof(char) * (strlen(value) + 1))) == NULL)
+            {
+                LogError("failed setting net_interface_mac_address option (malloc failed)");
+                result = MU_FAILURE;
+            }
+            else if (strcpy(socket_io_instance->target_mac_address, value) == NULL)
+            {
+                LogError("failed setting net_interface_mac_address option (strcpy failed)");
+                free(socket_io_instance->target_mac_address);
+                socket_io_instance->target_mac_address = NULL;
+                result = MU_FAILURE;
+            }
+            else
+            {
+                strtoup(socket_io_instance->target_mac_address);
+                result = 0;
+            }
+#endif
+        }
+        else if (strcmp(optionName, OPTION_ADDRESS_TYPE) == 0)
+        {
+            result = socketio_setaddresstype_option(socket_io_instance, (const char*)value);
+        }
+        else
+        {
+            result = MU_FAILURE;
+        }
+    }
+
+    return result;
+}
+
+const IO_INTERFACE_DESCRIPTION* socketio_get_interface_description(void)
+{
+    return &socket_io_interface_description;
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/threadapi_toppers.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/threadapi_toppers.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/threadapi_toppers.c	(revision 389)
@@ -0,0 +1,189 @@
+/*
+ *  TOPPERS PROJECT Home Network Working Group Software
+ * 
+ *  Copyright (C) 2019 Cores Co., Ltd. Japan
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+#include <stdint.h>
+#include <stdlib.h>
+#include <kernel.h>
+#include <t_stdlib.h>
+#include "azure_c_shared_utility/threadapi.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+MU_DEFINE_ENUM_STRINGS(THREADAPI_RESULT, THREADAPI_RESULT_VALUES);
+
+#ifdef TOPPERS_SUPPORT_DYNAMIC_CRE
+#define MAX_THREADS 4
+#define TASK_PRIORITY ((TMAX_TPRI + TMIN_TPRI) / 2)
+
+typedef struct _thread
+{
+	ID tskid;
+	int result;
+} toppersThread;
+static toppersThread threads[MAX_THREADS] = { 0 };
+#endif
+
+THREADAPI_RESULT ThreadAPI_Create(THREAD_HANDLE* threadHandle, THREAD_START_FUNC func, void* arg)
+{
+#ifndef TOPPERS_SUPPORT_DYNAMIC_CRE
+	LogError("TOPPERS/ASP3 does not support multi-thread function.");
+	return THREADAPI_ERROR;
+#else
+	THREADAPI_RESULT result;
+	if ((threadHandle == NULL) ||
+		(func == NULL))
+	{
+		result = THREADAPI_INVALID_ARG;
+		LogError("(result = %s)", MU_ENUM_TO_STRING(THREADAPI_RESULT, result));
+	}
+	else {
+		ER_ID ret;
+		T_CTSK ctsk;
+		toppersThread *thread = NULL;
+
+		for (int i = 0; i < MAX_THREADS; i++) {
+			if (threads[i].tskid == 0) {
+				thread = &threads[i];
+				break;
+			}
+		}
+
+		memset(&ctsk, 0, sizeof(ctsk));
+
+		ctsk.exinf = (intptr_t)arg;
+		ctsk.task = (TASK)func;
+		ctsk.itskpri = TASK_PRIORITY;
+
+		ret = acre_tsk(&ctsk);
+		if (ret > 0) {
+			if (thread == NULL) {
+				for (int i = 0; i < MAX_THREADS; i++) {
+					if (threads[i].tskid == ret) {
+						thread = &threads[i];
+						break;
+					}
+				}
+			}
+			if (thread != NULL) {
+				thread->result = 0;
+			}
+			if (act_tsk(ret) == E_OK) {
+				*threadHandle = (THREAD_HANDLE)(ret);
+				result = THREADAPI_OK;
+			}
+			else {
+				del_tsk(ret);
+				result = THREADAPI_ERROR;
+				LogError("(result = %s)", MU_ENUM_TO_STRING(THREADAPI_RESULT, result));
+			}
+		}
+		else {
+			result = THREADAPI_NO_MEMORY;
+			LogError("(result = %s)", MU_ENUM_TO_STRING(THREADAPI_RESULT, result));
+		}
+	}
+
+	return result;
+#endif
+}
+
+THREADAPI_RESULT ThreadAPI_Join(THREAD_HANDLE threadHandle, int *res)
+{
+#ifndef TOPPERS_SUPPORT_DYNAMIC_CRE
+	LogError("TOPPERS/ASP3 does not support multi-thread function.");
+	return THREADAPI_ERROR;
+#else
+	ID tskid = (ID)threadHandle;
+	T_RTSK rtsk;
+	toppersThread *thread = NULL;
+	ER ret;
+
+	for (;;) {
+		ret = ref_tsk(tskid, &rtsk);
+		if ((ret != E_OK) || (rtsk.tskstat == TTS_DMT))
+			break;
+
+		dly_tsk(10000);
+	}
+
+	for (int i = 0; i < MAX_THREADS; i++) {
+		if (threads[i].tskid == ret) {
+			thread = &threads[i];
+			break;
+		}
+	}
+
+	if (thread != NULL) {
+		*res = thread->result;
+	}
+
+	return THREADAPI_OK;
+#endif
+}
+
+void ThreadAPI_Exit(int res)
+{
+	ER ret;
+#ifdef TOPPERS_SUPPORT_DYNAMIC_CRE
+	ID tskid;
+
+	ret = get_tid(&tskid);
+	if (ret != E_OK) {
+		LogError("get_tid error. %s", itron_strerror(ret));
+		return;
+	}
+
+	for (int i = 0; i < MAX_THREADS; i++) {
+		if (threads[i].tskid == tskid) {
+			threads[i].result = res;
+			break;
+		}
+	}
+#endif
+	ret = ext_tsk();
+	if (ret != E_OK) {
+		LogError("ext_tsk error. %s", itron_strerror(ret));
+	}
+}
+
+void ThreadAPI_Sleep(unsigned int milliseconds)
+{
+	ER ret;
+
+	ret = dly_tsk((RELTIM)milliseconds * 1000);
+	if (ret != E_OK) {
+		LogError("dly_tsk error. %s", itron_strerror(ret));
+	}
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/tickcounter_toppers.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/tickcounter_toppers.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/tickcounter_toppers.c	(revision 389)
@@ -0,0 +1,105 @@
+/*
+ *  TOPPERS PROJECT Home Network Working Group Software
+ * 
+ *  Copyright (C) 2019 Cores Co., Ltd. Japan
+ * 
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
+ * 
+ *  @(#) $Id$
+ */
+#include <stdint.h>
+#include <stdlib.h>
+#include <kernel.h>
+#include <sil.h>
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+typedef struct tick_counter_instance_tag
+{
+	SYSTIM last_clock_value;
+	tickcounter_ms_t current_ms;
+} TICK_COUNTER_INSTANCE_TAG;
+
+TICK_COUNTER_HANDLE tickcounter_create(void)
+{
+	ER ret;
+	SYSTIM now;
+	TICK_COUNTER_INSTANCE_TAG* result;
+
+	result = (TICK_COUNTER_INSTANCE_TAG *)malloc(sizeof(TICK_COUNTER_INSTANCE_TAG));
+
+	if (get_tim(&now) != E_OK) {
+		LogError("tickcounter failed: time return INVALID_TIME.");
+		free(result);
+		result = NULL;
+	}
+	else {
+		result->last_clock_value = now;
+		result->current_ms = 0;
+	}
+
+	return (TICK_COUNTER_HANDLE)result;
+}
+
+void tickcounter_destroy(TICK_COUNTER_HANDLE tick_counter)
+{
+	if (tick_counter != NULL)
+	{
+		free((TICK_COUNTER_INSTANCE_TAG *)tick_counter);
+	}
+}
+
+int tickcounter_get_current_ms(TICK_COUNTER_HANDLE tick_counter, tickcounter_ms_t * current_ms)
+{
+	ER ret;
+	SYSTIM now;
+	int result;
+
+	if (tick_counter == NULL || current_ms == NULL)
+	{
+		result = MU_FAILURE;
+	}
+	else
+	{
+		if (get_tim(&now) != E_OK) {
+			result = MU_FAILURE;
+		}
+		else {
+			TICK_COUNTER_INSTANCE_TAG* tick_counter_instance = (TICK_COUNTER_INSTANCE_TAG*)tick_counter;
+			tick_counter_instance->current_ms += (now - tick_counter_instance->last_clock_value) / 1000;
+			tick_counter_instance->last_clock_value = now;
+			*current_ms = tick_counter_instance->current_ms;
+			result = 0;
+		}
+	}
+
+	return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/tlsio_wolfssl.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/tlsio_wolfssl.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/tlsio_wolfssl.c	(revision 389)
@@ -0,0 +1,949 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#define WOLFSSL_OPTIONS_IGNORE_SYS
+#include "wolfssl/options.h"
+#include "wolfssl/ssl.h"
+#include "wolfssl/error-ssl.h"
+#include "wolfssl/wolfcrypt/types.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <string.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/tlsio.h"
+#include "azure_c_shared_utility/tlsio_wolfssl.h"
+#include "azure_c_shared_utility/socketio.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+
+typedef enum TLSIO_STATE_ENUM_TAG
+{
+    TLSIO_STATE_NOT_OPEN,
+    TLSIO_STATE_OPENING_UNDERLYING_IO,
+    TLSIO_STATE_IN_HANDSHAKE,
+    TLSIO_STATE_OPEN,
+    TLSIO_STATE_CLOSING,
+    TLSIO_STATE_ERROR
+} TLSIO_STATE_ENUM;
+
+typedef struct TLS_IO_INSTANCE_TAG
+{
+    XIO_HANDLE socket_io;
+    ON_BYTES_RECEIVED on_bytes_received;
+    ON_IO_OPEN_COMPLETE on_io_open_complete;
+    ON_IO_CLOSE_COMPLETE on_io_close_complete;
+    ON_IO_ERROR on_io_error;
+    void* on_bytes_received_context;
+    void* on_io_open_complete_context;
+    void* on_io_close_complete_context;
+    void* on_io_error_context;
+    WOLFSSL* ssl;
+    WOLFSSL_CTX* ssl_context;
+    TLSIO_STATE_ENUM tlsio_state;
+    unsigned char* socket_io_read_bytes;
+    size_t socket_io_read_byte_count;
+    ON_SEND_COMPLETE on_send_complete;
+    void* on_send_complete_callback_context;
+    char* certificate;
+    char* x509certificate;
+    char* x509privatekey;
+    int wolfssl_device_id;
+} TLS_IO_INSTANCE;
+
+STATIC_VAR_UNUSED const char* const OPTION_WOLFSSL_SET_DEVICE_ID = "SetDeviceId";
+static const size_t SOCKET_READ_LIMIT = 5;
+
+/*this function will clone an option given by name and value*/
+static void* tlsio_wolfssl_CloneOption(const char* name, const void* value)
+{
+    void* result;
+    if ((name == NULL) || (value == NULL))
+    {
+        LogError("invalid parameter detected: const char* name=%p, const void* value=%p", name, value);
+        result = NULL;
+    }
+    else
+    {
+        if (strcmp(name, OPTION_TRUSTED_CERT) == 0)
+        {
+            if (mallocAndStrcpy_s((char**)&result, value) != 0)
+            {
+                LogError("unable to mallocAndStrcpy_s TrustedCerts value");
+                result = NULL;
+            }
+            else
+            {
+                /*return as is*/
+            }
+        }
+        else if (strcmp(name, SU_OPTION_X509_CERT) == 0)
+        {
+            if (mallocAndStrcpy_s((char**)&result, value) != 0)
+            {
+                LogError("unable to mallocAndStrcpy_s x509certificate value");
+                result = NULL;
+            }
+            else
+            {
+                /*return as is*/
+            }
+        }
+        else if (strcmp(name, SU_OPTION_X509_PRIVATE_KEY) == 0)
+        {
+            if (mallocAndStrcpy_s((char**)&result, value) != 0)
+            {
+                LogError("unable to mallocAndStrcpy_s x509privatekey value");
+                result = NULL;
+            }
+            else
+            {
+                /*return as is*/
+            }
+        }
+        else
+        {
+            LogError("not handled option : %s", name);
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+/*this function destroys an option previously created*/
+static void tlsio_wolfssl_DestroyOption(const char* name, const void* value)
+{
+    /*since all options for this layer are actually string copies., disposing of one is just calling free*/
+    if ((name == NULL) || (value == NULL))
+    {
+        LogError("invalid parameter detected: const char* name=%p, const void* value=%p", name, value);
+    }
+    else
+    {
+        if ((strcmp(name, OPTION_TRUSTED_CERT) == 0) ||
+            (strcmp(name, SU_OPTION_X509_CERT) == 0) ||
+            (strcmp(name, SU_OPTION_X509_PRIVATE_KEY) == 0))
+        {
+            free((void*)value);
+        }
+        else
+        {
+            LogError("not handled option : %s", name);
+        }
+    }
+}
+
+static OPTIONHANDLER_HANDLE tlsio_wolfssl_retrieveoptions(CONCRETE_IO_HANDLE tls_io)
+{
+    OPTIONHANDLER_HANDLE result;
+    if (tls_io == NULL)
+    {
+        LogError("NULL tls_io parameter");
+        result = NULL;
+    }
+    else
+    {
+        result = OptionHandler_Create(tlsio_wolfssl_CloneOption, tlsio_wolfssl_DestroyOption, tlsio_wolfssl_setoption);
+        if (result == NULL)
+        {
+            LogError("unable to OptionHandler_Create");
+            /*return as is*/
+        }
+        else
+        {
+            /*this layer cares about the certificates and the x509 credentials*/
+            TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+            if (
+                (tls_io_instance->x509certificate != NULL) &&
+                (OptionHandler_AddOption(result, SU_OPTION_X509_CERT, tls_io_instance->x509certificate) != 0)
+                )
+            {
+                LogError("unable to save x509certificate option");
+                OptionHandler_Destroy(result);
+                result = NULL;
+            }
+            else if (
+                (tls_io_instance->x509privatekey != NULL) &&
+                (OptionHandler_AddOption(result, SU_OPTION_X509_PRIVATE_KEY, tls_io_instance->x509privatekey) != 0)
+                )
+            {
+                LogError("unable to save x509privatekey option");
+                OptionHandler_Destroy(result);
+                result = NULL;
+            }
+            else if (
+                (tls_io_instance->certificate != NULL) &&
+                (OptionHandler_AddOption(result, OPTION_TRUSTED_CERT, tls_io_instance->certificate) != 0)
+                )
+            {
+                LogError("unable to save TrustedCerts option");
+                OptionHandler_Destroy(result);
+                result = NULL;
+            }
+            else
+            {
+                /*all is fine, all interesting options have been saved*/
+                /*return as is*/
+            }
+        }
+    }
+
+    return result;
+}
+
+static const IO_INTERFACE_DESCRIPTION tlsio_wolfssl_interface_description =
+{
+    tlsio_wolfssl_retrieveoptions,
+    tlsio_wolfssl_create,
+    tlsio_wolfssl_destroy,
+    tlsio_wolfssl_open,
+    tlsio_wolfssl_close,
+    tlsio_wolfssl_send,
+    tlsio_wolfssl_dowork,
+    tlsio_wolfssl_setoption
+};
+
+static void indicate_error(TLS_IO_INSTANCE* tls_io_instance)
+{
+    if (tls_io_instance->on_io_error != NULL)
+    {
+        tls_io_instance->on_io_error(tls_io_instance->on_io_error_context);
+    }
+}
+
+static void indicate_open_complete(TLS_IO_INSTANCE* tls_io_instance, IO_OPEN_RESULT open_result)
+{
+    if (tls_io_instance->on_io_open_complete != NULL)
+    {
+        tls_io_instance->on_io_open_complete(tls_io_instance->on_io_open_complete_context, open_result);
+    }
+}
+
+static int decode_ssl_received_bytes(TLS_IO_INSTANCE* tls_io_instance)
+{
+    int result = 0;
+    unsigned char buffer[64];
+
+    int rcv_bytes = 0;
+    do
+    {
+        rcv_bytes = wolfSSL_read(tls_io_instance->ssl, buffer, sizeof(buffer));
+        if (rcv_bytes > 0)
+        {
+            if (tls_io_instance->on_bytes_received != NULL)
+            {
+                tls_io_instance->on_bytes_received(tls_io_instance->on_bytes_received_context, buffer, rcv_bytes);
+            }
+        }
+    } while (rcv_bytes > 0);
+    return result;
+}
+
+static void on_underlying_io_open_complete(void* context, IO_OPEN_RESULT open_result)
+{
+    TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+
+    if (open_result != IO_OPEN_OK)
+    {
+        LogError("Underlying IO open failed");
+        tls_io_instance->tlsio_state = TLSIO_STATE_ERROR;
+        indicate_open_complete(tls_io_instance, IO_OPEN_ERROR);
+    }
+    else
+    {
+        int res;
+        tls_io_instance->tlsio_state = TLSIO_STATE_IN_HANDSHAKE;
+
+        res = wolfSSL_connect(tls_io_instance->ssl);
+        if (res != SSL_SUCCESS)
+        {
+            LogError("WolfSSL connect failed");
+            indicate_open_complete(tls_io_instance, IO_OPEN_ERROR);
+            tls_io_instance->tlsio_state = TLSIO_STATE_ERROR;
+        }
+    }
+}
+
+static void on_underlying_io_bytes_received(void* context, const unsigned char* buffer, size_t size)
+{
+    if (context != NULL)
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+
+        unsigned char* new_socket_io_read_bytes = (unsigned char*)realloc(tls_io_instance->socket_io_read_bytes, tls_io_instance->socket_io_read_byte_count + size);
+        if (new_socket_io_read_bytes == NULL)
+        {
+            LogError("Failed allocating memory for received bytes");
+            tls_io_instance->tlsio_state = TLSIO_STATE_ERROR;
+            indicate_error(tls_io_instance);
+        }
+        else
+        {
+            tls_io_instance->socket_io_read_bytes = new_socket_io_read_bytes;
+            (void)memcpy(tls_io_instance->socket_io_read_bytes + tls_io_instance->socket_io_read_byte_count, buffer, size);
+            tls_io_instance->socket_io_read_byte_count += size;
+        }
+    }
+    else
+    {
+        LogInfo("Supplied context is NULL on bytes_received");
+    }
+}
+
+static void on_underlying_io_error(void* context)
+{
+    if (context != NULL)
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+
+        switch (tls_io_instance->tlsio_state)
+        {
+        default:
+            LogError("Unknown TLS IO WolfSSL state: %d", (int)tls_io_instance->tlsio_state);
+            break;
+
+        case TLSIO_STATE_NOT_OPEN:
+        case TLSIO_STATE_ERROR:
+            break;
+
+        case TLSIO_STATE_OPENING_UNDERLYING_IO:
+        case TLSIO_STATE_IN_HANDSHAKE:
+            tls_io_instance->tlsio_state = TLSIO_STATE_ERROR;
+            indicate_open_complete(tls_io_instance, IO_OPEN_ERROR);
+            break;
+
+        case TLSIO_STATE_OPEN:
+            tls_io_instance->tlsio_state = TLSIO_STATE_ERROR;
+            indicate_error(tls_io_instance);
+            break;
+        }
+    }
+    else
+    {
+        LogInfo("Supplied context is NULL on io_error");
+    }
+}
+
+static void on_underlying_io_close_complete(void* context)
+{
+    TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+
+    if (tls_io_instance->tlsio_state != TLSIO_STATE_CLOSING)
+    {
+        LogError("on_underlying_io_close_complete called when not in CLOSING state");
+    }
+    else
+    {
+        if (tls_io_instance->on_io_close_complete != NULL)
+        {
+            tls_io_instance->on_io_close_complete(tls_io_instance->on_io_close_complete_context);
+        }
+        tls_io_instance->tlsio_state = TLSIO_STATE_NOT_OPEN;
+    }
+}
+
+static int on_io_recv(WOLFSSL *ssl, char *buf, int sz, void *context)
+{
+    int result;
+    if (context != NULL)
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+        unsigned char* new_socket_io_read_bytes;
+        size_t socket_reads = 0;
+
+        AZURE_UNREFERENCED_PARAMETER(ssl);
+        while (tls_io_instance->socket_io_read_byte_count == 0 && socket_reads < SOCKET_READ_LIMIT)
+        {
+            xio_dowork(tls_io_instance->socket_io);
+            if (tls_io_instance->tlsio_state != TLSIO_STATE_IN_HANDSHAKE)
+            {
+                break;
+            }
+            socket_reads++;
+        }
+
+        result = tls_io_instance->socket_io_read_byte_count;
+        if (result > sz)
+        {
+            result = sz;
+        }
+
+        if (result > 0)
+        {
+            (void)memcpy(buf, tls_io_instance->socket_io_read_bytes, result);
+            (void)memmove(tls_io_instance->socket_io_read_bytes, tls_io_instance->socket_io_read_bytes + result, tls_io_instance->socket_io_read_byte_count - result);
+            tls_io_instance->socket_io_read_byte_count -= result;
+            if (tls_io_instance->socket_io_read_byte_count > 0)
+            {
+                new_socket_io_read_bytes = (unsigned char*)realloc(tls_io_instance->socket_io_read_bytes, tls_io_instance->socket_io_read_byte_count);
+                if (new_socket_io_read_bytes != NULL)
+                {
+                    tls_io_instance->socket_io_read_bytes = new_socket_io_read_bytes;
+                }
+            }
+            else
+            {
+                free(tls_io_instance->socket_io_read_bytes);
+                tls_io_instance->socket_io_read_bytes = NULL;
+            }
+        }
+
+        if (tls_io_instance->tlsio_state == TLSIO_STATE_ERROR)
+        {
+            result = WOLFSSL_CBIO_ERR_GENERAL;
+        }
+        else if ( (result == 0) && (tls_io_instance->tlsio_state == TLSIO_STATE_OPEN))
+        {
+            result = WOLFSSL_CBIO_ERR_WANT_READ;
+        }
+        else if ((result == 0) && (tls_io_instance->tlsio_state == TLSIO_STATE_CLOSING || tls_io_instance->tlsio_state == TLSIO_STATE_NOT_OPEN))
+        {
+            result = WOLFSSL_CBIO_ERR_CONN_CLOSE;
+        }
+    }
+    else
+    {
+        result = WOLFSSL_CBIO_ERR_GENERAL;
+    }
+    return result;
+}
+
+static int on_io_send(WOLFSSL *ssl, char *buf, int sz, void *context)
+{
+    int result;
+    AZURE_UNREFERENCED_PARAMETER(ssl);
+
+    TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+
+    if (xio_send(tls_io_instance->socket_io, buf, sz, tls_io_instance->on_send_complete, tls_io_instance->on_send_complete_callback_context) != 0)
+    {
+        LogError("Failed sending bytes through underlying IO");
+        tls_io_instance->tlsio_state = TLSIO_STATE_ERROR;
+        indicate_error(tls_io_instance);
+        result = -1;
+    }
+    else
+    {
+        result = sz;
+    }
+
+    return result;
+}
+
+static int on_handshake_done(WOLFSSL* ssl, void* context)
+{
+    AZURE_UNREFERENCED_PARAMETER(ssl);
+    TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)context;
+    if (tls_io_instance->tlsio_state == TLSIO_STATE_OPEN) {
+    }
+    else if (tls_io_instance->tlsio_state != TLSIO_STATE_IN_HANDSHAKE)
+    {
+        LogInfo("on_handshake_done called when not in IN_HANDSHAKE state");
+    }
+    else
+    {
+        tls_io_instance->tlsio_state = TLSIO_STATE_OPEN;
+        indicate_open_complete(tls_io_instance, IO_OPEN_OK);
+    }
+
+    return 0;
+}
+
+static int add_certificate_to_store(TLS_IO_INSTANCE* tls_io_instance)
+{
+    int result;
+    if (tls_io_instance->certificate != NULL)
+    {
+        int res = wolfSSL_CTX_load_verify_buffer(tls_io_instance->ssl_context, (const unsigned char*)tls_io_instance->certificate, strlen(tls_io_instance->certificate), SSL_FILETYPE_PEM);
+        if (res != SSL_SUCCESS)
+        {
+            LogError("wolfSSL_CTX_load_verify_buffer failed");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+static int x509_wolfssl_add_credentials(WOLFSSL* ssl, char* x509certificate, char* x509privatekey) {
+
+    int result;
+
+    if (wolfSSL_use_certificate_chain_buffer(ssl, (unsigned char*)x509certificate, strlen(x509certificate)) != SSL_SUCCESS)
+    {
+        LogError("unable to load x509 client certificate");
+        result = MU_FAILURE;
+    }
+    else if (wolfSSL_use_PrivateKey_buffer(ssl, (unsigned char*)x509privatekey, strlen(x509privatekey), SSL_FILETYPE_PEM) != SSL_SUCCESS)
+    {
+        LogError("unable to load x509 client private key");
+        result = MU_FAILURE;
+    }
+#ifdef HAVE_SECURE_RENEGOTIATION
+    else if (wolfSSL_UseSecureRenegotiation(ssl) != SSL_SUCCESS)
+    {
+        LogError("unable to enable secure renegotiation");
+        result = MU_FAILURE;
+    }
+#endif
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+static void destroy_wolfssl_instance(TLS_IO_INSTANCE* tls_io_instance)
+{
+    wolfSSL_free(tls_io_instance->ssl);
+    tls_io_instance->ssl = NULL;
+}
+
+static int create_wolfssl_instance(TLS_IO_INSTANCE* tls_io_instance)
+{
+    int result;
+    tls_io_instance->ssl = wolfSSL_new(tls_io_instance->ssl_context);
+    if (tls_io_instance->ssl == NULL)
+    {
+        LogError("Failed to add certificates to store");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        tls_io_instance->socket_io_read_bytes = NULL;
+        tls_io_instance->socket_io_read_byte_count = 0;
+        tls_io_instance->on_send_complete = NULL;
+        tls_io_instance->on_send_complete_callback_context = NULL;
+#ifdef INVALID_DEVID
+        tls_io_instance->wolfssl_device_id = INVALID_DEVID;
+#endif
+
+        wolfSSL_set_using_nonblock(tls_io_instance->ssl, 1);
+        wolfSSL_SetHsDoneCb(tls_io_instance->ssl, on_handshake_done, tls_io_instance);
+        wolfSSL_SetIOWriteCtx(tls_io_instance->ssl, tls_io_instance);
+        wolfSSL_SetIOReadCtx(tls_io_instance->ssl, tls_io_instance);
+
+        tls_io_instance->tlsio_state = TLSIO_STATE_NOT_OPEN;
+        result = 0;
+    }
+    return result;
+}
+
+static int prepare_wolfssl_open(TLS_IO_INSTANCE* tls_io_instance)
+{
+    int result;
+    if (add_certificate_to_store(tls_io_instance) != 0)
+    {
+        LogError("Failed to add certificates to store");
+        result = MU_FAILURE;
+    }
+    /*x509 authentication can only be build before underlying connection is realized*/
+    else if ((tls_io_instance->x509certificate != NULL) &&
+        (tls_io_instance->x509privatekey != NULL) &&
+        (x509_wolfssl_add_credentials(tls_io_instance->ssl, tls_io_instance->x509certificate, tls_io_instance->x509privatekey) != 0))
+    {
+        destroy_wolfssl_instance(tls_io_instance);
+        LogError("unable to use x509 authentication");
+        result = MU_FAILURE;
+    }
+#ifdef INVALID_DEVID
+    else if (tls_io_instance->wolfssl_device_id != INVALID_DEVID && wolfSSL_SetDevId(tls_io_instance->ssl, tls_io_instance->wolfssl_device_id) != WOLFSSL_SUCCESS)
+    {
+        LogError("Failure setting device id");
+        result = MU_FAILURE;
+    }
+#endif
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+int tlsio_wolfssl_init(void)
+{
+    (void)wolfSSL_library_init();
+    wolfSSL_load_error_strings();
+
+    return 0;
+}
+
+void tlsio_wolfssl_deinit(void)
+{
+}
+
+CONCRETE_IO_HANDLE tlsio_wolfssl_create(void* io_create_parameters)
+{
+    TLS_IO_INSTANCE* result;
+
+    if (io_create_parameters == NULL)
+    {
+        LogError("NULL io_create_parameters");
+        result = NULL;
+    }
+    else
+    {
+        TLSIO_CONFIG* tls_io_config = io_create_parameters;
+
+        result = (TLS_IO_INSTANCE*)malloc(sizeof(TLS_IO_INSTANCE));
+        if (result == NULL)
+        {
+            LogError("Failed allocating memory for the TLS IO instance.");
+        }
+        else
+        {
+            (void)memset(result, 0, sizeof(TLS_IO_INSTANCE));
+            result->tlsio_state = TLSIO_STATE_NOT_OPEN;
+
+            result->ssl_context = wolfSSL_CTX_new(wolfTLSv1_2_client_method());
+            if (result->ssl_context == NULL)
+            {
+                LogError("Cannot create the wolfSSL context");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                // Set the recv and send function on the wolfssl context object
+                wolfSSL_SetIOSend(result->ssl_context, on_io_send);
+                wolfSSL_SetIORecv(result->ssl_context, on_io_recv);
+
+                SOCKETIO_CONFIG socketio_config;
+                const IO_INTERFACE_DESCRIPTION* underlying_io_interface;
+                void* io_interface_parameters;
+
+                if (tls_io_config->underlying_io_interface != NULL)
+                {
+                    underlying_io_interface = tls_io_config->underlying_io_interface;
+                    io_interface_parameters = tls_io_config->underlying_io_parameters;
+                }
+                else
+                {
+                    socketio_config.hostname = tls_io_config->hostname;
+                    socketio_config.port = tls_io_config->port;
+                    socketio_config.accepted_socket = NULL;
+
+                    underlying_io_interface = socketio_get_interface_description();
+                    io_interface_parameters = &socketio_config;
+                }
+
+                if (underlying_io_interface == NULL)
+                {
+                    LogError("Failed getting socket IO interface description.");
+                    wolfSSL_CTX_free(result->ssl_context);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    result->socket_io = xio_create(underlying_io_interface, io_interface_parameters);
+                    if (result->socket_io == NULL)
+                    {
+                        LogError("Failure connecting to underlying socket_io");
+                        wolfSSL_CTX_free(result->ssl_context);
+                        free(result);
+                        result = NULL;
+                    }
+                    else if (create_wolfssl_instance(result) != 0)
+                    {
+                        LogError("Failure connecting to underlying socket_io");
+                        wolfSSL_CTX_free(result->ssl_context);
+                        free(result);
+                        result = NULL;
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+void tlsio_wolfssl_destroy(CONCRETE_IO_HANDLE tls_io)
+{
+    if (tls_io != NULL)
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+        if (tls_io_instance->socket_io_read_bytes != NULL)
+        {
+            free(tls_io_instance->socket_io_read_bytes);
+            tls_io_instance->socket_io_read_bytes = NULL;
+        }
+        if (tls_io_instance->certificate != NULL)
+        {
+            free(tls_io_instance->certificate);
+            tls_io_instance->certificate = NULL;
+        }
+        if (tls_io_instance->x509certificate != NULL)
+        {
+            free(tls_io_instance->x509certificate);
+            tls_io_instance->x509certificate = NULL;
+        }
+        if (tls_io_instance->x509privatekey != NULL)
+        {
+            free(tls_io_instance->x509privatekey);
+            tls_io_instance->x509privatekey = NULL;
+        }
+        destroy_wolfssl_instance(tls_io_instance);
+
+        wolfSSL_CTX_free(tls_io_instance->ssl_context);
+        tls_io_instance->ssl_context = NULL;
+
+        xio_destroy(tls_io_instance->socket_io);
+        free(tls_io);
+    }
+}
+
+int tlsio_wolfssl_open(CONCRETE_IO_HANDLE tls_io, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context)
+{
+    int result;
+
+    if (tls_io == NULL)
+    {
+        LogError("NULL tls_io instance");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+
+        if (tls_io_instance->tlsio_state != TLSIO_STATE_NOT_OPEN)
+        {
+            LogError("Invalid state encountered.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            tls_io_instance->on_bytes_received = on_bytes_received;
+            tls_io_instance->on_bytes_received_context = on_bytes_received_context;
+
+            tls_io_instance->on_io_open_complete = on_io_open_complete;
+            tls_io_instance->on_io_open_complete_context = on_io_open_complete_context;
+
+            tls_io_instance->on_io_error = on_io_error;
+            tls_io_instance->on_io_error_context = on_io_error_context;
+
+            tls_io_instance->tlsio_state = TLSIO_STATE_OPENING_UNDERLYING_IO;
+
+            if (prepare_wolfssl_open(tls_io_instance) != 0)
+            {
+                LogError("Cannot create wolfssl instance.");
+                tls_io_instance->tlsio_state = TLSIO_STATE_NOT_OPEN;
+                result = MU_FAILURE;
+            }
+            else if (xio_open(tls_io_instance->socket_io, on_underlying_io_open_complete, tls_io_instance, on_underlying_io_bytes_received, tls_io_instance, on_underlying_io_error, tls_io_instance) != 0)
+            {
+                LogError("Cannot open the underlying IO.");
+                tls_io_instance->tlsio_state = TLSIO_STATE_NOT_OPEN;
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+int tlsio_wolfssl_close(CONCRETE_IO_HANDLE tls_io, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* callback_context)
+{
+    int result = 0;
+
+    if (tls_io == NULL)
+    {
+        LogError("NULL tls_io handle.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+
+        if ((tls_io_instance->tlsio_state == TLSIO_STATE_NOT_OPEN) ||
+            (tls_io_instance->tlsio_state == TLSIO_STATE_CLOSING))
+        {
+            LogError("Close called while not open.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            tls_io_instance->tlsio_state = TLSIO_STATE_CLOSING;
+            tls_io_instance->on_io_close_complete = on_io_close_complete;
+            tls_io_instance->on_io_close_complete_context = callback_context;
+
+            if (xio_close(tls_io_instance->socket_io, on_underlying_io_close_complete, tls_io_instance) != 0)
+            {
+                LogError("xio_close failed.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+int tlsio_wolfssl_send(CONCRETE_IO_HANDLE tls_io, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context)
+{
+    int result;
+
+    if (tls_io == NULL || buffer == NULL || size == 0)
+    {
+        LogError("Invalid parameter specified tls_io: %p, buffer: %p, size: %ul", tls_io, buffer, (unsigned int)size);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+
+        if (tls_io_instance->tlsio_state != TLSIO_STATE_OPEN)
+        {
+            LogError("send called while not open");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            tls_io_instance->on_send_complete = on_send_complete;
+            tls_io_instance->on_send_complete_callback_context = callback_context;
+
+            int res = wolfSSL_write(tls_io_instance->ssl, buffer, size);
+            if ((res < 0) || ((size_t)res != size)) // Best way I can think of to safely compare an int to a size_t
+            {
+                LogError("Error writing data through WolfSSL");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+            tls_io_instance->on_send_complete = NULL;
+            tls_io_instance->on_send_complete_callback_context = NULL;
+        }
+    }
+
+    return result;
+}
+
+void tlsio_wolfssl_dowork(CONCRETE_IO_HANDLE tls_io)
+{
+    if (tls_io == NULL)
+    {
+        LogError("NULL tls_io");
+    }
+    else
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+
+        if ((tls_io_instance->tlsio_state != TLSIO_STATE_NOT_OPEN) &&
+            (tls_io_instance->tlsio_state != TLSIO_STATE_ERROR))
+        {
+            if (tls_io_instance->tlsio_state != TLSIO_STATE_OPENING_UNDERLYING_IO)
+                decode_ssl_received_bytes(tls_io_instance);
+            xio_dowork(tls_io_instance->socket_io);
+        }
+    }
+}
+
+
+static int process_option(char** destination, const char* name, const char* value)
+{
+    int result;
+    if (*destination != NULL)
+    {
+        free(*destination);
+        *destination = NULL;
+    }
+    if (mallocAndStrcpy_s(destination, value) != 0)
+    {
+        LogError("unable to process option %s",name);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+int tlsio_wolfssl_setoption(CONCRETE_IO_HANDLE tls_io, const char* optionName, const void* value)
+{
+    int result;
+
+    if (tls_io == NULL || optionName == NULL)
+    {
+        LogError("Bad arguments, tls_io = %p, optionName = %p", tls_io, optionName);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;
+
+        if (strcmp(OPTION_TRUSTED_CERT, optionName) == 0)
+        {
+            result  = process_option(&tls_io_instance->certificate, optionName, value);
+        }
+        else if (strcmp(SU_OPTION_X509_CERT, optionName) == 0 || strcmp(OPTION_X509_ECC_CERT, optionName) == 0)
+        {
+            result = process_option(&tls_io_instance->x509certificate, optionName, value);
+        }
+        else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 || strcmp(OPTION_X509_ECC_KEY, optionName) == 0)
+        {
+            result = process_option(&tls_io_instance->x509privatekey, optionName, value);
+        }
+#ifdef INVALID_DEVID
+        else if (strcmp(OPTION_WOLFSSL_SET_DEVICE_ID, optionName) == 0)
+        {
+            int device_id = *((int *)value);
+            if (tls_io_instance->ssl != NULL)
+            {
+                if (tls_io_instance->ssl != NULL && wolfSSL_SetDevId(tls_io_instance->ssl, device_id) != WOLFSSL_SUCCESS)
+                {
+                    LogError("Failure setting device id on ssl");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    result = 0;
+                }
+            }
+            else
+            {
+                // Save the id till we create the ssl object
+                tls_io_instance->wolfssl_device_id = device_id;
+                result = 0;
+            }
+        }
+#endif
+        else
+        {
+            if (tls_io_instance->socket_io == NULL)
+            {
+                LogError("NULL underlying IO handle");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = xio_setoption(tls_io_instance->socket_io, optionName, value);
+            }
+        }
+    }
+
+    return result;
+}
+const IO_INTERFACE_DESCRIPTION* tlsio_wolfssl_get_interface_description(void)
+{
+    return &tlsio_wolfssl_interface_description;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/adapters/uniqueid_stub.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/adapters/uniqueid_stub.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/adapters/uniqueid_stub.c	(revision 389)
@@ -0,0 +1,76 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdint.h>
+#include "azure_c_shared_utility/uniqueid.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include <time.h>
+
+MU_DEFINE_ENUM_STRINGS(UNIQUEID_RESULT, UNIQUEID_RESULT_VALUES);
+
+static const char tochar[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+static void generate128BitUUID(unsigned char* arrayOfByte)
+{
+    size_t arrayIndex;
+
+    for (arrayIndex = 0; arrayIndex < 16; arrayIndex++)
+    {
+        arrayOfByte[arrayIndex] = (unsigned char)rand();
+    }
+
+    //
+    // Stick in the version field for random uuid.
+    //
+    arrayOfByte[7] &= 0x0f; //clear the bit field
+    arrayOfByte[7] |= 0x40; //set the ones we care about
+
+    //
+    // Stick in the variant field for the random uuid.
+    //
+    arrayOfByte[8] &= 0xf3; // Clear
+    arrayOfByte[8] |= 0x08; // Set
+
+}
+
+// TODO: The User will need to call srand before calling this function
+UNIQUEID_RESULT UniqueId_Generate(char* uid, size_t len)
+{
+    UNIQUEID_RESULT result;
+    unsigned char arrayOfChar[16];
+
+    /* Codes_SRS_UNIQUEID_07_002: [If uid is NULL then UniqueId_Generate shall return UNIQUEID_INVALID_ARG] */
+    /* Codes_SRS_UNIQUEID_07_003: [If len is less then 37 then UniqueId_Generate shall return UNIQUEID_INVALID_ARG] */
+    if (uid == NULL || len < 37)
+    {
+        result = UNIQUEID_INVALID_ARG;
+        LogError("Buffer Size is Null or length is less then 37 bytes");
+    }
+    else 
+    {
+        size_t arrayIndex;
+        size_t shiftCount;
+        size_t characterPosition = 0;
+
+        /* Codes_SRS_UNIQUEID_07_001: [UniqueId_Generate shall create a unique Id 36 character long string.] */
+        generate128BitUUID(arrayOfChar);
+        for (arrayIndex = 0; arrayIndex < 16; arrayIndex++)
+        {
+            for (shiftCount = 0; shiftCount <= 1; shiftCount++)
+            {
+                char hexChar = tochar[arrayOfChar[arrayIndex] & 0xf];
+                if ((characterPosition == 8) || (characterPosition == 13) || (characterPosition == 18) || (characterPosition == 23))
+                {
+                    uid[characterPosition] = '-';
+                    characterPosition++;
+                }
+                uid[characterPosition] = hexChar;
+                characterPosition++;
+                arrayOfChar[arrayIndex] = arrayOfChar[arrayIndex] >> 4;
+            }
+        }
+        uid[characterPosition] = 0;
+        result = UNIQUEID_OK;
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/agenttime.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/agenttime.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/agenttime.h	(revision 389)
@@ -0,0 +1,63 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file agenttime.h
+*	@brief Function prototypes for time related functions.
+*
+*	@details These functions are implemented with C standard functions,
+*	and therefore they are platform independent. But then a platform
+*	can replace these functions with its own implementation as necessary.
+*/
+
+#ifndef AGENTTIME_H
+#define AGENTTIME_H
+
+#include <time.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/** @brief Get current calendar time.
+*
+*	@details This function provides the same functionality as the
+*	standard C @c time() function.
+*/
+MOCKABLE_FUNCTION(, time_t, get_time, time_t*, currentTime);
+
+/** @brief Get UTC in @c tm struct.
+*
+*	@details This function provides the same functionality as the
+*	standard C @c gmtime() function.
+*/
+MOCKABLE_FUNCTION(, struct tm*, get_gmtime, time_t*, currentTime);
+
+/** @brief Get current time representation of the given calendar time.
+*
+*	@details This function provides the same functionality as the
+*	standard C @c mktime() function.
+*/
+MOCKABLE_FUNCTION(, time_t, get_mktime, struct tm*, cal_time);
+
+/** @brief Gets a C-string representation of the given time.
+*
+*	@details This function provides the same functionality as the
+*	standard C @c ctime() function.
+*/
+MOCKABLE_FUNCTION(, char*, get_ctime, time_t*, timeToGet);
+
+/** @brief Gets the difference in seconds between @c stopTime and
+*	@c startTime.
+*
+*	@details This function provides the same functionality as the
+*	standard C @c difftime() function.
+*/
+MOCKABLE_FUNCTION(, double, get_difftime, time_t, stopTime, time_t, startTime);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // AGENTTIME_H
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/azure_base64.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/azure_base64.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/azure_base64.h	(revision 389)
@@ -0,0 +1,83 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file base64.h
+*    @brief Prototypes for functions related to encoding/decoding
+*    a @c buffer using standard base64 encoding.
+*/
+
+#ifndef BASE64_H
+#define BASE64_H
+
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/buffer_.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+
+/**
+ * @brief    Base64 encodes a buffer and returns the resulting string.
+ *
+ * @param    input    The buffer that needs to be base64 encoded.
+ *
+ *             Base64_Encode takes as a parameter a pointer to a BUFFER. If @p input is @c NULL then
+ *             @c Base64_Encode returns @c NULL. The size of the BUFFER pointed to by @p input may
+ *             be zero. If when allocating memory to produce the encoding a failure occurs, then @c
+ *             Base64_Encode returns @c NULL. Otherwise
+ *             @c Base64_Encode returns a pointer to a STRING. That string contains the
+ *             base 64 encoding of the @p input. This encoding of @p input will not contain embedded
+ *             line feeds.
+ *
+ * @return    A @c STRING_HANDLE containing the base64 encoding of @p input.
+ */
+MOCKABLE_FUNCTION(, STRING_HANDLE, Azure_Base64_Encode, BUFFER_HANDLE, input);
+
+/**
+ * @brief    Base64 encodes the buffer pointed to by @p source and returns the resulting string.
+ *
+ * @param    source    The buffer that needs to be base64 encoded.
+ * @param    size      The size.
+ *
+ *             This function produces a @c STRING_HANDLE containing the base64 encoding of the
+ *             buffer pointed to by @p source, having the size as given by
+ *             @p size. If @p source is @c NULL then @c Base64_Encode_Bytes returns @c NULL
+ *             If @p source is not @c NULL and @p size is zero, then @c Base64_Encode_Bytes produces
+ *             an empty @c STRING_HANDLE. Otherwise, @c Base64_Encode_Bytes produces a
+ *             @c STRING_HANDLE containing the Base64 representation of the buffer. In case of
+ *             any errors, @c Base64_Encode_Bytes returns @c NULL.].
+ *
+ * @return    @c NULL in case an error occurs or a @c STRING_HANDLE containing the base64 encoding
+ *             of @p input.
+ *
+ */
+MOCKABLE_FUNCTION(, STRING_HANDLE, Azure_Base64_Encode_Bytes, const unsigned char*, source, size_t, size);
+
+/**
+ * @brief    Base64 decodes the buffer pointed to by @p source and returns the resulting buffer.
+ *
+ * @param    source    A base64 encoded string buffer.
+ *
+ *           This function decodes the string pointed at by @p source using base64 decoding and
+ *             returns the resulting buffer. If @p source is @c NULL then
+ *             @c Azure_Base64_Decode returns NULL. If the string pointed to by @p source is zero
+ *             length then the handle returned refers to a zero length buffer. If there is any
+ *             memory allocation failure during the decode or if the source string has an invalid
+ *             length for a base 64 encoded string then @c Azure_Base64_Decode returns @c NULL.
+ *
+ * @return    A @c BUFFER_HANDLE pointing to a buffer containing the result of base64 decoding @p
+ *             source.
+ */
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, Azure_Base64_Decode, const char*, source);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BASE64_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/buffer_.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/buffer_.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/buffer_.h	(revision 389)
@@ -0,0 +1,44 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef BUFFER_H
+#define BUFFER_H
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#include <stdbool.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef struct BUFFER_TAG* BUFFER_HANDLE;
+
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_new);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_create, const unsigned char*, source, size_t, size);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_create_with_size, size_t, buff_size);
+MOCKABLE_FUNCTION(, void, BUFFER_delete, BUFFER_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, BUFFER_pre_build, BUFFER_HANDLE, handle, size_t, size);
+MOCKABLE_FUNCTION(, int, BUFFER_build, BUFFER_HANDLE, handle, const unsigned char*, source, size_t, size);
+MOCKABLE_FUNCTION(, int, BUFFER_append_build, BUFFER_HANDLE, handle, const unsigned char*, source, size_t, size);
+MOCKABLE_FUNCTION(, int, BUFFER_unbuild, BUFFER_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, BUFFER_enlarge, BUFFER_HANDLE, handle, size_t, enlargeSize);
+MOCKABLE_FUNCTION(, int, BUFFER_shrink, BUFFER_HANDLE, handle, size_t, decreaseSize, bool, fromEnd);
+MOCKABLE_FUNCTION(, int, BUFFER_content, BUFFER_HANDLE, handle, const unsigned char**, content);
+MOCKABLE_FUNCTION(, int, BUFFER_size, BUFFER_HANDLE, handle, size_t*, size);
+MOCKABLE_FUNCTION(, int, BUFFER_append, BUFFER_HANDLE, handle1, BUFFER_HANDLE, handle2);
+MOCKABLE_FUNCTION(, int, BUFFER_prepend, BUFFER_HANDLE, handle1, BUFFER_HANDLE, handle2);
+MOCKABLE_FUNCTION(, int, BUFFER_fill, BUFFER_HANDLE, handle, unsigned char, fill_char);
+MOCKABLE_FUNCTION(, unsigned char*, BUFFER_u_char, BUFFER_HANDLE, handle);
+MOCKABLE_FUNCTION(, size_t, BUFFER_length, BUFFER_HANDLE, handle);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, BUFFER_clone, BUFFER_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif  /* BUFFER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/condition.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/condition.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/condition.h	(revision 389)
@@ -0,0 +1,72 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CONDITION_H
+#define CONDITION_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/lock.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void* COND_HANDLE;
+
+#define COND_RESULT_VALUES \
+    COND_OK, \
+    COND_INVALID_ARG, \
+    COND_ERROR, \
+    COND_TIMEOUT \
+
+/**
+* @brief Enumeration specifying the lock status.
+*/
+MU_DEFINE_ENUM(COND_RESULT, COND_RESULT_VALUES);
+
+/**
+* @brief	This API creates and returns a valid condition handle.
+*
+* @return	A valid @c COND_HANDLE when successful or @c NULL otherwise.
+*/
+MOCKABLE_FUNCTION(, COND_HANDLE, Condition_Init);
+
+/**
+* @brief	unblock all currently working condition.
+*
+* @param	handle	A valid handle to the lock.
+*
+* @return	Returns @c COND_OK when the condition object has been
+* 			destroyed and @c COND_ERROR when an error occurs
+* 			and @c COND_TIMEOUT when the handle times out.
+*/
+MOCKABLE_FUNCTION(, COND_RESULT, Condition_Post, COND_HANDLE, handle);
+
+/**
+* @brief	block on the condition handle unti the thread is signalled
+*           or until the timeout_milliseconds is reached.
+*
+* @param	handle	A valid handle to the lock.
+*
+* @return	Returns @c COND_OK when the condition object has been
+* 			destroyed and @c COND_ERROR when an error occurs
+* 			and @c COND_TIMEOUT when the handle times out.
+*/
+MOCKABLE_FUNCTION(, COND_RESULT, Condition_Wait, COND_HANDLE, handle, LOCK_HANDLE, lock, int, timeout_milliseconds);
+
+/**
+* @brief	The condition instance is deinitialized.
+*
+* @param	handle	A valid handle to the condition.
+*
+* @return	Returns @c COND_OK when the condition object has been
+* 			destroyed and @c COND_ERROR when an error occurs.
+*/
+MOCKABLE_FUNCTION(, void, Condition_Deinit, COND_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CONDITION_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/connection_string_parser.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/connection_string_parser.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/connection_string_parser.h	(revision 389)
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CONNECTION_STRING_PARSER_H
+#define CONNECTION_STRING_PARSER_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/map.h" 
+#include "azure_c_shared_utility/strings.h"
+
+#ifdef __cplusplus
+extern "C" 
+{
+#endif
+
+    MOCKABLE_FUNCTION(, MAP_HANDLE, connectionstringparser_parse_from_char, const char*, connection_string);
+    MOCKABLE_FUNCTION(, MAP_HANDLE, connectionstringparser_parse, STRING_HANDLE, connection_string);
+    MOCKABLE_FUNCTION(, int, connectionstringparser_splitHostName_from_char, const char*, hostName, STRING_HANDLE, nameString, STRING_HANDLE, suffixString);
+    MOCKABLE_FUNCTION(, int, connectionstringparser_splitHostName, STRING_HANDLE, hostNameString, STRING_HANDLE, nameString, STRING_HANDLE, suffixString);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CONNECTION_STRING_PARSER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/consolelogger.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/consolelogger.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/consolelogger.h	(revision 389)
@@ -0,0 +1,23 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CONSOLELOGGER_H
+#define CONSOLELOGGER_H
+
+#include "azure_c_shared_utility/xlogging.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+    extern void consolelogger_log(LOG_CATEGORY log_category, const char* file, const char* func, int line, unsigned int options, const char* format, ...);
+
+#if (defined(_MSC_VER))
+    extern void consolelogger_log_with_GetLastError(const char* file, const char* func, int line, const char* format, ...);
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* CONSOLELOGGER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/const_defines.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/const_defines.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/const_defines.h	(revision 389)
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CONST_DEFINES_H
+#define CONST_DEFINES_H
+
+// Used to remove GCC warning unused
+#ifdef __GNUC__
+    #define STATIC_VAR_UNUSED __attribute__ ((unused))
+#else
+    #define STATIC_VAR_UNUSED
+#endif
+
+#ifndef AZURE_UNREFERENCED_PARAMETER
+#define AZURE_UNREFERENCED_PARAMETER(param)   (void)(param)
+#endif
+
+#ifdef _MSC_VER
+#define AZURE_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__) | defined(__clang__)
+#define AZURE_DEPRECATED __attribute__((__deprecated__))
+#else
+#define AZURE_DEPRECATED
+#endif
+
+#endif // CONST_DEFINES
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/constbuffer.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/constbuffer.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/constbuffer.h	(revision 389)
@@ -0,0 +1,51 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CONSTBUFFER_H
+#define CONSTBUFFER_H
+
+#include "azure_c_shared_utility/buffer_.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+/*this is the handle*/
+typedef struct CONSTBUFFER_HANDLE_DATA_TAG* CONSTBUFFER_HANDLE;
+
+/*this is what is returned when the content of the buffer needs access*/
+typedef struct CONSTBUFFER_TAG
+{
+    const unsigned char* buffer;
+    size_t size;
+} CONSTBUFFER;
+
+typedef void(*CONSTBUFFER_CUSTOM_FREE_FUNC)(void* context);
+
+/*this creates a new constbuffer from a memory area*/
+MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_Create, const unsigned char*, source, size_t, size);
+
+/*this creates a new constbuffer from an existing BUFFER_HANDLE*/
+MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_CreateFromBuffer, BUFFER_HANDLE, buffer);
+
+MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_CreateWithMoveMemory, unsigned char*, source, size_t, size);
+
+MOCKABLE_FUNCTION(, CONSTBUFFER_HANDLE, CONSTBUFFER_CreateWithCustomFree, const unsigned char*, source, size_t, size, CONSTBUFFER_CUSTOM_FREE_FUNC, customFreeFunc, void*, customFreeFuncContext);
+
+MOCKABLE_FUNCTION(, void, CONSTBUFFER_IncRef, CONSTBUFFER_HANDLE, constbufferHandle);
+
+MOCKABLE_FUNCTION(, void, CONSTBUFFER_DecRef, CONSTBUFFER_HANDLE, constbufferHandle);
+
+MOCKABLE_FUNCTION(, const CONSTBUFFER*, CONSTBUFFER_GetContent, CONSTBUFFER_HANDLE, constbufferHandle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* CONSTBUFFER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/constmap.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/constmap.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/constmap.h	(revision 389)
@@ -0,0 +1,132 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file       constmap.h
+*	@brief		ConstMap is a module that implements a read-only dictionary
+*           of @c const char* keys to @c const char* values.
+*/
+
+#ifndef CONSTMAP_H
+#define CONSTMAP_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/map.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+
+#define CONSTMAP_RESULT_VALUES \
+    CONSTMAP_OK, \
+    CONSTMAP_ERROR, \
+    CONSTMAP_INVALIDARG, \
+    CONSTMAP_KEYNOTFOUND
+
+/** @brief Enumeration specifying the status of calls to various APIs in this  
+ *  module.
+ */ 
+MU_DEFINE_ENUM(CONSTMAP_RESULT, CONSTMAP_RESULT_VALUES);
+ 
+typedef struct CONSTMAP_HANDLE_DATA_TAG* CONSTMAP_HANDLE;
+ 
+
+/**
+ * @brief   Creates a new read-only map from a map handle.
+ *
+ * @param   sourceMap   The map from which we will populate key,value
+ *                      into the read-only map.
+ *
+ * @return  A valid @c CONSTMAP_HANDLE or @c NULL in case an error occurs.
+ */
+MOCKABLE_FUNCTION(, CONSTMAP_HANDLE, ConstMap_Create, MAP_HANDLE, sourceMap);
+
+ /** 
+  * @brief  Destroy a read-only map.  Deallocate memory associated with handle.
+  * @param  handle      Handle to a read-only map.
+  */
+MOCKABLE_FUNCTION(, void, ConstMap_Destroy, CONSTMAP_HANDLE, handle);
+
+ /** 
+  * @brief  Clone a read-only map from another read-only map. 
+  * @param  handle      Handle to a read-only map.
+  * @return A valid @c CONSTMAP_HANDLE or @c NULL in case an error occurs.
+  */
+MOCKABLE_FUNCTION(, CONSTMAP_HANDLE, ConstMap_Clone, CONSTMAP_HANDLE, handle);
+
+ /** 
+  * @brief  Create a map handle populated from the read-only map.
+  * @param  handle      Handle to a read-only map.
+  * @return A valid @c MAP_HANDLE or @c NULL in case an error occurs.
+  *  
+  * The new MAP_HANDLE needs to be destroyed when it is no longer needed.
+  */
+MOCKABLE_FUNCTION(, MAP_HANDLE, ConstMap_CloneWriteable, CONSTMAP_HANDLE, handle);
+
+/**
+ * @brief   This function returns a true if the map contains a key 
+ *			with the same value the parameter @p key.
+ *
+ * @param   handle      The handle to an existing map.
+ * @param   key         The key that the caller wants checked.
+ *
+ * @return				The function returns @c true if the key exists 
+ *						in the map and @c false if key is not found or 
+ *						parameters are invalid.
+ */
+MOCKABLE_FUNCTION(, bool, ConstMap_ContainsKey, CONSTMAP_HANDLE, handle, const char*, key);
+
+/**
+ * @brief   This function returns @c true if at least one <key,value> pair 
+ *			exists in the map where the entry's value is equal to the 
+ *			parameter @c value.
+ *
+ * @param   handle          The handle to an existing map.
+ * @param   value           The value that the caller wants checked.
+ *
+ * @return					The function returns @c true if the value exists 
+ *							in the map and @c false if value is not found or 
+ *							parameters are invalid.
+ */
+MOCKABLE_FUNCTION(, bool, ConstMap_ContainsValue, CONSTMAP_HANDLE, handle, const char*, value);
+
+/**
+ * @brief   Retrieves the value of a stored key.
+ *
+ * @param   handle  The handle to an existing map.
+ * @param   key     The key to be looked up in the map.
+ *
+ * @return  Returns @c NULL in case the input arguments are @c NULL or if the
+ *          requested key is not found in the map. Returns a pointer to the
+ *          key's value otherwise.
+ */
+MOCKABLE_FUNCTION(, const char*, ConstMap_GetValue, CONSTMAP_HANDLE, handle, const char*, key);
+ 
+ /**
+ * @brief   Retrieves the complete list of keys and values from the map
+ *          in @p values and @p keys. Also writes the size of the list
+ *          in @p count.
+ *
+ * @param   handle      The handle to an existing map.
+ * @param   keys        The location where the list of keys is to be written.
+ * @param   values      The location where the list of values is to be written.
+ * @param   count       The number of stored keys and values is written at the
+ *                      location indicated by this pointer.
+ *
+ * @return  Returns @c CONSTMAP_OK if the keys and values are retrieved
+ *                     and written successfully or an error code otherwise.
+ */
+MOCKABLE_FUNCTION(, CONSTMAP_RESULT, ConstMap_GetInternals, CONSTMAP_HANDLE, handle, const char*const**, keys, const char*const**, values, size_t*, count);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CONSTMAP_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/crt_abstractions.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/crt_abstractions.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/crt_abstractions.h	(revision 389)
@@ -0,0 +1,132 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CRT_ABSTRACTIONS_H
+#define CRT_ABSTRACTIONS_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstdio>
+#include <cstring>
+#include <cerrno>
+#include <cmath>
+extern "C" {
+#else // __cplusplus
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#endif // __cplusplus
+
+#ifdef _MSC_VER
+
+#ifdef QUARKGALILEO
+#define HAS_STDBOOL
+#ifdef __cplusplus
+typedef bool _Bool;
+#else
+/*galileo apparently has _Bool and bool as built in types*/
+#endif
+#endif // QUARKGALILEO
+
+#define HAS_STDBOOL
+#ifdef __cplusplus
+/*because C++ doesn't do anything about _Bool... */
+#define _Bool bool
+#else // __cplusplus
+#include <stdbool.h>
+#endif // __cplusplus
+
+#else //  _MSC_VER
+
+#if defined __STDC_VERSION__
+#if ((__STDC_VERSION__  == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L))
+/*C99 compiler or C11*/
+#define HAS_STDBOOL
+#include <stdbool.h>
+#endif //  ((__STDC_VERSION__  == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L))
+#endif // __STDC_VERSION__
+#endif //  _MSC_VER
+
+#ifndef HAS_STDBOOL
+#ifdef __cplusplus
+#define _Bool bool
+#else // __cplusplus
+typedef unsigned char _Bool;
+typedef unsigned char bool;
+#define false 0
+#define true 1
+#endif // __cplusplus
+#endif // HAS_STDBOOL
+
+
+/* Codes_SRS_CRT_ABSTRACTIONS_99_001:[The module shall not redefine the secure functions implemented by Microsoft CRT.] */
+/* Codes_SRS_CRT_ABSTRACTIONS_99_040 : [The module shall still compile when building on a Microsoft platform.] */
+/* Codes_SRS_CRT_ABSTRACTIONS_99_002: [CRTAbstractions module shall expose the following API]*/
+#if defined (_MSC_VER) || defined (MINGW_HAS_SECURE_API)
+#else // _MSC_VER || MINGW_HAS_SECURE_API
+
+/* Adding definitions from errno.h & crtdefs.h */
+#if !defined (_TRUNCATE)
+#define _TRUNCATE ((size_t)-1)
+#endif  /* !defined (_TRUNCATE) */
+
+#if !defined STRUNCATE
+#define STRUNCATE       80
+#endif  /* !defined (STRUNCATE) */
+
+extern int strcpy_s(char* dst, size_t dstSizeInBytes, const char* src);
+extern int strcat_s(char* dst, size_t dstSizeInBytes, const char* src);
+extern int strncpy_s(char* dst, size_t dstSizeInBytes, const char* src, size_t maxCount);
+extern int sprintf_s(char* dst, size_t dstSizeInBytes, const char* format, ...);
+#endif // _MSC_VER || MINGW_HAS_SECURE_API
+
+extern unsigned long long strtoull_s(const char* nptr, char** endPtr, int base);
+extern float strtof_s(const char* nptr, char** endPtr);
+extern long double strtold_s(const char* nptr, char** endPtr);
+
+#ifdef _MSC_VER
+#define stricmp _stricmp
+#endif // _MSC_VER
+
+MOCKABLE_FUNCTION(, int, mallocAndStrcpy_s, char**, destination, const char*, source);
+MOCKABLE_FUNCTION(, int, unsignedIntToString, char*, destination, size_t, destinationSize, unsigned int, value);
+MOCKABLE_FUNCTION(, int, size_tToString, char*, destination, size_t, destinationSize, size_t, value);
+
+/*following logic shall define the TOUPPER and ISDIGIT, we do that because the SDK is not happy with some Arduino implementation of it.*/
+#define TOUPPER(c)      ((((c)>='a') && ((c)<='z'))?(c)-'a'+'A':c)
+#define ISDIGIT(c)      ((((c)>='0') && ((c)<='9'))?1:0)
+
+/*following logic shall define the ISNAN macro*/
+/*if runing on Microsoft Visual C compiler, than ISNAN shall be _isnan*/
+/*else if running on C99 or C11, ISNAN shall be isnan*/
+/*else if running on C89 ... #error and inform user*/
+
+#ifdef _MSC_VER
+#define ISNAN _isnan
+#else // _MSC_VER
+#if defined __STDC_VERSION__
+#if ((__STDC_VERSION__  == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L))
+/*C99 compiler or C11*/
+#define ISNAN isnan
+#else //  ((__STDC_VERSION__  == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L))
+#error update this file to contain the latest C standard.
+#endif // ((__STDC_VERSION__  == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L))
+#else // __STDC_VERSION__
+#ifdef __cplusplus
+/*C++ defines isnan... in C11*/
+extern "C++" {
+#define ISNAN std::isnan
+}
+#else // __cplusplus
+#error unknown (or C89) compiler, provide ISNAN with the same meaning as isnan in C99 standard
+#endif // __cplusplus
+
+#endif // __STDC_VERSION__
+#endif // _MSC_VER
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif /* CRT_ABSTRACTIONS_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/doublylinkedlist.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/doublylinkedlist.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/doublylinkedlist.h	(revision 389)
@@ -0,0 +1,42 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef DOUBLYLINKEDLIST_H
+#define DOUBLYLINKEDLIST_H
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+#include <stdint.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef struct DLIST_ENTRY_TAG
+{
+    struct DLIST_ENTRY_TAG *Flink;
+    struct DLIST_ENTRY_TAG *Blink;
+} DLIST_ENTRY, *PDLIST_ENTRY;
+
+MOCKABLE_FUNCTION(, void, DList_InitializeListHead, PDLIST_ENTRY, listHead);
+MOCKABLE_FUNCTION(, int, DList_IsListEmpty, const PDLIST_ENTRY, listHead);
+MOCKABLE_FUNCTION(, void, DList_InsertTailList, PDLIST_ENTRY, listHead, PDLIST_ENTRY, listEntry);
+MOCKABLE_FUNCTION(, void, DList_InsertHeadList, PDLIST_ENTRY, listHead, PDLIST_ENTRY, listEntry);
+MOCKABLE_FUNCTION(, void, DList_AppendTailList, PDLIST_ENTRY, listHead, PDLIST_ENTRY, ListToAppend);
+MOCKABLE_FUNCTION(, int, DList_RemoveEntryList, PDLIST_ENTRY, listEntry);
+MOCKABLE_FUNCTION(, PDLIST_ENTRY, DList_RemoveHeadList, PDLIST_ENTRY, listHead);
+
+//
+// Calculate the address of the base of the structure given its type, and an
+// address of a field within the structure.
+//
+#define containingRecord(address, type, field) ((type *)((uintptr_t)(address) - offsetof(type,field)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DOUBLYLINKEDLIST_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_rand.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_rand.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_rand.h	(revision 389)
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef GB_RAND_H
+#define GB_RAND_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+MOCKABLE_FUNCTION(, int, gb_rand);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GB_RAND_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_stdio.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_stdio.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_stdio.h	(revision 389)
@@ -0,0 +1,69 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef GB_STDIO_H
+#define GB_STDIO_H
+
+/*this file, if included instead of <stdio.h> has the following functionality:
+1) if GB_STDIO_INTERCEPT is defined then
+    a) some of the stdio.h symbols shall be redefined, for example: fopen => gb_fopen
+    b) all "code" using the fopen will actually (because of the preprocessor) call to gb_fopen
+    c) gb_fopen shall blindly call into fopen, thus realizing a passthrough
+    
+    reason is: unittesting. fopen is comes with the C Run Time and cannot be mocked (that is, in the global namespace cannot exist a function called fopen
+
+2) if GB_STDIO_INTERCEPT is not defined then
+    a) it shall include <stdio.h> => no passthrough, just direct linking.
+*/
+
+#ifndef GB_STDIO_INTERCEPT
+#include <stdio.h>
+#else
+
+/*source level intercepting of function calls*/
+#define fopen           fopen_never_called_never_implemented_always_forgotten
+#define fclose          fclose_never_called_never_implemented_always_forgotten
+#define fseek           fseek_never_called_never_implemented_always_forgotten
+#define ftell           ftell_never_called_never_implemented_always_forgotten
+#define fprintf         fprintf_never_called_never_implemented_always_forgotten
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+
+#ifdef __cplusplus
+#include <cstdio.h>
+extern "C"
+{
+#else
+#include <stdio.h>
+#endif
+
+#undef fopen
+#define fopen gb_fopen
+MOCKABLE_FUNCTION(, FILE*, gb_fopen, const char*, filename, const char*, mode);
+
+
+#undef fclose
+#define fclose gb_fclose
+MOCKABLE_FUNCTION(, int, fclose, FILE *, stream);
+
+#undef fseek
+#define fseek gb_fseek
+MOCKABLE_FUNCTION(, int, fseek, FILE *,stream, long int, offset, int, whence);
+
+#undef ftell
+#define ftell gb_ftell
+MOCKABLE_FUNCTION(, long int, ftell, FILE *, stream);
+
+#undef fprintf
+#define fprintf gb_fprintf
+extern int fprintf(FILE * stream, const char * format, ...);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*GB_STDIO_INTERCEPT*/
+
+#endif /* GB_STDIO_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_time.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_time.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gb_time.h	(revision 389)
@@ -0,0 +1,57 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef GB_TIME_H
+#define GB_TIME_H
+
+/*this file, if included instead of <stdio.h> has the following functionality:
+1) if GB_TIME_INTERCEPT is defined then
+    a) some of the time.h symbols shall be redefined, for example: time => gb_time
+    b) all "code" using the time will actually (because of the preprocessor) call to gb_time
+    c) gb_time shall blindly call into time, thus realizing a passthrough
+    
+    reason is: unittesting. time comes with the C Run Time and cannot be mocked (that is, in the global namespace cannot exist a function called time
+
+2) if GB_TIME_INTERCEPT is not defined then
+    a) it shall include <time.h> => no passthrough, just direct linking.
+*/
+
+#ifndef GB_TIME_INTERCEPT
+#include <time.h>
+#else
+
+/*source level intercepting of function calls*/
+#define time                    time_never_called_never_implemented_always_forgotten
+#define localtime               localtime_never_called_never_implemented_always_forgotten
+#define strftime                strftime_never_called_never_implemented_always_forgotten
+
+#ifdef __cplusplus
+#include <ctime.h>
+extern "C"
+{
+#else
+#include <time.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#undef time
+#define time gb_time
+MOCKABLE_FUNCTION(, time_t, time, time_t *, timer);
+
+#undef localtime
+#define localtime gb_localtime
+MOCKABLE_FUNCTION(, struct tm *, localtime, const time_t *, timer);
+
+#undef strftime
+#define strftime gb_strftime
+MOCKABLE_FUNCTION(, size_t, strftime, char *, s, size_t, maxsize, const char *, format, const struct tm *, timeptr);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*GB_TIME_INTERCEPT*/
+
+#endif /* GB_TIME_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gballoc.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gballoc.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gballoc.h	(revision 389)
@@ -0,0 +1,86 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef GBALLOC_H
+#define GBALLOC_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdlib>
+extern "C"
+{
+#else
+#include <stddef.h>
+#include <stdlib.h>
+#endif
+
+// GB_USE_CUSTOM_HEAP disables the implementations in gballoc.c and
+// requires that an external library implement the gballoc_malloc family
+// declared here.
+#if defined(GB_USE_CUSTOM_HEAP)
+MOCKABLE_FUNCTION(, void*, gballoc_malloc, size_t, size);
+MOCKABLE_FUNCTION(, void*, gballoc_calloc, size_t, nmemb, size_t, size);
+MOCKABLE_FUNCTION(, void*, gballoc_realloc, void*, ptr, size_t, size);
+MOCKABLE_FUNCTION(, void, gballoc_free, void*, ptr);
+
+#define malloc gballoc_malloc
+#define calloc gballoc_calloc
+#define realloc gballoc_realloc
+#define free gballoc_free
+
+/* all translation units that need memory measurement need to have GB_MEASURE_MEMORY_FOR_THIS defined */
+/* GB_DEBUG_ALLOC is the switch that turns the measurement on/off, so that it is not on always */
+#elif defined(GB_DEBUG_ALLOC)
+
+MOCKABLE_FUNCTION(, int, gballoc_init);
+MOCKABLE_FUNCTION(, void, gballoc_deinit);
+MOCKABLE_FUNCTION(, void*, gballoc_malloc, size_t, size);
+MOCKABLE_FUNCTION(, void*, gballoc_calloc, size_t, nmemb, size_t, size);
+MOCKABLE_FUNCTION(, void*, gballoc_realloc, void*, ptr, size_t, size);
+MOCKABLE_FUNCTION(, void, gballoc_free, void*, ptr);
+
+MOCKABLE_FUNCTION(, size_t, gballoc_getMaximumMemoryUsed);
+MOCKABLE_FUNCTION(, size_t, gballoc_getCurrentMemoryUsed);
+MOCKABLE_FUNCTION(, size_t, gballoc_getAllocationCount);
+MOCKABLE_FUNCTION(, void, gballoc_resetMetrics);
+
+/* if GB_MEASURE_MEMORY_FOR_THIS is defined then we want to redirect memory allocation functions to gballoc_xxx functions */
+#ifdef GB_MEASURE_MEMORY_FOR_THIS
+/* Unfortunately this is still needed here for things to still compile when using _CRTDBG_MAP_ALLOC.
+That is because there is a rogue component (most likely CppUnitTest) including crtdbg. */
+#if defined(_CRTDBG_MAP_ALLOC) && defined(_DEBUG)
+#undef _malloc_dbg
+#undef _calloc_dbg
+#undef _realloc_dbg
+#undef _free_dbg
+#define _malloc_dbg(size, ...) gballoc_malloc(size)
+#define _calloc_dbg(nmemb, size, ...) gballoc_calloc(nmemb, size)
+#define _realloc_dbg(ptr, size, ...) gballoc_realloc(ptr, size)
+#define _free_dbg(ptr, ...) gballoc_free(ptr)
+#else
+#define malloc gballoc_malloc
+#define calloc gballoc_calloc
+#define realloc gballoc_realloc
+#define free gballoc_free
+#endif
+#endif
+
+#else /* GB_DEBUG_ALLOC */
+
+#define gballoc_init() 0
+#define gballoc_deinit() ((void)0)
+
+#define gballoc_getMaximumMemoryUsed() SIZE_MAX
+#define gballoc_getCurrentMemoryUsed() SIZE_MAX
+#define gballoc_getAllocationCount() SIZE_MAX
+#define gballoc_resetMetrics() ((void)0)
+
+#endif /* GB_DEBUG_ALLOC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GBALLOC_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gbnetwork.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gbnetwork.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/gbnetwork.h	(revision 389)
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef GBNETWORK_H
+#define GBNETWORK_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdlib>
+#include <cstdint>
+extern "C"
+{
+#else
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+#endif
+
+#ifdef WIN32
+    #include <winsock2.h>
+#else
+    #include <sys/socket.h>
+#endif
+
+/* all translation units that need network measurement need to have GB_MEASURE_NETWORK_FOR_THIS defined */
+/* GB_DEBUG_NETWORK is the switch that turns the measurement on/off, so that it is not on always */
+#if defined(GB_DEBUG_NETWORK)
+
+MOCKABLE_FUNCTION(, int, gbnetwork_init);
+MOCKABLE_FUNCTION(, void, gbnetwork_deinit);
+
+#ifdef WIN32
+MOCKABLE_FUNCTION(, int, gbnetwork_send, SOCKET, sock, const char*, buf, int, len, int, flags);
+#else
+MOCKABLE_FUNCTION(, ssize_t, gbnetwork_send, int, sock, const void*, buf, size_t, len, int, flags);
+#endif
+
+#ifdef WIN32
+MOCKABLE_FUNCTION(, int, gbnetwork_recv, SOCKET, sock, char*, buf, int, len, int, flags);
+#else
+MOCKABLE_FUNCTION(, ssize_t, gbnetwork_recv, int, sock, void*, buf, size_t, len, int, flags);
+#endif
+
+MOCKABLE_FUNCTION(, uint64_t, gbnetwork_getBytesSent);
+MOCKABLE_FUNCTION(, uint64_t, gbnetwork_getNumSends);
+MOCKABLE_FUNCTION(, uint64_t, gbnetwork_getBytesRecv);
+MOCKABLE_FUNCTION(, uint64_t, gbnetwork_getNumRecv);
+MOCKABLE_FUNCTION(, void, gbnetwork_resetMetrics);
+
+/* if GB_MEASURE_NETWORK_FOR_THIS is defined then we want to redirect network send functions to gbnetwork_xxx functions */
+#ifdef GB_MEASURE_NETWORK_FOR_THIS
+#define send gbnetwork_send
+#define recv gbnetwork_recv
+#endif
+
+#else /* GB_DEBUG_NETWORK */
+
+#define gbnetwork_init() 0
+#define gbnetwork_deinit() ((void)0)
+#define gbnetwork_getBytesSent() 0
+#define gbnetwork_getNumSends() 0
+
+#define gbnetwork_getBytesRecv() 0
+#define gbnetwork_getNumRecv() 0
+
+#endif /* GB_DEBUG_NETWORK */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GBNETWORK_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/hmac.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/hmac.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/hmac.h	(revision 389)
@@ -0,0 +1,22 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef HMAC_H
+#define HMAC_H
+
+#include "azure_c_shared_utility/sha.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    MOCKABLE_FUNCTION(, int, hmac, SHAversion, whichSha, const unsigned char *, text, int, text_len,
+    const unsigned char *, key, int, key_len,
+    uint8_t, digest[USHAMaxHashSize]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HMAC_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/hmacsha256.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/hmacsha256.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/hmacsha256.h	(revision 389)
@@ -0,0 +1,28 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef HMACSHA256_H
+#define HMACSHA256_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define HMACSHA256_RESULT_VALUES              \
+    HMACSHA256_OK,                            \
+    HMACSHA256_INVALID_ARG,                   \
+    HMACSHA256_ERROR
+
+MU_DEFINE_ENUM(HMACSHA256_RESULT, HMACSHA256_RESULT_VALUES)
+
+MOCKABLE_FUNCTION(, HMACSHA256_RESULT, HMACSHA256_ComputeHash, const unsigned char*, key, size_t, keyLen, const unsigned char*, payload, size_t, payloadLen, BUFFER_HANDLE, hash);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HMACSHA256_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/http_proxy_io.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/http_proxy_io.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/http_proxy_io.h	(revision 389)
@@ -0,0 +1,30 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef HTTP_PROXY_IO_H
+#define HTTP_PROXY_IO_H
+
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct HTTP_PROXY_IO_CONFIG_TAG
+{
+    const char* hostname;
+    int port;
+    const char* proxy_hostname;
+    int proxy_port;
+    const char* username;
+    const char* password;
+} HTTP_PROXY_IO_CONFIG;
+
+MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, http_proxy_io_get_interface_description);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* HTTP_PROXY_IO_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapi.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapi.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapi.h	(revision 389)
@@ -0,0 +1,202 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file httpapi.h
+ *    @brief     This module implements the standard HTTP API used by the C IoT client
+ *             library.
+ *
+ *    @details For example, on the Windows platform the HTTP API code uses
+ *             WinHTTP and for Linux it uses curl and so forth. HTTPAPI must support
+ *             HTTPs (HTTP+SSL).
+ */
+
+#ifndef HTTPAPI_H
+#define HTTPAPI_H
+
+#include "azure_c_shared_utility/httpheaders.h"
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif
+
+typedef struct HTTP_HANDLE_DATA_TAG* HTTP_HANDLE;
+
+#define AMBIGUOUS_STATUS_CODE           (300)
+
+#define HTTPAPI_RESULT_VALUES                \
+HTTPAPI_OK,                                  \
+HTTPAPI_INVALID_ARG,                         \
+HTTPAPI_ERROR,                               \
+HTTPAPI_OPEN_REQUEST_FAILED,                 \
+HTTPAPI_SET_OPTION_FAILED,                   \
+HTTPAPI_SEND_REQUEST_FAILED,                 \
+HTTPAPI_RECEIVE_RESPONSE_FAILED,             \
+HTTPAPI_QUERY_HEADERS_FAILED,                \
+HTTPAPI_QUERY_DATA_AVAILABLE_FAILED,         \
+HTTPAPI_READ_DATA_FAILED,                    \
+HTTPAPI_ALREADY_INIT,                        \
+HTTPAPI_NOT_INIT,                            \
+HTTPAPI_HTTP_HEADERS_FAILED,                 \
+HTTPAPI_STRING_PROCESSING_ERROR,             \
+HTTPAPI_ALLOC_FAILED,                        \
+HTTPAPI_INIT_FAILED,                         \
+HTTPAPI_INSUFFICIENT_RESPONSE_BUFFER,        \
+HTTPAPI_SET_X509_FAILURE,                    \
+HTTPAPI_SET_TIMEOUTS_FAILED                  \
+
+/** @brief Enumeration specifying the possible return values for the APIs in
+ *           this module.
+ */
+MU_DEFINE_ENUM(HTTPAPI_RESULT, HTTPAPI_RESULT_VALUES);
+
+#define HTTPAPI_REQUEST_TYPE_VALUES\
+    HTTPAPI_REQUEST_GET,            \
+    HTTPAPI_REQUEST_POST,           \
+    HTTPAPI_REQUEST_PUT,            \
+    HTTPAPI_REQUEST_DELETE,         \
+    HTTPAPI_REQUEST_PATCH,          \
+    HTTPAPI_REQUEST_HEAD            \
+
+
+/** @brief Enumeration specifying the HTTP request verbs accepted by
+ *    the HTTPAPI module.
+ */
+MU_DEFINE_ENUM(HTTPAPI_REQUEST_TYPE, HTTPAPI_REQUEST_TYPE_VALUES);
+
+#define MAX_HOSTNAME_LEN        65
+#define MAX_USERNAME_LEN        65
+#define MAX_PASSWORD_LEN        65
+
+/**
+ * @brief    Global initialization for the HTTP API component.
+ *
+ *            Platform specific implementations are expected to initialize
+ *            the underlying HTTP API stacks.
+ *
+ * @return    @c HTTPAPI_OK if initialization is successful or an error
+ *             code in case it fails.
+ */
+MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_Init);
+
+/** @brief    Free resources allocated in ::HTTPAPI_Init. */
+MOCKABLE_FUNCTION(, void, HTTPAPI_Deinit);
+
+/**
+ * @brief    Creates an HTTPS connection to the host specified by the @p
+ *             hostName parameter.
+ *
+ * @param    hostName    Name of the host.
+ *
+ *            This function returns a handle to the newly created connection.
+ *            You can use the handle in subsequent calls to execute specific
+ *            HTTP calls using ::HTTPAPI_ExecuteRequest.
+ *
+ * @return    A @c HTTP_HANDLE to the newly created connection or @c NULL in
+ *             case an error occurs.
+ */
+MOCKABLE_FUNCTION(, HTTP_HANDLE, HTTPAPI_CreateConnection, const char*, hostName);
+
+/**
+ * @brief    Closes a connection created with ::HTTPAPI_CreateConnection.
+ *
+ * @param    handle    The handle to the HTTP connection created via ::HTTPAPI_CreateConnection.
+ *
+ *             All resources allocated by ::HTTPAPI_CreateConnection should be
+ *             freed in ::HTTPAPI_CloseConnection.
+ */
+MOCKABLE_FUNCTION(, void, HTTPAPI_CloseConnection, HTTP_HANDLE, handle);
+
+/**
+ * @brief    Sends the HTTP request to the host and handles the response for
+ *             the HTTP call.
+ *
+ * @param    handle                     The handle to the HTTP connection created
+ *                                     via ::HTTPAPI_CreateConnection.
+ * @param    requestType                 Specifies which HTTP method is used (GET,
+ *                                     POST, DELETE, PUT, PATCH).
+ * @param    relativePath             Specifies the relative path of the URL
+ *                                     excluding the host name.
+ * @param    httpHeadersHandle         Specifies a set of HTTP headers (name-value
+ *                                     pairs) to be added to the
+ *                                     HTTP request. The @p httpHeadersHandle
+ *                                     handle can be created and setup with
+ *                                     the proper name-value pairs by using the
+ *                                     HTTPHeaders APIs available in @c
+ *                                     HTTPHeaders.h.
+ * @param    content                     Specifies a pointer to the request body.
+ *                                     This value is optional and can be @c NULL.
+ * @param    contentLength             Specifies the request body size (this is
+ *                                     typically added into the HTTP headers as
+ *                                     the Content-Length header). This value is
+ *                                     optional and can be 0.
+ * @param   statusCode               This is an out parameter, where
+ *                                     ::HTTPAPI_ExecuteRequest returns the status
+ *                                     code from the HTTP response (200, 201, 400,
+ *                                     401, etc.)
+ * @param    responseHeadersHandle    This is an HTTP headers handle to which
+ *                                     ::HTTPAPI_ExecuteRequest must add all the
+ *                                     HTTP response headers so that the caller of
+ *                                     ::HTTPAPI_ExecuteRequest can inspect them.
+ *                                     You can manipulate @p responseHeadersHandle
+ *                                     by using the HTTPHeaders APIs available in
+ *                                     @c HTTPHeaders.h
+ * @param    responseContent             This is a buffer that must be filled by
+ *                                     ::HTTPAPI_ExecuteRequest with the contents
+ *                                     of the HTTP response body. The buffer size
+ *                                     must be increased by the
+ *                                     ::HTTPAPI_ExecuteRequest implementation in
+ *                                     order to fit the response body.
+ *                                     ::HTTPAPI_ExecuteRequest must also handle
+ *                                     chunked transfer encoding for HTTP responses.
+ *                                     To manipulate the @p responseContent buffer,
+ *                                     use the APIs available in @c Strings.h.
+ *
+ * @return    @c HTTPAPI_OK if the API call is successful or an error
+ *             code in case it fails.
+ */
+MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_ExecuteRequest, HTTP_HANDLE, handle, HTTPAPI_REQUEST_TYPE, requestType, const char*, relativePath,
+                                             HTTP_HEADERS_HANDLE, httpHeadersHandle, const unsigned char*, content,
+                                             size_t, contentLength, unsigned int*, statusCode,
+                                             HTTP_HEADERS_HANDLE, responseHeadersHandle, BUFFER_HANDLE, responseContent);
+
+/**
+ * @brief    Sets the option named @p optionName bearing the value
+ *             @p value for the HTTP_HANDLE @p handle.
+ *
+ * @param    handle          The handle to the HTTP connection created via
+ *                         ::HTTPAPI_CreateConnection.
+ * @param    optionName    A @c NULL terminated string representing the name
+ *                         of the option.
+ * @param    value          A pointer to the value for the option.
+ *
+ * @return    @c HTTPAPI_OK if initialization is successful or an error
+ *             code in case it fails.
+ */
+MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_SetOption, HTTP_HANDLE, handle, const char*, optionName, const void*, value);
+
+/**
+ * @brief    Clones the option named @p optionName bearing the value @p value
+ *             into the pointer @p savedValue.
+ *
+ * @param    optionName    A @c NULL terminated string representing the name of
+ *                         the option
+ * @param    value          A pointer to the value of the option.
+ * @param    savedValue    This pointer receives the copy of the value of the
+ *                         option. The copy needs to be free-able.
+ *
+ * @return    @c HTTPAPI_OK if initialization is successful or an error
+ *             code in case it fails.
+ */
+MOCKABLE_FUNCTION(, HTTPAPI_RESULT, HTTPAPI_CloneOption, const char*, optionName, const void*, value, const void**, savedValue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HTTPAPI_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapiex.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapiex.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapiex.h	(revision 389)
@@ -0,0 +1,106 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file httpapiex.h
+*	@brief		This is a utility module that provides HTTP requests with
+*				build-in retry capabilities.
+*
+*	@details	HTTAPIEX is a utility module that provides HTTP requests with build-in
+*				retry capability to an HTTP server. Features over "regular" HTTPAPI include:
+*					- Optional parameters
+*					- Implementation independent
+*					- Retry mechanism
+*					- Persistent options
+*/
+
+#ifndef HTTPAPIEX_H
+#define HTTPAPIEX_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/httpapi.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+ 
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif
+
+typedef struct HTTPAPIEX_HANDLE_DATA_TAG* HTTPAPIEX_HANDLE;
+
+#define HTTPAPIEX_RESULT_VALUES \
+    HTTPAPIEX_OK, \
+    HTTPAPIEX_ERROR, \
+    HTTPAPIEX_INVALID_ARG, \
+    HTTPAPIEX_RECOVERYFAILED
+/*to be continued*/
+
+/** @brief Enumeration specifying the status of calls to various APIs in this module.
+*/
+MU_DEFINE_ENUM(HTTPAPIEX_RESULT, HTTPAPIEX_RESULT_VALUES);
+
+/**
+ * @brief	Creates an @c HTTPAPIEX_HANDLE that can be used in further calls.
+ *
+ * @param	hostName	Pointer to a null-terminated string that contains the host name
+ * 						of an HTTP server.
+ * 						
+ *			If @p hostName is @c NULL then @c HTTPAPIEX_Create returns @c NULL. The @p
+ *			hostName value is saved and associated with the returned handle. If creating
+ *			the handle fails for any reason, then @c HTTAPIEX_Create returns @c NULL.
+ *			Otherwise, @c HTTPAPIEX_Create returns an @c HTTAPIEX_HANDLE suitable for
+ *			further calls to the module.
+ *
+ * @return	An @c HTTAPIEX_HANDLE suitable for further calls to the module.
+ */
+MOCKABLE_FUNCTION(, HTTPAPIEX_HANDLE, HTTPAPIEX_Create, const char*, hostName);
+
+/**
+ * @brief	Tries to execute an HTTP request.
+ *
+ * @param	handle					 	A valid @c HTTPAPIEX_HANDLE value.
+ * @param	requestType				 	A value from the ::HTTPAPI_REQUEST_TYPE enum.
+ * @param	relativePath			 	Relative path to send the request to on the server.
+ * @param	requestHttpHeadersHandle 	Handle to the request HTTP headers.
+ * @param	requestContent			 	The request content.
+ * @param 	statusCode		 	        If non-null, the HTTP status code is written to this
+ * 										pointer.
+ * @param	responseHttpHeadersHandle	Handle to the response HTTP headers.
+ * @param	responseContent			 	The response content.
+ * 										
+ * 			@c HTTPAPIEX_ExecuteRequest tries to execute an HTTP request of type @p
+ * 			requestType, on the server's @p relativePath, pushing the request HTTP
+ * 			headers @p requestHttpHeadersHandle, having the content of the request
+ * 			as pointed to by @p requestContent. If successful,  @c HTTAPIEX_ExecuteRequest
+ * 			writes in the out @p parameter statusCode the HTTP status, populates the @p
+ * 			responseHeadersHandle with the response headers and copies the response body
+ * 			to @p responseContent.
+ *
+ * @return	An @c HTTAPIEX_HANDLE suitable for further calls to the module.
+ */
+MOCKABLE_FUNCTION(, HTTPAPIEX_RESULT, HTTPAPIEX_ExecuteRequest, HTTPAPIEX_HANDLE, handle, HTTPAPI_REQUEST_TYPE, requestType, const char*, relativePath, HTTP_HEADERS_HANDLE, requestHttpHeadersHandle, BUFFER_HANDLE, requestContent, unsigned int*, statusCode, HTTP_HEADERS_HANDLE, responseHttpHeadersHandle, BUFFER_HANDLE, responseContent);
+
+/**
+ * @brief	Frees all resources used by the @c HTTPAPIEX_HANDLE object.
+ *
+ * @param	handle	The @c HTTPAPIEX_HANDLE object to be freed.
+ */
+MOCKABLE_FUNCTION(, void, HTTPAPIEX_Destroy, HTTPAPIEX_HANDLE, handle);
+
+/**
+ * @brief	Sets the option @p optionName to the value pointed to by @p value.
+ *
+ * @param	handle	  	The @c HTTPAPIEX_HANDLE representing this session.
+ * @param	optionName	Name of the option.
+ * @param	value	  	The value to be set for the option.
+ *
+ * @return	An @c HTTPAPIEX_RESULT indicating the status of the call.
+ */
+MOCKABLE_FUNCTION(, HTTPAPIEX_RESULT, HTTPAPIEX_SetOption, HTTPAPIEX_HANDLE, handle, const char*, optionName, const void*, value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HTTPAPIEX_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapiexsas.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapiexsas.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpapiexsas.h	(revision 389)
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef HTTPAPIEX_SAS_H
+#define HTTPAPIEX_SAS_H
+
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/httpheaders.h"
+#include "azure_c_shared_utility/httpapiex.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct HTTPAPIEX_SAS_STATE_TAG* HTTPAPIEX_SAS_HANDLE;
+
+MOCKABLE_FUNCTION(, HTTPAPIEX_SAS_HANDLE, HTTPAPIEX_SAS_Create, STRING_HANDLE, key, STRING_HANDLE, uriResource, STRING_HANDLE, keyName);
+
+MOCKABLE_FUNCTION(, HTTPAPIEX_SAS_HANDLE, HTTPAPIEX_SAS_Create_From_String, const char*, key, const char*, uriResource, const char*, keyName);
+
+MOCKABLE_FUNCTION(, void, HTTPAPIEX_SAS_Destroy, HTTPAPIEX_SAS_HANDLE, handle);
+
+MOCKABLE_FUNCTION(, HTTPAPIEX_RESULT, HTTPAPIEX_SAS_ExecuteRequest, HTTPAPIEX_SAS_HANDLE, sasHandle, HTTPAPIEX_HANDLE, handle, HTTPAPI_REQUEST_TYPE, requestType, const char*, relativePath, HTTP_HEADERS_HANDLE, requestHttpHeadersHandle, BUFFER_HANDLE, requestContent, unsigned int*, statusCode, HTTP_HEADERS_HANDLE, responseHeadersHandle, BUFFER_HANDLE, responseContent);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HTTPAPIEX_SAS_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpheaders.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpheaders.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/httpheaders.h	(revision 389)
@@ -0,0 +1,158 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file httpheaders.h    
+*	@brief This is a utility module that handles HTTP message-headers.
+*
+*	@details An application would use ::HTTPHeaders_Alloc to create a new set of HTTP headers.
+*			 After getting the handle, the application would build in several headers by
+*			 consecutive calls to ::HTTPHeaders_AddHeaderNameValuePair. When the headers are
+*			 constructed, the application can retrieve the stored data by calling one of the
+*			 following functions:
+*				- ::HTTPHeaders_FindHeaderValue - when the name of the header is known and it  
+*				  wants to know the value of that header  
+*				- ::HTTPHeaders_GetHeaderCount - when the application needs to know the count  
+*				  of all the headers  
+*				- ::HTTPHeaders_GetHeader - when the application needs to retrieve the
+*				  <code>name + ": " + value</code> string based on an index.
+*/
+
+#ifndef HTTPHEADERS_H
+#define HTTPHEADERS_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif
+
+/*Codes_SRS_HTTP_HEADERS_99_001:[ HttpHeaders shall have the following interface]*/
+
+#define HTTP_HEADERS_RESULT_VALUES \
+HTTP_HEADERS_OK,                  \
+HTTP_HEADERS_INVALID_ARG,         \
+HTTP_HEADERS_ALLOC_FAILED,        \
+HTTP_HEADERS_INSUFFICIENT_BUFFER, \
+HTTP_HEADERS_ERROR                \
+
+/** @brief Enumeration specifying the status of calls to various APIs in this module.
+*/
+MU_DEFINE_ENUM(HTTP_HEADERS_RESULT, HTTP_HEADERS_RESULT_VALUES);
+typedef struct HTTP_HEADERS_HANDLE_DATA_TAG* HTTP_HEADERS_HANDLE;
+
+/**
+ * @brief	Produces a @c HTTP_HANDLE that can later be used in subsequent calls to the module.
+ * 			
+ *			This function returns @c NULL in case an error occurs. After successful execution
+ *			::HTTPHeaders_GetHeaderCount will report @c 0 existing headers.
+ *
+ * @return	A HTTP_HEADERS_HANDLE representing the newly created collection of HTTP headers.
+ */
+MOCKABLE_FUNCTION(, HTTP_HEADERS_HANDLE, HTTPHeaders_Alloc);
+
+/**
+ * @brief	De-allocates the data structures allocated by previous API calls to the same handle.
+ *
+ * @param	httpHeadersHandle	A valid @c HTTP_HEADERS_HANDLE value.
+ */
+MOCKABLE_FUNCTION(, void, HTTPHeaders_Free, HTTP_HEADERS_HANDLE, httpHeadersHandle);
+
+/**
+ * @brief	Adds a header record from the @p name and @p value parameters.
+ *
+ * @param	httpHeadersHandle	A valid @c HTTP_HEADERS_HANDLE value.
+ * @param	name			 	The name of the HTTP header to add. It is invalid for
+ * 								the name to include the ':' character or character codes
+ * 								outside the range 33-126.
+ * @param	value			 	The value to be assigned to the header.
+ *
+ *			The function stores the @c name:value pair in such a way that when later
+ *			retrieved by a call to ::HTTPHeaders_GetHeader it will return a string
+ *			that is @c strcmp equal to @c name+": "+value. If the name already exists
+ *			in the collection of headers, the function concatenates the new value
+ *			after the existing value, separated by a comma and a space as in:
+ *			<code>old-value+", "+new-value</code>.
+ * 
+ * @return	Returns @c HTTP_HEADERS_OK when execution is successful or an error code from
+ * 			the ::HTTPAPIEX_RESULT enum.
+ */
+MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_AddHeaderNameValuePair, HTTP_HEADERS_HANDLE, httpHeadersHandle, const char*, name, const char*, value);
+
+/**
+ * @brief	This API performs exactly the same as ::HTTPHeaders_AddHeaderNameValuePair
+ * 			except that if the header name already exists then the already existing value
+ * 			will be replaced as opposed to being concatenated to.
+ *
+ * @param	httpHeadersHandle	A valid @c HTTP_HEADERS_HANDLE value.
+ * @param	name			 	The name of the HTTP header to add/replace. It is invalid for
+ * 								the name to include the ':' character or character codes
+ * 								outside the range 33-126.
+ * @param	value			 	The value to be assigned to the header.
+ *
+ * @return	Returns @c HTTP_HEADERS_OK when execution is successful or an error code from
+ * 			the ::HTTPAPIEX_RESULT enum.
+ */
+MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_ReplaceHeaderNameValuePair, HTTP_HEADERS_HANDLE, httpHeadersHandle, const char*, name, const char*, value);
+
+/**
+ * @brief	Retrieves the value for a previously stored name.
+ *
+ * @param	httpHeadersHandle	A valid @c HTTP_HEADERS_HANDLE value.
+ * @param	name			 	The name of the HTTP header to find.
+ *
+ * @return	The return value points to a string that shall be @c strcmp equal
+ * 			to the original stored string.
+ */
+MOCKABLE_FUNCTION(, const char*, HTTPHeaders_FindHeaderValue, HTTP_HEADERS_HANDLE, httpHeadersHandle, const char*, name);
+
+/**
+ * @brief	This API retrieves the number of stored headers.
+ *
+ * @param	httpHeadersHandle	A valid @c HTTP_HEADERS_HANDLE value.
+ * @param	headersCount		If non-null, the API writes the number of
+ * 								into the memory pointed at by this parameter.
+ *
+ * @return	Returns @c HTTP_HEADERS_OK when execution is successful or
+ * 			@c HTTP_HEADERS_ERROR when an error occurs.
+ */
+MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_GetHeaderCount, HTTP_HEADERS_HANDLE, httpHeadersHandle, size_t*, headersCount);
+
+/**
+ * @brief	This API retrieves the string name+": "+value for the header
+ * 			element at the given @p index.
+ *
+ * @param	handle			A valid @c HTTP_HEADERS_HANDLE value.
+ * @param	index			Zero-based index of the item in the
+ * 							headers collection.
+ * @param   destination		If non-null, the header value is written into a
+ * 							new string a pointer to which is written into this
+ * 							parameters. It is the caller's responsibility to free
+ * 							this memory.
+ *
+ * @return	Returns @c HTTP_HEADERS_OK when execution is successful or
+ * 			@c HTTP_HEADERS_ERROR when an error occurs.
+ */
+MOCKABLE_FUNCTION(, HTTP_HEADERS_RESULT, HTTPHeaders_GetHeader, HTTP_HEADERS_HANDLE, handle, size_t, index, char**, destination);
+
+/**
+ * @brief	This API produces a clone of the @p handle parameter.
+ *
+ * @param   handle  A valid @c HTTP_HEADERS_HANDLE value.
+ *
+ *			If @p handle is not @c NULL this function clones the content
+ *			of the handle to a new handle and returns it.
+ *			
+ * @return	A @c HTTP_HEADERS_HANDLE containing a cloned copy of the
+ * 			contents of @p handle.
+ */
+MOCKABLE_FUNCTION(, HTTP_HEADERS_HANDLE, HTTPHeaders_Clone, HTTP_HEADERS_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif /* HTTPHEADERS_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/lock.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/lock.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/lock.h	(revision 389)
@@ -0,0 +1,77 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file lock.h  
+*	@brief		A minimalistic platform agnostic lock abstraction for thread
+*				synchronization.
+*	@details	The Lock component is implemented in order to achieve thread
+*				synchronization, as we may have a requirement to consume locks
+*				across different platforms. This component exposes some generic
+*				APIs so that it can be extended for platform specific
+*				implementations.
+*/
+
+#ifndef LOCK_H
+#define LOCK_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void* LOCK_HANDLE;
+
+#define LOCK_RESULT_VALUES \
+    LOCK_OK, \
+    LOCK_ERROR \
+
+/** @brief Enumeration specifying the lock status.
+*/
+MU_DEFINE_ENUM(LOCK_RESULT, LOCK_RESULT_VALUES);
+
+/**
+ * @brief	This API creates and returns a valid lock handle.
+ *
+ * @return	A valid @c LOCK_HANDLE when successful or @c NULL otherwise.
+ */
+MOCKABLE_FUNCTION(, LOCK_HANDLE, Lock_Init);
+
+/**
+ * @brief	Acquires a lock on the given lock handle. Uses platform
+ * 			specific mutex primitives in its implementation.
+ *
+ * @param	handle	A valid handle to the lock.
+ *
+ * @return	Returns @c LOCK_OK when a lock has been acquired and
+ * 			@c LOCK_ERROR when an error occurs.
+ */
+MOCKABLE_FUNCTION(, LOCK_RESULT, Lock, LOCK_HANDLE, handle);
+
+/**
+ * @brief	Releases the lock on the given lock handle. Uses platform
+ * 			specific mutex primitives in its implementation.
+ *
+ * @param	handle	A valid handle to the lock.
+ *
+ * @return	Returns @c LOCK_OK when the lock has been released and
+ * 			@c LOCK_ERROR when an error occurs.
+ */
+MOCKABLE_FUNCTION(, LOCK_RESULT, Unlock, LOCK_HANDLE, handle);
+
+/**
+ * @brief	The lock instance is destroyed.
+ *
+ * @param	handle	A valid handle to the lock.
+ *
+ * @return	Returns @c LOCK_OK when the lock object has been
+ * 			destroyed and @c LOCK_ERROR when an error occurs.
+ */
+MOCKABLE_FUNCTION(, LOCK_RESULT, Lock_Deinit, LOCK_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LOCK_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/macro_utils.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/macro_utils.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/macro_utils.h	(revision 389)
@@ -0,0 +1,11604 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*THIS FILE IS GENERATED*/
+/*DO NOT EDIT BY HAND!!!*/
+/*instead edit macro_utils.tt */
+
+#ifndef MACRO_UTILS_H
+#define MACRO_UTILS_H
+
+#include <string.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/optimize_size.h"
+
+/*"pointer or NULL" macro - because when printf-ing arguments NULL is not valid for %p or %s (section 7.1.4 of C11 standard) */
+#define MU_P_OR_NULL(p) (((p)!=NULL)?(p):"NULL")
+
+#define MU_TOSTRING_(x) #x
+#define MU_TOSTRING(x) MU_TOSTRING_(x)
+
+#define MU_IFCOMMA(N) MU_C2(MU_IFCOMMA_, N)
+#define MU_IFCOMMA_0
+#define MU_IFCOMMA_2
+#define MU_IFCOMMA_4 ,
+#define MU_IFCOMMA_6 ,
+#define MU_IFCOMMA_8 ,
+#define MU_IFCOMMA_10 ,
+#define MU_IFCOMMA_12 ,
+#define MU_IFCOMMA_14 ,
+#define MU_IFCOMMA_16 ,
+#define MU_IFCOMMA_18 ,
+#define MU_IFCOMMA_20 ,
+#define MU_IFCOMMA_22 ,
+#define MU_IFCOMMA_24 ,
+#define MU_IFCOMMA_26 ,
+#define MU_IFCOMMA_28 ,
+#define MU_IFCOMMA_30 ,
+#define MU_IFCOMMA_32 ,
+#define MU_IFCOMMA_34 ,
+#define MU_IFCOMMA_36 ,
+#define MU_IFCOMMA_38 ,
+#define MU_IFCOMMA_40 ,
+#define MU_IFCOMMA_42 ,
+#define MU_IFCOMMA_44 ,
+#define MU_IFCOMMA_46 ,
+#define MU_IFCOMMA_48 ,
+#define MU_IFCOMMA_50 ,
+#define MU_IFCOMMA_52 ,
+#define MU_IFCOMMA_54 ,
+#define MU_IFCOMMA_56 ,
+#define MU_IFCOMMA_58 ,
+#define MU_IFCOMMA_60 ,
+#define MU_IFCOMMA_62 ,
+#define MU_IFCOMMA_64 ,
+#define MU_IFCOMMA_66 ,
+#define MU_IFCOMMA_68 ,
+#define MU_IFCOMMA_70 ,
+#define MU_IFCOMMA_72 ,
+#define MU_IFCOMMA_74 ,
+#define MU_IFCOMMA_76 ,
+#define MU_IFCOMMA_78 ,
+#define MU_IFCOMMA_80 ,
+#define MU_IFCOMMA_82 ,
+#define MU_IFCOMMA_84 ,
+#define MU_IFCOMMA_86 ,
+#define MU_IFCOMMA_88 ,
+#define MU_IFCOMMA_90 ,
+#define MU_IFCOMMA_92 ,
+#define MU_IFCOMMA_94 ,
+#define MU_IFCOMMA_96 ,
+#define MU_IFCOMMA_98 ,
+#define MU_IFCOMMA_100 ,
+#define MU_IFCOMMA_102 ,
+#define MU_IFCOMMA_104 ,
+#define MU_IFCOMMA_106 ,
+#define MU_IFCOMMA_108 ,
+#define MU_IFCOMMA_110 ,
+#define MU_IFCOMMA_112 ,
+#define MU_IFCOMMA_114 ,
+#define MU_IFCOMMA_116 ,
+#define MU_IFCOMMA_118 ,
+#define MU_IFCOMMA_120 ,
+#define MU_IFCOMMA_122 ,
+#define MU_IFCOMMA_124 ,
+
+#define MU_IFCOMMA_NOFIRST(N) MU_C2(MU_IFCOMMA_NOFIRST, N)
+#define MU_IFCOMMA_NOFIRST1 
+#define MU_IFCOMMA_NOFIRST2 ,
+#define MU_IFCOMMA_NOFIRST3 ,
+#define MU_IFCOMMA_NOFIRST4 ,
+#define MU_IFCOMMA_NOFIRST5 ,
+#define MU_IFCOMMA_NOFIRST6 ,
+#define MU_IFCOMMA_NOFIRST7 ,
+#define MU_IFCOMMA_NOFIRST8 ,
+#define MU_IFCOMMA_NOFIRST9 ,
+#define MU_IFCOMMA_NOFIRST10 ,
+#define MU_IFCOMMA_NOFIRST11 ,
+#define MU_IFCOMMA_NOFIRST12 ,
+#define MU_IFCOMMA_NOFIRST13 ,
+#define MU_IFCOMMA_NOFIRST14 ,
+#define MU_IFCOMMA_NOFIRST15 ,
+#define MU_IFCOMMA_NOFIRST16 ,
+#define MU_IFCOMMA_NOFIRST17 ,
+#define MU_IFCOMMA_NOFIRST18 ,
+#define MU_IFCOMMA_NOFIRST19 ,
+#define MU_IFCOMMA_NOFIRST20 ,
+#define MU_IFCOMMA_NOFIRST21 ,
+#define MU_IFCOMMA_NOFIRST22 ,
+#define MU_IFCOMMA_NOFIRST23 ,
+#define MU_IFCOMMA_NOFIRST24 ,
+#define MU_IFCOMMA_NOFIRST25 ,
+#define MU_IFCOMMA_NOFIRST26 ,
+#define MU_IFCOMMA_NOFIRST27 ,
+#define MU_IFCOMMA_NOFIRST28 ,
+#define MU_IFCOMMA_NOFIRST29 ,
+#define MU_IFCOMMA_NOFIRST30 ,
+#define MU_IFCOMMA_NOFIRST31 ,
+#define MU_IFCOMMA_NOFIRST32 ,
+#define MU_IFCOMMA_NOFIRST33 ,
+#define MU_IFCOMMA_NOFIRST34 ,
+#define MU_IFCOMMA_NOFIRST35 ,
+#define MU_IFCOMMA_NOFIRST36 ,
+#define MU_IFCOMMA_NOFIRST37 ,
+#define MU_IFCOMMA_NOFIRST38 ,
+#define MU_IFCOMMA_NOFIRST39 ,
+#define MU_IFCOMMA_NOFIRST40 ,
+#define MU_IFCOMMA_NOFIRST41 ,
+#define MU_IFCOMMA_NOFIRST42 ,
+#define MU_IFCOMMA_NOFIRST43 ,
+#define MU_IFCOMMA_NOFIRST44 ,
+#define MU_IFCOMMA_NOFIRST45 ,
+#define MU_IFCOMMA_NOFIRST46 ,
+#define MU_IFCOMMA_NOFIRST47 ,
+#define MU_IFCOMMA_NOFIRST48 ,
+#define MU_IFCOMMA_NOFIRST49 ,
+#define MU_IFCOMMA_NOFIRST50 ,
+#define MU_IFCOMMA_NOFIRST51 ,
+#define MU_IFCOMMA_NOFIRST52 ,
+#define MU_IFCOMMA_NOFIRST53 ,
+#define MU_IFCOMMA_NOFIRST54 ,
+#define MU_IFCOMMA_NOFIRST55 ,
+#define MU_IFCOMMA_NOFIRST56 ,
+#define MU_IFCOMMA_NOFIRST57 ,
+#define MU_IFCOMMA_NOFIRST58 ,
+#define MU_IFCOMMA_NOFIRST59 ,
+#define MU_IFCOMMA_NOFIRST60 ,
+#define MU_IFCOMMA_NOFIRST61 ,
+#define MU_IFCOMMA_NOFIRST62 ,
+#define MU_IFCOMMA_NOFIRST63 ,
+#define MU_IFCOMMA_NOFIRST64 ,
+#define MU_IFCOMMA_NOFIRST65 ,
+#define MU_IFCOMMA_NOFIRST66 ,
+#define MU_IFCOMMA_NOFIRST67 ,
+#define MU_IFCOMMA_NOFIRST68 ,
+#define MU_IFCOMMA_NOFIRST69 ,
+#define MU_IFCOMMA_NOFIRST70 ,
+#define MU_IFCOMMA_NOFIRST71 ,
+#define MU_IFCOMMA_NOFIRST72 ,
+#define MU_IFCOMMA_NOFIRST73 ,
+#define MU_IFCOMMA_NOFIRST74 ,
+#define MU_IFCOMMA_NOFIRST75 ,
+#define MU_IFCOMMA_NOFIRST76 ,
+#define MU_IFCOMMA_NOFIRST77 ,
+#define MU_IFCOMMA_NOFIRST78 ,
+#define MU_IFCOMMA_NOFIRST79 ,
+#define MU_IFCOMMA_NOFIRST80 ,
+#define MU_IFCOMMA_NOFIRST81 ,
+#define MU_IFCOMMA_NOFIRST82 ,
+#define MU_IFCOMMA_NOFIRST83 ,
+#define MU_IFCOMMA_NOFIRST84 ,
+#define MU_IFCOMMA_NOFIRST85 ,
+#define MU_IFCOMMA_NOFIRST86 ,
+#define MU_IFCOMMA_NOFIRST87 ,
+#define MU_IFCOMMA_NOFIRST88 ,
+#define MU_IFCOMMA_NOFIRST89 ,
+#define MU_IFCOMMA_NOFIRST90 ,
+#define MU_IFCOMMA_NOFIRST91 ,
+#define MU_IFCOMMA_NOFIRST92 ,
+#define MU_IFCOMMA_NOFIRST93 ,
+#define MU_IFCOMMA_NOFIRST94 ,
+#define MU_IFCOMMA_NOFIRST95 ,
+#define MU_IFCOMMA_NOFIRST96 ,
+#define MU_IFCOMMA_NOFIRST97 ,
+#define MU_IFCOMMA_NOFIRST98 ,
+#define MU_IFCOMMA_NOFIRST99 ,
+#define MU_IFCOMMA_NOFIRST100 ,
+#define MU_IFCOMMA_NOFIRST101 ,
+#define MU_IFCOMMA_NOFIRST102 ,
+#define MU_IFCOMMA_NOFIRST103 ,
+#define MU_IFCOMMA_NOFIRST104 ,
+#define MU_IFCOMMA_NOFIRST105 ,
+#define MU_IFCOMMA_NOFIRST106 ,
+#define MU_IFCOMMA_NOFIRST107 ,
+#define MU_IFCOMMA_NOFIRST108 ,
+#define MU_IFCOMMA_NOFIRST109 ,
+#define MU_IFCOMMA_NOFIRST110 ,
+#define MU_IFCOMMA_NOFIRST111 ,
+#define MU_IFCOMMA_NOFIRST112 ,
+#define MU_IFCOMMA_NOFIRST113 ,
+#define MU_IFCOMMA_NOFIRST114 ,
+#define MU_IFCOMMA_NOFIRST115 ,
+#define MU_IFCOMMA_NOFIRST116 ,
+#define MU_IFCOMMA_NOFIRST117 ,
+#define MU_IFCOMMA_NOFIRST118 ,
+#define MU_IFCOMMA_NOFIRST119 ,
+#define MU_IFCOMMA_NOFIRST120 ,
+#define MU_IFCOMMA_NOFIRST121 ,
+#define MU_IFCOMMA_NOFIRST122 ,
+#define MU_IFCOMMA_NOFIRST123 ,
+#define MU_IFCOMMA_NOFIRST124 ,
+
+#define MU_DEC(x) MU_C2(MU_DEC,x)
+#define MU_DEC1024 1023
+#define MU_DEC1023 1022
+#define MU_DEC1022 1021
+#define MU_DEC1021 1020
+#define MU_DEC1020 1019
+#define MU_DEC1019 1018
+#define MU_DEC1018 1017
+#define MU_DEC1017 1016
+#define MU_DEC1016 1015
+#define MU_DEC1015 1014
+#define MU_DEC1014 1013
+#define MU_DEC1013 1012
+#define MU_DEC1012 1011
+#define MU_DEC1011 1010
+#define MU_DEC1010 1009
+#define MU_DEC1009 1008
+#define MU_DEC1008 1007
+#define MU_DEC1007 1006
+#define MU_DEC1006 1005
+#define MU_DEC1005 1004
+#define MU_DEC1004 1003
+#define MU_DEC1003 1002
+#define MU_DEC1002 1001
+#define MU_DEC1001 1000
+#define MU_DEC1000 999
+#define MU_DEC999 998
+#define MU_DEC998 997
+#define MU_DEC997 996
+#define MU_DEC996 995
+#define MU_DEC995 994
+#define MU_DEC994 993
+#define MU_DEC993 992
+#define MU_DEC992 991
+#define MU_DEC991 990
+#define MU_DEC990 989
+#define MU_DEC989 988
+#define MU_DEC988 987
+#define MU_DEC987 986
+#define MU_DEC986 985
+#define MU_DEC985 984
+#define MU_DEC984 983
+#define MU_DEC983 982
+#define MU_DEC982 981
+#define MU_DEC981 980
+#define MU_DEC980 979
+#define MU_DEC979 978
+#define MU_DEC978 977
+#define MU_DEC977 976
+#define MU_DEC976 975
+#define MU_DEC975 974
+#define MU_DEC974 973
+#define MU_DEC973 972
+#define MU_DEC972 971
+#define MU_DEC971 970
+#define MU_DEC970 969
+#define MU_DEC969 968
+#define MU_DEC968 967
+#define MU_DEC967 966
+#define MU_DEC966 965
+#define MU_DEC965 964
+#define MU_DEC964 963
+#define MU_DEC963 962
+#define MU_DEC962 961
+#define MU_DEC961 960
+#define MU_DEC960 959
+#define MU_DEC959 958
+#define MU_DEC958 957
+#define MU_DEC957 956
+#define MU_DEC956 955
+#define MU_DEC955 954
+#define MU_DEC954 953
+#define MU_DEC953 952
+#define MU_DEC952 951
+#define MU_DEC951 950
+#define MU_DEC950 949
+#define MU_DEC949 948
+#define MU_DEC948 947
+#define MU_DEC947 946
+#define MU_DEC946 945
+#define MU_DEC945 944
+#define MU_DEC944 943
+#define MU_DEC943 942
+#define MU_DEC942 941
+#define MU_DEC941 940
+#define MU_DEC940 939
+#define MU_DEC939 938
+#define MU_DEC938 937
+#define MU_DEC937 936
+#define MU_DEC936 935
+#define MU_DEC935 934
+#define MU_DEC934 933
+#define MU_DEC933 932
+#define MU_DEC932 931
+#define MU_DEC931 930
+#define MU_DEC930 929
+#define MU_DEC929 928
+#define MU_DEC928 927
+#define MU_DEC927 926
+#define MU_DEC926 925
+#define MU_DEC925 924
+#define MU_DEC924 923
+#define MU_DEC923 922
+#define MU_DEC922 921
+#define MU_DEC921 920
+#define MU_DEC920 919
+#define MU_DEC919 918
+#define MU_DEC918 917
+#define MU_DEC917 916
+#define MU_DEC916 915
+#define MU_DEC915 914
+#define MU_DEC914 913
+#define MU_DEC913 912
+#define MU_DEC912 911
+#define MU_DEC911 910
+#define MU_DEC910 909
+#define MU_DEC909 908
+#define MU_DEC908 907
+#define MU_DEC907 906
+#define MU_DEC906 905
+#define MU_DEC905 904
+#define MU_DEC904 903
+#define MU_DEC903 902
+#define MU_DEC902 901
+#define MU_DEC901 900
+#define MU_DEC900 899
+#define MU_DEC899 898
+#define MU_DEC898 897
+#define MU_DEC897 896
+#define MU_DEC896 895
+#define MU_DEC895 894
+#define MU_DEC894 893
+#define MU_DEC893 892
+#define MU_DEC892 891
+#define MU_DEC891 890
+#define MU_DEC890 889
+#define MU_DEC889 888
+#define MU_DEC888 887
+#define MU_DEC887 886
+#define MU_DEC886 885
+#define MU_DEC885 884
+#define MU_DEC884 883
+#define MU_DEC883 882
+#define MU_DEC882 881
+#define MU_DEC881 880
+#define MU_DEC880 879
+#define MU_DEC879 878
+#define MU_DEC878 877
+#define MU_DEC877 876
+#define MU_DEC876 875
+#define MU_DEC875 874
+#define MU_DEC874 873
+#define MU_DEC873 872
+#define MU_DEC872 871
+#define MU_DEC871 870
+#define MU_DEC870 869
+#define MU_DEC869 868
+#define MU_DEC868 867
+#define MU_DEC867 866
+#define MU_DEC866 865
+#define MU_DEC865 864
+#define MU_DEC864 863
+#define MU_DEC863 862
+#define MU_DEC862 861
+#define MU_DEC861 860
+#define MU_DEC860 859
+#define MU_DEC859 858
+#define MU_DEC858 857
+#define MU_DEC857 856
+#define MU_DEC856 855
+#define MU_DEC855 854
+#define MU_DEC854 853
+#define MU_DEC853 852
+#define MU_DEC852 851
+#define MU_DEC851 850
+#define MU_DEC850 849
+#define MU_DEC849 848
+#define MU_DEC848 847
+#define MU_DEC847 846
+#define MU_DEC846 845
+#define MU_DEC845 844
+#define MU_DEC844 843
+#define MU_DEC843 842
+#define MU_DEC842 841
+#define MU_DEC841 840
+#define MU_DEC840 839
+#define MU_DEC839 838
+#define MU_DEC838 837
+#define MU_DEC837 836
+#define MU_DEC836 835
+#define MU_DEC835 834
+#define MU_DEC834 833
+#define MU_DEC833 832
+#define MU_DEC832 831
+#define MU_DEC831 830
+#define MU_DEC830 829
+#define MU_DEC829 828
+#define MU_DEC828 827
+#define MU_DEC827 826
+#define MU_DEC826 825
+#define MU_DEC825 824
+#define MU_DEC824 823
+#define MU_DEC823 822
+#define MU_DEC822 821
+#define MU_DEC821 820
+#define MU_DEC820 819
+#define MU_DEC819 818
+#define MU_DEC818 817
+#define MU_DEC817 816
+#define MU_DEC816 815
+#define MU_DEC815 814
+#define MU_DEC814 813
+#define MU_DEC813 812
+#define MU_DEC812 811
+#define MU_DEC811 810
+#define MU_DEC810 809
+#define MU_DEC809 808
+#define MU_DEC808 807
+#define MU_DEC807 806
+#define MU_DEC806 805
+#define MU_DEC805 804
+#define MU_DEC804 803
+#define MU_DEC803 802
+#define MU_DEC802 801
+#define MU_DEC801 800
+#define MU_DEC800 799
+#define MU_DEC799 798
+#define MU_DEC798 797
+#define MU_DEC797 796
+#define MU_DEC796 795
+#define MU_DEC795 794
+#define MU_DEC794 793
+#define MU_DEC793 792
+#define MU_DEC792 791
+#define MU_DEC791 790
+#define MU_DEC790 789
+#define MU_DEC789 788
+#define MU_DEC788 787
+#define MU_DEC787 786
+#define MU_DEC786 785
+#define MU_DEC785 784
+#define MU_DEC784 783
+#define MU_DEC783 782
+#define MU_DEC782 781
+#define MU_DEC781 780
+#define MU_DEC780 779
+#define MU_DEC779 778
+#define MU_DEC778 777
+#define MU_DEC777 776
+#define MU_DEC776 775
+#define MU_DEC775 774
+#define MU_DEC774 773
+#define MU_DEC773 772
+#define MU_DEC772 771
+#define MU_DEC771 770
+#define MU_DEC770 769
+#define MU_DEC769 768
+#define MU_DEC768 767
+#define MU_DEC767 766
+#define MU_DEC766 765
+#define MU_DEC765 764
+#define MU_DEC764 763
+#define MU_DEC763 762
+#define MU_DEC762 761
+#define MU_DEC761 760
+#define MU_DEC760 759
+#define MU_DEC759 758
+#define MU_DEC758 757
+#define MU_DEC757 756
+#define MU_DEC756 755
+#define MU_DEC755 754
+#define MU_DEC754 753
+#define MU_DEC753 752
+#define MU_DEC752 751
+#define MU_DEC751 750
+#define MU_DEC750 749
+#define MU_DEC749 748
+#define MU_DEC748 747
+#define MU_DEC747 746
+#define MU_DEC746 745
+#define MU_DEC745 744
+#define MU_DEC744 743
+#define MU_DEC743 742
+#define MU_DEC742 741
+#define MU_DEC741 740
+#define MU_DEC740 739
+#define MU_DEC739 738
+#define MU_DEC738 737
+#define MU_DEC737 736
+#define MU_DEC736 735
+#define MU_DEC735 734
+#define MU_DEC734 733
+#define MU_DEC733 732
+#define MU_DEC732 731
+#define MU_DEC731 730
+#define MU_DEC730 729
+#define MU_DEC729 728
+#define MU_DEC728 727
+#define MU_DEC727 726
+#define MU_DEC726 725
+#define MU_DEC725 724
+#define MU_DEC724 723
+#define MU_DEC723 722
+#define MU_DEC722 721
+#define MU_DEC721 720
+#define MU_DEC720 719
+#define MU_DEC719 718
+#define MU_DEC718 717
+#define MU_DEC717 716
+#define MU_DEC716 715
+#define MU_DEC715 714
+#define MU_DEC714 713
+#define MU_DEC713 712
+#define MU_DEC712 711
+#define MU_DEC711 710
+#define MU_DEC710 709
+#define MU_DEC709 708
+#define MU_DEC708 707
+#define MU_DEC707 706
+#define MU_DEC706 705
+#define MU_DEC705 704
+#define MU_DEC704 703
+#define MU_DEC703 702
+#define MU_DEC702 701
+#define MU_DEC701 700
+#define MU_DEC700 699
+#define MU_DEC699 698
+#define MU_DEC698 697
+#define MU_DEC697 696
+#define MU_DEC696 695
+#define MU_DEC695 694
+#define MU_DEC694 693
+#define MU_DEC693 692
+#define MU_DEC692 691
+#define MU_DEC691 690
+#define MU_DEC690 689
+#define MU_DEC689 688
+#define MU_DEC688 687
+#define MU_DEC687 686
+#define MU_DEC686 685
+#define MU_DEC685 684
+#define MU_DEC684 683
+#define MU_DEC683 682
+#define MU_DEC682 681
+#define MU_DEC681 680
+#define MU_DEC680 679
+#define MU_DEC679 678
+#define MU_DEC678 677
+#define MU_DEC677 676
+#define MU_DEC676 675
+#define MU_DEC675 674
+#define MU_DEC674 673
+#define MU_DEC673 672
+#define MU_DEC672 671
+#define MU_DEC671 670
+#define MU_DEC670 669
+#define MU_DEC669 668
+#define MU_DEC668 667
+#define MU_DEC667 666
+#define MU_DEC666 665
+#define MU_DEC665 664
+#define MU_DEC664 663
+#define MU_DEC663 662
+#define MU_DEC662 661
+#define MU_DEC661 660
+#define MU_DEC660 659
+#define MU_DEC659 658
+#define MU_DEC658 657
+#define MU_DEC657 656
+#define MU_DEC656 655
+#define MU_DEC655 654
+#define MU_DEC654 653
+#define MU_DEC653 652
+#define MU_DEC652 651
+#define MU_DEC651 650
+#define MU_DEC650 649
+#define MU_DEC649 648
+#define MU_DEC648 647
+#define MU_DEC647 646
+#define MU_DEC646 645
+#define MU_DEC645 644
+#define MU_DEC644 643
+#define MU_DEC643 642
+#define MU_DEC642 641
+#define MU_DEC641 640
+#define MU_DEC640 639
+#define MU_DEC639 638
+#define MU_DEC638 637
+#define MU_DEC637 636
+#define MU_DEC636 635
+#define MU_DEC635 634
+#define MU_DEC634 633
+#define MU_DEC633 632
+#define MU_DEC632 631
+#define MU_DEC631 630
+#define MU_DEC630 629
+#define MU_DEC629 628
+#define MU_DEC628 627
+#define MU_DEC627 626
+#define MU_DEC626 625
+#define MU_DEC625 624
+#define MU_DEC624 623
+#define MU_DEC623 622
+#define MU_DEC622 621
+#define MU_DEC621 620
+#define MU_DEC620 619
+#define MU_DEC619 618
+#define MU_DEC618 617
+#define MU_DEC617 616
+#define MU_DEC616 615
+#define MU_DEC615 614
+#define MU_DEC614 613
+#define MU_DEC613 612
+#define MU_DEC612 611
+#define MU_DEC611 610
+#define MU_DEC610 609
+#define MU_DEC609 608
+#define MU_DEC608 607
+#define MU_DEC607 606
+#define MU_DEC606 605
+#define MU_DEC605 604
+#define MU_DEC604 603
+#define MU_DEC603 602
+#define MU_DEC602 601
+#define MU_DEC601 600
+#define MU_DEC600 599
+#define MU_DEC599 598
+#define MU_DEC598 597
+#define MU_DEC597 596
+#define MU_DEC596 595
+#define MU_DEC595 594
+#define MU_DEC594 593
+#define MU_DEC593 592
+#define MU_DEC592 591
+#define MU_DEC591 590
+#define MU_DEC590 589
+#define MU_DEC589 588
+#define MU_DEC588 587
+#define MU_DEC587 586
+#define MU_DEC586 585
+#define MU_DEC585 584
+#define MU_DEC584 583
+#define MU_DEC583 582
+#define MU_DEC582 581
+#define MU_DEC581 580
+#define MU_DEC580 579
+#define MU_DEC579 578
+#define MU_DEC578 577
+#define MU_DEC577 576
+#define MU_DEC576 575
+#define MU_DEC575 574
+#define MU_DEC574 573
+#define MU_DEC573 572
+#define MU_DEC572 571
+#define MU_DEC571 570
+#define MU_DEC570 569
+#define MU_DEC569 568
+#define MU_DEC568 567
+#define MU_DEC567 566
+#define MU_DEC566 565
+#define MU_DEC565 564
+#define MU_DEC564 563
+#define MU_DEC563 562
+#define MU_DEC562 561
+#define MU_DEC561 560
+#define MU_DEC560 559
+#define MU_DEC559 558
+#define MU_DEC558 557
+#define MU_DEC557 556
+#define MU_DEC556 555
+#define MU_DEC555 554
+#define MU_DEC554 553
+#define MU_DEC553 552
+#define MU_DEC552 551
+#define MU_DEC551 550
+#define MU_DEC550 549
+#define MU_DEC549 548
+#define MU_DEC548 547
+#define MU_DEC547 546
+#define MU_DEC546 545
+#define MU_DEC545 544
+#define MU_DEC544 543
+#define MU_DEC543 542
+#define MU_DEC542 541
+#define MU_DEC541 540
+#define MU_DEC540 539
+#define MU_DEC539 538
+#define MU_DEC538 537
+#define MU_DEC537 536
+#define MU_DEC536 535
+#define MU_DEC535 534
+#define MU_DEC534 533
+#define MU_DEC533 532
+#define MU_DEC532 531
+#define MU_DEC531 530
+#define MU_DEC530 529
+#define MU_DEC529 528
+#define MU_DEC528 527
+#define MU_DEC527 526
+#define MU_DEC526 525
+#define MU_DEC525 524
+#define MU_DEC524 523
+#define MU_DEC523 522
+#define MU_DEC522 521
+#define MU_DEC521 520
+#define MU_DEC520 519
+#define MU_DEC519 518
+#define MU_DEC518 517
+#define MU_DEC517 516
+#define MU_DEC516 515
+#define MU_DEC515 514
+#define MU_DEC514 513
+#define MU_DEC513 512
+#define MU_DEC512 511
+#define MU_DEC511 510
+#define MU_DEC510 509
+#define MU_DEC509 508
+#define MU_DEC508 507
+#define MU_DEC507 506
+#define MU_DEC506 505
+#define MU_DEC505 504
+#define MU_DEC504 503
+#define MU_DEC503 502
+#define MU_DEC502 501
+#define MU_DEC501 500
+#define MU_DEC500 499
+#define MU_DEC499 498
+#define MU_DEC498 497
+#define MU_DEC497 496
+#define MU_DEC496 495
+#define MU_DEC495 494
+#define MU_DEC494 493
+#define MU_DEC493 492
+#define MU_DEC492 491
+#define MU_DEC491 490
+#define MU_DEC490 489
+#define MU_DEC489 488
+#define MU_DEC488 487
+#define MU_DEC487 486
+#define MU_DEC486 485
+#define MU_DEC485 484
+#define MU_DEC484 483
+#define MU_DEC483 482
+#define MU_DEC482 481
+#define MU_DEC481 480
+#define MU_DEC480 479
+#define MU_DEC479 478
+#define MU_DEC478 477
+#define MU_DEC477 476
+#define MU_DEC476 475
+#define MU_DEC475 474
+#define MU_DEC474 473
+#define MU_DEC473 472
+#define MU_DEC472 471
+#define MU_DEC471 470
+#define MU_DEC470 469
+#define MU_DEC469 468
+#define MU_DEC468 467
+#define MU_DEC467 466
+#define MU_DEC466 465
+#define MU_DEC465 464
+#define MU_DEC464 463
+#define MU_DEC463 462
+#define MU_DEC462 461
+#define MU_DEC461 460
+#define MU_DEC460 459
+#define MU_DEC459 458
+#define MU_DEC458 457
+#define MU_DEC457 456
+#define MU_DEC456 455
+#define MU_DEC455 454
+#define MU_DEC454 453
+#define MU_DEC453 452
+#define MU_DEC452 451
+#define MU_DEC451 450
+#define MU_DEC450 449
+#define MU_DEC449 448
+#define MU_DEC448 447
+#define MU_DEC447 446
+#define MU_DEC446 445
+#define MU_DEC445 444
+#define MU_DEC444 443
+#define MU_DEC443 442
+#define MU_DEC442 441
+#define MU_DEC441 440
+#define MU_DEC440 439
+#define MU_DEC439 438
+#define MU_DEC438 437
+#define MU_DEC437 436
+#define MU_DEC436 435
+#define MU_DEC435 434
+#define MU_DEC434 433
+#define MU_DEC433 432
+#define MU_DEC432 431
+#define MU_DEC431 430
+#define MU_DEC430 429
+#define MU_DEC429 428
+#define MU_DEC428 427
+#define MU_DEC427 426
+#define MU_DEC426 425
+#define MU_DEC425 424
+#define MU_DEC424 423
+#define MU_DEC423 422
+#define MU_DEC422 421
+#define MU_DEC421 420
+#define MU_DEC420 419
+#define MU_DEC419 418
+#define MU_DEC418 417
+#define MU_DEC417 416
+#define MU_DEC416 415
+#define MU_DEC415 414
+#define MU_DEC414 413
+#define MU_DEC413 412
+#define MU_DEC412 411
+#define MU_DEC411 410
+#define MU_DEC410 409
+#define MU_DEC409 408
+#define MU_DEC408 407
+#define MU_DEC407 406
+#define MU_DEC406 405
+#define MU_DEC405 404
+#define MU_DEC404 403
+#define MU_DEC403 402
+#define MU_DEC402 401
+#define MU_DEC401 400
+#define MU_DEC400 399
+#define MU_DEC399 398
+#define MU_DEC398 397
+#define MU_DEC397 396
+#define MU_DEC396 395
+#define MU_DEC395 394
+#define MU_DEC394 393
+#define MU_DEC393 392
+#define MU_DEC392 391
+#define MU_DEC391 390
+#define MU_DEC390 389
+#define MU_DEC389 388
+#define MU_DEC388 387
+#define MU_DEC387 386
+#define MU_DEC386 385
+#define MU_DEC385 384
+#define MU_DEC384 383
+#define MU_DEC383 382
+#define MU_DEC382 381
+#define MU_DEC381 380
+#define MU_DEC380 379
+#define MU_DEC379 378
+#define MU_DEC378 377
+#define MU_DEC377 376
+#define MU_DEC376 375
+#define MU_DEC375 374
+#define MU_DEC374 373
+#define MU_DEC373 372
+#define MU_DEC372 371
+#define MU_DEC371 370
+#define MU_DEC370 369
+#define MU_DEC369 368
+#define MU_DEC368 367
+#define MU_DEC367 366
+#define MU_DEC366 365
+#define MU_DEC365 364
+#define MU_DEC364 363
+#define MU_DEC363 362
+#define MU_DEC362 361
+#define MU_DEC361 360
+#define MU_DEC360 359
+#define MU_DEC359 358
+#define MU_DEC358 357
+#define MU_DEC357 356
+#define MU_DEC356 355
+#define MU_DEC355 354
+#define MU_DEC354 353
+#define MU_DEC353 352
+#define MU_DEC352 351
+#define MU_DEC351 350
+#define MU_DEC350 349
+#define MU_DEC349 348
+#define MU_DEC348 347
+#define MU_DEC347 346
+#define MU_DEC346 345
+#define MU_DEC345 344
+#define MU_DEC344 343
+#define MU_DEC343 342
+#define MU_DEC342 341
+#define MU_DEC341 340
+#define MU_DEC340 339
+#define MU_DEC339 338
+#define MU_DEC338 337
+#define MU_DEC337 336
+#define MU_DEC336 335
+#define MU_DEC335 334
+#define MU_DEC334 333
+#define MU_DEC333 332
+#define MU_DEC332 331
+#define MU_DEC331 330
+#define MU_DEC330 329
+#define MU_DEC329 328
+#define MU_DEC328 327
+#define MU_DEC327 326
+#define MU_DEC326 325
+#define MU_DEC325 324
+#define MU_DEC324 323
+#define MU_DEC323 322
+#define MU_DEC322 321
+#define MU_DEC321 320
+#define MU_DEC320 319
+#define MU_DEC319 318
+#define MU_DEC318 317
+#define MU_DEC317 316
+#define MU_DEC316 315
+#define MU_DEC315 314
+#define MU_DEC314 313
+#define MU_DEC313 312
+#define MU_DEC312 311
+#define MU_DEC311 310
+#define MU_DEC310 309
+#define MU_DEC309 308
+#define MU_DEC308 307
+#define MU_DEC307 306
+#define MU_DEC306 305
+#define MU_DEC305 304
+#define MU_DEC304 303
+#define MU_DEC303 302
+#define MU_DEC302 301
+#define MU_DEC301 300
+#define MU_DEC300 299
+#define MU_DEC299 298
+#define MU_DEC298 297
+#define MU_DEC297 296
+#define MU_DEC296 295
+#define MU_DEC295 294
+#define MU_DEC294 293
+#define MU_DEC293 292
+#define MU_DEC292 291
+#define MU_DEC291 290
+#define MU_DEC290 289
+#define MU_DEC289 288
+#define MU_DEC288 287
+#define MU_DEC287 286
+#define MU_DEC286 285
+#define MU_DEC285 284
+#define MU_DEC284 283
+#define MU_DEC283 282
+#define MU_DEC282 281
+#define MU_DEC281 280
+#define MU_DEC280 279
+#define MU_DEC279 278
+#define MU_DEC278 277
+#define MU_DEC277 276
+#define MU_DEC276 275
+#define MU_DEC275 274
+#define MU_DEC274 273
+#define MU_DEC273 272
+#define MU_DEC272 271
+#define MU_DEC271 270
+#define MU_DEC270 269
+#define MU_DEC269 268
+#define MU_DEC268 267
+#define MU_DEC267 266
+#define MU_DEC266 265
+#define MU_DEC265 264
+#define MU_DEC264 263
+#define MU_DEC263 262
+#define MU_DEC262 261
+#define MU_DEC261 260
+#define MU_DEC260 259
+#define MU_DEC259 258
+#define MU_DEC258 257
+#define MU_DEC257 256
+#define MU_DEC256 255
+#define MU_DEC255 254
+#define MU_DEC254 253
+#define MU_DEC253 252
+#define MU_DEC252 251
+#define MU_DEC251 250
+#define MU_DEC250 249
+#define MU_DEC249 248
+#define MU_DEC248 247
+#define MU_DEC247 246
+#define MU_DEC246 245
+#define MU_DEC245 244
+#define MU_DEC244 243
+#define MU_DEC243 242
+#define MU_DEC242 241
+#define MU_DEC241 240
+#define MU_DEC240 239
+#define MU_DEC239 238
+#define MU_DEC238 237
+#define MU_DEC237 236
+#define MU_DEC236 235
+#define MU_DEC235 234
+#define MU_DEC234 233
+#define MU_DEC233 232
+#define MU_DEC232 231
+#define MU_DEC231 230
+#define MU_DEC230 229
+#define MU_DEC229 228
+#define MU_DEC228 227
+#define MU_DEC227 226
+#define MU_DEC226 225
+#define MU_DEC225 224
+#define MU_DEC224 223
+#define MU_DEC223 222
+#define MU_DEC222 221
+#define MU_DEC221 220
+#define MU_DEC220 219
+#define MU_DEC219 218
+#define MU_DEC218 217
+#define MU_DEC217 216
+#define MU_DEC216 215
+#define MU_DEC215 214
+#define MU_DEC214 213
+#define MU_DEC213 212
+#define MU_DEC212 211
+#define MU_DEC211 210
+#define MU_DEC210 209
+#define MU_DEC209 208
+#define MU_DEC208 207
+#define MU_DEC207 206
+#define MU_DEC206 205
+#define MU_DEC205 204
+#define MU_DEC204 203
+#define MU_DEC203 202
+#define MU_DEC202 201
+#define MU_DEC201 200
+#define MU_DEC200 199
+#define MU_DEC199 198
+#define MU_DEC198 197
+#define MU_DEC197 196
+#define MU_DEC196 195
+#define MU_DEC195 194
+#define MU_DEC194 193
+#define MU_DEC193 192
+#define MU_DEC192 191
+#define MU_DEC191 190
+#define MU_DEC190 189
+#define MU_DEC189 188
+#define MU_DEC188 187
+#define MU_DEC187 186
+#define MU_DEC186 185
+#define MU_DEC185 184
+#define MU_DEC184 183
+#define MU_DEC183 182
+#define MU_DEC182 181
+#define MU_DEC181 180
+#define MU_DEC180 179
+#define MU_DEC179 178
+#define MU_DEC178 177
+#define MU_DEC177 176
+#define MU_DEC176 175
+#define MU_DEC175 174
+#define MU_DEC174 173
+#define MU_DEC173 172
+#define MU_DEC172 171
+#define MU_DEC171 170
+#define MU_DEC170 169
+#define MU_DEC169 168
+#define MU_DEC168 167
+#define MU_DEC167 166
+#define MU_DEC166 165
+#define MU_DEC165 164
+#define MU_DEC164 163
+#define MU_DEC163 162
+#define MU_DEC162 161
+#define MU_DEC161 160
+#define MU_DEC160 159
+#define MU_DEC159 158
+#define MU_DEC158 157
+#define MU_DEC157 156
+#define MU_DEC156 155
+#define MU_DEC155 154
+#define MU_DEC154 153
+#define MU_DEC153 152
+#define MU_DEC152 151
+#define MU_DEC151 150
+#define MU_DEC150 149
+#define MU_DEC149 148
+#define MU_DEC148 147
+#define MU_DEC147 146
+#define MU_DEC146 145
+#define MU_DEC145 144
+#define MU_DEC144 143
+#define MU_DEC143 142
+#define MU_DEC142 141
+#define MU_DEC141 140
+#define MU_DEC140 139
+#define MU_DEC139 138
+#define MU_DEC138 137
+#define MU_DEC137 136
+#define MU_DEC136 135
+#define MU_DEC135 134
+#define MU_DEC134 133
+#define MU_DEC133 132
+#define MU_DEC132 131
+#define MU_DEC131 130
+#define MU_DEC130 129
+#define MU_DEC129 128
+#define MU_DEC128 127
+#define MU_DEC127 126
+#define MU_DEC126 125
+#define MU_DEC125 124
+#define MU_DEC124 123
+#define MU_DEC123 122
+#define MU_DEC122 121
+#define MU_DEC121 120
+#define MU_DEC120 119
+#define MU_DEC119 118
+#define MU_DEC118 117
+#define MU_DEC117 116
+#define MU_DEC116 115
+#define MU_DEC115 114
+#define MU_DEC114 113
+#define MU_DEC113 112
+#define MU_DEC112 111
+#define MU_DEC111 110
+#define MU_DEC110 109
+#define MU_DEC109 108
+#define MU_DEC108 107
+#define MU_DEC107 106
+#define MU_DEC106 105
+#define MU_DEC105 104
+#define MU_DEC104 103
+#define MU_DEC103 102
+#define MU_DEC102 101
+#define MU_DEC101 100
+#define MU_DEC100 99
+#define MU_DEC99 98
+#define MU_DEC98 97
+#define MU_DEC97 96
+#define MU_DEC96 95
+#define MU_DEC95 94
+#define MU_DEC94 93
+#define MU_DEC93 92
+#define MU_DEC92 91
+#define MU_DEC91 90
+#define MU_DEC90 89
+#define MU_DEC89 88
+#define MU_DEC88 87
+#define MU_DEC87 86
+#define MU_DEC86 85
+#define MU_DEC85 84
+#define MU_DEC84 83
+#define MU_DEC83 82
+#define MU_DEC82 81
+#define MU_DEC81 80
+#define MU_DEC80 79
+#define MU_DEC79 78
+#define MU_DEC78 77
+#define MU_DEC77 76
+#define MU_DEC76 75
+#define MU_DEC75 74
+#define MU_DEC74 73
+#define MU_DEC73 72
+#define MU_DEC72 71
+#define MU_DEC71 70
+#define MU_DEC70 69
+#define MU_DEC69 68
+#define MU_DEC68 67
+#define MU_DEC67 66
+#define MU_DEC66 65
+#define MU_DEC65 64
+#define MU_DEC64 63
+#define MU_DEC63 62
+#define MU_DEC62 61
+#define MU_DEC61 60
+#define MU_DEC60 59
+#define MU_DEC59 58
+#define MU_DEC58 57
+#define MU_DEC57 56
+#define MU_DEC56 55
+#define MU_DEC55 54
+#define MU_DEC54 53
+#define MU_DEC53 52
+#define MU_DEC52 51
+#define MU_DEC51 50
+#define MU_DEC50 49
+#define MU_DEC49 48
+#define MU_DEC48 47
+#define MU_DEC47 46
+#define MU_DEC46 45
+#define MU_DEC45 44
+#define MU_DEC44 43
+#define MU_DEC43 42
+#define MU_DEC42 41
+#define MU_DEC41 40
+#define MU_DEC40 39
+#define MU_DEC39 38
+#define MU_DEC38 37
+#define MU_DEC37 36
+#define MU_DEC36 35
+#define MU_DEC35 34
+#define MU_DEC34 33
+#define MU_DEC33 32
+#define MU_DEC32 31
+#define MU_DEC31 30
+#define MU_DEC30 29
+#define MU_DEC29 28
+#define MU_DEC28 27
+#define MU_DEC27 26
+#define MU_DEC26 25
+#define MU_DEC25 24
+#define MU_DEC24 23
+#define MU_DEC23 22
+#define MU_DEC22 21
+#define MU_DEC21 20
+#define MU_DEC20 19
+#define MU_DEC19 18
+#define MU_DEC18 17
+#define MU_DEC17 16
+#define MU_DEC16 15
+#define MU_DEC15 14
+#define MU_DEC14 13
+#define MU_DEC13 12
+#define MU_DEC12 11
+#define MU_DEC11 10
+#define MU_DEC10 9
+#define MU_DEC9 8
+#define MU_DEC8 7
+#define MU_DEC7 6
+#define MU_DEC6 5
+#define MU_DEC5 4
+#define MU_DEC4 3
+#define MU_DEC3 2
+#define MU_DEC2 1
+#define MU_DEC1 0
+
+#define MU_INC(x) MU_C2(MU_INC,x)
+#define MU_INC1024 1025
+#define MU_INC1023 1024
+#define MU_INC1022 1023
+#define MU_INC1021 1022
+#define MU_INC1020 1021
+#define MU_INC1019 1020
+#define MU_INC1018 1019
+#define MU_INC1017 1018
+#define MU_INC1016 1017
+#define MU_INC1015 1016
+#define MU_INC1014 1015
+#define MU_INC1013 1014
+#define MU_INC1012 1013
+#define MU_INC1011 1012
+#define MU_INC1010 1011
+#define MU_INC1009 1010
+#define MU_INC1008 1009
+#define MU_INC1007 1008
+#define MU_INC1006 1007
+#define MU_INC1005 1006
+#define MU_INC1004 1005
+#define MU_INC1003 1004
+#define MU_INC1002 1003
+#define MU_INC1001 1002
+#define MU_INC1000 1001
+#define MU_INC999 1000
+#define MU_INC998 999
+#define MU_INC997 998
+#define MU_INC996 997
+#define MU_INC995 996
+#define MU_INC994 995
+#define MU_INC993 994
+#define MU_INC992 993
+#define MU_INC991 992
+#define MU_INC990 991
+#define MU_INC989 990
+#define MU_INC988 989
+#define MU_INC987 988
+#define MU_INC986 987
+#define MU_INC985 986
+#define MU_INC984 985
+#define MU_INC983 984
+#define MU_INC982 983
+#define MU_INC981 982
+#define MU_INC980 981
+#define MU_INC979 980
+#define MU_INC978 979
+#define MU_INC977 978
+#define MU_INC976 977
+#define MU_INC975 976
+#define MU_INC974 975
+#define MU_INC973 974
+#define MU_INC972 973
+#define MU_INC971 972
+#define MU_INC970 971
+#define MU_INC969 970
+#define MU_INC968 969
+#define MU_INC967 968
+#define MU_INC966 967
+#define MU_INC965 966
+#define MU_INC964 965
+#define MU_INC963 964
+#define MU_INC962 963
+#define MU_INC961 962
+#define MU_INC960 961
+#define MU_INC959 960
+#define MU_INC958 959
+#define MU_INC957 958
+#define MU_INC956 957
+#define MU_INC955 956
+#define MU_INC954 955
+#define MU_INC953 954
+#define MU_INC952 953
+#define MU_INC951 952
+#define MU_INC950 951
+#define MU_INC949 950
+#define MU_INC948 949
+#define MU_INC947 948
+#define MU_INC946 947
+#define MU_INC945 946
+#define MU_INC944 945
+#define MU_INC943 944
+#define MU_INC942 943
+#define MU_INC941 942
+#define MU_INC940 941
+#define MU_INC939 940
+#define MU_INC938 939
+#define MU_INC937 938
+#define MU_INC936 937
+#define MU_INC935 936
+#define MU_INC934 935
+#define MU_INC933 934
+#define MU_INC932 933
+#define MU_INC931 932
+#define MU_INC930 931
+#define MU_INC929 930
+#define MU_INC928 929
+#define MU_INC927 928
+#define MU_INC926 927
+#define MU_INC925 926
+#define MU_INC924 925
+#define MU_INC923 924
+#define MU_INC922 923
+#define MU_INC921 922
+#define MU_INC920 921
+#define MU_INC919 920
+#define MU_INC918 919
+#define MU_INC917 918
+#define MU_INC916 917
+#define MU_INC915 916
+#define MU_INC914 915
+#define MU_INC913 914
+#define MU_INC912 913
+#define MU_INC911 912
+#define MU_INC910 911
+#define MU_INC909 910
+#define MU_INC908 909
+#define MU_INC907 908
+#define MU_INC906 907
+#define MU_INC905 906
+#define MU_INC904 905
+#define MU_INC903 904
+#define MU_INC902 903
+#define MU_INC901 902
+#define MU_INC900 901
+#define MU_INC899 900
+#define MU_INC898 899
+#define MU_INC897 898
+#define MU_INC896 897
+#define MU_INC895 896
+#define MU_INC894 895
+#define MU_INC893 894
+#define MU_INC892 893
+#define MU_INC891 892
+#define MU_INC890 891
+#define MU_INC889 890
+#define MU_INC888 889
+#define MU_INC887 888
+#define MU_INC886 887
+#define MU_INC885 886
+#define MU_INC884 885
+#define MU_INC883 884
+#define MU_INC882 883
+#define MU_INC881 882
+#define MU_INC880 881
+#define MU_INC879 880
+#define MU_INC878 879
+#define MU_INC877 878
+#define MU_INC876 877
+#define MU_INC875 876
+#define MU_INC874 875
+#define MU_INC873 874
+#define MU_INC872 873
+#define MU_INC871 872
+#define MU_INC870 871
+#define MU_INC869 870
+#define MU_INC868 869
+#define MU_INC867 868
+#define MU_INC866 867
+#define MU_INC865 866
+#define MU_INC864 865
+#define MU_INC863 864
+#define MU_INC862 863
+#define MU_INC861 862
+#define MU_INC860 861
+#define MU_INC859 860
+#define MU_INC858 859
+#define MU_INC857 858
+#define MU_INC856 857
+#define MU_INC855 856
+#define MU_INC854 855
+#define MU_INC853 854
+#define MU_INC852 853
+#define MU_INC851 852
+#define MU_INC850 851
+#define MU_INC849 850
+#define MU_INC848 849
+#define MU_INC847 848
+#define MU_INC846 847
+#define MU_INC845 846
+#define MU_INC844 845
+#define MU_INC843 844
+#define MU_INC842 843
+#define MU_INC841 842
+#define MU_INC840 841
+#define MU_INC839 840
+#define MU_INC838 839
+#define MU_INC837 838
+#define MU_INC836 837
+#define MU_INC835 836
+#define MU_INC834 835
+#define MU_INC833 834
+#define MU_INC832 833
+#define MU_INC831 832
+#define MU_INC830 831
+#define MU_INC829 830
+#define MU_INC828 829
+#define MU_INC827 828
+#define MU_INC826 827
+#define MU_INC825 826
+#define MU_INC824 825
+#define MU_INC823 824
+#define MU_INC822 823
+#define MU_INC821 822
+#define MU_INC820 821
+#define MU_INC819 820
+#define MU_INC818 819
+#define MU_INC817 818
+#define MU_INC816 817
+#define MU_INC815 816
+#define MU_INC814 815
+#define MU_INC813 814
+#define MU_INC812 813
+#define MU_INC811 812
+#define MU_INC810 811
+#define MU_INC809 810
+#define MU_INC808 809
+#define MU_INC807 808
+#define MU_INC806 807
+#define MU_INC805 806
+#define MU_INC804 805
+#define MU_INC803 804
+#define MU_INC802 803
+#define MU_INC801 802
+#define MU_INC800 801
+#define MU_INC799 800
+#define MU_INC798 799
+#define MU_INC797 798
+#define MU_INC796 797
+#define MU_INC795 796
+#define MU_INC794 795
+#define MU_INC793 794
+#define MU_INC792 793
+#define MU_INC791 792
+#define MU_INC790 791
+#define MU_INC789 790
+#define MU_INC788 789
+#define MU_INC787 788
+#define MU_INC786 787
+#define MU_INC785 786
+#define MU_INC784 785
+#define MU_INC783 784
+#define MU_INC782 783
+#define MU_INC781 782
+#define MU_INC780 781
+#define MU_INC779 780
+#define MU_INC778 779
+#define MU_INC777 778
+#define MU_INC776 777
+#define MU_INC775 776
+#define MU_INC774 775
+#define MU_INC773 774
+#define MU_INC772 773
+#define MU_INC771 772
+#define MU_INC770 771
+#define MU_INC769 770
+#define MU_INC768 769
+#define MU_INC767 768
+#define MU_INC766 767
+#define MU_INC765 766
+#define MU_INC764 765
+#define MU_INC763 764
+#define MU_INC762 763
+#define MU_INC761 762
+#define MU_INC760 761
+#define MU_INC759 760
+#define MU_INC758 759
+#define MU_INC757 758
+#define MU_INC756 757
+#define MU_INC755 756
+#define MU_INC754 755
+#define MU_INC753 754
+#define MU_INC752 753
+#define MU_INC751 752
+#define MU_INC750 751
+#define MU_INC749 750
+#define MU_INC748 749
+#define MU_INC747 748
+#define MU_INC746 747
+#define MU_INC745 746
+#define MU_INC744 745
+#define MU_INC743 744
+#define MU_INC742 743
+#define MU_INC741 742
+#define MU_INC740 741
+#define MU_INC739 740
+#define MU_INC738 739
+#define MU_INC737 738
+#define MU_INC736 737
+#define MU_INC735 736
+#define MU_INC734 735
+#define MU_INC733 734
+#define MU_INC732 733
+#define MU_INC731 732
+#define MU_INC730 731
+#define MU_INC729 730
+#define MU_INC728 729
+#define MU_INC727 728
+#define MU_INC726 727
+#define MU_INC725 726
+#define MU_INC724 725
+#define MU_INC723 724
+#define MU_INC722 723
+#define MU_INC721 722
+#define MU_INC720 721
+#define MU_INC719 720
+#define MU_INC718 719
+#define MU_INC717 718
+#define MU_INC716 717
+#define MU_INC715 716
+#define MU_INC714 715
+#define MU_INC713 714
+#define MU_INC712 713
+#define MU_INC711 712
+#define MU_INC710 711
+#define MU_INC709 710
+#define MU_INC708 709
+#define MU_INC707 708
+#define MU_INC706 707
+#define MU_INC705 706
+#define MU_INC704 705
+#define MU_INC703 704
+#define MU_INC702 703
+#define MU_INC701 702
+#define MU_INC700 701
+#define MU_INC699 700
+#define MU_INC698 699
+#define MU_INC697 698
+#define MU_INC696 697
+#define MU_INC695 696
+#define MU_INC694 695
+#define MU_INC693 694
+#define MU_INC692 693
+#define MU_INC691 692
+#define MU_INC690 691
+#define MU_INC689 690
+#define MU_INC688 689
+#define MU_INC687 688
+#define MU_INC686 687
+#define MU_INC685 686
+#define MU_INC684 685
+#define MU_INC683 684
+#define MU_INC682 683
+#define MU_INC681 682
+#define MU_INC680 681
+#define MU_INC679 680
+#define MU_INC678 679
+#define MU_INC677 678
+#define MU_INC676 677
+#define MU_INC675 676
+#define MU_INC674 675
+#define MU_INC673 674
+#define MU_INC672 673
+#define MU_INC671 672
+#define MU_INC670 671
+#define MU_INC669 670
+#define MU_INC668 669
+#define MU_INC667 668
+#define MU_INC666 667
+#define MU_INC665 666
+#define MU_INC664 665
+#define MU_INC663 664
+#define MU_INC662 663
+#define MU_INC661 662
+#define MU_INC660 661
+#define MU_INC659 660
+#define MU_INC658 659
+#define MU_INC657 658
+#define MU_INC656 657
+#define MU_INC655 656
+#define MU_INC654 655
+#define MU_INC653 654
+#define MU_INC652 653
+#define MU_INC651 652
+#define MU_INC650 651
+#define MU_INC649 650
+#define MU_INC648 649
+#define MU_INC647 648
+#define MU_INC646 647
+#define MU_INC645 646
+#define MU_INC644 645
+#define MU_INC643 644
+#define MU_INC642 643
+#define MU_INC641 642
+#define MU_INC640 641
+#define MU_INC639 640
+#define MU_INC638 639
+#define MU_INC637 638
+#define MU_INC636 637
+#define MU_INC635 636
+#define MU_INC634 635
+#define MU_INC633 634
+#define MU_INC632 633
+#define MU_INC631 632
+#define MU_INC630 631
+#define MU_INC629 630
+#define MU_INC628 629
+#define MU_INC627 628
+#define MU_INC626 627
+#define MU_INC625 626
+#define MU_INC624 625
+#define MU_INC623 624
+#define MU_INC622 623
+#define MU_INC621 622
+#define MU_INC620 621
+#define MU_INC619 620
+#define MU_INC618 619
+#define MU_INC617 618
+#define MU_INC616 617
+#define MU_INC615 616
+#define MU_INC614 615
+#define MU_INC613 614
+#define MU_INC612 613
+#define MU_INC611 612
+#define MU_INC610 611
+#define MU_INC609 610
+#define MU_INC608 609
+#define MU_INC607 608
+#define MU_INC606 607
+#define MU_INC605 606
+#define MU_INC604 605
+#define MU_INC603 604
+#define MU_INC602 603
+#define MU_INC601 602
+#define MU_INC600 601
+#define MU_INC599 600
+#define MU_INC598 599
+#define MU_INC597 598
+#define MU_INC596 597
+#define MU_INC595 596
+#define MU_INC594 595
+#define MU_INC593 594
+#define MU_INC592 593
+#define MU_INC591 592
+#define MU_INC590 591
+#define MU_INC589 590
+#define MU_INC588 589
+#define MU_INC587 588
+#define MU_INC586 587
+#define MU_INC585 586
+#define MU_INC584 585
+#define MU_INC583 584
+#define MU_INC582 583
+#define MU_INC581 582
+#define MU_INC580 581
+#define MU_INC579 580
+#define MU_INC578 579
+#define MU_INC577 578
+#define MU_INC576 577
+#define MU_INC575 576
+#define MU_INC574 575
+#define MU_INC573 574
+#define MU_INC572 573
+#define MU_INC571 572
+#define MU_INC570 571
+#define MU_INC569 570
+#define MU_INC568 569
+#define MU_INC567 568
+#define MU_INC566 567
+#define MU_INC565 566
+#define MU_INC564 565
+#define MU_INC563 564
+#define MU_INC562 563
+#define MU_INC561 562
+#define MU_INC560 561
+#define MU_INC559 560
+#define MU_INC558 559
+#define MU_INC557 558
+#define MU_INC556 557
+#define MU_INC555 556
+#define MU_INC554 555
+#define MU_INC553 554
+#define MU_INC552 553
+#define MU_INC551 552
+#define MU_INC550 551
+#define MU_INC549 550
+#define MU_INC548 549
+#define MU_INC547 548
+#define MU_INC546 547
+#define MU_INC545 546
+#define MU_INC544 545
+#define MU_INC543 544
+#define MU_INC542 543
+#define MU_INC541 542
+#define MU_INC540 541
+#define MU_INC539 540
+#define MU_INC538 539
+#define MU_INC537 538
+#define MU_INC536 537
+#define MU_INC535 536
+#define MU_INC534 535
+#define MU_INC533 534
+#define MU_INC532 533
+#define MU_INC531 532
+#define MU_INC530 531
+#define MU_INC529 530
+#define MU_INC528 529
+#define MU_INC527 528
+#define MU_INC526 527
+#define MU_INC525 526
+#define MU_INC524 525
+#define MU_INC523 524
+#define MU_INC522 523
+#define MU_INC521 522
+#define MU_INC520 521
+#define MU_INC519 520
+#define MU_INC518 519
+#define MU_INC517 518
+#define MU_INC516 517
+#define MU_INC515 516
+#define MU_INC514 515
+#define MU_INC513 514
+#define MU_INC512 513
+#define MU_INC511 512
+#define MU_INC510 511
+#define MU_INC509 510
+#define MU_INC508 509
+#define MU_INC507 508
+#define MU_INC506 507
+#define MU_INC505 506
+#define MU_INC504 505
+#define MU_INC503 504
+#define MU_INC502 503
+#define MU_INC501 502
+#define MU_INC500 501
+#define MU_INC499 500
+#define MU_INC498 499
+#define MU_INC497 498
+#define MU_INC496 497
+#define MU_INC495 496
+#define MU_INC494 495
+#define MU_INC493 494
+#define MU_INC492 493
+#define MU_INC491 492
+#define MU_INC490 491
+#define MU_INC489 490
+#define MU_INC488 489
+#define MU_INC487 488
+#define MU_INC486 487
+#define MU_INC485 486
+#define MU_INC484 485
+#define MU_INC483 484
+#define MU_INC482 483
+#define MU_INC481 482
+#define MU_INC480 481
+#define MU_INC479 480
+#define MU_INC478 479
+#define MU_INC477 478
+#define MU_INC476 477
+#define MU_INC475 476
+#define MU_INC474 475
+#define MU_INC473 474
+#define MU_INC472 473
+#define MU_INC471 472
+#define MU_INC470 471
+#define MU_INC469 470
+#define MU_INC468 469
+#define MU_INC467 468
+#define MU_INC466 467
+#define MU_INC465 466
+#define MU_INC464 465
+#define MU_INC463 464
+#define MU_INC462 463
+#define MU_INC461 462
+#define MU_INC460 461
+#define MU_INC459 460
+#define MU_INC458 459
+#define MU_INC457 458
+#define MU_INC456 457
+#define MU_INC455 456
+#define MU_INC454 455
+#define MU_INC453 454
+#define MU_INC452 453
+#define MU_INC451 452
+#define MU_INC450 451
+#define MU_INC449 450
+#define MU_INC448 449
+#define MU_INC447 448
+#define MU_INC446 447
+#define MU_INC445 446
+#define MU_INC444 445
+#define MU_INC443 444
+#define MU_INC442 443
+#define MU_INC441 442
+#define MU_INC440 441
+#define MU_INC439 440
+#define MU_INC438 439
+#define MU_INC437 438
+#define MU_INC436 437
+#define MU_INC435 436
+#define MU_INC434 435
+#define MU_INC433 434
+#define MU_INC432 433
+#define MU_INC431 432
+#define MU_INC430 431
+#define MU_INC429 430
+#define MU_INC428 429
+#define MU_INC427 428
+#define MU_INC426 427
+#define MU_INC425 426
+#define MU_INC424 425
+#define MU_INC423 424
+#define MU_INC422 423
+#define MU_INC421 422
+#define MU_INC420 421
+#define MU_INC419 420
+#define MU_INC418 419
+#define MU_INC417 418
+#define MU_INC416 417
+#define MU_INC415 416
+#define MU_INC414 415
+#define MU_INC413 414
+#define MU_INC412 413
+#define MU_INC411 412
+#define MU_INC410 411
+#define MU_INC409 410
+#define MU_INC408 409
+#define MU_INC407 408
+#define MU_INC406 407
+#define MU_INC405 406
+#define MU_INC404 405
+#define MU_INC403 404
+#define MU_INC402 403
+#define MU_INC401 402
+#define MU_INC400 401
+#define MU_INC399 400
+#define MU_INC398 399
+#define MU_INC397 398
+#define MU_INC396 397
+#define MU_INC395 396
+#define MU_INC394 395
+#define MU_INC393 394
+#define MU_INC392 393
+#define MU_INC391 392
+#define MU_INC390 391
+#define MU_INC389 390
+#define MU_INC388 389
+#define MU_INC387 388
+#define MU_INC386 387
+#define MU_INC385 386
+#define MU_INC384 385
+#define MU_INC383 384
+#define MU_INC382 383
+#define MU_INC381 382
+#define MU_INC380 381
+#define MU_INC379 380
+#define MU_INC378 379
+#define MU_INC377 378
+#define MU_INC376 377
+#define MU_INC375 376
+#define MU_INC374 375
+#define MU_INC373 374
+#define MU_INC372 373
+#define MU_INC371 372
+#define MU_INC370 371
+#define MU_INC369 370
+#define MU_INC368 369
+#define MU_INC367 368
+#define MU_INC366 367
+#define MU_INC365 366
+#define MU_INC364 365
+#define MU_INC363 364
+#define MU_INC362 363
+#define MU_INC361 362
+#define MU_INC360 361
+#define MU_INC359 360
+#define MU_INC358 359
+#define MU_INC357 358
+#define MU_INC356 357
+#define MU_INC355 356
+#define MU_INC354 355
+#define MU_INC353 354
+#define MU_INC352 353
+#define MU_INC351 352
+#define MU_INC350 351
+#define MU_INC349 350
+#define MU_INC348 349
+#define MU_INC347 348
+#define MU_INC346 347
+#define MU_INC345 346
+#define MU_INC344 345
+#define MU_INC343 344
+#define MU_INC342 343
+#define MU_INC341 342
+#define MU_INC340 341
+#define MU_INC339 340
+#define MU_INC338 339
+#define MU_INC337 338
+#define MU_INC336 337
+#define MU_INC335 336
+#define MU_INC334 335
+#define MU_INC333 334
+#define MU_INC332 333
+#define MU_INC331 332
+#define MU_INC330 331
+#define MU_INC329 330
+#define MU_INC328 329
+#define MU_INC327 328
+#define MU_INC326 327
+#define MU_INC325 326
+#define MU_INC324 325
+#define MU_INC323 324
+#define MU_INC322 323
+#define MU_INC321 322
+#define MU_INC320 321
+#define MU_INC319 320
+#define MU_INC318 319
+#define MU_INC317 318
+#define MU_INC316 317
+#define MU_INC315 316
+#define MU_INC314 315
+#define MU_INC313 314
+#define MU_INC312 313
+#define MU_INC311 312
+#define MU_INC310 311
+#define MU_INC309 310
+#define MU_INC308 309
+#define MU_INC307 308
+#define MU_INC306 307
+#define MU_INC305 306
+#define MU_INC304 305
+#define MU_INC303 304
+#define MU_INC302 303
+#define MU_INC301 302
+#define MU_INC300 301
+#define MU_INC299 300
+#define MU_INC298 299
+#define MU_INC297 298
+#define MU_INC296 297
+#define MU_INC295 296
+#define MU_INC294 295
+#define MU_INC293 294
+#define MU_INC292 293
+#define MU_INC291 292
+#define MU_INC290 291
+#define MU_INC289 290
+#define MU_INC288 289
+#define MU_INC287 288
+#define MU_INC286 287
+#define MU_INC285 286
+#define MU_INC284 285
+#define MU_INC283 284
+#define MU_INC282 283
+#define MU_INC281 282
+#define MU_INC280 281
+#define MU_INC279 280
+#define MU_INC278 279
+#define MU_INC277 278
+#define MU_INC276 277
+#define MU_INC275 276
+#define MU_INC274 275
+#define MU_INC273 274
+#define MU_INC272 273
+#define MU_INC271 272
+#define MU_INC270 271
+#define MU_INC269 270
+#define MU_INC268 269
+#define MU_INC267 268
+#define MU_INC266 267
+#define MU_INC265 266
+#define MU_INC264 265
+#define MU_INC263 264
+#define MU_INC262 263
+#define MU_INC261 262
+#define MU_INC260 261
+#define MU_INC259 260
+#define MU_INC258 259
+#define MU_INC257 258
+#define MU_INC256 257
+#define MU_INC255 256
+#define MU_INC254 255
+#define MU_INC253 254
+#define MU_INC252 253
+#define MU_INC251 252
+#define MU_INC250 251
+#define MU_INC249 250
+#define MU_INC248 249
+#define MU_INC247 248
+#define MU_INC246 247
+#define MU_INC245 246
+#define MU_INC244 245
+#define MU_INC243 244
+#define MU_INC242 243
+#define MU_INC241 242
+#define MU_INC240 241
+#define MU_INC239 240
+#define MU_INC238 239
+#define MU_INC237 238
+#define MU_INC236 237
+#define MU_INC235 236
+#define MU_INC234 235
+#define MU_INC233 234
+#define MU_INC232 233
+#define MU_INC231 232
+#define MU_INC230 231
+#define MU_INC229 230
+#define MU_INC228 229
+#define MU_INC227 228
+#define MU_INC226 227
+#define MU_INC225 226
+#define MU_INC224 225
+#define MU_INC223 224
+#define MU_INC222 223
+#define MU_INC221 222
+#define MU_INC220 221
+#define MU_INC219 220
+#define MU_INC218 219
+#define MU_INC217 218
+#define MU_INC216 217
+#define MU_INC215 216
+#define MU_INC214 215
+#define MU_INC213 214
+#define MU_INC212 213
+#define MU_INC211 212
+#define MU_INC210 211
+#define MU_INC209 210
+#define MU_INC208 209
+#define MU_INC207 208
+#define MU_INC206 207
+#define MU_INC205 206
+#define MU_INC204 205
+#define MU_INC203 204
+#define MU_INC202 203
+#define MU_INC201 202
+#define MU_INC200 201
+#define MU_INC199 200
+#define MU_INC198 199
+#define MU_INC197 198
+#define MU_INC196 197
+#define MU_INC195 196
+#define MU_INC194 195
+#define MU_INC193 194
+#define MU_INC192 193
+#define MU_INC191 192
+#define MU_INC190 191
+#define MU_INC189 190
+#define MU_INC188 189
+#define MU_INC187 188
+#define MU_INC186 187
+#define MU_INC185 186
+#define MU_INC184 185
+#define MU_INC183 184
+#define MU_INC182 183
+#define MU_INC181 182
+#define MU_INC180 181
+#define MU_INC179 180
+#define MU_INC178 179
+#define MU_INC177 178
+#define MU_INC176 177
+#define MU_INC175 176
+#define MU_INC174 175
+#define MU_INC173 174
+#define MU_INC172 173
+#define MU_INC171 172
+#define MU_INC170 171
+#define MU_INC169 170
+#define MU_INC168 169
+#define MU_INC167 168
+#define MU_INC166 167
+#define MU_INC165 166
+#define MU_INC164 165
+#define MU_INC163 164
+#define MU_INC162 163
+#define MU_INC161 162
+#define MU_INC160 161
+#define MU_INC159 160
+#define MU_INC158 159
+#define MU_INC157 158
+#define MU_INC156 157
+#define MU_INC155 156
+#define MU_INC154 155
+#define MU_INC153 154
+#define MU_INC152 153
+#define MU_INC151 152
+#define MU_INC150 151
+#define MU_INC149 150
+#define MU_INC148 149
+#define MU_INC147 148
+#define MU_INC146 147
+#define MU_INC145 146
+#define MU_INC144 145
+#define MU_INC143 144
+#define MU_INC142 143
+#define MU_INC141 142
+#define MU_INC140 141
+#define MU_INC139 140
+#define MU_INC138 139
+#define MU_INC137 138
+#define MU_INC136 137
+#define MU_INC135 136
+#define MU_INC134 135
+#define MU_INC133 134
+#define MU_INC132 133
+#define MU_INC131 132
+#define MU_INC130 131
+#define MU_INC129 130
+#define MU_INC128 129
+#define MU_INC127 128
+#define MU_INC126 127
+#define MU_INC125 126
+#define MU_INC124 125
+#define MU_INC123 124
+#define MU_INC122 123
+#define MU_INC121 122
+#define MU_INC120 121
+#define MU_INC119 120
+#define MU_INC118 119
+#define MU_INC117 118
+#define MU_INC116 117
+#define MU_INC115 116
+#define MU_INC114 115
+#define MU_INC113 114
+#define MU_INC112 113
+#define MU_INC111 112
+#define MU_INC110 111
+#define MU_INC109 110
+#define MU_INC108 109
+#define MU_INC107 108
+#define MU_INC106 107
+#define MU_INC105 106
+#define MU_INC104 105
+#define MU_INC103 104
+#define MU_INC102 103
+#define MU_INC101 102
+#define MU_INC100 101
+#define MU_INC99 100
+#define MU_INC98 99
+#define MU_INC97 98
+#define MU_INC96 97
+#define MU_INC95 96
+#define MU_INC94 95
+#define MU_INC93 94
+#define MU_INC92 93
+#define MU_INC91 92
+#define MU_INC90 91
+#define MU_INC89 90
+#define MU_INC88 89
+#define MU_INC87 88
+#define MU_INC86 87
+#define MU_INC85 86
+#define MU_INC84 85
+#define MU_INC83 84
+#define MU_INC82 83
+#define MU_INC81 82
+#define MU_INC80 81
+#define MU_INC79 80
+#define MU_INC78 79
+#define MU_INC77 78
+#define MU_INC76 77
+#define MU_INC75 76
+#define MU_INC74 75
+#define MU_INC73 74
+#define MU_INC72 73
+#define MU_INC71 72
+#define MU_INC70 71
+#define MU_INC69 70
+#define MU_INC68 69
+#define MU_INC67 68
+#define MU_INC66 67
+#define MU_INC65 66
+#define MU_INC64 65
+#define MU_INC63 64
+#define MU_INC62 63
+#define MU_INC61 62
+#define MU_INC60 61
+#define MU_INC59 60
+#define MU_INC58 59
+#define MU_INC57 58
+#define MU_INC56 57
+#define MU_INC55 56
+#define MU_INC54 55
+#define MU_INC53 54
+#define MU_INC52 53
+#define MU_INC51 52
+#define MU_INC50 51
+#define MU_INC49 50
+#define MU_INC48 49
+#define MU_INC47 48
+#define MU_INC46 47
+#define MU_INC45 46
+#define MU_INC44 45
+#define MU_INC43 44
+#define MU_INC42 43
+#define MU_INC41 42
+#define MU_INC40 41
+#define MU_INC39 40
+#define MU_INC38 39
+#define MU_INC37 38
+#define MU_INC36 37
+#define MU_INC35 36
+#define MU_INC34 35
+#define MU_INC33 34
+#define MU_INC32 33
+#define MU_INC31 32
+#define MU_INC30 31
+#define MU_INC29 30
+#define MU_INC28 29
+#define MU_INC27 28
+#define MU_INC26 27
+#define MU_INC25 26
+#define MU_INC24 25
+#define MU_INC23 24
+#define MU_INC22 23
+#define MU_INC21 22
+#define MU_INC20 21
+#define MU_INC19 20
+#define MU_INC18 19
+#define MU_INC17 18
+#define MU_INC16 17
+#define MU_INC15 16
+#define MU_INC14 15
+#define MU_INC13 14
+#define MU_INC12 13
+#define MU_INC11 12
+#define MU_INC10 11
+#define MU_INC9 10
+#define MU_INC8 9
+#define MU_INC7 8
+#define MU_INC6 7
+#define MU_INC5 6
+#define MU_INC4 5
+#define MU_INC3 4
+#define MU_INC2 3
+#define MU_INC1 2
+#define MU_INC0 1
+
+#define MU_DIV2(x) MU_C2(MU_DIV2_,x)
+
+#define MU_DIV2_1024 512
+#define MU_DIV2_1023 511
+#define MU_DIV2_1022 511
+#define MU_DIV2_1021 510
+#define MU_DIV2_1020 510
+#define MU_DIV2_1019 509
+#define MU_DIV2_1018 509
+#define MU_DIV2_1017 508
+#define MU_DIV2_1016 508
+#define MU_DIV2_1015 507
+#define MU_DIV2_1014 507
+#define MU_DIV2_1013 506
+#define MU_DIV2_1012 506
+#define MU_DIV2_1011 505
+#define MU_DIV2_1010 505
+#define MU_DIV2_1009 504
+#define MU_DIV2_1008 504
+#define MU_DIV2_1007 503
+#define MU_DIV2_1006 503
+#define MU_DIV2_1005 502
+#define MU_DIV2_1004 502
+#define MU_DIV2_1003 501
+#define MU_DIV2_1002 501
+#define MU_DIV2_1001 500
+#define MU_DIV2_1000 500
+#define MU_DIV2_999 499
+#define MU_DIV2_998 499
+#define MU_DIV2_997 498
+#define MU_DIV2_996 498
+#define MU_DIV2_995 497
+#define MU_DIV2_994 497
+#define MU_DIV2_993 496
+#define MU_DIV2_992 496
+#define MU_DIV2_991 495
+#define MU_DIV2_990 495
+#define MU_DIV2_989 494
+#define MU_DIV2_988 494
+#define MU_DIV2_987 493
+#define MU_DIV2_986 493
+#define MU_DIV2_985 492
+#define MU_DIV2_984 492
+#define MU_DIV2_983 491
+#define MU_DIV2_982 491
+#define MU_DIV2_981 490
+#define MU_DIV2_980 490
+#define MU_DIV2_979 489
+#define MU_DIV2_978 489
+#define MU_DIV2_977 488
+#define MU_DIV2_976 488
+#define MU_DIV2_975 487
+#define MU_DIV2_974 487
+#define MU_DIV2_973 486
+#define MU_DIV2_972 486
+#define MU_DIV2_971 485
+#define MU_DIV2_970 485
+#define MU_DIV2_969 484
+#define MU_DIV2_968 484
+#define MU_DIV2_967 483
+#define MU_DIV2_966 483
+#define MU_DIV2_965 482
+#define MU_DIV2_964 482
+#define MU_DIV2_963 481
+#define MU_DIV2_962 481
+#define MU_DIV2_961 480
+#define MU_DIV2_960 480
+#define MU_DIV2_959 479
+#define MU_DIV2_958 479
+#define MU_DIV2_957 478
+#define MU_DIV2_956 478
+#define MU_DIV2_955 477
+#define MU_DIV2_954 477
+#define MU_DIV2_953 476
+#define MU_DIV2_952 476
+#define MU_DIV2_951 475
+#define MU_DIV2_950 475
+#define MU_DIV2_949 474
+#define MU_DIV2_948 474
+#define MU_DIV2_947 473
+#define MU_DIV2_946 473
+#define MU_DIV2_945 472
+#define MU_DIV2_944 472
+#define MU_DIV2_943 471
+#define MU_DIV2_942 471
+#define MU_DIV2_941 470
+#define MU_DIV2_940 470
+#define MU_DIV2_939 469
+#define MU_DIV2_938 469
+#define MU_DIV2_937 468
+#define MU_DIV2_936 468
+#define MU_DIV2_935 467
+#define MU_DIV2_934 467
+#define MU_DIV2_933 466
+#define MU_DIV2_932 466
+#define MU_DIV2_931 465
+#define MU_DIV2_930 465
+#define MU_DIV2_929 464
+#define MU_DIV2_928 464
+#define MU_DIV2_927 463
+#define MU_DIV2_926 463
+#define MU_DIV2_925 462
+#define MU_DIV2_924 462
+#define MU_DIV2_923 461
+#define MU_DIV2_922 461
+#define MU_DIV2_921 460
+#define MU_DIV2_920 460
+#define MU_DIV2_919 459
+#define MU_DIV2_918 459
+#define MU_DIV2_917 458
+#define MU_DIV2_916 458
+#define MU_DIV2_915 457
+#define MU_DIV2_914 457
+#define MU_DIV2_913 456
+#define MU_DIV2_912 456
+#define MU_DIV2_911 455
+#define MU_DIV2_910 455
+#define MU_DIV2_909 454
+#define MU_DIV2_908 454
+#define MU_DIV2_907 453
+#define MU_DIV2_906 453
+#define MU_DIV2_905 452
+#define MU_DIV2_904 452
+#define MU_DIV2_903 451
+#define MU_DIV2_902 451
+#define MU_DIV2_901 450
+#define MU_DIV2_900 450
+#define MU_DIV2_899 449
+#define MU_DIV2_898 449
+#define MU_DIV2_897 448
+#define MU_DIV2_896 448
+#define MU_DIV2_895 447
+#define MU_DIV2_894 447
+#define MU_DIV2_893 446
+#define MU_DIV2_892 446
+#define MU_DIV2_891 445
+#define MU_DIV2_890 445
+#define MU_DIV2_889 444
+#define MU_DIV2_888 444
+#define MU_DIV2_887 443
+#define MU_DIV2_886 443
+#define MU_DIV2_885 442
+#define MU_DIV2_884 442
+#define MU_DIV2_883 441
+#define MU_DIV2_882 441
+#define MU_DIV2_881 440
+#define MU_DIV2_880 440
+#define MU_DIV2_879 439
+#define MU_DIV2_878 439
+#define MU_DIV2_877 438
+#define MU_DIV2_876 438
+#define MU_DIV2_875 437
+#define MU_DIV2_874 437
+#define MU_DIV2_873 436
+#define MU_DIV2_872 436
+#define MU_DIV2_871 435
+#define MU_DIV2_870 435
+#define MU_DIV2_869 434
+#define MU_DIV2_868 434
+#define MU_DIV2_867 433
+#define MU_DIV2_866 433
+#define MU_DIV2_865 432
+#define MU_DIV2_864 432
+#define MU_DIV2_863 431
+#define MU_DIV2_862 431
+#define MU_DIV2_861 430
+#define MU_DIV2_860 430
+#define MU_DIV2_859 429
+#define MU_DIV2_858 429
+#define MU_DIV2_857 428
+#define MU_DIV2_856 428
+#define MU_DIV2_855 427
+#define MU_DIV2_854 427
+#define MU_DIV2_853 426
+#define MU_DIV2_852 426
+#define MU_DIV2_851 425
+#define MU_DIV2_850 425
+#define MU_DIV2_849 424
+#define MU_DIV2_848 424
+#define MU_DIV2_847 423
+#define MU_DIV2_846 423
+#define MU_DIV2_845 422
+#define MU_DIV2_844 422
+#define MU_DIV2_843 421
+#define MU_DIV2_842 421
+#define MU_DIV2_841 420
+#define MU_DIV2_840 420
+#define MU_DIV2_839 419
+#define MU_DIV2_838 419
+#define MU_DIV2_837 418
+#define MU_DIV2_836 418
+#define MU_DIV2_835 417
+#define MU_DIV2_834 417
+#define MU_DIV2_833 416
+#define MU_DIV2_832 416
+#define MU_DIV2_831 415
+#define MU_DIV2_830 415
+#define MU_DIV2_829 414
+#define MU_DIV2_828 414
+#define MU_DIV2_827 413
+#define MU_DIV2_826 413
+#define MU_DIV2_825 412
+#define MU_DIV2_824 412
+#define MU_DIV2_823 411
+#define MU_DIV2_822 411
+#define MU_DIV2_821 410
+#define MU_DIV2_820 410
+#define MU_DIV2_819 409
+#define MU_DIV2_818 409
+#define MU_DIV2_817 408
+#define MU_DIV2_816 408
+#define MU_DIV2_815 407
+#define MU_DIV2_814 407
+#define MU_DIV2_813 406
+#define MU_DIV2_812 406
+#define MU_DIV2_811 405
+#define MU_DIV2_810 405
+#define MU_DIV2_809 404
+#define MU_DIV2_808 404
+#define MU_DIV2_807 403
+#define MU_DIV2_806 403
+#define MU_DIV2_805 402
+#define MU_DIV2_804 402
+#define MU_DIV2_803 401
+#define MU_DIV2_802 401
+#define MU_DIV2_801 400
+#define MU_DIV2_800 400
+#define MU_DIV2_799 399
+#define MU_DIV2_798 399
+#define MU_DIV2_797 398
+#define MU_DIV2_796 398
+#define MU_DIV2_795 397
+#define MU_DIV2_794 397
+#define MU_DIV2_793 396
+#define MU_DIV2_792 396
+#define MU_DIV2_791 395
+#define MU_DIV2_790 395
+#define MU_DIV2_789 394
+#define MU_DIV2_788 394
+#define MU_DIV2_787 393
+#define MU_DIV2_786 393
+#define MU_DIV2_785 392
+#define MU_DIV2_784 392
+#define MU_DIV2_783 391
+#define MU_DIV2_782 391
+#define MU_DIV2_781 390
+#define MU_DIV2_780 390
+#define MU_DIV2_779 389
+#define MU_DIV2_778 389
+#define MU_DIV2_777 388
+#define MU_DIV2_776 388
+#define MU_DIV2_775 387
+#define MU_DIV2_774 387
+#define MU_DIV2_773 386
+#define MU_DIV2_772 386
+#define MU_DIV2_771 385
+#define MU_DIV2_770 385
+#define MU_DIV2_769 384
+#define MU_DIV2_768 384
+#define MU_DIV2_767 383
+#define MU_DIV2_766 383
+#define MU_DIV2_765 382
+#define MU_DIV2_764 382
+#define MU_DIV2_763 381
+#define MU_DIV2_762 381
+#define MU_DIV2_761 380
+#define MU_DIV2_760 380
+#define MU_DIV2_759 379
+#define MU_DIV2_758 379
+#define MU_DIV2_757 378
+#define MU_DIV2_756 378
+#define MU_DIV2_755 377
+#define MU_DIV2_754 377
+#define MU_DIV2_753 376
+#define MU_DIV2_752 376
+#define MU_DIV2_751 375
+#define MU_DIV2_750 375
+#define MU_DIV2_749 374
+#define MU_DIV2_748 374
+#define MU_DIV2_747 373
+#define MU_DIV2_746 373
+#define MU_DIV2_745 372
+#define MU_DIV2_744 372
+#define MU_DIV2_743 371
+#define MU_DIV2_742 371
+#define MU_DIV2_741 370
+#define MU_DIV2_740 370
+#define MU_DIV2_739 369
+#define MU_DIV2_738 369
+#define MU_DIV2_737 368
+#define MU_DIV2_736 368
+#define MU_DIV2_735 367
+#define MU_DIV2_734 367
+#define MU_DIV2_733 366
+#define MU_DIV2_732 366
+#define MU_DIV2_731 365
+#define MU_DIV2_730 365
+#define MU_DIV2_729 364
+#define MU_DIV2_728 364
+#define MU_DIV2_727 363
+#define MU_DIV2_726 363
+#define MU_DIV2_725 362
+#define MU_DIV2_724 362
+#define MU_DIV2_723 361
+#define MU_DIV2_722 361
+#define MU_DIV2_721 360
+#define MU_DIV2_720 360
+#define MU_DIV2_719 359
+#define MU_DIV2_718 359
+#define MU_DIV2_717 358
+#define MU_DIV2_716 358
+#define MU_DIV2_715 357
+#define MU_DIV2_714 357
+#define MU_DIV2_713 356
+#define MU_DIV2_712 356
+#define MU_DIV2_711 355
+#define MU_DIV2_710 355
+#define MU_DIV2_709 354
+#define MU_DIV2_708 354
+#define MU_DIV2_707 353
+#define MU_DIV2_706 353
+#define MU_DIV2_705 352
+#define MU_DIV2_704 352
+#define MU_DIV2_703 351
+#define MU_DIV2_702 351
+#define MU_DIV2_701 350
+#define MU_DIV2_700 350
+#define MU_DIV2_699 349
+#define MU_DIV2_698 349
+#define MU_DIV2_697 348
+#define MU_DIV2_696 348
+#define MU_DIV2_695 347
+#define MU_DIV2_694 347
+#define MU_DIV2_693 346
+#define MU_DIV2_692 346
+#define MU_DIV2_691 345
+#define MU_DIV2_690 345
+#define MU_DIV2_689 344
+#define MU_DIV2_688 344
+#define MU_DIV2_687 343
+#define MU_DIV2_686 343
+#define MU_DIV2_685 342
+#define MU_DIV2_684 342
+#define MU_DIV2_683 341
+#define MU_DIV2_682 341
+#define MU_DIV2_681 340
+#define MU_DIV2_680 340
+#define MU_DIV2_679 339
+#define MU_DIV2_678 339
+#define MU_DIV2_677 338
+#define MU_DIV2_676 338
+#define MU_DIV2_675 337
+#define MU_DIV2_674 337
+#define MU_DIV2_673 336
+#define MU_DIV2_672 336
+#define MU_DIV2_671 335
+#define MU_DIV2_670 335
+#define MU_DIV2_669 334
+#define MU_DIV2_668 334
+#define MU_DIV2_667 333
+#define MU_DIV2_666 333
+#define MU_DIV2_665 332
+#define MU_DIV2_664 332
+#define MU_DIV2_663 331
+#define MU_DIV2_662 331
+#define MU_DIV2_661 330
+#define MU_DIV2_660 330
+#define MU_DIV2_659 329
+#define MU_DIV2_658 329
+#define MU_DIV2_657 328
+#define MU_DIV2_656 328
+#define MU_DIV2_655 327
+#define MU_DIV2_654 327
+#define MU_DIV2_653 326
+#define MU_DIV2_652 326
+#define MU_DIV2_651 325
+#define MU_DIV2_650 325
+#define MU_DIV2_649 324
+#define MU_DIV2_648 324
+#define MU_DIV2_647 323
+#define MU_DIV2_646 323
+#define MU_DIV2_645 322
+#define MU_DIV2_644 322
+#define MU_DIV2_643 321
+#define MU_DIV2_642 321
+#define MU_DIV2_641 320
+#define MU_DIV2_640 320
+#define MU_DIV2_639 319
+#define MU_DIV2_638 319
+#define MU_DIV2_637 318
+#define MU_DIV2_636 318
+#define MU_DIV2_635 317
+#define MU_DIV2_634 317
+#define MU_DIV2_633 316
+#define MU_DIV2_632 316
+#define MU_DIV2_631 315
+#define MU_DIV2_630 315
+#define MU_DIV2_629 314
+#define MU_DIV2_628 314
+#define MU_DIV2_627 313
+#define MU_DIV2_626 313
+#define MU_DIV2_625 312
+#define MU_DIV2_624 312
+#define MU_DIV2_623 311
+#define MU_DIV2_622 311
+#define MU_DIV2_621 310
+#define MU_DIV2_620 310
+#define MU_DIV2_619 309
+#define MU_DIV2_618 309
+#define MU_DIV2_617 308
+#define MU_DIV2_616 308
+#define MU_DIV2_615 307
+#define MU_DIV2_614 307
+#define MU_DIV2_613 306
+#define MU_DIV2_612 306
+#define MU_DIV2_611 305
+#define MU_DIV2_610 305
+#define MU_DIV2_609 304
+#define MU_DIV2_608 304
+#define MU_DIV2_607 303
+#define MU_DIV2_606 303
+#define MU_DIV2_605 302
+#define MU_DIV2_604 302
+#define MU_DIV2_603 301
+#define MU_DIV2_602 301
+#define MU_DIV2_601 300
+#define MU_DIV2_600 300
+#define MU_DIV2_599 299
+#define MU_DIV2_598 299
+#define MU_DIV2_597 298
+#define MU_DIV2_596 298
+#define MU_DIV2_595 297
+#define MU_DIV2_594 297
+#define MU_DIV2_593 296
+#define MU_DIV2_592 296
+#define MU_DIV2_591 295
+#define MU_DIV2_590 295
+#define MU_DIV2_589 294
+#define MU_DIV2_588 294
+#define MU_DIV2_587 293
+#define MU_DIV2_586 293
+#define MU_DIV2_585 292
+#define MU_DIV2_584 292
+#define MU_DIV2_583 291
+#define MU_DIV2_582 291
+#define MU_DIV2_581 290
+#define MU_DIV2_580 290
+#define MU_DIV2_579 289
+#define MU_DIV2_578 289
+#define MU_DIV2_577 288
+#define MU_DIV2_576 288
+#define MU_DIV2_575 287
+#define MU_DIV2_574 287
+#define MU_DIV2_573 286
+#define MU_DIV2_572 286
+#define MU_DIV2_571 285
+#define MU_DIV2_570 285
+#define MU_DIV2_569 284
+#define MU_DIV2_568 284
+#define MU_DIV2_567 283
+#define MU_DIV2_566 283
+#define MU_DIV2_565 282
+#define MU_DIV2_564 282
+#define MU_DIV2_563 281
+#define MU_DIV2_562 281
+#define MU_DIV2_561 280
+#define MU_DIV2_560 280
+#define MU_DIV2_559 279
+#define MU_DIV2_558 279
+#define MU_DIV2_557 278
+#define MU_DIV2_556 278
+#define MU_DIV2_555 277
+#define MU_DIV2_554 277
+#define MU_DIV2_553 276
+#define MU_DIV2_552 276
+#define MU_DIV2_551 275
+#define MU_DIV2_550 275
+#define MU_DIV2_549 274
+#define MU_DIV2_548 274
+#define MU_DIV2_547 273
+#define MU_DIV2_546 273
+#define MU_DIV2_545 272
+#define MU_DIV2_544 272
+#define MU_DIV2_543 271
+#define MU_DIV2_542 271
+#define MU_DIV2_541 270
+#define MU_DIV2_540 270
+#define MU_DIV2_539 269
+#define MU_DIV2_538 269
+#define MU_DIV2_537 268
+#define MU_DIV2_536 268
+#define MU_DIV2_535 267
+#define MU_DIV2_534 267
+#define MU_DIV2_533 266
+#define MU_DIV2_532 266
+#define MU_DIV2_531 265
+#define MU_DIV2_530 265
+#define MU_DIV2_529 264
+#define MU_DIV2_528 264
+#define MU_DIV2_527 263
+#define MU_DIV2_526 263
+#define MU_DIV2_525 262
+#define MU_DIV2_524 262
+#define MU_DIV2_523 261
+#define MU_DIV2_522 261
+#define MU_DIV2_521 260
+#define MU_DIV2_520 260
+#define MU_DIV2_519 259
+#define MU_DIV2_518 259
+#define MU_DIV2_517 258
+#define MU_DIV2_516 258
+#define MU_DIV2_515 257
+#define MU_DIV2_514 257
+#define MU_DIV2_513 256
+#define MU_DIV2_512 256
+#define MU_DIV2_511 255
+#define MU_DIV2_510 255
+#define MU_DIV2_509 254
+#define MU_DIV2_508 254
+#define MU_DIV2_507 253
+#define MU_DIV2_506 253
+#define MU_DIV2_505 252
+#define MU_DIV2_504 252
+#define MU_DIV2_503 251
+#define MU_DIV2_502 251
+#define MU_DIV2_501 250
+#define MU_DIV2_500 250
+#define MU_DIV2_499 249
+#define MU_DIV2_498 249
+#define MU_DIV2_497 248
+#define MU_DIV2_496 248
+#define MU_DIV2_495 247
+#define MU_DIV2_494 247
+#define MU_DIV2_493 246
+#define MU_DIV2_492 246
+#define MU_DIV2_491 245
+#define MU_DIV2_490 245
+#define MU_DIV2_489 244
+#define MU_DIV2_488 244
+#define MU_DIV2_487 243
+#define MU_DIV2_486 243
+#define MU_DIV2_485 242
+#define MU_DIV2_484 242
+#define MU_DIV2_483 241
+#define MU_DIV2_482 241
+#define MU_DIV2_481 240
+#define MU_DIV2_480 240
+#define MU_DIV2_479 239
+#define MU_DIV2_478 239
+#define MU_DIV2_477 238
+#define MU_DIV2_476 238
+#define MU_DIV2_475 237
+#define MU_DIV2_474 237
+#define MU_DIV2_473 236
+#define MU_DIV2_472 236
+#define MU_DIV2_471 235
+#define MU_DIV2_470 235
+#define MU_DIV2_469 234
+#define MU_DIV2_468 234
+#define MU_DIV2_467 233
+#define MU_DIV2_466 233
+#define MU_DIV2_465 232
+#define MU_DIV2_464 232
+#define MU_DIV2_463 231
+#define MU_DIV2_462 231
+#define MU_DIV2_461 230
+#define MU_DIV2_460 230
+#define MU_DIV2_459 229
+#define MU_DIV2_458 229
+#define MU_DIV2_457 228
+#define MU_DIV2_456 228
+#define MU_DIV2_455 227
+#define MU_DIV2_454 227
+#define MU_DIV2_453 226
+#define MU_DIV2_452 226
+#define MU_DIV2_451 225
+#define MU_DIV2_450 225
+#define MU_DIV2_449 224
+#define MU_DIV2_448 224
+#define MU_DIV2_447 223
+#define MU_DIV2_446 223
+#define MU_DIV2_445 222
+#define MU_DIV2_444 222
+#define MU_DIV2_443 221
+#define MU_DIV2_442 221
+#define MU_DIV2_441 220
+#define MU_DIV2_440 220
+#define MU_DIV2_439 219
+#define MU_DIV2_438 219
+#define MU_DIV2_437 218
+#define MU_DIV2_436 218
+#define MU_DIV2_435 217
+#define MU_DIV2_434 217
+#define MU_DIV2_433 216
+#define MU_DIV2_432 216
+#define MU_DIV2_431 215
+#define MU_DIV2_430 215
+#define MU_DIV2_429 214
+#define MU_DIV2_428 214
+#define MU_DIV2_427 213
+#define MU_DIV2_426 213
+#define MU_DIV2_425 212
+#define MU_DIV2_424 212
+#define MU_DIV2_423 211
+#define MU_DIV2_422 211
+#define MU_DIV2_421 210
+#define MU_DIV2_420 210
+#define MU_DIV2_419 209
+#define MU_DIV2_418 209
+#define MU_DIV2_417 208
+#define MU_DIV2_416 208
+#define MU_DIV2_415 207
+#define MU_DIV2_414 207
+#define MU_DIV2_413 206
+#define MU_DIV2_412 206
+#define MU_DIV2_411 205
+#define MU_DIV2_410 205
+#define MU_DIV2_409 204
+#define MU_DIV2_408 204
+#define MU_DIV2_407 203
+#define MU_DIV2_406 203
+#define MU_DIV2_405 202
+#define MU_DIV2_404 202
+#define MU_DIV2_403 201
+#define MU_DIV2_402 201
+#define MU_DIV2_401 200
+#define MU_DIV2_400 200
+#define MU_DIV2_399 199
+#define MU_DIV2_398 199
+#define MU_DIV2_397 198
+#define MU_DIV2_396 198
+#define MU_DIV2_395 197
+#define MU_DIV2_394 197
+#define MU_DIV2_393 196
+#define MU_DIV2_392 196
+#define MU_DIV2_391 195
+#define MU_DIV2_390 195
+#define MU_DIV2_389 194
+#define MU_DIV2_388 194
+#define MU_DIV2_387 193
+#define MU_DIV2_386 193
+#define MU_DIV2_385 192
+#define MU_DIV2_384 192
+#define MU_DIV2_383 191
+#define MU_DIV2_382 191
+#define MU_DIV2_381 190
+#define MU_DIV2_380 190
+#define MU_DIV2_379 189
+#define MU_DIV2_378 189
+#define MU_DIV2_377 188
+#define MU_DIV2_376 188
+#define MU_DIV2_375 187
+#define MU_DIV2_374 187
+#define MU_DIV2_373 186
+#define MU_DIV2_372 186
+#define MU_DIV2_371 185
+#define MU_DIV2_370 185
+#define MU_DIV2_369 184
+#define MU_DIV2_368 184
+#define MU_DIV2_367 183
+#define MU_DIV2_366 183
+#define MU_DIV2_365 182
+#define MU_DIV2_364 182
+#define MU_DIV2_363 181
+#define MU_DIV2_362 181
+#define MU_DIV2_361 180
+#define MU_DIV2_360 180
+#define MU_DIV2_359 179
+#define MU_DIV2_358 179
+#define MU_DIV2_357 178
+#define MU_DIV2_356 178
+#define MU_DIV2_355 177
+#define MU_DIV2_354 177
+#define MU_DIV2_353 176
+#define MU_DIV2_352 176
+#define MU_DIV2_351 175
+#define MU_DIV2_350 175
+#define MU_DIV2_349 174
+#define MU_DIV2_348 174
+#define MU_DIV2_347 173
+#define MU_DIV2_346 173
+#define MU_DIV2_345 172
+#define MU_DIV2_344 172
+#define MU_DIV2_343 171
+#define MU_DIV2_342 171
+#define MU_DIV2_341 170
+#define MU_DIV2_340 170
+#define MU_DIV2_339 169
+#define MU_DIV2_338 169
+#define MU_DIV2_337 168
+#define MU_DIV2_336 168
+#define MU_DIV2_335 167
+#define MU_DIV2_334 167
+#define MU_DIV2_333 166
+#define MU_DIV2_332 166
+#define MU_DIV2_331 165
+#define MU_DIV2_330 165
+#define MU_DIV2_329 164
+#define MU_DIV2_328 164
+#define MU_DIV2_327 163
+#define MU_DIV2_326 163
+#define MU_DIV2_325 162
+#define MU_DIV2_324 162
+#define MU_DIV2_323 161
+#define MU_DIV2_322 161
+#define MU_DIV2_321 160
+#define MU_DIV2_320 160
+#define MU_DIV2_319 159
+#define MU_DIV2_318 159
+#define MU_DIV2_317 158
+#define MU_DIV2_316 158
+#define MU_DIV2_315 157
+#define MU_DIV2_314 157
+#define MU_DIV2_313 156
+#define MU_DIV2_312 156
+#define MU_DIV2_311 155
+#define MU_DIV2_310 155
+#define MU_DIV2_309 154
+#define MU_DIV2_308 154
+#define MU_DIV2_307 153
+#define MU_DIV2_306 153
+#define MU_DIV2_305 152
+#define MU_DIV2_304 152
+#define MU_DIV2_303 151
+#define MU_DIV2_302 151
+#define MU_DIV2_301 150
+#define MU_DIV2_300 150
+#define MU_DIV2_299 149
+#define MU_DIV2_298 149
+#define MU_DIV2_297 148
+#define MU_DIV2_296 148
+#define MU_DIV2_295 147
+#define MU_DIV2_294 147
+#define MU_DIV2_293 146
+#define MU_DIV2_292 146
+#define MU_DIV2_291 145
+#define MU_DIV2_290 145
+#define MU_DIV2_289 144
+#define MU_DIV2_288 144
+#define MU_DIV2_287 143
+#define MU_DIV2_286 143
+#define MU_DIV2_285 142
+#define MU_DIV2_284 142
+#define MU_DIV2_283 141
+#define MU_DIV2_282 141
+#define MU_DIV2_281 140
+#define MU_DIV2_280 140
+#define MU_DIV2_279 139
+#define MU_DIV2_278 139
+#define MU_DIV2_277 138
+#define MU_DIV2_276 138
+#define MU_DIV2_275 137
+#define MU_DIV2_274 137
+#define MU_DIV2_273 136
+#define MU_DIV2_272 136
+#define MU_DIV2_271 135
+#define MU_DIV2_270 135
+#define MU_DIV2_269 134
+#define MU_DIV2_268 134
+#define MU_DIV2_267 133
+#define MU_DIV2_266 133
+#define MU_DIV2_265 132
+#define MU_DIV2_264 132
+#define MU_DIV2_263 131
+#define MU_DIV2_262 131
+#define MU_DIV2_261 130
+#define MU_DIV2_260 130
+#define MU_DIV2_259 129
+#define MU_DIV2_258 129
+#define MU_DIV2_257 128
+#define MU_DIV2_256 128
+#define MU_DIV2_255 127
+#define MU_DIV2_254 127
+#define MU_DIV2_253 126
+#define MU_DIV2_252 126
+#define MU_DIV2_251 125
+#define MU_DIV2_250 125
+#define MU_DIV2_249 124
+#define MU_DIV2_248 124
+#define MU_DIV2_247 123
+#define MU_DIV2_246 123
+#define MU_DIV2_245 122
+#define MU_DIV2_244 122
+#define MU_DIV2_243 121
+#define MU_DIV2_242 121
+#define MU_DIV2_241 120
+#define MU_DIV2_240 120
+#define MU_DIV2_239 119
+#define MU_DIV2_238 119
+#define MU_DIV2_237 118
+#define MU_DIV2_236 118
+#define MU_DIV2_235 117
+#define MU_DIV2_234 117
+#define MU_DIV2_233 116
+#define MU_DIV2_232 116
+#define MU_DIV2_231 115
+#define MU_DIV2_230 115
+#define MU_DIV2_229 114
+#define MU_DIV2_228 114
+#define MU_DIV2_227 113
+#define MU_DIV2_226 113
+#define MU_DIV2_225 112
+#define MU_DIV2_224 112
+#define MU_DIV2_223 111
+#define MU_DIV2_222 111
+#define MU_DIV2_221 110
+#define MU_DIV2_220 110
+#define MU_DIV2_219 109
+#define MU_DIV2_218 109
+#define MU_DIV2_217 108
+#define MU_DIV2_216 108
+#define MU_DIV2_215 107
+#define MU_DIV2_214 107
+#define MU_DIV2_213 106
+#define MU_DIV2_212 106
+#define MU_DIV2_211 105
+#define MU_DIV2_210 105
+#define MU_DIV2_209 104
+#define MU_DIV2_208 104
+#define MU_DIV2_207 103
+#define MU_DIV2_206 103
+#define MU_DIV2_205 102
+#define MU_DIV2_204 102
+#define MU_DIV2_203 101
+#define MU_DIV2_202 101
+#define MU_DIV2_201 100
+#define MU_DIV2_200 100
+#define MU_DIV2_199 99
+#define MU_DIV2_198 99
+#define MU_DIV2_197 98
+#define MU_DIV2_196 98
+#define MU_DIV2_195 97
+#define MU_DIV2_194 97
+#define MU_DIV2_193 96
+#define MU_DIV2_192 96
+#define MU_DIV2_191 95
+#define MU_DIV2_190 95
+#define MU_DIV2_189 94
+#define MU_DIV2_188 94
+#define MU_DIV2_187 93
+#define MU_DIV2_186 93
+#define MU_DIV2_185 92
+#define MU_DIV2_184 92
+#define MU_DIV2_183 91
+#define MU_DIV2_182 91
+#define MU_DIV2_181 90
+#define MU_DIV2_180 90
+#define MU_DIV2_179 89
+#define MU_DIV2_178 89
+#define MU_DIV2_177 88
+#define MU_DIV2_176 88
+#define MU_DIV2_175 87
+#define MU_DIV2_174 87
+#define MU_DIV2_173 86
+#define MU_DIV2_172 86
+#define MU_DIV2_171 85
+#define MU_DIV2_170 85
+#define MU_DIV2_169 84
+#define MU_DIV2_168 84
+#define MU_DIV2_167 83
+#define MU_DIV2_166 83
+#define MU_DIV2_165 82
+#define MU_DIV2_164 82
+#define MU_DIV2_163 81
+#define MU_DIV2_162 81
+#define MU_DIV2_161 80
+#define MU_DIV2_160 80
+#define MU_DIV2_159 79
+#define MU_DIV2_158 79
+#define MU_DIV2_157 78
+#define MU_DIV2_156 78
+#define MU_DIV2_155 77
+#define MU_DIV2_154 77
+#define MU_DIV2_153 76
+#define MU_DIV2_152 76
+#define MU_DIV2_151 75
+#define MU_DIV2_150 75
+#define MU_DIV2_149 74
+#define MU_DIV2_148 74
+#define MU_DIV2_147 73
+#define MU_DIV2_146 73
+#define MU_DIV2_145 72
+#define MU_DIV2_144 72
+#define MU_DIV2_143 71
+#define MU_DIV2_142 71
+#define MU_DIV2_141 70
+#define MU_DIV2_140 70
+#define MU_DIV2_139 69
+#define MU_DIV2_138 69
+#define MU_DIV2_137 68
+#define MU_DIV2_136 68
+#define MU_DIV2_135 67
+#define MU_DIV2_134 67
+#define MU_DIV2_133 66
+#define MU_DIV2_132 66
+#define MU_DIV2_131 65
+#define MU_DIV2_130 65
+#define MU_DIV2_129 64
+#define MU_DIV2_128 64
+#define MU_DIV2_127 63
+#define MU_DIV2_126 63
+#define MU_DIV2_125 62
+#define MU_DIV2_124 62
+#define MU_DIV2_123 61
+#define MU_DIV2_122 61
+#define MU_DIV2_121 60
+#define MU_DIV2_120 60
+#define MU_DIV2_119 59
+#define MU_DIV2_118 59
+#define MU_DIV2_117 58
+#define MU_DIV2_116 58
+#define MU_DIV2_115 57
+#define MU_DIV2_114 57
+#define MU_DIV2_113 56
+#define MU_DIV2_112 56
+#define MU_DIV2_111 55
+#define MU_DIV2_110 55
+#define MU_DIV2_109 54
+#define MU_DIV2_108 54
+#define MU_DIV2_107 53
+#define MU_DIV2_106 53
+#define MU_DIV2_105 52
+#define MU_DIV2_104 52
+#define MU_DIV2_103 51
+#define MU_DIV2_102 51
+#define MU_DIV2_101 50
+#define MU_DIV2_100 50
+#define MU_DIV2_99 49
+#define MU_DIV2_98 49
+#define MU_DIV2_97 48
+#define MU_DIV2_96 48
+#define MU_DIV2_95 47
+#define MU_DIV2_94 47
+#define MU_DIV2_93 46
+#define MU_DIV2_92 46
+#define MU_DIV2_91 45
+#define MU_DIV2_90 45
+#define MU_DIV2_89 44
+#define MU_DIV2_88 44
+#define MU_DIV2_87 43
+#define MU_DIV2_86 43
+#define MU_DIV2_85 42
+#define MU_DIV2_84 42
+#define MU_DIV2_83 41
+#define MU_DIV2_82 41
+#define MU_DIV2_81 40
+#define MU_DIV2_80 40
+#define MU_DIV2_79 39
+#define MU_DIV2_78 39
+#define MU_DIV2_77 38
+#define MU_DIV2_76 38
+#define MU_DIV2_75 37
+#define MU_DIV2_74 37
+#define MU_DIV2_73 36
+#define MU_DIV2_72 36
+#define MU_DIV2_71 35
+#define MU_DIV2_70 35
+#define MU_DIV2_69 34
+#define MU_DIV2_68 34
+#define MU_DIV2_67 33
+#define MU_DIV2_66 33
+#define MU_DIV2_65 32
+#define MU_DIV2_64 32
+#define MU_DIV2_63 31
+#define MU_DIV2_62 31
+#define MU_DIV2_61 30
+#define MU_DIV2_60 30
+#define MU_DIV2_59 29
+#define MU_DIV2_58 29
+#define MU_DIV2_57 28
+#define MU_DIV2_56 28
+#define MU_DIV2_55 27
+#define MU_DIV2_54 27
+#define MU_DIV2_53 26
+#define MU_DIV2_52 26
+#define MU_DIV2_51 25
+#define MU_DIV2_50 25
+#define MU_DIV2_49 24
+#define MU_DIV2_48 24
+#define MU_DIV2_47 23
+#define MU_DIV2_46 23
+#define MU_DIV2_45 22
+#define MU_DIV2_44 22
+#define MU_DIV2_43 21
+#define MU_DIV2_42 21
+#define MU_DIV2_41 20
+#define MU_DIV2_40 20
+#define MU_DIV2_39 19
+#define MU_DIV2_38 19
+#define MU_DIV2_37 18
+#define MU_DIV2_36 18
+#define MU_DIV2_35 17
+#define MU_DIV2_34 17
+#define MU_DIV2_33 16
+#define MU_DIV2_32 16
+#define MU_DIV2_31 15
+#define MU_DIV2_30 15
+#define MU_DIV2_29 14
+#define MU_DIV2_28 14
+#define MU_DIV2_27 13
+#define MU_DIV2_26 13
+#define MU_DIV2_25 12
+#define MU_DIV2_24 12
+#define MU_DIV2_23 11
+#define MU_DIV2_22 11
+#define MU_DIV2_21 10
+#define MU_DIV2_20 10
+#define MU_DIV2_19 9
+#define MU_DIV2_18 9
+#define MU_DIV2_17 8
+#define MU_DIV2_16 8
+#define MU_DIV2_15 7
+#define MU_DIV2_14 7
+#define MU_DIV2_13 6
+#define MU_DIV2_12 6
+#define MU_DIV2_11 5
+#define MU_DIV2_10 5
+#define MU_DIV2_9 4
+#define MU_DIV2_8 4
+#define MU_DIV2_7 3
+#define MU_DIV2_6 3
+#define MU_DIV2_5 2
+#define MU_DIV2_4 2
+#define MU_DIV2_3 1
+#define MU_DIV2_2 1
+#define MU_DIV2_1 0
+#define MU_DIV2_0 0
+
+#define MU_THE_NTH_ARG(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124,  ... ) P124
+
+#define MU_TRIGGER_PARENTHESIS(...) ,
+
+#define MU_LPAREN (
+
+#ifdef _MSC_VER
+#define MU_COUNT_1_OR_MORE_ARG(...) MU_THE_NTH_ARG MU_LPAREN __VA_ARGS__, \
+123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
+#define MU_MORE_THAN_1_ARG(...) MU_THE_NTH_ARG MU_LPAREN __VA_ARGS__, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0)
+#else
+#define MU_COUNT_1_OR_MORE_ARG(...) MU_THE_NTH_ARG (__VA_ARGS__, \
+123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
+#define MU_MORE_THAN_1_ARG(...) MU_THE_NTH_ARG(__VA_ARGS__, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 0)
+#endif
+
+#define MU_COUNT_ARG(...) MU_C2(MU_COUNT_ARG_, MU_ISEMPTY(__VA_ARGS__))(__VA_ARGS__)
+#define MU_COUNT_ARG_1(...) 0
+#define MU_COUNT_ARG_0(...) MU_C1(MU_COUNT_1_OR_MORE_ARG(__VA_ARGS__))
+
+#define MU_ISEMPTY(...) MU_C5(MU_DISPTACH_EMPTY_, MU_MORE_THAN_1_ARG(MU_TRIGGER_PARENTHESIS __VA_ARGS__ ()), MU_MORE_THAN_1_ARG(__VA_ARGS__), MU_MORE_THAN_1_ARG(__VA_ARGS__ ()), MU_MORE_THAN_1_ARG(MU_TRIGGER_PARENTHESIS __VA_ARGS__))
+#define MU_DISPTACH_EMPTY_1000 1
+#define MU_DISPTACH_EMPTY_0000 0
+#define MU_DISPTACH_EMPTY_1100 0
+#define MU_DISPTACH_EMPTY_1111 0
+#define MU_DISPTACH_EMPTY_1001 0
+#define MU_DISPTACH_EMPTY_1010 0
+
+
+#define MU_C2_(x,y) x##y
+
+#define MU_C2(x,y) MU_C2_(x,y)
+
+#define MU_C3(x,y,z) MU_C2(x, MU_C2(y,z))
+
+#define MU_C4(x,y,z, u) MU_C2(MU_C2(x,y), MU_C2(z,u))
+
+#define MU_C5(x,y,z,u, v) MU_C2(MU_C4(x,y, z, u), v)
+
+#define MU_C1_(x) x
+
+#define MU_C1(x) MU_C1_(x)
+
+#define MU_C2STRING(x,y) x y
+
+#define MU_C3STRING(x,y,z) x y z
+
+#define MU_C4STRING(x,y,z,u) x y z u
+
+#define MU_C5STRING(x,y,z,u,v) x y z u v
+
+
+#define MU_FOR_EACH_1_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(P1) \
+MU_FOR_EACH_1_123(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+#define MU_FOR_EACH_1_123(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) \
+X(P1) \
+MU_FOR_EACH_1_122(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123)
+
+#define MU_FOR_EACH_1_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(P1) \
+MU_FOR_EACH_1_121(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+#define MU_FOR_EACH_1_121(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) \
+X(P1) \
+MU_FOR_EACH_1_120(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121)
+
+#define MU_FOR_EACH_1_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(P1) \
+MU_FOR_EACH_1_119(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+#define MU_FOR_EACH_1_119(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) \
+X(P1) \
+MU_FOR_EACH_1_118(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119)
+
+#define MU_FOR_EACH_1_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(P1) \
+MU_FOR_EACH_1_117(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+#define MU_FOR_EACH_1_117(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) \
+X(P1) \
+MU_FOR_EACH_1_116(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117)
+
+#define MU_FOR_EACH_1_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(P1) \
+MU_FOR_EACH_1_115(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+#define MU_FOR_EACH_1_115(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) \
+X(P1) \
+MU_FOR_EACH_1_114(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115)
+
+#define MU_FOR_EACH_1_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(P1) \
+MU_FOR_EACH_1_113(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+#define MU_FOR_EACH_1_113(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) \
+X(P1) \
+MU_FOR_EACH_1_112(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113)
+
+#define MU_FOR_EACH_1_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(P1) \
+MU_FOR_EACH_1_111(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+#define MU_FOR_EACH_1_111(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) \
+X(P1) \
+MU_FOR_EACH_1_110(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111)
+
+#define MU_FOR_EACH_1_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(P1) \
+MU_FOR_EACH_1_109(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+#define MU_FOR_EACH_1_109(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) \
+X(P1) \
+MU_FOR_EACH_1_108(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109)
+
+#define MU_FOR_EACH_1_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(P1) \
+MU_FOR_EACH_1_107(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+#define MU_FOR_EACH_1_107(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) \
+X(P1) \
+MU_FOR_EACH_1_106(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107)
+
+#define MU_FOR_EACH_1_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(P1) \
+MU_FOR_EACH_1_105(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+#define MU_FOR_EACH_1_105(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) \
+X(P1) \
+MU_FOR_EACH_1_104(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105)
+
+#define MU_FOR_EACH_1_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(P1) \
+MU_FOR_EACH_1_103(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+#define MU_FOR_EACH_1_103(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) \
+X(P1) \
+MU_FOR_EACH_1_102(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103)
+
+#define MU_FOR_EACH_1_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(P1) \
+MU_FOR_EACH_1_101(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+#define MU_FOR_EACH_1_101(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) \
+X(P1) \
+MU_FOR_EACH_1_100(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101)
+
+#define MU_FOR_EACH_1_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(P1) \
+MU_FOR_EACH_1_99(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+#define MU_FOR_EACH_1_99(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) \
+X(P1) \
+MU_FOR_EACH_1_98(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99)
+
+#define MU_FOR_EACH_1_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(P1) \
+MU_FOR_EACH_1_97(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+#define MU_FOR_EACH_1_97(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) \
+X(P1) \
+MU_FOR_EACH_1_96(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97)
+
+#define MU_FOR_EACH_1_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(P1) \
+MU_FOR_EACH_1_95(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+#define MU_FOR_EACH_1_95(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) \
+X(P1) \
+MU_FOR_EACH_1_94(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95)
+
+#define MU_FOR_EACH_1_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(P1) \
+MU_FOR_EACH_1_93(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+#define MU_FOR_EACH_1_93(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) \
+X(P1) \
+MU_FOR_EACH_1_92(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93)
+
+#define MU_FOR_EACH_1_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(P1) \
+MU_FOR_EACH_1_91(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+#define MU_FOR_EACH_1_91(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) \
+X(P1) \
+MU_FOR_EACH_1_90(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91)
+
+#define MU_FOR_EACH_1_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(P1) \
+MU_FOR_EACH_1_89(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+#define MU_FOR_EACH_1_89(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) \
+X(P1) \
+MU_FOR_EACH_1_88(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89)
+
+#define MU_FOR_EACH_1_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(P1) \
+MU_FOR_EACH_1_87(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+#define MU_FOR_EACH_1_87(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) \
+X(P1) \
+MU_FOR_EACH_1_86(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87)
+
+#define MU_FOR_EACH_1_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(P1) \
+MU_FOR_EACH_1_85(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+#define MU_FOR_EACH_1_85(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) \
+X(P1) \
+MU_FOR_EACH_1_84(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85)
+
+#define MU_FOR_EACH_1_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(P1) \
+MU_FOR_EACH_1_83(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+#define MU_FOR_EACH_1_83(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) \
+X(P1) \
+MU_FOR_EACH_1_82(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83)
+
+#define MU_FOR_EACH_1_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(P1) \
+MU_FOR_EACH_1_81(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+#define MU_FOR_EACH_1_81(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) \
+X(P1) \
+MU_FOR_EACH_1_80(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81)
+
+#define MU_FOR_EACH_1_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(P1) \
+MU_FOR_EACH_1_79(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+#define MU_FOR_EACH_1_79(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) \
+X(P1) \
+MU_FOR_EACH_1_78(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79)
+
+#define MU_FOR_EACH_1_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(P1) \
+MU_FOR_EACH_1_77(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+#define MU_FOR_EACH_1_77(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) \
+X(P1) \
+MU_FOR_EACH_1_76(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77)
+
+#define MU_FOR_EACH_1_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(P1) \
+MU_FOR_EACH_1_75(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+#define MU_FOR_EACH_1_75(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) \
+X(P1) \
+MU_FOR_EACH_1_74(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75)
+
+#define MU_FOR_EACH_1_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(P1) \
+MU_FOR_EACH_1_73(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+#define MU_FOR_EACH_1_73(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) \
+X(P1) \
+MU_FOR_EACH_1_72(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73)
+
+#define MU_FOR_EACH_1_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(P1) \
+MU_FOR_EACH_1_71(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+#define MU_FOR_EACH_1_71(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) \
+X(P1) \
+MU_FOR_EACH_1_70(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71)
+
+#define MU_FOR_EACH_1_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(P1) \
+MU_FOR_EACH_1_69(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+#define MU_FOR_EACH_1_69(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) \
+X(P1) \
+MU_FOR_EACH_1_68(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69)
+
+#define MU_FOR_EACH_1_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(P1) \
+MU_FOR_EACH_1_67(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+#define MU_FOR_EACH_1_67(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) \
+X(P1) \
+MU_FOR_EACH_1_66(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67)
+
+#define MU_FOR_EACH_1_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(P1) \
+MU_FOR_EACH_1_65(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+#define MU_FOR_EACH_1_65(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) \
+X(P1) \
+MU_FOR_EACH_1_64(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65)
+
+#define MU_FOR_EACH_1_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(P1) \
+MU_FOR_EACH_1_63(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+#define MU_FOR_EACH_1_63(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) \
+X(P1) \
+MU_FOR_EACH_1_62(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63)
+
+#define MU_FOR_EACH_1_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(P1) \
+MU_FOR_EACH_1_61(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+#define MU_FOR_EACH_1_61(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) \
+X(P1) \
+MU_FOR_EACH_1_60(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61)
+
+#define MU_FOR_EACH_1_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(P1) \
+MU_FOR_EACH_1_59(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+#define MU_FOR_EACH_1_59(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) \
+X(P1) \
+MU_FOR_EACH_1_58(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59)
+
+#define MU_FOR_EACH_1_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(P1) \
+MU_FOR_EACH_1_57(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+#define MU_FOR_EACH_1_57(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) \
+X(P1) \
+MU_FOR_EACH_1_56(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57)
+
+#define MU_FOR_EACH_1_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(P1) \
+MU_FOR_EACH_1_55(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+#define MU_FOR_EACH_1_55(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) \
+X(P1) \
+MU_FOR_EACH_1_54(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55)
+
+#define MU_FOR_EACH_1_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(P1) \
+MU_FOR_EACH_1_53(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+#define MU_FOR_EACH_1_53(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) \
+X(P1) \
+MU_FOR_EACH_1_52(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53)
+
+#define MU_FOR_EACH_1_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(P1) \
+MU_FOR_EACH_1_51(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+#define MU_FOR_EACH_1_51(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) \
+X(P1) \
+MU_FOR_EACH_1_50(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51)
+
+#define MU_FOR_EACH_1_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(P1) \
+MU_FOR_EACH_1_49(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+#define MU_FOR_EACH_1_49(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) \
+X(P1) \
+MU_FOR_EACH_1_48(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49)
+
+#define MU_FOR_EACH_1_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(P1) \
+MU_FOR_EACH_1_47(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+#define MU_FOR_EACH_1_47(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) \
+X(P1) \
+MU_FOR_EACH_1_46(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47)
+
+#define MU_FOR_EACH_1_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(P1) \
+MU_FOR_EACH_1_45(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+#define MU_FOR_EACH_1_45(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) \
+X(P1) \
+MU_FOR_EACH_1_44(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45)
+
+#define MU_FOR_EACH_1_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(P1) \
+MU_FOR_EACH_1_43(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+#define MU_FOR_EACH_1_43(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) \
+X(P1) \
+MU_FOR_EACH_1_42(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43)
+
+#define MU_FOR_EACH_1_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(P1) \
+MU_FOR_EACH_1_41(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+#define MU_FOR_EACH_1_41(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) \
+X(P1) \
+MU_FOR_EACH_1_40(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41)
+
+#define MU_FOR_EACH_1_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(P1) \
+MU_FOR_EACH_1_39(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+#define MU_FOR_EACH_1_39(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) \
+X(P1) \
+MU_FOR_EACH_1_38(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39)
+
+#define MU_FOR_EACH_1_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(P1) \
+MU_FOR_EACH_1_37(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+#define MU_FOR_EACH_1_37(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) \
+X(P1) \
+MU_FOR_EACH_1_36(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37)
+
+#define MU_FOR_EACH_1_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(P1) \
+MU_FOR_EACH_1_35(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+#define MU_FOR_EACH_1_35(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) \
+X(P1) \
+MU_FOR_EACH_1_34(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35)
+
+#define MU_FOR_EACH_1_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(P1) \
+MU_FOR_EACH_1_33(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+#define MU_FOR_EACH_1_33(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) \
+X(P1) \
+MU_FOR_EACH_1_32(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33)
+
+#define MU_FOR_EACH_1_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(P1) \
+MU_FOR_EACH_1_31(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+#define MU_FOR_EACH_1_31(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) \
+X(P1) \
+MU_FOR_EACH_1_30(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31)
+
+#define MU_FOR_EACH_1_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(P1) \
+MU_FOR_EACH_1_29(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+#define MU_FOR_EACH_1_29(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) \
+X(P1) \
+MU_FOR_EACH_1_28(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29)
+
+#define MU_FOR_EACH_1_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(P1) \
+MU_FOR_EACH_1_27(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+#define MU_FOR_EACH_1_27(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) \
+X(P1) \
+MU_FOR_EACH_1_26(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27)
+
+#define MU_FOR_EACH_1_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(P1) \
+MU_FOR_EACH_1_25(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+#define MU_FOR_EACH_1_25(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) \
+X(P1) \
+MU_FOR_EACH_1_24(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25)
+
+#define MU_FOR_EACH_1_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(P1) \
+MU_FOR_EACH_1_23(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+#define MU_FOR_EACH_1_23(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) \
+X(P1) \
+MU_FOR_EACH_1_22(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23)
+
+#define MU_FOR_EACH_1_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(P1) \
+MU_FOR_EACH_1_21(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+#define MU_FOR_EACH_1_21(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) \
+X(P1) \
+MU_FOR_EACH_1_20(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21)
+
+#define MU_FOR_EACH_1_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(P1) \
+MU_FOR_EACH_1_19(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+#define MU_FOR_EACH_1_19(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) \
+X(P1) \
+MU_FOR_EACH_1_18(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19)
+
+#define MU_FOR_EACH_1_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(P1) \
+MU_FOR_EACH_1_17(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+#define MU_FOR_EACH_1_17(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) \
+X(P1) \
+MU_FOR_EACH_1_16(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17)
+
+#define MU_FOR_EACH_1_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(P1) \
+MU_FOR_EACH_1_15(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+#define MU_FOR_EACH_1_15(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) \
+X(P1) \
+MU_FOR_EACH_1_14(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15)
+
+#define MU_FOR_EACH_1_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(P1) \
+MU_FOR_EACH_1_13(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+#define MU_FOR_EACH_1_13(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \
+X(P1) \
+MU_FOR_EACH_1_12(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13)
+
+#define MU_FOR_EACH_1_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(P1) \
+MU_FOR_EACH_1_11(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+#define MU_FOR_EACH_1_11(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \
+X(P1) \
+MU_FOR_EACH_1_10(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11)
+
+#define MU_FOR_EACH_1_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(P1) \
+MU_FOR_EACH_1_9(X, P2, P3, P4, P5, P6, P7, P8, P9, P10)
+
+#define MU_FOR_EACH_1_9(X, P1, P2, P3, P4, P5, P6, P7, P8, P9) \
+X(P1) \
+MU_FOR_EACH_1_8(X, P2, P3, P4, P5, P6, P7, P8, P9)
+
+#define MU_FOR_EACH_1_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(P1) \
+MU_FOR_EACH_1_7(X, P2, P3, P4, P5, P6, P7, P8)
+
+#define MU_FOR_EACH_1_7(X, P1, P2, P3, P4, P5, P6, P7) \
+X(P1) \
+MU_FOR_EACH_1_6(X, P2, P3, P4, P5, P6, P7)
+
+#define MU_FOR_EACH_1_6(X, P1, P2, P3, P4, P5, P6) \
+X(P1) \
+MU_FOR_EACH_1_5(X, P2, P3, P4, P5, P6)
+
+#define MU_FOR_EACH_1_5(X, P1, P2, P3, P4, P5) \
+X(P1) \
+MU_FOR_EACH_1_4(X, P2, P3, P4, P5)
+
+#define MU_FOR_EACH_1_4(X, P1, P2, P3, P4) \
+X(P1) \
+MU_FOR_EACH_1_3(X, P2, P3, P4)
+
+#define MU_FOR_EACH_1_3(X, P1, P2, P3) \
+X(P1) \
+MU_FOR_EACH_1_2(X, P2, P3)
+
+#define MU_FOR_EACH_1_2(X, P1, P2) \
+X(P1) \
+MU_FOR_EACH_1_1(X, P2)
+
+#define MU_FOR_EACH_1_1(X, P1) \
+X(P1)
+
+#ifdef _MSC_VER
+#define MU_FOR_EACH_1(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_1_,MU_C1(MU_COUNT_ARG(__VA_ARGS__))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+#else
+#define MU_FOR_EACH_1(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_1_,MU_C1(MU_COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__)
+#endif
+
+#define MU_FOR_EACH_1_KEEP_1_124(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_123(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+
+#define MU_FOR_EACH_1_KEEP_1_123(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_122(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123)
+
+
+#define MU_FOR_EACH_1_KEEP_1_122(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_121(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+
+#define MU_FOR_EACH_1_KEEP_1_121(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_120(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121)
+
+
+#define MU_FOR_EACH_1_KEEP_1_120(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_119(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+
+#define MU_FOR_EACH_1_KEEP_1_119(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_118(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119)
+
+
+#define MU_FOR_EACH_1_KEEP_1_118(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_117(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+
+#define MU_FOR_EACH_1_KEEP_1_117(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_116(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117)
+
+
+#define MU_FOR_EACH_1_KEEP_1_116(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_115(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+
+#define MU_FOR_EACH_1_KEEP_1_115(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_114(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115)
+
+
+#define MU_FOR_EACH_1_KEEP_1_114(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_113(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+
+#define MU_FOR_EACH_1_KEEP_1_113(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_112(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113)
+
+
+#define MU_FOR_EACH_1_KEEP_1_112(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_111(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+
+#define MU_FOR_EACH_1_KEEP_1_111(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_110(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111)
+
+
+#define MU_FOR_EACH_1_KEEP_1_110(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_109(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+
+#define MU_FOR_EACH_1_KEEP_1_109(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_108(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109)
+
+
+#define MU_FOR_EACH_1_KEEP_1_108(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_107(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+
+#define MU_FOR_EACH_1_KEEP_1_107(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_106(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107)
+
+
+#define MU_FOR_EACH_1_KEEP_1_106(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_105(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+
+#define MU_FOR_EACH_1_KEEP_1_105(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_104(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105)
+
+
+#define MU_FOR_EACH_1_KEEP_1_104(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_103(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+
+#define MU_FOR_EACH_1_KEEP_1_103(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_102(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103)
+
+
+#define MU_FOR_EACH_1_KEEP_1_102(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_101(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+
+#define MU_FOR_EACH_1_KEEP_1_101(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_100(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101)
+
+
+#define MU_FOR_EACH_1_KEEP_1_100(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_99(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+
+#define MU_FOR_EACH_1_KEEP_1_99(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_98(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99)
+
+
+#define MU_FOR_EACH_1_KEEP_1_98(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_97(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+
+#define MU_FOR_EACH_1_KEEP_1_97(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_96(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97)
+
+
+#define MU_FOR_EACH_1_KEEP_1_96(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_95(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+
+#define MU_FOR_EACH_1_KEEP_1_95(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_94(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95)
+
+
+#define MU_FOR_EACH_1_KEEP_1_94(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_93(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+
+#define MU_FOR_EACH_1_KEEP_1_93(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_92(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93)
+
+
+#define MU_FOR_EACH_1_KEEP_1_92(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_91(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+
+#define MU_FOR_EACH_1_KEEP_1_91(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_90(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91)
+
+
+#define MU_FOR_EACH_1_KEEP_1_90(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_89(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+
+#define MU_FOR_EACH_1_KEEP_1_89(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_88(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89)
+
+
+#define MU_FOR_EACH_1_KEEP_1_88(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_87(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+
+#define MU_FOR_EACH_1_KEEP_1_87(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_86(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87)
+
+
+#define MU_FOR_EACH_1_KEEP_1_86(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_85(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+
+#define MU_FOR_EACH_1_KEEP_1_85(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_84(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85)
+
+
+#define MU_FOR_EACH_1_KEEP_1_84(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_83(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+
+#define MU_FOR_EACH_1_KEEP_1_83(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_82(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83)
+
+
+#define MU_FOR_EACH_1_KEEP_1_82(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_81(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+
+#define MU_FOR_EACH_1_KEEP_1_81(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_80(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81)
+
+
+#define MU_FOR_EACH_1_KEEP_1_80(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_79(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+
+#define MU_FOR_EACH_1_KEEP_1_79(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_78(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79)
+
+
+#define MU_FOR_EACH_1_KEEP_1_78(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_77(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+
+#define MU_FOR_EACH_1_KEEP_1_77(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_76(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77)
+
+
+#define MU_FOR_EACH_1_KEEP_1_76(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_75(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+
+#define MU_FOR_EACH_1_KEEP_1_75(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_74(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75)
+
+
+#define MU_FOR_EACH_1_KEEP_1_74(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_73(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+
+#define MU_FOR_EACH_1_KEEP_1_73(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_72(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73)
+
+
+#define MU_FOR_EACH_1_KEEP_1_72(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_71(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+
+#define MU_FOR_EACH_1_KEEP_1_71(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_70(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71)
+
+
+#define MU_FOR_EACH_1_KEEP_1_70(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_69(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+
+#define MU_FOR_EACH_1_KEEP_1_69(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_68(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69)
+
+
+#define MU_FOR_EACH_1_KEEP_1_68(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_67(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+
+#define MU_FOR_EACH_1_KEEP_1_67(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_66(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67)
+
+
+#define MU_FOR_EACH_1_KEEP_1_66(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_65(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+
+#define MU_FOR_EACH_1_KEEP_1_65(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_64(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65)
+
+
+#define MU_FOR_EACH_1_KEEP_1_64(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_63(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+
+#define MU_FOR_EACH_1_KEEP_1_63(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_62(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63)
+
+
+#define MU_FOR_EACH_1_KEEP_1_62(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_61(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+
+#define MU_FOR_EACH_1_KEEP_1_61(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_60(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61)
+
+
+#define MU_FOR_EACH_1_KEEP_1_60(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_59(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+
+#define MU_FOR_EACH_1_KEEP_1_59(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_58(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59)
+
+
+#define MU_FOR_EACH_1_KEEP_1_58(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_57(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+
+#define MU_FOR_EACH_1_KEEP_1_57(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_56(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57)
+
+
+#define MU_FOR_EACH_1_KEEP_1_56(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_55(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+
+#define MU_FOR_EACH_1_KEEP_1_55(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_54(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55)
+
+
+#define MU_FOR_EACH_1_KEEP_1_54(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_53(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+
+#define MU_FOR_EACH_1_KEEP_1_53(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_52(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53)
+
+
+#define MU_FOR_EACH_1_KEEP_1_52(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_51(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+
+#define MU_FOR_EACH_1_KEEP_1_51(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_50(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51)
+
+
+#define MU_FOR_EACH_1_KEEP_1_50(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_49(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+
+#define MU_FOR_EACH_1_KEEP_1_49(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_48(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49)
+
+
+#define MU_FOR_EACH_1_KEEP_1_48(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_47(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+
+#define MU_FOR_EACH_1_KEEP_1_47(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_46(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47)
+
+
+#define MU_FOR_EACH_1_KEEP_1_46(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_45(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+
+#define MU_FOR_EACH_1_KEEP_1_45(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_44(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45)
+
+
+#define MU_FOR_EACH_1_KEEP_1_44(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_43(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+
+#define MU_FOR_EACH_1_KEEP_1_43(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_42(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43)
+
+
+#define MU_FOR_EACH_1_KEEP_1_42(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_41(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+
+#define MU_FOR_EACH_1_KEEP_1_41(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_40(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41)
+
+
+#define MU_FOR_EACH_1_KEEP_1_40(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_39(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+
+#define MU_FOR_EACH_1_KEEP_1_39(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_38(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39)
+
+
+#define MU_FOR_EACH_1_KEEP_1_38(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_37(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+
+#define MU_FOR_EACH_1_KEEP_1_37(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_36(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37)
+
+
+#define MU_FOR_EACH_1_KEEP_1_36(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_35(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+
+#define MU_FOR_EACH_1_KEEP_1_35(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_34(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35)
+
+
+#define MU_FOR_EACH_1_KEEP_1_34(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_33(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+
+#define MU_FOR_EACH_1_KEEP_1_33(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_32(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33)
+
+
+#define MU_FOR_EACH_1_KEEP_1_32(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_31(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+
+#define MU_FOR_EACH_1_KEEP_1_31(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_30(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31)
+
+
+#define MU_FOR_EACH_1_KEEP_1_30(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_29(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+
+#define MU_FOR_EACH_1_KEEP_1_29(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_28(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29)
+
+
+#define MU_FOR_EACH_1_KEEP_1_28(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_27(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+
+#define MU_FOR_EACH_1_KEEP_1_27(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_26(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27)
+
+
+#define MU_FOR_EACH_1_KEEP_1_26(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_25(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+
+#define MU_FOR_EACH_1_KEEP_1_25(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_24(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25)
+
+
+#define MU_FOR_EACH_1_KEEP_1_24(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_23(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+
+#define MU_FOR_EACH_1_KEEP_1_23(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_22(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23)
+
+
+#define MU_FOR_EACH_1_KEEP_1_22(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_21(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+
+#define MU_FOR_EACH_1_KEEP_1_21(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_20(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21)
+
+
+#define MU_FOR_EACH_1_KEEP_1_20(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_19(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+
+#define MU_FOR_EACH_1_KEEP_1_19(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_18(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19)
+
+
+#define MU_FOR_EACH_1_KEEP_1_18(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_17(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+
+#define MU_FOR_EACH_1_KEEP_1_17(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_16(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17)
+
+
+#define MU_FOR_EACH_1_KEEP_1_16(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_15(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+
+#define MU_FOR_EACH_1_KEEP_1_15(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_14(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15)
+
+
+#define MU_FOR_EACH_1_KEEP_1_14(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_13(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+
+#define MU_FOR_EACH_1_KEEP_1_13(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_12(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13)
+
+
+#define MU_FOR_EACH_1_KEEP_1_12(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_11(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+
+#define MU_FOR_EACH_1_KEEP_1_11(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_10(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11)
+
+
+#define MU_FOR_EACH_1_KEEP_1_10(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_9(X, keep, P2, P3, P4, P5, P6, P7, P8, P9, P10)
+
+
+#define MU_FOR_EACH_1_KEEP_1_9(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_8(X, keep, P2, P3, P4, P5, P6, P7, P8, P9)
+
+
+#define MU_FOR_EACH_1_KEEP_1_8(X, keep, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_7(X, keep, P2, P3, P4, P5, P6, P7, P8)
+
+
+#define MU_FOR_EACH_1_KEEP_1_7(X, keep, P1, P2, P3, P4, P5, P6, P7) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_6(X, keep, P2, P3, P4, P5, P6, P7)
+
+
+#define MU_FOR_EACH_1_KEEP_1_6(X, keep, P1, P2, P3, P4, P5, P6) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_5(X, keep, P2, P3, P4, P5, P6)
+
+
+#define MU_FOR_EACH_1_KEEP_1_5(X, keep, P1, P2, P3, P4, P5) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_4(X, keep, P2, P3, P4, P5)
+
+
+#define MU_FOR_EACH_1_KEEP_1_4(X, keep, P1, P2, P3, P4) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_3(X, keep, P2, P3, P4)
+
+
+#define MU_FOR_EACH_1_KEEP_1_3(X, keep, P1, P2, P3) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_2(X, keep, P2, P3)
+
+
+#define MU_FOR_EACH_1_KEEP_1_2(X, keep, P1, P2) \
+X(keep, P1) \
+MU_FOR_EACH_1_KEEP_1_1(X, keep, P2)
+
+
+
+#define MU_FOR_EACH_1_KEEP_1_1(X, keep, P1) \
+X(keep, P1)
+
+#ifdef _MSC_VER
+#define MU_FOR_EACH_1_KEEP_1(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_1_KEEP_1_, MU_C2(MU_DEC,MU_C1(MU_COUNT_ARG(__VA_ARGS__)))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+#else
+#define MU_FOR_EACH_1_KEEP_1(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_1_KEEP_1_, MU_C2(MU_DEC,MU_C1(MU_COUNT_ARG(__VA_ARGS__)))) ( MACRO_TO_INVOKE, __VA_ARGS__)
+#endif
+
+#define MU_FOR_EACH_2_KEEP_1_124(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_122(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+
+#define MU_FOR_EACH_2_KEEP_1_122(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_120(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+
+#define MU_FOR_EACH_2_KEEP_1_120(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_118(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+
+#define MU_FOR_EACH_2_KEEP_1_118(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_116(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+
+#define MU_FOR_EACH_2_KEEP_1_116(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_114(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+
+#define MU_FOR_EACH_2_KEEP_1_114(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_112(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+
+#define MU_FOR_EACH_2_KEEP_1_112(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_110(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+
+#define MU_FOR_EACH_2_KEEP_1_110(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_108(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+
+#define MU_FOR_EACH_2_KEEP_1_108(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_106(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+
+#define MU_FOR_EACH_2_KEEP_1_106(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_104(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+
+#define MU_FOR_EACH_2_KEEP_1_104(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_102(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+
+#define MU_FOR_EACH_2_KEEP_1_102(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_100(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+
+#define MU_FOR_EACH_2_KEEP_1_100(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_98(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+
+#define MU_FOR_EACH_2_KEEP_1_98(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_96(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+
+#define MU_FOR_EACH_2_KEEP_1_96(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_94(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+
+#define MU_FOR_EACH_2_KEEP_1_94(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_92(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+
+#define MU_FOR_EACH_2_KEEP_1_92(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_90(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+
+#define MU_FOR_EACH_2_KEEP_1_90(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_88(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+
+#define MU_FOR_EACH_2_KEEP_1_88(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_86(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+
+#define MU_FOR_EACH_2_KEEP_1_86(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_84(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+
+#define MU_FOR_EACH_2_KEEP_1_84(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_82(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+
+#define MU_FOR_EACH_2_KEEP_1_82(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_80(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+
+#define MU_FOR_EACH_2_KEEP_1_80(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_78(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+
+#define MU_FOR_EACH_2_KEEP_1_78(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_76(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+
+#define MU_FOR_EACH_2_KEEP_1_76(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_74(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+
+#define MU_FOR_EACH_2_KEEP_1_74(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_72(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+
+#define MU_FOR_EACH_2_KEEP_1_72(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_70(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+
+#define MU_FOR_EACH_2_KEEP_1_70(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_68(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+
+#define MU_FOR_EACH_2_KEEP_1_68(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_66(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+
+#define MU_FOR_EACH_2_KEEP_1_66(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_64(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+
+#define MU_FOR_EACH_2_KEEP_1_64(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_62(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+
+#define MU_FOR_EACH_2_KEEP_1_62(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_60(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+
+#define MU_FOR_EACH_2_KEEP_1_60(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_58(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+
+#define MU_FOR_EACH_2_KEEP_1_58(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_56(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+
+#define MU_FOR_EACH_2_KEEP_1_56(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_54(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+
+#define MU_FOR_EACH_2_KEEP_1_54(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_52(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+
+#define MU_FOR_EACH_2_KEEP_1_52(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_50(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+
+#define MU_FOR_EACH_2_KEEP_1_50(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_48(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+
+#define MU_FOR_EACH_2_KEEP_1_48(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_46(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+
+#define MU_FOR_EACH_2_KEEP_1_46(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_44(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+
+#define MU_FOR_EACH_2_KEEP_1_44(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_42(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+
+#define MU_FOR_EACH_2_KEEP_1_42(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_40(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+
+#define MU_FOR_EACH_2_KEEP_1_40(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_38(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+
+#define MU_FOR_EACH_2_KEEP_1_38(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_36(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+
+#define MU_FOR_EACH_2_KEEP_1_36(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_34(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+
+#define MU_FOR_EACH_2_KEEP_1_34(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_32(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+
+#define MU_FOR_EACH_2_KEEP_1_32(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_30(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+
+#define MU_FOR_EACH_2_KEEP_1_30(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_28(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+
+#define MU_FOR_EACH_2_KEEP_1_28(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_26(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+
+#define MU_FOR_EACH_2_KEEP_1_26(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_24(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+
+#define MU_FOR_EACH_2_KEEP_1_24(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_22(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+
+#define MU_FOR_EACH_2_KEEP_1_22(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_20(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+
+#define MU_FOR_EACH_2_KEEP_1_20(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_18(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+
+#define MU_FOR_EACH_2_KEEP_1_18(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_16(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+
+#define MU_FOR_EACH_2_KEEP_1_16(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_14(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+
+#define MU_FOR_EACH_2_KEEP_1_14(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_12(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+
+#define MU_FOR_EACH_2_KEEP_1_12(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_10(X, keep, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+
+#define MU_FOR_EACH_2_KEEP_1_10(X, keep, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_8(X, keep, P3, P4, P5, P6, P7, P8, P9, P10)
+
+
+#define MU_FOR_EACH_2_KEEP_1_8(X, keep, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_6(X, keep, P3, P4, P5, P6, P7, P8)
+
+
+#define MU_FOR_EACH_2_KEEP_1_6(X, keep, P1, P2, P3, P4, P5, P6) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_4(X, keep, P3, P4, P5, P6)
+
+
+#define MU_FOR_EACH_2_KEEP_1_4(X, keep, P1, P2, P3, P4) \
+X(keep, P1, P2) \
+MU_FOR_EACH_2_KEEP_1_2(X, keep, P3, P4)
+
+
+
+#define MU_FOR_EACH_2_KEEP_1_1(...)
+
+#define MU_FOR_EACH_2_KEEP_1_0(...)
+
+#define MU_FOR_EACH_2_KEEP_1_2(X, keep, P1, P2) \
+    X(keep, P1, P2) \
+
+#ifdef _MSC_VER
+#define MU_FOR_EACH_2_KEEP_1(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_KEEP_1_, MU_C2(MU_DEC,MU_C1(MU_COUNT_ARG(__VA_ARGS__)))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+#else
+#define MU_FOR_EACH_2_KEEP_1(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_KEEP_1_, MU_C2(MU_DEC,MU_C1(MU_COUNT_ARG(__VA_ARGS__)))) ( MACRO_TO_INVOKE, __VA_ARGS__)
+#endif
+
+
+#define MU_FOR_EACH_2_KEEP_2_124(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_122(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+
+#define MU_FOR_EACH_2_KEEP_2_122(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_120(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+
+#define MU_FOR_EACH_2_KEEP_2_120(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_118(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+
+#define MU_FOR_EACH_2_KEEP_2_118(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_116(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+
+#define MU_FOR_EACH_2_KEEP_2_116(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_114(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+
+#define MU_FOR_EACH_2_KEEP_2_114(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_112(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+
+#define MU_FOR_EACH_2_KEEP_2_112(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_110(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+
+#define MU_FOR_EACH_2_KEEP_2_110(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_108(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+
+#define MU_FOR_EACH_2_KEEP_2_108(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_106(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+
+#define MU_FOR_EACH_2_KEEP_2_106(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_104(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+
+#define MU_FOR_EACH_2_KEEP_2_104(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_102(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+
+#define MU_FOR_EACH_2_KEEP_2_102(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_100(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+
+#define MU_FOR_EACH_2_KEEP_2_100(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_98(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+
+#define MU_FOR_EACH_2_KEEP_2_98(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_96(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+
+#define MU_FOR_EACH_2_KEEP_2_96(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_94(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+
+#define MU_FOR_EACH_2_KEEP_2_94(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_92(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+
+#define MU_FOR_EACH_2_KEEP_2_92(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_90(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+
+#define MU_FOR_EACH_2_KEEP_2_90(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_88(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+
+#define MU_FOR_EACH_2_KEEP_2_88(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_86(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+
+#define MU_FOR_EACH_2_KEEP_2_86(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_84(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+
+#define MU_FOR_EACH_2_KEEP_2_84(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_82(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+
+#define MU_FOR_EACH_2_KEEP_2_82(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_80(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+
+#define MU_FOR_EACH_2_KEEP_2_80(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_78(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+
+#define MU_FOR_EACH_2_KEEP_2_78(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_76(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+
+#define MU_FOR_EACH_2_KEEP_2_76(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_74(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+
+#define MU_FOR_EACH_2_KEEP_2_74(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_72(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+
+#define MU_FOR_EACH_2_KEEP_2_72(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_70(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+
+#define MU_FOR_EACH_2_KEEP_2_70(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_68(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+
+#define MU_FOR_EACH_2_KEEP_2_68(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_66(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+
+#define MU_FOR_EACH_2_KEEP_2_66(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_64(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+
+#define MU_FOR_EACH_2_KEEP_2_64(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_62(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+
+#define MU_FOR_EACH_2_KEEP_2_62(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_60(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+
+#define MU_FOR_EACH_2_KEEP_2_60(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_58(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+
+#define MU_FOR_EACH_2_KEEP_2_58(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_56(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+
+#define MU_FOR_EACH_2_KEEP_2_56(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_54(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+
+#define MU_FOR_EACH_2_KEEP_2_54(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_52(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+
+#define MU_FOR_EACH_2_KEEP_2_52(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_50(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+
+#define MU_FOR_EACH_2_KEEP_2_50(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_48(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+
+#define MU_FOR_EACH_2_KEEP_2_48(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_46(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+
+#define MU_FOR_EACH_2_KEEP_2_46(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_44(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+
+#define MU_FOR_EACH_2_KEEP_2_44(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_42(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+
+#define MU_FOR_EACH_2_KEEP_2_42(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_40(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+
+#define MU_FOR_EACH_2_KEEP_2_40(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_38(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+
+#define MU_FOR_EACH_2_KEEP_2_38(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_36(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+
+#define MU_FOR_EACH_2_KEEP_2_36(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_34(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+
+#define MU_FOR_EACH_2_KEEP_2_34(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_32(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+
+#define MU_FOR_EACH_2_KEEP_2_32(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_30(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+
+#define MU_FOR_EACH_2_KEEP_2_30(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_28(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+
+#define MU_FOR_EACH_2_KEEP_2_28(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_26(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+
+#define MU_FOR_EACH_2_KEEP_2_26(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_24(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+
+#define MU_FOR_EACH_2_KEEP_2_24(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_22(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+
+#define MU_FOR_EACH_2_KEEP_2_22(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_20(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+
+#define MU_FOR_EACH_2_KEEP_2_20(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_18(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+
+#define MU_FOR_EACH_2_KEEP_2_18(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_16(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+
+#define MU_FOR_EACH_2_KEEP_2_16(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_14(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+
+#define MU_FOR_EACH_2_KEEP_2_14(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_12(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+
+#define MU_FOR_EACH_2_KEEP_2_12(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_10(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+
+#define MU_FOR_EACH_2_KEEP_2_10(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_8(X, keep1, keep2, P3, P4, P5, P6, P7, P8, P9, P10)
+
+
+#define MU_FOR_EACH_2_KEEP_2_8(X, keep1, keep2, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_6(X, keep1, keep2, P3, P4, P5, P6, P7, P8)
+
+
+#define MU_FOR_EACH_2_KEEP_2_6(X, keep1, keep2, P1, P2, P3, P4, P5, P6) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_4(X, keep1, keep2, P3, P4, P5, P6)
+
+
+#define MU_FOR_EACH_2_KEEP_2_4(X, keep1, keep2, P1, P2, P3, P4) \
+X(keep1, keep2, P1, P2) \
+MU_FOR_EACH_2_KEEP_2_2(X, keep1, keep2, P3, P4)
+
+
+
+#define MU_FOR_EACH_2_KEEP_2_1(...)
+
+#define MU_FOR_EACH_2_KEEP_2_0(...)
+
+#define MU_FOR_EACH_2_KEEP_2_2(X, keep1, keep2, P1, P2) \
+    X(keep1, keep2, P1, P2) \
+
+#ifdef _MSC_VER
+#define MU_FOR_EACH_2_KEEP_2(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_KEEP_2_, MU_C2(MU_DEC,MU_C2(MU_DEC,MU_C1(MU_COUNT_ARG(__VA_ARGS__))))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+#else
+#define MU_FOR_EACH_2_KEEP_2(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_KEEP_2_, MU_C2(MU_DEC, MU_C2(MU_DEC,MU_C1(MU_COUNT_ARG(__VA_ARGS__))))) ( MACRO_TO_INVOKE, __VA_ARGS__)
+#endif
+
+
+#define MU_FOR_EACH_2_0(...)
+
+#define MU_FOR_EACH_2_2(X, P1, P2) \
+X(P1, P2)
+
+#define MU_FOR_EACH_2_4(X, P1, P2, P3, P4) \
+X(P1, P2) \
+MU_FOR_EACH_2_2(X, P3, P4)
+
+#define MU_FOR_EACH_2_6(X, P1, P2, P3, P4, P5, P6) \
+X(P1, P2) \
+MU_FOR_EACH_2_4(X, P3, P4, P5, P6)
+
+#define MU_FOR_EACH_2_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(P1, P2) \
+MU_FOR_EACH_2_6(X, P3, P4, P5, P6, P7, P8)
+
+#define MU_FOR_EACH_2_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(P1, P2) \
+MU_FOR_EACH_2_8(X, P3, P4, P5, P6, P7, P8, P9, P10)
+
+#define MU_FOR_EACH_2_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(P1, P2) \
+MU_FOR_EACH_2_10(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+#define MU_FOR_EACH_2_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(P1, P2) \
+MU_FOR_EACH_2_12(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+#define MU_FOR_EACH_2_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(P1, P2) \
+MU_FOR_EACH_2_14(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+#define MU_FOR_EACH_2_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(P1, P2) \
+MU_FOR_EACH_2_16(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+#define MU_FOR_EACH_2_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(P1, P2) \
+MU_FOR_EACH_2_18(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+#define MU_FOR_EACH_2_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(P1, P2) \
+MU_FOR_EACH_2_20(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+#define MU_FOR_EACH_2_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(P1, P2) \
+MU_FOR_EACH_2_22(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+#define MU_FOR_EACH_2_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(P1, P2) \
+MU_FOR_EACH_2_24(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+#define MU_FOR_EACH_2_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(P1, P2) \
+MU_FOR_EACH_2_26(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+#define MU_FOR_EACH_2_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(P1, P2) \
+MU_FOR_EACH_2_28(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+#define MU_FOR_EACH_2_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(P1, P2) \
+MU_FOR_EACH_2_30(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+#define MU_FOR_EACH_2_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(P1, P2) \
+MU_FOR_EACH_2_32(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+#define MU_FOR_EACH_2_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(P1, P2) \
+MU_FOR_EACH_2_34(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+#define MU_FOR_EACH_2_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(P1, P2) \
+MU_FOR_EACH_2_36(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+#define MU_FOR_EACH_2_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(P1, P2) \
+MU_FOR_EACH_2_38(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+#define MU_FOR_EACH_2_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(P1, P2) \
+MU_FOR_EACH_2_40(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+#define MU_FOR_EACH_2_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(P1, P2) \
+MU_FOR_EACH_2_42(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+#define MU_FOR_EACH_2_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(P1, P2) \
+MU_FOR_EACH_2_44(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+#define MU_FOR_EACH_2_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(P1, P2) \
+MU_FOR_EACH_2_46(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+#define MU_FOR_EACH_2_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(P1, P2) \
+MU_FOR_EACH_2_48(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+#define MU_FOR_EACH_2_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(P1, P2) \
+MU_FOR_EACH_2_50(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+#define MU_FOR_EACH_2_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(P1, P2) \
+MU_FOR_EACH_2_52(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+#define MU_FOR_EACH_2_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(P1, P2) \
+MU_FOR_EACH_2_54(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+#define MU_FOR_EACH_2_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(P1, P2) \
+MU_FOR_EACH_2_56(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+#define MU_FOR_EACH_2_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(P1, P2) \
+MU_FOR_EACH_2_58(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+#define MU_FOR_EACH_2_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(P1, P2) \
+MU_FOR_EACH_2_60(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+#define MU_FOR_EACH_2_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(P1, P2) \
+MU_FOR_EACH_2_62(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+#define MU_FOR_EACH_2_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(P1, P2) \
+MU_FOR_EACH_2_64(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+#define MU_FOR_EACH_2_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(P1, P2) \
+MU_FOR_EACH_2_66(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+#define MU_FOR_EACH_2_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(P1, P2) \
+MU_FOR_EACH_2_68(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+#define MU_FOR_EACH_2_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(P1, P2) \
+MU_FOR_EACH_2_70(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+#define MU_FOR_EACH_2_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(P1, P2) \
+MU_FOR_EACH_2_72(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+#define MU_FOR_EACH_2_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(P1, P2) \
+MU_FOR_EACH_2_74(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+#define MU_FOR_EACH_2_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(P1, P2) \
+MU_FOR_EACH_2_76(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+#define MU_FOR_EACH_2_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(P1, P2) \
+MU_FOR_EACH_2_78(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+#define MU_FOR_EACH_2_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(P1, P2) \
+MU_FOR_EACH_2_80(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+#define MU_FOR_EACH_2_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(P1, P2) \
+MU_FOR_EACH_2_82(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+#define MU_FOR_EACH_2_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(P1, P2) \
+MU_FOR_EACH_2_84(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+#define MU_FOR_EACH_2_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(P1, P2) \
+MU_FOR_EACH_2_86(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+#define MU_FOR_EACH_2_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(P1, P2) \
+MU_FOR_EACH_2_88(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+#define MU_FOR_EACH_2_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(P1, P2) \
+MU_FOR_EACH_2_90(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+#define MU_FOR_EACH_2_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(P1, P2) \
+MU_FOR_EACH_2_92(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+#define MU_FOR_EACH_2_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(P1, P2) \
+MU_FOR_EACH_2_94(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+#define MU_FOR_EACH_2_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(P1, P2) \
+MU_FOR_EACH_2_96(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+#define MU_FOR_EACH_2_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(P1, P2) \
+MU_FOR_EACH_2_98(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+#define MU_FOR_EACH_2_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(P1, P2) \
+MU_FOR_EACH_2_100(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+#define MU_FOR_EACH_2_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(P1, P2) \
+MU_FOR_EACH_2_102(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+#define MU_FOR_EACH_2_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(P1, P2) \
+MU_FOR_EACH_2_104(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+#define MU_FOR_EACH_2_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(P1, P2) \
+MU_FOR_EACH_2_106(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+#define MU_FOR_EACH_2_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(P1, P2) \
+MU_FOR_EACH_2_108(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+#define MU_FOR_EACH_2_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(P1, P2) \
+MU_FOR_EACH_2_110(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+#define MU_FOR_EACH_2_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(P1, P2) \
+MU_FOR_EACH_2_112(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+#define MU_FOR_EACH_2_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(P1, P2) \
+MU_FOR_EACH_2_114(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+#define MU_FOR_EACH_2_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(P1, P2) \
+MU_FOR_EACH_2_116(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+#define MU_FOR_EACH_2_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(P1, P2) \
+MU_FOR_EACH_2_118(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+#define MU_FOR_EACH_2_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(P1, P2) \
+MU_FOR_EACH_2_120(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+#define MU_FOR_EACH_2_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(P1, P2) \
+MU_FOR_EACH_2_122(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+
+#define MU_FOR_EACH_2_REVERSE_0(...)
+
+#define MU_FOR_EACH_2_REVERSE_2(X, P1, P2) \
+X(P1, P2)
+
+#define MU_FOR_EACH_2_REVERSE_4(X, P1, P2, P3, P4) \
+X(P3, P4) \
+MU_FOR_EACH_2_REVERSE_2(X, P1, P2)
+
+#define MU_FOR_EACH_2_REVERSE_6(X, P1, P2, P3, P4, P5, P6) \
+X(P5, P6) \
+MU_FOR_EACH_2_REVERSE_4(X, P1, P2, P3, P4)
+
+#define MU_FOR_EACH_2_REVERSE_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(P7, P8) \
+MU_FOR_EACH_2_REVERSE_6(X, P1, P2, P3, P4, P5, P6)
+
+#define MU_FOR_EACH_2_REVERSE_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(P9, P10) \
+MU_FOR_EACH_2_REVERSE_8(X, P1, P2, P3, P4, P5, P6, P7, P8)
+
+#define MU_FOR_EACH_2_REVERSE_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(P11, P12) \
+MU_FOR_EACH_2_REVERSE_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10)
+
+#define MU_FOR_EACH_2_REVERSE_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(P13, P14) \
+MU_FOR_EACH_2_REVERSE_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+#define MU_FOR_EACH_2_REVERSE_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(P15, P16) \
+MU_FOR_EACH_2_REVERSE_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+#define MU_FOR_EACH_2_REVERSE_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(P17, P18) \
+MU_FOR_EACH_2_REVERSE_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+#define MU_FOR_EACH_2_REVERSE_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(P19, P20) \
+MU_FOR_EACH_2_REVERSE_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+#define MU_FOR_EACH_2_REVERSE_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(P21, P22) \
+MU_FOR_EACH_2_REVERSE_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+#define MU_FOR_EACH_2_REVERSE_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(P23, P24) \
+MU_FOR_EACH_2_REVERSE_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+#define MU_FOR_EACH_2_REVERSE_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(P25, P26) \
+MU_FOR_EACH_2_REVERSE_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+#define MU_FOR_EACH_2_REVERSE_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(P27, P28) \
+MU_FOR_EACH_2_REVERSE_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+#define MU_FOR_EACH_2_REVERSE_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(P29, P30) \
+MU_FOR_EACH_2_REVERSE_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+#define MU_FOR_EACH_2_REVERSE_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(P31, P32) \
+MU_FOR_EACH_2_REVERSE_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+#define MU_FOR_EACH_2_REVERSE_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(P33, P34) \
+MU_FOR_EACH_2_REVERSE_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+#define MU_FOR_EACH_2_REVERSE_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(P35, P36) \
+MU_FOR_EACH_2_REVERSE_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+#define MU_FOR_EACH_2_REVERSE_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(P37, P38) \
+MU_FOR_EACH_2_REVERSE_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+#define MU_FOR_EACH_2_REVERSE_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(P39, P40) \
+MU_FOR_EACH_2_REVERSE_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+#define MU_FOR_EACH_2_REVERSE_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(P41, P42) \
+MU_FOR_EACH_2_REVERSE_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+#define MU_FOR_EACH_2_REVERSE_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(P43, P44) \
+MU_FOR_EACH_2_REVERSE_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+#define MU_FOR_EACH_2_REVERSE_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(P45, P46) \
+MU_FOR_EACH_2_REVERSE_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+#define MU_FOR_EACH_2_REVERSE_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(P47, P48) \
+MU_FOR_EACH_2_REVERSE_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+#define MU_FOR_EACH_2_REVERSE_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(P49, P50) \
+MU_FOR_EACH_2_REVERSE_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+#define MU_FOR_EACH_2_REVERSE_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(P51, P52) \
+MU_FOR_EACH_2_REVERSE_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+#define MU_FOR_EACH_2_REVERSE_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(P53, P54) \
+MU_FOR_EACH_2_REVERSE_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+#define MU_FOR_EACH_2_REVERSE_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(P55, P56) \
+MU_FOR_EACH_2_REVERSE_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+#define MU_FOR_EACH_2_REVERSE_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(P57, P58) \
+MU_FOR_EACH_2_REVERSE_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+#define MU_FOR_EACH_2_REVERSE_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(P59, P60) \
+MU_FOR_EACH_2_REVERSE_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+#define MU_FOR_EACH_2_REVERSE_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(P61, P62) \
+MU_FOR_EACH_2_REVERSE_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+#define MU_FOR_EACH_2_REVERSE_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(P63, P64) \
+MU_FOR_EACH_2_REVERSE_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+#define MU_FOR_EACH_2_REVERSE_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(P65, P66) \
+MU_FOR_EACH_2_REVERSE_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+#define MU_FOR_EACH_2_REVERSE_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(P67, P68) \
+MU_FOR_EACH_2_REVERSE_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+#define MU_FOR_EACH_2_REVERSE_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(P69, P70) \
+MU_FOR_EACH_2_REVERSE_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+#define MU_FOR_EACH_2_REVERSE_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(P71, P72) \
+MU_FOR_EACH_2_REVERSE_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+#define MU_FOR_EACH_2_REVERSE_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(P73, P74) \
+MU_FOR_EACH_2_REVERSE_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+#define MU_FOR_EACH_2_REVERSE_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(P75, P76) \
+MU_FOR_EACH_2_REVERSE_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+#define MU_FOR_EACH_2_REVERSE_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(P77, P78) \
+MU_FOR_EACH_2_REVERSE_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+#define MU_FOR_EACH_2_REVERSE_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(P79, P80) \
+MU_FOR_EACH_2_REVERSE_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+#define MU_FOR_EACH_2_REVERSE_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(P81, P82) \
+MU_FOR_EACH_2_REVERSE_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+#define MU_FOR_EACH_2_REVERSE_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(P83, P84) \
+MU_FOR_EACH_2_REVERSE_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+#define MU_FOR_EACH_2_REVERSE_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(P85, P86) \
+MU_FOR_EACH_2_REVERSE_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+#define MU_FOR_EACH_2_REVERSE_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(P87, P88) \
+MU_FOR_EACH_2_REVERSE_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+#define MU_FOR_EACH_2_REVERSE_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(P89, P90) \
+MU_FOR_EACH_2_REVERSE_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+#define MU_FOR_EACH_2_REVERSE_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(P91, P92) \
+MU_FOR_EACH_2_REVERSE_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+#define MU_FOR_EACH_2_REVERSE_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(P93, P94) \
+MU_FOR_EACH_2_REVERSE_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+#define MU_FOR_EACH_2_REVERSE_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(P95, P96) \
+MU_FOR_EACH_2_REVERSE_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+#define MU_FOR_EACH_2_REVERSE_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(P97, P98) \
+MU_FOR_EACH_2_REVERSE_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+#define MU_FOR_EACH_2_REVERSE_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(P99, P100) \
+MU_FOR_EACH_2_REVERSE_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+#define MU_FOR_EACH_2_REVERSE_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(P101, P102) \
+MU_FOR_EACH_2_REVERSE_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+#define MU_FOR_EACH_2_REVERSE_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(P103, P104) \
+MU_FOR_EACH_2_REVERSE_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+#define MU_FOR_EACH_2_REVERSE_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(P105, P106) \
+MU_FOR_EACH_2_REVERSE_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+#define MU_FOR_EACH_2_REVERSE_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(P107, P108) \
+MU_FOR_EACH_2_REVERSE_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+#define MU_FOR_EACH_2_REVERSE_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(P109, P110) \
+MU_FOR_EACH_2_REVERSE_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+#define MU_FOR_EACH_2_REVERSE_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(P111, P112) \
+MU_FOR_EACH_2_REVERSE_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+#define MU_FOR_EACH_2_REVERSE_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(P113, P114) \
+MU_FOR_EACH_2_REVERSE_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+#define MU_FOR_EACH_2_REVERSE_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(P115, P116) \
+MU_FOR_EACH_2_REVERSE_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+#define MU_FOR_EACH_2_REVERSE_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(P117, P118) \
+MU_FOR_EACH_2_REVERSE_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+#define MU_FOR_EACH_2_REVERSE_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(P119, P120) \
+MU_FOR_EACH_2_REVERSE_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+#define MU_FOR_EACH_2_REVERSE_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(P121, P122) \
+MU_FOR_EACH_2_REVERSE_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+#define MU_FOR_EACH_2_REVERSE_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(P123, P124) \
+MU_FOR_EACH_2_REVERSE_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+
+#define MU_FOR_EACH_1_COUNTED_0(...)
+
+#define MU_FOR_EACH_1_COUNTED_1(X, P1) \
+    X(1, P1)
+
+#define MU_FOR_EACH_1_COUNTED_2(X, P1, P2) \
+X(2, P1) \
+MU_FOR_EACH_1_COUNTED_1(X, P2)
+
+#define MU_FOR_EACH_1_COUNTED_3(X, P1, P2, P3) \
+X(3, P1) \
+MU_FOR_EACH_1_COUNTED_2(X, P2, P3)
+
+#define MU_FOR_EACH_1_COUNTED_4(X, P1, P2, P3, P4) \
+X(4, P1) \
+MU_FOR_EACH_1_COUNTED_3(X, P2, P3, P4)
+
+#define MU_FOR_EACH_1_COUNTED_5(X, P1, P2, P3, P4, P5) \
+X(5, P1) \
+MU_FOR_EACH_1_COUNTED_4(X, P2, P3, P4, P5)
+
+#define MU_FOR_EACH_1_COUNTED_6(X, P1, P2, P3, P4, P5, P6) \
+X(6, P1) \
+MU_FOR_EACH_1_COUNTED_5(X, P2, P3, P4, P5, P6)
+
+#define MU_FOR_EACH_1_COUNTED_7(X, P1, P2, P3, P4, P5, P6, P7) \
+X(7, P1) \
+MU_FOR_EACH_1_COUNTED_6(X, P2, P3, P4, P5, P6, P7)
+
+#define MU_FOR_EACH_1_COUNTED_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(8, P1) \
+MU_FOR_EACH_1_COUNTED_7(X, P2, P3, P4, P5, P6, P7, P8)
+
+#define MU_FOR_EACH_1_COUNTED_9(X, P1, P2, P3, P4, P5, P6, P7, P8, P9) \
+X(9, P1) \
+MU_FOR_EACH_1_COUNTED_8(X, P2, P3, P4, P5, P6, P7, P8, P9)
+
+#define MU_FOR_EACH_1_COUNTED_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(10, P1) \
+MU_FOR_EACH_1_COUNTED_9(X, P2, P3, P4, P5, P6, P7, P8, P9, P10)
+
+#define MU_FOR_EACH_1_COUNTED_11(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \
+X(11, P1) \
+MU_FOR_EACH_1_COUNTED_10(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11)
+
+#define MU_FOR_EACH_1_COUNTED_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(12, P1) \
+MU_FOR_EACH_1_COUNTED_11(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+#define MU_FOR_EACH_1_COUNTED_13(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \
+X(13, P1) \
+MU_FOR_EACH_1_COUNTED_12(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13)
+
+#define MU_FOR_EACH_1_COUNTED_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(14, P1) \
+MU_FOR_EACH_1_COUNTED_13(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+#define MU_FOR_EACH_1_COUNTED_15(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) \
+X(15, P1) \
+MU_FOR_EACH_1_COUNTED_14(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15)
+
+#define MU_FOR_EACH_1_COUNTED_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(16, P1) \
+MU_FOR_EACH_1_COUNTED_15(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+#define MU_FOR_EACH_1_COUNTED_17(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) \
+X(17, P1) \
+MU_FOR_EACH_1_COUNTED_16(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17)
+
+#define MU_FOR_EACH_1_COUNTED_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(18, P1) \
+MU_FOR_EACH_1_COUNTED_17(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+#define MU_FOR_EACH_1_COUNTED_19(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) \
+X(19, P1) \
+MU_FOR_EACH_1_COUNTED_18(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19)
+
+#define MU_FOR_EACH_1_COUNTED_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(20, P1) \
+MU_FOR_EACH_1_COUNTED_19(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+#define MU_FOR_EACH_1_COUNTED_21(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) \
+X(21, P1) \
+MU_FOR_EACH_1_COUNTED_20(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21)
+
+#define MU_FOR_EACH_1_COUNTED_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(22, P1) \
+MU_FOR_EACH_1_COUNTED_21(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+#define MU_FOR_EACH_1_COUNTED_23(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23) \
+X(23, P1) \
+MU_FOR_EACH_1_COUNTED_22(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23)
+
+#define MU_FOR_EACH_1_COUNTED_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(24, P1) \
+MU_FOR_EACH_1_COUNTED_23(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+#define MU_FOR_EACH_1_COUNTED_25(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25) \
+X(25, P1) \
+MU_FOR_EACH_1_COUNTED_24(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25)
+
+#define MU_FOR_EACH_1_COUNTED_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(26, P1) \
+MU_FOR_EACH_1_COUNTED_25(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+#define MU_FOR_EACH_1_COUNTED_27(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27) \
+X(27, P1) \
+MU_FOR_EACH_1_COUNTED_26(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27)
+
+#define MU_FOR_EACH_1_COUNTED_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(28, P1) \
+MU_FOR_EACH_1_COUNTED_27(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+#define MU_FOR_EACH_1_COUNTED_29(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29) \
+X(29, P1) \
+MU_FOR_EACH_1_COUNTED_28(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29)
+
+#define MU_FOR_EACH_1_COUNTED_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(30, P1) \
+MU_FOR_EACH_1_COUNTED_29(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+#define MU_FOR_EACH_1_COUNTED_31(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31) \
+X(31, P1) \
+MU_FOR_EACH_1_COUNTED_30(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31)
+
+#define MU_FOR_EACH_1_COUNTED_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(32, P1) \
+MU_FOR_EACH_1_COUNTED_31(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+#define MU_FOR_EACH_1_COUNTED_33(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33) \
+X(33, P1) \
+MU_FOR_EACH_1_COUNTED_32(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33)
+
+#define MU_FOR_EACH_1_COUNTED_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(34, P1) \
+MU_FOR_EACH_1_COUNTED_33(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+#define MU_FOR_EACH_1_COUNTED_35(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35) \
+X(35, P1) \
+MU_FOR_EACH_1_COUNTED_34(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35)
+
+#define MU_FOR_EACH_1_COUNTED_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(36, P1) \
+MU_FOR_EACH_1_COUNTED_35(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+#define MU_FOR_EACH_1_COUNTED_37(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37) \
+X(37, P1) \
+MU_FOR_EACH_1_COUNTED_36(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37)
+
+#define MU_FOR_EACH_1_COUNTED_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(38, P1) \
+MU_FOR_EACH_1_COUNTED_37(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+#define MU_FOR_EACH_1_COUNTED_39(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39) \
+X(39, P1) \
+MU_FOR_EACH_1_COUNTED_38(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39)
+
+#define MU_FOR_EACH_1_COUNTED_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(40, P1) \
+MU_FOR_EACH_1_COUNTED_39(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+#define MU_FOR_EACH_1_COUNTED_41(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41) \
+X(41, P1) \
+MU_FOR_EACH_1_COUNTED_40(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41)
+
+#define MU_FOR_EACH_1_COUNTED_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(42, P1) \
+MU_FOR_EACH_1_COUNTED_41(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+#define MU_FOR_EACH_1_COUNTED_43(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43) \
+X(43, P1) \
+MU_FOR_EACH_1_COUNTED_42(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43)
+
+#define MU_FOR_EACH_1_COUNTED_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(44, P1) \
+MU_FOR_EACH_1_COUNTED_43(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+#define MU_FOR_EACH_1_COUNTED_45(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45) \
+X(45, P1) \
+MU_FOR_EACH_1_COUNTED_44(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45)
+
+#define MU_FOR_EACH_1_COUNTED_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(46, P1) \
+MU_FOR_EACH_1_COUNTED_45(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+#define MU_FOR_EACH_1_COUNTED_47(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47) \
+X(47, P1) \
+MU_FOR_EACH_1_COUNTED_46(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47)
+
+#define MU_FOR_EACH_1_COUNTED_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(48, P1) \
+MU_FOR_EACH_1_COUNTED_47(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+#define MU_FOR_EACH_1_COUNTED_49(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49) \
+X(49, P1) \
+MU_FOR_EACH_1_COUNTED_48(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49)
+
+#define MU_FOR_EACH_1_COUNTED_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(50, P1) \
+MU_FOR_EACH_1_COUNTED_49(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+#define MU_FOR_EACH_1_COUNTED_51(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51) \
+X(51, P1) \
+MU_FOR_EACH_1_COUNTED_50(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51)
+
+#define MU_FOR_EACH_1_COUNTED_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(52, P1) \
+MU_FOR_EACH_1_COUNTED_51(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+#define MU_FOR_EACH_1_COUNTED_53(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53) \
+X(53, P1) \
+MU_FOR_EACH_1_COUNTED_52(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53)
+
+#define MU_FOR_EACH_1_COUNTED_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(54, P1) \
+MU_FOR_EACH_1_COUNTED_53(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+#define MU_FOR_EACH_1_COUNTED_55(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55) \
+X(55, P1) \
+MU_FOR_EACH_1_COUNTED_54(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55)
+
+#define MU_FOR_EACH_1_COUNTED_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(56, P1) \
+MU_FOR_EACH_1_COUNTED_55(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+#define MU_FOR_EACH_1_COUNTED_57(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57) \
+X(57, P1) \
+MU_FOR_EACH_1_COUNTED_56(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57)
+
+#define MU_FOR_EACH_1_COUNTED_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(58, P1) \
+MU_FOR_EACH_1_COUNTED_57(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+#define MU_FOR_EACH_1_COUNTED_59(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59) \
+X(59, P1) \
+MU_FOR_EACH_1_COUNTED_58(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59)
+
+#define MU_FOR_EACH_1_COUNTED_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(60, P1) \
+MU_FOR_EACH_1_COUNTED_59(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+#define MU_FOR_EACH_1_COUNTED_61(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61) \
+X(61, P1) \
+MU_FOR_EACH_1_COUNTED_60(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61)
+
+#define MU_FOR_EACH_1_COUNTED_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(62, P1) \
+MU_FOR_EACH_1_COUNTED_61(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+#define MU_FOR_EACH_1_COUNTED_63(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63) \
+X(63, P1) \
+MU_FOR_EACH_1_COUNTED_62(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63)
+
+#define MU_FOR_EACH_1_COUNTED_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(64, P1) \
+MU_FOR_EACH_1_COUNTED_63(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+#define MU_FOR_EACH_1_COUNTED_65(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65) \
+X(65, P1) \
+MU_FOR_EACH_1_COUNTED_64(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65)
+
+#define MU_FOR_EACH_1_COUNTED_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(66, P1) \
+MU_FOR_EACH_1_COUNTED_65(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+#define MU_FOR_EACH_1_COUNTED_67(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67) \
+X(67, P1) \
+MU_FOR_EACH_1_COUNTED_66(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67)
+
+#define MU_FOR_EACH_1_COUNTED_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(68, P1) \
+MU_FOR_EACH_1_COUNTED_67(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+#define MU_FOR_EACH_1_COUNTED_69(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69) \
+X(69, P1) \
+MU_FOR_EACH_1_COUNTED_68(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69)
+
+#define MU_FOR_EACH_1_COUNTED_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(70, P1) \
+MU_FOR_EACH_1_COUNTED_69(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+#define MU_FOR_EACH_1_COUNTED_71(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71) \
+X(71, P1) \
+MU_FOR_EACH_1_COUNTED_70(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71)
+
+#define MU_FOR_EACH_1_COUNTED_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(72, P1) \
+MU_FOR_EACH_1_COUNTED_71(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+#define MU_FOR_EACH_1_COUNTED_73(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73) \
+X(73, P1) \
+MU_FOR_EACH_1_COUNTED_72(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73)
+
+#define MU_FOR_EACH_1_COUNTED_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(74, P1) \
+MU_FOR_EACH_1_COUNTED_73(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+#define MU_FOR_EACH_1_COUNTED_75(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75) \
+X(75, P1) \
+MU_FOR_EACH_1_COUNTED_74(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75)
+
+#define MU_FOR_EACH_1_COUNTED_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(76, P1) \
+MU_FOR_EACH_1_COUNTED_75(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+#define MU_FOR_EACH_1_COUNTED_77(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77) \
+X(77, P1) \
+MU_FOR_EACH_1_COUNTED_76(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77)
+
+#define MU_FOR_EACH_1_COUNTED_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(78, P1) \
+MU_FOR_EACH_1_COUNTED_77(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+#define MU_FOR_EACH_1_COUNTED_79(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79) \
+X(79, P1) \
+MU_FOR_EACH_1_COUNTED_78(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79)
+
+#define MU_FOR_EACH_1_COUNTED_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(80, P1) \
+MU_FOR_EACH_1_COUNTED_79(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+#define MU_FOR_EACH_1_COUNTED_81(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81) \
+X(81, P1) \
+MU_FOR_EACH_1_COUNTED_80(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81)
+
+#define MU_FOR_EACH_1_COUNTED_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(82, P1) \
+MU_FOR_EACH_1_COUNTED_81(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+#define MU_FOR_EACH_1_COUNTED_83(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83) \
+X(83, P1) \
+MU_FOR_EACH_1_COUNTED_82(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83)
+
+#define MU_FOR_EACH_1_COUNTED_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(84, P1) \
+MU_FOR_EACH_1_COUNTED_83(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+#define MU_FOR_EACH_1_COUNTED_85(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85) \
+X(85, P1) \
+MU_FOR_EACH_1_COUNTED_84(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85)
+
+#define MU_FOR_EACH_1_COUNTED_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(86, P1) \
+MU_FOR_EACH_1_COUNTED_85(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+#define MU_FOR_EACH_1_COUNTED_87(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87) \
+X(87, P1) \
+MU_FOR_EACH_1_COUNTED_86(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87)
+
+#define MU_FOR_EACH_1_COUNTED_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(88, P1) \
+MU_FOR_EACH_1_COUNTED_87(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+#define MU_FOR_EACH_1_COUNTED_89(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89) \
+X(89, P1) \
+MU_FOR_EACH_1_COUNTED_88(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89)
+
+#define MU_FOR_EACH_1_COUNTED_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(90, P1) \
+MU_FOR_EACH_1_COUNTED_89(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+#define MU_FOR_EACH_1_COUNTED_91(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91) \
+X(91, P1) \
+MU_FOR_EACH_1_COUNTED_90(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91)
+
+#define MU_FOR_EACH_1_COUNTED_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(92, P1) \
+MU_FOR_EACH_1_COUNTED_91(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+#define MU_FOR_EACH_1_COUNTED_93(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93) \
+X(93, P1) \
+MU_FOR_EACH_1_COUNTED_92(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93)
+
+#define MU_FOR_EACH_1_COUNTED_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(94, P1) \
+MU_FOR_EACH_1_COUNTED_93(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+#define MU_FOR_EACH_1_COUNTED_95(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95) \
+X(95, P1) \
+MU_FOR_EACH_1_COUNTED_94(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95)
+
+#define MU_FOR_EACH_1_COUNTED_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(96, P1) \
+MU_FOR_EACH_1_COUNTED_95(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+#define MU_FOR_EACH_1_COUNTED_97(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97) \
+X(97, P1) \
+MU_FOR_EACH_1_COUNTED_96(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97)
+
+#define MU_FOR_EACH_1_COUNTED_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(98, P1) \
+MU_FOR_EACH_1_COUNTED_97(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+#define MU_FOR_EACH_1_COUNTED_99(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99) \
+X(99, P1) \
+MU_FOR_EACH_1_COUNTED_98(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99)
+
+#define MU_FOR_EACH_1_COUNTED_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(100, P1) \
+MU_FOR_EACH_1_COUNTED_99(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+#define MU_FOR_EACH_1_COUNTED_101(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101) \
+X(101, P1) \
+MU_FOR_EACH_1_COUNTED_100(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101)
+
+#define MU_FOR_EACH_1_COUNTED_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(102, P1) \
+MU_FOR_EACH_1_COUNTED_101(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+#define MU_FOR_EACH_1_COUNTED_103(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103) \
+X(103, P1) \
+MU_FOR_EACH_1_COUNTED_102(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103)
+
+#define MU_FOR_EACH_1_COUNTED_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(104, P1) \
+MU_FOR_EACH_1_COUNTED_103(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+#define MU_FOR_EACH_1_COUNTED_105(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105) \
+X(105, P1) \
+MU_FOR_EACH_1_COUNTED_104(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105)
+
+#define MU_FOR_EACH_1_COUNTED_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(106, P1) \
+MU_FOR_EACH_1_COUNTED_105(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+#define MU_FOR_EACH_1_COUNTED_107(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107) \
+X(107, P1) \
+MU_FOR_EACH_1_COUNTED_106(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107)
+
+#define MU_FOR_EACH_1_COUNTED_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(108, P1) \
+MU_FOR_EACH_1_COUNTED_107(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+#define MU_FOR_EACH_1_COUNTED_109(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109) \
+X(109, P1) \
+MU_FOR_EACH_1_COUNTED_108(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109)
+
+#define MU_FOR_EACH_1_COUNTED_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(110, P1) \
+MU_FOR_EACH_1_COUNTED_109(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+#define MU_FOR_EACH_1_COUNTED_111(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111) \
+X(111, P1) \
+MU_FOR_EACH_1_COUNTED_110(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111)
+
+#define MU_FOR_EACH_1_COUNTED_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(112, P1) \
+MU_FOR_EACH_1_COUNTED_111(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+#define MU_FOR_EACH_1_COUNTED_113(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113) \
+X(113, P1) \
+MU_FOR_EACH_1_COUNTED_112(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113)
+
+#define MU_FOR_EACH_1_COUNTED_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(114, P1) \
+MU_FOR_EACH_1_COUNTED_113(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+#define MU_FOR_EACH_1_COUNTED_115(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115) \
+X(115, P1) \
+MU_FOR_EACH_1_COUNTED_114(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115)
+
+#define MU_FOR_EACH_1_COUNTED_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(116, P1) \
+MU_FOR_EACH_1_COUNTED_115(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+#define MU_FOR_EACH_1_COUNTED_117(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117) \
+X(117, P1) \
+MU_FOR_EACH_1_COUNTED_116(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117)
+
+#define MU_FOR_EACH_1_COUNTED_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(118, P1) \
+MU_FOR_EACH_1_COUNTED_117(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+#define MU_FOR_EACH_1_COUNTED_119(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119) \
+X(119, P1) \
+MU_FOR_EACH_1_COUNTED_118(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119)
+
+#define MU_FOR_EACH_1_COUNTED_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(120, P1) \
+MU_FOR_EACH_1_COUNTED_119(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+#define MU_FOR_EACH_1_COUNTED_121(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121) \
+X(121, P1) \
+MU_FOR_EACH_1_COUNTED_120(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121)
+
+#define MU_FOR_EACH_1_COUNTED_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(122, P1) \
+MU_FOR_EACH_1_COUNTED_121(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+#define MU_FOR_EACH_1_COUNTED_123(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123) \
+X(123, P1) \
+MU_FOR_EACH_1_COUNTED_122(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123)
+
+#define MU_FOR_EACH_1_COUNTED_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(124, P1) \
+MU_FOR_EACH_1_COUNTED_123(X, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+
+#define MU_FOR_EACH_2_COUNTED_0(...)
+
+#define MU_FOR_EACH_2_COUNTED_2(X, P1, P2) \
+    X(2, P1, P2)
+
+#define MU_FOR_EACH_2_COUNTED_4(X, P1, P2, P3, P4) \
+X(4, P1, P2) \
+MU_FOR_EACH_2_COUNTED_2(X, P3, P4)
+
+#define MU_FOR_EACH_2_COUNTED_6(X, P1, P2, P3, P4, P5, P6) \
+X(6, P1, P2) \
+MU_FOR_EACH_2_COUNTED_4(X, P3, P4, P5, P6)
+
+#define MU_FOR_EACH_2_COUNTED_8(X, P1, P2, P3, P4, P5, P6, P7, P8) \
+X(8, P1, P2) \
+MU_FOR_EACH_2_COUNTED_6(X, P3, P4, P5, P6, P7, P8)
+
+#define MU_FOR_EACH_2_COUNTED_10(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \
+X(10, P1, P2) \
+MU_FOR_EACH_2_COUNTED_8(X, P3, P4, P5, P6, P7, P8, P9, P10)
+
+#define MU_FOR_EACH_2_COUNTED_12(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \
+X(12, P1, P2) \
+MU_FOR_EACH_2_COUNTED_10(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12)
+
+#define MU_FOR_EACH_2_COUNTED_14(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) \
+X(14, P1, P2) \
+MU_FOR_EACH_2_COUNTED_12(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14)
+
+#define MU_FOR_EACH_2_COUNTED_16(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) \
+X(16, P1, P2) \
+MU_FOR_EACH_2_COUNTED_14(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16)
+
+#define MU_FOR_EACH_2_COUNTED_18(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) \
+X(18, P1, P2) \
+MU_FOR_EACH_2_COUNTED_16(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18)
+
+#define MU_FOR_EACH_2_COUNTED_20(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) \
+X(20, P1, P2) \
+MU_FOR_EACH_2_COUNTED_18(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20)
+
+#define MU_FOR_EACH_2_COUNTED_22(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) \
+X(22, P1, P2) \
+MU_FOR_EACH_2_COUNTED_20(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22)
+
+#define MU_FOR_EACH_2_COUNTED_24(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24) \
+X(24, P1, P2) \
+MU_FOR_EACH_2_COUNTED_22(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24)
+
+#define MU_FOR_EACH_2_COUNTED_26(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26) \
+X(26, P1, P2) \
+MU_FOR_EACH_2_COUNTED_24(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26)
+
+#define MU_FOR_EACH_2_COUNTED_28(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28) \
+X(28, P1, P2) \
+MU_FOR_EACH_2_COUNTED_26(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28)
+
+#define MU_FOR_EACH_2_COUNTED_30(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30) \
+X(30, P1, P2) \
+MU_FOR_EACH_2_COUNTED_28(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30)
+
+#define MU_FOR_EACH_2_COUNTED_32(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32) \
+X(32, P1, P2) \
+MU_FOR_EACH_2_COUNTED_30(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32)
+
+#define MU_FOR_EACH_2_COUNTED_34(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34) \
+X(34, P1, P2) \
+MU_FOR_EACH_2_COUNTED_32(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34)
+
+#define MU_FOR_EACH_2_COUNTED_36(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36) \
+X(36, P1, P2) \
+MU_FOR_EACH_2_COUNTED_34(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36)
+
+#define MU_FOR_EACH_2_COUNTED_38(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38) \
+X(38, P1, P2) \
+MU_FOR_EACH_2_COUNTED_36(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38)
+
+#define MU_FOR_EACH_2_COUNTED_40(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40) \
+X(40, P1, P2) \
+MU_FOR_EACH_2_COUNTED_38(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40)
+
+#define MU_FOR_EACH_2_COUNTED_42(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42) \
+X(42, P1, P2) \
+MU_FOR_EACH_2_COUNTED_40(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42)
+
+#define MU_FOR_EACH_2_COUNTED_44(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44) \
+X(44, P1, P2) \
+MU_FOR_EACH_2_COUNTED_42(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44)
+
+#define MU_FOR_EACH_2_COUNTED_46(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46) \
+X(46, P1, P2) \
+MU_FOR_EACH_2_COUNTED_44(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46)
+
+#define MU_FOR_EACH_2_COUNTED_48(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48) \
+X(48, P1, P2) \
+MU_FOR_EACH_2_COUNTED_46(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48)
+
+#define MU_FOR_EACH_2_COUNTED_50(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50) \
+X(50, P1, P2) \
+MU_FOR_EACH_2_COUNTED_48(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50)
+
+#define MU_FOR_EACH_2_COUNTED_52(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52) \
+X(52, P1, P2) \
+MU_FOR_EACH_2_COUNTED_50(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52)
+
+#define MU_FOR_EACH_2_COUNTED_54(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54) \
+X(54, P1, P2) \
+MU_FOR_EACH_2_COUNTED_52(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54)
+
+#define MU_FOR_EACH_2_COUNTED_56(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56) \
+X(56, P1, P2) \
+MU_FOR_EACH_2_COUNTED_54(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56)
+
+#define MU_FOR_EACH_2_COUNTED_58(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58) \
+X(58, P1, P2) \
+MU_FOR_EACH_2_COUNTED_56(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58)
+
+#define MU_FOR_EACH_2_COUNTED_60(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60) \
+X(60, P1, P2) \
+MU_FOR_EACH_2_COUNTED_58(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60)
+
+#define MU_FOR_EACH_2_COUNTED_62(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62) \
+X(62, P1, P2) \
+MU_FOR_EACH_2_COUNTED_60(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62)
+
+#define MU_FOR_EACH_2_COUNTED_64(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64) \
+X(64, P1, P2) \
+MU_FOR_EACH_2_COUNTED_62(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64)
+
+#define MU_FOR_EACH_2_COUNTED_66(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66) \
+X(66, P1, P2) \
+MU_FOR_EACH_2_COUNTED_64(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66)
+
+#define MU_FOR_EACH_2_COUNTED_68(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68) \
+X(68, P1, P2) \
+MU_FOR_EACH_2_COUNTED_66(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68)
+
+#define MU_FOR_EACH_2_COUNTED_70(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70) \
+X(70, P1, P2) \
+MU_FOR_EACH_2_COUNTED_68(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70)
+
+#define MU_FOR_EACH_2_COUNTED_72(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72) \
+X(72, P1, P2) \
+MU_FOR_EACH_2_COUNTED_70(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72)
+
+#define MU_FOR_EACH_2_COUNTED_74(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74) \
+X(74, P1, P2) \
+MU_FOR_EACH_2_COUNTED_72(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74)
+
+#define MU_FOR_EACH_2_COUNTED_76(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76) \
+X(76, P1, P2) \
+MU_FOR_EACH_2_COUNTED_74(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76)
+
+#define MU_FOR_EACH_2_COUNTED_78(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78) \
+X(78, P1, P2) \
+MU_FOR_EACH_2_COUNTED_76(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78)
+
+#define MU_FOR_EACH_2_COUNTED_80(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80) \
+X(80, P1, P2) \
+MU_FOR_EACH_2_COUNTED_78(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80)
+
+#define MU_FOR_EACH_2_COUNTED_82(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82) \
+X(82, P1, P2) \
+MU_FOR_EACH_2_COUNTED_80(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82)
+
+#define MU_FOR_EACH_2_COUNTED_84(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84) \
+X(84, P1, P2) \
+MU_FOR_EACH_2_COUNTED_82(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84)
+
+#define MU_FOR_EACH_2_COUNTED_86(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86) \
+X(86, P1, P2) \
+MU_FOR_EACH_2_COUNTED_84(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86)
+
+#define MU_FOR_EACH_2_COUNTED_88(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88) \
+X(88, P1, P2) \
+MU_FOR_EACH_2_COUNTED_86(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88)
+
+#define MU_FOR_EACH_2_COUNTED_90(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90) \
+X(90, P1, P2) \
+MU_FOR_EACH_2_COUNTED_88(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90)
+
+#define MU_FOR_EACH_2_COUNTED_92(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92) \
+X(92, P1, P2) \
+MU_FOR_EACH_2_COUNTED_90(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92)
+
+#define MU_FOR_EACH_2_COUNTED_94(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94) \
+X(94, P1, P2) \
+MU_FOR_EACH_2_COUNTED_92(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94)
+
+#define MU_FOR_EACH_2_COUNTED_96(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96) \
+X(96, P1, P2) \
+MU_FOR_EACH_2_COUNTED_94(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96)
+
+#define MU_FOR_EACH_2_COUNTED_98(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98) \
+X(98, P1, P2) \
+MU_FOR_EACH_2_COUNTED_96(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98)
+
+#define MU_FOR_EACH_2_COUNTED_100(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100) \
+X(100, P1, P2) \
+MU_FOR_EACH_2_COUNTED_98(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100)
+
+#define MU_FOR_EACH_2_COUNTED_102(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102) \
+X(102, P1, P2) \
+MU_FOR_EACH_2_COUNTED_100(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102)
+
+#define MU_FOR_EACH_2_COUNTED_104(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104) \
+X(104, P1, P2) \
+MU_FOR_EACH_2_COUNTED_102(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104)
+
+#define MU_FOR_EACH_2_COUNTED_106(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106) \
+X(106, P1, P2) \
+MU_FOR_EACH_2_COUNTED_104(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106)
+
+#define MU_FOR_EACH_2_COUNTED_108(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108) \
+X(108, P1, P2) \
+MU_FOR_EACH_2_COUNTED_106(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108)
+
+#define MU_FOR_EACH_2_COUNTED_110(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110) \
+X(110, P1, P2) \
+MU_FOR_EACH_2_COUNTED_108(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110)
+
+#define MU_FOR_EACH_2_COUNTED_112(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112) \
+X(112, P1, P2) \
+MU_FOR_EACH_2_COUNTED_110(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112)
+
+#define MU_FOR_EACH_2_COUNTED_114(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114) \
+X(114, P1, P2) \
+MU_FOR_EACH_2_COUNTED_112(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114)
+
+#define MU_FOR_EACH_2_COUNTED_116(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116) \
+X(116, P1, P2) \
+MU_FOR_EACH_2_COUNTED_114(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116)
+
+#define MU_FOR_EACH_2_COUNTED_118(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118) \
+X(118, P1, P2) \
+MU_FOR_EACH_2_COUNTED_116(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118)
+
+#define MU_FOR_EACH_2_COUNTED_120(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120) \
+X(120, P1, P2) \
+MU_FOR_EACH_2_COUNTED_118(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120)
+
+#define MU_FOR_EACH_2_COUNTED_122(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122) \
+X(122, P1, P2) \
+MU_FOR_EACH_2_COUNTED_120(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122)
+
+#define MU_FOR_EACH_2_COUNTED_124(X, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124) \
+X(124, P1, P2) \
+MU_FOR_EACH_2_COUNTED_122(X, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, P100, P101, P102, P103, P104, P105, P106, P107, P108, P109, P110, P111, P112, P113, P114, P115, P116, P117, P118, P119, P120, P121, P122, P123, P124)
+
+
+#ifdef _MSC_VER
+#define MU_FOR_EACH_2(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+/*the COUNTED breed of MU_FOR_EACH macro invokes a macro with 3 parameters: 1st being the count of invocation. For example.
+MU_FOR_EACH_2_COUNTER(MACRO, a,b,c,d,e,f) will result in 
+MACRO(6, a,b)
+MACRO(4, c,d)
+MACRO(2, e,f)
+This macro exists because we need a "stop condition" in outputting COMMA... when calling a function f(a,b,c,d) cannot be f(a,b,c,d,) <=doesn't compile (as opposed to enum definition)
+*/
+#define MU_FOR_EACH_2_COUNTED(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_COUNTED_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+#define MU_FOR_EACH_1_COUNTED(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_1_COUNTED_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+
+/*MU_FOR_EACH_2_REVERSE acts just like MU_FOR_EACH_2, but in reverse order. Example:
+MU_FOR_EACH_2_REVERSE(X,a,b,c,d,e,f) => X(e,f) X(c,d) X (a, b) in this order */
+#define MU_FOR_EACH_2_REVERSE(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_REVERSE_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) MU_LPAREN MACRO_TO_INVOKE, __VA_ARGS__)
+#else
+#define MU_FOR_EACH_2(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__)
+#define MU_FOR_EACH_2_COUNTED(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_COUNTED_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE,  __VA_ARGS__)
+#define MU_FOR_EACH_1_COUNTED(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_1_COUNTED_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE,  __VA_ARGS__)
+#define MU_FOR_EACH_2_REVERSE(MACRO_TO_INVOKE, ...) MU_C2(MU_FOR_EACH_2_REVERSE_, MU_C1(MU_COUNT_ARG(__VA_ARGS__))) ( MACRO_TO_INVOKE, __VA_ARGS__)
+#endif
+
+#ifdef _MSC_VER
+#define MU_EXPAND_OR_MU_C1(x) x
+#else
+#define MU_EXPAND_OR_MU_C1(...) __VA_ARGS__
+#endif
+
+#define MU_EXPAND_ARGS(...) __VA_ARGS__
+#define MU_EXPAND_TWICE(...) MU_EXPAND_ARGS(__VA_ARGS__)
+
+#define MU_DO_0(MACRO, ...) \
+MACRO(0, __VA_ARGS__)
+
+#define MU_DO_1(MACRO, ...) \
+MACRO(1, __VA_ARGS__) \
+DO_0(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_2(MACRO, ...) \
+MACRO(2, __VA_ARGS__) \
+DO_1(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_3(MACRO, ...) \
+MACRO(3, __VA_ARGS__) \
+DO_2(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_4(MACRO, ...) \
+MACRO(4, __VA_ARGS__) \
+DO_3(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_5(MACRO, ...) \
+MACRO(5, __VA_ARGS__) \
+DO_4(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_6(MACRO, ...) \
+MACRO(6, __VA_ARGS__) \
+DO_5(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_7(MACRO, ...) \
+MACRO(7, __VA_ARGS__) \
+DO_6(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_8(MACRO, ...) \
+MACRO(8, __VA_ARGS__) \
+DO_7(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_9(MACRO, ...) \
+MACRO(9, __VA_ARGS__) \
+DO_8(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_10(MACRO, ...) \
+MACRO(10, __VA_ARGS__) \
+DO_9(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_11(MACRO, ...) \
+MACRO(11, __VA_ARGS__) \
+DO_10(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_12(MACRO, ...) \
+MACRO(12, __VA_ARGS__) \
+DO_11(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_13(MACRO, ...) \
+MACRO(13, __VA_ARGS__) \
+DO_12(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_14(MACRO, ...) \
+MACRO(14, __VA_ARGS__) \
+DO_13(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_15(MACRO, ...) \
+MACRO(15, __VA_ARGS__) \
+DO_14(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_16(MACRO, ...) \
+MACRO(16, __VA_ARGS__) \
+DO_15(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_17(MACRO, ...) \
+MACRO(17, __VA_ARGS__) \
+DO_16(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_18(MACRO, ...) \
+MACRO(18, __VA_ARGS__) \
+DO_17(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_19(MACRO, ...) \
+MACRO(19, __VA_ARGS__) \
+DO_18(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_20(MACRO, ...) \
+MACRO(20, __VA_ARGS__) \
+DO_19(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_21(MACRO, ...) \
+MACRO(21, __VA_ARGS__) \
+DO_20(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_22(MACRO, ...) \
+MACRO(22, __VA_ARGS__) \
+DO_21(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_23(MACRO, ...) \
+MACRO(23, __VA_ARGS__) \
+DO_22(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_24(MACRO, ...) \
+MACRO(24, __VA_ARGS__) \
+DO_23(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_25(MACRO, ...) \
+MACRO(25, __VA_ARGS__) \
+DO_24(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_26(MACRO, ...) \
+MACRO(26, __VA_ARGS__) \
+DO_25(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_27(MACRO, ...) \
+MACRO(27, __VA_ARGS__) \
+DO_26(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_28(MACRO, ...) \
+MACRO(28, __VA_ARGS__) \
+DO_27(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_29(MACRO, ...) \
+MACRO(29, __VA_ARGS__) \
+DO_28(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_30(MACRO, ...) \
+MACRO(30, __VA_ARGS__) \
+DO_29(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_31(MACRO, ...) \
+MACRO(31, __VA_ARGS__) \
+DO_30(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_32(MACRO, ...) \
+MACRO(32, __VA_ARGS__) \
+DO_31(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_33(MACRO, ...) \
+MACRO(33, __VA_ARGS__) \
+DO_32(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_34(MACRO, ...) \
+MACRO(34, __VA_ARGS__) \
+DO_33(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_35(MACRO, ...) \
+MACRO(35, __VA_ARGS__) \
+DO_34(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_36(MACRO, ...) \
+MACRO(36, __VA_ARGS__) \
+DO_35(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_37(MACRO, ...) \
+MACRO(37, __VA_ARGS__) \
+DO_36(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_38(MACRO, ...) \
+MACRO(38, __VA_ARGS__) \
+DO_37(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_39(MACRO, ...) \
+MACRO(39, __VA_ARGS__) \
+DO_38(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_40(MACRO, ...) \
+MACRO(40, __VA_ARGS__) \
+DO_39(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_41(MACRO, ...) \
+MACRO(41, __VA_ARGS__) \
+DO_40(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_42(MACRO, ...) \
+MACRO(42, __VA_ARGS__) \
+DO_41(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_43(MACRO, ...) \
+MACRO(43, __VA_ARGS__) \
+DO_42(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_44(MACRO, ...) \
+MACRO(44, __VA_ARGS__) \
+DO_43(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_45(MACRO, ...) \
+MACRO(45, __VA_ARGS__) \
+DO_44(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_46(MACRO, ...) \
+MACRO(46, __VA_ARGS__) \
+DO_45(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_47(MACRO, ...) \
+MACRO(47, __VA_ARGS__) \
+DO_46(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_48(MACRO, ...) \
+MACRO(48, __VA_ARGS__) \
+DO_47(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_49(MACRO, ...) \
+MACRO(49, __VA_ARGS__) \
+DO_48(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_50(MACRO, ...) \
+MACRO(50, __VA_ARGS__) \
+DO_49(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_51(MACRO, ...) \
+MACRO(51, __VA_ARGS__) \
+DO_50(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_52(MACRO, ...) \
+MACRO(52, __VA_ARGS__) \
+DO_51(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_53(MACRO, ...) \
+MACRO(53, __VA_ARGS__) \
+DO_52(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_54(MACRO, ...) \
+MACRO(54, __VA_ARGS__) \
+DO_53(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_55(MACRO, ...) \
+MACRO(55, __VA_ARGS__) \
+DO_54(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_56(MACRO, ...) \
+MACRO(56, __VA_ARGS__) \
+DO_55(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_57(MACRO, ...) \
+MACRO(57, __VA_ARGS__) \
+DO_56(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_58(MACRO, ...) \
+MACRO(58, __VA_ARGS__) \
+DO_57(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_59(MACRO, ...) \
+MACRO(59, __VA_ARGS__) \
+DO_58(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_60(MACRO, ...) \
+MACRO(60, __VA_ARGS__) \
+DO_59(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_61(MACRO, ...) \
+MACRO(61, __VA_ARGS__) \
+DO_60(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_62(MACRO, ...) \
+MACRO(62, __VA_ARGS__) \
+DO_61(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_63(MACRO, ...) \
+MACRO(63, __VA_ARGS__) \
+DO_62(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_64(MACRO, ...) \
+MACRO(64, __VA_ARGS__) \
+DO_63(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_65(MACRO, ...) \
+MACRO(65, __VA_ARGS__) \
+DO_64(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_66(MACRO, ...) \
+MACRO(66, __VA_ARGS__) \
+DO_65(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_67(MACRO, ...) \
+MACRO(67, __VA_ARGS__) \
+DO_66(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_68(MACRO, ...) \
+MACRO(68, __VA_ARGS__) \
+DO_67(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_69(MACRO, ...) \
+MACRO(69, __VA_ARGS__) \
+DO_68(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_70(MACRO, ...) \
+MACRO(70, __VA_ARGS__) \
+DO_69(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_71(MACRO, ...) \
+MACRO(71, __VA_ARGS__) \
+DO_70(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_72(MACRO, ...) \
+MACRO(72, __VA_ARGS__) \
+DO_71(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_73(MACRO, ...) \
+MACRO(73, __VA_ARGS__) \
+DO_72(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_74(MACRO, ...) \
+MACRO(74, __VA_ARGS__) \
+DO_73(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_75(MACRO, ...) \
+MACRO(75, __VA_ARGS__) \
+DO_74(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_76(MACRO, ...) \
+MACRO(76, __VA_ARGS__) \
+DO_75(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_77(MACRO, ...) \
+MACRO(77, __VA_ARGS__) \
+DO_76(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_78(MACRO, ...) \
+MACRO(78, __VA_ARGS__) \
+DO_77(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_79(MACRO, ...) \
+MACRO(79, __VA_ARGS__) \
+DO_78(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_80(MACRO, ...) \
+MACRO(80, __VA_ARGS__) \
+DO_79(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_81(MACRO, ...) \
+MACRO(81, __VA_ARGS__) \
+DO_80(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_82(MACRO, ...) \
+MACRO(82, __VA_ARGS__) \
+DO_81(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_83(MACRO, ...) \
+MACRO(83, __VA_ARGS__) \
+DO_82(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_84(MACRO, ...) \
+MACRO(84, __VA_ARGS__) \
+DO_83(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_85(MACRO, ...) \
+MACRO(85, __VA_ARGS__) \
+DO_84(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_86(MACRO, ...) \
+MACRO(86, __VA_ARGS__) \
+DO_85(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_87(MACRO, ...) \
+MACRO(87, __VA_ARGS__) \
+DO_86(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_88(MACRO, ...) \
+MACRO(88, __VA_ARGS__) \
+DO_87(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_89(MACRO, ...) \
+MACRO(89, __VA_ARGS__) \
+DO_88(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_90(MACRO, ...) \
+MACRO(90, __VA_ARGS__) \
+DO_89(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_91(MACRO, ...) \
+MACRO(91, __VA_ARGS__) \
+DO_90(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_92(MACRO, ...) \
+MACRO(92, __VA_ARGS__) \
+DO_91(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_93(MACRO, ...) \
+MACRO(93, __VA_ARGS__) \
+DO_92(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_94(MACRO, ...) \
+MACRO(94, __VA_ARGS__) \
+DO_93(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_95(MACRO, ...) \
+MACRO(95, __VA_ARGS__) \
+DO_94(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_96(MACRO, ...) \
+MACRO(96, __VA_ARGS__) \
+DO_95(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_97(MACRO, ...) \
+MACRO(97, __VA_ARGS__) \
+DO_96(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_98(MACRO, ...) \
+MACRO(98, __VA_ARGS__) \
+DO_97(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_99(MACRO, ...) \
+MACRO(99, __VA_ARGS__) \
+DO_98(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_100(MACRO, ...) \
+MACRO(100, __VA_ARGS__) \
+DO_99(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_101(MACRO, ...) \
+MACRO(101, __VA_ARGS__) \
+DO_100(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_102(MACRO, ...) \
+MACRO(102, __VA_ARGS__) \
+DO_101(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_103(MACRO, ...) \
+MACRO(103, __VA_ARGS__) \
+DO_102(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_104(MACRO, ...) \
+MACRO(104, __VA_ARGS__) \
+DO_103(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_105(MACRO, ...) \
+MACRO(105, __VA_ARGS__) \
+DO_104(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_106(MACRO, ...) \
+MACRO(106, __VA_ARGS__) \
+DO_105(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_107(MACRO, ...) \
+MACRO(107, __VA_ARGS__) \
+DO_106(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_108(MACRO, ...) \
+MACRO(108, __VA_ARGS__) \
+DO_107(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_109(MACRO, ...) \
+MACRO(109, __VA_ARGS__) \
+DO_108(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_110(MACRO, ...) \
+MACRO(110, __VA_ARGS__) \
+DO_109(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_111(MACRO, ...) \
+MACRO(111, __VA_ARGS__) \
+DO_110(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_112(MACRO, ...) \
+MACRO(112, __VA_ARGS__) \
+DO_111(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_113(MACRO, ...) \
+MACRO(113, __VA_ARGS__) \
+DO_112(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_114(MACRO, ...) \
+MACRO(114, __VA_ARGS__) \
+DO_113(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_115(MACRO, ...) \
+MACRO(115, __VA_ARGS__) \
+DO_114(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_116(MACRO, ...) \
+MACRO(116, __VA_ARGS__) \
+DO_115(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_117(MACRO, ...) \
+MACRO(117, __VA_ARGS__) \
+DO_116(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_118(MACRO, ...) \
+MACRO(118, __VA_ARGS__) \
+DO_117(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_119(MACRO, ...) \
+MACRO(119, __VA_ARGS__) \
+DO_118(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_120(MACRO, ...) \
+MACRO(120, __VA_ARGS__) \
+DO_119(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_121(MACRO, ...) \
+MACRO(121, __VA_ARGS__) \
+DO_120(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_122(MACRO, ...) \
+MACRO(122, __VA_ARGS__) \
+DO_121(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_123(MACRO, ...) \
+MACRO(123, __VA_ARGS__) \
+DO_122(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_124(MACRO, ...) \
+MACRO(124, __VA_ARGS__) \
+DO_123(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_125(MACRO, ...) \
+MACRO(125, __VA_ARGS__) \
+DO_124(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_126(MACRO, ...) \
+MACRO(126, __VA_ARGS__) \
+DO_125(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_127(MACRO, ...) \
+MACRO(127, __VA_ARGS__) \
+DO_126(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_128(MACRO, ...) \
+MACRO(128, __VA_ARGS__) \
+DO_127(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_129(MACRO, ...) \
+MACRO(129, __VA_ARGS__) \
+DO_128(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_130(MACRO, ...) \
+MACRO(130, __VA_ARGS__) \
+DO_129(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_131(MACRO, ...) \
+MACRO(131, __VA_ARGS__) \
+DO_130(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_132(MACRO, ...) \
+MACRO(132, __VA_ARGS__) \
+DO_131(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_133(MACRO, ...) \
+MACRO(133, __VA_ARGS__) \
+DO_132(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_134(MACRO, ...) \
+MACRO(134, __VA_ARGS__) \
+DO_133(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_135(MACRO, ...) \
+MACRO(135, __VA_ARGS__) \
+DO_134(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_136(MACRO, ...) \
+MACRO(136, __VA_ARGS__) \
+DO_135(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_137(MACRO, ...) \
+MACRO(137, __VA_ARGS__) \
+DO_136(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_138(MACRO, ...) \
+MACRO(138, __VA_ARGS__) \
+DO_137(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_139(MACRO, ...) \
+MACRO(139, __VA_ARGS__) \
+DO_138(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_140(MACRO, ...) \
+MACRO(140, __VA_ARGS__) \
+DO_139(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_141(MACRO, ...) \
+MACRO(141, __VA_ARGS__) \
+DO_140(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_142(MACRO, ...) \
+MACRO(142, __VA_ARGS__) \
+DO_141(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_143(MACRO, ...) \
+MACRO(143, __VA_ARGS__) \
+DO_142(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_144(MACRO, ...) \
+MACRO(144, __VA_ARGS__) \
+DO_143(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_145(MACRO, ...) \
+MACRO(145, __VA_ARGS__) \
+DO_144(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_146(MACRO, ...) \
+MACRO(146, __VA_ARGS__) \
+DO_145(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_147(MACRO, ...) \
+MACRO(147, __VA_ARGS__) \
+DO_146(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_148(MACRO, ...) \
+MACRO(148, __VA_ARGS__) \
+DO_147(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_149(MACRO, ...) \
+MACRO(149, __VA_ARGS__) \
+DO_148(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_150(MACRO, ...) \
+MACRO(150, __VA_ARGS__) \
+DO_149(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_151(MACRO, ...) \
+MACRO(151, __VA_ARGS__) \
+DO_150(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_152(MACRO, ...) \
+MACRO(152, __VA_ARGS__) \
+DO_151(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_153(MACRO, ...) \
+MACRO(153, __VA_ARGS__) \
+DO_152(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_154(MACRO, ...) \
+MACRO(154, __VA_ARGS__) \
+DO_153(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_155(MACRO, ...) \
+MACRO(155, __VA_ARGS__) \
+DO_154(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_156(MACRO, ...) \
+MACRO(156, __VA_ARGS__) \
+DO_155(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_157(MACRO, ...) \
+MACRO(157, __VA_ARGS__) \
+DO_156(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_158(MACRO, ...) \
+MACRO(158, __VA_ARGS__) \
+DO_157(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_159(MACRO, ...) \
+MACRO(159, __VA_ARGS__) \
+DO_158(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_160(MACRO, ...) \
+MACRO(160, __VA_ARGS__) \
+DO_159(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_161(MACRO, ...) \
+MACRO(161, __VA_ARGS__) \
+DO_160(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_162(MACRO, ...) \
+MACRO(162, __VA_ARGS__) \
+DO_161(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_163(MACRO, ...) \
+MACRO(163, __VA_ARGS__) \
+DO_162(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_164(MACRO, ...) \
+MACRO(164, __VA_ARGS__) \
+DO_163(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_165(MACRO, ...) \
+MACRO(165, __VA_ARGS__) \
+DO_164(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_166(MACRO, ...) \
+MACRO(166, __VA_ARGS__) \
+DO_165(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_167(MACRO, ...) \
+MACRO(167, __VA_ARGS__) \
+DO_166(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_168(MACRO, ...) \
+MACRO(168, __VA_ARGS__) \
+DO_167(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_169(MACRO, ...) \
+MACRO(169, __VA_ARGS__) \
+DO_168(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_170(MACRO, ...) \
+MACRO(170, __VA_ARGS__) \
+DO_169(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_171(MACRO, ...) \
+MACRO(171, __VA_ARGS__) \
+DO_170(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_172(MACRO, ...) \
+MACRO(172, __VA_ARGS__) \
+DO_171(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_173(MACRO, ...) \
+MACRO(173, __VA_ARGS__) \
+DO_172(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_174(MACRO, ...) \
+MACRO(174, __VA_ARGS__) \
+DO_173(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_175(MACRO, ...) \
+MACRO(175, __VA_ARGS__) \
+DO_174(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_176(MACRO, ...) \
+MACRO(176, __VA_ARGS__) \
+DO_175(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_177(MACRO, ...) \
+MACRO(177, __VA_ARGS__) \
+DO_176(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_178(MACRO, ...) \
+MACRO(178, __VA_ARGS__) \
+DO_177(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_179(MACRO, ...) \
+MACRO(179, __VA_ARGS__) \
+DO_178(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_180(MACRO, ...) \
+MACRO(180, __VA_ARGS__) \
+DO_179(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_181(MACRO, ...) \
+MACRO(181, __VA_ARGS__) \
+DO_180(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_182(MACRO, ...) \
+MACRO(182, __VA_ARGS__) \
+DO_181(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_183(MACRO, ...) \
+MACRO(183, __VA_ARGS__) \
+DO_182(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_184(MACRO, ...) \
+MACRO(184, __VA_ARGS__) \
+DO_183(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_185(MACRO, ...) \
+MACRO(185, __VA_ARGS__) \
+DO_184(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_186(MACRO, ...) \
+MACRO(186, __VA_ARGS__) \
+DO_185(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_187(MACRO, ...) \
+MACRO(187, __VA_ARGS__) \
+DO_186(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_188(MACRO, ...) \
+MACRO(188, __VA_ARGS__) \
+DO_187(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_189(MACRO, ...) \
+MACRO(189, __VA_ARGS__) \
+DO_188(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_190(MACRO, ...) \
+MACRO(190, __VA_ARGS__) \
+DO_189(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_191(MACRO, ...) \
+MACRO(191, __VA_ARGS__) \
+DO_190(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_192(MACRO, ...) \
+MACRO(192, __VA_ARGS__) \
+DO_191(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_193(MACRO, ...) \
+MACRO(193, __VA_ARGS__) \
+DO_192(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_194(MACRO, ...) \
+MACRO(194, __VA_ARGS__) \
+DO_193(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_195(MACRO, ...) \
+MACRO(195, __VA_ARGS__) \
+DO_194(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_196(MACRO, ...) \
+MACRO(196, __VA_ARGS__) \
+DO_195(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_197(MACRO, ...) \
+MACRO(197, __VA_ARGS__) \
+DO_196(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_198(MACRO, ...) \
+MACRO(198, __VA_ARGS__) \
+DO_197(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_199(MACRO, ...) \
+MACRO(199, __VA_ARGS__) \
+DO_198(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_200(MACRO, ...) \
+MACRO(200, __VA_ARGS__) \
+DO_199(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_201(MACRO, ...) \
+MACRO(201, __VA_ARGS__) \
+DO_200(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_202(MACRO, ...) \
+MACRO(202, __VA_ARGS__) \
+DO_201(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_203(MACRO, ...) \
+MACRO(203, __VA_ARGS__) \
+DO_202(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_204(MACRO, ...) \
+MACRO(204, __VA_ARGS__) \
+DO_203(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_205(MACRO, ...) \
+MACRO(205, __VA_ARGS__) \
+DO_204(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_206(MACRO, ...) \
+MACRO(206, __VA_ARGS__) \
+DO_205(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_207(MACRO, ...) \
+MACRO(207, __VA_ARGS__) \
+DO_206(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_208(MACRO, ...) \
+MACRO(208, __VA_ARGS__) \
+DO_207(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_209(MACRO, ...) \
+MACRO(209, __VA_ARGS__) \
+DO_208(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_210(MACRO, ...) \
+MACRO(210, __VA_ARGS__) \
+DO_209(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_211(MACRO, ...) \
+MACRO(211, __VA_ARGS__) \
+DO_210(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_212(MACRO, ...) \
+MACRO(212, __VA_ARGS__) \
+DO_211(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_213(MACRO, ...) \
+MACRO(213, __VA_ARGS__) \
+DO_212(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_214(MACRO, ...) \
+MACRO(214, __VA_ARGS__) \
+DO_213(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_215(MACRO, ...) \
+MACRO(215, __VA_ARGS__) \
+DO_214(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_216(MACRO, ...) \
+MACRO(216, __VA_ARGS__) \
+DO_215(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_217(MACRO, ...) \
+MACRO(217, __VA_ARGS__) \
+DO_216(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_218(MACRO, ...) \
+MACRO(218, __VA_ARGS__) \
+DO_217(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_219(MACRO, ...) \
+MACRO(219, __VA_ARGS__) \
+DO_218(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_220(MACRO, ...) \
+MACRO(220, __VA_ARGS__) \
+DO_219(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_221(MACRO, ...) \
+MACRO(221, __VA_ARGS__) \
+DO_220(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_222(MACRO, ...) \
+MACRO(222, __VA_ARGS__) \
+DO_221(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_223(MACRO, ...) \
+MACRO(223, __VA_ARGS__) \
+DO_222(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_224(MACRO, ...) \
+MACRO(224, __VA_ARGS__) \
+DO_223(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_225(MACRO, ...) \
+MACRO(225, __VA_ARGS__) \
+DO_224(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_226(MACRO, ...) \
+MACRO(226, __VA_ARGS__) \
+DO_225(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_227(MACRO, ...) \
+MACRO(227, __VA_ARGS__) \
+DO_226(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_228(MACRO, ...) \
+MACRO(228, __VA_ARGS__) \
+DO_227(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_229(MACRO, ...) \
+MACRO(229, __VA_ARGS__) \
+DO_228(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_230(MACRO, ...) \
+MACRO(230, __VA_ARGS__) \
+DO_229(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_231(MACRO, ...) \
+MACRO(231, __VA_ARGS__) \
+DO_230(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_232(MACRO, ...) \
+MACRO(232, __VA_ARGS__) \
+DO_231(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_233(MACRO, ...) \
+MACRO(233, __VA_ARGS__) \
+DO_232(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_234(MACRO, ...) \
+MACRO(234, __VA_ARGS__) \
+DO_233(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_235(MACRO, ...) \
+MACRO(235, __VA_ARGS__) \
+DO_234(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_236(MACRO, ...) \
+MACRO(236, __VA_ARGS__) \
+DO_235(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_237(MACRO, ...) \
+MACRO(237, __VA_ARGS__) \
+DO_236(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_238(MACRO, ...) \
+MACRO(238, __VA_ARGS__) \
+DO_237(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_239(MACRO, ...) \
+MACRO(239, __VA_ARGS__) \
+DO_238(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_240(MACRO, ...) \
+MACRO(240, __VA_ARGS__) \
+DO_239(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_241(MACRO, ...) \
+MACRO(241, __VA_ARGS__) \
+DO_240(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_242(MACRO, ...) \
+MACRO(242, __VA_ARGS__) \
+DO_241(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_243(MACRO, ...) \
+MACRO(243, __VA_ARGS__) \
+DO_242(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_244(MACRO, ...) \
+MACRO(244, __VA_ARGS__) \
+DO_243(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_245(MACRO, ...) \
+MACRO(245, __VA_ARGS__) \
+DO_244(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_246(MACRO, ...) \
+MACRO(246, __VA_ARGS__) \
+DO_245(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_247(MACRO, ...) \
+MACRO(247, __VA_ARGS__) \
+DO_246(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_248(MACRO, ...) \
+MACRO(248, __VA_ARGS__) \
+DO_247(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_249(MACRO, ...) \
+MACRO(249, __VA_ARGS__) \
+DO_248(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_250(MACRO, ...) \
+MACRO(250, __VA_ARGS__) \
+DO_249(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_251(MACRO, ...) \
+MACRO(251, __VA_ARGS__) \
+DO_250(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_252(MACRO, ...) \
+MACRO(252, __VA_ARGS__) \
+DO_251(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_253(MACRO, ...) \
+MACRO(253, __VA_ARGS__) \
+DO_252(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_254(MACRO, ...) \
+MACRO(254, __VA_ARGS__) \
+DO_253(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_255(MACRO, ...) \
+MACRO(255, __VA_ARGS__) \
+DO_254(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_256(MACRO, ...) \
+MACRO(256, __VA_ARGS__) \
+DO_255(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_257(MACRO, ...) \
+MACRO(257, __VA_ARGS__) \
+DO_256(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_258(MACRO, ...) \
+MACRO(258, __VA_ARGS__) \
+DO_257(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_259(MACRO, ...) \
+MACRO(259, __VA_ARGS__) \
+DO_258(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_260(MACRO, ...) \
+MACRO(260, __VA_ARGS__) \
+DO_259(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_261(MACRO, ...) \
+MACRO(261, __VA_ARGS__) \
+DO_260(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_262(MACRO, ...) \
+MACRO(262, __VA_ARGS__) \
+DO_261(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_263(MACRO, ...) \
+MACRO(263, __VA_ARGS__) \
+DO_262(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_264(MACRO, ...) \
+MACRO(264, __VA_ARGS__) \
+DO_263(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_265(MACRO, ...) \
+MACRO(265, __VA_ARGS__) \
+DO_264(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_266(MACRO, ...) \
+MACRO(266, __VA_ARGS__) \
+DO_265(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_267(MACRO, ...) \
+MACRO(267, __VA_ARGS__) \
+DO_266(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_268(MACRO, ...) \
+MACRO(268, __VA_ARGS__) \
+DO_267(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_269(MACRO, ...) \
+MACRO(269, __VA_ARGS__) \
+DO_268(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_270(MACRO, ...) \
+MACRO(270, __VA_ARGS__) \
+DO_269(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_271(MACRO, ...) \
+MACRO(271, __VA_ARGS__) \
+DO_270(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_272(MACRO, ...) \
+MACRO(272, __VA_ARGS__) \
+DO_271(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_273(MACRO, ...) \
+MACRO(273, __VA_ARGS__) \
+DO_272(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_274(MACRO, ...) \
+MACRO(274, __VA_ARGS__) \
+DO_273(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_275(MACRO, ...) \
+MACRO(275, __VA_ARGS__) \
+DO_274(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_276(MACRO, ...) \
+MACRO(276, __VA_ARGS__) \
+DO_275(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_277(MACRO, ...) \
+MACRO(277, __VA_ARGS__) \
+DO_276(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_278(MACRO, ...) \
+MACRO(278, __VA_ARGS__) \
+DO_277(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_279(MACRO, ...) \
+MACRO(279, __VA_ARGS__) \
+DO_278(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_280(MACRO, ...) \
+MACRO(280, __VA_ARGS__) \
+DO_279(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_281(MACRO, ...) \
+MACRO(281, __VA_ARGS__) \
+DO_280(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_282(MACRO, ...) \
+MACRO(282, __VA_ARGS__) \
+DO_281(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_283(MACRO, ...) \
+MACRO(283, __VA_ARGS__) \
+DO_282(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_284(MACRO, ...) \
+MACRO(284, __VA_ARGS__) \
+DO_283(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_285(MACRO, ...) \
+MACRO(285, __VA_ARGS__) \
+DO_284(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_286(MACRO, ...) \
+MACRO(286, __VA_ARGS__) \
+DO_285(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_287(MACRO, ...) \
+MACRO(287, __VA_ARGS__) \
+DO_286(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_288(MACRO, ...) \
+MACRO(288, __VA_ARGS__) \
+DO_287(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_289(MACRO, ...) \
+MACRO(289, __VA_ARGS__) \
+DO_288(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_290(MACRO, ...) \
+MACRO(290, __VA_ARGS__) \
+DO_289(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_291(MACRO, ...) \
+MACRO(291, __VA_ARGS__) \
+DO_290(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_292(MACRO, ...) \
+MACRO(292, __VA_ARGS__) \
+DO_291(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_293(MACRO, ...) \
+MACRO(293, __VA_ARGS__) \
+DO_292(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_294(MACRO, ...) \
+MACRO(294, __VA_ARGS__) \
+DO_293(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_295(MACRO, ...) \
+MACRO(295, __VA_ARGS__) \
+DO_294(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_296(MACRO, ...) \
+MACRO(296, __VA_ARGS__) \
+DO_295(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_297(MACRO, ...) \
+MACRO(297, __VA_ARGS__) \
+DO_296(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_298(MACRO, ...) \
+MACRO(298, __VA_ARGS__) \
+DO_297(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_299(MACRO, ...) \
+MACRO(299, __VA_ARGS__) \
+DO_298(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_300(MACRO, ...) \
+MACRO(300, __VA_ARGS__) \
+DO_299(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_301(MACRO, ...) \
+MACRO(301, __VA_ARGS__) \
+DO_300(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_302(MACRO, ...) \
+MACRO(302, __VA_ARGS__) \
+DO_301(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_303(MACRO, ...) \
+MACRO(303, __VA_ARGS__) \
+DO_302(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_304(MACRO, ...) \
+MACRO(304, __VA_ARGS__) \
+DO_303(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_305(MACRO, ...) \
+MACRO(305, __VA_ARGS__) \
+DO_304(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_306(MACRO, ...) \
+MACRO(306, __VA_ARGS__) \
+DO_305(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_307(MACRO, ...) \
+MACRO(307, __VA_ARGS__) \
+DO_306(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_308(MACRO, ...) \
+MACRO(308, __VA_ARGS__) \
+DO_307(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_309(MACRO, ...) \
+MACRO(309, __VA_ARGS__) \
+DO_308(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_310(MACRO, ...) \
+MACRO(310, __VA_ARGS__) \
+DO_309(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_311(MACRO, ...) \
+MACRO(311, __VA_ARGS__) \
+DO_310(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_312(MACRO, ...) \
+MACRO(312, __VA_ARGS__) \
+DO_311(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_313(MACRO, ...) \
+MACRO(313, __VA_ARGS__) \
+DO_312(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_314(MACRO, ...) \
+MACRO(314, __VA_ARGS__) \
+DO_313(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_315(MACRO, ...) \
+MACRO(315, __VA_ARGS__) \
+DO_314(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_316(MACRO, ...) \
+MACRO(316, __VA_ARGS__) \
+DO_315(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_317(MACRO, ...) \
+MACRO(317, __VA_ARGS__) \
+DO_316(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_318(MACRO, ...) \
+MACRO(318, __VA_ARGS__) \
+DO_317(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_319(MACRO, ...) \
+MACRO(319, __VA_ARGS__) \
+DO_318(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_320(MACRO, ...) \
+MACRO(320, __VA_ARGS__) \
+DO_319(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_321(MACRO, ...) \
+MACRO(321, __VA_ARGS__) \
+DO_320(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_322(MACRO, ...) \
+MACRO(322, __VA_ARGS__) \
+DO_321(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_323(MACRO, ...) \
+MACRO(323, __VA_ARGS__) \
+DO_322(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_324(MACRO, ...) \
+MACRO(324, __VA_ARGS__) \
+DO_323(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_325(MACRO, ...) \
+MACRO(325, __VA_ARGS__) \
+DO_324(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_326(MACRO, ...) \
+MACRO(326, __VA_ARGS__) \
+DO_325(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_327(MACRO, ...) \
+MACRO(327, __VA_ARGS__) \
+DO_326(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_328(MACRO, ...) \
+MACRO(328, __VA_ARGS__) \
+DO_327(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_329(MACRO, ...) \
+MACRO(329, __VA_ARGS__) \
+DO_328(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_330(MACRO, ...) \
+MACRO(330, __VA_ARGS__) \
+DO_329(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_331(MACRO, ...) \
+MACRO(331, __VA_ARGS__) \
+DO_330(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_332(MACRO, ...) \
+MACRO(332, __VA_ARGS__) \
+DO_331(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_333(MACRO, ...) \
+MACRO(333, __VA_ARGS__) \
+DO_332(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_334(MACRO, ...) \
+MACRO(334, __VA_ARGS__) \
+DO_333(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_335(MACRO, ...) \
+MACRO(335, __VA_ARGS__) \
+DO_334(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_336(MACRO, ...) \
+MACRO(336, __VA_ARGS__) \
+DO_335(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_337(MACRO, ...) \
+MACRO(337, __VA_ARGS__) \
+DO_336(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_338(MACRO, ...) \
+MACRO(338, __VA_ARGS__) \
+DO_337(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_339(MACRO, ...) \
+MACRO(339, __VA_ARGS__) \
+DO_338(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_340(MACRO, ...) \
+MACRO(340, __VA_ARGS__) \
+DO_339(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_341(MACRO, ...) \
+MACRO(341, __VA_ARGS__) \
+DO_340(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_342(MACRO, ...) \
+MACRO(342, __VA_ARGS__) \
+DO_341(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_343(MACRO, ...) \
+MACRO(343, __VA_ARGS__) \
+DO_342(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_344(MACRO, ...) \
+MACRO(344, __VA_ARGS__) \
+DO_343(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_345(MACRO, ...) \
+MACRO(345, __VA_ARGS__) \
+DO_344(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_346(MACRO, ...) \
+MACRO(346, __VA_ARGS__) \
+DO_345(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_347(MACRO, ...) \
+MACRO(347, __VA_ARGS__) \
+DO_346(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_348(MACRO, ...) \
+MACRO(348, __VA_ARGS__) \
+DO_347(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_349(MACRO, ...) \
+MACRO(349, __VA_ARGS__) \
+DO_348(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_350(MACRO, ...) \
+MACRO(350, __VA_ARGS__) \
+DO_349(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_351(MACRO, ...) \
+MACRO(351, __VA_ARGS__) \
+DO_350(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_352(MACRO, ...) \
+MACRO(352, __VA_ARGS__) \
+DO_351(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_353(MACRO, ...) \
+MACRO(353, __VA_ARGS__) \
+DO_352(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_354(MACRO, ...) \
+MACRO(354, __VA_ARGS__) \
+DO_353(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_355(MACRO, ...) \
+MACRO(355, __VA_ARGS__) \
+DO_354(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_356(MACRO, ...) \
+MACRO(356, __VA_ARGS__) \
+DO_355(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_357(MACRO, ...) \
+MACRO(357, __VA_ARGS__) \
+DO_356(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_358(MACRO, ...) \
+MACRO(358, __VA_ARGS__) \
+DO_357(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_359(MACRO, ...) \
+MACRO(359, __VA_ARGS__) \
+DO_358(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_360(MACRO, ...) \
+MACRO(360, __VA_ARGS__) \
+DO_359(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_361(MACRO, ...) \
+MACRO(361, __VA_ARGS__) \
+DO_360(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_362(MACRO, ...) \
+MACRO(362, __VA_ARGS__) \
+DO_361(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_363(MACRO, ...) \
+MACRO(363, __VA_ARGS__) \
+DO_362(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_364(MACRO, ...) \
+MACRO(364, __VA_ARGS__) \
+DO_363(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_365(MACRO, ...) \
+MACRO(365, __VA_ARGS__) \
+DO_364(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_366(MACRO, ...) \
+MACRO(366, __VA_ARGS__) \
+DO_365(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_367(MACRO, ...) \
+MACRO(367, __VA_ARGS__) \
+DO_366(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_368(MACRO, ...) \
+MACRO(368, __VA_ARGS__) \
+DO_367(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_369(MACRO, ...) \
+MACRO(369, __VA_ARGS__) \
+DO_368(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_370(MACRO, ...) \
+MACRO(370, __VA_ARGS__) \
+DO_369(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_371(MACRO, ...) \
+MACRO(371, __VA_ARGS__) \
+DO_370(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_372(MACRO, ...) \
+MACRO(372, __VA_ARGS__) \
+DO_371(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_373(MACRO, ...) \
+MACRO(373, __VA_ARGS__) \
+DO_372(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_374(MACRO, ...) \
+MACRO(374, __VA_ARGS__) \
+DO_373(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_375(MACRO, ...) \
+MACRO(375, __VA_ARGS__) \
+DO_374(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_376(MACRO, ...) \
+MACRO(376, __VA_ARGS__) \
+DO_375(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_377(MACRO, ...) \
+MACRO(377, __VA_ARGS__) \
+DO_376(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_378(MACRO, ...) \
+MACRO(378, __VA_ARGS__) \
+DO_377(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_379(MACRO, ...) \
+MACRO(379, __VA_ARGS__) \
+DO_378(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_380(MACRO, ...) \
+MACRO(380, __VA_ARGS__) \
+DO_379(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_381(MACRO, ...) \
+MACRO(381, __VA_ARGS__) \
+DO_380(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_382(MACRO, ...) \
+MACRO(382, __VA_ARGS__) \
+DO_381(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_383(MACRO, ...) \
+MACRO(383, __VA_ARGS__) \
+DO_382(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_384(MACRO, ...) \
+MACRO(384, __VA_ARGS__) \
+DO_383(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_385(MACRO, ...) \
+MACRO(385, __VA_ARGS__) \
+DO_384(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_386(MACRO, ...) \
+MACRO(386, __VA_ARGS__) \
+DO_385(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_387(MACRO, ...) \
+MACRO(387, __VA_ARGS__) \
+DO_386(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_388(MACRO, ...) \
+MACRO(388, __VA_ARGS__) \
+DO_387(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_389(MACRO, ...) \
+MACRO(389, __VA_ARGS__) \
+DO_388(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_390(MACRO, ...) \
+MACRO(390, __VA_ARGS__) \
+DO_389(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_391(MACRO, ...) \
+MACRO(391, __VA_ARGS__) \
+DO_390(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_392(MACRO, ...) \
+MACRO(392, __VA_ARGS__) \
+DO_391(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_393(MACRO, ...) \
+MACRO(393, __VA_ARGS__) \
+DO_392(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_394(MACRO, ...) \
+MACRO(394, __VA_ARGS__) \
+DO_393(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_395(MACRO, ...) \
+MACRO(395, __VA_ARGS__) \
+DO_394(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_396(MACRO, ...) \
+MACRO(396, __VA_ARGS__) \
+DO_395(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_397(MACRO, ...) \
+MACRO(397, __VA_ARGS__) \
+DO_396(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_398(MACRO, ...) \
+MACRO(398, __VA_ARGS__) \
+DO_397(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_399(MACRO, ...) \
+MACRO(399, __VA_ARGS__) \
+DO_398(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_400(MACRO, ...) \
+MACRO(400, __VA_ARGS__) \
+DO_399(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_401(MACRO, ...) \
+MACRO(401, __VA_ARGS__) \
+DO_400(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_402(MACRO, ...) \
+MACRO(402, __VA_ARGS__) \
+DO_401(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_403(MACRO, ...) \
+MACRO(403, __VA_ARGS__) \
+DO_402(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_404(MACRO, ...) \
+MACRO(404, __VA_ARGS__) \
+DO_403(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_405(MACRO, ...) \
+MACRO(405, __VA_ARGS__) \
+DO_404(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_406(MACRO, ...) \
+MACRO(406, __VA_ARGS__) \
+DO_405(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_407(MACRO, ...) \
+MACRO(407, __VA_ARGS__) \
+DO_406(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_408(MACRO, ...) \
+MACRO(408, __VA_ARGS__) \
+DO_407(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_409(MACRO, ...) \
+MACRO(409, __VA_ARGS__) \
+DO_408(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_410(MACRO, ...) \
+MACRO(410, __VA_ARGS__) \
+DO_409(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_411(MACRO, ...) \
+MACRO(411, __VA_ARGS__) \
+DO_410(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_412(MACRO, ...) \
+MACRO(412, __VA_ARGS__) \
+DO_411(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_413(MACRO, ...) \
+MACRO(413, __VA_ARGS__) \
+DO_412(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_414(MACRO, ...) \
+MACRO(414, __VA_ARGS__) \
+DO_413(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_415(MACRO, ...) \
+MACRO(415, __VA_ARGS__) \
+DO_414(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_416(MACRO, ...) \
+MACRO(416, __VA_ARGS__) \
+DO_415(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_417(MACRO, ...) \
+MACRO(417, __VA_ARGS__) \
+DO_416(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_418(MACRO, ...) \
+MACRO(418, __VA_ARGS__) \
+DO_417(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_419(MACRO, ...) \
+MACRO(419, __VA_ARGS__) \
+DO_418(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_420(MACRO, ...) \
+MACRO(420, __VA_ARGS__) \
+DO_419(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_421(MACRO, ...) \
+MACRO(421, __VA_ARGS__) \
+DO_420(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_422(MACRO, ...) \
+MACRO(422, __VA_ARGS__) \
+DO_421(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_423(MACRO, ...) \
+MACRO(423, __VA_ARGS__) \
+DO_422(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_424(MACRO, ...) \
+MACRO(424, __VA_ARGS__) \
+DO_423(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_425(MACRO, ...) \
+MACRO(425, __VA_ARGS__) \
+DO_424(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_426(MACRO, ...) \
+MACRO(426, __VA_ARGS__) \
+DO_425(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_427(MACRO, ...) \
+MACRO(427, __VA_ARGS__) \
+DO_426(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_428(MACRO, ...) \
+MACRO(428, __VA_ARGS__) \
+DO_427(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_429(MACRO, ...) \
+MACRO(429, __VA_ARGS__) \
+DO_428(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_430(MACRO, ...) \
+MACRO(430, __VA_ARGS__) \
+DO_429(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_431(MACRO, ...) \
+MACRO(431, __VA_ARGS__) \
+DO_430(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_432(MACRO, ...) \
+MACRO(432, __VA_ARGS__) \
+DO_431(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_433(MACRO, ...) \
+MACRO(433, __VA_ARGS__) \
+DO_432(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_434(MACRO, ...) \
+MACRO(434, __VA_ARGS__) \
+DO_433(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_435(MACRO, ...) \
+MACRO(435, __VA_ARGS__) \
+DO_434(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_436(MACRO, ...) \
+MACRO(436, __VA_ARGS__) \
+DO_435(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_437(MACRO, ...) \
+MACRO(437, __VA_ARGS__) \
+DO_436(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_438(MACRO, ...) \
+MACRO(438, __VA_ARGS__) \
+DO_437(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_439(MACRO, ...) \
+MACRO(439, __VA_ARGS__) \
+DO_438(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_440(MACRO, ...) \
+MACRO(440, __VA_ARGS__) \
+DO_439(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_441(MACRO, ...) \
+MACRO(441, __VA_ARGS__) \
+DO_440(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_442(MACRO, ...) \
+MACRO(442, __VA_ARGS__) \
+DO_441(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_443(MACRO, ...) \
+MACRO(443, __VA_ARGS__) \
+DO_442(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_444(MACRO, ...) \
+MACRO(444, __VA_ARGS__) \
+DO_443(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_445(MACRO, ...) \
+MACRO(445, __VA_ARGS__) \
+DO_444(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_446(MACRO, ...) \
+MACRO(446, __VA_ARGS__) \
+DO_445(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_447(MACRO, ...) \
+MACRO(447, __VA_ARGS__) \
+DO_446(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_448(MACRO, ...) \
+MACRO(448, __VA_ARGS__) \
+DO_447(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_449(MACRO, ...) \
+MACRO(449, __VA_ARGS__) \
+DO_448(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_450(MACRO, ...) \
+MACRO(450, __VA_ARGS__) \
+DO_449(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_451(MACRO, ...) \
+MACRO(451, __VA_ARGS__) \
+DO_450(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_452(MACRO, ...) \
+MACRO(452, __VA_ARGS__) \
+DO_451(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_453(MACRO, ...) \
+MACRO(453, __VA_ARGS__) \
+DO_452(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_454(MACRO, ...) \
+MACRO(454, __VA_ARGS__) \
+DO_453(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_455(MACRO, ...) \
+MACRO(455, __VA_ARGS__) \
+DO_454(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_456(MACRO, ...) \
+MACRO(456, __VA_ARGS__) \
+DO_455(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_457(MACRO, ...) \
+MACRO(457, __VA_ARGS__) \
+DO_456(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_458(MACRO, ...) \
+MACRO(458, __VA_ARGS__) \
+DO_457(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_459(MACRO, ...) \
+MACRO(459, __VA_ARGS__) \
+DO_458(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_460(MACRO, ...) \
+MACRO(460, __VA_ARGS__) \
+DO_459(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_461(MACRO, ...) \
+MACRO(461, __VA_ARGS__) \
+DO_460(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_462(MACRO, ...) \
+MACRO(462, __VA_ARGS__) \
+DO_461(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_463(MACRO, ...) \
+MACRO(463, __VA_ARGS__) \
+DO_462(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_464(MACRO, ...) \
+MACRO(464, __VA_ARGS__) \
+DO_463(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_465(MACRO, ...) \
+MACRO(465, __VA_ARGS__) \
+DO_464(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_466(MACRO, ...) \
+MACRO(466, __VA_ARGS__) \
+DO_465(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_467(MACRO, ...) \
+MACRO(467, __VA_ARGS__) \
+DO_466(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_468(MACRO, ...) \
+MACRO(468, __VA_ARGS__) \
+DO_467(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_469(MACRO, ...) \
+MACRO(469, __VA_ARGS__) \
+DO_468(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_470(MACRO, ...) \
+MACRO(470, __VA_ARGS__) \
+DO_469(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_471(MACRO, ...) \
+MACRO(471, __VA_ARGS__) \
+DO_470(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_472(MACRO, ...) \
+MACRO(472, __VA_ARGS__) \
+DO_471(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_473(MACRO, ...) \
+MACRO(473, __VA_ARGS__) \
+DO_472(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_474(MACRO, ...) \
+MACRO(474, __VA_ARGS__) \
+DO_473(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_475(MACRO, ...) \
+MACRO(475, __VA_ARGS__) \
+DO_474(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_476(MACRO, ...) \
+MACRO(476, __VA_ARGS__) \
+DO_475(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_477(MACRO, ...) \
+MACRO(477, __VA_ARGS__) \
+DO_476(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_478(MACRO, ...) \
+MACRO(478, __VA_ARGS__) \
+DO_477(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_479(MACRO, ...) \
+MACRO(479, __VA_ARGS__) \
+DO_478(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_480(MACRO, ...) \
+MACRO(480, __VA_ARGS__) \
+DO_479(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_481(MACRO, ...) \
+MACRO(481, __VA_ARGS__) \
+DO_480(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_482(MACRO, ...) \
+MACRO(482, __VA_ARGS__) \
+DO_481(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_483(MACRO, ...) \
+MACRO(483, __VA_ARGS__) \
+DO_482(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_484(MACRO, ...) \
+MACRO(484, __VA_ARGS__) \
+DO_483(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_485(MACRO, ...) \
+MACRO(485, __VA_ARGS__) \
+DO_484(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_486(MACRO, ...) \
+MACRO(486, __VA_ARGS__) \
+DO_485(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_487(MACRO, ...) \
+MACRO(487, __VA_ARGS__) \
+DO_486(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_488(MACRO, ...) \
+MACRO(488, __VA_ARGS__) \
+DO_487(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_489(MACRO, ...) \
+MACRO(489, __VA_ARGS__) \
+DO_488(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_490(MACRO, ...) \
+MACRO(490, __VA_ARGS__) \
+DO_489(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_491(MACRO, ...) \
+MACRO(491, __VA_ARGS__) \
+DO_490(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_492(MACRO, ...) \
+MACRO(492, __VA_ARGS__) \
+DO_491(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_493(MACRO, ...) \
+MACRO(493, __VA_ARGS__) \
+DO_492(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_494(MACRO, ...) \
+MACRO(494, __VA_ARGS__) \
+DO_493(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_495(MACRO, ...) \
+MACRO(495, __VA_ARGS__) \
+DO_494(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_496(MACRO, ...) \
+MACRO(496, __VA_ARGS__) \
+DO_495(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_497(MACRO, ...) \
+MACRO(497, __VA_ARGS__) \
+DO_496(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_498(MACRO, ...) \
+MACRO(498, __VA_ARGS__) \
+DO_497(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_499(MACRO, ...) \
+MACRO(499, __VA_ARGS__) \
+DO_498(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_500(MACRO, ...) \
+MACRO(500, __VA_ARGS__) \
+DO_499(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_501(MACRO, ...) \
+MACRO(501, __VA_ARGS__) \
+DO_500(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_502(MACRO, ...) \
+MACRO(502, __VA_ARGS__) \
+DO_501(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_503(MACRO, ...) \
+MACRO(503, __VA_ARGS__) \
+DO_502(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_504(MACRO, ...) \
+MACRO(504, __VA_ARGS__) \
+DO_503(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_505(MACRO, ...) \
+MACRO(505, __VA_ARGS__) \
+DO_504(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_506(MACRO, ...) \
+MACRO(506, __VA_ARGS__) \
+DO_505(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_507(MACRO, ...) \
+MACRO(507, __VA_ARGS__) \
+DO_506(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_508(MACRO, ...) \
+MACRO(508, __VA_ARGS__) \
+DO_507(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_509(MACRO, ...) \
+MACRO(509, __VA_ARGS__) \
+DO_508(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_510(MACRO, ...) \
+MACRO(510, __VA_ARGS__) \
+DO_509(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_511(MACRO, ...) \
+MACRO(511, __VA_ARGS__) \
+DO_510(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_512(MACRO, ...) \
+MACRO(512, __VA_ARGS__) \
+DO_511(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_513(MACRO, ...) \
+MACRO(513, __VA_ARGS__) \
+DO_512(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_514(MACRO, ...) \
+MACRO(514, __VA_ARGS__) \
+DO_513(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_515(MACRO, ...) \
+MACRO(515, __VA_ARGS__) \
+DO_514(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_516(MACRO, ...) \
+MACRO(516, __VA_ARGS__) \
+DO_515(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_517(MACRO, ...) \
+MACRO(517, __VA_ARGS__) \
+DO_516(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_518(MACRO, ...) \
+MACRO(518, __VA_ARGS__) \
+DO_517(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_519(MACRO, ...) \
+MACRO(519, __VA_ARGS__) \
+DO_518(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_520(MACRO, ...) \
+MACRO(520, __VA_ARGS__) \
+DO_519(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_521(MACRO, ...) \
+MACRO(521, __VA_ARGS__) \
+DO_520(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_522(MACRO, ...) \
+MACRO(522, __VA_ARGS__) \
+DO_521(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_523(MACRO, ...) \
+MACRO(523, __VA_ARGS__) \
+DO_522(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_524(MACRO, ...) \
+MACRO(524, __VA_ARGS__) \
+DO_523(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_525(MACRO, ...) \
+MACRO(525, __VA_ARGS__) \
+DO_524(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_526(MACRO, ...) \
+MACRO(526, __VA_ARGS__) \
+DO_525(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_527(MACRO, ...) \
+MACRO(527, __VA_ARGS__) \
+DO_526(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_528(MACRO, ...) \
+MACRO(528, __VA_ARGS__) \
+DO_527(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_529(MACRO, ...) \
+MACRO(529, __VA_ARGS__) \
+DO_528(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_530(MACRO, ...) \
+MACRO(530, __VA_ARGS__) \
+DO_529(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_531(MACRO, ...) \
+MACRO(531, __VA_ARGS__) \
+DO_530(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_532(MACRO, ...) \
+MACRO(532, __VA_ARGS__) \
+DO_531(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_533(MACRO, ...) \
+MACRO(533, __VA_ARGS__) \
+DO_532(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_534(MACRO, ...) \
+MACRO(534, __VA_ARGS__) \
+DO_533(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_535(MACRO, ...) \
+MACRO(535, __VA_ARGS__) \
+DO_534(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_536(MACRO, ...) \
+MACRO(536, __VA_ARGS__) \
+DO_535(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_537(MACRO, ...) \
+MACRO(537, __VA_ARGS__) \
+DO_536(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_538(MACRO, ...) \
+MACRO(538, __VA_ARGS__) \
+DO_537(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_539(MACRO, ...) \
+MACRO(539, __VA_ARGS__) \
+DO_538(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_540(MACRO, ...) \
+MACRO(540, __VA_ARGS__) \
+DO_539(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_541(MACRO, ...) \
+MACRO(541, __VA_ARGS__) \
+DO_540(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_542(MACRO, ...) \
+MACRO(542, __VA_ARGS__) \
+DO_541(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_543(MACRO, ...) \
+MACRO(543, __VA_ARGS__) \
+DO_542(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_544(MACRO, ...) \
+MACRO(544, __VA_ARGS__) \
+DO_543(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_545(MACRO, ...) \
+MACRO(545, __VA_ARGS__) \
+DO_544(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_546(MACRO, ...) \
+MACRO(546, __VA_ARGS__) \
+DO_545(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_547(MACRO, ...) \
+MACRO(547, __VA_ARGS__) \
+DO_546(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_548(MACRO, ...) \
+MACRO(548, __VA_ARGS__) \
+DO_547(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_549(MACRO, ...) \
+MACRO(549, __VA_ARGS__) \
+DO_548(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_550(MACRO, ...) \
+MACRO(550, __VA_ARGS__) \
+DO_549(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_551(MACRO, ...) \
+MACRO(551, __VA_ARGS__) \
+DO_550(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_552(MACRO, ...) \
+MACRO(552, __VA_ARGS__) \
+DO_551(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_553(MACRO, ...) \
+MACRO(553, __VA_ARGS__) \
+DO_552(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_554(MACRO, ...) \
+MACRO(554, __VA_ARGS__) \
+DO_553(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_555(MACRO, ...) \
+MACRO(555, __VA_ARGS__) \
+DO_554(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_556(MACRO, ...) \
+MACRO(556, __VA_ARGS__) \
+DO_555(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_557(MACRO, ...) \
+MACRO(557, __VA_ARGS__) \
+DO_556(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_558(MACRO, ...) \
+MACRO(558, __VA_ARGS__) \
+DO_557(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_559(MACRO, ...) \
+MACRO(559, __VA_ARGS__) \
+DO_558(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_560(MACRO, ...) \
+MACRO(560, __VA_ARGS__) \
+DO_559(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_561(MACRO, ...) \
+MACRO(561, __VA_ARGS__) \
+DO_560(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_562(MACRO, ...) \
+MACRO(562, __VA_ARGS__) \
+DO_561(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_563(MACRO, ...) \
+MACRO(563, __VA_ARGS__) \
+DO_562(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_564(MACRO, ...) \
+MACRO(564, __VA_ARGS__) \
+DO_563(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_565(MACRO, ...) \
+MACRO(565, __VA_ARGS__) \
+DO_564(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_566(MACRO, ...) \
+MACRO(566, __VA_ARGS__) \
+DO_565(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_567(MACRO, ...) \
+MACRO(567, __VA_ARGS__) \
+DO_566(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_568(MACRO, ...) \
+MACRO(568, __VA_ARGS__) \
+DO_567(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_569(MACRO, ...) \
+MACRO(569, __VA_ARGS__) \
+DO_568(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_570(MACRO, ...) \
+MACRO(570, __VA_ARGS__) \
+DO_569(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_571(MACRO, ...) \
+MACRO(571, __VA_ARGS__) \
+DO_570(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_572(MACRO, ...) \
+MACRO(572, __VA_ARGS__) \
+DO_571(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_573(MACRO, ...) \
+MACRO(573, __VA_ARGS__) \
+DO_572(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_574(MACRO, ...) \
+MACRO(574, __VA_ARGS__) \
+DO_573(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_575(MACRO, ...) \
+MACRO(575, __VA_ARGS__) \
+DO_574(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_576(MACRO, ...) \
+MACRO(576, __VA_ARGS__) \
+DO_575(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_577(MACRO, ...) \
+MACRO(577, __VA_ARGS__) \
+DO_576(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_578(MACRO, ...) \
+MACRO(578, __VA_ARGS__) \
+DO_577(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_579(MACRO, ...) \
+MACRO(579, __VA_ARGS__) \
+DO_578(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_580(MACRO, ...) \
+MACRO(580, __VA_ARGS__) \
+DO_579(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_581(MACRO, ...) \
+MACRO(581, __VA_ARGS__) \
+DO_580(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_582(MACRO, ...) \
+MACRO(582, __VA_ARGS__) \
+DO_581(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_583(MACRO, ...) \
+MACRO(583, __VA_ARGS__) \
+DO_582(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_584(MACRO, ...) \
+MACRO(584, __VA_ARGS__) \
+DO_583(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_585(MACRO, ...) \
+MACRO(585, __VA_ARGS__) \
+DO_584(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_586(MACRO, ...) \
+MACRO(586, __VA_ARGS__) \
+DO_585(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_587(MACRO, ...) \
+MACRO(587, __VA_ARGS__) \
+DO_586(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_588(MACRO, ...) \
+MACRO(588, __VA_ARGS__) \
+DO_587(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_589(MACRO, ...) \
+MACRO(589, __VA_ARGS__) \
+DO_588(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_590(MACRO, ...) \
+MACRO(590, __VA_ARGS__) \
+DO_589(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_591(MACRO, ...) \
+MACRO(591, __VA_ARGS__) \
+DO_590(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_592(MACRO, ...) \
+MACRO(592, __VA_ARGS__) \
+DO_591(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_593(MACRO, ...) \
+MACRO(593, __VA_ARGS__) \
+DO_592(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_594(MACRO, ...) \
+MACRO(594, __VA_ARGS__) \
+DO_593(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_595(MACRO, ...) \
+MACRO(595, __VA_ARGS__) \
+DO_594(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_596(MACRO, ...) \
+MACRO(596, __VA_ARGS__) \
+DO_595(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_597(MACRO, ...) \
+MACRO(597, __VA_ARGS__) \
+DO_596(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_598(MACRO, ...) \
+MACRO(598, __VA_ARGS__) \
+DO_597(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_599(MACRO, ...) \
+MACRO(599, __VA_ARGS__) \
+DO_598(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_600(MACRO, ...) \
+MACRO(600, __VA_ARGS__) \
+DO_599(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_601(MACRO, ...) \
+MACRO(601, __VA_ARGS__) \
+DO_600(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_602(MACRO, ...) \
+MACRO(602, __VA_ARGS__) \
+DO_601(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_603(MACRO, ...) \
+MACRO(603, __VA_ARGS__) \
+DO_602(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_604(MACRO, ...) \
+MACRO(604, __VA_ARGS__) \
+DO_603(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_605(MACRO, ...) \
+MACRO(605, __VA_ARGS__) \
+DO_604(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_606(MACRO, ...) \
+MACRO(606, __VA_ARGS__) \
+DO_605(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_607(MACRO, ...) \
+MACRO(607, __VA_ARGS__) \
+DO_606(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_608(MACRO, ...) \
+MACRO(608, __VA_ARGS__) \
+DO_607(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_609(MACRO, ...) \
+MACRO(609, __VA_ARGS__) \
+DO_608(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_610(MACRO, ...) \
+MACRO(610, __VA_ARGS__) \
+DO_609(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_611(MACRO, ...) \
+MACRO(611, __VA_ARGS__) \
+DO_610(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_612(MACRO, ...) \
+MACRO(612, __VA_ARGS__) \
+DO_611(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_613(MACRO, ...) \
+MACRO(613, __VA_ARGS__) \
+DO_612(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_614(MACRO, ...) \
+MACRO(614, __VA_ARGS__) \
+DO_613(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_615(MACRO, ...) \
+MACRO(615, __VA_ARGS__) \
+DO_614(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_616(MACRO, ...) \
+MACRO(616, __VA_ARGS__) \
+DO_615(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_617(MACRO, ...) \
+MACRO(617, __VA_ARGS__) \
+DO_616(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_618(MACRO, ...) \
+MACRO(618, __VA_ARGS__) \
+DO_617(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_619(MACRO, ...) \
+MACRO(619, __VA_ARGS__) \
+DO_618(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_620(MACRO, ...) \
+MACRO(620, __VA_ARGS__) \
+DO_619(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_621(MACRO, ...) \
+MACRO(621, __VA_ARGS__) \
+DO_620(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_622(MACRO, ...) \
+MACRO(622, __VA_ARGS__) \
+DO_621(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_623(MACRO, ...) \
+MACRO(623, __VA_ARGS__) \
+DO_622(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_624(MACRO, ...) \
+MACRO(624, __VA_ARGS__) \
+DO_623(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_625(MACRO, ...) \
+MACRO(625, __VA_ARGS__) \
+DO_624(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_626(MACRO, ...) \
+MACRO(626, __VA_ARGS__) \
+DO_625(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_627(MACRO, ...) \
+MACRO(627, __VA_ARGS__) \
+DO_626(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_628(MACRO, ...) \
+MACRO(628, __VA_ARGS__) \
+DO_627(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_629(MACRO, ...) \
+MACRO(629, __VA_ARGS__) \
+DO_628(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_630(MACRO, ...) \
+MACRO(630, __VA_ARGS__) \
+DO_629(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_631(MACRO, ...) \
+MACRO(631, __VA_ARGS__) \
+DO_630(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_632(MACRO, ...) \
+MACRO(632, __VA_ARGS__) \
+DO_631(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_633(MACRO, ...) \
+MACRO(633, __VA_ARGS__) \
+DO_632(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_634(MACRO, ...) \
+MACRO(634, __VA_ARGS__) \
+DO_633(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_635(MACRO, ...) \
+MACRO(635, __VA_ARGS__) \
+DO_634(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_636(MACRO, ...) \
+MACRO(636, __VA_ARGS__) \
+DO_635(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_637(MACRO, ...) \
+MACRO(637, __VA_ARGS__) \
+DO_636(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_638(MACRO, ...) \
+MACRO(638, __VA_ARGS__) \
+DO_637(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_639(MACRO, ...) \
+MACRO(639, __VA_ARGS__) \
+DO_638(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_640(MACRO, ...) \
+MACRO(640, __VA_ARGS__) \
+DO_639(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_641(MACRO, ...) \
+MACRO(641, __VA_ARGS__) \
+DO_640(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_642(MACRO, ...) \
+MACRO(642, __VA_ARGS__) \
+DO_641(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_643(MACRO, ...) \
+MACRO(643, __VA_ARGS__) \
+DO_642(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_644(MACRO, ...) \
+MACRO(644, __VA_ARGS__) \
+DO_643(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_645(MACRO, ...) \
+MACRO(645, __VA_ARGS__) \
+DO_644(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_646(MACRO, ...) \
+MACRO(646, __VA_ARGS__) \
+DO_645(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_647(MACRO, ...) \
+MACRO(647, __VA_ARGS__) \
+DO_646(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_648(MACRO, ...) \
+MACRO(648, __VA_ARGS__) \
+DO_647(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_649(MACRO, ...) \
+MACRO(649, __VA_ARGS__) \
+DO_648(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_650(MACRO, ...) \
+MACRO(650, __VA_ARGS__) \
+DO_649(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_651(MACRO, ...) \
+MACRO(651, __VA_ARGS__) \
+DO_650(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_652(MACRO, ...) \
+MACRO(652, __VA_ARGS__) \
+DO_651(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_653(MACRO, ...) \
+MACRO(653, __VA_ARGS__) \
+DO_652(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_654(MACRO, ...) \
+MACRO(654, __VA_ARGS__) \
+DO_653(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_655(MACRO, ...) \
+MACRO(655, __VA_ARGS__) \
+DO_654(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_656(MACRO, ...) \
+MACRO(656, __VA_ARGS__) \
+DO_655(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_657(MACRO, ...) \
+MACRO(657, __VA_ARGS__) \
+DO_656(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_658(MACRO, ...) \
+MACRO(658, __VA_ARGS__) \
+DO_657(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_659(MACRO, ...) \
+MACRO(659, __VA_ARGS__) \
+DO_658(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_660(MACRO, ...) \
+MACRO(660, __VA_ARGS__) \
+DO_659(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_661(MACRO, ...) \
+MACRO(661, __VA_ARGS__) \
+DO_660(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_662(MACRO, ...) \
+MACRO(662, __VA_ARGS__) \
+DO_661(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_663(MACRO, ...) \
+MACRO(663, __VA_ARGS__) \
+DO_662(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_664(MACRO, ...) \
+MACRO(664, __VA_ARGS__) \
+DO_663(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_665(MACRO, ...) \
+MACRO(665, __VA_ARGS__) \
+DO_664(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_666(MACRO, ...) \
+MACRO(666, __VA_ARGS__) \
+DO_665(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_667(MACRO, ...) \
+MACRO(667, __VA_ARGS__) \
+DO_666(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_668(MACRO, ...) \
+MACRO(668, __VA_ARGS__) \
+DO_667(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_669(MACRO, ...) \
+MACRO(669, __VA_ARGS__) \
+DO_668(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_670(MACRO, ...) \
+MACRO(670, __VA_ARGS__) \
+DO_669(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_671(MACRO, ...) \
+MACRO(671, __VA_ARGS__) \
+DO_670(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_672(MACRO, ...) \
+MACRO(672, __VA_ARGS__) \
+DO_671(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_673(MACRO, ...) \
+MACRO(673, __VA_ARGS__) \
+DO_672(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_674(MACRO, ...) \
+MACRO(674, __VA_ARGS__) \
+DO_673(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_675(MACRO, ...) \
+MACRO(675, __VA_ARGS__) \
+DO_674(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_676(MACRO, ...) \
+MACRO(676, __VA_ARGS__) \
+DO_675(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_677(MACRO, ...) \
+MACRO(677, __VA_ARGS__) \
+DO_676(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_678(MACRO, ...) \
+MACRO(678, __VA_ARGS__) \
+DO_677(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_679(MACRO, ...) \
+MACRO(679, __VA_ARGS__) \
+DO_678(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_680(MACRO, ...) \
+MACRO(680, __VA_ARGS__) \
+DO_679(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_681(MACRO, ...) \
+MACRO(681, __VA_ARGS__) \
+DO_680(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_682(MACRO, ...) \
+MACRO(682, __VA_ARGS__) \
+DO_681(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_683(MACRO, ...) \
+MACRO(683, __VA_ARGS__) \
+DO_682(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_684(MACRO, ...) \
+MACRO(684, __VA_ARGS__) \
+DO_683(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_685(MACRO, ...) \
+MACRO(685, __VA_ARGS__) \
+DO_684(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_686(MACRO, ...) \
+MACRO(686, __VA_ARGS__) \
+DO_685(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_687(MACRO, ...) \
+MACRO(687, __VA_ARGS__) \
+DO_686(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_688(MACRO, ...) \
+MACRO(688, __VA_ARGS__) \
+DO_687(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_689(MACRO, ...) \
+MACRO(689, __VA_ARGS__) \
+DO_688(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_690(MACRO, ...) \
+MACRO(690, __VA_ARGS__) \
+DO_689(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_691(MACRO, ...) \
+MACRO(691, __VA_ARGS__) \
+DO_690(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_692(MACRO, ...) \
+MACRO(692, __VA_ARGS__) \
+DO_691(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_693(MACRO, ...) \
+MACRO(693, __VA_ARGS__) \
+DO_692(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_694(MACRO, ...) \
+MACRO(694, __VA_ARGS__) \
+DO_693(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_695(MACRO, ...) \
+MACRO(695, __VA_ARGS__) \
+DO_694(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_696(MACRO, ...) \
+MACRO(696, __VA_ARGS__) \
+DO_695(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_697(MACRO, ...) \
+MACRO(697, __VA_ARGS__) \
+DO_696(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_698(MACRO, ...) \
+MACRO(698, __VA_ARGS__) \
+DO_697(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_699(MACRO, ...) \
+MACRO(699, __VA_ARGS__) \
+DO_698(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_700(MACRO, ...) \
+MACRO(700, __VA_ARGS__) \
+DO_699(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_701(MACRO, ...) \
+MACRO(701, __VA_ARGS__) \
+DO_700(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_702(MACRO, ...) \
+MACRO(702, __VA_ARGS__) \
+DO_701(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_703(MACRO, ...) \
+MACRO(703, __VA_ARGS__) \
+DO_702(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_704(MACRO, ...) \
+MACRO(704, __VA_ARGS__) \
+DO_703(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_705(MACRO, ...) \
+MACRO(705, __VA_ARGS__) \
+DO_704(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_706(MACRO, ...) \
+MACRO(706, __VA_ARGS__) \
+DO_705(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_707(MACRO, ...) \
+MACRO(707, __VA_ARGS__) \
+DO_706(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_708(MACRO, ...) \
+MACRO(708, __VA_ARGS__) \
+DO_707(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_709(MACRO, ...) \
+MACRO(709, __VA_ARGS__) \
+DO_708(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_710(MACRO, ...) \
+MACRO(710, __VA_ARGS__) \
+DO_709(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_711(MACRO, ...) \
+MACRO(711, __VA_ARGS__) \
+DO_710(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_712(MACRO, ...) \
+MACRO(712, __VA_ARGS__) \
+DO_711(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_713(MACRO, ...) \
+MACRO(713, __VA_ARGS__) \
+DO_712(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_714(MACRO, ...) \
+MACRO(714, __VA_ARGS__) \
+DO_713(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_715(MACRO, ...) \
+MACRO(715, __VA_ARGS__) \
+DO_714(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_716(MACRO, ...) \
+MACRO(716, __VA_ARGS__) \
+DO_715(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_717(MACRO, ...) \
+MACRO(717, __VA_ARGS__) \
+DO_716(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_718(MACRO, ...) \
+MACRO(718, __VA_ARGS__) \
+DO_717(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_719(MACRO, ...) \
+MACRO(719, __VA_ARGS__) \
+DO_718(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_720(MACRO, ...) \
+MACRO(720, __VA_ARGS__) \
+DO_719(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_721(MACRO, ...) \
+MACRO(721, __VA_ARGS__) \
+DO_720(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_722(MACRO, ...) \
+MACRO(722, __VA_ARGS__) \
+DO_721(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_723(MACRO, ...) \
+MACRO(723, __VA_ARGS__) \
+DO_722(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_724(MACRO, ...) \
+MACRO(724, __VA_ARGS__) \
+DO_723(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_725(MACRO, ...) \
+MACRO(725, __VA_ARGS__) \
+DO_724(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_726(MACRO, ...) \
+MACRO(726, __VA_ARGS__) \
+DO_725(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_727(MACRO, ...) \
+MACRO(727, __VA_ARGS__) \
+DO_726(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_728(MACRO, ...) \
+MACRO(728, __VA_ARGS__) \
+DO_727(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_729(MACRO, ...) \
+MACRO(729, __VA_ARGS__) \
+DO_728(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_730(MACRO, ...) \
+MACRO(730, __VA_ARGS__) \
+DO_729(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_731(MACRO, ...) \
+MACRO(731, __VA_ARGS__) \
+DO_730(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_732(MACRO, ...) \
+MACRO(732, __VA_ARGS__) \
+DO_731(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_733(MACRO, ...) \
+MACRO(733, __VA_ARGS__) \
+DO_732(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_734(MACRO, ...) \
+MACRO(734, __VA_ARGS__) \
+DO_733(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_735(MACRO, ...) \
+MACRO(735, __VA_ARGS__) \
+DO_734(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_736(MACRO, ...) \
+MACRO(736, __VA_ARGS__) \
+DO_735(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_737(MACRO, ...) \
+MACRO(737, __VA_ARGS__) \
+DO_736(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_738(MACRO, ...) \
+MACRO(738, __VA_ARGS__) \
+DO_737(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_739(MACRO, ...) \
+MACRO(739, __VA_ARGS__) \
+DO_738(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_740(MACRO, ...) \
+MACRO(740, __VA_ARGS__) \
+DO_739(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_741(MACRO, ...) \
+MACRO(741, __VA_ARGS__) \
+DO_740(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_742(MACRO, ...) \
+MACRO(742, __VA_ARGS__) \
+DO_741(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_743(MACRO, ...) \
+MACRO(743, __VA_ARGS__) \
+DO_742(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_744(MACRO, ...) \
+MACRO(744, __VA_ARGS__) \
+DO_743(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_745(MACRO, ...) \
+MACRO(745, __VA_ARGS__) \
+DO_744(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_746(MACRO, ...) \
+MACRO(746, __VA_ARGS__) \
+DO_745(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_747(MACRO, ...) \
+MACRO(747, __VA_ARGS__) \
+DO_746(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_748(MACRO, ...) \
+MACRO(748, __VA_ARGS__) \
+DO_747(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_749(MACRO, ...) \
+MACRO(749, __VA_ARGS__) \
+DO_748(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_750(MACRO, ...) \
+MACRO(750, __VA_ARGS__) \
+DO_749(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_751(MACRO, ...) \
+MACRO(751, __VA_ARGS__) \
+DO_750(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_752(MACRO, ...) \
+MACRO(752, __VA_ARGS__) \
+DO_751(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_753(MACRO, ...) \
+MACRO(753, __VA_ARGS__) \
+DO_752(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_754(MACRO, ...) \
+MACRO(754, __VA_ARGS__) \
+DO_753(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_755(MACRO, ...) \
+MACRO(755, __VA_ARGS__) \
+DO_754(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_756(MACRO, ...) \
+MACRO(756, __VA_ARGS__) \
+DO_755(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_757(MACRO, ...) \
+MACRO(757, __VA_ARGS__) \
+DO_756(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_758(MACRO, ...) \
+MACRO(758, __VA_ARGS__) \
+DO_757(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_759(MACRO, ...) \
+MACRO(759, __VA_ARGS__) \
+DO_758(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_760(MACRO, ...) \
+MACRO(760, __VA_ARGS__) \
+DO_759(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_761(MACRO, ...) \
+MACRO(761, __VA_ARGS__) \
+DO_760(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_762(MACRO, ...) \
+MACRO(762, __VA_ARGS__) \
+DO_761(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_763(MACRO, ...) \
+MACRO(763, __VA_ARGS__) \
+DO_762(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_764(MACRO, ...) \
+MACRO(764, __VA_ARGS__) \
+DO_763(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_765(MACRO, ...) \
+MACRO(765, __VA_ARGS__) \
+DO_764(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_766(MACRO, ...) \
+MACRO(766, __VA_ARGS__) \
+DO_765(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_767(MACRO, ...) \
+MACRO(767, __VA_ARGS__) \
+DO_766(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_768(MACRO, ...) \
+MACRO(768, __VA_ARGS__) \
+DO_767(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_769(MACRO, ...) \
+MACRO(769, __VA_ARGS__) \
+DO_768(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_770(MACRO, ...) \
+MACRO(770, __VA_ARGS__) \
+DO_769(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_771(MACRO, ...) \
+MACRO(771, __VA_ARGS__) \
+DO_770(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_772(MACRO, ...) \
+MACRO(772, __VA_ARGS__) \
+DO_771(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_773(MACRO, ...) \
+MACRO(773, __VA_ARGS__) \
+DO_772(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_774(MACRO, ...) \
+MACRO(774, __VA_ARGS__) \
+DO_773(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_775(MACRO, ...) \
+MACRO(775, __VA_ARGS__) \
+DO_774(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_776(MACRO, ...) \
+MACRO(776, __VA_ARGS__) \
+DO_775(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_777(MACRO, ...) \
+MACRO(777, __VA_ARGS__) \
+DO_776(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_778(MACRO, ...) \
+MACRO(778, __VA_ARGS__) \
+DO_777(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_779(MACRO, ...) \
+MACRO(779, __VA_ARGS__) \
+DO_778(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_780(MACRO, ...) \
+MACRO(780, __VA_ARGS__) \
+DO_779(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_781(MACRO, ...) \
+MACRO(781, __VA_ARGS__) \
+DO_780(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_782(MACRO, ...) \
+MACRO(782, __VA_ARGS__) \
+DO_781(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_783(MACRO, ...) \
+MACRO(783, __VA_ARGS__) \
+DO_782(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_784(MACRO, ...) \
+MACRO(784, __VA_ARGS__) \
+DO_783(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_785(MACRO, ...) \
+MACRO(785, __VA_ARGS__) \
+DO_784(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_786(MACRO, ...) \
+MACRO(786, __VA_ARGS__) \
+DO_785(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_787(MACRO, ...) \
+MACRO(787, __VA_ARGS__) \
+DO_786(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_788(MACRO, ...) \
+MACRO(788, __VA_ARGS__) \
+DO_787(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_789(MACRO, ...) \
+MACRO(789, __VA_ARGS__) \
+DO_788(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_790(MACRO, ...) \
+MACRO(790, __VA_ARGS__) \
+DO_789(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_791(MACRO, ...) \
+MACRO(791, __VA_ARGS__) \
+DO_790(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_792(MACRO, ...) \
+MACRO(792, __VA_ARGS__) \
+DO_791(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_793(MACRO, ...) \
+MACRO(793, __VA_ARGS__) \
+DO_792(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_794(MACRO, ...) \
+MACRO(794, __VA_ARGS__) \
+DO_793(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_795(MACRO, ...) \
+MACRO(795, __VA_ARGS__) \
+DO_794(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_796(MACRO, ...) \
+MACRO(796, __VA_ARGS__) \
+DO_795(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_797(MACRO, ...) \
+MACRO(797, __VA_ARGS__) \
+DO_796(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_798(MACRO, ...) \
+MACRO(798, __VA_ARGS__) \
+DO_797(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_799(MACRO, ...) \
+MACRO(799, __VA_ARGS__) \
+DO_798(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_800(MACRO, ...) \
+MACRO(800, __VA_ARGS__) \
+DO_799(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_801(MACRO, ...) \
+MACRO(801, __VA_ARGS__) \
+DO_800(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_802(MACRO, ...) \
+MACRO(802, __VA_ARGS__) \
+DO_801(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_803(MACRO, ...) \
+MACRO(803, __VA_ARGS__) \
+DO_802(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_804(MACRO, ...) \
+MACRO(804, __VA_ARGS__) \
+DO_803(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_805(MACRO, ...) \
+MACRO(805, __VA_ARGS__) \
+DO_804(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_806(MACRO, ...) \
+MACRO(806, __VA_ARGS__) \
+DO_805(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_807(MACRO, ...) \
+MACRO(807, __VA_ARGS__) \
+DO_806(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_808(MACRO, ...) \
+MACRO(808, __VA_ARGS__) \
+DO_807(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_809(MACRO, ...) \
+MACRO(809, __VA_ARGS__) \
+DO_808(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_810(MACRO, ...) \
+MACRO(810, __VA_ARGS__) \
+DO_809(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_811(MACRO, ...) \
+MACRO(811, __VA_ARGS__) \
+DO_810(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_812(MACRO, ...) \
+MACRO(812, __VA_ARGS__) \
+DO_811(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_813(MACRO, ...) \
+MACRO(813, __VA_ARGS__) \
+DO_812(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_814(MACRO, ...) \
+MACRO(814, __VA_ARGS__) \
+DO_813(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_815(MACRO, ...) \
+MACRO(815, __VA_ARGS__) \
+DO_814(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_816(MACRO, ...) \
+MACRO(816, __VA_ARGS__) \
+DO_815(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_817(MACRO, ...) \
+MACRO(817, __VA_ARGS__) \
+DO_816(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_818(MACRO, ...) \
+MACRO(818, __VA_ARGS__) \
+DO_817(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_819(MACRO, ...) \
+MACRO(819, __VA_ARGS__) \
+DO_818(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_820(MACRO, ...) \
+MACRO(820, __VA_ARGS__) \
+DO_819(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_821(MACRO, ...) \
+MACRO(821, __VA_ARGS__) \
+DO_820(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_822(MACRO, ...) \
+MACRO(822, __VA_ARGS__) \
+DO_821(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_823(MACRO, ...) \
+MACRO(823, __VA_ARGS__) \
+DO_822(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_824(MACRO, ...) \
+MACRO(824, __VA_ARGS__) \
+DO_823(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_825(MACRO, ...) \
+MACRO(825, __VA_ARGS__) \
+DO_824(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_826(MACRO, ...) \
+MACRO(826, __VA_ARGS__) \
+DO_825(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_827(MACRO, ...) \
+MACRO(827, __VA_ARGS__) \
+DO_826(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_828(MACRO, ...) \
+MACRO(828, __VA_ARGS__) \
+DO_827(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_829(MACRO, ...) \
+MACRO(829, __VA_ARGS__) \
+DO_828(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_830(MACRO, ...) \
+MACRO(830, __VA_ARGS__) \
+DO_829(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_831(MACRO, ...) \
+MACRO(831, __VA_ARGS__) \
+DO_830(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_832(MACRO, ...) \
+MACRO(832, __VA_ARGS__) \
+DO_831(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_833(MACRO, ...) \
+MACRO(833, __VA_ARGS__) \
+DO_832(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_834(MACRO, ...) \
+MACRO(834, __VA_ARGS__) \
+DO_833(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_835(MACRO, ...) \
+MACRO(835, __VA_ARGS__) \
+DO_834(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_836(MACRO, ...) \
+MACRO(836, __VA_ARGS__) \
+DO_835(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_837(MACRO, ...) \
+MACRO(837, __VA_ARGS__) \
+DO_836(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_838(MACRO, ...) \
+MACRO(838, __VA_ARGS__) \
+DO_837(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_839(MACRO, ...) \
+MACRO(839, __VA_ARGS__) \
+DO_838(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_840(MACRO, ...) \
+MACRO(840, __VA_ARGS__) \
+DO_839(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_841(MACRO, ...) \
+MACRO(841, __VA_ARGS__) \
+DO_840(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_842(MACRO, ...) \
+MACRO(842, __VA_ARGS__) \
+DO_841(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_843(MACRO, ...) \
+MACRO(843, __VA_ARGS__) \
+DO_842(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_844(MACRO, ...) \
+MACRO(844, __VA_ARGS__) \
+DO_843(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_845(MACRO, ...) \
+MACRO(845, __VA_ARGS__) \
+DO_844(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_846(MACRO, ...) \
+MACRO(846, __VA_ARGS__) \
+DO_845(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_847(MACRO, ...) \
+MACRO(847, __VA_ARGS__) \
+DO_846(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_848(MACRO, ...) \
+MACRO(848, __VA_ARGS__) \
+DO_847(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_849(MACRO, ...) \
+MACRO(849, __VA_ARGS__) \
+DO_848(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_850(MACRO, ...) \
+MACRO(850, __VA_ARGS__) \
+DO_849(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_851(MACRO, ...) \
+MACRO(851, __VA_ARGS__) \
+DO_850(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_852(MACRO, ...) \
+MACRO(852, __VA_ARGS__) \
+DO_851(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_853(MACRO, ...) \
+MACRO(853, __VA_ARGS__) \
+DO_852(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_854(MACRO, ...) \
+MACRO(854, __VA_ARGS__) \
+DO_853(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_855(MACRO, ...) \
+MACRO(855, __VA_ARGS__) \
+DO_854(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_856(MACRO, ...) \
+MACRO(856, __VA_ARGS__) \
+DO_855(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_857(MACRO, ...) \
+MACRO(857, __VA_ARGS__) \
+DO_856(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_858(MACRO, ...) \
+MACRO(858, __VA_ARGS__) \
+DO_857(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_859(MACRO, ...) \
+MACRO(859, __VA_ARGS__) \
+DO_858(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_860(MACRO, ...) \
+MACRO(860, __VA_ARGS__) \
+DO_859(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_861(MACRO, ...) \
+MACRO(861, __VA_ARGS__) \
+DO_860(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_862(MACRO, ...) \
+MACRO(862, __VA_ARGS__) \
+DO_861(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_863(MACRO, ...) \
+MACRO(863, __VA_ARGS__) \
+DO_862(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_864(MACRO, ...) \
+MACRO(864, __VA_ARGS__) \
+DO_863(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_865(MACRO, ...) \
+MACRO(865, __VA_ARGS__) \
+DO_864(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_866(MACRO, ...) \
+MACRO(866, __VA_ARGS__) \
+DO_865(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_867(MACRO, ...) \
+MACRO(867, __VA_ARGS__) \
+DO_866(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_868(MACRO, ...) \
+MACRO(868, __VA_ARGS__) \
+DO_867(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_869(MACRO, ...) \
+MACRO(869, __VA_ARGS__) \
+DO_868(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_870(MACRO, ...) \
+MACRO(870, __VA_ARGS__) \
+DO_869(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_871(MACRO, ...) \
+MACRO(871, __VA_ARGS__) \
+DO_870(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_872(MACRO, ...) \
+MACRO(872, __VA_ARGS__) \
+DO_871(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_873(MACRO, ...) \
+MACRO(873, __VA_ARGS__) \
+DO_872(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_874(MACRO, ...) \
+MACRO(874, __VA_ARGS__) \
+DO_873(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_875(MACRO, ...) \
+MACRO(875, __VA_ARGS__) \
+DO_874(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_876(MACRO, ...) \
+MACRO(876, __VA_ARGS__) \
+DO_875(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_877(MACRO, ...) \
+MACRO(877, __VA_ARGS__) \
+DO_876(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_878(MACRO, ...) \
+MACRO(878, __VA_ARGS__) \
+DO_877(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_879(MACRO, ...) \
+MACRO(879, __VA_ARGS__) \
+DO_878(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_880(MACRO, ...) \
+MACRO(880, __VA_ARGS__) \
+DO_879(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_881(MACRO, ...) \
+MACRO(881, __VA_ARGS__) \
+DO_880(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_882(MACRO, ...) \
+MACRO(882, __VA_ARGS__) \
+DO_881(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_883(MACRO, ...) \
+MACRO(883, __VA_ARGS__) \
+DO_882(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_884(MACRO, ...) \
+MACRO(884, __VA_ARGS__) \
+DO_883(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_885(MACRO, ...) \
+MACRO(885, __VA_ARGS__) \
+DO_884(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_886(MACRO, ...) \
+MACRO(886, __VA_ARGS__) \
+DO_885(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_887(MACRO, ...) \
+MACRO(887, __VA_ARGS__) \
+DO_886(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_888(MACRO, ...) \
+MACRO(888, __VA_ARGS__) \
+DO_887(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_889(MACRO, ...) \
+MACRO(889, __VA_ARGS__) \
+DO_888(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_890(MACRO, ...) \
+MACRO(890, __VA_ARGS__) \
+DO_889(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_891(MACRO, ...) \
+MACRO(891, __VA_ARGS__) \
+DO_890(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_892(MACRO, ...) \
+MACRO(892, __VA_ARGS__) \
+DO_891(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_893(MACRO, ...) \
+MACRO(893, __VA_ARGS__) \
+DO_892(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_894(MACRO, ...) \
+MACRO(894, __VA_ARGS__) \
+DO_893(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_895(MACRO, ...) \
+MACRO(895, __VA_ARGS__) \
+DO_894(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_896(MACRO, ...) \
+MACRO(896, __VA_ARGS__) \
+DO_895(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_897(MACRO, ...) \
+MACRO(897, __VA_ARGS__) \
+DO_896(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_898(MACRO, ...) \
+MACRO(898, __VA_ARGS__) \
+DO_897(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_899(MACRO, ...) \
+MACRO(899, __VA_ARGS__) \
+DO_898(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_900(MACRO, ...) \
+MACRO(900, __VA_ARGS__) \
+DO_899(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_901(MACRO, ...) \
+MACRO(901, __VA_ARGS__) \
+DO_900(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_902(MACRO, ...) \
+MACRO(902, __VA_ARGS__) \
+DO_901(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_903(MACRO, ...) \
+MACRO(903, __VA_ARGS__) \
+DO_902(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_904(MACRO, ...) \
+MACRO(904, __VA_ARGS__) \
+DO_903(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_905(MACRO, ...) \
+MACRO(905, __VA_ARGS__) \
+DO_904(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_906(MACRO, ...) \
+MACRO(906, __VA_ARGS__) \
+DO_905(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_907(MACRO, ...) \
+MACRO(907, __VA_ARGS__) \
+DO_906(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_908(MACRO, ...) \
+MACRO(908, __VA_ARGS__) \
+DO_907(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_909(MACRO, ...) \
+MACRO(909, __VA_ARGS__) \
+DO_908(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_910(MACRO, ...) \
+MACRO(910, __VA_ARGS__) \
+DO_909(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_911(MACRO, ...) \
+MACRO(911, __VA_ARGS__) \
+DO_910(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_912(MACRO, ...) \
+MACRO(912, __VA_ARGS__) \
+DO_911(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_913(MACRO, ...) \
+MACRO(913, __VA_ARGS__) \
+DO_912(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_914(MACRO, ...) \
+MACRO(914, __VA_ARGS__) \
+DO_913(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_915(MACRO, ...) \
+MACRO(915, __VA_ARGS__) \
+DO_914(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_916(MACRO, ...) \
+MACRO(916, __VA_ARGS__) \
+DO_915(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_917(MACRO, ...) \
+MACRO(917, __VA_ARGS__) \
+DO_916(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_918(MACRO, ...) \
+MACRO(918, __VA_ARGS__) \
+DO_917(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_919(MACRO, ...) \
+MACRO(919, __VA_ARGS__) \
+DO_918(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_920(MACRO, ...) \
+MACRO(920, __VA_ARGS__) \
+DO_919(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_921(MACRO, ...) \
+MACRO(921, __VA_ARGS__) \
+DO_920(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_922(MACRO, ...) \
+MACRO(922, __VA_ARGS__) \
+DO_921(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_923(MACRO, ...) \
+MACRO(923, __VA_ARGS__) \
+DO_922(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_924(MACRO, ...) \
+MACRO(924, __VA_ARGS__) \
+DO_923(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_925(MACRO, ...) \
+MACRO(925, __VA_ARGS__) \
+DO_924(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_926(MACRO, ...) \
+MACRO(926, __VA_ARGS__) \
+DO_925(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_927(MACRO, ...) \
+MACRO(927, __VA_ARGS__) \
+DO_926(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_928(MACRO, ...) \
+MACRO(928, __VA_ARGS__) \
+DO_927(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_929(MACRO, ...) \
+MACRO(929, __VA_ARGS__) \
+DO_928(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_930(MACRO, ...) \
+MACRO(930, __VA_ARGS__) \
+DO_929(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_931(MACRO, ...) \
+MACRO(931, __VA_ARGS__) \
+DO_930(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_932(MACRO, ...) \
+MACRO(932, __VA_ARGS__) \
+DO_931(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_933(MACRO, ...) \
+MACRO(933, __VA_ARGS__) \
+DO_932(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_934(MACRO, ...) \
+MACRO(934, __VA_ARGS__) \
+DO_933(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_935(MACRO, ...) \
+MACRO(935, __VA_ARGS__) \
+DO_934(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_936(MACRO, ...) \
+MACRO(936, __VA_ARGS__) \
+DO_935(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_937(MACRO, ...) \
+MACRO(937, __VA_ARGS__) \
+DO_936(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_938(MACRO, ...) \
+MACRO(938, __VA_ARGS__) \
+DO_937(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_939(MACRO, ...) \
+MACRO(939, __VA_ARGS__) \
+DO_938(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_940(MACRO, ...) \
+MACRO(940, __VA_ARGS__) \
+DO_939(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_941(MACRO, ...) \
+MACRO(941, __VA_ARGS__) \
+DO_940(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_942(MACRO, ...) \
+MACRO(942, __VA_ARGS__) \
+DO_941(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_943(MACRO, ...) \
+MACRO(943, __VA_ARGS__) \
+DO_942(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_944(MACRO, ...) \
+MACRO(944, __VA_ARGS__) \
+DO_943(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_945(MACRO, ...) \
+MACRO(945, __VA_ARGS__) \
+DO_944(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_946(MACRO, ...) \
+MACRO(946, __VA_ARGS__) \
+DO_945(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_947(MACRO, ...) \
+MACRO(947, __VA_ARGS__) \
+DO_946(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_948(MACRO, ...) \
+MACRO(948, __VA_ARGS__) \
+DO_947(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_949(MACRO, ...) \
+MACRO(949, __VA_ARGS__) \
+DO_948(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_950(MACRO, ...) \
+MACRO(950, __VA_ARGS__) \
+DO_949(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_951(MACRO, ...) \
+MACRO(951, __VA_ARGS__) \
+DO_950(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_952(MACRO, ...) \
+MACRO(952, __VA_ARGS__) \
+DO_951(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_953(MACRO, ...) \
+MACRO(953, __VA_ARGS__) \
+DO_952(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_954(MACRO, ...) \
+MACRO(954, __VA_ARGS__) \
+DO_953(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_955(MACRO, ...) \
+MACRO(955, __VA_ARGS__) \
+DO_954(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_956(MACRO, ...) \
+MACRO(956, __VA_ARGS__) \
+DO_955(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_957(MACRO, ...) \
+MACRO(957, __VA_ARGS__) \
+DO_956(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_958(MACRO, ...) \
+MACRO(958, __VA_ARGS__) \
+DO_957(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_959(MACRO, ...) \
+MACRO(959, __VA_ARGS__) \
+DO_958(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_960(MACRO, ...) \
+MACRO(960, __VA_ARGS__) \
+DO_959(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_961(MACRO, ...) \
+MACRO(961, __VA_ARGS__) \
+DO_960(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_962(MACRO, ...) \
+MACRO(962, __VA_ARGS__) \
+DO_961(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_963(MACRO, ...) \
+MACRO(963, __VA_ARGS__) \
+DO_962(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_964(MACRO, ...) \
+MACRO(964, __VA_ARGS__) \
+DO_963(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_965(MACRO, ...) \
+MACRO(965, __VA_ARGS__) \
+DO_964(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_966(MACRO, ...) \
+MACRO(966, __VA_ARGS__) \
+DO_965(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_967(MACRO, ...) \
+MACRO(967, __VA_ARGS__) \
+DO_966(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_968(MACRO, ...) \
+MACRO(968, __VA_ARGS__) \
+DO_967(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_969(MACRO, ...) \
+MACRO(969, __VA_ARGS__) \
+DO_968(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_970(MACRO, ...) \
+MACRO(970, __VA_ARGS__) \
+DO_969(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_971(MACRO, ...) \
+MACRO(971, __VA_ARGS__) \
+DO_970(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_972(MACRO, ...) \
+MACRO(972, __VA_ARGS__) \
+DO_971(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_973(MACRO, ...) \
+MACRO(973, __VA_ARGS__) \
+DO_972(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_974(MACRO, ...) \
+MACRO(974, __VA_ARGS__) \
+DO_973(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_975(MACRO, ...) \
+MACRO(975, __VA_ARGS__) \
+DO_974(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_976(MACRO, ...) \
+MACRO(976, __VA_ARGS__) \
+DO_975(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_977(MACRO, ...) \
+MACRO(977, __VA_ARGS__) \
+DO_976(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_978(MACRO, ...) \
+MACRO(978, __VA_ARGS__) \
+DO_977(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_979(MACRO, ...) \
+MACRO(979, __VA_ARGS__) \
+DO_978(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_980(MACRO, ...) \
+MACRO(980, __VA_ARGS__) \
+DO_979(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_981(MACRO, ...) \
+MACRO(981, __VA_ARGS__) \
+DO_980(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_982(MACRO, ...) \
+MACRO(982, __VA_ARGS__) \
+DO_981(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_983(MACRO, ...) \
+MACRO(983, __VA_ARGS__) \
+DO_982(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_984(MACRO, ...) \
+MACRO(984, __VA_ARGS__) \
+DO_983(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_985(MACRO, ...) \
+MACRO(985, __VA_ARGS__) \
+DO_984(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_986(MACRO, ...) \
+MACRO(986, __VA_ARGS__) \
+DO_985(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_987(MACRO, ...) \
+MACRO(987, __VA_ARGS__) \
+DO_986(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_988(MACRO, ...) \
+MACRO(988, __VA_ARGS__) \
+DO_987(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_989(MACRO, ...) \
+MACRO(989, __VA_ARGS__) \
+DO_988(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_990(MACRO, ...) \
+MACRO(990, __VA_ARGS__) \
+DO_989(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_991(MACRO, ...) \
+MACRO(991, __VA_ARGS__) \
+DO_990(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_992(MACRO, ...) \
+MACRO(992, __VA_ARGS__) \
+DO_991(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_993(MACRO, ...) \
+MACRO(993, __VA_ARGS__) \
+DO_992(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_994(MACRO, ...) \
+MACRO(994, __VA_ARGS__) \
+DO_993(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_995(MACRO, ...) \
+MACRO(995, __VA_ARGS__) \
+DO_994(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_996(MACRO, ...) \
+MACRO(996, __VA_ARGS__) \
+DO_995(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_997(MACRO, ...) \
+MACRO(997, __VA_ARGS__) \
+DO_996(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_998(MACRO, ...) \
+MACRO(998, __VA_ARGS__) \
+DO_997(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_999(MACRO, ...) \
+MACRO(999, __VA_ARGS__) \
+DO_998(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1000(MACRO, ...) \
+MACRO(1000, __VA_ARGS__) \
+DO_999(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1001(MACRO, ...) \
+MACRO(1001, __VA_ARGS__) \
+DO_1000(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1002(MACRO, ...) \
+MACRO(1002, __VA_ARGS__) \
+DO_1001(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1003(MACRO, ...) \
+MACRO(1003, __VA_ARGS__) \
+DO_1002(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1004(MACRO, ...) \
+MACRO(1004, __VA_ARGS__) \
+DO_1003(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1005(MACRO, ...) \
+MACRO(1005, __VA_ARGS__) \
+DO_1004(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1006(MACRO, ...) \
+MACRO(1006, __VA_ARGS__) \
+DO_1005(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1007(MACRO, ...) \
+MACRO(1007, __VA_ARGS__) \
+DO_1006(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1008(MACRO, ...) \
+MACRO(1008, __VA_ARGS__) \
+DO_1007(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1009(MACRO, ...) \
+MACRO(1009, __VA_ARGS__) \
+DO_1008(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1010(MACRO, ...) \
+MACRO(1010, __VA_ARGS__) \
+DO_1009(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1011(MACRO, ...) \
+MACRO(1011, __VA_ARGS__) \
+DO_1010(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1012(MACRO, ...) \
+MACRO(1012, __VA_ARGS__) \
+DO_1011(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1013(MACRO, ...) \
+MACRO(1013, __VA_ARGS__) \
+DO_1012(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1014(MACRO, ...) \
+MACRO(1014, __VA_ARGS__) \
+DO_1013(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1015(MACRO, ...) \
+MACRO(1015, __VA_ARGS__) \
+DO_1014(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1016(MACRO, ...) \
+MACRO(1016, __VA_ARGS__) \
+DO_1015(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1017(MACRO, ...) \
+MACRO(1017, __VA_ARGS__) \
+DO_1016(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1018(MACRO, ...) \
+MACRO(1018, __VA_ARGS__) \
+DO_1017(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1019(MACRO, ...) \
+MACRO(1019, __VA_ARGS__) \
+DO_1018(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1020(MACRO, ...) \
+MACRO(1020, __VA_ARGS__) \
+DO_1019(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1021(MACRO, ...) \
+MACRO(1021, __VA_ARGS__) \
+DO_1020(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1022(MACRO, ...) \
+MACRO(1022, __VA_ARGS__) \
+DO_1021(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1023(MACRO, ...) \
+MACRO(1023, __VA_ARGS__) \
+DO_1022(MACRO, __VA_ARGS__)
+
+
+#define MU_DO_1024(MACRO, ...) \
+MACRO(1024, __VA_ARGS__) \
+DO_1023(MACRO, __VA_ARGS__)
+
+
+
+#define MU_DO(TIMES, MACRO, ...) MU_C2(MU_DO_, TIMES)(MACRO, __VA_ARGS__)
+
+
+/* we need some sort of macro that does:
+MU_IF(0, "true", "false") => "false"
+MU_IF(1, "true", "false") => "true"
+MU_IF(X, "true", "false") => "true"
+*/
+
+#define MU_INTERNALIF(x) MU_INTERNALIF##x
+#define MU_INTERNALIF0
+
+#define MU_ISZERO(x) MU_COUNT_ARG(MU_INTERNALIF(x))
+
+#define MU_IF(condition, trueBranch, falseBranch) MU_C2(MU_IF,MU_ISZERO(condition))(trueBranch, falseBranch)
+#define MU_IF0(trueBranch, falseBranch) falseBranch
+#define MU_IF1(trueBranch, falseBranch) trueBranch
+
+
+
+#define MU_DEFINE_ENUMERATION_CONSTANT(x) x,
+/*MU_DEFINE_ENUM goes to header*/
+#define MU_DEFINE_ENUM(enumName, ...) typedef enum MU_C2(enumName, _TAG) { MU_FOR_EACH_1(MU_DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName; \
+    extern const char* MU_C2(enumName,Strings)(enumName value); \
+    extern int MU_C2(enumName, _FromString)(const char* enumAsString, enumName* destination);
+
+
+#define MU_DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING(x) MU_C2(L, MU_TOSTRING(x)) , 
+#define MU_DEFINE_ENUMERATION_CONSTANT_AS_STRING(x) MU_TOSTRING(x) , 
+/*MU_DEFINE_ENUM_STRINGS goes to .c*/
+#define MU_DEFINE_ENUM_STRINGS(enumName, ...) const char* MU_C2(enumName, StringStorage)[MU_COUNT_ARG(__VA_ARGS__)] = {MU_FOR_EACH_1(MU_DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \
+const char* MU_C2(enumName,Strings)(enumName value)                   \
+{                                                                  \
+    if((int)value>=MU_COUNT_ARG(__VA_ARGS__))                         \
+    {                                                              \
+        /*this is an error case*/                                  \
+        return "NULL";                                             \
+    }                                                              \
+    else                                                           \
+    {                                                              \
+        return MU_C2(enumName, StringStorage)[value];                 \
+    }                                                              \
+}                                                                  \
+int MU_C2(enumName, _FromString)(const char* enumAsString, enumName* destination)  \
+{                                                                               \
+    if(                                                                         \
+        (enumAsString==NULL) || (destination==NULL)                             \
+    )                                                                           \
+    {                                                                           \
+        return MU_FAILURE;                                                      \
+    }                                                                           \
+    else                                                                        \
+    {                                                                           \
+        size_t i;                                                               \
+        for(i=0;i<MU_COUNT_ARG(__VA_ARGS__);i++)                                \
+        {                                                                       \
+            if(strcmp(enumAsString, MU_C2(enumName, StringStorage)[i])==0)      \
+            {                                                                   \
+                *destination = (enumName)i;                                     \
+                return 0;                                                       \
+            }                                                                   \
+        }                                                                       \
+        return MU_FAILURE;                                                      \
+    }                                                                           \
+}                                                                               \
+
+#define MU_DEFINE_LOCAL_ENUM(enumName, ...) typedef enum MU_C2(enumName, _TAG) { MU_FOR_EACH_1(MU_DEFINE_ENUMERATION_CONSTANT, __VA_ARGS__)} enumName; \
+static const char* MU_C2(enumName, StringStorage)[MU_COUNT_ARG(__VA_ARGS__)] = {MU_FOR_EACH_1(MU_DEFINE_ENUMERATION_CONSTANT_AS_STRING, __VA_ARGS__)}; \
+static const char* MU_C2(enumName,Strings)(enumName value)            \
+{                                                                  \
+    if((int)value<0 || (int)value>=MU_COUNT_ARG(__VA_ARGS__))         \
+    {                                                              \
+        /*this is an error case*/                                  \
+        return "NULL";                                             \
+    }                                                              \
+    else                                                           \
+    {                                                              \
+        return MU_C2(enumName, StringStorage)[value];                 \
+    }                                                              \
+}
+
+
+#define MU_ENUM_TO_STRING(enumName, enumValue) MU_C2(enumName, Strings)(enumValue)
+#define MU_STRING_TO_ENUM(stringValue, enumName, addressOfEnumVariable) MU_C2(enumName, _FromString)(stringValue, addressOfEnumVariable)
+
+#define MU_DEFINE_MICROMOCK_ENUM_TO_STRING(type, ...) MICROMOCK_ENUM_TO_STRING(type, MU_FOR_EACH_1(MU_DEFINE_ENUMERATION_CONSTANT_AS_WIDESTRING, __VA_ARGS__));
+
+#define MU_EMPTY()
+#define MACRO_UTILS_DELAY(id) id MU_EMPTY MU_LPAREN )
+
+#endif /*MACRO_UTILS_H*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/map.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/map.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/map.h	(revision 389)
@@ -0,0 +1,202 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file       map.h
+*	@brief		Map is a module that implements a dictionary of @c STRING_HANDLE
+*               keys to @c STRING_HANDLE values.
+*/
+
+#ifndef MAP_H
+#define MAP_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+#define MAP_RESULT_VALUES \
+    MAP_OK, \
+    MAP_ERROR, \
+    MAP_INVALIDARG, \
+    MAP_KEYEXISTS, \
+    MAP_KEYNOTFOUND, \
+    MAP_FILTER_REJECT
+
+/** @brief Enumeration specifying the status of calls to various APIs in this  
+ *  module.
+ */
+MU_DEFINE_ENUM(MAP_RESULT, MAP_RESULT_VALUES);
+
+typedef struct MAP_HANDLE_DATA_TAG* MAP_HANDLE;
+
+typedef int (*MAP_FILTER_CALLBACK)(const char* mapProperty, const char* mapValue);
+
+/**
+ * @brief   Creates a new, empty map.
+ *
+ * @param   mapFilterFunc   A callback function supplied by the caller that is
+ *                          invoked during calls to ::Map_Add and
+ *                          ::Map_AddOrUpdate to provide the caller an
+ *                          opportunity to indicate whether the new entry or
+ *                          the update to an existing entry can be made or not.
+ *                          The callback function can request that the operation
+ *                          be canceled by returning a non-zero value from the
+ *                          callback.
+ *
+ * @return  A valid @c MAP_HANDLE or @c NULL in case an error occurs.
+ */
+MOCKABLE_FUNCTION(, MAP_HANDLE, Map_Create, MAP_FILTER_CALLBACK, mapFilterFunc);
+
+/**
+ * @brief   Release all resources associated with the map.
+ *
+ * @param   handle  The handle to an existing map.
+ */
+MOCKABLE_FUNCTION(, void, Map_Destroy, MAP_HANDLE, handle);
+
+/**
+ * @brief   Creates a copy of the map indicated by @p handle and returns a
+ *          handle to it.
+ *
+ * @param   handle  The handle to an existing map.
+ *
+ * @return  A valid @c MAP_HANDLE to the cloned copy of the map or @c NULL
+ *          in case an error occurs.
+ */
+MOCKABLE_FUNCTION(, MAP_HANDLE, Map_Clone, MAP_HANDLE, handle);
+
+/**
+ * @brief   Adds a key/value pair to the map.
+ *
+ * @param   handle  The handle to an existing map.
+ * @param   key     The @c key to be used for this map entry.
+ * @param   value   The @c value to be associated with @p key.
+ *
+ *          If a non-NULL pointer to a callback function was supplied
+ *          via the @c mapFilterFunc parameter when ::Map_Create was
+ *          called then that callback is invoked when a new entry is
+ *          added and if the callback returns a non-zero value then
+ *          the function cancels the add operation and returns
+ *          @c MAP_FILTER_REJECT.
+ * 
+ * @return  If any of the input parameters are @c NULL then this function
+ *          returns @c MAP_INVALID_ARG. If the key already exists in the
+ *          map then @c MAP_KEYEXISTS is returned. If the filter function
+ *          associated with the map rejects the entry then
+ *          @c MAP_FILTER_REJECT is returned. In case an error occurs when
+ *          the new key is added to the map the function returns @c MAP_ERROR.
+ *          If everything goes well then @c MAP_OK is returned.
+ */
+MOCKABLE_FUNCTION(, MAP_RESULT, Map_Add, MAP_HANDLE, handle, const char*, key, const char*, value);
+
+/**
+ * @brief   Adds/updates a key/value pair to the map.
+ *
+ * @param   handle  The handle to an existing map.
+ * @param   key     The @c key to be used for this map entry.
+ * @param   value   The @c value to be associated with @p key.
+ *
+ *          This function behaves exactly like ::Map_Add except that if the key
+ *          already exists in the map then it overwrites the value with the
+ *          supplied value instead of returning an error. If a non-NULL pointer
+ *          to a callback function was supplied via the @c mapFilterFunc parameter
+ *          when ::Map_Create was called then that callback is invoked when a new
+ *          entry is added or when an existing entry is updated and if the
+ *          callback returns a non-zero value then the function cancels the
+ *          add/update operation and returns @c MAP_FILTER_REJECT.
+ * 
+ * @return  If any of the input parameters are @c NULL then this function
+ *          returns @c MAP_INVALID_ARG. If the filter function associated
+ *          with the map rejects the entry then @c MAP_FILTER_REJECT is
+ *          returned. In case an error occurs when the new key is
+ *          added/updated in the map the function returns @c MAP_ERROR. If
+ *          everything goes well then @c MAP_OK is returned.
+ */
+MOCKABLE_FUNCTION(, MAP_RESULT, Map_AddOrUpdate, MAP_HANDLE, handle, const char*, key, const char*, value);
+
+/**
+ * @brief   Removes a key and its associated value from the map.
+ *
+ * @param   handle  The handle to an existing map.
+ * @param   key     The @c key of the item to be deleted.
+ *
+ * @return  Returns @c MAP_OK if the key was deleted successfully or an
+ *          error code otherwise.
+ */
+MOCKABLE_FUNCTION(, MAP_RESULT, Map_Delete, MAP_HANDLE, handle, const char*, key);
+
+/**
+ * @brief   This function returns a boolean value in @p keyExists if the map
+ *          contains a key with the same value the parameter @p key.
+ *
+ * @param   handle      The handle to an existing map.
+ * @param   key         The key that the caller wants checked.
+ * @param   keyExists   The function writes @c true at the address pointed at
+ *                      by this parameter if the key exists in the map and
+ *                      @c false otherwise.
+ *
+ * @return  Returns @c MAP_OK if the check was performed successfully or an
+ *          error code otherwise.
+ */
+MOCKABLE_FUNCTION(, MAP_RESULT, Map_ContainsKey, MAP_HANDLE, handle, const char*, key, bool*, keyExists);
+
+/**
+ * @brief   This function returns @c true in @p valueExists if at
+ *          least one <key,value> pair exists in the map where the entry's
+ *          value is equal to the parameter @c value.
+ *
+ * @param   handle          The handle to an existing map.
+ * @param   value           The value that the caller wants checked.
+ * @param   valueExists     The function writes @c true at the address pointed at
+ *                          by this parameter if the value exists in the map and
+ *                          @c false otherwise.
+ *
+ * @return  Returns @c MAP_OK if the check was performed successfully or an
+ *          error code otherwise.
+ */
+MOCKABLE_FUNCTION(, MAP_RESULT, Map_ContainsValue, MAP_HANDLE, handle, const char*, value, bool*, valueExists);
+
+/**
+ * @brief   Retrieves the value of a stored key.
+ *
+ * @param   handle  The handle to an existing map.
+ * @param   key     The key to be looked up in the map.
+ *
+ * @return  Returns @c NULL in case the input arguments are @c NULL or if the
+ *          requested key is not found in the map. Returns a pointer to the
+ *          key's value otherwise.
+ */
+MOCKABLE_FUNCTION(, const char*, Map_GetValueFromKey, MAP_HANDLE, handle, const char*, key);
+
+/**
+ * @brief   Retrieves the complete list of keys and values from the map
+ *          in @p values and @p keys. Also writes the size of the list
+ *          in @p count.
+ *
+ * @param   handle      The handle to an existing map.
+ * @param   keys        The location where the list of keys is to be written.
+ * @param   values      The location where the list of values is to be written.
+ * @param   count       The number of stored keys and values is written at the
+ *                      location indicated by this pointer.
+ *
+ * @return  Returns @c MAP_OK if the keys and values are retrieved and written
+ *          successfully or an error code otherwise.
+ */
+MOCKABLE_FUNCTION(, MAP_RESULT, Map_GetInternals, MAP_HANDLE, handle, const char*const**, keys, const char*const**, values, size_t*, count);
+
+/*this API creates a JSON object from the content of the map*/
+MOCKABLE_FUNCTION(, STRING_HANDLE, Map_ToJSON, MAP_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAP_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/optimize_size.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/optimize_size.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/optimize_size.h	(revision 389)
@@ -0,0 +1,24 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef OPTIMIZE_SIZE_H
+#define OPTIMIZE_SIZE_H
+
+#if (defined __MSP430FR5969__)
+    #define OPTIMIZE_RETURN_CODES
+    #define NO_VERBOSE_OUTPUT
+    #ifdef DEBUG
+        #define MINIMAL_LOGERROR
+    #else
+        #define NO_LOGGING
+    #endif
+#endif
+
+#if (defined OPTIMIZE_RETURN_CODES)
+    #define MU_FAILURE 1
+#else
+    #define MU_FAILURE __LINE__
+#endif
+
+#endif // OPTIMIZE_SIZE_H
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/optionhandler.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/optionhandler.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/optionhandler.h	(revision 389)
@@ -0,0 +1,48 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef OPTIONHANDLER_H
+#define OPTIONHANDLER_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+
+#define OPTIONHANDLER_RESULT_VALUES \
+OPTIONHANDLER_OK, \
+OPTIONHANDLER_ERROR, \
+OPTIONHANDLER_INVALIDARG
+
+MU_DEFINE_ENUM(OPTIONHANDLER_RESULT, OPTIONHANDLER_RESULT_VALUES)
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef struct OPTIONHANDLER_HANDLE_DATA_TAG* OPTIONHANDLER_HANDLE;
+
+/*the following function pointer points to a function that produces a clone of the option specified by name and value (that is, a clone of void* value)*/
+/*returns NULL if it failed to produce a clone, otherwise returns a non-NULL value*/
+/*to be implemented by every module*/
+typedef void* (*pfCloneOption)(const char* name, const void* value);
+
+/*the following function pointer points to a function that frees resources allocated for an option*/
+/*to be implemented by every module*/
+typedef void (*pfDestroyOption)(const char* name, const void* value);
+
+/*the following function pointer points to a function that sets an option for a module*/
+/*to be implemented by every module*/
+/*returns 0 if _SetOption succeeded, any other value is error, if the option is not intended for that module, returns 0*/
+typedef int (*pfSetOption)(void* handle, const char* name, const void* value);
+
+MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, OptionHandler_Create, pfCloneOption, cloneOption, pfDestroyOption, destroyOption, pfSetOption, setOption);
+MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, OptionHandler_Clone, OPTIONHANDLER_HANDLE, handler);
+MOCKABLE_FUNCTION(, OPTIONHANDLER_RESULT, OptionHandler_AddOption, OPTIONHANDLER_HANDLE, handle, const char*, name, const void*, value);
+MOCKABLE_FUNCTION(, OPTIONHANDLER_RESULT, OptionHandler_FeedOptions, OPTIONHANDLER_HANDLE, handle, void*, destinationHandle);
+MOCKABLE_FUNCTION(, void, OptionHandler_Destroy, OPTIONHANDLER_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /*OPTIONHANDLER*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/platform.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/platform.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/platform.h	(revision 389)
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef PLATFORM_H
+#define PLATFORM_H
+
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#define GUID_LENGTH 64
+
+typedef enum PLATFORM_INFO_OPTION_VALUES
+{
+    PLATFORM_INFO_OPTION_DEFAULT,
+    PLATFORM_INFO_OPTION_RETRIEVE_SQM
+} PLATFORM_INFO_OPTION;
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+    MOCKABLE_FUNCTION(, int, platform_init);
+    MOCKABLE_FUNCTION(, void, platform_deinit);
+    MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, platform_get_default_tlsio);
+    MOCKABLE_FUNCTION(, STRING_HANDLE, platform_get_platform_info, PLATFORM_INFO_OPTION, options);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PLATFORM_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/refcount.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/refcount.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/refcount.h	(revision 389)
@@ -0,0 +1,122 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+
+/*this header contains macros for ref_counting a variable.
+
+There are no upper bound checks related to uint32_t overflow because we expect that bigger issues are in
+the system when more than 4 billion references exist to the same variable. In the case when such an overflow
+occurs, the object's ref count will reach zero (while still having 0xFFFFFFFF references) and likely the
+controlling code will take the decision to free the object's resources. Then, any of the 0xFFFFFFFF references
+will interact with deallocated memory / resources resulting in an undefined behavior.
+*/
+
+#ifndef REFCOUNT_H
+#define REFCOUNT_H
+
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/macro_utils.h"
+
+#ifdef __cplusplus
+#include <cstdlib>
+#include <cstdint>
+extern "C"
+{
+#else
+#include <stdlib.h>
+#include <stdint.h>
+#endif
+
+// Include the platform-specific file that defines atomic functionality
+#include "refcount_os.h"
+
+#define REFCOUNT_TYPE(type) \
+struct MU_C2(MU_C2(REFCOUNT_, type), _TAG)
+
+#define REFCOUNT_SHORT_TYPE(type) \
+MU_C2(REFCOUNT_, type)
+
+#define REFCOUNT_TYPE_DECLARE_CREATE(type) MU_C2(REFCOUNT_SHORT_TYPE(type), _Create)
+#define REFCOUNT_TYPE_DECLARE_CREATE_WITH_EXTRA_SIZE(type) MU_C2(REFCOUNT_SHORT_TYPE(type), _Create_With_Extra_Size)
+#define REFCOUNT_TYPE_CREATE(type) MU_C2(REFCOUNT_SHORT_TYPE(type), _Create)()
+#define REFCOUNT_TYPE_CREATE_WITH_EXTRA_SIZE(type, size) MU_C2(REFCOUNT_SHORT_TYPE(type), _Create_With_Extra_Size)(size)
+#define REFCOUNT_TYPE_DECLARE_DESTROY(type) MU_C2(REFCOUNT_SHORT_TYPE(type), _Destroy)
+#define REFCOUNT_TYPE_DESTROY(type, var) MU_C2(REFCOUNT_SHORT_TYPE(type), _Destroy)(var)
+
+/*this introduces a new refcount'd type based on another type */
+/*and an initializer for that new type that also sets the ref count to 1. The type must not have a flexible array*/
+/*the newly allocated memory shall be free'd by free()*/
+/*and the ref counting is handled internally by the type in the _Create/ _Create_With_Extra_Size /_Clone /_Destroy functions */
+
+/* Codes_SRS_REFCOUNT_01_005: [ REFCOUNT_TYPE_CREATE_WITH_EXTRA_SIZE shall allocate memory for the type that is ref counted (type) plus extra memory enough to hold size bytes. ]*/
+/* Codes_SRS_REFCOUNT_01_006: [ On success it shall return a non-NULL handle to the allocated ref counted type type. ]*/
+/* Codes_SRS_REFCOUNT_01_007: [ If any error occurs, REFCOUNT_TYPE_CREATE_WITH_EXTRA_SIZE shall return NULL. ]*/
+#define DEFINE_CREATE_WITH_EXTRA_SIZE(type) \
+static type* REFCOUNT_TYPE_DECLARE_CREATE_WITH_EXTRA_SIZE(type)(size_t size) \
+{ \
+    REFCOUNT_TYPE(type)* ref_counted = (REFCOUNT_TYPE(type)*)malloc(sizeof(REFCOUNT_TYPE(type)) + size); \
+    type* result; \
+    if (ref_counted == NULL) \
+    { \
+        result = NULL; \
+    } \
+    else \
+    { \
+        result = &ref_counted->counted; \
+        INIT_REF(type, result); \
+    } \
+    return result; \
+} \
+
+/* Codes_SRS_REFCOUNT_01_002: [ REFCOUNT_TYPE_CREATE shall allocate memory for the type that is ref counted. ]*/
+/* Codes_SRS_REFCOUNT_01_003: [ On success it shall return a non-NULL handle to the allocated ref counted type type. ]*/
+/* Codes_SRS_REFCOUNT_01_004: [ If any error occurs, REFCOUNT_TYPE_CREATE shall return NULL. ]*/
+#define DEFINE_CREATE(type) \
+static type* REFCOUNT_TYPE_DECLARE_CREATE(type) (void) \
+{ \
+    return REFCOUNT_TYPE_DECLARE_CREATE_WITH_EXTRA_SIZE(type)(0); \
+} \
+
+/* Codes_SRS_REFCOUNT_01_008: [ REFCOUNT_TYPE_DESTROY shall free the memory allocated by REFCOUNT_TYPE_CREATE or REFCOUNT_TYPE_CREATE_WITH_EXTRA_SIZE. ]*/
+/* Codes_SRS_REFCOUNT_01_009: [ If counted_type is NULL, REFCOUNT_TYPE_DESTROY shall return. ]*/
+#define DEFINE_DESTROY(type) \
+static void REFCOUNT_TYPE_DECLARE_DESTROY(type)(type* counted_type) \
+{ \
+    void* ref_counted = (void*)((unsigned char*)counted_type - offsetof(REFCOUNT_TYPE(type), counted)); \
+    free(ref_counted); \
+}
+
+#define DEFINE_REFCOUNT_TYPE(type) \
+REFCOUNT_TYPE(type) \
+{ \
+    COUNT_TYPE count; \
+    type counted; \
+}; \
+DEFINE_CREATE_WITH_EXTRA_SIZE(type) \
+DEFINE_CREATE(type) \
+DEFINE_DESTROY(type) \
+
+#ifndef DEC_RETURN_ZERO
+#error refcount_os.h does not define DEC_RETURN_ZERO
+#endif // !DEC_RETURN_ZERO
+#ifndef INC_REF_VAR
+#error refcount_os.h does not define INC_REF_VAR
+#endif // !INC_REF
+#ifndef DEC_REF_VAR
+#error refcount_os.h does not define DEC_REF_VAR
+#endif // !DEC_REF
+#ifndef INIT_REF_VAR
+#error refcount_os.h does not define INIT_REF_VAR
+#endif // !INIT_REF
+
+#define INC_REF(type, var) INC_REF_VAR(((REFCOUNT_TYPE(type)*)((unsigned char*)var - offsetof(REFCOUNT_TYPE(type), counted)))->count)
+#define DEC_REF(type, var) DEC_REF_VAR(((REFCOUNT_TYPE(type)*)((unsigned char*)var - offsetof(REFCOUNT_TYPE(type), counted)))->count)
+#define INIT_REF(type, var) INIT_REF_VAR(((REFCOUNT_TYPE(type)*)((unsigned char*)var - offsetof(REFCOUNT_TYPE(type), counted)))->count)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*REFCOUNT_H*/
+
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sastoken.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sastoken.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sastoken.h	(revision 389)
@@ -0,0 +1,23 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef SASTOKEN_H
+#define SASTOKEN_H
+
+#include "azure_c_shared_utility/strings.h"
+#include <stdbool.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    MOCKABLE_FUNCTION(, bool, SASToken_Validate, STRING_HANDLE, sasToken);
+    MOCKABLE_FUNCTION(, STRING_HANDLE, SASToken_Create, STRING_HANDLE, key, STRING_HANDLE, scope, STRING_HANDLE, keyName, size_t, expiry);
+    MOCKABLE_FUNCTION(, STRING_HANDLE, SASToken_CreateString, const char*, key, const char*, scope, const char*, keyName, size_t, expiry);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SASTOKEN_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sha-private.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sha-private.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sha-private.h	(revision 389)
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*************************** sha-private.h ***************************/
+/********************** See RFC 4634 for details *********************/
+#ifndef _SHA_PRIVATE__H
+#define _SHA_PRIVATE__H
+/*
+* These definitions are defined in FIPS-180-2, section 4.1.
+* Ch() and Maj() are defined identically in sections 4.1.1,
+* 4.1.2 and 4.1.3.
+*
+* The definitions used in FIPS-180-2 are as follows:
+*/
+
+#ifndef USE_MODIFIED_MACROS
+#define SHA_Ch(x,y,z)        (((x) & (y)) ^ ((~(x)) & (z)))
+#define SHA_Maj(x,y,z)       (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+
+#else /* USE_MODIFIED_MACROS */
+/*
+* The following definitions are equivalent and potentially faster.
+*/
+
+#define SHA_Ch(x, y, z)      (((x) & ((y) ^ (z))) ^ (z))
+#define SHA_Maj(x, y, z)     (((x) & ((y) | (z))) | ((y) & (z)))
+
+#endif /* USE_MODIFIED_MACROS */
+
+#define SHA_Parity(x, y, z)  ((x) ^ (y) ^ (z))
+
+#endif /* _SHA_PRIVATE__H */
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sha.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sha.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/sha.h	(revision 389)
@@ -0,0 +1,255 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/**************************** sha.h ****************************/
+/******************* See RFC 4634 for details ******************/
+#ifndef _SHA_H_
+#define _SHA_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*
+ *  Description:
+ *      This file implements the Secure Hash Signature Standard
+ *      algorithms as defined in the National Institute of Standards
+ *      and Technology Federal Information Processing Standards
+ *      Publication (FIPS PUB) 180-1 published on April 17, 1995, 180-2
+ *      published on August 1, 2002, and the FIPS PUB 180-2 Change
+ *      Notice published on February 28, 2004.
+ *
+ *      A combined document showing all algorithms is available at
+ *              http://csrc.nist.gov/publications/fips/
+ *              fips180-2/fips180-2withchangenotice.pdf
+ *
+ *      The five hashes are defined in these sizes:
+ *              SHA-1           20 byte / 160 bit
+ *              SHA-224         28 byte / 224 bit
+ *              SHA-256         32 byte / 256 bit
+ *              SHA-384         48 byte / 384 bit
+ *              SHA-512         64 byte / 512 bit
+ */
+
+#include <stdint.h>
+/*
+ * If you do not have the ISO standard stdint.h header file, then you
+ * must typedef the following:
+ *    name              meaning
+ *  uint64_t         unsigned 64 bit integer
+ *  uint32_t         unsigned 32 bit integer
+ *  uint8_t          unsigned 8 bit integer (i.e., unsigned char)
+ *  int_least16_t    integer of >= 16 bits
+ *
+ */
+
+#ifndef _SHA_enum_
+#define _SHA_enum_
+/*
+ *  All SHA functions return one of these values.
+ */
+enum {
+    shaSuccess = 0,
+    shaNull,            /* Null pointer parameter */
+    shaInputTooLong,    /* input data too long */
+    shaStateError,      /* called Input after FinalBits or Result */
+    shaBadParam         /* passed a bad parameter */
+};
+#endif /* _SHA_enum_ */
+
+/*
+ *  These constants hold size information for each of the SHA
+ *  hashing operations
+ */
+enum {
+    SHA1_Message_Block_Size = 64, SHA224_Message_Block_Size = 64,
+    SHA256_Message_Block_Size = 64, SHA384_Message_Block_Size = 128,
+    SHA512_Message_Block_Size = 128,
+    USHA_Max_Message_Block_Size = SHA512_Message_Block_Size,
+
+    SHA1HashSize = 20, SHA224HashSize = 28, SHA256HashSize = 32,
+    SHA384HashSize = 48, SHA512HashSize = 64,
+    USHAMaxHashSize = SHA512HashSize,
+
+    SHA1HashSizeBits = 160, SHA224HashSizeBits = 224,
+    SHA256HashSizeBits = 256, SHA384HashSizeBits = 384,
+    SHA512HashSizeBits = 512, USHAMaxHashSizeBits = SHA512HashSizeBits
+};
+
+/*
+ *  These constants are used in the USHA (unified sha) functions.
+ */
+typedef enum SHAversion {
+    SHA1, SHA224, SHA256, SHA384, SHA512
+} SHAversion;
+
+/*
+ *  This structure will hold context information for the SHA-1
+ *  hashing operation.
+ */
+typedef struct SHA1Context {
+    uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */
+
+    uint32_t Length_Low;                /* Message length in bits */
+    uint32_t Length_High;               /* Message length in bits */
+
+    int_least16_t Message_Block_Index;  /* Message_Block array index */
+                                        /* 512-bit message blocks */
+    uint8_t Message_Block[SHA1_Message_Block_Size];
+
+    int Computed;                       /* Is the digest computed? */
+    int Corrupted;                      /* Is the digest corrupted? */
+} SHA1Context;
+
+/*
+ *  This structure will hold context information for the SHA-256
+ *  hashing operation.
+ */
+typedef struct SHA256Context {
+    uint32_t Intermediate_Hash[SHA256HashSize/4]; /* Message Digest */
+
+    uint32_t Length_Low;                /* Message length in bits */
+    uint32_t Length_High;               /* Message length in bits */
+
+    int_least16_t Message_Block_Index;  /* Message_Block array index */
+                                        /* 512-bit message blocks */
+    uint8_t Message_Block[SHA256_Message_Block_Size];
+
+    int Computed;                       /* Is the digest computed? */
+    int Corrupted;                      /* Is the digest corrupted? */
+} SHA256Context;
+
+/*
+ *  This structure will hold context information for the SHA-512
+ *  hashing operation.
+ */
+typedef struct SHA512Context {
+#ifdef USE_32BIT_ONLY
+    uint32_t Intermediate_Hash[SHA512HashSize/4]; /* Message Digest  */
+    uint32_t Length[4];                 /* Message length in bits */
+#else /* !USE_32BIT_ONLY */
+    uint64_t Intermediate_Hash[SHA512HashSize/8]; /* Message Digest */
+    uint64_t Length_Low, Length_High;   /* Message length in bits */
+#endif /* USE_32BIT_ONLY */
+
+    int_least16_t Message_Block_Index;  /* Message_Block array index */
+                                        /* 1024-bit message blocks */
+    uint8_t Message_Block[SHA512_Message_Block_Size];
+
+    int Computed;                       /* Is the digest computed?*/
+    int Corrupted;                      /* Is the digest corrupted? */
+} SHA512Context;
+
+/*
+ *  This structure will hold context information for the SHA-224
+ *  hashing operation. It uses the SHA-256 structure for computation.
+ */
+typedef struct SHA256Context SHA224Context;
+
+/*
+ *  This structure will hold context information for the SHA-384
+ *  hashing operation. It uses the SHA-512 structure for computation.
+ */
+typedef struct SHA512Context SHA384Context;
+
+/*
+ *  This structure holds context information for all SHA
+ *  hashing operations.
+ */
+typedef struct USHAContext {
+    int whichSha;               /* which SHA is being used */
+    union {
+      SHA1Context sha1Context;
+      SHA224Context sha224Context; SHA256Context sha256Context;
+      SHA384Context sha384Context; SHA512Context sha512Context;
+    } ctx;
+} USHAContext;
+
+/*
+ *  This structure will hold context information for the HMAC
+ *  keyed hashing operation.
+ */
+typedef struct HMACContext {
+    int whichSha;               /* which SHA is being used */
+    int hashSize;               /* hash size of SHA being used */
+    int blockSize;              /* block size of SHA being used */
+    USHAContext shaContext;     /* SHA context */
+    unsigned char k_opad[USHA_Max_Message_Block_Size];
+                        /* outer padding - key XORd with opad */
+} HMACContext;
+
+
+/*
+ *  Function Prototypes
+ */
+
+/* SHA-1 */
+extern int SHA1Reset(SHA1Context *);
+extern int SHA1Input(SHA1Context *, const uint8_t *bytes, unsigned int bytecount);
+extern int SHA1FinalBits(SHA1Context *, const uint8_t bits, unsigned int bitcount);
+extern int SHA1Result(SHA1Context *, uint8_t Message_Digest[SHA1HashSize]);
+
+/* SHA-224 */
+extern int SHA224Reset(SHA224Context *);
+extern int SHA224Input(SHA224Context *, const uint8_t *bytes, unsigned int bytecount);
+extern int SHA224FinalBits(SHA224Context *, const uint8_t bits, unsigned int bitcount);
+extern int SHA224Result(SHA224Context *, uint8_t Message_Digest[SHA224HashSize]);
+
+/* SHA-256 */
+extern int SHA256Reset(SHA256Context *);
+extern int SHA256Input(SHA256Context *, const uint8_t *bytes, unsigned int bytecount);
+extern int SHA256FinalBits(SHA256Context *, const uint8_t bits, unsigned int bitcount);
+extern int SHA256Result(SHA256Context *, uint8_t Message_Digest[SHA256HashSize]);
+
+/* SHA-384 */
+extern int SHA384Reset(SHA384Context *);
+extern int SHA384Input(SHA384Context *, const uint8_t *bytes, unsigned int bytecount);
+extern int SHA384FinalBits(SHA384Context *, const uint8_t bits, unsigned int bitcount);
+extern int SHA384Result(SHA384Context *, uint8_t Message_Digest[SHA384HashSize]);
+
+/* SHA-512 */
+extern int SHA512Reset(SHA512Context *);
+extern int SHA512Input(SHA512Context *, const uint8_t *bytes, unsigned int bytecount);
+extern int SHA512FinalBits(SHA512Context *, const uint8_t bits, unsigned int bitcount);
+extern int SHA512Result(SHA512Context *, uint8_t Message_Digest[SHA512HashSize]);
+
+/* Unified SHA functions, chosen by whichSha */
+extern int USHAReset(USHAContext *, SHAversion whichSha);
+extern int USHAInput(USHAContext *, const uint8_t *bytes, unsigned int bytecount);
+extern int USHAFinalBits(USHAContext *, const uint8_t bits, unsigned int bitcount);
+extern int USHAResult(USHAContext *, uint8_t Message_Digest[USHAMaxHashSize]);
+extern int USHABlockSize(enum SHAversion whichSha);
+extern int USHAHashSize(enum SHAversion whichSha);
+extern int USHAHashSizeBits(enum SHAversion whichSha);
+
+/*
+ * HMAC Keyed-Hashing for Message Authentication, RFC2104,
+ * for all SHAs.
+ * This interface allows a fixed-length text input to be used.
+ */
+extern int hmac(SHAversion whichSha, /* which SHA algorithm to use */
+    const unsigned char *text,     /* pointer to data stream */
+    int text_len,                  /* length of data stream */
+    const unsigned char *key,      /* pointer to authentication key */
+    int key_len,                   /* length of authentication key */
+    uint8_t digest[USHAMaxHashSize]); /* caller digest to fill in */
+
+/*
+ * HMAC Keyed-Hashing for Message Authentication, RFC2104,
+ * for all SHAs.
+ * This interface allows any length of text input to be used.
+ */
+extern int hmacReset(HMACContext *ctx, enum SHAversion whichSha, const unsigned char *key, int key_len);
+extern int hmacInput(HMACContext *ctx, const unsigned char *text, int text_len);
+
+extern int hmacFinalBits(HMACContext *ctx, const uint8_t bits, unsigned int bitcount);
+extern int hmacResult(HMACContext *ctx, uint8_t digest[USHAMaxHashSize]);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHA_H_ */
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/shared_util_options.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/shared_util_options.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/shared_util_options.h	(revision 389)
@@ -0,0 +1,57 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef SHARED_UTIL_OPTIONS_H
+#define SHARED_UTIL_OPTIONS_H
+
+#include "azure_c_shared_utility/const_defines.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct HTTP_PROXY_OPTIONS_TAG
+    {
+        const char* host_address;
+        int port;
+        const char* username;
+        const char* password;
+    } HTTP_PROXY_OPTIONS;
+
+    static STATIC_VAR_UNUSED const char* const OPTION_HTTP_PROXY = "proxy_data";
+    static STATIC_VAR_UNUSED const char* const OPTION_HTTP_TIMEOUT = "timeout";
+
+    static STATIC_VAR_UNUSED const char* const OPTION_TRUSTED_CERT = "TrustedCerts";
+
+    // Clients should not use OPTION_OPENSSL_CIPHER_SUITE except for very specialized scenarios.
+    // They instead should rely on the underlying client TLS stack and service to negotiate an appropriate cipher.
+    static STATIC_VAR_UNUSED const char* const OPTION_OPENSSL_CIPHER_SUITE = "CipherSuite";
+
+    static STATIC_VAR_UNUSED const char* const SU_OPTION_X509_CERT = "x509certificate";
+    static STATIC_VAR_UNUSED const char* const SU_OPTION_X509_PRIVATE_KEY = "x509privatekey";
+
+    static STATIC_VAR_UNUSED const char* const OPTION_X509_ECC_CERT = "x509EccCertificate";
+    static STATIC_VAR_UNUSED const char* const OPTION_X509_ECC_KEY = "x509EccAliasKey";
+
+    static STATIC_VAR_UNUSED const char* const OPTION_CURL_LOW_SPEED_LIMIT = "CURLOPT_LOW_SPEED_LIMIT";
+    static STATIC_VAR_UNUSED const char* const OPTION_CURL_LOW_SPEED_TIME = "CURLOPT_LOW_SPEED_TIME";
+    static STATIC_VAR_UNUSED const char* const OPTION_CURL_FRESH_CONNECT = "CURLOPT_FRESH_CONNECT";
+    static STATIC_VAR_UNUSED const char* const OPTION_CURL_FORBID_REUSE = "CURLOPT_FORBID_REUSE";
+    static STATIC_VAR_UNUSED const char* const OPTION_CURL_VERBOSE = "CURLOPT_VERBOSE";
+
+    static STATIC_VAR_UNUSED const char* const OPTION_NET_INT_MAC_ADDRESS = "net_interface_mac_address";
+
+    // DEPRECATED: The underlying security library for your platform will use a secure TLS version 
+    // that in general  should not be overridden with OPTION_TLS_VERSION.
+    static STATIC_VAR_UNUSED const char* const OPTION_TLS_VERSION = "tls_version";
+
+    static STATIC_VAR_UNUSED const char* const OPTION_ADDRESS_TYPE = "ADDRESS_TYPE";
+    static STATIC_VAR_UNUSED const char* const OPTION_ADDRESS_TYPE_DOMAIN_SOCKET = "DOMAIN_SOCKET";
+    static STATIC_VAR_UNUSED const char* const OPTION_ADDRESS_TYPE_IP_SOCKET = "IP_SOCKET";
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SHARED_UTIL_OPTIONS_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/singlylinkedlist.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/singlylinkedlist.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/singlylinkedlist.h	(revision 389)
@@ -0,0 +1,57 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef SINGLYLINKEDLIST_H
+#define SINGLYLINKEDLIST_H
+
+#ifdef __cplusplus
+extern "C" {
+#else
+#include "stdbool.h"
+#endif /* __cplusplus */
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef struct SINGLYLINKEDLIST_INSTANCE_TAG* SINGLYLINKEDLIST_HANDLE;
+typedef struct LIST_ITEM_INSTANCE_TAG* LIST_ITEM_HANDLE;
+
+/**
+* @brief                        Function passed to singlylinkedlist_find, which returns whichever first list item that matches it.
+* @param list_item                Current list node being evaluated.
+* @param match_context            Context passed to singlylinkedlist_find.
+* @returns                        True to indicate that the current list node is the one to be returned, or false to continue traversing the list.
+*/
+typedef bool (*LIST_MATCH_FUNCTION)(LIST_ITEM_HANDLE list_item, const void* match_context);
+/**
+* @brief                        Function passed to singlylinkedlist_remove_if, which is used to define if an item of the list should be removed or not.
+* @param item                    Value of the current list node being evaluated for removal.
+* @param match_context            Context passed to singlylinkedlist_remove_if.
+* @param continue_processing    Indicates if singlylinkedlist_remove_if shall continue iterating through the next nodes of the list or stop.
+* @returns                        True to indicate that the current list node shall be removed, or false to not to.
+*/
+typedef bool (*LIST_CONDITION_FUNCTION)(const void* item, const void* match_context, bool* continue_processing);
+/**
+* @brief                        Function passed to singlylinkedlist_foreach, which is called for the value of each node of the list.
+* @param item                    Value of the current list node being processed.
+* @param action_context            Context passed to singlylinkedlist_foreach.
+* @param continue_processing    Indicates if singlylinkedlist_foreach shall continue iterating through the next nodes of the list or stop.
+*/
+typedef void (*LIST_ACTION_FUNCTION)(const void* item, const void* action_context, bool* continue_processing);
+
+MOCKABLE_FUNCTION(, SINGLYLINKEDLIST_HANDLE, singlylinkedlist_create);
+MOCKABLE_FUNCTION(, void, singlylinkedlist_destroy, SINGLYLINKEDLIST_HANDLE, list);
+MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, singlylinkedlist_add, SINGLYLINKEDLIST_HANDLE, list, const void*, item);
+MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, singlylinkedlist_add_head, SINGLYLINKEDLIST_HANDLE, list, const void*, item);
+MOCKABLE_FUNCTION(, int, singlylinkedlist_remove, SINGLYLINKEDLIST_HANDLE, list, LIST_ITEM_HANDLE, item_handle);
+MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, singlylinkedlist_get_head_item, SINGLYLINKEDLIST_HANDLE, list);
+MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, singlylinkedlist_get_next_item, LIST_ITEM_HANDLE, item_handle);
+MOCKABLE_FUNCTION(, LIST_ITEM_HANDLE, singlylinkedlist_find, SINGLYLINKEDLIST_HANDLE, list, LIST_MATCH_FUNCTION, match_function, const void*, match_context);
+MOCKABLE_FUNCTION(, const void*, singlylinkedlist_item_get_value, LIST_ITEM_HANDLE, item_handle);
+MOCKABLE_FUNCTION(, int, singlylinkedlist_remove_if, SINGLYLINKEDLIST_HANDLE, list, LIST_CONDITION_FUNCTION, condition_function, const void*, match_context);
+MOCKABLE_FUNCTION(, int, singlylinkedlist_foreach, SINGLYLINKEDLIST_HANDLE, list, LIST_ACTION_FUNCTION, action_function, const void*, action_context);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SINGLYLINKEDLIST_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/socketio.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/socketio.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/socketio.h	(revision 389)
@@ -0,0 +1,47 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef SOCKETIO_H
+#define SOCKETIO_H
+
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif /* __cplusplus */
+
+typedef struct SOCKETIO_CONFIG_TAG
+{
+    const char* hostname;
+    int port;
+    void* accepted_socket;
+} SOCKETIO_CONFIG;
+
+typedef enum SOCKETIO_ADDRESS_TYPE_TAG
+{
+    ADDRESS_TYPE_IP,
+    ADDRESS_TYPE_DOMAIN_SOCKET
+} SOCKETIO_ADDRESS_TYPE;
+
+#define RECEIVE_BYTES_VALUE     64
+
+MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, socketio_create, void*, io_create_parameters);
+MOCKABLE_FUNCTION(, void, socketio_destroy, CONCRETE_IO_HANDLE, socket_io);
+MOCKABLE_FUNCTION(, int, socketio_open, CONCRETE_IO_HANDLE, socket_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context);
+MOCKABLE_FUNCTION(, int, socketio_close, CONCRETE_IO_HANDLE, socket_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, int, socketio_send, CONCRETE_IO_HANDLE, socket_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, void, socketio_dowork, CONCRETE_IO_HANDLE, socket_io);
+MOCKABLE_FUNCTION(, int, socketio_setoption, CONCRETE_IO_HANDLE, socket_io, const char*, optionName, const void*, value);
+
+MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, socketio_get_interface_description);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SOCKETIO_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_token.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_token.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_token.h	(revision 389)
@@ -0,0 +1,92 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef STRING_TOKEN_H
+#define STRING_TOKEN_H
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#include <stdbool.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef struct STRING_TOKEN_TAG* STRING_TOKEN_HANDLE;
+
+/*
+*    @brief     Tries to identify the first token defined in source up to its length using the delimiters provided. 
+*    @Remark    If no delimiter is found, the entire source string becomes the resulting token. Empty tokens (when delimiters occur side-by-side) can also detected.
+*    @param     source        The initial string to be tokenized.
+*    @param     length        The length of the source string, not including the null-terminator.
+*    @param     delimiters    Array with null-terminated strings to be used as token delimiters.
+*    @param     n_delims      Number of elements in delimiters array.
+*    @return    A STRING_TOKEN_HANDLE if no failures occur (arguments, memory allocation), or NULL otherwise.
+*/
+MOCKABLE_FUNCTION(, STRING_TOKEN_HANDLE, StringToken_GetFirst, const char*, source, size_t, length, const char**, delimiters, size_t, n_delims);
+
+/*
+*    @brief     Tries to identify the next token defined in source up to its length using the delimiters provided.
+*    @Remark    After StringToken_GetFirst is initially called, StringToken_GetNext shall be called for obtaining the next tokens.
+*               If no delimiter is found, the entire source string becomes the resulting token. 
+*               Empty tokens (when delimiters occur side-by-side) can also detected.
+*    @param     token         The handle returned by StringToken_GetFirst.
+*    @param     delimiters    Array with null-terminated strings to be used as token delimiters.
+*    @param     n_delims      Number of elements in delimiters array.
+*    @return    True if a token could be identified, or false if the tokenizer already reached the end of the source string an no more tokens are available.
+*/
+MOCKABLE_FUNCTION(, bool, StringToken_GetNext, STRING_TOKEN_HANDLE, token, const char**, delimiters, size_t, n_delims);
+
+/*
+*    @brief     Gets the pointer to the beginning of the current token identified in the source string.
+*    @param     token         The handle returned by StringToken_GetFirst.
+*    @return    The pointer to the token identified in the last successfull call to StringToken_GetFirst or StringToken_GetNext.
+*               If the token string is empty (e.g., between two delimiters side-by-side or if a delimiter occurs at the end of the source string),
+*               NULL is returned instead of an empty string.
+*/
+MOCKABLE_FUNCTION(, const char*, StringToken_GetValue, STRING_TOKEN_HANDLE, token);
+
+/*
+*    @brief     Gets the length of the current token identified in the source string.
+*    @param     token         The handle returned by StringToken_GetFirst.
+*    @return    A non-zero value if the current token is not empty, zero otherwise.
+*/
+MOCKABLE_FUNCTION(, size_t, StringToken_GetLength, STRING_TOKEN_HANDLE, token);
+
+/*
+*    @brief     Gets a pointer to last delimiter identified (which defined the current token).
+*    @param     token         The handle returned by StringToken_GetFirst.
+*    @return    If a delimiter was identified in the previous search,
+*               the pointer returned is to the element in the delimiters array provided in the previous call to StringToken_GetFirst or StringToken_GetNext;
+*               it returns NULL if no delimiter was found in the previous call to those functions.
+*/
+MOCKABLE_FUNCTION(, const char*, StringToken_GetDelimiter, STRING_TOKEN_HANDLE, token);
+
+/*
+*    @brief     Splits a string into an array with all the tokens identified using the delimiters provided.
+*    @param     source           The string to be tokenized.
+*    @param     length           The length of the source string, not including the null-terminator.
+*    @param     delimiters       Array with null-terminated strings to be used as token delimiters.
+*    @param     n_delims         Number of elements in delimiters array.
+*    @param     include_empty    Indicates if empty strings shall be included (as NULL values) in the resulting array.
+*    @param     tokens           If no failures occur, the resulting array with the split tokens (dynamically allocated).
+*    @param     token_count      The number of elements in the tokens array.
+*    @return    Zero if no failures occur, or a non-zero value otherwise.
+*/
+MOCKABLE_FUNCTION(, int, StringToken_Split, const char*, source, size_t, length, const char**, delimiters, size_t, n_delims, bool, include_empty, char***, tokens, size_t*, token_count);
+
+/*
+*    @brief     Destroys the handle created when calling StringToken_GetFirst.
+*    @param     token         The handle returned by StringToken_GetFirst.
+*    @return    Nothing
+*/
+MOCKABLE_FUNCTION(, void, StringToken_Destroy, STRING_TOKEN_HANDLE, token);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /*STRING_TOKEN_H*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_tokenizer.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_tokenizer.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_tokenizer.h	(revision 389)
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef STRING_TOKENIZER_H
+#define STRING_TOKENIZER_H
+
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/string_tokenizer_types.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+MOCKABLE_FUNCTION(, STRING_TOKENIZER_HANDLE, STRING_TOKENIZER_create, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, STRING_TOKENIZER_HANDLE, STRING_TOKENIZER_create_from_char, const char*, input);
+MOCKABLE_FUNCTION(, int, STRING_TOKENIZER_get_next_token, STRING_TOKENIZER_HANDLE, t, STRING_HANDLE, output, const char*, delimiters);
+MOCKABLE_FUNCTION(, void, STRING_TOKENIZER_destroy, STRING_TOKENIZER_HANDLE, t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /*STRING_TOKENIZER_H*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_tokenizer_types.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_tokenizer_types.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/string_tokenizer_types.h	(revision 389)
@@ -0,0 +1,9 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef STRING_TOKENIZER_TYPES_H
+#define STRING_TOKENIZER_TYPES_H
+
+typedef struct STRING_TOKEN_TAG* STRING_TOKENIZER_HANDLE;
+
+#endif  /*STRING_TOKENIZER_TYPES_H*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/strings.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/strings.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/strings.h	(revision 389)
@@ -0,0 +1,45 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef STRINGS_H
+#define STRINGS_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/strings_types.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_clone, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_construct, const char*, psz);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_construct_n, const char*, psz, size_t, n);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new_with_memory, const char*, memory);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new_quoted, const char*, source);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_new_JSON, const char*, source);
+MOCKABLE_FUNCTION(, STRING_HANDLE, STRING_from_byte_array, const unsigned char*, source, size_t, size);
+MOCKABLE_FUNCTION(, void, STRING_delete, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, STRING_concat, STRING_HANDLE, handle, const char*, s2);
+MOCKABLE_FUNCTION(, int, STRING_concat_with_STRING, STRING_HANDLE, s1, STRING_HANDLE, s2);
+MOCKABLE_FUNCTION(, int, STRING_quote, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, STRING_copy, STRING_HANDLE, s1, const char*, s2);
+MOCKABLE_FUNCTION(, int, STRING_copy_n, STRING_HANDLE, s1, const char*, s2, size_t, n);
+MOCKABLE_FUNCTION(, const char*, STRING_c_str, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, STRING_empty, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, size_t, STRING_length, STRING_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, STRING_compare, STRING_HANDLE, s1, STRING_HANDLE, s2);
+MOCKABLE_FUNCTION(, int, STRING_replace, STRING_HANDLE, handle, char, target, char, replace);
+
+extern STRING_HANDLE STRING_construct_sprintf(const char* format, ...);
+extern int STRING_sprintf(STRING_HANDLE s1, const char* format, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /*STRINGS_H*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/strings_types.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/strings_types.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/strings_types.h	(revision 389)
@@ -0,0 +1,9 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef STRINGS_TYPES_H
+#define STRINGS_TYPES_H
+
+typedef struct STRING_TAG* STRING_HANDLE;
+
+#endif  /*STRINGS_TYPES_H*/
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tcpsocketconnection_c.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tcpsocketconnection_c.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tcpsocketconnection_c.h	(revision 389)
@@ -0,0 +1,28 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef TCPSOCKETCONNECTION_C_H
+#define TCPSOCKETCONNECTION_C_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+	typedef void* TCPSOCKETCONNECTION_HANDLE;
+
+	TCPSOCKETCONNECTION_HANDLE tcpsocketconnection_create(void);
+	void tcpsocketconnection_set_blocking(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle, bool blocking, unsigned int timeout);
+	void tcpsocketconnection_destroy(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle);
+	int tcpsocketconnection_connect(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle, const char* host, const int port);
+	bool tcpsocketconnection_is_connected(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle);
+	void tcpsocketconnection_close(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle);
+	int tcpsocketconnection_send(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle, const char* data, int length);
+	int tcpsocketconnection_send_all(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle, const char* data, int length);
+	int tcpsocketconnection_receive(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle, char* data, int length);
+	int tcpsocketconnection_receive_all(TCPSOCKETCONNECTION_HANDLE tcpSocketConnectionHandle, char* data, int length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TCPSOCKETCONNECTION_C_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/threadapi.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/threadapi.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/threadapi.h	(revision 389)
@@ -0,0 +1,90 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file threadapi.h
+ *	@brief	 This module implements support for creating new threads,
+ *			 terminating threads and sleeping threads.
+ */
+
+#ifndef THREADAPI_H
+#define THREADAPI_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+typedef int(*THREAD_START_FUNC)(void *);
+
+#define THREADAPI_RESULT_VALUES \
+    THREADAPI_OK,               \
+    THREADAPI_INVALID_ARG,      \
+    THREADAPI_NO_MEMORY,        \
+    THREADAPI_ERROR
+
+/** @brief Enumeration specifying the possible return values for the APIs in
+ *		   this module.
+ */
+MU_DEFINE_ENUM(THREADAPI_RESULT, THREADAPI_RESULT_VALUES);
+
+typedef void* THREAD_HANDLE;
+
+/**
+ * @brief	Creates a thread with the entry point specified by the @p func
+ * 			argument.
+ *
+ * @param   threadHandle	The handle to the new thread is returned in this
+ * 							pointer.
+ * @param	func			A function pointer that indicates the entry point
+ * 							to the new thread.
+ * @param   arg				A void pointer that must be passed to the function
+ * 							pointed to by @p func.
+ *
+ * @return	@c THREADAPI_OK if the API call is successful or an error
+ * 			code in case it fails.
+ */
+MOCKABLE_FUNCTION(, THREADAPI_RESULT, ThreadAPI_Create, THREAD_HANDLE*, threadHandle, THREAD_START_FUNC, func, void*, arg);
+
+/**
+ * @brief	Blocks the calling thread by waiting on the thread identified by
+ * 			the @p threadHandle argument to complete.
+ *
+ * @param	threadHandle	The handle of the thread to wait for completion.
+ * @param   res 			The result returned by the thread which is passed
+ * 							to the ::ThreadAPI_Exit function.
+ *
+ *			When the @p threadHandle thread completes, all resources associated
+ *			with the thread must be released and the thread handle will no
+ *			longer be valid.
+ * 
+ * @return	@c THREADAPI_OK if the API call is successful or an error
+ * 			code in case it fails.
+ */
+MOCKABLE_FUNCTION(, THREADAPI_RESULT, ThreadAPI_Join, THREAD_HANDLE, threadHandle, int*, res);
+
+/**
+ * @brief	This function is called by a thread when the thread exits.
+ *
+ * @param	res		An integer that represents the exit status of the thread.
+ * 				
+ * 			This function is called by a thread when the thread exits in order
+ * 			to return a result value to the caller of the ::ThreadAPI_Join
+ * 			function. The @p res value must be copied into the @p res out
+ * 			argument passed to the ::ThreadAPI_Join function.
+ */
+MOCKABLE_FUNCTION(, void, ThreadAPI_Exit, int, res);
+
+/**
+ * @brief	Sleeps the current thread for the given number of milliseconds.
+ *
+ * @param	milliseconds	The number of milliseconds to sleep.
+ */
+MOCKABLE_FUNCTION(, void, ThreadAPI_Sleep, unsigned int, milliseconds);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* THREADAPI_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tickcounter.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tickcounter.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tickcounter.h	(revision 389)
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef TICKCOUNTER_H
+#define TICKCOUNTER_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+#include <stdint.h>
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#if defined(_WIN32) || defined(__MBED__)
+    typedef uint_fast64_t tickcounter_ms_t; // Use 64-bit because of 32-bit is going to roll over back to zero after roughly 49.7 days that is not good for IoT devices which need keep running for months
+#else
+    typedef uint_fast32_t tickcounter_ms_t;
+#endif
+
+    typedef struct TICK_COUNTER_INSTANCE_TAG *TICK_COUNTER_HANDLE;
+
+    MOCKABLE_FUNCTION(, TICK_COUNTER_HANDLE, tickcounter_create);
+    MOCKABLE_FUNCTION(, void, tickcounter_destroy, TICK_COUNTER_HANDLE, tick_counter);
+    MOCKABLE_FUNCTION(, int, tickcounter_get_current_ms, TICK_COUNTER_HANDLE, tick_counter, tickcounter_ms_t *, current_ms);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* TICKCOUNTER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tlsio.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tlsio.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tlsio.h	(revision 389)
@@ -0,0 +1,25 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef TLSIO_H
+#define TLSIO_H
+
+#include "xio.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct TLSIO_CONFIG_TAG
+{
+    const char* hostname;
+    int port;
+    const IO_INTERFACE_DESCRIPTION* underlying_io_interface;
+    void* underlying_io_parameters;
+} TLSIO_CONFIG;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* TLSIO_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tlsio_wolfssl.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tlsio_wolfssl.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/tlsio_wolfssl.h	(revision 389)
@@ -0,0 +1,35 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef TLSIO_WOLFSSL_H
+#define TLSIO_WOLFSSL_H
+
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/const_defines.h"
+
+#ifdef __cplusplus
+extern "C" {
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif /* __cplusplus */
+
+extern const char* const OPTION_WOLFSSL_SET_DEVICE_ID;
+
+MOCKABLE_FUNCTION(, CONCRETE_IO_HANDLE, tlsio_wolfssl_create, void*, io_create_parameters);
+MOCKABLE_FUNCTION(, void, tlsio_wolfssl_destroy, CONCRETE_IO_HANDLE, tls_io);
+MOCKABLE_FUNCTION(, int, tlsio_wolfssl_open, CONCRETE_IO_HANDLE, tls_io, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context);
+MOCKABLE_FUNCTION(, int, tlsio_wolfssl_close, CONCRETE_IO_HANDLE, tls_io, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, int, tlsio_wolfssl_send, CONCRETE_IO_HANDLE, tls_io, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, void, tlsio_wolfssl_dowork, CONCRETE_IO_HANDLE, tls_io);
+MOCKABLE_FUNCTION(, int, tlsio_wolfssl_setoption, CONCRETE_IO_HANDLE, tls_io, const char*, optionName, const void*, value);
+
+MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, tlsio_wolfssl_get_interface_description);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* TLSIO_WOLFSSL_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/umock_c_prod.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/umock_c_prod.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/umock_c_prod.h	(revision 389)
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#undef MOCKABLE_FUNCTION
+
+/* This header is meant to be included by production code headers, so that the MOCKABLE_FUNCTION gets enabled. */
+/*
+    If you are porting to a new platform and do not want to build the tests, but only the production code,
+    simply make sure that this file is in the include path (either by copying it to your inc folder or
+    by adjusting the include paths).
+*/
+
+#ifdef ENABLE_MOCKS
+
+/* Codes_SRS_UMOCK_C_LIB_01_001: [MOCKABLE_FUNCTION shall be used to wrap function definition allowing the user to declare a function that can be mocked.]*/
+#define MOCKABLE_FUNCTION(modifiers, result, function, ...) \
+    MOCKABLE_FUNCTION_UMOCK_INTERNAL_WITH_MOCK(modifiers, result, function, __VA_ARGS__)
+
+#include "umock_c.h"
+
+#else
+
+#include "azure_c_shared_utility/macro_utils.h"
+
+#define UMOCK_C_PROD_ARG_IN_SIGNATURE(count, arg_type, arg_name) arg_type arg_name MU_IFCOMMA(count)
+
+/* Codes_SRS_UMOCK_C_LIB_01_002: [The macro shall generate a function signature in case ENABLE_MOCKS is not defined.] */
+/* Codes_SRS_UMOCK_C_LIB_01_005: [**If ENABLE_MOCKS is not defined, MOCKABLE_FUNCTION shall only generate a declaration for the function.] */
+/* Codes_SRS_UMOCK_C_LIB_01_001: [MOCKABLE_FUNCTION shall be used to wrap function definition allowing the user to declare a function that can be mocked.]*/
+#define MOCKABLE_FUNCTION(modifiers, result, function, ...) \
+    result modifiers function(MU_IF(MU_COUNT_ARG(__VA_ARGS__),,void) MU_FOR_EACH_2_COUNTED(UMOCK_C_PROD_ARG_IN_SIGNATURE, __VA_ARGS__));
+
+#endif
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uniqueid.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uniqueid.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uniqueid.h	(revision 389)
@@ -0,0 +1,31 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef UNIQUEID_H
+#define UNIQUEID_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#define UNIQUEID_RESULT_VALUES    \
+    UNIQUEID_OK,                  \
+    UNIQUEID_INVALID_ARG,         \
+    UNIQUEID_ERROR
+
+    MU_DEFINE_ENUM(UNIQUEID_RESULT, UNIQUEID_RESULT_VALUES)
+
+        MOCKABLE_FUNCTION(, UNIQUEID_RESULT, UniqueId_Generate, char*, uid, size_t, bufferSize);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* UNIQUEID_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/urlencode.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/urlencode.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/urlencode.h	(revision 389)
@@ -0,0 +1,45 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef URLENCODE_H
+#define URLENCODE_H
+
+#include "azure_c_shared_utility/strings.h"
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    /* @brief   URL Encode (aka percent encode) a string.
+    * Please note that while the URL encoder accepts the full range of 8-bit extended ASCII,
+    * it has unpredictable behavior beyond the 7-bit ASCII standard. This function does NOT
+    * guarantee correctness of output for characters outside this range.
+    *
+    * @param    URL Encode can be done on a const char* or a STRING_HANDLE, use the appropriate
+    * function depending on input type, they both behave the same way.
+    *
+    * @return   Returns a STRING_HANDLE with the encoded string, or NULL on failure.
+    */
+    MOCKABLE_FUNCTION(, STRING_HANDLE, URL_Encode, STRING_HANDLE, input);
+    MOCKABLE_FUNCTION(, STRING_HANDLE, URL_EncodeString, const char*, textEncode);
+
+    /* @brief   URL Decode (aka percent decode) a string.
+    * Please note that the URL decoder only supports decoding characters that fall within the
+    * 7-bit ASCII range. It does NOT support 8-bit extended ASCII, and will fail if you try.
+    *
+    * @param    URL Decode can be done on a const char* or a STRING_HANDLE, use the appropriate
+    * function depending on input type, they both behave the same way.
+    *
+    * @return   Returns a STRING_HANDLE with the decoded string, or NULL on failure.
+    */
+    MOCKABLE_FUNCTION(, STRING_HANDLE, URL_Decode, STRING_HANDLE, input);
+    MOCKABLE_FUNCTION(, STRING_HANDLE, URL_DecodeString, const char*, textDecode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* URLENCODE_H */
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/utf8_checker.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/utf8_checker.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/utf8_checker.h	(revision 389)
@@ -0,0 +1,23 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef UTF8_CHECKER_H
+#define UTF8_CHECKER_H
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stdbool.h>
+#include <stddef.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+MOCKABLE_FUNCTION(, bool, utf8_checker_is_valid_utf8, const unsigned char*, utf8_str, size_t, length);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* UTF8_CHECKER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uuid.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uuid.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uuid.h	(revision 389)
@@ -0,0 +1,58 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef UUID_H
+#define UUID_H
+
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdint>
+extern "C" {
+#else
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+#endif /* __cplusplus */
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef unsigned char UUID_T[16];
+
+/* These 2 strings can be conveniently used directly in printf statements
+  Notice that PRI_UUID has to be used like any other print format specifier, meaning it
+  has to be preceded with % */
+#define PRI_UUID        "02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
+#define UUID_FORMAT_VALUES(uuid) \
+    (uuid)[0], (uuid)[1], (uuid)[2], (uuid)[3], (uuid)[4], (uuid)[5], (uuid)[6], (uuid)[7], \
+    (uuid)[8], (uuid)[9], (uuid)[10], (uuid)[11], (uuid)[12], (uuid)[13], (uuid)[14], (uuid)[15]
+
+#define UUID_FORMAT_VALUES_OR_NULL(uuid) \
+    ((uuid) == NULL) ? 0 : (uuid)[0], ((uuid) == NULL) ? 0 : (uuid)[1], ((uuid) == NULL) ? 0 : (uuid)[2], ((uuid) == NULL) ? 0 : (uuid)[3], \
+    ((uuid) == NULL) ? 0 : (uuid)[4], ((uuid) == NULL) ? 0 : (uuid)[5], ((uuid) == NULL) ? 0 : (uuid)[6], ((uuid) == NULL) ? 0 : (uuid)[7], \
+    ((uuid) == NULL) ? 0 : (uuid)[8], ((uuid) == NULL) ? 0 : (uuid)[9], ((uuid) == NULL) ? 0 : (uuid)[10], ((uuid) == NULL) ? 0 : (uuid)[11], \
+    ((uuid) == NULL) ? 0 : (uuid)[12], ((uuid) == NULL) ? 0 : (uuid)[13], ((uuid) == NULL) ? 0 : (uuid)[14], ((uuid) == NULL) ? 0 : (uuid)[15] \
+
+/* @brief               Generates a true UUID
+*  @param uuid          A pre-allocated buffer for the bytes of the generated UUID
+*  @returns             Zero if no failures occur, non-zero otherwise.
+*/
+MOCKABLE_FUNCTION(, int, UUID_generate, UUID_T*, uuid);
+
+/* @brief               Gets the UUID value (byte sequence) of an well-formed UUID string.
+*  @param uuid_string   A null-terminated well-formed UUID string (e.g., "7f907d75-5e13-44cf-a1a3-19a01a2b4528").
+*  @param uuid          Sequence of bytes representing an UUID.
+*  @returns             Zero if no failures occur, non-zero otherwise.
+*/
+MOCKABLE_FUNCTION(, int, UUID_from_string, const char*, uuid_string, UUID_T*, uuid);
+
+/* @brief               Gets the string representation of the UUID value.
+*  @param uuid          Sequence of bytes representing an UUID.
+*  @returns             A null-terminated string representation of the UUID value provided (e.g., "7f907d75-5e13-44cf-a1a3-19a01a2b4528").
+*/
+MOCKABLE_FUNCTION(, char*, UUID_to_string, const UUID_T*, uuid);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* UUID_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uws_client.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uws_client.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uws_client.h	(revision 389)
@@ -0,0 +1,118 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef UWS_CLIENT_H
+#define UWS_CLIENT_H
+
+#include "xio.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/optionhandler.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdint>
+extern "C" {
+#else
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#endif
+
+typedef struct UWS_CLIENT_INSTANCE_TAG* UWS_CLIENT_HANDLE;
+
+#define WS_SEND_FRAME_RESULT_VALUES \
+    WS_SEND_FRAME_OK, \
+    WS_SEND_FRAME_ERROR, \
+    WS_SEND_FRAME_CANCELLED
+
+MU_DEFINE_ENUM(WS_SEND_FRAME_RESULT, WS_SEND_FRAME_RESULT_VALUES);
+
+#define WS_OPEN_RESULT_VALUES \
+    WS_OPEN_OK, \
+    WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED, \
+    WS_OPEN_ERROR_UNDERLYING_IO_OPEN_CANCELLED, \
+    WS_OPEN_ERROR_NOT_ENOUGH_MEMORY, \
+    WS_OPEN_ERROR_CANNOT_CONSTRUCT_UPGRADE_REQUEST, \
+    WS_OPEN_ERROR_CANNOT_SEND_UPGRADE_REQUEST, \
+    WS_OPEN_ERROR_MULTIPLE_UNDERLYING_IO_OPEN_EVENTS, \
+    WS_OPEN_ERROR_CONSTRUCTING_UPGRADE_REQUEST, \
+    WS_OPEN_ERROR_INVALID_BYTES_RECEIVED_ARGUMENTS, \
+    WS_OPEN_ERROR_BYTES_RECEIVED_BEFORE_UNDERLYING_OPEN, \
+    WS_OPEN_CANCELLED, \
+    WS_OPEN_ERROR_UNDERLYING_IO_ERROR, \
+    WS_OPEN_ERROR_BAD_UPGRADE_RESPONSE, \
+    WS_OPEN_ERROR_BAD_RESPONSE_STATUS, \
+    WS_OPEN_ERROR_BASE64_ENCODE_FAILED
+
+MU_DEFINE_ENUM(WS_OPEN_RESULT, WS_OPEN_RESULT_VALUES);
+
+#define WS_ERROR_VALUES \
+    WS_ERROR_NOT_ENOUGH_MEMORY, \
+    WS_ERROR_BAD_FRAME_RECEIVED, \
+    WS_ERROR_CANNOT_REMOVE_SENT_ITEM_FROM_LIST, \
+    WS_ERROR_UNDERLYING_IO_ERROR, \
+    WS_ERROR_CANNOT_CLOSE_UNDERLYING_IO
+
+MU_DEFINE_ENUM(WS_ERROR, WS_ERROR_VALUES);
+
+#define WS_FRAME_TYPE_UNKNOWN       0x00
+#define WS_FRAME_TYPE_TEXT          0x01
+#define WS_FRAME_TYPE_BINARY        0x02
+
+/* Codes_SRS_UWS_CLIENT_01_324: [ 1000 indicates a normal closure, meaning that the purpose for which the connection was established has been fulfilled. ]*/
+/* Codes_SRS_UWS_CLIENT_01_325: [ 1001 indicates that an endpoint is "going away", such as a server going down or a browser having navigated away from a page. ]*/
+/* Codes_SRS_UWS_CLIENT_01_326: [ 1002 indicates that an endpoint is terminating the connection due to a protocol error. ]*/
+/* Codes_SRS_UWS_CLIENT_01_327: [ 1003 indicates that an endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message). ]*/
+/* Codes_SRS_UWS_CLIENT_01_328: [ Reserved.  The specific meaning might be defined in the future. ]*/
+/* Codes_SRS_UWS_CLIENT_01_329: [ 1005 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. ]*/
+/* Codes_SRS_UWS_CLIENT_01_330: [ 1006 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. ]*/
+/* Codes_SRS_UWS_CLIENT_01_331: [ 1007 indicates that an endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [RFC3629] data within a text message). ]*/
+/* Codes_SRS_UWS_CLIENT_01_332: [ 1008 indicates that an endpoint is terminating the connection because it has received a message that violates its policy. ]*/
+/* Codes_SRS_UWS_CLIENT_01_333: [ 1009 indicates that an endpoint is terminating the connection because it has received a message that is too big for it to process. ]*/
+/* Codes_SRS_UWS_CLIENT_01_334: [ 1010 indicates that an endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. ]*/
+/* Codes_SRS_UWS_CLIENT_01_336: [ 1011 indicates that a server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request. ]*/
+/* Codes_SRS_UWS_CLIENT_01_337: [ 1015 is a reserved value and MUST NOT be set as a status code in a Close control frame by an endpoint. ]*/
+/*  */
+#define CLOSE_NORMAL                        1000
+#define CLOSE_GOING_AWAY                    1001
+#define CLOSE_PROTOCOL_ERROR                1002
+#define CLOSE_CANNOT_ACCEPT_DATA_TYPE       1003
+#define CLOSE_UNDEFINED_1004                1004
+#define CLOSE_RESERVED_1005                 1005
+#define CLOSE_RESERVED_1006                 1006
+#define CLOSE_INCONSISTENT_DATA_IN_MESSAGE  1007
+#define CLOSE_POLICY_VIOLATION              1008
+#define CLOSE_MESSAGE_TOO_BIG               1009
+#define CLOSE_UNSUPPORTED_EXTENSION_LIST    1010
+#define CLOSE_UNEXPECTED_CONDITION          1011
+#define CLOSE_RESERVED_1015                 1015
+
+typedef void(*ON_WS_FRAME_RECEIVED)(void* context, unsigned char frame_type, const unsigned char* buffer, size_t size);
+typedef void(*ON_WS_SEND_FRAME_COMPLETE)(void* context, WS_SEND_FRAME_RESULT ws_send_frame_result);
+typedef void(*ON_WS_OPEN_COMPLETE)(void* context, WS_OPEN_RESULT ws_open_result);
+typedef void(*ON_WS_CLOSE_COMPLETE)(void* context);
+typedef void(*ON_WS_PEER_CLOSED)(void* context, uint16_t* close_code, const unsigned char* extra_data, size_t extra_data_length);
+typedef void(*ON_WS_ERROR)(void* context, WS_ERROR error_code);
+
+typedef struct WS_PROTOCOL_TAG
+{
+    const char* protocol;
+} WS_PROTOCOL;
+
+MOCKABLE_FUNCTION(, UWS_CLIENT_HANDLE, uws_client_create, const char*, hostname, unsigned int, port, const char*, resource_name, bool, use_ssl, const WS_PROTOCOL*, protocols, size_t, protocol_count);
+MOCKABLE_FUNCTION(, UWS_CLIENT_HANDLE, uws_client_create_with_io, const IO_INTERFACE_DESCRIPTION*, io_interface, void*, io_create_parameters, const char*, hostname, unsigned int, port, const char*, resource_name, const WS_PROTOCOL*, protocols, size_t, protocol_count)
+MOCKABLE_FUNCTION(, void, uws_client_destroy, UWS_CLIENT_HANDLE, uws_client);
+MOCKABLE_FUNCTION(, int, uws_client_open_async, UWS_CLIENT_HANDLE, uws_client, ON_WS_OPEN_COMPLETE, on_ws_open_complete, void*, on_ws_open_complete_context, ON_WS_FRAME_RECEIVED, on_ws_frame_received, void*, on_ws_frame_received_context, ON_WS_PEER_CLOSED, on_ws_peer_closed, void*, on_ws_peer_closed_context, ON_WS_ERROR, on_ws_error, void*, on_ws_error_context);
+MOCKABLE_FUNCTION(, int, uws_client_close_async, UWS_CLIENT_HANDLE, uws_client, ON_WS_CLOSE_COMPLETE, on_ws_close_complete, void*, on_ws_close_complete_context);
+MOCKABLE_FUNCTION(, int, uws_client_close_handshake_async, UWS_CLIENT_HANDLE, uws_client, uint16_t, close_code, const char*, close_reason, ON_WS_CLOSE_COMPLETE, on_ws_close_complete, void*, on_ws_close_complete_context);
+MOCKABLE_FUNCTION(, int, uws_client_send_frame_async, UWS_CLIENT_HANDLE, uws_client, unsigned char, frame_type, const unsigned char*, buffer, size_t, size, bool, is_final, ON_WS_SEND_FRAME_COMPLETE, on_ws_send_frame_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, void, uws_client_dowork, UWS_CLIENT_HANDLE, uws_client);
+MOCKABLE_FUNCTION(, int, uws_client_set_request_header, UWS_CLIENT_HANDLE, uws_client, const char*, name, const char*, value);
+MOCKABLE_FUNCTION(, int, uws_client_set_option, UWS_CLIENT_HANDLE, uws_client, const char*, option_name, const void*, value);
+MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, uws_client_retrieve_options, UWS_CLIENT_HANDLE, uws_client);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* UWS_CLIENT_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uws_frame_encoder.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uws_frame_encoder.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/uws_frame_encoder.h	(revision 389)
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef UWS_FRAME_ENCODER_H
+#define UWS_FRAME_ENCODER_H
+
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/macro_utils.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stdbool.h>
+#include <stddef.h>
+#endif
+
+#define RESERVED_1  0x04
+#define RESERVED_2  0x02
+#define RESERVED_3  0x01
+
+#define WS_FRAME_TYPE_VALUES \
+    WS_CONTINUATION_FRAME, \
+    WS_TEXT_FRAME, \
+    WS_BINARY_FRAME, \
+    WS_RESERVED_NON_CONTROL_FRAME_3, \
+    WS_RESERVED_NON_CONTROL_FRAME_4, \
+    WS_RESERVED_NON_CONTROL_FRAME_5, \
+    WS_RESERVED_NON_CONTROL_FRAME_6, \
+    WS_RESERVED_NON_CONTROL_FRAME_7, \
+    WS_CLOSE_FRAME, \
+    WS_PING_FRAME, \
+    WS_PONG_FRAME, \
+    WS_RESERVED_CONTROL_FRAME_B, \
+    WS_RESERVED_CONTROL_FRAME_C, \
+    WS_RESERVED_CONTROL_FRAME_D, \
+    WS_RESERVED_CONTROL_FRAME_E, \
+    WS_RESERVED_CONTROL_FRAME_F
+
+MU_DEFINE_ENUM(WS_FRAME_TYPE, WS_FRAME_TYPE_VALUES);
+
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, uws_frame_encoder_encode, WS_FRAME_TYPE, opcode, const unsigned char*, payload, size_t, length, bool, is_masked, bool, is_final, unsigned char, reserved);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* UWS_FRAME_ENCODER_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector.h	(revision 389)
@@ -0,0 +1,45 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef VECTOR_H
+#define VECTOR_H
+
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/vector_types.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#include <stdbool.h>
+#endif
+
+/* creation */
+MOCKABLE_FUNCTION(, VECTOR_HANDLE, VECTOR_create, size_t, elementSize);
+MOCKABLE_FUNCTION(, VECTOR_HANDLE, VECTOR_move, VECTOR_HANDLE, handle);
+MOCKABLE_FUNCTION(, void, VECTOR_destroy, VECTOR_HANDLE, handle);
+
+/* insertion */
+MOCKABLE_FUNCTION(, int, VECTOR_push_back, VECTOR_HANDLE, handle, const void*, elements, size_t, numElements);
+
+/* removal */
+MOCKABLE_FUNCTION(, void, VECTOR_erase, VECTOR_HANDLE, handle, void*, elements, size_t, numElements);
+MOCKABLE_FUNCTION(, void, VECTOR_clear, VECTOR_HANDLE, handle);
+
+/* access */
+MOCKABLE_FUNCTION(, void*, VECTOR_element, VECTOR_HANDLE, handle, size_t, index);
+MOCKABLE_FUNCTION(, void*, VECTOR_front, VECTOR_HANDLE, handle);
+MOCKABLE_FUNCTION(, void*, VECTOR_back, VECTOR_HANDLE, handle);
+MOCKABLE_FUNCTION(, void*, VECTOR_find_if, VECTOR_HANDLE, handle, PREDICATE_FUNCTION, pred, const void*, value);
+
+/* capacity */
+MOCKABLE_FUNCTION(, size_t, VECTOR_size, VECTOR_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VECTOR_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector_types.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector_types.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector_types.h	(revision 389)
@@ -0,0 +1,22 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef VECTOR_TYPES_H
+#define VECTOR_TYPES_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#else
+#include <stdbool.h>
+#endif
+
+typedef struct VECTOR_TAG* VECTOR_HANDLE;
+
+typedef bool(*PREDICATE_FUNCTION)(const void* element, const void* value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* VECTOR_TYPES_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector_types_internal.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector_types_internal.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/vector_types_internal.h	(revision 389)
@@ -0,0 +1,20 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef VECTOR_TYPES_INTERNAL_H
+#define VECTOR_TYPES_INTERNAL_H
+
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif
+
+typedef struct VECTOR_TAG
+{
+    void* storage;
+    size_t count;
+    size_t elementSize;
+} VECTOR;
+
+#endif /* VECTOR_TYPES_INTERNAL_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/wsio.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/wsio.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/wsio.h	(revision 389)
@@ -0,0 +1,35 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef WSIO_H
+#define WSIO_H
+
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C" {
+#include <cstddef>
+#else
+#include <stddef.h>
+#include <stdbool.h>
+#endif /* __cplusplus */
+
+typedef struct WSIO_CONFIG_TAG
+{
+    const IO_INTERFACE_DESCRIPTION* underlying_io_interface;
+    void* underlying_io_parameters;
+    const char* hostname;
+    int port;
+    const char* resource_name;
+    const char* protocol;
+} WSIO_CONFIG;
+
+MOCKABLE_FUNCTION(, const IO_INTERFACE_DESCRIPTION*, wsio_get_interface_description);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* WSIO_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/xio.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/xio.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/xio.h	(revision 389)
@@ -0,0 +1,77 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef XIO_H
+#define XIO_H
+
+#include "azure_c_shared_utility/optionhandler.h"
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/macro_utils.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif /* __cplusplus */
+
+typedef struct XIO_INSTANCE_TAG* XIO_HANDLE;
+typedef void* CONCRETE_IO_HANDLE;
+
+#define IO_SEND_RESULT_VALUES \
+    IO_SEND_OK, \
+    IO_SEND_ERROR, \
+    IO_SEND_CANCELLED
+
+MU_DEFINE_ENUM(IO_SEND_RESULT, IO_SEND_RESULT_VALUES);
+
+#define IO_OPEN_RESULT_VALUES \
+    IO_OPEN_OK, \
+    IO_OPEN_ERROR, \
+    IO_OPEN_CANCELLED
+
+MU_DEFINE_ENUM(IO_OPEN_RESULT, IO_OPEN_RESULT_VALUES);
+
+typedef void(*ON_BYTES_RECEIVED)(void* context, const unsigned char* buffer, size_t size);
+typedef void(*ON_SEND_COMPLETE)(void* context, IO_SEND_RESULT send_result);
+typedef void(*ON_IO_OPEN_COMPLETE)(void* context, IO_OPEN_RESULT open_result);
+typedef void(*ON_IO_CLOSE_COMPLETE)(void* context);
+typedef void(*ON_IO_ERROR)(void* context);
+
+typedef OPTIONHANDLER_HANDLE (*IO_RETRIEVEOPTIONS)(CONCRETE_IO_HANDLE concrete_io);
+typedef CONCRETE_IO_HANDLE(*IO_CREATE)(void* io_create_parameters);
+typedef void(*IO_DESTROY)(CONCRETE_IO_HANDLE concrete_io);
+typedef int(*IO_OPEN)(CONCRETE_IO_HANDLE concrete_io, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context);
+typedef int(*IO_CLOSE)(CONCRETE_IO_HANDLE concrete_io, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* callback_context);
+typedef int(*IO_SEND)(CONCRETE_IO_HANDLE concrete_io, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context);
+typedef void(*IO_DOWORK)(CONCRETE_IO_HANDLE concrete_io);
+typedef int(*IO_SETOPTION)(CONCRETE_IO_HANDLE concrete_io, const char* optionName, const void* value);
+
+
+typedef struct IO_INTERFACE_DESCRIPTION_TAG
+{
+    IO_RETRIEVEOPTIONS concrete_io_retrieveoptions;
+    IO_CREATE concrete_io_create;
+    IO_DESTROY concrete_io_destroy;
+    IO_OPEN concrete_io_open;
+    IO_CLOSE concrete_io_close;
+    IO_SEND concrete_io_send;
+    IO_DOWORK concrete_io_dowork;
+    IO_SETOPTION concrete_io_setoption;
+} IO_INTERFACE_DESCRIPTION;
+
+MOCKABLE_FUNCTION(, XIO_HANDLE, xio_create, const IO_INTERFACE_DESCRIPTION*, io_interface_description, const void*, io_create_parameters);
+MOCKABLE_FUNCTION(, void, xio_destroy, XIO_HANDLE, xio);
+MOCKABLE_FUNCTION(, int, xio_open, XIO_HANDLE, xio, ON_IO_OPEN_COMPLETE, on_io_open_complete, void*, on_io_open_complete_context, ON_BYTES_RECEIVED, on_bytes_received, void*, on_bytes_received_context, ON_IO_ERROR, on_io_error, void*, on_io_error_context);
+MOCKABLE_FUNCTION(, int, xio_close, XIO_HANDLE, xio, ON_IO_CLOSE_COMPLETE, on_io_close_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, int, xio_send, XIO_HANDLE, xio, const void*, buffer, size_t, size, ON_SEND_COMPLETE, on_send_complete, void*, callback_context);
+MOCKABLE_FUNCTION(, void, xio_dowork, XIO_HANDLE, xio);
+MOCKABLE_FUNCTION(, int, xio_setoption, XIO_HANDLE, xio, const char*, optionName, const void*, value);
+MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, xio_retrieveoptions, XIO_HANDLE, xio);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* XIO_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/xlogging.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/xlogging.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/inc/azure_c_shared_utility/xlogging.h	(revision 389)
@@ -0,0 +1,163 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef XLOGGING_H
+#define XLOGGING_H
+
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/optimize_size.h"
+
+#if defined(ESP8266_RTOS)
+#include "c_types.h"
+#endif
+
+#if defined(ARDUINO_ARCH_ESP8266)
+#include "esp8266/azcpgmspace.h"
+#endif
+
+#ifdef __cplusplus
+/* Some compilers do not want to play by the standard, specifically ARM CC */
+#ifdef MBED_BUILD_TIMESTAMP
+#include <stdio.h>
+#else
+#include <cstdio>
+#endif
+extern "C" {
+#else
+#include <stdio.h>
+#endif /* __cplusplus */
+
+#ifdef TIZENRT
+#undef LOG_INFO
+#endif
+
+typedef enum LOG_CATEGORY_TAG
+{
+    AZ_LOG_ERROR,
+    AZ_LOG_INFO,
+    AZ_LOG_TRACE
+} LOG_CATEGORY;
+
+#if defined _MSC_VER
+#define FUNC_NAME __FUNCDNAME__
+#else
+#define FUNC_NAME __func__
+#endif
+
+typedef void(*LOGGER_LOG)(LOG_CATEGORY log_category, const char* file, const char* func, int line, unsigned int options, const char* format, ...);
+typedef void(*LOGGER_LOG_GETLASTERROR)(const char* file, const char* func, int line, const char* format, ...);
+
+#define TEMP_BUFFER_SIZE 1024
+#define MESSAGE_BUFFER_SIZE 260
+
+#define LOG_NONE 0x00
+#define LOG_LINE 0x01
+
+/*no logging is useful when time and fprintf are mocked*/
+#ifdef NO_LOGGING
+#define LOG(...)
+#define LogInfo(...)
+#define LogBinary(...)
+#define LogError(...)
+#define xlogging_get_log_function() NULL
+#define xlogging_set_log_function(...)
+#define LogErrorWinHTTPWithGetLastErrorAsString(...)
+#define UNUSED(x) (void)(x)
+#elif (defined MINIMAL_LOGERROR)
+#define LOG(...)
+#define LogInfo(...)
+#define LogBinary(...)
+#define LogError(...) printf("error %s: line %d\n",__FILE__,__LINE__);
+#define xlogging_get_log_function() NULL
+#define xlogging_set_log_function(...)
+#define LogErrorWinHTTPWithGetLastErrorAsString(...)
+#define UNUSED(x) (void)(x)
+
+#elif defined(ESP8266_RTOS)
+#define LogInfo(FORMAT, ...) do {    \
+        static const char flash_str[] ICACHE_RODATA_ATTR STORE_ATTR = FORMAT;  \
+        printf(flash_str, ##__VA_ARGS__);   \
+        printf("\n");\
+    } while((void)0,0)
+
+#define LogError LogInfo
+#define LOG(log_category, log_options, FORMAT, ...)  { \
+        static const char flash_str[] ICACHE_RODATA_ATTR STORE_ATTR = (FORMAT); \
+        printf(flash_str, ##__VA_ARGS__); \
+        printf("\r\n"); \
+}
+
+#else /* NOT ESP8266_RTOS */
+
+// In order to make sure that the compiler evaluates the arguments and issues an error if they do not conform to printf
+// specifications, we call printf with the format and __VA_ARGS__ but the call is behind an if (0) so that it does
+// not actually get executed at runtime
+#if defined _MSC_VER
+// ignore warning C4127 
+#define LOG(log_category, log_options, format, ...) \
+{ \
+    __pragma(warning(suppress: 4127)) \
+    if (0) \
+    { \
+        (void)printf(format, __VA_ARGS__); \
+    } \
+    { \
+        LOGGER_LOG l = xlogging_get_log_function(); \
+        if (l != NULL) \
+        { \
+            l(log_category, __FILE__, FUNC_NAME, __LINE__, log_options, format, __VA_ARGS__); \
+        } \
+    } \
+}
+#else
+#define LOG(log_category, log_options, format, ...) { if (0) { (void)printf(format, ##__VA_ARGS__); } { LOGGER_LOG l = xlogging_get_log_function(); if (l != NULL) l(log_category, __FILE__, FUNC_NAME, __LINE__, log_options, format, ##__VA_ARGS__); } }
+#endif
+
+#if defined _MSC_VER
+#define LogInfo(FORMAT, ...) do{LOG(AZ_LOG_INFO, LOG_LINE, FORMAT, __VA_ARGS__); }while((void)0,0)
+#else
+#define LogInfo(FORMAT, ...) do{LOG(AZ_LOG_INFO, LOG_LINE, FORMAT, ##__VA_ARGS__); }while((void)0,0)
+#endif
+
+#ifdef WIN32
+extern void xlogging_LogErrorWinHTTPWithGetLastErrorAsStringFormatter(int errorMessageID);
+#endif
+
+#if defined _MSC_VER
+
+extern void xlogging_set_log_function_GetLastError(LOGGER_LOG_GETLASTERROR log_function);
+extern LOGGER_LOG_GETLASTERROR xlogging_get_log_function_GetLastError(void);
+#define LogLastError(FORMAT, ...) do{ LOGGER_LOG_GETLASTERROR l = xlogging_get_log_function_GetLastError(); if(l!=NULL) l(__FILE__, FUNC_NAME, __LINE__, FORMAT, __VA_ARGS__); }while((void)0,0)
+
+#define LogError(FORMAT, ...) do{ LOG(AZ_LOG_ERROR, LOG_LINE, FORMAT, __VA_ARGS__); }while((void)0,0)
+#define LogErrorWinHTTPWithGetLastErrorAsString(FORMAT, ...) do { \
+                int errorMessageID = GetLastError(); \
+                LogError(FORMAT, __VA_ARGS__); \
+                xlogging_LogErrorWinHTTPWithGetLastErrorAsStringFormatter(errorMessageID); \
+            } while((void)0,0)
+#else // _MSC_VER
+#define LogError(FORMAT, ...) do{ LOG(AZ_LOG_ERROR, LOG_LINE, FORMAT, ##__VA_ARGS__); }while((void)0,0)
+
+#ifdef WIN32
+// Included when compiling on Windows but not with MSVC, e.g. with MinGW.
+#define LogErrorWinHTTPWithGetLastErrorAsString(FORMAT, ...) do { \
+                int errorMessageID = GetLastError(); \
+                LogError(FORMAT, ##__VA_ARGS__); \
+                xlogging_LogErrorWinHTTPWithGetLastErrorAsStringFormatter(errorMessageID); \
+            } while((void)0,0)
+#endif // WIN32
+
+#endif // _MSC_VER
+
+extern void LogBinary(const char* comment, const void* data, size_t size);
+
+extern void xlogging_set_log_function(LOGGER_LOG log_function);
+extern LOGGER_LOG xlogging_get_log_function(void);
+
+#endif /* NOT ESP8266_RTOS */
+
+#ifdef __cplusplus
+}   // extern "C"
+#endif /* __cplusplus */
+
+#endif /* XLOGGING_H */
Index: azure_iot_hub/trunk/azure_iothub/c-utility/pal/toppers/refcount_os.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/pal/toppers/refcount_os.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/pal/toppers/refcount_os.h	(revision 389)
@@ -0,0 +1,21 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+// This file gets included into refcount.h as a means of extending the behavior of
+// atomic increment, decrement, and test.
+//
+// The Azure IoT C SDK does not require thread-safe refcount operations, so
+// this file is appropriate for any device when using the Azure IoT C SDK.
+
+#ifndef REFCOUNT_OS_H__GENERIC
+#define REFCOUNT_OS_H__GENERIC
+
+#define COUNT_TYPE uint32_t
+
+#define DEC_RETURN_ZERO (0)
+
+#define INC_REF_VAR(count) ++(count)
+#define DEC_REF_VAR(count) --(count)
+#define INIT_REF_VAR(count) do { count = 1; } while((void)0,0)
+
+#endif // REFCOUNT_OS_H__GENERIC
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/azure_base64.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/azure_base64.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/azure_base64.c	(revision 389)
@@ -0,0 +1,368 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include <stddef.h>
+#include <stdint.h>
+#include "azure_c_shared_utility/azure_base64.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+
+#define splitInt(intVal, bytePos)   (char)((intVal >> (bytePos << 3)) & 0xFF)
+#define joinChars(a, b, c, d) (uint32_t)((uint32_t)a + ((uint32_t)b << 8) + ((uint32_t)c << 16) + ((uint32_t)d << 24))
+
+static char base64char(unsigned char val)
+{
+    char result;
+
+    if (val < 26)
+    {
+        result = 'A' + (char)val;
+    }
+    else if (val < 52)
+    {
+        result = 'a' + ((char)val - 26);
+    }
+    else if (val < 62)
+    {
+        result = '0' + ((char)val - 52);
+    }
+    else if (val == 62)
+    {
+        result = '+';
+    }
+    else
+    {
+        result = '/';
+    }
+
+    return result;
+}
+
+static char base64b16(unsigned char val)
+{
+    const uint32_t base64b16values[4] = {
+        joinChars('A', 'E', 'I', 'M'),
+        joinChars('Q', 'U', 'Y', 'c'),
+        joinChars('g', 'k', 'o', 's'),
+        joinChars('w', '0', '4', '8')
+    };
+    return splitInt(base64b16values[val >> 2], (val & 0x03));
+}
+
+static char base64b8(unsigned char val)
+{
+    const uint32_t base64b8values = joinChars('A', 'Q', 'g', 'w');
+    return splitInt(base64b8values, val);
+}
+
+static int base64toValue(char base64character, unsigned char* value)
+{
+    int result = 0;
+    if (('A' <= base64character) && (base64character <= 'Z'))
+    {
+        *value = base64character - 'A';
+    }
+    else if (('a' <= base64character) && (base64character <= 'z'))
+    {
+        *value = ('Z' - 'A') + 1 + (base64character - 'a');
+    }
+    else if (('0' <= base64character) && (base64character <= '9'))
+    {
+        *value = ('Z' - 'A') + 1 + ('z' - 'a') + 1 + (base64character - '0');
+    }
+    else if ('+' == base64character)
+    {
+        *value = 62;
+    }
+    else if ('/' == base64character)
+    {
+        *value = 63;
+    }
+    else
+    {
+        *value = 0;
+        result = -1;
+    }
+    return result;
+}
+
+static size_t numberOfBase64Characters(const char* encodedString)
+{
+    size_t length = 0;
+    unsigned char junkChar;
+    while (base64toValue(encodedString[length],&junkChar) != -1)
+    {
+        length++;
+    }
+    return length;
+}
+
+/*returns the count of original bytes before being base64 encoded*/
+/*notice NO validation of the content of encodedString. Its length is validated to be a multiple of 4.*/
+static size_t Base64decode_len(const char *encodedString)
+{
+    size_t result;
+    size_t sourceLength = strlen(encodedString);
+
+    if (sourceLength == 0)
+    {
+        result = 0;
+    }
+    else
+    {
+        result = sourceLength / 4 * 3;
+        if (encodedString[sourceLength - 1] == '=')
+        {
+            if (encodedString[sourceLength - 2] == '=')
+            {
+                result --;
+            }
+            result--;
+        }
+    }
+    return result;
+}
+
+static void Base64decode(unsigned char *decodedString, const char *base64String)
+{
+
+    size_t numberOfEncodedChars;
+    size_t indexOfFirstEncodedChar;
+    size_t decodedIndex;
+
+    //
+    // We can only operate on individual bytes.  If we attempt to work
+    // on anything larger we could get an alignment fault on some
+    // architectures
+    //
+
+    numberOfEncodedChars = numberOfBase64Characters(base64String);
+    indexOfFirstEncodedChar = 0;
+    decodedIndex = 0;
+    while (numberOfEncodedChars >= 4)
+    {
+        unsigned char c1;
+        unsigned char c2;
+        unsigned char c3;
+        unsigned char c4;
+        (void)base64toValue(base64String[indexOfFirstEncodedChar], &c1);
+        (void)base64toValue(base64String[indexOfFirstEncodedChar + 1], &c2);
+        (void)base64toValue(base64String[indexOfFirstEncodedChar + 2], &c3);
+        (void)base64toValue(base64String[indexOfFirstEncodedChar + 3], &c4);
+        decodedString[decodedIndex] = (c1 << 2) | (c2 >> 4);
+        decodedIndex++;
+        decodedString[decodedIndex] = ((c2 & 0x0f) << 4) | (c3 >> 2);
+        decodedIndex++;
+        decodedString[decodedIndex] = ((c3 & 0x03) << 6) | c4;
+        decodedIndex++;
+        numberOfEncodedChars -= 4;
+        indexOfFirstEncodedChar += 4;
+
+    }
+
+    if (numberOfEncodedChars == 2)
+    {
+        unsigned char c1;
+        unsigned char c2;
+        (void)base64toValue(base64String[indexOfFirstEncodedChar], &c1);
+        (void)base64toValue(base64String[indexOfFirstEncodedChar + 1], &c2);
+        decodedString[decodedIndex] = (c1 << 2) | (c2 >> 4);
+    }
+    else if (numberOfEncodedChars == 3)
+    {
+        unsigned char c1;
+        unsigned char c2;
+        unsigned char c3;
+        (void)base64toValue(base64String[indexOfFirstEncodedChar], &c1);
+        (void)base64toValue(base64String[indexOfFirstEncodedChar + 1], &c2);
+        (void)base64toValue(base64String[indexOfFirstEncodedChar + 2], &c3);
+        decodedString[decodedIndex] = (c1 << 2) | (c2 >> 4);
+        decodedIndex++;
+        decodedString[decodedIndex] = ((c2 & 0x0f) << 4) | (c3 >> 2);
+    }
+}
+
+BUFFER_HANDLE Azure_Base64_Decode(const char* source)
+{
+    BUFFER_HANDLE result;
+    /*Codes_SRS_BASE64_06_008: [If source is NULL then Azure_Base64_Decode shall return NULL.]*/
+    if (source == NULL)
+    {
+        LogError("invalid parameter const char* source=%p", source);
+        result = NULL;
+    }
+    else
+    {
+        if ((strlen(source) % 4) != 0)
+        {
+            /*Codes_SRS_BASE64_06_011: [If the source string has an invalid length for a base 64 encoded string then Azure_Base64_Decode shall return NULL.]*/
+            LogError("Invalid length Base64 string!");
+            result = NULL;
+        }
+        else
+        {
+            if ((result = BUFFER_new()) == NULL)
+            {
+                /*Codes_SRS_BASE64_06_010: [If there is any memory allocation failure during the decode then Azure_Base64_Decode shall return NULL.]*/
+                LogError("Could not create a buffer to decoding.");
+            }
+            else
+            {
+                size_t sizeOfOutputBuffer = Base64decode_len(source);
+                /*Codes_SRS_BASE64_06_009: [If the string pointed to by source is zero length then the handle returned shall refer to a zero length buffer.]*/
+                if (sizeOfOutputBuffer > 0)
+                {
+                    if (BUFFER_pre_build(result, sizeOfOutputBuffer) != 0)
+                    {
+                        /*Codes_SRS_BASE64_06_010: [If there is any memory allocation failure during the decode then Azure_Base64_Decode shall return NULL.]*/
+                        LogError("Could not prebuild a buffer for base 64 decoding.");
+                        BUFFER_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        Base64decode(BUFFER_u_char(result), source);
+                    }
+                }
+            }
+        }
+    }
+    return result;
+}
+
+
+static STRING_HANDLE Base64_Encode_Internal(const unsigned char* source, size_t size)
+{
+    STRING_HANDLE result;
+    size_t neededSize = 0;
+    char* encoded;
+    size_t currentPosition = 0;
+    neededSize += (size == 0) ? (0) : ((((size - 1) / 3) + 1) * 4);
+    neededSize += 1; /*+1 because \0 at the end of the string*/
+    /*Codes_SRS_BASE64_06_006: [If when allocating memory to produce the encoding a failure occurs then Base64_Encode shall return NULL.]*/
+    encoded = (char*)malloc(neededSize);
+    if (encoded == NULL)
+    {
+        result = NULL;
+        LogError("Base64_Encode:: Allocation failed.");
+    }
+    else
+    {
+        /*b0            b1(+1)          b2(+2)
+        7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
+        |----c1---| |----c2---| |----c3---| |----c4---|
+        */
+
+        size_t destinationPosition = 0;
+        while (size - currentPosition >= 3)
+        {
+            char c1 = base64char(source[currentPosition] >> 2);
+            char c2 = base64char(
+                ((source[currentPosition] & 3) << 4) |
+                    (source[currentPosition + 1] >> 4)
+            );
+            char c3 = base64char(
+                ((source[currentPosition + 1] & 0x0F) << 2) |
+                    ((source[currentPosition + 2] >> 6) & 3)
+            );
+            char c4 = base64char(
+                source[currentPosition + 2] & 0x3F
+            );
+            currentPosition += 3;
+            encoded[destinationPosition++] = c1;
+            encoded[destinationPosition++] = c2;
+            encoded[destinationPosition++] = c3;
+            encoded[destinationPosition++] = c4;
+
+        }
+        if (size - currentPosition == 2)
+        {
+            char c1 = base64char(source[currentPosition] >> 2);
+            char c2 = base64char(
+                ((source[currentPosition] & 0x03) << 4) |
+                    (source[currentPosition + 1] >> 4)
+            );
+            char c3 = base64b16(source[currentPosition + 1] & 0x0F);
+            encoded[destinationPosition++] = c1;
+            encoded[destinationPosition++] = c2;
+            encoded[destinationPosition++] = c3;
+            encoded[destinationPosition++] = '=';
+        }
+        else if (size - currentPosition == 1)
+        {
+            char c1 = base64char(source[currentPosition] >> 2);
+            char c2 = base64b8(source[currentPosition] & 0x03);
+            encoded[destinationPosition++] = c1;
+            encoded[destinationPosition++] = c2;
+            encoded[destinationPosition++] = '=';
+            encoded[destinationPosition++] = '=';
+        }
+
+        /*null terminating the string*/
+        encoded[destinationPosition] = '\0';
+        /*Codes_SRS_BASE64_06_007: [Otherwise Base64_Encode shall return a pointer to STRING, that string contains the base 64 encoding of input.]*/
+        result = STRING_new_with_memory(encoded);
+        if (result == NULL)
+        {
+            free(encoded);
+            LogError("Base64_Encode:: Allocation failed for return value.");
+        }
+    }
+    return result;
+}
+
+STRING_HANDLE Azure_Base64_Encode_Bytes(const unsigned char* source, size_t size)
+{
+    STRING_HANDLE result;
+    /*Codes_SRS_BASE64_02_001: [If source is NULL then Base64_Encode_Bytes shall return NULL.] */
+    if (source == NULL)
+    {
+        result = NULL;
+    }
+    /*Codes_SRS_BASE64_02_002: [If source is not NULL and size is zero, then Base64_Encode_Bytes shall produce an empty STRING_HANDLE.] */
+    else if (size == 0)
+    {
+        result = STRING_new(); /*empty string*/
+    }
+    else
+    {
+        result = Base64_Encode_Internal(source, size);
+    }
+    return result;
+}
+
+STRING_HANDLE Azure_Base64_Encode(BUFFER_HANDLE input)
+{
+    STRING_HANDLE result;
+    /*the following will happen*/
+    /*1. the "data" of the binary shall be "eaten" 3 characters at a time and produce 4 base64 encoded characters for as long as there are more than 3 characters still to process*/
+    /*2. the remaining characters (1 or 2) shall be encoded.*/
+    /*there's a level of assumption that 'a' corresponds to 0b000000 and that '_' corresponds to 0b111111*/
+    /*the encoding will use the optional [=] or [==] at the end of the encoded string, so that other less standard aware libraries can do their work*/
+    /*these are the bits of the 3 normal bytes to be encoded*/
+
+    /*Codes_SRS_BASE64_06_001: [If input is NULL then Base64_Encode shall return NULL.]*/
+    if (input == NULL)
+    {
+        result = NULL;
+        LogError("Base64_Encode:: NULL input");
+    }
+    else
+    {
+        size_t inputSize;
+        const unsigned char* inputBinary;
+        if ((BUFFER_content(input, &inputBinary) != 0) ||
+            (BUFFER_size(input, &inputSize) != 0))
+        {
+            result = NULL;
+            LogError("Base64_Encode:: BUFFER_routines failure.");
+        }
+        else
+        {
+            result = Base64_Encode_Internal(inputBinary, inputSize);
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/buffer.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/buffer.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/buffer.c	(revision 389)
@@ -0,0 +1,670 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdbool.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+typedef struct BUFFER_TAG
+{
+    unsigned char* buffer;
+    size_t size;
+} BUFFER;
+
+/* Codes_SRS_BUFFER_07_001: [BUFFER_new shall allocate a BUFFER_HANDLE that will contain a NULL unsigned char*.] */
+BUFFER_HANDLE BUFFER_new(void)
+{
+    BUFFER* temp = (BUFFER*)malloc(sizeof(BUFFER));
+    /* Codes_SRS_BUFFER_07_002: [BUFFER_new shall return NULL on any error that occurs.] */
+    if (temp != NULL)
+    {
+        temp->buffer = NULL;
+        temp->size = 0;
+    }
+    return (BUFFER_HANDLE)temp;
+}
+
+static int BUFFER_safemalloc(BUFFER* handleptr, size_t size)
+{
+    int result;
+    size_t sizetomalloc = size;
+    if (size == 0)
+    {
+        sizetomalloc = 1;
+    }
+    handleptr->buffer = (unsigned char*)malloc(sizetomalloc);
+    if (handleptr->buffer == NULL)
+    {
+        /*Codes_SRS_BUFFER_02_003: [If allocating memory fails, then BUFFER_create shall return NULL.]*/
+        LogError("Failure allocating data");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        // we still consider the real buffer size is 0
+        handleptr->size = size;
+        result = 0;
+    }
+    return result;
+}
+
+BUFFER_HANDLE BUFFER_create(const unsigned char* source, size_t size)
+{
+    BUFFER* result;
+    /*Codes_SRS_BUFFER_02_001: [If source is NULL then BUFFER_create shall return NULL.]*/
+    if (source == NULL)
+    {
+        LogError("invalid parameter source: %p", source);
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_BUFFER_02_002: [Otherwise, BUFFER_create shall allocate memory to hold size bytes and shall copy from source size bytes into the newly allocated memory.] */
+        result = (BUFFER*)malloc(sizeof(BUFFER));
+        if (result == NULL)
+        {
+            /*Codes_SRS_BUFFER_02_003: [If allocating memory fails, then BUFFER_create shall return NULL.] */
+            /*fallthrough*/
+            LogError("Failure allocating BUFFER structure");
+        }
+        else
+        {
+            /* Codes_SRS_BUFFER_02_005: [If size parameter is 0 then 1 byte of memory shall be allocated yet size of the buffer shall be set to 0.]*/
+            if (BUFFER_safemalloc(result, size) != 0)
+            {
+                LogError("unable to BUFFER_safemalloc ");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                /*Codes_SRS_BUFFER_02_004: [Otherwise, BUFFER_create shall return a non-NULL handle.] */
+                (void)memcpy(result->buffer, source, size);
+            }
+        }
+    }
+    return (BUFFER_HANDLE)result;
+}
+
+// Codes_SRS_BUFFER_07_029: [ BUFFER_create_with_size shall create a BUFFER_HANDLE with a pre allocated underlying buffer size.]
+BUFFER_HANDLE BUFFER_create_with_size(size_t buff_size)
+{
+    BUFFER* result;
+    result = (BUFFER*)malloc(sizeof(BUFFER));
+    if (result != NULL)
+    {
+        if (buff_size == 0)
+        {
+            // Codes_SRS_BUFFER_07_030: [ If buff_size is 0 BUFFER_create_with_size shall create a valid non-NULL handle of zero size. ]
+            result->size = 0;
+            result->buffer = NULL;
+        }
+        else
+        {
+            // Codes_SRS_BUFFER_07_031: [ BUFFER_create_with_size shall allocate a buffer of buff_size. ]
+            result->size = buff_size;
+            if ((result->buffer = (unsigned char*)malloc(result->size)) == NULL)
+            {
+                // Codes_SRS_BUFFER_07_032: [ If allocating memory fails, then BUFFER_create_with_size shall return NULL. ]
+                LogError("unable to allocate buffer");
+                free(result);
+                result = NULL;
+            }
+        }
+    }
+    else
+    {
+        // Codes_SRS_BUFFER_07_032: [ If allocating memory fails, then BUFFER_create_with_size shall return NULL. ]
+        LogError("unable to allocate BUFFER");
+    }
+    // Codes_SRS_BUFFER_07_033: [ Otherwise, BUFFER_create_with_size shall return a non-NULL handle. ]
+    return (BUFFER_HANDLE)result;
+}
+
+/* Codes_SRS_BUFFER_07_003: [BUFFER_delete shall delete the data associated with the BUFFER_HANDLE along with the Buffer.] */
+void BUFFER_delete(BUFFER_HANDLE handle)
+{
+    /* Codes_SRS_BUFFER_07_004: [BUFFER_delete shall not delete any BUFFER_HANDLE that is NULL.] */
+    if (handle != NULL)
+    {
+        BUFFER* b = (BUFFER*)handle;
+        if (b->buffer != NULL)
+        {
+            /* Codes_SRS_BUFFER_07_003: [BUFFER_delete shall delete the data associated with the BUFFER_HANDLE along with the Buffer.] */
+            free(b->buffer);
+        }
+        free(b);
+    }
+}
+
+/*return 0 if the buffer was copied*/
+/*else return different than zero*/
+/* Codes_SRS_BUFFER_07_008: [BUFFER_build allocates size_t bytes, copies the unsigned char* into the buffer and returns zero on success.] */
+int BUFFER_build(BUFFER_HANDLE handle, const unsigned char* source, size_t size)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_009: [BUFFER_build shall return nonzero if handle is NULL ] */
+        result = MU_FAILURE;
+    }
+    /* Codes_SRS_BUFFER_01_002: [The size argument can be zero, in which case the underlying buffer held by the buffer instance shall be freed.] */
+    else if (size == 0)
+    {
+        /* Codes_SRS_BUFFER_01_003: [If size is zero, source can be NULL.] */
+        BUFFER* b = (BUFFER*)handle;
+        free(b->buffer);
+        b->buffer = NULL;
+        b->size = 0;
+
+        result = 0;
+    }
+    else
+    {
+        if (source == NULL)
+        {
+            /* Codes_SRS_BUFFER_01_001: [If size is positive and source is NULL, BUFFER_build shall return nonzero] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            BUFFER* b = (BUFFER*)handle;
+            /* Codes_SRS_BUFFER_07_011: [BUFFER_build shall overwrite previous contents if the buffer has been previously allocated.] */
+            unsigned char* newBuffer = (unsigned char*)realloc(b->buffer, size);
+            if (newBuffer == NULL)
+            {
+                /* Codes_SRS_BUFFER_07_010: [BUFFER_build shall return nonzero if any error is encountered.] */
+                LogError("Failure reallocating buffer");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                b->buffer = newBuffer;
+                b->size = size;
+                /* Codes_SRS_BUFFER_01_002: [The size argument can be zero, in which case nothing shall be copied from source.] */
+                (void)memcpy(b->buffer, source, size);
+
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+int BUFFER_append_build(BUFFER_HANDLE handle, const unsigned char* source, size_t size)
+{
+    int result;
+    if (handle == NULL || source == NULL || size == 0)
+    {
+        /* Codes_SRS_BUFFER_07_029: [ BUFFER_append_build shall return nonzero if handle or source are NULL or if size is 0. ] */
+        LogError("BUFFER_append_build failed invalid parameter handle: %p, source: %p, size: %lu", handle, source, (unsigned long)size);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (handle->buffer == NULL)
+        {
+            /* Codes_SRS_BUFFER_07_030: [ if handle->buffer is NULL BUFFER_append_build shall allocate the a buffer of size bytes... ] */
+            if (BUFFER_safemalloc(handle, size) != 0)
+            {
+                /* Codes_SRS_BUFFER_07_035: [ If any error is encountered BUFFER_append_build shall return a non-null value. ] */
+                LogError("Failure with BUFFER_safemalloc");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_BUFFER_07_031: [ ... and copy the contents of source to handle->buffer. ] */
+                (void)memcpy(handle->buffer, source, size);
+                /* Codes_SRS_BUFFER_07_034: [ On success BUFFER_append_build shall return 0 ] */
+                result = 0;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_BUFFER_07_032: [ if handle->buffer is not NULL BUFFER_append_build shall realloc the buffer to be the handle->size + size ] */
+            unsigned char* temp = (unsigned char*)realloc(handle->buffer, handle->size + size);
+            if (temp == NULL)
+            {
+                /* Codes_SRS_BUFFER_07_035: [ If any error is encountered BUFFER_append_build shall return a non-null value. ] */
+                LogError("Failure reallocating temporary buffer");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_BUFFER_07_033: [ ... and copy the contents of source to the end of the buffer. ] */
+                handle->buffer = temp;
+                // Append the BUFFER
+                (void)memcpy(&handle->buffer[handle->size], source, size);
+                handle->size += size;
+                /* Codes_SRS_BUFFER_07_034: [ On success BUFFER_append_build shall return 0 ] */
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+/*return 0 if the buffer was pre-build(that is, had its space allocated)*/
+/*else return different than zero*/
+/* Codes_SRS_BUFFER_07_005: [BUFFER_pre_build allocates size_t bytes of BUFFER_HANDLE and returns zero on success.] */
+int BUFFER_pre_build(BUFFER_HANDLE handle, size_t size)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_006: [If handle is NULL or size is 0 then BUFFER_pre_build shall return a nonzero value.] */
+        result = MU_FAILURE;
+    }
+    else if (size == 0)
+    {
+        /* Codes_SRS_BUFFER_07_006: [If handle is NULL or size is 0 then BUFFER_pre_build shall return a nonzero value.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b = (BUFFER*)handle;
+        if (b->buffer != NULL)
+        {
+            /* Codes_SRS_BUFFER_07_007: [BUFFER_pre_build shall return nonzero if the buffer has been previously allocated and is not NULL.] */
+            LogError("Failure buffer data is NULL");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if ((b->buffer = (unsigned char*)malloc(size)) == NULL)
+            {
+                /* Codes_SRS_BUFFER_07_013: [BUFFER_pre_build shall return nonzero if any error is encountered.] */
+                LogError("Failure allocating buffer");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                b->size = size;
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+/* Codes_SRS_BUFFER_07_019: [BUFFER_content shall return the data contained within the BUFFER_HANDLE.] */
+int BUFFER_content(BUFFER_HANDLE handle, const unsigned char** content)
+{
+    int result;
+    if ((handle == NULL) || (content == NULL))
+    {
+        /* Codes_SRS_BUFFER_07_020: [If the handle and/or content*is NULL BUFFER_content shall return nonzero.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b = (BUFFER*)handle;
+        *content = b->buffer;
+        result = 0;
+    }
+    return result;
+}
+
+/*return 0 if everything went ok and whatever was built in the buffer was unbuilt*/
+/* Codes_SRS_BUFFER_07_012: [BUFFER_unbuild shall clear the underlying unsigned char* data associated with the BUFFER_HANDLE this will return zero on success.] */
+extern int BUFFER_unbuild(BUFFER_HANDLE handle)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_014: [BUFFER_unbuild shall return a nonzero value if BUFFER_HANDLE is NULL.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b = (BUFFER*)handle;
+        if (b->buffer != NULL)
+        {
+            LogError("Failure buffer data is NULL");
+            free(b->buffer);
+            b->buffer = NULL;
+            b->size = 0;
+            result = 0;
+        }
+        else
+        {
+            /* Codes_SRS_BUFFER_07_015: [BUFFER_unbuild shall return a nonzero value if the unsigned char* referenced by BUFFER_HANDLE is NULL.] */
+            result = MU_FAILURE;
+        }
+    }
+    return result;
+}
+
+/* Codes_SRS_BUFFER_07_016: [BUFFER_enlarge shall increase the size of the unsigned char* referenced by BUFFER_HANDLE.] */
+int BUFFER_enlarge(BUFFER_HANDLE handle, size_t enlargeSize)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_017: [BUFFER_enlarge shall return a nonzero result if any parameters are NULL or zero.] */
+        LogError("Failure: handle is invalid.");
+        result = MU_FAILURE;
+    }
+    else if (enlargeSize == 0)
+    {
+        /* Codes_SRS_BUFFER_07_017: [BUFFER_enlarge shall return a nonzero result if any parameters are NULL or zero.] */
+        LogError("Failure: enlargeSize size is 0.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b = (BUFFER*)handle;
+        unsigned char* temp = (unsigned char*)realloc(b->buffer, b->size + enlargeSize);
+        if (temp == NULL)
+        {
+            /* Codes_SRS_BUFFER_07_018: [BUFFER_enlarge shall return a nonzero result if any error is encountered.] */
+            LogError("Failure: allocating temp buffer.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            b->buffer = temp;
+            b->size += enlargeSize;
+            result = 0;
+        }
+    }
+    return result;
+}
+
+int BUFFER_shrink(BUFFER_HANDLE handle, size_t decreaseSize, bool fromEnd)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_036: [ if handle is NULL, BUFFER_shrink shall return a non-null value ]*/
+        LogError("Failure: handle is invalid.");
+        result = MU_FAILURE;
+    }
+    else if (decreaseSize == 0)
+    {
+        /* Codes_SRS_BUFFER_07_037: [ If decreaseSize is equal zero, BUFFER_shrink shall return a non-null value ] */
+        LogError("Failure: decrease size is 0.");
+        result = MU_FAILURE;
+    }
+    else if (decreaseSize > handle->size)
+    {
+        /* Codes_SRS_BUFFER_07_038: [ If decreaseSize is less than the size of the buffer, BUFFER_shrink shall return a non-null value ] */
+        LogError("Failure: decrease size is less than buffer size.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Codes_SRS_BUFFER_07_039: [ BUFFER_shrink shall allocate a temporary buffer of existing buffer size minus decreaseSize. ] */
+        size_t alloc_size = handle->size - decreaseSize;
+        if (alloc_size == 0)
+        {
+            /* Codes_SRS_BUFFER_07_043: [ If the decreaseSize is equal the buffer size , BUFFER_shrink shall deallocate the buffer and set the size to zero. ] */
+            free(handle->buffer);
+            handle->buffer = NULL;
+            handle->size = 0;
+            result = 0;
+        }
+        else
+        {
+            unsigned char* tmp = malloc(alloc_size);
+            if (tmp == NULL)
+            {
+                /* Codes_SRS_BUFFER_07_042: [ If a failure is encountered, BUFFER_shrink shall return a non-null value ] */
+                LogError("Failure: allocating temp buffer.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                if (fromEnd)
+                {
+                    /* Codes_SRS_BUFFER_07_040: [ if the fromEnd variable is true, BUFFER_shrink shall remove the end of the buffer of size decreaseSize. ] */
+                    memcpy(tmp, handle->buffer, alloc_size);
+                    free(handle->buffer);
+                    handle->buffer = tmp;
+                    handle->size = alloc_size;
+                    result = 0;
+                }
+                else
+                {
+                    /* Codes_SRS_BUFFER_07_041: [ if the fromEnd variable is false, BUFFER_shrink shall remove the beginning of the buffer of size decreaseSize. ] */
+                    memcpy(tmp, handle->buffer + decreaseSize, alloc_size);
+                    free(handle->buffer);
+                    handle->buffer = tmp;
+                    handle->size = alloc_size;
+                    result = 0;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+/* Codes_SRS_BUFFER_07_021: [BUFFER_size shall place the size of the associated buffer in the size variable and return zero on success.] */
+int BUFFER_size(BUFFER_HANDLE handle, size_t* size)
+{
+    int result;
+    if ((handle == NULL) || (size == NULL))
+    {
+        /* Codes_SRS_BUFFER_07_022: [BUFFER_size shall return a nonzero value for any error that is encountered.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b = (BUFFER*)handle;
+        *size = b->size;
+        result = 0;
+    }
+    return result;
+}
+
+/* Codes_SRS_BUFFER_07_024: [BUFFER_append concatenates b2 onto b1 without modifying b2 and shall return zero on success.] */
+int BUFFER_append(BUFFER_HANDLE handle1, BUFFER_HANDLE handle2)
+{
+    int result;
+    if ( (handle1 == NULL) || (handle2 == NULL) || (handle1 == handle2) )
+    {
+        /* Codes_SRS_BUFFER_07_023: [BUFFER_append shall return a nonzero upon any error that is encountered.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b1 = (BUFFER*)handle1;
+        BUFFER* b2 = (BUFFER*)handle2;
+        if (b1->buffer == NULL)
+        {
+            /* Codes_SRS_BUFFER_07_023: [BUFFER_append shall return a nonzero upon any error that is encountered.] */
+            result = MU_FAILURE;
+        }
+        else if (b2->buffer == NULL)
+        {
+            /* Codes_SRS_BUFFER_07_023: [BUFFER_append shall return a nonzero upon any error that is encountered.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (b2->size ==0)
+            {
+                // b2->size = 0, whatever b1->size is, do nothing
+                result = 0;
+            }
+            else
+            {
+                // b2->size != 0, whatever b1->size is
+                unsigned char* temp = (unsigned char*)realloc(b1->buffer, b1->size + b2->size);
+                if (temp == NULL)
+                {
+                    /* Codes_SRS_BUFFER_07_023: [BUFFER_append shall return a nonzero upon any error that is encountered.] */
+                    LogError("Failure: allocating temp buffer.");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    /* Codes_SRS_BUFFER_07_024: [BUFFER_append concatenates b2 onto b1 without modifying b2 and shall return zero on success.]*/
+                    b1->buffer = temp;
+                    // Append the BUFFER
+                    (void)memcpy(&b1->buffer[b1->size], b2->buffer, b2->size);
+                    b1->size += b2->size;
+                    result = 0;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+int BUFFER_prepend(BUFFER_HANDLE handle1, BUFFER_HANDLE handle2)
+{
+    int result;
+    if ((handle1 == NULL) || (handle2 == NULL) || (handle1 == handle2))
+    {
+        /* Codes_SRS_BUFFER_01_005: [ BUFFER_prepend shall return a non-zero upon value any error that is encountered. ]*/
+        result = MU_FAILURE;
+    }
+    else
+    {
+        BUFFER* b1 = (BUFFER*)handle1;
+        BUFFER* b2 = (BUFFER*)handle2;
+        if (b1->buffer == NULL)
+        {
+            /* Codes_SRS_BUFFER_01_005: [ BUFFER_prepend shall return a non-zero upon value any error that is encountered. ]*/
+            result = MU_FAILURE;
+        }
+        else if (b2->buffer == NULL)
+        {
+            /* Codes_SRS_BUFFER_01_005: [ BUFFER_prepend shall return a non-zero upon value any error that is encountered. ]*/
+            result = MU_FAILURE;
+        }
+        else
+        {
+            //put b2 ahead of b1: [b2][b1], return b1
+            if (b2->size ==0)
+            {
+                // do nothing
+                result = 0;
+            }
+            else
+            {
+                // b2->size != 0
+                unsigned char* temp = (unsigned char*)malloc(b1->size + b2->size);
+                if (temp == NULL)
+                {
+                    /* Codes_SRS_BUFFER_01_005: [ BUFFER_prepend shall return a non-zero upon value any error that is encountered. ]*/
+                    LogError("Failure: allocating temp buffer.");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    /* Codes_SRS_BUFFER_01_004: [ BUFFER_prepend concatenates handle1 onto handle2 without modifying handle1 and shall return zero on success. ]*/
+                    // Append the BUFFER
+                    (void)memcpy(temp, b2->buffer, b2->size);
+                    // start from b1->size to append b1
+                    (void)memcpy(&temp[b2->size], b1->buffer, b1->size);
+                    free(b1->buffer);
+                    b1->buffer = temp;
+                    b1->size += b2->size;
+                    result = 0;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+int BUFFER_fill(BUFFER_HANDLE handle, unsigned char fill_char)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_002: [ If handle is NULL BUFFER_fill shall return a non-zero value. ] */
+        LogError("Invalid parameter specified, handle == NULL.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t index;
+        /* Codes_SRS_BUFFER_07_001: [ BUFFER_fill shall fill the supplied BUFFER_HANDLE with the supplied fill character. ] */
+        BUFFER* buffer_data = (BUFFER*)handle;
+        for (index = 0; index < buffer_data->size; index++)
+        {
+            buffer_data->buffer[index] = fill_char;
+        }
+        result = 0;
+    }
+    return result;
+}
+
+
+/* Codes_SRS_BUFFER_07_025: [BUFFER_u_char shall return a pointer to the underlying unsigned char*.] */
+unsigned char* BUFFER_u_char(BUFFER_HANDLE handle)
+{
+    BUFFER* handleData = (BUFFER*)handle;
+    unsigned char* result;
+    if (handle == NULL || handleData->size == 0)
+    {
+        /* Codes_SRS_BUFFER_07_026: [BUFFER_u_char shall return NULL for any error that is encountered.] */
+        /* Codes_SRS_BUFFER_07_029: [BUFFER_u_char shall return NULL if underlying buffer size is zero.] */
+        result = NULL;
+    }
+    else
+    {
+        result = handleData->buffer;
+    }
+    return result;
+}
+
+/* Codes_SRS_BUFFER_07_027: [BUFFER_length shall return the size of the underlying buffer.] */
+size_t BUFFER_length(BUFFER_HANDLE handle)
+{
+    size_t result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_BUFFER_07_028: [BUFFER_length shall return zero for any error that is encountered.] */
+        result = 0;
+    }
+    else
+    {
+        BUFFER* b = (BUFFER*)handle;
+        result = b->size;
+    }
+    return result;
+}
+
+BUFFER_HANDLE BUFFER_clone(BUFFER_HANDLE handle)
+{
+    BUFFER_HANDLE result;
+    if (handle == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        BUFFER* suppliedBuff = (BUFFER*)handle;
+        BUFFER* b = (BUFFER*)malloc(sizeof(BUFFER));
+        if (b != NULL)
+        {
+            if (BUFFER_safemalloc(b, suppliedBuff->size) != 0)
+            {
+                free(b);
+                LogError("Failure: allocating temp buffer.");
+                result = NULL;
+            }
+            else
+            {
+                (void)memcpy(b->buffer, suppliedBuff->buffer, suppliedBuff->size);
+                b->size = suppliedBuff->size;
+                result = (BUFFER_HANDLE)b;
+            }
+        }
+        else
+        {
+            result = NULL;
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/connection_string_parser.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/connection_string_parser.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/connection_string_parser.c	(revision 389)
@@ -0,0 +1,234 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "azure_c_shared_utility/connection_string_parser.h"
+#include "azure_c_shared_utility/map.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/string_tokenizer.h"
+#include <stdbool.h>
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+
+MAP_HANDLE connectionstringparser_parse_from_char(const char* connection_string)
+{
+    MAP_HANDLE result;
+    STRING_HANDLE connString = NULL;
+
+    /* Codes_SRS_CONNECTIONSTRINGPARSER_21_020: [connectionstringparser_parse_from_char shall create a STRING_HANDLE from the connection_string passed in as argument and parse it using the connectionstringparser_parse.]*/
+    if ((connString = STRING_construct(connection_string)) == NULL)
+    {
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_021: [If connectionstringparser_parse_from_char get error creating a STRING_HANDLE, it shall return NULL.]*/
+        LogError("Error constructing connection String");
+        result = NULL;
+    }
+    else
+    {
+        result = connectionstringparser_parse(connString);
+        STRING_delete(connString);
+    }
+
+    return result;
+}
+
+/* Codes_SRS_CONNECTIONSTRINGPARSER_01_001: [connectionstringparser_parse shall parse all key value pairs from the connection_string passed in as argument and return a new map that holds the key/value pairs.] */
+MAP_HANDLE connectionstringparser_parse(STRING_HANDLE connection_string)
+{
+    MAP_HANDLE result;
+
+    if (connection_string == NULL)
+    {
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_002: [If connection_string is NULL then connectionstringparser_parse shall fail and return NULL.] */
+        result = NULL;
+        LogError("NULL connection string passed to tokenizer.");
+    }
+    else
+    {
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_003: [connectionstringparser_parse shall create a STRING tokenizer to be used for parsing the connection string, by calling STRING_TOKENIZER_create.] */
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_004: [connectionstringparser_parse shall start scanning at the beginning of the connection string.] */
+        STRING_TOKENIZER_HANDLE tokenizer = STRING_TOKENIZER_create(connection_string);
+        if (tokenizer == NULL)
+        {
+            /* Codes_SRS_CONNECTIONSTRINGPARSER_01_015: [If STRING_TOKENIZER_create fails, connectionstringparser_parse shall fail and return NULL.] */
+            result = NULL;
+            LogError("Error creating STRING tokenizer.");
+        }
+        else
+        {
+            /* Codes_SRS_CONNECTIONSTRINGPARSER_01_016: [2 STRINGs shall be allocated in order to hold the to be parsed key and value tokens.] */
+            STRING_HANDLE token_key_string = STRING_new();
+            if (token_key_string == NULL)
+            {
+                /* Codes_SRS_CONNECTIONSTRINGPARSER_01_017: [If allocating the STRINGs fails connectionstringparser_parse shall fail and return NULL.] */
+                result = NULL;
+                LogError("Error creating key token STRING.");
+            }
+            else
+            {
+                STRING_HANDLE token_value_string = STRING_new();
+                if (token_value_string == NULL)
+                {
+                    /* Codes_SRS_CONNECTIONSTRINGPARSER_01_017: [If allocating the STRINGs fails connectionstringparser_parse shall fail and return NULL.] */
+                    result = NULL;
+                    LogError("Error creating value token STRING.");
+                }
+                else
+                {
+                    result = Map_Create(NULL);
+                    if (result == NULL)
+                    {
+                        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_018: [If creating the result map fails, then connectionstringparser_parse shall return NULL.] */
+                        LogError("Error creating Map.");
+                    }
+                    else
+                    {
+                        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_005: [The following actions shall be repeated until parsing is complete:] */
+                        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_006: [connectionstringparser_parse shall find a token (the key of the key/value pair) delimited by the = character, by calling STRING_TOKENIZER_get_next_token.] */
+                        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_007: [If STRING_TOKENIZER_get_next_token fails, parsing shall be considered complete.] */
+                        while (STRING_TOKENIZER_get_next_token(tokenizer, token_key_string, "=") == 0)
+                        {
+                            bool is_error = false;
+
+                            /* Codes_SRS_CONNECTIONSTRINGPARSER_01_008: [connectionstringparser_parse shall find a token (the value of the key/value pair) delimited by the ; character, by calling STRING_TOKENIZER_get_next_token.] */
+                            if (STRING_TOKENIZER_get_next_token(tokenizer, token_value_string, ";") != 0)
+                            {
+                                /* Codes_SRS_CONNECTIONSTRINGPARSER_01_009: [If STRING_TOKENIZER_get_next_token fails, connectionstringparser_parse shall fail and return NULL (freeing the allocated result map).] */
+                                is_error = true;
+                                LogError("Error reading value token from the connection string.");
+                            }
+                            else
+                            {
+                                /* Codes_SRS_CONNECTIONSTRINGPARSER_01_011: [The C strings for the key and value shall be extracted from the previously parsed STRINGs by using STRING_c_str.] */
+                                const char* token = STRING_c_str(token_key_string);
+                                /* Codes_SRS_CONNECTIONSTRINGPARSER_01_013: [If STRING_c_str fails then connectionstringparser_parse shall fail and return NULL (freeing the allocated result map).] */
+                                if ((token == NULL) ||
+                                    /* Codes_SRS_CONNECTIONSTRINGPARSER_01_019: [If the key length is zero then connectionstringparser_parse shall fail and return NULL (freeing the allocated result map).] */
+                                    (strlen(token) == 0))
+                                {
+                                    is_error = true;
+                                    LogError("The key token is NULL or empty.");
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_CONNECTIONSTRINGPARSER_01_011: [The C strings for the key and value shall be extracted from the previously parsed STRINGs by using STRING_c_str.] */
+                                    const char* value = STRING_c_str(token_value_string);
+                                    if (value == NULL)
+                                    {
+                                        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_013: [If STRING_c_str fails then connectionstringparser_parse shall fail and return NULL (freeing the allocated result map).] */
+                                        is_error = true;
+                                        LogError("Could not get C string for value token.");
+                                    }
+                                    else
+                                    {
+                                        /* Codes_SRS_CONNECTIONSTRINGPARSER_01_010: [The key and value shall be added to the result map by using Map_Add.] */
+                                        if (Map_Add(result, token, value) != 0)
+                                        {
+                                            /* Codes_SRS_CONNECTIONSTRINGPARSER_01_012: [If Map_Add fails connectionstringparser_parse shall fail and return NULL (freeing the allocated result map).] */
+                                            is_error = true;
+                                            LogError("Could not add the key/value pair to the result map.");
+                                        }
+                                    }
+                                }
+                            }
+
+                            if (is_error)
+                            {
+                                LogError("Error parsing connection string.");
+                                Map_Destroy(result);
+                                result = NULL;
+                                break;
+                            }
+                        }
+                    }
+
+                    STRING_delete(token_value_string);
+                }
+
+                STRING_delete(token_key_string);
+            }
+
+            /* Codes_SRS_CONNECTIONSTRINGPARSER_01_014: [After the parsing is complete the previously allocated STRINGs and STRING tokenizer shall be freed by calling STRING_TOKENIZER_destroy.] */
+            STRING_TOKENIZER_destroy(tokenizer);
+        }
+    }
+
+    return result;
+}
+
+/* Codes_SRS_CONNECTIONSTRINGPARSER_21_022: [connectionstringparser_splitHostName_from_char shall split the provided hostName in name and suffix.]*/
+int connectionstringparser_splitHostName_from_char(const char* hostName, STRING_HANDLE nameString, STRING_HANDLE suffixString)
+{
+    int result;
+    const char* runHostName = hostName;
+
+    if ((hostName == NULL) || ((*hostName) == '\0') || ((*hostName) == '.') || (nameString == NULL) || (suffixString == NULL))
+    {
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_026: [If the hostName is NULL, connectionstringparser_splitHostName_from_char shall return MU_FAILURE.]*/
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_027: [If the hostName is an empty string, connectionstringparser_splitHostName_from_char shall return MU_FAILURE.]*/
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_028: [If the nameString is NULL, connectionstringparser_splitHostName_from_char shall return MU_FAILURE.]*/
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_029: [If the suffixString is NULL, connectionstringparser_splitHostName_from_char shall return MU_FAILURE.]*/
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_030: [If the hostName is not a valid host name, connectionstringparser_splitHostName_from_char shall return MU_FAILURE.]*/
+        result = MU_FAILURE;
+    }
+    else
+    {
+        while ((*runHostName) != '\0')
+        {
+            if ((*runHostName) == '.')
+            {
+                /* Codes_SRS_CONNECTIONSTRINGPARSER_21_023: [connectionstringparser_splitHostName_from_char shall copy all characters, from the beginning of the hostName to the first . to the nameString.]*/
+                /* Codes_SRS_CONNECTIONSTRINGPARSER_21_024: [connectionstringparser_splitHostName_from_char shall copy all characters, from the first . to the end of the hostName, to the suffixString.]*/
+                runHostName++;
+                break;
+            }
+            runHostName++;
+        }
+
+        if ((*runHostName) == '\0')
+        {
+            /* Codes_SRS_CONNECTIONSTRINGPARSER_21_030: [If the hostName is not a valid host name, connectionstringparser_splitHostName_from_char shall return MU_FAILURE.]*/
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /* Codes_SRS_CONNECTIONSTRINGPARSER_21_023: [connectionstringparser_splitHostName_from_char shall copy all characters, from the beginning of the hostName to the first . to the nameString.]*/
+            if (STRING_copy_n(nameString, hostName, runHostName - hostName - 1) != 0)
+            {
+                /* Codes_SRS_CONNECTIONSTRINGPARSER_21_031: [If connectionstringparser_splitHostName_from_char get error copying the name to the nameString, it shall return MU_FAILURE.]*/
+                result = MU_FAILURE;
+            }
+            /* Codes_SRS_CONNECTIONSTRINGPARSER_21_024: [connectionstringparser_splitHostName_from_char shall copy all characters, from the first . to the end of the hostName, to the suffixString.]*/
+            else if (STRING_copy(suffixString, runHostName) != 0)
+            {
+                /* Codes_SRS_CONNECTIONSTRINGPARSER_21_032: [If connectionstringparser_splitHostName_from_char get error copying the suffix to the suffixString, it shall return MU_FAILURE.]*/
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_CONNECTIONSTRINGPARSER_21_025: [If connectionstringparser_splitHostName_from_char get success splitting the hostName, it shall return 0.]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+
+int connectionstringparser_splitHostName(STRING_HANDLE hostNameString, STRING_HANDLE nameString, STRING_HANDLE suffixString)
+{
+    int result;
+
+    if (hostNameString == NULL)
+    {
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_034: [If the hostNameString is NULL, connectionstringparser_splitHostName shall return MU_FAILURE.]*/
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Codes_SRS_CONNECTIONSTRINGPARSER_21_033: [connectionstringparser_splitHostName shall convert the hostNameString to a connection_string passed in as argument, and call connectionstringparser_splitHostName_from_char.]*/
+        result = connectionstringparser_splitHostName_from_char(STRING_c_str(hostNameString), nameString, suffixString);
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/consolelogger.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/consolelogger.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/consolelogger.c	(revision 389)
@@ -0,0 +1,230 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <time.h>
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/consolelogger.h"
+
+#if (defined(_MSC_VER))
+#include "windows.h"
+
+/*returns a string as if printed by vprintf*/
+static char* vprintf_alloc(const char* format, va_list va)
+{
+    char* result;
+    int neededSize = vsnprintf(NULL, 0, format, va);
+    if (neededSize < 0)
+    {
+        result = NULL;
+    }
+    else
+    {
+        result = (char*)malloc(neededSize + 1);
+        if (result == NULL)
+        {
+            /*return as is*/
+        }
+        else
+        {
+            if (vsnprintf(result, neededSize + 1, format, va) != neededSize)
+            {
+                free(result);
+                result = NULL;
+            }
+        }
+    }
+    return result;
+}
+
+/*returns a string as if printed by printf*/
+static char* printf_alloc(const char* format, ...)
+{
+    char* result;
+    va_list va;
+    va_start(va, format);
+    result = vprintf_alloc(format, va);
+    va_end(va);
+    return result;
+}
+
+/*returns NULL if it fails*/
+static char* lastErrorToString(DWORD lastError)
+{
+    char* result;
+    if (lastError == 0)
+    {
+        result = printf_alloc(""); /*no error should appear*/
+        if (result == NULL)
+        {
+            (void)printf("failure in printf_alloc");
+        }
+        else
+        {
+            /*return as is*/
+        }
+    }
+    else
+    {
+        char temp[MESSAGE_BUFFER_SIZE];
+        if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, lastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), temp, MESSAGE_BUFFER_SIZE, NULL) == 0)
+        {
+            result = printf_alloc("GetLastError()=0X%x", lastError);
+            if (result == NULL)
+            {
+                (void)printf("failure in printf_alloc\n");
+                /*return as is*/
+            }
+            else
+            {
+                /*return as is*/
+            }
+        }
+        else
+        {
+            /*eliminate the \r or \n from the string*/
+            /*one replace of each is enough*/
+            char* whereAreThey;
+            if ((whereAreThey = strchr(temp, '\r')) != NULL)
+            {
+                *whereAreThey = '\0';
+            }
+            if ((whereAreThey = strchr(temp, '\n')) != NULL)
+            {
+                *whereAreThey = '\0';
+            }
+
+            result = printf_alloc("GetLastError()==0X%x (%s)", lastError, temp);
+
+            if (result == NULL)
+            {
+                (void)printf("failure in printf_alloc\n");
+                /*return as is*/
+            }
+            else
+            {
+                /*return as is*/
+            }
+        }
+    }
+    return result;
+}
+/*this function will use 1x printf (in the happy case) .*/
+/*more than 1x printf / function call can mean intermingled LogErrors in a multithreaded env*/
+/*the function will also attempt to produce some human readable strings for GetLastError*/
+void consolelogger_log_with_GetLastError(const char* file, const char* func, int line, const char* format, ...)
+{
+    DWORD lastError;
+    char* lastErrorAsString;
+    int lastErrorAsString_should_be_freed;
+    time_t t;
+    int systemMessage_should_be_freed;
+    char* systemMessage;
+    int userMessage_should_be_freed;
+    char* userMessage;
+
+    va_list args;
+    va_start(args, format);
+
+    /*this is what this case will do:
+    1. snip the last error
+    2. create a string with what that last error means
+    3. printf the system message (__FILE__, __LINE__ etc) + the last error + whatever the user wanted
+    */
+    /*1. snip the last error*/
+    lastError = GetLastError();
+
+    /*2. create a string with what that last error means*/
+    lastErrorAsString = lastErrorToString(lastError);
+    if (lastErrorAsString == NULL)
+    {
+        (void)printf("failure in lastErrorToString");
+        lastErrorAsString = "";
+        lastErrorAsString_should_be_freed = 0;
+    }
+    else
+    {
+        lastErrorAsString_should_be_freed = 1;
+    }
+
+    t = time(NULL);
+    systemMessage = printf_alloc("Error: Time:%.24s File:%s Func:%s Line:%d %s", ctime(&t), file, func, line, lastErrorAsString);
+
+    if (systemMessage == NULL)
+    {
+        systemMessage = "";
+        (void)printf("Error: [FAILED] Time:%.24s File : %s Func : %s Line : %d %s", ctime(&t), file, func, line, lastErrorAsString);
+        systemMessage_should_be_freed = 0;
+    }
+    else
+    {
+        systemMessage_should_be_freed = 1;
+    }
+
+    userMessage = vprintf_alloc(format, args);
+    if (userMessage == NULL)
+    {
+        (void)printf("[FAILED] ");
+        (void)vprintf(format, args);
+        (void)printf("\n");
+        userMessage_should_be_freed = 0;
+    }
+    else
+    {
+        /*3. printf the system message(__FILE__, __LINE__ etc) + the last error + whatever the user wanted*/
+        (void)printf("%s %s\n", systemMessage, userMessage);
+        userMessage_should_be_freed = 1;
+    }
+
+    if (userMessage_should_be_freed == 1)
+    {
+        free(userMessage);
+    }
+
+    if (systemMessage_should_be_freed == 1)
+    {
+        free(systemMessage);
+    }
+
+    if (lastErrorAsString_should_be_freed == 1)
+    {
+        free(lastErrorAsString);
+    }
+    va_end(args);
+}
+#endif
+
+#if defined(__GNUC__)
+__attribute__ ((format (printf, 6, 7)))
+#endif
+void consolelogger_log(LOG_CATEGORY log_category, const char* file, const char* func, int line, unsigned int options, const char* format, ...)
+{
+    time_t t;
+    va_list args;
+    va_start(args, format);
+
+    t = time(NULL);
+
+    switch (log_category)
+    {
+    case AZ_LOG_INFO:
+        (void)printf("Info: ");
+        break;
+    case AZ_LOG_ERROR:
+        (void)printf("Error: Time:%.24s File:%s Func:%s Line:%d ", ctime(&t), file, func, line);
+        break;
+    default:
+        break;
+    }
+
+    (void)vprintf(format, args);
+    va_end(args);
+
+    (void)log_category;
+    if (options & LOG_LINE)
+    {
+        (void)printf("\r\n");
+    }
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/constbuffer.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/constbuffer.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/constbuffer.c	(revision 389)
@@ -0,0 +1,240 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/constbuffer.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/refcount.h"
+
+#define CONSTBUFFER_TYPE_VALUES \
+    CONSTBUFFER_TYPE_COPIED, \
+    CONSTBUFFER_TYPE_MEMORY_MOVED, \
+    CONSTBUFFER_TYPE_WITH_CUSTOM_FREE
+
+MU_DEFINE_ENUM(CONSTBUFFER_TYPE, CONSTBUFFER_TYPE_VALUES)
+
+typedef struct CONSTBUFFER_HANDLE_DATA_TAG
+{
+    CONSTBUFFER alias;
+    COUNT_TYPE count;
+    CONSTBUFFER_TYPE buffer_type;
+    CONSTBUFFER_CUSTOM_FREE_FUNC custom_free_func;
+    void* custom_free_func_context;
+} CONSTBUFFER_HANDLE_DATA;
+
+static CONSTBUFFER_HANDLE CONSTBUFFER_Create_Internal(const unsigned char* source, size_t size)
+{
+    CONSTBUFFER_HANDLE result;
+    /*Codes_SRS_CONSTBUFFER_02_005: [The non-NULL handle returned by CONSTBUFFER_Create shall have its ref count set to "1".]*/
+    /*Codes_SRS_CONSTBUFFER_02_010: [The non-NULL handle returned by CONSTBUFFER_CreateFromBuffer shall have its ref count set to "1".]*/
+    result = (CONSTBUFFER_HANDLE)malloc(sizeof(CONSTBUFFER_HANDLE_DATA) + size);
+    if (result == NULL)
+    {
+        /*Codes_SRS_CONSTBUFFER_02_003: [If creating the copy fails then CONSTBUFFER_Create shall return NULL.]*/
+        /*Codes_SRS_CONSTBUFFER_02_008: [If copying the content fails, then CONSTBUFFER_CreateFromBuffer shall fail and return NULL.] */
+        LogError("unable to malloc");
+        /*return as is*/
+    }
+    else
+    {
+        INIT_REF_VAR(result->count);
+
+        /*Codes_SRS_CONSTBUFFER_02_002: [Otherwise, CONSTBUFFER_Create shall create a copy of the memory area pointed to by source having size bytes.]*/
+        result->alias.size = size;
+        if (size == 0)
+        {
+            result->alias.buffer = NULL;
+        }
+        else
+        {
+            unsigned char* temp = (void*)(result + 1);
+            /*Codes_SRS_CONSTBUFFER_02_004: [Otherwise CONSTBUFFER_Create shall return a non-NULL handle.]*/
+            /*Codes_SRS_CONSTBUFFER_02_007: [Otherwise, CONSTBUFFER_CreateFromBuffer shall copy the content of buffer.]*/
+            /*Codes_SRS_CONSTBUFFER_02_009: [Otherwise, CONSTBUFFER_CreateFromBuffer shall return a non-NULL handle.]*/
+            (void)memcpy(temp, source, size);
+            result->alias.buffer = temp;
+        }
+
+        result->buffer_type = CONSTBUFFER_TYPE_COPIED;
+    }
+    return result;
+}
+
+CONSTBUFFER_HANDLE CONSTBUFFER_Create(const unsigned char* source, size_t size)
+{
+    CONSTBUFFER_HANDLE result;
+    /*Codes_SRS_CONSTBUFFER_02_001: [If source is NULL and size is different than 0 then CONSTBUFFER_Create shall fail and return NULL.]*/
+    if (
+        (source == NULL) &&
+        (size != 0)
+        )
+    {
+        LogError("invalid arguments passes to CONSTBUFFER_Create");
+        result = NULL;
+    }
+    else
+    {
+        result = CONSTBUFFER_Create_Internal(source, size);
+    }
+    return result;
+}
+
+/*this creates a new constbuffer from an existing BUFFER_HANDLE*/
+CONSTBUFFER_HANDLE CONSTBUFFER_CreateFromBuffer(BUFFER_HANDLE buffer)
+{
+    CONSTBUFFER_HANDLE result;
+    /*Codes_SRS_CONSTBUFFER_02_006: [If buffer is NULL then CONSTBUFFER_CreateFromBuffer shall fail and return NULL.]*/
+    if (buffer == NULL)
+    {
+        LogError("invalid arg passed to CONSTBUFFER_CreateFromBuffer");
+        result = NULL;
+    }
+    else
+    {
+        size_t length = BUFFER_length(buffer);
+        unsigned char* rawBuffer = BUFFER_u_char(buffer);
+        result = CONSTBUFFER_Create_Internal(rawBuffer, length);
+    }
+    return result;
+}
+
+CONSTBUFFER_HANDLE CONSTBUFFER_CreateWithMoveMemory(unsigned char* source, size_t size)
+{
+    CONSTBUFFER_HANDLE result;
+
+    /* Codes_SRS_CONSTBUFFER_01_001: [ If source is NULL and size is different than 0 then CONSTBUFFER_Create shall fail and return NULL. ]*/
+    if ((source == NULL) && (size > 0))
+    {
+        LogError("Invalid arguments: unsigned char* source=%p, size_t size=%u", source, (unsigned int)size);
+        result = NULL;
+    }
+    else
+    {
+        result = (CONSTBUFFER_HANDLE)malloc(sizeof(CONSTBUFFER_HANDLE_DATA));
+        if (result == NULL)
+        {
+            /* Codes_SRS_CONSTBUFFER_01_005: [ If any error occurs, CONSTBUFFER_CreateWithMoveMemory shall fail and return NULL. ]*/
+            LogError("malloc failed");
+        }
+        else
+        {
+            /* Codes_SRS_CONSTBUFFER_01_004: [ If source is non-NULL and size is 0, the source pointer shall be owned (and freed) by the newly created instance of const buffer. ]*/
+            /* Codes_SRS_CONSTBUFFER_01_002: [ CONSTBUFFER_CreateWithMoveMemory shall store the source and size and return a non-NULL handle to the newly created const buffer. ]*/
+            result->alias.buffer = source;
+            result->alias.size = size;
+            result->buffer_type = CONSTBUFFER_TYPE_MEMORY_MOVED;
+
+            /* Codes_SRS_CONSTBUFFER_01_003: [ The non-NULL handle returned by CONSTBUFFER_CreateWithMoveMemory shall have its ref count set to "1". ]*/
+            INIT_REF_VAR(result->count);
+        }
+    }
+
+    return result;
+}
+
+CONSTBUFFER_HANDLE CONSTBUFFER_CreateWithCustomFree(const unsigned char* source, size_t size, CONSTBUFFER_CUSTOM_FREE_FUNC customFreeFunc, void* customFreeFuncContext)
+{
+    CONSTBUFFER_HANDLE result;
+
+    /* Codes_SRS_CONSTBUFFER_01_014: [ customFreeFuncContext shall be allowed to be NULL. ]*/
+
+    if (
+        /* Codes_SRS_CONSTBUFFER_01_006: [ If source is NULL and size is different than 0 then CONSTBUFFER_CreateWithCustomFree shall fail and return NULL. ]*/
+        ((source == NULL) && (size > 0)) ||
+        /* Codes_SRS_CONSTBUFFER_01_013: [ If customFreeFunc is NULL, CONSTBUFFER_CreateWithCustomFree shall fail and return NULL. ]*/
+        (customFreeFunc == NULL)
+        )
+    {
+        LogError("Invalid arguments: unsigned char* source=%p, size_t size=%u, customFreeFunc=%p, customFreeFuncContext=%p",
+            source, (unsigned int)size, customFreeFunc, customFreeFuncContext);
+        result = NULL;
+    }
+    else
+    {
+        result = (CONSTBUFFER_HANDLE)malloc(sizeof(CONSTBUFFER_HANDLE_DATA));
+        if (result == NULL)
+        {
+            /* Codes_SRS_CONSTBUFFER_01_011: [ If any error occurs, CONSTBUFFER_CreateWithMoveMemory shall fail and return NULL. ]*/
+            LogError("malloc failed");
+        }
+        else
+        {
+            /* Codes_SRS_CONSTBUFFER_01_007: [ If source is non-NULL and size is 0, the source pointer shall be owned (and freed) by the newly created instance of const buffer. ]*/
+            /* Codes_SRS_CONSTBUFFER_01_008: [ CONSTBUFFER_CreateWithCustomFree shall store the source and size and return a non-NULL handle to the newly created const buffer. ]*/
+            result->alias.buffer = source;
+            result->alias.size = size;
+            result->buffer_type = CONSTBUFFER_TYPE_WITH_CUSTOM_FREE;
+
+            /* Codes_SRS_CONSTBUFFER_01_009: [ CONSTBUFFER_CreateWithCustomFree shall store customFreeFunc and customFreeFuncContext in order to use them to free the memory when the CONST buffer resources are freed. ]*/
+            result->custom_free_func = customFreeFunc;
+            result->custom_free_func_context = customFreeFuncContext;
+
+            /* Codes_SRS_CONSTBUFFER_01_010: [ The non-NULL handle returned by CONSTBUFFER_CreateWithCustomFree shall have its ref count set to 1. ]*/
+            INIT_REF_VAR(result->count);
+        }
+    }
+
+    return result;
+}
+
+void CONSTBUFFER_IncRef(CONSTBUFFER_HANDLE constbufferHandle)
+{
+    if (constbufferHandle == NULL)
+    {
+        /*Codes_SRS_CONSTBUFFER_02_013: [If constbufferHandle is NULL then CONSTBUFFER_IncRef shall return.]*/
+        LogError("Invalid arguments: CONSTBUFFER_HANDLE constbufferHandle=%p", constbufferHandle);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTBUFFER_02_014: [Otherwise, CONSTBUFFER_IncRef shall increment the reference count.]*/
+        INC_REF_VAR(constbufferHandle->count);
+    }
+}
+
+const CONSTBUFFER* CONSTBUFFER_GetContent(CONSTBUFFER_HANDLE constbufferHandle)
+{
+    const CONSTBUFFER* result;
+    if (constbufferHandle == NULL)
+    {
+        /*Codes_SRS_CONSTBUFFER_02_011: [If constbufferHandle is NULL then CONSTBUFFER_GetContent shall return NULL.]*/
+        result = NULL;
+        LogError("invalid arg");
+    }
+    else
+    {
+        /*Codes_SRS_CONSTBUFFER_02_012: [Otherwise, CONSTBUFFER_GetContent shall return a const CONSTBUFFER* that matches byte by byte the original bytes used to created the const buffer and has the same length.]*/
+        result = &(constbufferHandle->alias);
+    }
+    return result;
+}
+
+void CONSTBUFFER_DecRef(CONSTBUFFER_HANDLE constbufferHandle)
+{
+    if (constbufferHandle == NULL)
+    {
+        /*Codes_SRS_CONSTBUFFER_02_015: [If constbufferHandle is NULL then CONSTBUFFER_DecRef shall do nothing.]*/
+        LogError("Invalid arguments: CONSTBUFFER_HANDLE constbufferHandle=%p", constbufferHandle);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTBUFFER_02_016: [Otherwise, CONSTBUFFER_DecRef shall decrement the refcount on the constbufferHandle handle.]*/
+        if (DEC_REF_VAR(constbufferHandle->count) == DEC_RETURN_ZERO)
+        {
+            if (constbufferHandle->buffer_type == CONSTBUFFER_TYPE_MEMORY_MOVED)
+            {
+                free((void*)constbufferHandle->alias.buffer);
+            }
+            else if (constbufferHandle->buffer_type == CONSTBUFFER_TYPE_WITH_CUSTOM_FREE)
+            {
+                /* Codes_SRS_CONSTBUFFER_01_012: [ If the buffer was created by calling CONSTBUFFER_CreateWithCustomFree, the customFreeFunc function shall be called to free the memory, while passed customFreeFuncContext as argument. ]*/
+                constbufferHandle->custom_free_func(constbufferHandle->custom_free_func_context);
+            }
+
+            /*Codes_SRS_CONSTBUFFER_02_017: [If the refcount reaches zero, then CONSTBUFFER_DecRef shall deallocate all resources used by the CONSTBUFFER_HANDLE.]*/
+            free(constbufferHandle);
+        }
+    }
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/constmap.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/constmap.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/constmap.c	(revision 389)
@@ -0,0 +1,226 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/map.h"
+#include "azure_c_shared_utility/constmap.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/refcount.h"
+
+MU_DEFINE_ENUM_STRINGS(CONSTMAP_RESULT, CONSTMAP_RESULT_VALUES);
+
+typedef struct CONSTMAP_HANDLE_DATA_TAG
+{
+    MAP_HANDLE map;
+} CONSTMAP_HANDLE_DATA;
+
+DEFINE_REFCOUNT_TYPE(CONSTMAP_HANDLE_DATA);
+
+#define LOG_CONSTMAP_ERROR(result) LogError("result = %s", MU_ENUM_TO_STRING(CONSTMAP_RESULT, (result)));
+
+CONSTMAP_HANDLE ConstMap_Create(MAP_HANDLE sourceMap)
+{
+    CONSTMAP_HANDLE_DATA* result = REFCOUNT_TYPE_CREATE(CONSTMAP_HANDLE_DATA);
+
+    if (result == NULL)
+    {
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTMAP_17_048: [ConstMap_Create shall accept any non-NULL MAP_HANDLE as input.]*/
+        /*Codes_SRS_CONSTMAP_17_001: [ConstMap_Create shall create an immutable map, populated by the key, value pairs in the source map.]*/
+        result->map = Map_Clone(sourceMap);
+        if (result->map == NULL)
+        {
+            LOG_CONSTMAP_ERROR(CONSTMAP_ERROR);
+            REFCOUNT_TYPE_DESTROY(CONSTMAP_HANDLE_DATA, result);
+            /*Codes_SRS_CONSTMAP_17_002: [If during creation there are any errors, then ConstMap_Create shall return NULL.]*/
+            result = NULL;
+        }
+    }
+    /*Codes_SRS_CONSTMAP_17_003: [Otherwise, it shall return a non-NULL handle that can be used in subsequent calls.]*/
+    return (CONSTMAP_HANDLE)result;
+}
+
+void ConstMap_Destroy(CONSTMAP_HANDLE handle)
+{
+    /*Codes_SRS_CONSTMAP_17_005: [If parameter handle is NULL then ConstMap_Destroy shall take no action.]*/
+    if (handle == NULL)
+    {
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTMAP_17_049: [ConstMap_Destroy shall decrement the internal reference count of the immutable map.]*/
+        if (DEC_REF(CONSTMAP_HANDLE_DATA, handle) == DEC_RETURN_ZERO)
+        {
+            /*Codes_SRS_CONSTMAP_17_004: [If the reference count is zero, ConstMap_Destroy shall release all resources associated with the immutable map.]*/
+            Map_Destroy(((CONSTMAP_HANDLE_DATA *)handle)->map);
+            REFCOUNT_TYPE_DESTROY(CONSTMAP_HANDLE_DATA, handle);
+        }
+
+    }
+}
+
+CONSTMAP_HANDLE ConstMap_Clone(CONSTMAP_HANDLE handle)
+{
+    /*Codes_SRS_CONSTMAP_17_038: [ConstMap_Clone returns NULL if parameter handle is NULL.] */
+    if (handle == NULL)
+    {
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTMAP_17_039: [ConstMap_Clone shall increase the internal reference count of the immutable map indicated by parameter handle]*/
+        /*Codes_SRS_CONSTMAP_17_050: [ConstMap_Clone shall return the non-NULL handle. ]*/
+        INC_REF(CONSTMAP_HANDLE_DATA, handle);
+    }
+    return (handle);
+}
+
+static CONSTMAP_RESULT ConstMap_ErrorConvert(MAP_RESULT mapResult)
+{
+    CONSTMAP_RESULT result;
+    switch (mapResult)
+    {
+        case MAP_OK:
+            result = CONSTMAP_OK;
+            break;
+        case MAP_INVALIDARG:
+            result = CONSTMAP_INVALIDARG;
+            break;
+        case MAP_KEYNOTFOUND:
+            result = CONSTMAP_KEYNOTFOUND;
+            break;
+        default:
+            result = CONSTMAP_ERROR;
+            break;
+    }
+    return result;
+}
+
+MAP_HANDLE ConstMap_CloneWriteable(CONSTMAP_HANDLE handle)
+{
+    MAP_HANDLE result = NULL;
+    if (handle == NULL)
+    {
+        /*Codes_SRS_CONSTMAP_17_051: [ConstMap_CloneWriteable returns NULL if parameter handle is NULL. ]*/
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTMAP_17_052: [ConstMap_CloneWriteable shall create a new, writeable map, populated by the key, value pairs in the parameter defined by handle.]*/
+        /*Codes_SRS_CONSTMAP_17_053: [If during cloning, any operation fails, then ConstMap_CloneWriteableap_Clone shall return NULL.]*/
+        /*Codes_SRS_CONSTMAP_17_054: [Otherwise, ConstMap_CloneWriteable shall return a non-NULL handle that can be used in subsequent calls.]*/
+        result = Map_Clone(((CONSTMAP_HANDLE_DATA *)handle)->map);
+    }
+    return result;
+}
+
+bool ConstMap_ContainsKey(CONSTMAP_HANDLE handle, const char* key )
+{
+    bool keyExists = false;
+    if (handle == NULL)
+    {
+        /*Codes_SRS_CONSTMAP_17_024: [If parameter handle or key are NULL then ConstMap_ContainsKey shall return false.]*/
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        if (key == NULL)
+        {
+            LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+        }
+        else
+        {
+            /*Codes_SRS_CONSTMAP_17_025: [Otherwise if a key exists then ConstMap_ContainsKey shall return true.]*/
+            MAP_RESULT mapResult = Map_ContainsKey(((CONSTMAP_HANDLE_DATA *)handle)->map, key, &keyExists);
+            if (mapResult != MAP_OK)
+            {
+                /*Codes_SRS_CONSTMAP_17_026: [If a key doesn't exist, then ConstMap_ContainsKey shall return false.]*/
+                keyExists = false;
+                LOG_CONSTMAP_ERROR(ConstMap_ErrorConvert(mapResult));
+            }
+        }
+    }
+    return keyExists;
+}
+
+bool ConstMap_ContainsValue(CONSTMAP_HANDLE handle, const char* value)
+{
+    bool valueExists = false;
+    if (handle == NULL)
+    {
+        /*Codes_SRS_CONSTMAP_17_027: [If parameter handle or value is NULL then ConstMap_ContainsValue shall return false.]*/
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        if (value == NULL)
+        {
+            LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+        }
+        else
+        {
+            /*Codes_SRS_CONSTMAP_17_028: [Otherwise, if a pair has its value equal to the parameter value, the ConstMap_ContainsValue shall return true.]*/
+            MAP_RESULT mapResult = Map_ContainsValue(((CONSTMAP_HANDLE_DATA *)handle)->map, value, &valueExists);
+            if (mapResult != MAP_OK)
+            {
+                /*Codes_SRS_CONSTMAP_17_029: [Otherwise, if such a does not exist, then ConstMap_ContainsValue shall return false.]*/
+                LOG_CONSTMAP_ERROR(ConstMap_ErrorConvert(mapResult));
+            }
+        }
+    }
+    return valueExists;
+}
+
+const char* ConstMap_GetValue(CONSTMAP_HANDLE handle, const char* key)
+{
+    const char* value = NULL;
+
+    if (handle == NULL)
+    {
+        /*Codes_SRS_CONSTMAP_17_040: [If parameter handle or key is NULL then ConstMap_GetValue returns NULL.]*/
+        LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+    }
+    else
+    {
+        if (key == NULL)
+        {
+            /*Codes_SRS_CONSTMAP_17_040: [If parameter handle or key is NULL then ConstMap_GetValue returns NULL.]*/
+            LOG_CONSTMAP_ERROR(CONSTMAP_INVALIDARG);
+        }
+        else
+        {
+            /*Codes_SRS_CONSTMAP_17_041: [If the key is not found, then ConstMap_GetValue returns NULL.]*/
+            /*Codes_SRS_CONSTMAP_17_042: [Otherwise, ConstMap_GetValue returns the key's value.]*/
+            value = Map_GetValueFromKey(((CONSTMAP_HANDLE_DATA *)handle)->map, key);
+        }
+    }
+    return value;
+}
+
+CONSTMAP_RESULT ConstMap_GetInternals(CONSTMAP_HANDLE handle, const char*const** keys, const char*const** values, size_t* count)
+{
+    CONSTMAP_RESULT result;
+    if (handle == NULL)
+    {
+        /*Codes_SRS_CONSTMAP_17_046: [If parameter handle, keys, values or count is NULL then ConstMap_GetInternals shall return CONSTMAP_INVALIDARG.]*/
+        result = CONSTMAP_INVALIDARG;
+        LOG_CONSTMAP_ERROR(result);
+    }
+    else
+    {
+        /*Codes_SRS_CONSTMAP_17_043: [ConstMap_GetInternals shall produce in *keys a pointer to an array of const char* having all the keys stored so far by the map.]
+         *Codes_SRS_CONSTMAP_17_044: [ConstMap_GetInternals shall produce in *values a pointer to an array of const char* having all the values stored so far by the map.]
+         *Codes_SRS_CONSTMAP_17_045: [ ConstMap_GetInternals shall produce in *count the number of stored keys and values.]
+         */
+        MAP_RESULT mapResult = Map_GetInternals(((CONSTMAP_HANDLE_DATA *)handle)->map, keys, values, count);
+        result = ConstMap_ErrorConvert(mapResult);
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/crt_abstractions.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/crt_abstractions.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/crt_abstractions.c	(revision 389)
@@ -0,0 +1,838 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#define __STDC_WANT_LIB_EXT1__ 1
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <string.h>
+#include <limits.h>
+#include <float.h>
+#include <math.h>
+#include <errno.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+
+// VS 2008 does not have INFINITY and all the nice goodies...
+#if defined (TIZENRT)
+#define DEFINE_INFINITY 1
+#else
+
+#if defined _MSC_VER
+#if _MSC_VER <= 1500
+#define DEFINE_INFINITY 1
+#endif
+#endif
+#endif
+
+#if defined DEFINE_INFINITY
+
+#pragma warning(disable:4756 4056) // warning C4756: overflow in constant arithmetic
+
+// These defines are missing in math.h for WEC2013 SDK
+#ifndef _HUGE_ENUF
+#define _HUGE_ENUF  1e+300  // _HUGE_ENUF*_HUGE_ENUF must overflow
+#endif
+
+#define INFINITY   ((float)(_HUGE_ENUF * _HUGE_ENUF))
+#define HUGE_VALF  ((float)INFINITY)
+#define HUGE_VALL  ((long double)INFINITY)
+#define NAN        ((float)(INFINITY * 0.0F))
+#endif
+
+#if defined (_MSC_VER) || defined (MINGW_HAS_SECURE_API)
+#else
+
+/*Codes_SRS_CRT_ABSTRACTIONS_99_008: [strcat_s shall append the src to dst and terminates the resulting string with a null character.]*/
+int strcat_s(char* dst, size_t dstSizeInBytes, const char* src)
+{
+    int result;
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_004: [If dst is NULL or unterminated, the error code returned shall be EINVAL & dst shall not be modified.]*/
+    if (dst == NULL)
+    {
+        result = EINVAL;
+    }
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_005: [If src is NULL, the error code returned shall be EINVAL and dst[0] shall be set to 0.]*/
+    else if (src == NULL)
+    {
+        dst[0] = '\0';
+        result = EINVAL;
+    }
+    else
+    {
+        /*Codes_SRS_CRT_ABSTRACTIONS_99_006: [If the dstSizeInBytes is 0 or smaller than the required size for dst & src, the error code returned shall be ERANGE & dst[0] set to 0.]*/
+        if (dstSizeInBytes == 0)
+        {
+            result = ERANGE;
+            dst[0] = '\0';
+        }
+        else
+        {
+            size_t dstStrLen = 0;
+            size_t src_len = strlen(src);
+#ifdef __STDC_LIB_EXT1__
+            dstStrLen = strnlen_s(dst, dstSizeInBytes);
+#else
+            size_t i;
+            for(i=0; (i < dstSizeInBytes) && (dst[i]!= '\0'); i++)
+            {
+            }
+            dstStrLen = i;
+#endif
+            /*Codes_SRS_CRT_ABSTRACTIONS_99_004: [If dst is NULL or unterminated, the error code returned shall be EINVAL & dst shall not be modified.]*/
+            if (dstSizeInBytes == dstStrLen) /* this means the dst string is not terminated*/
+            {
+                result = EINVAL;
+            }
+            // If we are instructed to write too much data to the buffer
+            // return ERANGE
+            else if ((src_len + dstStrLen) >= dstSizeInBytes)
+            {
+                dst[0] = '\0';
+                result = ERANGE;
+            }
+            else
+            {
+                // memcpy should at most copy the result of strlen(src) or there may be
+                // some issues with copying unwanted memory
+                size_t bytes_to_cpy = dstSizeInBytes - dstStrLen;
+                if (bytes_to_cpy > src_len)
+                {
+                    bytes_to_cpy = src_len;
+                }
+
+                /*Codes_SRS_CRT_ABSTRACTIONS_99_009: [The initial character of src shall overwrite the terminating null character of dst.]*/
+                if (memcpy(&dst[dstStrLen], src, bytes_to_cpy) == NULL)
+                /*Codes_SRS_CRT_ABSTRACTIONS_99_006: [If the dstSizeInBytes is 0 or smaller than the required size for dst & src, the error code returned shall be ERANGE & dst[0] set to 0.]*/
+                {
+                    dst[0] = '\0';
+                    result = ERANGE;
+                }
+                else
+                {
+                    /*Codes_SRS_CRT_ABSTRACTIONS_99_003: [strcat_s shall return Zero upon success.]*/
+                    dst[dstStrLen+bytes_to_cpy] = '\0';
+                    result = 0;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_99_025: [strncpy_s shall copy the first N characters of src to dst, where N is the lesser of MaxCount and the length of src.]*/
+int strncpy_s(char* dst, size_t dstSizeInBytes, const char* src, size_t maxCount)
+{
+    int result;
+    int truncationFlag = 0;
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_020: [If dst is NULL, the error code returned shall be EINVAL and dst shall not be modified.]*/
+    if (dst == NULL)
+    {
+        result = EINVAL;
+    }
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_021: [If src is NULL, the error code returned shall be EINVAL and dst[0] shall be set to 0.]*/
+    else if (src == NULL)
+    {
+        dst[0] = '\0';
+        result = EINVAL;
+    }
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_022: [If the dstSizeInBytes is 0, the error code returned shall be EINVAL and dst shall not be modified.]*/
+    else if (dstSizeInBytes == 0)
+    {
+        result = EINVAL;
+    }
+    else
+    {
+        size_t srcLength = strlen(src);
+        if (maxCount != _TRUNCATE)
+        {
+            /*Codes_SRS_CRT_ABSTRACTIONS_99_041: [If those N characters will fit within dst (whose size is given as dstSizeInBytes) and still leave room for a null terminator, then those characters shall be copied and a terminating null is appended; otherwise, strDest[0] is set to the null character and ERANGE error code returned.]*/
+            if (srcLength > maxCount)
+            {
+                srcLength = maxCount;
+            }
+
+            /*Codes_SRS_CRT_ABSTRACTIONS_99_023: [If dst is not NULL & dstSizeInBytes is smaller than the required size for the src string, the error code returned shall be ERANGE and dst[0] shall be set to 0.]*/
+            if (srcLength + 1 > dstSizeInBytes)
+            {
+                dst[0] = '\0';
+                result = ERANGE;
+            }
+            else
+            {
+                (void)memcpy(dst, src, srcLength);
+                dst[srcLength] = '\0';
+                /*Codes_SRS_CRT_ABSTRACTIONS_99_018: [strncpy_s shall return Zero upon success]*/
+                result = 0;
+            }
+        }
+        /*Codes_SRS_CRT_ABSTRACTIONS_99_026: [If MaxCount is _TRUNCATE (defined as -1), then as much of src as will fit into dst shall be copied while still leaving room for the terminating null to be appended.]*/
+        else
+        {
+            if (srcLength + 1 > dstSizeInBytes )
+            {
+                srcLength = dstSizeInBytes - 1;
+                truncationFlag = 1;
+            }
+            (void)memcpy(dst, src, srcLength);
+            dst[srcLength] = '\0';
+            result = 0;
+        }
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_019: [If truncation occurred as a result of the copy, the error code returned shall be STRUNCATE.]*/
+    if (truncationFlag == 1)
+    {
+        result = STRUNCATE;
+    }
+
+    return result;
+}
+
+/* Codes_SRS_CRT_ABSTRACTIONS_99_016: [strcpy_s shall copy the contents in the address of src, including the terminating null character, to the location that's specified by dst.]*/
+int strcpy_s(char* dst, size_t dstSizeInBytes, const char* src)
+{
+    int result;
+
+    /* Codes_SRS_CRT_ABSTRACTIONS_99_012: [If dst is NULL, the error code returned shall be EINVAL & dst shall not be modified.]*/
+    if (dst == NULL)
+    {
+        result = EINVAL;
+    }
+    /* Codes_SRS_CRT_ABSTRACTIONS_99_013: [If src is NULL, the error code returned shall be EINVAL and dst[0] shall be set to 0.]*/
+    else if (src == NULL)
+    {
+        dst[0] = '\0';
+        result = EINVAL;
+    }
+    /* Codes_SRS_CRT_ABSTRACTIONS_99_014: [If the dstSizeInBytes is 0 or smaller than the required size for the src string, the error code returned shall be ERANGE & dst[0] set to 0.]*/
+    else if (dstSizeInBytes == 0)
+    {
+        dst[0] = '\0';
+        result = ERANGE;
+    }
+    else
+    {
+        size_t neededBuffer = strlen(src);
+        /* Codes_SRS_CRT_ABSTRACTIONS_99_014: [If the dstSizeInBytes is 0 or smaller than the required size for the src string, the error code returned shall be ERANGE & dst[0] set to 0.]*/
+        if (neededBuffer + 1 > dstSizeInBytes)
+        {
+            dst[0] = '\0';
+            result = ERANGE;
+        }
+        else
+        {
+            (void)memcpy(dst, src, neededBuffer + 1);
+            /*Codes_SRS_CRT_ABSTRACTIONS_99_011: [strcpy_s shall return Zero upon success]*/
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_99_029: [The sprintf_s function shall format and store series of characters and values in dst.  Each argument (if any) is converted and output according to the corresponding Format Specification in the format variable.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_99_031: [A null character is appended after the last character written.]*/
+int sprintf_s(char* dst, size_t dstSizeInBytes, const char* format, ...)
+{
+    int result;
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_028: [If dst or format is a null pointer, sprintf_s shall return -1 and set errno to EINVAL]*/
+    if ((dst == NULL) ||
+        (format == NULL))
+    {
+        errno = EINVAL;
+        result = -1;
+    }
+    else
+    {
+        /*Codes_SRS_CRT_ABSTRACTIONS_99_033: [sprintf_s shall check the format string for valid formatting characters.  If the check fails, the function returns -1.]*/
+
+#if defined _MSC_VER
+#error crt_abstractions is not provided for Microsoft Compilers
+#else
+        /*not Microsoft compiler... */
+#if defined (__STDC_VERSION__) || (__cplusplus)
+#if ( \
+        ((__STDC_VERSION__  == 199901L) || (__STDC_VERSION__ == 201000L) || (__STDC_VERSION__ == 201112L)) || \
+        (defined __cplusplus) \
+    )
+        /*C99 compiler*/
+        va_list args;
+        va_start(args, format);
+        /*Codes_SRS_CRT_ABSTRACTIONS_99_027: [sprintf_s shall return the number of characters stored in dst upon success.  This number shall not include the terminating null character.]*/
+        result = vsnprintf(dst, dstSizeInBytes, format, args);
+        va_end(args);
+
+        /*C99: Thus, the null-terminated output has been completely written if and only if the returned value is nonnegative and less than n*/
+        if (result < 0)
+        {
+            result = -1;
+        }
+        else if ((size_t)result >= dstSizeInBytes)
+        {
+            /*Codes_SRS_CRT_ABSTRACTIONS_99_034: [If the dst buffer is too small for the text being printed, then dst is set to an empty string and the function shall return -1.]*/
+            dst[0] = '\0';
+            result = -1;
+        }
+        else
+        {
+            /*do nothing, all is fine*/
+        }
+#else
+#error STDC_VERSION defined, but of unknown value; unable to sprinf_s, or provide own implementation
+#endif
+#else
+#error for STDC_VERSION undefined (assumed C89), provide own implementation of sprintf_s
+#endif
+#endif
+    }
+    return result;
+}
+#endif /* _MSC_VER || MINGW_HAS_SECURE_API */
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_006: [The strtoull_s must use the letters from a(or A) through z(or Z) to represent the numbers between 10 to 35.]*/
+/* returns the integer value that correspond to the character 'c'. If the character is invalid, it returns -1. */
+#define DIGIT_VAL(c)         (((c>='0') && (c<='9')) ? (c-'0') : ((c>='a') && (c<='z')) ? (c-'a'+10) : ((c>='A') && (c<='Z')) ? (c-'A'+10) : -1)
+#define IN_BASE_RANGE(d, b)  ((d >= 0) && (d < b))
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_010: [The white-space must be one of the characters ' ', '\f', '\n', '\r', '\t', '\v'.]*/
+#define IS_SPACE(c)           (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v')
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_001: [The strtoull_s must convert the initial portion of the string pointed to by nptr to unsigned long long int representation.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_002: [The strtoull_s must resembling an integer represented in some radix determined by the value of base.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_003: [The strtoull_s must return the integer that represents the value in the initial part of the string. If any.]*/
+unsigned long long strtoull_s(const char* nptr, char** endptr, int base)
+{
+    unsigned long long result = 0ULL;
+    bool validStr = true;
+    char* runner = (char*)nptr;
+    bool isNegative = false;
+    int digitVal;
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_005: [The strtoull_s must convert number using base 2 to 36.]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_012: [If the subject sequence is empty or does not have the expected form, the strtoull_s must not perform any conversion; the value of nptr is stored in the object pointed to by endptr, provided that endptr is not a NULL pointer.]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_013: [If no conversion could be performed, the strtoull_s returns the value 0L.]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_035: [If the nptr is NULL, the strtoull_s must **not** perform any conversion and must returns 0L; endptr must receive NULL, provided that endptr is not a NULL pointer.]*/
+        if (((base >= 2) || (base == 0)) && (base <= 36) && (runner != NULL))
+    {
+        /*Codes_SRS_CRT_ABSTRACTIONS_21_011: [The valid sequence starts after the first non-white-space character, followed by an optional positive or negative sign, a number or a letter(depending of the base).]*/
+        /*Codes_SRS_CRT_ABSTRACTIONS_21_010: [The white-space must be one of the characters ' ', '\f', '\n', '\r', '\t', '\v'.]*/
+        while (IS_SPACE(*runner))
+        {
+            runner++;
+        }
+        if ((*runner) == '+')
+        {
+            runner++;
+        }
+        else if ((*runner) == '-')
+        {
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_038: [If the subject sequence starts with a negative sign, the strtoull_s will convert it to the posive representation of the negative value.]*/
+            isNegative = true;
+            runner++;
+        }
+
+        if ((*runner) == '0')
+        {
+            if ((*(runner+1) == 'x') || (*(runner+1) == 'X'))
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_21_008: [If the base is 0 and '0x' or '0X' precedes the number, strtoull_s must convert to a hexadecimal (base 16).]*/
+                /* hexadecimal... */
+                if ((base == 0) || (base == 16))
+                {
+                    base = 16;
+                    runner += 2;
+                }
+            }
+            else if((base == 0) || (base == 8))
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_21_009: [If the base is 0 and '0' precedes the number, strtoull_s must convert to an octal (base 8).]*/
+                /* octal... */
+                base = 8;
+                runner++;
+            }
+        }
+
+        if(base == 0)
+        {
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_007: [If the base is 0 and no special chars precedes the number, strtoull_s must convert to a decimal (base 10).]*/
+            /* decimal... */
+            base = 10;
+        }
+
+        digitVal = DIGIT_VAL(*runner);
+        if (validStr && IN_BASE_RANGE(digitVal, base))
+        {
+            errno = 0;
+            do
+            {
+                if (((ULLONG_MAX - digitVal) / base) < result)
+                {
+                    /*Codes_SRS_CRT_ABSTRACTIONS_21_014: [If the correct value is outside the range, the strtoull_s returns the value ULLONG_MAX, and errno will receive the value ERANGE.]*/
+                    /* overflow... */
+                    result = ULLONG_MAX;
+                    errno = ERANGE;
+                }
+                else
+                {
+                    result = result * base + digitVal;
+                }
+                runner++;
+                digitVal = DIGIT_VAL(*runner);
+            } while (IN_BASE_RANGE(digitVal, base));
+        }
+        else
+        {
+            runner = (char*)nptr;
+        }
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_004: [The strtoull_s must return in endptr a final string of one or more unrecognized characters, including the terminating null character of the input string.]*/
+    if (endptr != NULL)
+    {
+        (*endptr) = (char*)runner;
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_038: [If the subject sequence starts with a negative sign, the strtoull_s will convert it to the posive representation of the negative value.]*/
+    if (isNegative)
+    {
+        result = ULLONG_MAX - result + 1;
+    }
+
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_023: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtof_s must return the INFINITY value for float.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_024: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtof_s must return 0.0f and points endptr to the first character after the 'NAN' sequence.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_033: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtold_s must return the INFINITY value for long double.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_034: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtold_s must return 0.0 and points endptr to the first character after the 'NAN' sequence.]*/
+static int substricmp(const char* nptr, const char* subsrt)
+{
+    int result = 0;
+    while (((*subsrt) != '\0') && (result == 0))
+    {
+        result = TOUPPER(*nptr) - TOUPPER(*subsrt);
+        nptr++;
+        subsrt++;
+    }
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_023: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtof_s must return the INFINITY value for float.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_033: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtold_s must return the INFINITY value for long double.]*/
+static bool isInfinity(const char** endptr)
+{
+    bool result = false;
+    if (substricmp((*endptr), "INF") == 0)
+    {
+        (*endptr) += 3;
+        result = true;
+        if (substricmp((*endptr), "INITY") == 0)
+        {
+            (*endptr) += 5;
+        }
+    }
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_024: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtof_s must return 0.0f and points endptr to the first character after the 'NAN' sequence.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_034: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtold_s must return 0.0 and points endptr to the first character after the 'NAN' sequence.]*/
+static bool isNaN(const char** endptr)
+{
+    const char* runner = (*endptr);
+    bool result = false;
+    if (substricmp(runner, "NAN") == 0)
+    {
+        runner += 3;
+        result = true;
+        if ((*runner) == '(')
+        {
+            do
+            {
+                runner++;
+            } while (((*runner) != '\0') && ((*runner) != ')'));
+            if ((*runner) == ')')
+                runner++;
+            else
+                result = false;
+        }
+    }
+    if (result)
+        (*endptr) = runner;
+    return result;
+}
+
+#define FLOAT_STRING_TYPE_VALUES    \
+            FST_INFINITY,           \
+            FST_NAN,                \
+            FST_NUMBER,             \
+            FST_OVERFLOW,           \
+            FST_ERROR
+
+MU_DEFINE_ENUM(FLOAT_STRING_TYPE, FLOAT_STRING_TYPE_VALUES);
+
+static FLOAT_STRING_TYPE splitFloatString(const char* nptr, char** endptr, int *signal, double *fraction, int *exponential)
+{
+    FLOAT_STRING_TYPE result = FST_ERROR;
+
+    unsigned long long ullInteger = 0;
+    unsigned long long ullFraction = 0;
+    int integerSize = 0;
+    int fractionSize = 0;
+    char* startptr;
+
+    (*endptr) = (char*)nptr;
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_018: [The white-space for strtof_s must be one of the characters ' ', '\f', '\n', '\r', '\t', '\v'.]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_028: [The white-space for strtold_s must be one of the characters ' ', '\f', '\n', '\r', '\t', '\v'.]*/
+    while (IS_SPACE(**endptr))
+    {
+        (*endptr)++;
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_019: [The valid sequence for strtof_s starts after the first non-white - space character, followed by an optional positive or negative sign, a number, 'INF', or 'NAN' (ignoring case).]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_029: [The valid sequence for strtold_s starts after the first non-white - space character, followed by an optional positive or negative sign, a number, 'INF', or 'NAN' (ignoring case).]*/
+    (*signal) = +1;
+    if ((**endptr) == '+')
+    {
+        (*endptr)++;
+    }
+    else if ((**endptr) == '-')
+    {
+        (*signal) = -1;
+        (*endptr)++;
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_023: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtof_s must return the INFINITY value for float.]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_033: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtold_s must return the INFINITY value for long double.]*/
+    if (isInfinity((const char**)endptr))
+    {
+        result = FST_INFINITY;
+    }
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_034: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtold_s must return 0.0 and points endptr to the first character after the 'NAN' sequence.]*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_024: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtof_s must return 0.0f and points endptr to the first character after the 'NAN' sequence.]*/
+    else if (isNaN((const char**)endptr))
+    {
+        result = FST_NAN;
+    }
+    else if (IN_BASE_RANGE(DIGIT_VAL(**endptr), 10))
+    {
+        result = FST_NUMBER;
+        startptr = *endptr;
+        /* integers will go to the fraction and exponential. */
+        ullInteger = strtoull_s(startptr, endptr, 10);
+        integerSize = (int)((*endptr) - startptr);
+        if ((ullInteger == ULLONG_MAX) && (errno != 0))
+        {
+            result = FST_OVERFLOW;
+        }
+
+        /* get the real fraction part, if exist. */
+        if ((**endptr) == '.')
+        {
+            startptr = (*endptr) + 1;
+            ullFraction = strtoull_s(startptr, endptr, 10);
+            fractionSize = (int)((*endptr) - startptr);
+            if ((ullFraction == ULLONG_MAX) && (errno != 0))
+            {
+                result = FST_OVERFLOW;
+            }
+        }
+
+        if (((**endptr) == 'e') || ((**endptr) == 'E'))
+        {
+            startptr = (*endptr) + 1;
+            (*exponential) = (int)strtol(startptr, endptr, 10);
+            if (((*exponential) < (DBL_MAX_10_EXP * (-1))) || ((*exponential) > DBL_MAX_10_EXP))
+            {
+                result = FST_OVERFLOW;
+            }
+        }
+        else
+        {
+            (*exponential) = 0;
+        }
+
+        if (result == FST_NUMBER)
+        {
+            /* Add ullInteger to ullFraction. */
+            ullFraction += (ullInteger * (unsigned long long)(pow(10, (double)fractionSize)));
+            (*fraction) = ((double)ullFraction / (pow(10.0f, ((double)fractionSize + (double)integerSize - 1.00))));
+
+            /* Unify rest of integerSize and fractionSize in the exponential. */
+            (*exponential) += integerSize - 1;
+        }
+    }
+
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_015: [The strtof_s must convert the initial portion of the string pointed to by nptr to float representation.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_016: [The strtof_s must return the float that represents the value in the initial part of the string. If any.]*/
+float strtof_s(const char* nptr, char** endptr)
+{
+    int signal = 1;
+    double fraction;
+    int exponential;
+    char* runner = (char*)nptr;
+    double val;
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_021: [If no conversion could be performed, the strtof_s returns the value 0.0.]*/
+    float result = 0.0;
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_036: [**If the nptr is NULL, the strtof_s must not perform any conversion and must returns 0.0f; endptr must receive NULL, provided that endptr is not a NULL pointer.]*/
+    if (nptr != NULL)
+    {
+        switch (splitFloatString(nptr, &runner, &signal, &fraction, &exponential))
+        {
+        case FST_INFINITY:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_023: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtof_s must return the INFINITY value for float.]*/
+            result = INFINITY * (signal);
+            errno = 0;
+            break;
+        case FST_NAN:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_024: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtof_s must return 0.0f and points endptr to the first character after the 'NAN' sequence.]*/
+            result = NAN;
+            break;
+        case FST_NUMBER:
+            val = fraction * pow(10.0, (double)exponential) * (double)signal;
+            if ((val >= (FLT_MAX * (-1.0f))) && (val <= FLT_MAX))
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_21_016: [The strtof_s must return the float that represents the value in the initial part of the string. If any.]*/
+                result = (float)val;
+            }
+            else
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_21_022: [If the correct value is outside the range, the strtof_s returns the value plus or minus HUGE_VALF, and errno will receive the value ERANGE.]*/
+                result = HUGE_VALF * (signal);
+                errno = ERANGE;
+            }
+            break;
+        case FST_OVERFLOW:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_022: [If the correct value is outside the range, the strtof_s returns the value plus or minus HUGE_VALF, and errno will receive the value ERANGE.]*/
+            result = HUGE_VALF * (signal);
+            errno = ERANGE;
+            break;
+        default:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_020: [If the subject sequence is empty or does not have the expected form, the strtof_s must not perform any conversion and must returns 0.0f; the value of nptr is stored in the object pointed to by endptr, provided that endptr is not a NULL pointer.]*/
+            runner = (char*)nptr;
+            break;
+        }
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_017: [The strtof_s must return in endptr a final string of one or more unrecognized characters, including the terminating null character of the input string.]*/
+    if (endptr != NULL)
+    {
+        (*endptr) = runner;
+    }
+
+    return result;
+}
+
+/*Codes_SRS_CRT_ABSTRACTIONS_21_025: [The strtold_s must convert the initial portion of the string pointed to by nptr to long double representation.]*/
+/*Codes_SRS_CRT_ABSTRACTIONS_21_026: [The strtold_s must return the long double that represents the value in the initial part of the string. If any.]*/
+long double strtold_s(const char* nptr, char** endptr)
+{
+    int signal = 1;
+    double fraction;
+    int exponential;
+    char* runner = (char*)nptr;
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_031: [If no conversion could be performed, the strtold_s returns the value 0.0.]*/
+    long double result = 0.0;
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_037: [If the nptr is NULL, the strtold_s must not perform any conversion and must returns 0.0; endptr must receive NULL, provided that endptr is not a NULL pointer.]*/
+    if (nptr != NULL)
+    {
+        switch (splitFloatString(nptr, &runner, &signal, &fraction, &exponential))
+        {
+        case FST_INFINITY:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_033: [If the string is 'INF' of 'INFINITY' (ignoring case), the strtold_s must return the INFINITY value for long double.]*/
+            result = (long double)INFINITY * (long double)(signal);
+            errno = 0;
+            break;
+        case FST_NAN:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_034: [If the string is 'NAN' or 'NAN(...)' (ignoring case), the strtold_s must return 0.0 and points endptr to the first character after the 'NAN' sequence.]*/
+            result = (long double)NAN;
+            break;
+        case FST_NUMBER:
+            if ((exponential != DBL_MAX_10_EXP || (fraction <= 1.7976931348623158)) &&
+                (exponential != (DBL_MAX_10_EXP * (-1)) || (fraction <= 2.2250738585072014)))
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_21_026: [The strtold_s must return the long double that represents the value in the initial part of the string. If any.]*/
+                result = fraction * pow(10.0, (double)exponential) * (double)signal;
+            }
+            else
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_21_032: [If the correct value is outside the range, the strtold_s returns the value plus or minus HUGE_VALL, and errno will receive the value ERANGE.]*/
+                result = (long double)HUGE_VALF * (long double)(signal);
+                errno = ERANGE;
+            }
+            break;
+        case FST_OVERFLOW:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_032: [If the correct value is outside the range, the strtold_s returns the value plus or minus HUGE_VALL, and errno will receive the value ERANGE.]*/
+            result = (long double)HUGE_VALF * (long double)(signal);
+            errno = ERANGE;
+            break;
+        default:
+            /*Codes_SRS_CRT_ABSTRACTIONS_21_030: [If the subject sequence is empty or does not have the expected form, the strtold_s must not perform any conversion and must returns 0.0; the value of nptr is stored in the object pointed to by endptr, provided that endptr is not a NULL pointer.]*/
+            runner = (char*)nptr;
+            break;
+        }
+    }
+
+    /*Codes_SRS_CRT_ABSTRACTIONS_21_027: [The strtold_s must return in endptr a final string of one or more unrecognized characters, including the terminating null character of the input string.]*/
+    if (endptr != NULL)
+    {
+        (*endptr) = runner;
+    }
+
+    return result;
+}
+
+
+/*Codes_SRS_CRT_ABSTRACTIONS_99_038: [mallocAndstrcpy_s shall allocate memory for destination buffer to fit the string in the source parameter.]*/
+int mallocAndStrcpy_s(char** destination, const char* source)
+{
+    int result;
+    int copied_result;
+    /*Codes_SRS_CRT_ABSTRACTIONS_99_036: [destination parameter or source parameter is NULL, the error code returned shall be EINVAL and destination shall not be modified.]*/
+    if ((destination == NULL) || (source == NULL))
+    {
+        /*If strDestination or strSource is a NULL pointer[...]these functions return EINVAL */
+        result = EINVAL;
+    }
+    else
+    {
+        size_t l = strlen(source);
+        char* temp = (char*)malloc(l + 1);
+
+        /*Codes_SRS_CRT_ABSTRACTIONS_99_037: [Upon failure to allocate memory for the destination, the function will return ENOMEM.]*/
+        if (temp == NULL)
+        {
+            result = ENOMEM;
+        }
+        else
+        {
+            *destination = temp;
+            /*Codes_SRS_CRT_ABSTRACTIONS_99_039: [mallocAndstrcpy_s shall copy the contents in the address source, including the terminating null character into location specified by the destination pointer after the memory allocation.]*/
+            copied_result = strcpy_s(*destination, l + 1, source);
+            if (copied_result < 0) /*strcpy_s error*/
+            {
+                free(*destination);
+                *destination = NULL;
+                result = copied_result;
+            }
+            else
+            {
+                /*Codes_SRS_CRT_ABSTRACTIONS_99_035: [mallocAndstrcpy_s shall return Zero upon success]*/
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+/*takes "value" and transforms it into a decimal string*/
+/*10 => "10"*/
+/*return 0 when everything went ok*/
+/*Codes_SRS_CRT_ABSTRACTIONS_02_001: [unsignedIntToString shall convert the parameter value to its decimal representation as a string in the buffer indicated by parameter destination having the size indicated by parameter destinationSize.] */
+int unsignedIntToString(char* destination, size_t destinationSize, unsigned int value)
+{
+    int result;
+    size_t pos;
+    /*the below loop gets the number in reverse order*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_02_003: [If destination is NULL then unsignedIntToString shall fail.] */
+    /*Codes_SRS_CRT_ABSTRACTIONS_02_002: [If the conversion fails for any reason (for example, insufficient buffer space), a non-zero return value shall be supplied and unsignedIntToString shall fail.] */
+    if (
+        (destination == NULL) ||
+        (destinationSize < 2) /*because the smallest number is '0\0' which requires 2 characters*/
+        )
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        pos = 0;
+        do
+        {
+            destination[pos++] = '0' + (value % 10);
+            value /= 10;
+        } while ((value > 0) && (pos < (destinationSize-1)));
+
+        if (value == 0)
+        {
+            size_t w;
+            destination[pos] = '\0';
+            /*all converted and they fit*/
+            for (w = 0; w <= (pos-1) >> 1; w++)
+            {
+                char temp;
+                temp = destination[w];
+                destination[w] = destination[pos - 1 - w];
+                destination[pos -1 - w] = temp;
+            }
+            /*Codes_SRS_CRT_ABSTRACTIONS_02_004: [If the conversion has been successfull then unsignedIntToString shall return 0.] */
+            result = 0;
+        }
+        else
+        {
+            /*Codes_SRS_CRT_ABSTRACTIONS_02_002: [If the conversion fails for any reason (for example, insufficient buffer space), a non-zero return value shall be supplied and unsignedIntToString shall fail.] */
+            result = MU_FAILURE;
+        }
+    }
+    return result;
+}
+
+/*takes "value" and transforms it into a decimal string*/
+/*10 => "10"*/
+/*return 0 when everything went ok*/
+/*Codes_SRS_CRT_ABSTRACTIONS_02_001: [unsignedIntToString shall convert the parameter value to its decimal representation as a string in the buffer indicated by parameter destination having the size indicated by parameter destinationSize.] */
+int size_tToString(char* destination, size_t destinationSize, size_t value)
+{
+    int result;
+    size_t pos;
+    /*the below loop gets the number in reverse order*/
+    /*Codes_SRS_CRT_ABSTRACTIONS_02_003: [If destination is NULL then unsignedIntToString shall fail.] */
+    /*Codes_SRS_CRT_ABSTRACTIONS_02_002: [If the conversion fails for any reason (for example, insufficient buffer space), a non-zero return value shall be supplied and unsignedIntToString shall fail.] */
+    if (
+        (destination == NULL) ||
+        (destinationSize < 2) /*because the smallest number is '0\0' which requires 2 characters*/
+        )
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        pos = 0;
+        do
+        {
+            destination[pos++] = '0' + (value % 10);
+            value /= 10;
+        } while ((value > 0) && (pos < (destinationSize - 1)));
+
+        if (value == 0)
+        {
+            size_t w;
+            destination[pos] = '\0';
+            /*all converted and they fit*/
+            for (w = 0; w <= (pos - 1) >> 1; w++)
+            {
+                char temp;
+                temp = destination[w];
+                destination[w] = destination[pos - 1 - w];
+                destination[pos - 1 - w] = temp;
+            }
+            /*Codes_SRS_CRT_ABSTRACTIONS_02_004: [If the conversion has been successfull then unsignedIntToString shall return 0.] */
+            result = 0;
+        }
+        else
+        {
+            /*Codes_SRS_CRT_ABSTRACTIONS_02_002: [If the conversion fails for any reason (for example, insufficient buffer space), a non-zero return value shall be supplied and unsignedIntToString shall fail.] */
+            result = MU_FAILURE;
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/doublylinkedlist.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/doublylinkedlist.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/doublylinkedlist.c	(revision 389)
@@ -0,0 +1,107 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "azure_c_shared_utility/doublylinkedlist.h"
+
+void
+DList_InitializeListHead(
+    PDLIST_ENTRY ListHead
+)
+{
+    /* Codes_SRS_DLIST_06_005: [DList_InitializeListHead will initialize the Flink & Blink to the address of the DLIST_ENTRY.] */
+    ListHead->Flink = ListHead->Blink = ListHead;
+    return;
+}
+
+int
+DList_IsListEmpty(
+    const PDLIST_ENTRY ListHead
+)
+{
+    /* Codes_SRS_DLIST_06_003: [DList_IsListEmpty shall return a non-zero value if there are no DLIST_ENTRY's on this list other than the list head.] */
+    /* Codes_SRS_DLIST_06_004: [DList_IsListEmpty shall return 0 if there is one or more items in the list.] */
+    return (ListHead->Flink == ListHead);
+}
+
+int
+DList_RemoveEntryList(
+    PDLIST_ENTRY Entry
+)
+{
+    /* Codes_SRS_DLIST_06_008: [DList_RemoveEntryList shall remove a listEntry from whatever list it is properly part of.] */
+    /* Codes_SRS_DLIST_06_009: [The remaining list is properly formed.] */
+    /* Codes_SRS_DLIST_06_010: [DList_RemoveEntryList shall return non-zero if the remaining list is empty.] */
+    /* Codes_SRS_DLIST_06_011: [DList_RemoveEntryList shall return zero if the remaining list is NOT empty.] */
+    PDLIST_ENTRY Blink;
+    PDLIST_ENTRY Flink;
+
+    Flink = Entry->Flink;
+    Blink = Entry->Blink;
+    Blink->Flink = Flink;
+    Flink->Blink = Blink;
+    return (Flink == Blink);
+}
+
+PDLIST_ENTRY
+DList_RemoveHeadList(
+    PDLIST_ENTRY ListHead
+)
+{
+    /* Codes_SRS_DLIST_06_012: [DList_RemoveHeadList removes the oldest entry from the list defined by the listHead parameter and returns a pointer to that entry.] */
+    /* Codes_SRS_DLIST_06_013: [DList_RemoveHeadList shall return listHead if that's the only item in the list.] */
+
+    PDLIST_ENTRY Flink;
+    PDLIST_ENTRY Entry;
+
+    Entry = ListHead->Flink;
+    Flink = Entry->Flink;
+    ListHead->Flink = Flink;
+    Flink->Blink = ListHead;
+    return Entry;
+}
+
+
+
+void
+DList_InsertTailList(
+    PDLIST_ENTRY ListHead,
+    PDLIST_ENTRY Entry
+)
+{
+    PDLIST_ENTRY Blink;
+
+    /* Codes_SRS_DLIST_06_006: [DListInsertTailList shall place the DLIST_ENTRY at the end of the list defined by the listHead parameter.] */
+    Blink = ListHead->Blink;
+    Entry->Flink = ListHead;
+    Entry->Blink = Blink;
+    Blink->Flink = Entry;
+    ListHead->Blink = Entry;
+    return;
+}
+
+
+void
+DList_AppendTailList(
+    PDLIST_ENTRY ListHead,
+    PDLIST_ENTRY ListToAppend
+)
+{
+    /* Codes_SRS_DLIST_06_007: [DList_AppendTailList shall place the list defined by listToAppend at the end of the list defined by the listHead parameter.] */
+    PDLIST_ENTRY ListEnd = ListHead->Blink;
+
+    ListHead->Blink->Flink = ListToAppend;
+    ListHead->Blink = ListToAppend->Blink;
+    ListToAppend->Blink->Flink = ListHead;
+    ListToAppend->Blink = ListEnd;
+    return;
+}
+
+
+/*Codes_SRS_DLIST_02_002: [DList_InsertHeadList inserts a singular entry in the list having as head listHead after "head".]*/
+void DList_InsertHeadList(PDLIST_ENTRY listHead, PDLIST_ENTRY entry)
+{
+    entry->Blink = listHead;
+    entry->Flink = listHead->Flink;
+    listHead->Flink->Blink = entry;
+    listHead->Flink = entry;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_rand.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_rand.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_rand.c	(revision 389)
@@ -0,0 +1,16 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifdef __cplusplus
+#include <cstdlib>
+#else
+#include <stdlib.h>
+#endif
+
+#include "azure_c_shared_utility/gb_rand.h"
+
+/*this is rand*/
+int gb_rand(void)
+{
+    return rand();
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_stdio.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_stdio.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_stdio.c	(revision 389)
@@ -0,0 +1,54 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*depending if the symbol GB_STDIO_INTERCEPT is defined, this file does the following
+
+    a) if GB_STDIO_INTERCEPT is NOT defined, then the file shall be empty (almost:)
+    b) if GB_STDIO_INTERCEPT is defined, then the file shall call to the 'real' stdio.h functions from their gb_* synonyms*/
+#ifdef _MSC_VER
+/* compiler warning C4206: nonstandard extension used: translation unit is empty */
+/* linker warning 4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library */
+const int avoid_warnings_B9EB480E_6AE7_43B3_9249_47993776BA7B = 0;
+#endif
+#ifdef GB_STDIO_INTERCEPT
+
+#ifdef __cplusplus
+#include <cstdio>
+#include <cstdarg>
+#else
+#include <stdio.h>
+#include <stdarg.h>
+#endif
+
+#include "azure_c_shared_utility/gb_stdio.h"
+
+/*this is fopen*/
+FILE *gb_fopen(const char * filename, const char * mode)
+{
+    return fopen(filename, mode);
+}
+
+int gb_fclose(FILE *stream)
+{
+    return fclose(stream);
+}
+
+int gb_fseek(FILE *stream, long int offset, int whence)
+{
+    return fseek(stream, offset, whence);
+}
+
+long int gb_ftell(FILE *stream)
+{
+    return ftell(stream);
+}
+
+int fprintf(FILE * stream, const char * format, ...)
+{
+    va_list args;
+    va_start(args, format);
+    vfprintf(stream, format, args);
+    va_end(args);
+}
+
+#endif
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_time.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_time.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/gb_time.c	(revision 389)
@@ -0,0 +1,40 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*depending if the symbol GB_TIME_INTERCEPT is defined, this file does the following
+
+    a) if GB_TIME_INTERCEPT is NOT defined, then the file shall be empty (almost:)
+    b) if GB_TIME_INTERCEPT is defined, then the file shall call to the 'real' time.h functions from their gb_* synonyms*/
+#ifdef _MSC_VER
+/* compiler warning C4206: nonstandard extension used: translation unit is empty */
+/* linker warning 4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library */
+const int avoid_warnings_0CA668EF_F2C4_49A8_A30D_7257C67173A4 = 0;
+#endif
+#ifdef GB_TIME_INTERCEPT
+
+#ifdef __cplusplus
+#include <ctime>
+#else
+#include <time.h>
+#endif
+
+#include "azure_c_shared_utility/gb_time.h"
+
+/*this is time*/
+time_t gb_time(time_t *timer);
+{
+    return time(timer);
+}
+
+/*this is localtime*/
+struct tm *gb_localtime(const time_t *timer)
+{
+    return gb_localtime(timer);
+}
+
+size_t gb_strftime(char * s, size_t maxsize, const char * format, const struct tm * timeptr)
+{
+    return strftime(s, maxsize, format, timeptr);
+}
+
+#endif
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/gballoc.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/gballoc.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/gballoc.c	(revision 389)
@@ -0,0 +1,446 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/lock.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+#ifndef GB_USE_CUSTOM_HEAP
+
+#ifndef SIZE_MAX
+#define SIZE_MAX ((size_t)~(size_t)0)
+#endif
+
+typedef struct ALLOCATION_TAG
+{
+    size_t size;
+    void* ptr;
+    void* next;
+} ALLOCATION;
+
+typedef enum GBALLOC_STATE_TAG
+{
+    GBALLOC_STATE_INIT,
+    GBALLOC_STATE_NOT_INIT
+} GBALLOC_STATE;
+
+static ALLOCATION* head = NULL;
+static size_t totalSize = 0;
+static size_t maxSize = 0;
+static size_t g_allocations = 0;
+static GBALLOC_STATE gballocState = GBALLOC_STATE_NOT_INIT;
+
+static LOCK_HANDLE gballocThreadSafeLock = NULL;
+
+int gballoc_init(void)
+{
+    int result;
+
+    if (gballocState != GBALLOC_STATE_NOT_INIT)
+    {
+        /* Codes_SRS_GBALLOC_01_025: [Init after Init shall fail and return a non-zero value.] */
+        result = MU_FAILURE;
+    }
+    /* Codes_SRS_GBALLOC_01_026: [gballoc_Init shall create a lock handle that will be used to make the other gballoc APIs thread-safe.] */
+    else if ((gballocThreadSafeLock = Lock_Init()) == NULL)
+    {
+        /* Codes_SRS_GBALLOC_01_027: [If the Lock creation fails, gballoc_init shall return a non-zero value.]*/
+        result = MU_FAILURE;
+    }
+    else
+    {
+        gballocState = GBALLOC_STATE_INIT;
+
+        /* Codes_ SRS_GBALLOC_01_002: [Upon initialization the total memory used and maximum total memory used tracked by the module shall be set to 0.] */
+        totalSize = 0;
+        maxSize = 0;
+        g_allocations = 0;
+
+        /* Codes_SRS_GBALLOC_01_024: [gballoc_init shall initialize the gballoc module and return 0 upon success.] */
+        result = 0;
+    }
+
+    return result;
+}
+
+void gballoc_deinit(void)
+{
+    if (gballocState == GBALLOC_STATE_INIT)
+    {
+        /* Codes_SRS_GBALLOC_01_028: [gballoc_deinit shall free all resources allocated by gballoc_init.] */
+        (void)Lock_Deinit(gballocThreadSafeLock);
+    }
+
+    gballocState = GBALLOC_STATE_NOT_INIT;
+}
+
+void* gballoc_malloc(size_t size)
+{
+    void* result;
+
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        /* Codes_SRS_GBALLOC_01_039: [If gballoc was not initialized gballoc_malloc shall simply call malloc without any memory tracking being performed.] */
+        result = malloc(size);
+    }
+    /* Codes_SRS_GBALLOC_01_030: [gballoc_malloc shall ensure thread safety by using the lock created by gballoc_Init.] */
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_01_048: [If acquiring the lock fails, gballoc_malloc shall return NULL.] */
+        LogError("Failed to get the Lock.");
+        result = NULL;
+    }
+    else
+    {
+        ALLOCATION* allocation = (ALLOCATION*)malloc(sizeof(ALLOCATION));
+        if (allocation == NULL)
+        {
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_GBALLOC_01_003: [gb_malloc shall call the C99 malloc function and return its result.] */
+            result = malloc(size);
+            if (result == NULL)
+            {
+                /* Codes_SRS_GBALLOC_01_012: [When the underlying malloc call fails, gballoc_malloc shall return NULL and size should not be counted towards total memory used.] */
+                free(allocation);
+            }
+            else
+            {
+                /* Codes_SRS_GBALLOC_01_004: [If the underlying malloc call is successful, gb_malloc shall increment the total memory used with the amount indicated by size.] */
+                allocation->ptr = result;
+                allocation->size = size;
+                allocation->next = head;
+                head = allocation;
+
+                g_allocations++;
+                totalSize += size;
+                /* Codes_SRS_GBALLOC_01_011: [The maximum total memory used shall be the maximum of the total memory used at any point.] */
+                if (maxSize < totalSize)
+                {
+                    maxSize = totalSize;
+                }
+            }
+        }
+
+        (void)Unlock(gballocThreadSafeLock);
+    }
+
+    return result;
+}
+
+void* gballoc_calloc(size_t nmemb, size_t size)
+{
+    void* result;
+
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        /* Codes_SRS_GBALLOC_01_040: [If gballoc was not initialized gballoc_calloc shall simply call calloc without any memory tracking being performed.] */
+        result = calloc(nmemb, size);
+    }
+    /* Codes_SRS_GBALLOC_01_031: [gballoc_calloc shall ensure thread safety by using the lock created by gballoc_Init]  */
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_01_046: [If acquiring the lock fails, gballoc_calloc shall return NULL.] */
+        LogError("Failed to get the Lock.");
+        result = NULL;
+    }
+    else
+    {
+        ALLOCATION* allocation = (ALLOCATION*)malloc(sizeof(ALLOCATION));
+        if (allocation == NULL)
+        {
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_GBALLOC_01_020: [gballoc_calloc shall call the C99 calloc function and return its result.] */
+            result = calloc(nmemb, size);
+            if (result == NULL)
+            {
+                /* Codes_SRS_GBALLOC_01_022: [When the underlying calloc call fails, gballoc_calloc shall return NULL and size should not be counted towards total memory used.] */
+                free(allocation);
+            }
+            else
+            {
+                /* Codes_SRS_GBALLOC_01_021: [If the underlying calloc call is successful, gballoc_calloc shall increment the total memory used with nmemb*size.] */
+                allocation->ptr = result;
+                allocation->size = nmemb * size;
+                allocation->next = head;
+                head = allocation;
+                g_allocations++;
+
+                totalSize += allocation->size;
+                /* Codes_SRS_GBALLOC_01_011: [The maximum total memory used shall be the maximum of the total memory used at any point.] */
+                if (maxSize < totalSize)
+                {
+                    maxSize = totalSize;
+                }
+            }
+        }
+
+        (void)Unlock(gballocThreadSafeLock);
+    }
+
+    return result;
+}
+
+void* gballoc_realloc(void* ptr, size_t size)
+{
+    ALLOCATION* curr;
+    void* result;
+    ALLOCATION* allocation = NULL;
+
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        /* Codes_SRS_GBALLOC_01_041: [If gballoc was not initialized gballoc_realloc shall shall simply call realloc without any memory tracking being performed.] */
+        result = realloc(ptr, size);
+    }
+    /* Codes_SRS_GBALLOC_01_032: [gballoc_realloc shall ensure thread safety by using the lock created by gballoc_Init.] */
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_01_047: [If acquiring the lock fails, gballoc_realloc shall return NULL.] */
+        LogError("Failed to get the Lock.");
+        result = NULL;
+    }
+    else
+    {
+        if (ptr == NULL)
+        {
+            /* Codes_SRS_GBALLOC_01_017: [When ptr is NULL, gballoc_realloc shall call the underlying realloc with ptr being NULL and the realloc result shall be tracked by gballoc.] */
+            allocation = (ALLOCATION*)malloc(sizeof(ALLOCATION));
+        }
+        else
+        {
+            curr = head;
+            while (curr != NULL)
+            {
+                if (curr->ptr == ptr)
+                {
+                    allocation = curr;
+                    break;
+                }
+                else
+                {
+                    curr = (ALLOCATION*)curr->next;
+                }
+            }
+        }
+
+        if (allocation == NULL)
+        {
+            /* Codes_SRS_GBALLOC_01_015: [When allocating memory used for tracking by gballoc_realloc fails, gballoc_realloc shall return NULL and no change should be made to the counted total memory usage.] */
+            /* Codes_SRS_GBALLOC_01_016: [When the ptr pointer cannot be found in the pointers tracked by gballoc, gballoc_realloc shall return NULL and the underlying realloc shall not be called.] */
+            result = NULL;
+        }
+        else
+        {
+            result = realloc(ptr, size);
+            if (result == NULL)
+            {
+                /* Codes_SRS_GBALLOC_01_014: [When the underlying realloc call fails, gballoc_realloc shall return NULL and no change should be made to the counted total memory usage.] */
+                if (ptr == NULL)
+                {
+                    free(allocation);
+                }
+            }
+            else
+            {
+                if (ptr != NULL)
+                {
+                    /* Codes_SRS_GBALLOC_01_006: [If the underlying realloc call is successful, gballoc_realloc shall look up the size associated with the pointer ptr and decrease the total memory used with that size.] */
+                    allocation->ptr = result;
+                    totalSize -= allocation->size;
+                    allocation->size = size;
+                }
+                else
+                {
+                    /* add block */
+                    allocation->ptr = result;
+                    allocation->size = size;
+                    allocation->next = head;
+                    head = allocation;
+                }
+
+                /* Codes_SRS_GBALLOC_01_007: [If realloc is successful, gballoc_realloc shall also increment the total memory used value tracked by this module.] */
+                totalSize += size;
+                g_allocations++;
+
+                /* Codes_SRS_GBALLOC_01_011: [The maximum total memory used shall be the maximum of the total memory used at any point.] */
+                if (maxSize < totalSize)
+                {
+                    maxSize = totalSize;
+                }
+            }
+        }
+
+        (void)Unlock(gballocThreadSafeLock);
+    }
+
+    return result;
+}
+
+void gballoc_free(void* ptr)
+{
+    ALLOCATION* curr = head;
+    ALLOCATION* prev = NULL;
+
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        /* Codes_SRS_GBALLOC_01_042: [If gballoc was not initialized gballoc_free shall shall simply call free.] */
+        free(ptr);
+    }
+    /* Codes_SRS_GBALLOC_01_033: [gballoc_free shall ensure thread safety by using the lock created by gballoc_Init.] */
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_01_049: [If acquiring the lock fails, gballoc_free shall do nothing.] */
+        LogError("Failed to get the Lock.");
+    }
+    else
+    {
+        /* Codes_SRS_GBALLOC_01_009: [gballoc_free shall also look up the size associated with the ptr pointer and decrease the total memory used with the associated size amount.] */
+        while (curr != NULL)
+        {
+            if (curr->ptr == ptr)
+            {
+                /* Codes_SRS_GBALLOC_01_008: [gballoc_free shall call the C99 free function.] */
+                free(ptr);
+                totalSize -= curr->size;
+                if (prev != NULL)
+                {
+                    prev->next = curr->next;
+                }
+                else
+                {
+                    head = (ALLOCATION*)curr->next;
+                }
+
+                free(curr);
+                break;
+            }
+
+            prev = curr;
+            curr = (ALLOCATION*)curr->next;
+        }
+
+        if ((curr == NULL) && (ptr != NULL))
+        {
+            /* Codes_SRS_GBALLOC_01_019: [When the ptr pointer cannot be found in the pointers tracked by gballoc, gballoc_free shall not free any memory.] */
+
+            /* could not find the allocation */
+            LogError("Could not free allocation for address %p (not found)", ptr);
+        }
+        (void)Unlock(gballocThreadSafeLock);
+    }
+}
+
+size_t gballoc_getMaximumMemoryUsed(void)
+{
+    size_t result;
+
+    /* Codes_SRS_GBALLOC_01_038: [If gballoc was not initialized gballoc_getMaximumMemoryUsed shall return MAX_INT_SIZE.] */
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        LogError("gballoc is not initialized.");
+        result = SIZE_MAX;
+    }
+    /* Codes_SRS_GBALLOC_01_034: [gballoc_getMaximumMemoryUsed shall ensure thread safety by using the lock created by gballoc_Init.]  */
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_01_050: [If the lock cannot be acquired, gballoc_getMaximumMemoryUsed shall return SIZE_MAX.]  */
+        LogError("Failed to get the Lock.");
+        result = SIZE_MAX;
+    }
+    else
+    {
+        /* Codes_SRS_GBALLOC_01_010: [gballoc_getMaximumMemoryUsed shall return the maximum amount of total memory used recorded since the module initialization.] */
+        result = maxSize;
+        (void)Unlock(gballocThreadSafeLock);
+    }
+
+    return result;
+}
+
+size_t gballoc_getCurrentMemoryUsed(void)
+{
+    size_t result;
+
+    /* Codes_SRS_GBALLOC_01_044: [If gballoc was not initialized gballoc_getCurrentMemoryUsed shall return SIZE_MAX.] */
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        LogError("gballoc is not initialized.");
+        result = SIZE_MAX;
+    }
+    /* Codes_SRS_GBALLOC_01_036: [gballoc_getCurrentMemoryUsed shall ensure thread safety by using the lock created by gballoc_Init.]*/
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_01_051: [If the lock cannot be acquired, gballoc_getCurrentMemoryUsed shall return SIZE_MAX.] */
+        LogError("Failed to get the Lock.");
+        result = SIZE_MAX;
+    }
+    else
+    {
+        /*Codes_SRS_GBALLOC_02_001: [gballoc_getCurrentMemoryUsed shall return the currently used memory size.] */
+        result = totalSize;
+        (void)Unlock(gballocThreadSafeLock);
+    }
+
+    return result;
+}
+
+size_t gballoc_getAllocationCount(void)
+{
+    size_t result;
+
+    /* Codes_SRS_GBALLOC_07_001: [ If gballoc was not initialized gballoc_getAllocationCount shall return 0. ] */
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        LogError("gballoc is not initialized.");
+        result = 0;
+    }
+    /* Codes_SRS_GBALLOC_07_002: [ gballoc_getAllocationCount shall ensure thread safety by using the lock created by gballoc_Init ] */
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_07_003: [ If the lock cannot be acquired, gballoc_getAllocationCount shall return 0. ] */
+        LogError("Failed to get the Lock.");
+        result = 0;
+    }
+    else
+    {
+        /* Codes_SRS_GBALLOC_07_004: [ gballoc_getAllocationCount shall return the currently number of allocations. ] */
+        result = g_allocations;
+        (void)Unlock(gballocThreadSafeLock);
+    }
+
+    return result;
+}
+
+void gballoc_resetMetrics()
+{
+    /* Codes_SRS_GBALLOC_07_005: [ If gballoc was not initialized gballoc_reset Metrics shall do nothing.] */
+    if (gballocState != GBALLOC_STATE_INIT)
+    {
+        LogError("gballoc is not initialized.");
+    }
+    /* Codes_SRS_GBALLOC_07_006: [ gballoc_resetMetrics shall ensure thread safety by using the lock created by gballoc_Init ]*/
+    else if (LOCK_OK != Lock(gballocThreadSafeLock))
+    {
+        /* Codes_SRS_GBALLOC_07_007: [ If the lock cannot be acquired, gballoc_reset Metrics shall do nothing.] */
+        LogError("Failed to get the Lock.");
+    }
+    else
+    {
+        /* Codes_SRS_GBALLOC_07_008: [ gballoc_resetMetrics shall reset the total allocation size, max allocation size and number of allocation to zero. ] */
+        totalSize = 0;
+        maxSize = 0;
+        g_allocations = 0;
+        (void)Unlock(gballocThreadSafeLock);
+    }
+}
+
+#endif // GB_USE_CUSTOM_HEAP
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/hmac.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/hmac.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/hmac.c	(revision 389)
@@ -0,0 +1,233 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/**************************** hmac.c ****************************/
+/******************** See RFC 4634 for details ******************/
+/*
+*  Description:
+*      This file implements the HMAC algorithm (Keyed-Hashing for
+*      Message Authentication, RFC2104), expressed in terms of the
+*      various SHA algorithms.
+*/
+
+#include "azure_c_shared_utility/sha.h"
+
+/*
+*  hmac
+*
+*  Description:
+*      This function will compute an HMAC message digest.
+*
+*  Parameters:
+*      whichSha: [in]
+*          One of SHA1, SHA224, SHA256, SHA384, SHA512
+*      key: [in]
+*          The secret shared key.
+*      key_len: [in]
+*          The length of the secret shared key.
+*      message_array: [in]
+*          An array of characters representing the message.
+*      length: [in]
+*          The length of the message in message_array
+*      digest: [out]
+*          Where the digest is returned.
+*          NOTE: The length of the digest is determined by
+*              the value of whichSha.
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int hmac(SHAversion whichSha, const unsigned char *text, int text_len,
+    const unsigned char *key, int key_len,
+    uint8_t digest[USHAMaxHashSize])
+{
+    HMACContext ctx;
+    return hmacReset(&ctx, whichSha, key, key_len) ||
+        hmacInput(&ctx, text, text_len) ||
+        hmacResult(&ctx, digest);
+}
+
+/*
+*  hmacReset
+*
+*  Description:
+*      This function will initialize the hmacContext in preparation
+*      for computing a new HMAC message digest.
+*
+*  Parameters:
+*      context: [in/out]
+*          The context to reset.
+*      whichSha: [in]
+*          One of SHA1, SHA224, SHA256, SHA384, SHA512
+*      key: [in]
+*          The secret shared key.
+*      key_len: [in]
+*          The length of the secret shared key.
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int hmacReset(HMACContext *ctx, enum SHAversion whichSha,
+    const unsigned char *key, int key_len)
+{
+    int i, blocksize, hashsize;
+
+    /* inner padding - key XORd with ipad */
+    unsigned char k_ipad[USHA_Max_Message_Block_Size];
+
+    /* temporary buffer when keylen > blocksize */
+    unsigned char tempkey[USHAMaxHashSize];
+
+    if (!ctx) return shaNull;
+
+    blocksize = ctx->blockSize = USHABlockSize(whichSha);
+    hashsize = ctx->hashSize = USHAHashSize(whichSha);
+
+    ctx->whichSha = whichSha;
+
+    /*
+    * If key is longer than the hash blocksize,
+    * reset it to key = HASH(key).
+    */
+    if (key_len > blocksize) {
+        USHAContext tctx;
+        int err = USHAReset(&tctx, whichSha) ||
+            USHAInput(&tctx, key, key_len) ||
+            USHAResult(&tctx, tempkey);
+        if (err != shaSuccess) return err;
+
+        key = tempkey;
+        key_len = hashsize;
+    }
+
+    /*
+    * The HMAC transform looks like:
+    *
+    * SHA(K XOR opad, SHA(K XOR ipad, text))
+    *
+    * where K is an n byte key.
+    * ipad is the byte 0x36 repeated blocksize times
+    * opad is the byte 0x5c repeated blocksize times
+    * and text is the data being protected.
+    */
+
+    /* store key into the pads, XOR'd with ipad and opad values */
+    for (i = 0; i < key_len; i++) {
+        k_ipad[i] = key[i] ^ 0x36;
+        ctx->k_opad[i] = key[i] ^ 0x5c;
+    }
+    /* remaining pad bytes are '\0' XOR'd with ipad and opad values */
+    for (; i < blocksize; i++) {
+        k_ipad[i] = 0x36;
+        ctx->k_opad[i] = 0x5c;
+    }
+
+    /* perform inner hash */
+    /* init context for 1st pass */
+    return USHAReset(&ctx->shaContext, whichSha) ||
+        /* and start with inner pad */
+        USHAInput(&ctx->shaContext, k_ipad, blocksize);
+}
+
+/*
+*  hmacInput
+*
+*  Description:
+*      This function accepts an array of octets as the next portion
+*      of the message.
+*
+*  Parameters:
+*      context: [in/out]
+*          The HMAC context to update
+*      message_array: [in]
+*          An array of characters representing the next portion of
+*          the message.
+*      length: [in]
+*          The length of the message in message_array
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int hmacInput(HMACContext *ctx, const unsigned char *text,
+    int text_len)
+{
+    if (!ctx) return shaNull;
+    /* then text of datagram */
+    return USHAInput(&ctx->shaContext, text, text_len);
+}
+
+/*
+* HMACFinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The HMAC context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*/
+int hmacFinalBits(HMACContext *ctx,
+    const uint8_t bits,
+    unsigned int bitcount)
+{
+    if (!ctx) return shaNull;
+    /* then final bits of datagram */
+    return USHAFinalBits(&ctx->shaContext, bits, bitcount);
+}
+
+/*
+* HMACResult
+*
+* Description:
+*   This function will return the N-byte message digest into the
+*   Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the Nth element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the HMAC hash.
+*   digest: [out]
+*     Where the digest is returned.
+*   NOTE 2: The length of the hash is determined by the value of
+*      whichSha that was passed to hmacReset().
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int hmacResult(HMACContext *ctx, uint8_t *digest)
+{
+    if (!ctx) return shaNull;
+
+    /* finish up 1st pass */
+    /* (Use digest here as a temporary buffer.) */
+    return USHAResult(&ctx->shaContext, digest) ||
+
+        /* perform outer SHA */
+        /* init context for 2nd pass */
+        USHAReset(&ctx->shaContext, (SHAversion)ctx->whichSha) ||
+
+        /* start with outer pad */
+        USHAInput(&ctx->shaContext, ctx->k_opad, ctx->blockSize) ||
+
+        /* then results of 1st hash */
+        USHAInput(&ctx->shaContext, digest, ctx->hashSize) ||
+
+        /* finish up 2nd pass */
+        USHAResult(&ctx->shaContext, digest);
+}
+
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/hmacsha256.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/hmacsha256.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/hmacsha256.c	(revision 389)
@@ -0,0 +1,35 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stddef.h>
+#include "azure_c_shared_utility/hmacsha256.h"
+#include "azure_c_shared_utility/hmac.h"
+#include "azure_c_shared_utility/buffer_.h"
+
+HMACSHA256_RESULT HMACSHA256_ComputeHash(const unsigned char* key, size_t keyLen, const unsigned char* payload, size_t payloadLen, BUFFER_HANDLE hash)
+{
+    HMACSHA256_RESULT result;
+
+    if (key == NULL ||
+        keyLen == 0 ||
+        payload == NULL ||
+        payloadLen == 0 ||
+        hash == NULL)
+    {
+        result = HMACSHA256_INVALID_ARG;
+    }
+    else
+    {
+        if ((BUFFER_enlarge(hash, 32) != 0) ||
+            (hmac(SHA256, payload, (int)payloadLen, key, (int)keyLen, BUFFER_u_char(hash) ) != 0))
+        {
+            result = HMACSHA256_ERROR;
+        }
+        else
+        {
+            result = HMACSHA256_OK;
+        }
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/http_proxy_io.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/http_proxy_io.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/http_proxy_io.c	(revision 389)
@@ -0,0 +1,967 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <limits.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/socketio.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/http_proxy_io.h"
+#include "azure_c_shared_utility/azure_base64.h"
+
+typedef enum HTTP_PROXY_IO_STATE_TAG
+{
+    HTTP_PROXY_IO_STATE_CLOSED,
+    HTTP_PROXY_IO_STATE_OPENING_UNDERLYING_IO,
+    HTTP_PROXY_IO_STATE_WAITING_FOR_CONNECT_RESPONSE,
+    HTTP_PROXY_IO_STATE_OPEN,
+    HTTP_PROXY_IO_STATE_CLOSING,
+    HTTP_PROXY_IO_STATE_ERROR
+} HTTP_PROXY_IO_STATE;
+
+typedef struct HTTP_PROXY_IO_INSTANCE_TAG
+{
+    HTTP_PROXY_IO_STATE http_proxy_io_state;
+    ON_BYTES_RECEIVED on_bytes_received;
+    void* on_bytes_received_context;
+    ON_IO_ERROR on_io_error;
+    void* on_io_error_context;
+    ON_IO_OPEN_COMPLETE on_io_open_complete;
+    void* on_io_open_complete_context;
+    ON_IO_CLOSE_COMPLETE on_io_close_complete;
+    void* on_io_close_complete_context;
+    char* hostname;
+    int port;
+    char* proxy_hostname;
+    int proxy_port;
+    char* username;
+    char* password;
+    XIO_HANDLE underlying_io;
+    unsigned char* receive_buffer;
+    size_t receive_buffer_size;
+} HTTP_PROXY_IO_INSTANCE;
+
+static CONCRETE_IO_HANDLE http_proxy_io_create(void* io_create_parameters)
+{
+    HTTP_PROXY_IO_INSTANCE* result;
+
+    if (io_create_parameters == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_002: [ If io_create_parameters is NULL, http_proxy_io_create shall fail and return NULL. ]*/
+        result = NULL;
+        LogError("NULL io_create_parameters.");
+    }
+    else
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_003: [ io_create_parameters shall be used as an HTTP_PROXY_IO_CONFIG*. ]*/
+        HTTP_PROXY_IO_CONFIG* http_proxy_io_config = (HTTP_PROXY_IO_CONFIG*)io_create_parameters;
+        if ((http_proxy_io_config->hostname == NULL) ||
+            (http_proxy_io_config->proxy_hostname == NULL))
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_004: [ If the hostname or proxy_hostname member is NULL, then http_proxy_io_create shall fail and return NULL. ]*/
+            result = NULL;
+            LogError("Bad arguments: hostname = %p, proxy_hostname = %p",
+                http_proxy_io_config->hostname, http_proxy_io_config->proxy_hostname);
+        }
+        /* Codes_SRS_HTTP_PROXY_IO_01_095: [ If one of the fields username and password is non-NULL, then the other has to be also non-NULL, otherwise http_proxy_io_create shall fail and return NULL. ]*/
+        else if (((http_proxy_io_config->username == NULL) && (http_proxy_io_config->password != NULL)) ||
+            ((http_proxy_io_config->username != NULL) && (http_proxy_io_config->password == NULL)))
+        {
+            result = NULL;
+            LogError("Bad arguments: username = %p, password = %p",
+                http_proxy_io_config->username, http_proxy_io_config->password);
+        }
+        else
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_001: [ http_proxy_io_create shall create a new instance of the HTTP proxy IO. ]*/
+            result = (HTTP_PROXY_IO_INSTANCE*)malloc(sizeof(HTTP_PROXY_IO_INSTANCE));
+            if (result == NULL)
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_051: [ If allocating memory for the new instance fails, http_proxy_io_create shall fail and return NULL. ]*/
+                LogError("Failed allocating HTTP proxy IO instance.");
+            }
+            else
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_005: [ http_proxy_io_create shall copy the hostname, port, username and password values for later use when the actual CONNECT is performed. ]*/
+                /* Codes_SRS_HTTP_PROXY_IO_01_006: [ hostname and proxy_hostname, username and password shall be copied by calling mallocAndStrcpy_s. ]*/
+                if (mallocAndStrcpy_s(&result->hostname, http_proxy_io_config->hostname) != 0)
+                {
+                    /* Codes_SRS_HTTP_PROXY_IO_01_007: [ If mallocAndStrcpy_s fails then http_proxy_io_create shall fail and return NULL. ]*/
+                    LogError("Failed to copy the hostname.");
+                    /* Codes_SRS_HTTP_PROXY_IO_01_008: [ When http_proxy_io_create fails, all allocated resources up to that point shall be freed. ]*/
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_HTTP_PROXY_IO_01_006: [ hostname and proxy_hostname, username and password shall be copied by calling mallocAndStrcpy_s. ]*/
+                    if (mallocAndStrcpy_s(&result->proxy_hostname, http_proxy_io_config->proxy_hostname) != 0)
+                    {
+                        /* Codes_SRS_HTTP_PROXY_IO_01_007: [ If mallocAndStrcpy_s fails then http_proxy_io_create shall fail and return NULL. ]*/
+                        LogError("Failed to copy the proxy_hostname.");
+                        /* Codes_SRS_HTTP_PROXY_IO_01_008: [ When http_proxy_io_create fails, all allocated resources up to that point shall be freed. ]*/
+                        free(result->hostname);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        result->username = NULL;
+                        result->password = NULL;
+
+                        /* Codes_SRS_HTTP_PROXY_IO_01_006: [ hostname and proxy_hostname, username and password shall be copied by calling mallocAndStrcpy_s. ]*/
+                        /* Codes_SRS_HTTP_PROXY_IO_01_094: [ username and password shall be optional. ]*/
+                        if ((http_proxy_io_config->username != NULL) && (mallocAndStrcpy_s(&result->username, http_proxy_io_config->username) != 0))
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_007: [ If mallocAndStrcpy_s fails then http_proxy_io_create shall fail and return NULL. ]*/
+                            LogError("Failed to copy the username.");
+                            /* Codes_SRS_HTTP_PROXY_IO_01_008: [ When http_proxy_io_create fails, all allocated resources up to that point shall be freed. ]*/
+                            free(result->proxy_hostname);
+                            free(result->hostname);
+                            free(result);
+                            result = NULL;
+                        }
+                        else
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_006: [ hostname and proxy_hostname, username and password shall be copied by calling mallocAndStrcpy_s. ]*/
+                            /* Codes_SRS_HTTP_PROXY_IO_01_094: [ username and password shall be optional. ]*/
+                            if ((http_proxy_io_config->password != NULL) && (mallocAndStrcpy_s(&result->password, http_proxy_io_config->password) != 0))
+                            {
+                                /* Codes_SRS_HTTP_PROXY_IO_01_007: [ If mallocAndStrcpy_s fails then http_proxy_io_create shall fail and return NULL. ]*/
+                                LogError("Failed to copy the passowrd.");
+                                /* Codes_SRS_HTTP_PROXY_IO_01_008: [ When http_proxy_io_create fails, all allocated resources up to that point shall be freed. ]*/
+                                free(result->username);
+                                free(result->proxy_hostname);
+                                free(result->hostname);
+                                free(result);
+                                result = NULL;
+                            }
+                            else
+                            {
+                                /* Codes_SRS_HTTP_PROXY_IO_01_010: [ - io_interface_description shall be set to the result of socketio_get_interface_description. ]*/
+                                const IO_INTERFACE_DESCRIPTION* underlying_io_interface = socketio_get_interface_description();
+                                if (underlying_io_interface == NULL)
+                                {
+                                    /* Codes_SRS_HTTP_PROXY_IO_01_050: [ If socketio_get_interface_description fails, http_proxy_io_create shall fail and return NULL. ]*/
+                                    LogError("Unable to get the socket IO interface description.");
+                                    /* Codes_SRS_HTTP_PROXY_IO_01_008: [ When http_proxy_io_create fails, all allocated resources up to that point shall be freed. ]*/
+                                    free(result->password);
+                                    free(result->username);
+                                    free(result->proxy_hostname);
+                                    free(result->hostname);
+                                    free(result);
+                                    result = NULL;
+                                }
+                                else
+                                {
+                                    SOCKETIO_CONFIG socket_io_config;
+
+                                    /* Codes_SRS_HTTP_PROXY_IO_01_011: [ - xio_create_parameters shall be set to a SOCKETIO_CONFIG* where hostname is set to the proxy_hostname member of io_create_parameters and port is set to the proxy_port member of io_create_parameters. ]*/
+                                    socket_io_config.hostname = http_proxy_io_config->proxy_hostname;
+                                    socket_io_config.port = http_proxy_io_config->proxy_port;
+                                    socket_io_config.accepted_socket = NULL;
+
+                                    /* Codes_SRS_HTTP_PROXY_IO_01_009: [ http_proxy_io_create shall create a new socket IO by calling xio_create with the arguments: ]*/
+                                    result->underlying_io = xio_create(underlying_io_interface, &socket_io_config);
+                                    if (result->underlying_io == NULL)
+                                    {
+                                        /* Codes_SRS_HTTP_PROXY_IO_01_012: [ If xio_create fails, http_proxy_io_create shall fail and return NULL. ]*/
+                                        LogError("Unable to create the underlying IO.");
+                                        /* Codes_SRS_HTTP_PROXY_IO_01_008: [ When http_proxy_io_create fails, all allocated resources up to that point shall be freed. ]*/
+                                        free(result->password);
+                                        free(result->username);
+                                        free(result->proxy_hostname);
+                                        free(result->hostname);
+                                        free(result);
+                                        result = NULL;
+                                    }
+                                    else
+                                    {
+                                        result->port = http_proxy_io_config->port;
+                                        result->proxy_port = http_proxy_io_config->proxy_port;
+                                        result->receive_buffer = NULL;
+                                        result->receive_buffer_size = 0;
+                                        result->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSED;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+static void http_proxy_io_destroy(CONCRETE_IO_HANDLE http_proxy_io)
+{
+    if (http_proxy_io == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_014: [ If http_proxy_io is NULL, http_proxy_io_destroy shall do nothing. ]*/
+        LogError("NULL http_proxy_io.");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_013: [ http_proxy_io_destroy shall free the HTTP proxy IO instance indicated by http_proxy_io. ]*/
+        if (http_proxy_io_instance->receive_buffer != NULL)
+        {
+            free(http_proxy_io_instance->receive_buffer);
+        }
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_016: [ http_proxy_io_destroy shall destroy the underlying IO created in http_proxy_io_create by calling xio_destroy. ]*/
+        xio_destroy(http_proxy_io_instance->underlying_io);
+        free(http_proxy_io_instance->hostname);
+        free(http_proxy_io_instance->proxy_hostname);
+        free(http_proxy_io_instance->username);
+        free(http_proxy_io_instance->password);
+        free(http_proxy_io_instance);
+    }
+}
+
+static void indicate_open_complete_error_and_close(HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance)
+{
+    http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSED;
+    (void)xio_close(http_proxy_io_instance->underlying_io, NULL, NULL);
+    http_proxy_io_instance->on_io_open_complete(http_proxy_io_instance->on_io_open_complete_context, IO_OPEN_ERROR);
+}
+
+// This callback usage needs to be either verified and commented or integrated into
+// the state machine.
+static void unchecked_on_send_complete(void* context, IO_SEND_RESULT send_result)
+{
+    (void)context;
+    (void)send_result;
+}
+
+static void on_underlying_io_open_complete(void* context, IO_OPEN_RESULT open_result)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_081: [ on_underlying_io_open_complete called with NULL context shall do nothing. ]*/
+        LogError("NULL context in on_underlying_io_open_complete");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)context;
+        switch (http_proxy_io_instance->http_proxy_io_state)
+        {
+        default:
+            LogError("on_underlying_io_open_complete called in an unexpected state.");
+            break;
+
+        case HTTP_PROXY_IO_STATE_CLOSING:
+        case HTTP_PROXY_IO_STATE_OPEN:
+            /* Codes_SRS_HTTP_PROXY_IO_01_077: [ When on_underlying_io_open_complete is called in after OPEN has completed, the on_io_error callback shall be triggered passing the on_io_error_context argument as context. ]*/
+            http_proxy_io_instance->on_io_error(http_proxy_io_instance->on_io_error_context);
+            break;
+
+        case HTTP_PROXY_IO_STATE_WAITING_FOR_CONNECT_RESPONSE:
+            /* Codes_SRS_HTTP_PROXY_IO_01_076: [ When on_underlying_io_open_complete is called while waiting for the CONNECT reply, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+            LogError("Open complete called again by underlying IO.");
+            indicate_open_complete_error_and_close(http_proxy_io_instance);
+            break;
+
+        case HTTP_PROXY_IO_STATE_OPENING_UNDERLYING_IO:
+            switch (open_result)
+            {
+            default:
+            case IO_OPEN_ERROR:
+                /* Codes_SRS_HTTP_PROXY_IO_01_078: [ When on_underlying_io_open_complete is called with IO_OPEN_ERROR, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                LogError("Underlying IO open failed");
+                indicate_open_complete_error_and_close(http_proxy_io_instance);
+                break;
+
+            case IO_OPEN_CANCELLED:
+                /* Codes_SRS_HTTP_PROXY_IO_01_079: [ When on_underlying_io_open_complete is called with IO_OPEN_CANCELLED, the on_open_complete callback shall be triggered with IO_OPEN_CANCELLED, passing also the on_open_complete_context argument as context. ]*/
+                LogError("Underlying IO open failed");
+                http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSED;
+                (void)xio_close(http_proxy_io_instance->underlying_io, NULL, NULL);
+                http_proxy_io_instance->on_io_open_complete(http_proxy_io_instance->on_io_open_complete_context, IO_OPEN_CANCELLED);
+                break;
+
+            case IO_OPEN_OK:
+            {
+                STRING_HANDLE encoded_auth_string;
+
+                /* Codes_SRS_HTTP_PROXY_IO_01_057: [ When on_underlying_io_open_complete is called, the http_proxy_io shall send the CONNECT request constructed per RFC 2817: ]*/
+                http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_WAITING_FOR_CONNECT_RESPONSE;
+
+                if (http_proxy_io_instance->username != NULL)
+                {
+                    char* plain_auth_string_bytes;
+
+                    /* Codes_SRS_HTTP_PROXY_IO_01_060: [ - The value of Proxy-Authorization shall be the constructed according to RFC 2617. ]*/
+                    int plain_auth_string_length = (int)(strlen(http_proxy_io_instance->username)+1);
+                    if (http_proxy_io_instance->password != NULL)
+                    {
+                        plain_auth_string_length += (int)strlen(http_proxy_io_instance->password);
+                    }
+
+                    if (plain_auth_string_length < 0)
+                    {
+                        /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                        encoded_auth_string = NULL;
+                        indicate_open_complete_error_and_close(http_proxy_io_instance);
+                    }
+                    else
+                    {
+                        plain_auth_string_bytes = (char*)malloc(plain_auth_string_length + 1);
+                        if (plain_auth_string_bytes == NULL)
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                            encoded_auth_string = NULL;
+                            indicate_open_complete_error_and_close(http_proxy_io_instance);
+                        }
+                        else
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_091: [ To receive authorization, the client sends the userid and password, separated by a single colon (":") character, within a base64 [7] encoded string in the credentials. ]*/
+                            /* Codes_SRS_HTTP_PROXY_IO_01_092: [ A client MAY preemptively send the corresponding Authorization header with requests for resources in that space without receipt of another challenge from the server. ]*/
+                            /* Codes_SRS_HTTP_PROXY_IO_01_093: [ Userids might be case sensitive. ]*/
+                            if (sprintf(plain_auth_string_bytes, "%s:%s", http_proxy_io_instance->username, (http_proxy_io_instance->password == NULL) ? "" : http_proxy_io_instance->password) < 0)
+                            {
+                                /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                                encoded_auth_string = NULL;
+                                indicate_open_complete_error_and_close(http_proxy_io_instance);
+                            }
+                            else
+                            {
+                                /* Codes_SRS_HTTP_PROXY_IO_01_061: [ Encoding to Base64 shall be done by calling Base64_Encode_Bytes. ]*/
+                                encoded_auth_string = Azure_Base64_Encode_Bytes((const unsigned char*)plain_auth_string_bytes, plain_auth_string_length);
+                                if (encoded_auth_string == NULL)
+                                {
+                                    /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                                    LogError("Cannot Base64 encode auth string");
+                                    indicate_open_complete_error_and_close(http_proxy_io_instance);
+                                }
+                            }
+
+                            free(plain_auth_string_bytes);
+                        }
+                    }
+                }
+                else
+                {
+                    encoded_auth_string = NULL;
+                }
+
+                if ((http_proxy_io_instance->username != NULL) &&
+                    (encoded_auth_string == NULL))
+                {
+                    LogError("Cannot create authorization header");
+                }
+                else
+                {
+                    int connect_request_length;
+                    const char* auth_string_payload;
+                    /* Codes_SRS_HTTP_PROXY_IO_01_075: [ The Request-URI portion of the Request-Line is always an 'authority' as defined by URI Generic Syntax [2], which is to say the host name and port number destination of the requested connection separated by a colon: ]*/
+                    const char request_format[] = "CONNECT %s:%d HTTP/1.1\r\nHost:%s:%d%s%s\r\n\r\n";
+                    const char proxy_basic[] = "\r\nProxy-authorization: Basic ";
+                    if (http_proxy_io_instance->username != NULL)
+                    {
+                        auth_string_payload = STRING_c_str(encoded_auth_string);
+                    }
+                    else
+                    {
+                        auth_string_payload = "";
+                    }
+
+                    /* Codes_SRS_HTTP_PROXY_IO_01_059: [ - If username and password have been specified in the arguments passed to http_proxy_io_create, then the header Proxy-Authorization shall be added to the request. ]*/
+
+                    connect_request_length = (int)(strlen(request_format)+(strlen(http_proxy_io_instance->hostname)*2)+strlen(auth_string_payload)+10);
+                    if (http_proxy_io_instance->username != NULL)
+                    {
+                        connect_request_length += (int)strlen(proxy_basic);
+                    }
+
+                    if (connect_request_length < 0)
+                    {
+                        /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                        LogError("Cannot encode the CONNECT request");
+                        indicate_open_complete_error_and_close(http_proxy_io_instance);
+                    }
+                    else
+                    {
+                        char* connect_request = (char*)malloc(connect_request_length + 1);
+                        if (connect_request == NULL)
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                            LogError("Cannot allocate memory for CONNECT request");
+                            indicate_open_complete_error_and_close(http_proxy_io_instance);
+                        }
+                        else
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_059: [ - If username and password have been specified in the arguments passed to http_proxy_io_create, then the header Proxy-Authorization shall be added to the request. ]*/
+                            connect_request_length = sprintf(connect_request, request_format,
+                                http_proxy_io_instance->hostname,
+                                http_proxy_io_instance->port,
+                                http_proxy_io_instance->hostname,
+                                http_proxy_io_instance->port,
+                                (http_proxy_io_instance->username != NULL) ? proxy_basic : "",
+                                auth_string_payload);
+
+                            if (connect_request_length < 0)
+                            {
+                                /* Codes_SRS_HTTP_PROXY_IO_01_062: [ If any failure is encountered while constructing the request, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                                LogError("Cannot encode the CONNECT request");
+                                indicate_open_complete_error_and_close(http_proxy_io_instance);
+                            }
+                            else
+                            {
+                                /* Codes_SRS_HTTP_PROXY_IO_01_063: [ The request shall be sent by calling xio_send and passing NULL as on_send_complete callback. ]*/
+                                if (xio_send(http_proxy_io_instance->underlying_io, connect_request, connect_request_length, unchecked_on_send_complete, NULL) != 0)
+                                {
+                                    /* Codes_SRS_HTTP_PROXY_IO_01_064: [ If xio_send fails, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                                    LogError("Could not send CONNECT request");
+                                    indicate_open_complete_error_and_close(http_proxy_io_instance);
+                                }
+                            }
+
+                            free(connect_request);
+                        }
+                    }
+                }
+
+                if (encoded_auth_string != NULL)
+                {
+                    STRING_delete(encoded_auth_string);
+                }
+
+                break;
+            }
+            }
+
+            break;
+        }
+    }
+}
+
+static void on_underlying_io_error(void* context)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_088: [ on_underlying_io_error called with NULL context shall do nothing. ]*/
+        LogError("NULL context in on_underlying_io_error");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)context;
+
+        switch (http_proxy_io_instance->http_proxy_io_state)
+        {
+        default:
+            LogError("on_underlying_io_error in invalid state");
+            break;
+
+        case HTTP_PROXY_IO_STATE_OPENING_UNDERLYING_IO:
+        case HTTP_PROXY_IO_STATE_WAITING_FOR_CONNECT_RESPONSE:
+            /* Codes_SRS_HTTP_PROXY_IO_01_087: [ If the on_underlying_io_error callback is called while OPENING, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+            indicate_open_complete_error_and_close(http_proxy_io_instance);
+            break;
+
+        case HTTP_PROXY_IO_STATE_OPEN:
+            /* Codes_SRS_HTTP_PROXY_IO_01_089: [ If the on_underlying_io_error callback is called while the IO is OPEN, the on_io_error callback shall be called with the on_io_error_context argument as context. ]*/
+            http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_ERROR;
+            http_proxy_io_instance->on_io_error(http_proxy_io_instance->on_io_error_context);
+            break;
+        }
+    }
+}
+
+static void on_underlying_io_close_complete(void* context)
+{
+    if (context == NULL)
+    {
+        /* Cdoes_SRS_HTTP_PROXY_IO_01_084: [ on_underlying_io_close_complete called with NULL context shall do nothing. ]*/
+        LogError("NULL context in on_underlying_io_open_complete");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)context;
+
+        switch (http_proxy_io_instance->http_proxy_io_state)
+        {
+        default:
+            LogError("on_underlying_io_close_complete called in an invalid state");
+            break;
+
+        case HTTP_PROXY_IO_STATE_CLOSING:
+            http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSED;
+
+            /* Codes_SRS_HTTP_PROXY_IO_01_086: [ If the on_io_close_complete callback passed to http_proxy_io_close was NULL, no callback shall be triggered. ]*/
+            if (http_proxy_io_instance->on_io_close_complete != NULL)
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_083: [ on_underlying_io_close_complete while CLOSING shall call the on_io_close_complete callback, passing to it the on_io_close_complete_context as context argument. ]*/
+                http_proxy_io_instance->on_io_close_complete(http_proxy_io_instance->on_io_close_complete_context);
+            }
+
+            break;
+        }
+    }
+}
+
+/*the following function does the same as sscanf(pos2, "%d", &sec)*/
+/*this function only exists because some of platforms do not have sscanf. */
+static int ParseStringToDecimal(const char *src, int* dst)
+{
+    int result;
+    char* next;
+
+    (*dst) = (int)strtol(src, &next, 0);
+    if ((src == next) || ((((*dst) == INT_MAX) || ((*dst) == INT_MIN)) && (errno != 0)))
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        result = 0;
+    }
+
+    return result;
+}
+
+/*the following function does the same as sscanf(buf, "HTTP/%*d.%*d %d %*[^\r\n]", &ret) */
+/*this function only exists because some of platforms do not have sscanf. This is not a full implementation; it only works with well-defined HTTP response. */
+static int ParseHttpResponse(const char* src, int* dst)
+{
+    int result;
+    static const char HTTPPrefix[] = "HTTP/";
+    bool fail;
+    const char* runPrefix;
+
+    if ((src == NULL) || (dst == NULL))
+    {
+        result = __LINE__;
+    }
+    else
+    {
+        fail = false;
+        runPrefix = HTTPPrefix;
+
+        while ((*runPrefix) != '\0')
+        {
+            if ((*runPrefix) != (*src))
+            {
+                fail = true;
+                break;
+            }
+            src++;
+            runPrefix++;
+        }
+
+        if (!fail)
+        {
+            while ((*src) != '.')
+            {
+                if ((*src) == '\0')
+                {
+                    fail = true;
+                    break;
+                }
+                src++;
+            }
+        }
+
+        if (!fail)
+        {
+            while ((*src) != ' ')
+            {
+                if ((*src) == '\0')
+                {
+                    fail = true;
+                    break;
+                }
+                src++;
+            }
+        }
+
+        if (fail)
+        {
+            result = __LINE__;
+        }
+        else
+        {
+            if (ParseStringToDecimal(src, dst) != 0)
+            {
+                result = __LINE__;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void on_underlying_io_bytes_received(void* context, const unsigned char* buffer, size_t size)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_082: [ on_underlying_io_bytes_received called with NULL context shall do nothing. ]*/
+        LogError("NULL context in on_underlying_io_bytes_received");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)context;
+
+        switch (http_proxy_io_instance->http_proxy_io_state)
+        {
+        default:
+        case HTTP_PROXY_IO_STATE_CLOSING:
+            LogError("Bytes received in invalid state");
+            break;
+
+        case HTTP_PROXY_IO_STATE_OPENING_UNDERLYING_IO:
+            /* Codes_SRS_HTTP_PROXY_IO_01_080: [ If on_underlying_io_bytes_received is called while the underlying IO is being opened, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+            LogError("Bytes received while opening underlying IO");
+            indicate_open_complete_error_and_close(http_proxy_io_instance);
+            break;
+
+        case HTTP_PROXY_IO_STATE_WAITING_FOR_CONNECT_RESPONSE:
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_065: [ When bytes are received and the response to the CONNECT request was not yet received, the bytes shall be accumulated until a double new-line is detected. ]*/
+            unsigned char* new_receive_buffer = (unsigned char*)realloc(http_proxy_io_instance->receive_buffer, http_proxy_io_instance->receive_buffer_size + size + 1);
+            if (new_receive_buffer == NULL)
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_067: [ If allocating memory for the buffered bytes fails, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                LogError("Cannot allocate memory for received data");
+                indicate_open_complete_error_and_close(http_proxy_io_instance);
+            }
+            else
+            {
+                http_proxy_io_instance->receive_buffer = new_receive_buffer;
+                memcpy(http_proxy_io_instance->receive_buffer + http_proxy_io_instance->receive_buffer_size, buffer, size);
+                http_proxy_io_instance->receive_buffer_size += size;
+            }
+
+            if (http_proxy_io_instance->receive_buffer_size >= 4)
+            {
+                const char* request_end_ptr;
+
+                http_proxy_io_instance->receive_buffer[http_proxy_io_instance->receive_buffer_size] = 0;
+
+                /* Codes_SRS_HTTP_PROXY_IO_01_066: [ When a double new-line is detected the response shall be parsed in order to extract the status code. ]*/
+                if ((http_proxy_io_instance->receive_buffer_size >= 4) &&
+                    ((request_end_ptr = strstr((const char*)http_proxy_io_instance->receive_buffer, "\r\n\r\n")) != NULL))
+                {
+                    int status_code;
+
+                    /* This part should really be done with the HTTPAPI, but that has to be done as a separate step
+                    as the HTTPAPI has to expose somehow the underlying IO and currently this would be a too big of a change. */
+
+                    if (ParseHttpResponse((const char*)http_proxy_io_instance->receive_buffer, &status_code) != 0)
+                    {
+                        /* Codes_SRS_HTTP_PROXY_IO_01_068: [ If parsing the CONNECT response fails, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                        LogError("Cannot decode HTTP response");
+                        indicate_open_complete_error_and_close(http_proxy_io_instance);
+                    }
+                    /* Codes_SRS_HTTP_PROXY_IO_01_069: [ Any successful (2xx) response to a CONNECT request indicates that the proxy has established a connection to the requested host and port, and has switched to tunneling the current connection to that server connection. ]*/
+                    /* Codes_SRS_HTTP_PROXY_IO_01_090: [ Any successful (2xx) response to a CONNECT request indicates that the proxy has established a connection to the requested host and port, and has switched to tunneling the current connection to that server connection. ]*/
+                    else if ((status_code < 200) || (status_code > 299))
+                    {
+                        /* Codes_SRS_HTTP_PROXY_IO_01_071: [ If the status code is not successful, the on_open_complete callback shall be triggered with IO_OPEN_ERROR, passing also the on_open_complete_context argument as context. ]*/
+                        LogError("Bad status (%d) received in CONNECT response", status_code);
+                        indicate_open_complete_error_and_close(http_proxy_io_instance);
+                    }
+                    else
+                    {
+                        size_t length_remaining = http_proxy_io_instance->receive_buffer + http_proxy_io_instance->receive_buffer_size - ((const unsigned char *)request_end_ptr + 4);
+
+                        /* Codes_SRS_HTTP_PROXY_IO_01_073: [ Once a success status code was parsed, the IO shall be OPEN. ]*/
+                        http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_OPEN;
+                        /* Codes_SRS_HTTP_PROXY_IO_01_070: [ When a success status code is parsed, the on_open_complete callback shall be triggered with IO_OPEN_OK, passing also the on_open_complete_context argument as context. ]*/
+                        http_proxy_io_instance->on_io_open_complete(http_proxy_io_instance->on_io_open_complete_context, IO_OPEN_OK);
+
+                        if (length_remaining > 0)
+                        {
+                            /* Codes_SRS_HTTP_PROXY_IO_01_072: [ Any bytes that are extra (not consumed by the CONNECT response), shall be indicated as received by calling the on_bytes_received callback and passing the on_bytes_received_context as context argument. ]*/
+                            http_proxy_io_instance->on_bytes_received(http_proxy_io_instance->on_bytes_received_context, (const unsigned char*)request_end_ptr + 4, length_remaining);
+                        }
+                    }
+                }
+            }
+            break;
+        }
+        case HTTP_PROXY_IO_STATE_OPEN:
+            /* Codes_SRS_HTTP_PROXY_IO_01_074: [ If on_underlying_io_bytes_received is called while OPEN, all bytes shall be indicated as received by calling the on_bytes_received callback and passing the on_bytes_received_context as context argument. ]*/
+            http_proxy_io_instance->on_bytes_received(http_proxy_io_instance->on_bytes_received_context, buffer, size);
+            break;
+        }
+    }
+}
+
+static int http_proxy_io_open(CONCRETE_IO_HANDLE http_proxy_io, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context)
+{
+    int result;
+
+    /* Codes_SRS_HTTP_PROXY_IO_01_051: [ The arguments on_io_open_complete_context, on_bytes_received_context and on_io_error_context shall be allowed to be NULL. ]*/
+    /* Codes_SRS_HTTP_PROXY_IO_01_018: [ If any of the arguments http_proxy_io, on_io_open_complete, on_bytes_received or on_io_error are NULL then http_proxy_io_open shall return a non-zero value. ]*/
+    if ((http_proxy_io == NULL) ||
+        (on_io_open_complete == NULL) ||
+        (on_bytes_received == NULL) ||
+        (on_io_error == NULL))
+    {
+        LogError("Bad arguments: http_proxy_io = %p, on_io_open_complete = %p, on_bytes_received = %p, on_io_error_context = %p.",
+            http_proxy_io,
+            on_io_open_complete,
+            on_bytes_received,
+            on_io_error);
+        result = __LINE__;
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        if (http_proxy_io_instance->http_proxy_io_state != HTTP_PROXY_IO_STATE_CLOSED)
+        {
+            LogError("Invalid tlsio_state. Expected state is HTTP_PROXY_IO_STATE_CLOSED.");
+            result = __LINE__;
+        }
+        else
+        {
+            http_proxy_io_instance->on_bytes_received = on_bytes_received;
+            http_proxy_io_instance->on_bytes_received_context = on_bytes_received_context;
+
+            http_proxy_io_instance->on_io_error = on_io_error;
+            http_proxy_io_instance->on_io_error_context = on_io_error_context;
+
+            http_proxy_io_instance->on_io_open_complete = on_io_open_complete;
+            http_proxy_io_instance->on_io_open_complete_context = on_io_open_complete_context;
+
+            http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_OPENING_UNDERLYING_IO;
+
+            /* Codes_SRS_HTTP_PROXY_IO_01_019: [ http_proxy_io_open shall open the underlying IO by calling xio_open on the underlying IO handle created in http_proxy_io_create, while passing to it the callbacks on_underlying_io_open_complete, on_underlying_io_bytes_received and on_underlying_io_error. ]*/
+            if (xio_open(http_proxy_io_instance->underlying_io, on_underlying_io_open_complete, http_proxy_io_instance, on_underlying_io_bytes_received, http_proxy_io_instance, on_underlying_io_error, http_proxy_io_instance) != 0)
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_020: [ If xio_open fails, then http_proxy_io_open shall return a non-zero value. ]*/
+                http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSED;
+                LogError("Cannot open the underlying IO.");
+                result = __LINE__;
+            }
+            else
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_017: [ http_proxy_io_open shall open the HTTP proxy IO and on success it shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static int http_proxy_io_close(CONCRETE_IO_HANDLE http_proxy_io, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* on_io_close_complete_context)
+{
+    int result = 0;
+
+    /* Codes_SRS_HTTP_PROXY_IO_01_052: [ on_io_close_complete_context shall be allowed to be NULL. ]*/
+    /* Codes_SRS_HTTP_PROXY_IO_01_028: [ on_io_close_complete shall be allowed to be NULL. ]*/
+    if (http_proxy_io == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_023: [ If the argument http_proxy_io is NULL, http_proxy_io_close shall fail and return a non-zero value. ]*/
+        result = __LINE__;
+        LogError("NULL http_proxy_io.");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_027: [ If http_proxy_io_close is called when not open, http_proxy_io_close shall fail and return a non-zero value. ]*/
+        if ((http_proxy_io_instance->http_proxy_io_state == HTTP_PROXY_IO_STATE_CLOSED) ||
+            /* Codes_SRS_HTTP_PROXY_IO_01_054: [ http_proxy_io_close while OPENING shall fail and return a non-zero value. ]*/
+            (http_proxy_io_instance->http_proxy_io_state == HTTP_PROXY_IO_STATE_CLOSING))
+        {
+            result = __LINE__;
+            LogError("Invalid tlsio_state. Expected state is HTTP_PROXY_IO_STATE_OPEN.");
+        }
+        else if ((http_proxy_io_instance->http_proxy_io_state == HTTP_PROXY_IO_STATE_OPENING_UNDERLYING_IO) ||
+            (http_proxy_io_instance->http_proxy_io_state == HTTP_PROXY_IO_STATE_WAITING_FOR_CONNECT_RESPONSE))
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_053: [ http_proxy_io_close while OPENING shall trigger the on_io_open_complete callback with IO_OPEN_CANCELLED. ]*/
+            http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSED;
+            (void)xio_close(http_proxy_io_instance->underlying_io, NULL, NULL);
+            http_proxy_io_instance->on_io_open_complete(http_proxy_io_instance->on_io_open_complete_context, IO_OPEN_CANCELLED);
+
+            /* Codes_SRS_HTTP_PROXY_IO_01_022: [ http_proxy_io_close shall close the HTTP proxy IO and on success it shall return 0. ]*/
+            result = 0;
+        }
+        else
+        {
+            HTTP_PROXY_IO_STATE previous_state = http_proxy_io_instance->http_proxy_io_state;
+
+            http_proxy_io_instance->http_proxy_io_state = HTTP_PROXY_IO_STATE_CLOSING;
+
+            /* Codes_SRS_HTTP_PROXY_IO_01_026: [ The on_io_close_complete and on_io_close_complete_context arguments shall be saved for later use. ]*/
+            http_proxy_io_instance->on_io_close_complete = on_io_close_complete;
+            http_proxy_io_instance->on_io_close_complete_context = on_io_close_complete_context;
+
+            /* Codes_SRS_HTTP_PROXY_IO_01_024: [ http_proxy_io_close shall close the underlying IO by calling xio_close on the IO handle create in http_proxy_io_create, while passing to it the on_underlying_io_close_complete callback. ]*/
+            if (xio_close(http_proxy_io_instance->underlying_io, on_underlying_io_close_complete, http_proxy_io_instance) != 0)
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_025: [ If xio_close fails, http_proxy_io_close shall fail and return a non-zero value. ]*/
+                result = __LINE__;
+                http_proxy_io_instance->http_proxy_io_state = previous_state;
+                LogError("Cannot close underlying IO.");
+            }
+            else
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_022: [ http_proxy_io_close shall close the HTTP proxy IO and on success it shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static int http_proxy_io_send(CONCRETE_IO_HANDLE http_proxy_io, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* on_send_complete_context)
+{
+    int result;
+
+    /* Codes_SRS_HTTP_PROXY_IO_01_032: [ on_send_complete shall be allowed to be NULL. ]*/
+    /* Codes_SRS_HTTP_PROXY_IO_01_030: [ If any of the arguments http_proxy_io or buffer is NULL, http_proxy_io_send shall fail and return a non-zero value. ]*/
+    if ((http_proxy_io == NULL) ||
+        (buffer == NULL) ||
+        /* Codes_SRS_HTTP_PROXY_IO_01_031: [ If size is 0, http_proxy_io_send shall fail and return a non-zero value. ]*/
+        (size == 0))
+    {
+        result = __LINE__;
+        LogError("Bad arguments: http_proxy_io = %p, buffer = %p.",
+            http_proxy_io, buffer);
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_034: [ If http_proxy_io_send is called when the IO is not open, http_proxy_io_send shall fail and return a non-zero value. ]*/
+        /* Codes_SRS_HTTP_PROXY_IO_01_035: [ If the IO is in an error state (an error was reported through the on_io_error callback), http_proxy_io_send shall fail and return a non-zero value. ]*/
+        if (http_proxy_io_instance->http_proxy_io_state != HTTP_PROXY_IO_STATE_OPEN)
+        {
+            result = __LINE__;
+            LogError("Invalid HTTP proxy IO state. Expected state is HTTP_PROXY_IO_STATE_OPEN.");
+        }
+        else
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_033: [ http_proxy_io_send shall send the bytes by calling xio_send on the underlying IO created in http_proxy_io_create and passing buffer and size as arguments. ]*/
+            if (xio_send(http_proxy_io_instance->underlying_io, buffer, size, on_send_complete, on_send_complete_context) != 0)
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_055: [ If xio_send fails, http_proxy_io_send shall fail and return a non-zero value. ]*/
+                result = __LINE__;
+                LogError("Underlying xio_send failed.");
+            }
+            else
+            {
+                /* Codes_SRS_HTTP_PROXY_IO_01_029: [ http_proxy_io_send shall send the size bytes pointed to by buffer and on success it shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void http_proxy_io_dowork(CONCRETE_IO_HANDLE http_proxy_io)
+{
+    if (http_proxy_io == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_038: [ If the http_proxy_io argument is NULL, http_proxy_io_dowork shall do nothing. ]*/
+        LogError("NULL http_proxy_io.");
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        if (http_proxy_io_instance->http_proxy_io_state != HTTP_PROXY_IO_STATE_CLOSED)
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_037: [ http_proxy_io_dowork shall call xio_dowork on the underlying IO created in http_proxy_io_create. ]*/
+            xio_dowork(http_proxy_io_instance->underlying_io);
+        }
+    }
+}
+
+static int http_proxy_io_set_option(CONCRETE_IO_HANDLE http_proxy_io, const char* option_name, const void* value)
+{
+    int result;
+
+    if ((http_proxy_io == NULL) || (option_name == NULL))
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_040: [ If any of the arguments http_proxy_io or option_name is NULL, http_proxy_io_set_option shall return a non-zero value. ]*/
+        LogError("Bad arguments: http_proxy_io = %p, option_name = %p",
+            http_proxy_io, option_name);
+        result = __LINE__;
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_045: [ None. ]*/
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_043: [ If the option_name argument indicates an option that is not handled by http_proxy_io_set_option, then xio_setoption shall be called on the underlying IO created in http_proxy_io_create, passing the option name and value to it. ]*/
+        /* Codes_SRS_HTTP_PROXY_IO_01_056: [ The value argument shall be allowed to be NULL. ]*/
+        if (xio_setoption(http_proxy_io_instance->underlying_io, option_name, value) != 0)
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_044: [ if xio_setoption fails, http_proxy_io_set_option shall return a non-zero value. ]*/
+            LogError("Unrecognized option");
+            result = __LINE__;
+        }
+        else
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_042: [ If the option was handled by http_proxy_io_set_option or the underlying IO, then http_proxy_io_set_option shall return 0. ]*/
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+static OPTIONHANDLER_HANDLE http_proxy_io_retrieve_options(CONCRETE_IO_HANDLE http_proxy_io)
+{
+    OPTIONHANDLER_HANDLE result;
+
+    if (http_proxy_io == NULL)
+    {
+        /* Codes_SRS_HTTP_PROXY_IO_01_047: [ If the parameter http_proxy_io is NULL then http_proxy_io_retrieve_options shall fail and return NULL. ]*/
+        LogError("invalid parameter detected: CONCRETE_IO_HANDLE handle=%p", http_proxy_io);
+        result = NULL;
+    }
+    else
+    {
+        HTTP_PROXY_IO_INSTANCE* http_proxy_io_instance = (HTTP_PROXY_IO_INSTANCE*)http_proxy_io;
+
+        /* Codes_SRS_HTTP_PROXY_IO_01_046: [ http_proxy_io_retrieve_options shall return an OPTIONHANDLER_HANDLE obtained by calling xio_retrieveoptions on the underlying IO created in http_proxy_io_create. ]*/
+        result = xio_retrieveoptions(http_proxy_io_instance->underlying_io);
+        if (result == NULL)
+        {
+            /* Codes_SRS_HTTP_PROXY_IO_01_048: [ If xio_retrieveoptions fails, http_proxy_io_retrieve_options shall return NULL. ]*/
+            LogError("unable to create option handler");
+        }
+    }
+    return result;
+}
+
+static const IO_INTERFACE_DESCRIPTION http_proxy_io_interface_description =
+{
+    http_proxy_io_retrieve_options,
+    http_proxy_io_create,
+    http_proxy_io_destroy,
+    http_proxy_io_open,
+    http_proxy_io_close,
+    http_proxy_io_send,
+    http_proxy_io_dowork,
+    http_proxy_io_set_option
+};
+
+const IO_INTERFACE_DESCRIPTION* http_proxy_io_get_interface_description(void)
+{
+    /* Codes_SRS_HTTP_PROXY_IO_01_049: [ http_proxy_io_get_interface_description shall return a pointer to an IO_INTERFACE_DESCRIPTION structure that contains pointers to the functions: http_proxy_io_retrieve_options, http_proxy_io_retrieve_create, http_proxy_io_destroy, http_proxy_io_open, http_proxy_io_close, http_proxy_io_send and http_proxy_io_dowork. ]*/
+    return &http_proxy_io_interface_description;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/httpapiex.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/httpapiex.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/httpapiex.c	(revision 389)
@@ -0,0 +1,657 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/httpapiex.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/vector.h"
+
+typedef struct HTTPAPIEX_SAVED_OPTION_TAG
+{
+    const char* optionName;
+    const void* value;
+}HTTPAPIEX_SAVED_OPTION;
+
+typedef struct HTTPAPIEX_HANDLE_DATA_TAG
+{
+    STRING_HANDLE hostName;
+    int k;
+    HTTP_HANDLE httpHandle;
+    VECTOR_HANDLE savedOptions;
+}HTTPAPIEX_HANDLE_DATA;
+
+MU_DEFINE_ENUM_STRINGS(HTTPAPIEX_RESULT, HTTPAPIEX_RESULT_VALUES);
+
+#define LOG_HTTAPIEX_ERROR() LogError("error code = %s", MU_ENUM_TO_STRING(HTTPAPIEX_RESULT, result))
+
+HTTPAPIEX_HANDLE HTTPAPIEX_Create(const char* hostName)
+{
+    HTTPAPIEX_HANDLE result;
+    /*Codes_SRS_HTTPAPIEX_02_001: [If parameter hostName is NULL then HTTPAPIEX_Create shall return NULL.]*/
+    if (hostName == NULL)
+    {
+        LogError("invalid (NULL) parameter");
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPIEX_02_005: [If creating the handle fails for any reason, then HTTAPIEX_Create shall return NULL.] */
+        HTTPAPIEX_HANDLE_DATA* handleData = (HTTPAPIEX_HANDLE_DATA*)malloc(sizeof(HTTPAPIEX_HANDLE_DATA));
+        if (handleData == NULL)
+        {
+            LogError("malloc failed.");
+            result = NULL;
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPIEX_02_002: [Parameter hostName shall be saved.]*/
+            handleData->hostName = STRING_construct(hostName);
+            if (handleData->hostName == NULL)
+            {
+                free(handleData);
+                LogError("unable to STRING_construct");
+                result = NULL;
+            }
+            else
+            {
+                /*Codes_SRS_HTTPAPIEX_02_004: [Otherwise, HTTPAPIEX_Create shall return a HTTAPIEX_HANDLE suitable for further calls to the module.] */
+                handleData->savedOptions = VECTOR_create(sizeof(HTTPAPIEX_SAVED_OPTION));
+                if (handleData->savedOptions == NULL)
+                {
+                    STRING_delete(handleData->hostName);
+                    free(handleData);
+                    result = NULL;
+                }
+                else
+                {
+                    handleData->k = -1;
+                    handleData->httpHandle = NULL;
+                    result = handleData;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+/*this function builds the default request http headers if none are specified*/
+/*returns 0 if no error*/
+/*any other code is error*/
+static int buildRequestHttpHeadersHandle(HTTPAPIEX_HANDLE_DATA *handleData, BUFFER_HANDLE requestContent, HTTP_HEADERS_HANDLE originalRequestHttpHeadersHandle, bool* isOriginalRequestHttpHeadersHandle, HTTP_HEADERS_HANDLE* toBeUsedRequestHttpHeadersHandle)
+{
+    int result;
+
+
+    if (originalRequestHttpHeadersHandle != NULL)
+    {
+        *toBeUsedRequestHttpHeadersHandle = originalRequestHttpHeadersHandle;
+        *isOriginalRequestHttpHeadersHandle = true;
+
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPIEX_02_009: [If parameter requestHttpHeadersHandle is NULL then HTTPAPIEX_ExecuteRequest shall allocate a temporary internal instance of HTTPHEADERS, shall add to that instance the following headers
+        Host:{hostname} - as it was indicated by the call to HTTPAPIEX_Create API call
+        Content-Length:the size of the requestContent parameter, and use this instance to all the subsequent calls to HTTPAPI_ExecuteRequest as parameter httpHeadersHandle.]
+        */
+        *isOriginalRequestHttpHeadersHandle = false;
+        *toBeUsedRequestHttpHeadersHandle = HTTPHeaders_Alloc();
+    }
+
+    if (*toBeUsedRequestHttpHeadersHandle == NULL)
+    {
+        result = MU_FAILURE;
+        LogError("unable to HTTPHeaders_Alloc");
+    }
+    else
+    {
+        char temp[22] = { 0 };
+        (void)size_tToString(temp, 22, BUFFER_length(requestContent)); /*cannot fail, MAX_uint64 has 19 digits*/
+        /*Codes_SRS_HTTPAPIEX_02_011: [If parameter requestHttpHeadersHandle is not NULL then HTTPAPIEX_ExecuteRequest shall create or update the following headers of the request:
+        Host:{hostname}
+        Content-Length:the size of the requestContent parameter, and shall use the so constructed HTTPHEADERS object to all calls to HTTPAPI_ExecuteRequest as parameter httpHeadersHandle.]
+        */
+        /*Codes_SRS_HTTPAPIEX_02_009: [If parameter requestHttpHeadersHandle is NULL then HTTPAPIEX_ExecuteRequest shall allocate a temporary internal instance of HTTPHEADERS, shall add to that instance the following headers
+        Host:{hostname} - as it was indicated by the call to HTTPAPIEX_Create API call
+        Content-Length:the size of the requestContent parameter, and use this instance to all the subsequent calls to HTTPAPI_ExecuteRequest as parameter httpHeadersHandle.]
+        */
+        if (!(
+            (HTTPHeaders_ReplaceHeaderNameValuePair(*toBeUsedRequestHttpHeadersHandle, "Host", STRING_c_str(handleData->hostName)) == HTTP_HEADERS_OK) &&
+            (HTTPHeaders_ReplaceHeaderNameValuePair(*toBeUsedRequestHttpHeadersHandle, "Content-Length", temp) == HTTP_HEADERS_OK)
+            ))
+        {
+            if (! *isOriginalRequestHttpHeadersHandle)
+            { 
+                HTTPHeaders_Free(*toBeUsedRequestHttpHeadersHandle);
+            }
+            *toBeUsedRequestHttpHeadersHandle = NULL;
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
+    return result;
+}
+
+static int buildResponseHttpHeadersHandle(HTTP_HEADERS_HANDLE originalResponsetHttpHeadersHandle, bool* isOriginalResponseHttpHeadersHandle, HTTP_HEADERS_HANDLE* toBeUsedResponsetHttpHeadersHandle)
+{
+    int result;
+    if (originalResponsetHttpHeadersHandle == NULL)
+    {
+        if ((*toBeUsedResponsetHttpHeadersHandle = HTTPHeaders_Alloc()) == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            *isOriginalResponseHttpHeadersHandle = false;
+            result = 0;
+        }
+    }
+    else
+    {
+        *isOriginalResponseHttpHeadersHandle = true;
+        *toBeUsedResponsetHttpHeadersHandle = originalResponsetHttpHeadersHandle;
+        result = 0;
+    }
+    return result;
+}
+
+
+static int buildBufferIfNotExist(BUFFER_HANDLE originalRequestContent, bool* isOriginalRequestContent, BUFFER_HANDLE* toBeUsedRequestContent)
+{
+    int result;
+    if (originalRequestContent == NULL)
+    {
+        *toBeUsedRequestContent = BUFFER_new();
+        if (*toBeUsedRequestContent == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            *isOriginalRequestContent = false;
+            result = 0;
+        }
+    }
+    else
+    {
+        *isOriginalRequestContent = true;
+        *toBeUsedRequestContent = originalRequestContent;
+        result = 0;
+    }
+    return result;
+}
+
+static unsigned int dummyStatusCode;
+
+static int buildAllRequests(HTTPAPIEX_HANDLE_DATA* handle, HTTPAPI_REQUEST_TYPE requestType, const char* relativePath,
+    HTTP_HEADERS_HANDLE requestHttpHeadersHandle, BUFFER_HANDLE requestContent, unsigned int* statusCode,
+    HTTP_HEADERS_HANDLE responseHttpHeadersHandle, BUFFER_HANDLE responseContent,
+
+    const char** toBeUsedRelativePath, 
+    HTTP_HEADERS_HANDLE *toBeUsedRequestHttpHeadersHandle, bool *isOriginalRequestHttpHeadersHandle,
+    BUFFER_HANDLE *toBeUsedRequestContent, bool *isOriginalRequestContent,
+    unsigned int** toBeUsedStatusCode,
+    HTTP_HEADERS_HANDLE *toBeUsedResponseHttpHeadersHandle, bool *isOriginalResponseHttpHeadersHandle,
+    BUFFER_HANDLE *toBeUsedResponseContent, bool *isOriginalResponseContent)
+{
+    int result;
+    (void)requestType;
+    /*Codes_SRS_HTTPAPIEX_02_013: [If requestContent is NULL then HTTPAPIEX_ExecuteRequest shall behave as if a buffer of zero size would have been used, that is, it shall call HTTPAPI_ExecuteRequest with parameter content = NULL and contentLength = 0.]*/
+    /*Codes_SRS_HTTPAPIEX_02_014: [If requestContent is not NULL then its content and its size shall be used for parameters content and contentLength of HTTPAPI_ExecuteRequest.] */
+    if (buildBufferIfNotExist(requestContent, isOriginalRequestContent, toBeUsedRequestContent) != 0)
+    {
+        LogError("unable to build the request content");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (buildRequestHttpHeadersHandle(handle, *toBeUsedRequestContent, requestHttpHeadersHandle, isOriginalRequestHttpHeadersHandle, toBeUsedRequestHttpHeadersHandle) != 0)
+        {
+            /*Codes_SRS_HTTPAPIEX_02_010: [If any of the operations in SRS_HTTAPIEX_02_009 fails, then HTTPAPIEX_ExecuteRequest shall return HTTPAPIEX_ERROR.] */
+            if (*isOriginalRequestContent == false) 
+            {
+                BUFFER_delete(*toBeUsedRequestContent);
+            }
+            LogError("unable to build the request http headers handle");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /*Codes_SRS_HTTPAPIEX_02_008: [If parameter relativePath is NULL then HTTPAPIEX_INVALID_ARG shall not assume a relative path - that is, it will assume an empty path ("").] */
+            if (relativePath == NULL)
+            {
+                *toBeUsedRelativePath = "";
+            }
+            else
+            {
+                *toBeUsedRelativePath = relativePath;
+            }
+
+            /*Codes_SRS_HTTPAPIEX_02_015: [If statusCode is NULL then HTTPAPIEX_ExecuteRequest shall not write in statusCode the HTTP status code, and it will use a temporary internal int for parameter statusCode to the calls of HTTPAPI_ExecuteRequest.] */
+            if (statusCode == NULL)
+            {
+                /*Codes_SRS_HTTPAPIEX_02_016: [If statusCode is not NULL then If statusCode is NULL then HTTPAPIEX_ExecuteRequest shall use it for parameter statusCode to the calls of HTTPAPI_ExecuteRequest.] */
+                *toBeUsedStatusCode = &dummyStatusCode;
+            }
+            else
+            {
+                *toBeUsedStatusCode = statusCode;
+            }
+
+            /*Codes_SRS_HTTPAPIEX_02_017: [If responseHeaders handle is NULL then HTTPAPIEX_ExecuteRequest shall create a temporary internal instance of HTTPHEADERS object and use that for responseHeaders parameter of HTTPAPI_ExecuteRequest call.] */
+            /*Codes_SRS_HTTPAPIEX_02_019: [If responseHeaders is not NULL, then then HTTPAPIEX_ExecuteRequest shall use that object as parameter responseHeaders of HTTPAPI_ExecuteRequest call.] */
+            if (buildResponseHttpHeadersHandle(responseHttpHeadersHandle, isOriginalResponseHttpHeadersHandle, toBeUsedResponseHttpHeadersHandle) != 0)
+            {
+                /*Codes_SRS_HTTPAPIEX_02_018: [If creating the temporary http headers in SRS_HTTPAPIEX_02_017 fails then HTTPAPIEX_ExecuteRequest shall return HTTPAPIEX_ERROR.] */
+                if (*isOriginalRequestContent == false)
+                {
+                    BUFFER_delete(*toBeUsedRequestContent);
+                }
+                if (*isOriginalRequestHttpHeadersHandle == false)
+                {
+                    HTTPHeaders_Free(*toBeUsedRequestHttpHeadersHandle);
+                }
+                LogError("unable to build response content");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /*Codes_SRS_HTTPAPIEX_02_020: [If responseContent is NULL then HTTPAPIEX_ExecuteRequest shall create a temporary internal BUFFER object and use that as parameter responseContent of HTTPAPI_ExecuteRequest call.] */
+                /*Codes_SRS_HTTPAPIEX_02_022: [If responseContent is not NULL then HTTPAPIEX_ExecuteRequest use that as parameter responseContent of HTTPAPI_ExecuteRequest call.] */
+                if (buildBufferIfNotExist(responseContent, isOriginalResponseContent, toBeUsedResponseContent) != 0)
+                {
+                    /*Codes_SRS_HTTPAPIEX_02_021: [If creating the BUFFER_HANDLE in SRS_HTTPAPIEX_02_020 fails, then HTTPAPIEX_ExecuteRequest shall return HTTPAPIEX_ERROR.] */
+                    if (*isOriginalRequestContent == false)
+                    {
+                        BUFFER_delete(*toBeUsedRequestContent);
+                    }
+                    if (*isOriginalRequestHttpHeadersHandle == false)
+                    {
+                        HTTPHeaders_Free(*toBeUsedRequestHttpHeadersHandle);
+                    }
+                    if (*isOriginalResponseHttpHeadersHandle == false)
+                    {
+                        HTTPHeaders_Free(*toBeUsedResponseHttpHeadersHandle);
+                    }
+                    LogError("unable to build response content");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    result = 0;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+HTTPAPIEX_RESULT HTTPAPIEX_ExecuteRequest(HTTPAPIEX_HANDLE handle, HTTPAPI_REQUEST_TYPE requestType, const char* relativePath,
+    HTTP_HEADERS_HANDLE requestHttpHeadersHandle, BUFFER_HANDLE requestContent, unsigned int* statusCode,
+    HTTP_HEADERS_HANDLE responseHttpHeadersHandle, BUFFER_HANDLE responseContent)
+{
+    HTTPAPIEX_RESULT result;
+    /*Codes_SRS_HTTPAPIEX_02_006: [If parameter handle is NULL then HTTPAPIEX_ExecuteRequest shall fail and return HTTPAPIEX_INVALID_ARG.]*/
+    if (handle == NULL)
+    {
+        result = HTTPAPIEX_INVALID_ARG;
+        LOG_HTTAPIEX_ERROR();
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPIEX_02_007: [If parameter requestType does not indicate a valid request, HTTPAPIEX_ExecuteRequest shall fail and return HTTPAPIEX_INVALID_ARG.] */
+        if (requestType >= MU_COUNT_ARG(HTTPAPI_REQUEST_TYPE_VALUES))
+        {
+            result = HTTPAPIEX_INVALID_ARG;
+            LOG_HTTAPIEX_ERROR();
+        }
+        else
+        {
+            HTTPAPIEX_HANDLE_DATA *handleData = (HTTPAPIEX_HANDLE_DATA *)handle;
+
+            /*call to buildAll*/
+            const char* toBeUsedRelativePath;
+            HTTP_HEADERS_HANDLE toBeUsedRequestHttpHeadersHandle; bool isOriginalRequestHttpHeadersHandle;
+            BUFFER_HANDLE toBeUsedRequestContent; bool isOriginalRequestContent;
+            unsigned int* toBeUsedStatusCode;
+            HTTP_HEADERS_HANDLE toBeUsedResponseHttpHeadersHandle; bool isOriginalResponseHttpHeadersHandle;
+            BUFFER_HANDLE toBeUsedResponseContent;  bool isOriginalResponseContent;
+
+            if (buildAllRequests(handleData, requestType, relativePath, requestHttpHeadersHandle, requestContent, statusCode, responseHttpHeadersHandle, responseContent,
+                &toBeUsedRelativePath,
+                &toBeUsedRequestHttpHeadersHandle, &isOriginalRequestHttpHeadersHandle,
+                &toBeUsedRequestContent, &isOriginalRequestContent,
+                &toBeUsedStatusCode,
+                &toBeUsedResponseHttpHeadersHandle, &isOriginalResponseHttpHeadersHandle,
+                &toBeUsedResponseContent, &isOriginalResponseContent) != 0)
+            {
+                result = HTTPAPIEX_ERROR;
+                LOG_HTTAPIEX_ERROR();
+            }
+            else
+            {
+
+                /*Codes_SRS_HTTPAPIEX_02_023: [HTTPAPIEX_ExecuteRequest shall try to execute the HTTP call by ensuring the following API call sequence is respected:]*/
+                /*Codes_SRS_HTTPAPIEX_02_024: [If any point in the sequence fails, HTTPAPIEX_ExecuteRequest shall attempt to recover by going back to the previous step and retrying that step.]*/
+                /*Codes_SRS_HTTPAPIEX_02_025: [If the first step fails, then the sequence fails.]*/
+                /*Codes_SRS_HTTPAPIEX_02_026: [A step shall be retried at most once.]*/
+                /*Codes_SRS_HTTPAPIEX_02_027: [If a step has been retried then all subsequent steps shall be retried too.]*/
+                bool st[3] = { false, false, false }; /*the three levels of possible failure in resilient send: HTTAPI_Init, HTTPAPI_CreateConnection, HTTPAPI_ExecuteRequest*/
+                if (handleData->k == -1)
+                {
+                    handleData->k = 0;
+                }
+
+                do
+                {
+                    bool goOn;
+
+                    if (handleData->k > 2)
+                    {
+                        /* error */
+                        break;
+                    }
+
+                    if (st[handleData->k] == true) /*already been tried*/
+                    {
+                        goOn = false;
+                    }
+                    else
+                    {
+                        switch (handleData->k)
+                        {
+                        case 0:
+                        {
+                            if (HTTPAPI_Init() != HTTPAPI_OK)
+                            {
+                                goOn = false;
+                            }
+                            else
+                            {
+                                goOn = true;
+                            }
+                            break;
+                        }
+                        case 1:
+                        {
+                            if ((handleData->httpHandle = HTTPAPI_CreateConnection(STRING_c_str(handleData->hostName))) == NULL)
+                            {
+                                goOn = false;
+                            }
+                            else
+                            {
+                                size_t i;
+                                size_t vectorSize = VECTOR_size(handleData->savedOptions);
+                                for (i = 0; i < vectorSize; i++)
+                                {
+                                    /*Codes_SRS_HTTPAPIEX_02_035: [HTTPAPIEX_ExecuteRequest shall pass all the saved options (see HTTPAPIEX_SetOption) to the newly create HTTPAPI_HANDLE in step 2 by calling HTTPAPI_SetOption.]*/
+                                    /*Codes_SRS_HTTPAPIEX_02_036: [If setting the option fails, then the failure shall be ignored.] */
+                                    HTTPAPIEX_SAVED_OPTION* option = (HTTPAPIEX_SAVED_OPTION*)VECTOR_element(handleData->savedOptions, i);
+                                    if (HTTPAPI_SetOption(handleData->httpHandle, option->optionName, option->value) != HTTPAPI_OK)
+                                    {
+                                        LogError("HTTPAPI_SetOption failed when called for option %s", option->optionName);
+                                    }
+                                }
+                                goOn = true;
+                            }
+                            break;
+                        }
+                        case 2:
+                        {
+                            size_t length = BUFFER_length(toBeUsedRequestContent);
+                            unsigned char* buffer = BUFFER_u_char(toBeUsedRequestContent);
+                            if (HTTPAPI_ExecuteRequest(handleData->httpHandle, requestType, toBeUsedRelativePath, toBeUsedRequestHttpHeadersHandle, buffer, length, toBeUsedStatusCode, toBeUsedResponseHttpHeadersHandle, toBeUsedResponseContent) != HTTPAPI_OK)
+                            {
+                                goOn = false;
+                            }
+                            else
+                            {
+                                goOn = true;
+                            }
+                            break;
+                        }
+                        default:
+                        {
+                            /*serious error*/
+                            goOn = false;
+                            break;
+                        }
+                        }
+                    }
+
+                    if (goOn)
+                    {
+                        if (handleData->k == 2)
+                        {
+                            /*Codes_SRS_HTTPAPIEX_02_028: [HTTPAPIEX_ExecuteRequest shall return HTTPAPIEX_OK when a call to HTTPAPI_ExecuteRequest has been completed successfully.]*/
+                            result = HTTPAPIEX_OK;
+                            goto out;
+                        }
+                        else
+                        {
+                            st[handleData->k] = true;
+                            handleData->k++;
+                            st[handleData->k] = false;
+                        }
+                    }
+                    else
+                    {
+                        st[handleData->k] = false;
+                        handleData->k--;
+                        switch (handleData->k)
+                        {
+                        case 0:
+                        {
+                            HTTPAPI_Deinit();
+                            break;
+                        }
+                        case 1:
+                        {
+                            HTTPAPI_CloseConnection(handleData->httpHandle);
+                            handleData->httpHandle = NULL;
+                            break;
+                        }
+                        case 2:
+                        {
+                            break;
+                        }
+                        default:
+                        {
+                            break;
+                        }
+                        }
+                    }
+                } while (handleData->k >= 0);
+                /*Codes_SRS_HTTPAPIEX_02_029: [Otherwise, HTTAPIEX_ExecuteRequest shall return HTTPAPIEX_RECOVERYFAILED.] */
+                result = HTTPAPIEX_RECOVERYFAILED;
+                LogError("unable to recover sending to a working state");
+            out:;
+                /*in all cases, unbuild the temporaries*/
+                if (isOriginalRequestContent == false)
+                {
+                    BUFFER_delete(toBeUsedRequestContent);
+                }
+                if (isOriginalRequestHttpHeadersHandle == false)
+                {
+                    HTTPHeaders_Free(toBeUsedRequestHttpHeadersHandle);
+                }
+                if (isOriginalResponseContent == false)
+                {
+                    BUFFER_delete(toBeUsedResponseContent);
+                }
+                if (isOriginalResponseHttpHeadersHandle == false)
+                {
+                    HTTPHeaders_Free(toBeUsedResponseHttpHeadersHandle);
+                }
+            }
+        }
+    }
+    return result;
+}
+
+
+void HTTPAPIEX_Destroy(HTTPAPIEX_HANDLE handle)
+{
+    if (handle != NULL)
+    {
+        /*Codes_SRS_HTTPAPIEX_02_042: [HTTPAPIEX_Destroy shall free all the resources used by HTTAPIEX_HANDLE.]*/
+        size_t i;
+        size_t vectorSize;
+        HTTPAPIEX_HANDLE_DATA* handleData = (HTTPAPIEX_HANDLE_DATA*)handle;
+        
+        if (handleData->k == 2)
+        {
+            HTTPAPI_CloseConnection(handleData->httpHandle);
+            HTTPAPI_Deinit();
+        }
+        STRING_delete(handleData->hostName);
+
+        vectorSize = VECTOR_size(handleData->savedOptions);
+        for (i = 0; i < vectorSize; i++)
+        {
+            HTTPAPIEX_SAVED_OPTION* savedOption = (HTTPAPIEX_SAVED_OPTION*)VECTOR_element(handleData->savedOptions, i);
+            free((void*)savedOption->optionName);
+            free((void*)savedOption->value);
+        }
+        VECTOR_destroy(handleData->savedOptions);
+
+        free(handle);
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPIEX_02_043: [If parameter handle is NULL then HTTPAPIEX_Destroy shall take no action.] */
+    }
+}
+
+static bool sameName(const void* element, const void* value)
+{
+    return (strcmp(((HTTPAPIEX_SAVED_OPTION*)element)->optionName, (const char*)value) == 0) ? true : false;
+}
+
+/*return 0 on success, any other value is error*/
+/*obs: value is already cloned at the time of calling this function */
+static int createOrUpdateOption(HTTPAPIEX_HANDLE_DATA* handleData, const char* optionName, const void* value)
+{
+    /*this function is called after the option value has been saved (cloned)*/
+    int result;
+    
+    /*decide bwtween update or create*/
+    HTTPAPIEX_SAVED_OPTION* whereIsIt = (HTTPAPIEX_SAVED_OPTION*)VECTOR_find_if(handleData->savedOptions, sameName, optionName);
+    if (whereIsIt != NULL)
+    {
+        free((void*)(whereIsIt->value));
+        whereIsIt->value = value;
+        result = 0;
+    }
+    else
+    {
+        HTTPAPIEX_SAVED_OPTION newOption;
+        if (mallocAndStrcpy_s((char**)&(newOption.optionName), optionName) != 0)
+        {
+            free((void*)value);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            newOption.value = value;
+            if (VECTOR_push_back(handleData->savedOptions, &newOption, 1) != 0)
+            {
+                LogError("unable to VECTOR_push_back");
+                free((void*)newOption.optionName);
+                free((void*)value);
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+    
+    return result;
+}
+
+HTTPAPIEX_RESULT HTTPAPIEX_SetOption(HTTPAPIEX_HANDLE handle, const char* optionName, const void* value)
+{
+    HTTPAPIEX_RESULT result;
+    /*Codes_SRS_HTTPAPIEX_02_032: [If parameter handle is NULL then HTTPAPIEX_SetOption shall return HTTPAPIEX_INVALID_ARG.] */
+    /*Codes_SRS_HTTPAPIEX_02_033: [If parameter optionName is NULL then HTTPAPIEX_SetOption shall return HTTPAPIEX_INVALID_ARG.] */
+    /*Codes_SRS_HTTPAPIEX_02_034: [If parameter value is NULL then HTTPAPIEX_SetOption shall return HTTPAPIEX_INVALID_ARG.] */
+    if (
+        (handle == NULL) ||
+        (optionName == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = HTTPAPIEX_INVALID_ARG;
+        LOG_HTTAPIEX_ERROR();
+    }
+    else
+    {
+        const void* savedOption;
+        HTTPAPI_RESULT saveOptionResult;
+
+        /*Codes_SRS_HTTPAPIEX_02_037: [HTTPAPIEX_SetOption shall attempt to save the value of the option by calling HTTPAPI_CloneOption passing optionName and value, irrespective of the existence of a HTTPAPI_HANDLE] */
+        saveOptionResult = HTTPAPI_CloneOption(optionName, value, &savedOption);
+
+        if(saveOptionResult == HTTPAPI_INVALID_ARG)
+        {
+            /*Codes_SRS_HTTPAPIEX_02_038: [If HTTPAPI_CloneOption returns HTTPAPI_INVALID_ARG then HTTPAPIEX shall return HTTPAPIEX_INVALID_ARG.] */
+            result = HTTPAPIEX_INVALID_ARG;
+            LOG_HTTAPIEX_ERROR();
+        }
+        else if (saveOptionResult != HTTPAPI_OK)
+        {
+            /*Codes_SRS_HTTPAPIEX_02_040: [For all other return values of HTTPAPI_SetOption, HTTPIAPIEX_SetOption shall return HTTPAPIEX_ERROR.] */
+            result = HTTPAPIEX_ERROR;
+            LOG_HTTAPIEX_ERROR();
+        }
+        else
+        {
+            HTTPAPIEX_HANDLE_DATA* handleData = (HTTPAPIEX_HANDLE_DATA*)handle;
+            /*Codes_SRS_HTTPAPIEX_02_039: [If HTTPAPI_CloneOption returns HTTPAPI_OK then HTTPAPIEX_SetOption shall create or update the pair optionName/value.]*/
+            if (createOrUpdateOption(handleData, optionName, savedOption) != 0)
+            {
+                /*Codes_SRS_HTTPAPIEX_02_041: [If creating or updating the pair optionName/value fails then shall return HTTPAPIEX_ERROR.] */
+                result = HTTPAPIEX_ERROR;
+                LOG_HTTAPIEX_ERROR();
+                
+            }
+            else
+            {
+                /*Codes_SRS_HTTPAPIEX_02_031: [If HTTPAPI_HANDLE exists then HTTPAPIEX_SetOption shall call HTTPAPI_SetOption passing the same optionName and value and shall return a value conforming to the below table:] */
+                if (handleData->httpHandle != NULL)
+                {
+                    HTTPAPI_RESULT HTTPAPI_result = HTTPAPI_SetOption(handleData->httpHandle, optionName, value);
+                    if (HTTPAPI_result == HTTPAPI_OK)
+                    {
+                        result = HTTPAPIEX_OK;
+                    }
+                    else if (HTTPAPI_result == HTTPAPI_INVALID_ARG)
+                    {
+                        result = HTTPAPIEX_INVALID_ARG;
+                        LOG_HTTAPIEX_ERROR();
+                    }
+                    else
+                    {
+                        result = HTTPAPIEX_ERROR;
+                        LOG_HTTAPIEX_ERROR();
+                    }
+                }
+                else
+                {
+                    result = HTTPAPIEX_OK;
+                }
+            }
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/httpapiexsas.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/httpapiexsas.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/httpapiexsas.c	(revision 389)
@@ -0,0 +1,187 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include <stddef.h>
+#include <time.h>
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/sastoken.h"
+#include "azure_c_shared_utility/httpheaders.h"
+#include "azure_c_shared_utility/httpapiex.h"
+#include "azure_c_shared_utility/httpapiexsas.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+
+#define SHARED_ACCESS_SIGNATURE_PREFIX "sas="
+
+typedef struct HTTPAPIEX_SAS_STATE_TAG
+{
+    char* key;
+    char* uriResource;
+    char* keyName;
+} HTTPAPIEX_SAS_STATE;
+
+static HTTPAPIEX_SAS_STATE* construct_httpex_sas(const char* key, const char* uriResource, const char* keyName)
+{
+    HTTPAPIEX_SAS_STATE* result;
+
+    result = (HTTPAPIEX_SAS_STATE*)malloc(sizeof(HTTPAPIEX_SAS_STATE));
+    if (result == NULL)
+    {
+        LogError("Failure allocating HTTPAPIEX_SAS_Create.");
+    }
+    else
+    {
+        (void)memset(result, 0, sizeof(HTTPAPIEX_SAS_STATE));
+        if (mallocAndStrcpy_s(&result->key, key) != 0)
+        {
+            /*Codes_SRS_HTTPAPIEXSAS_06_004: [If there are any other errors in the instantiation of this handle then HTTPAPIEX_SAS_Create shall return NULL.]*/
+            LogError("Failure allocating sas key.");
+            HTTPAPIEX_SAS_Destroy(result);
+            result = NULL;
+        }
+        else if (mallocAndStrcpy_s(&result->uriResource, uriResource) != 0)
+        {
+            /*Codes_SRS_HTTPAPIEXSAS_06_004: [If there are any other errors in the instantiation of this handle then HTTPAPIEX_SAS_Create shall return NULL.]*/
+            LogError("Failure allocating sas uriResource.");
+            HTTPAPIEX_SAS_Destroy(result);
+            result = NULL;
+        }
+        else if (keyName != NULL && mallocAndStrcpy_s(&result->keyName, keyName) != 0)
+        {
+            /*Codes_SRS_HTTPAPIEXSAS_06_004: [If there are any other errors in the instantiation of this handle then HTTPAPIEX_SAS_Create shall return NULL.]*/
+            LogError("Failure allocating sas keyName.");
+            HTTPAPIEX_SAS_Destroy(result);
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+HTTPAPIEX_SAS_HANDLE HTTPAPIEX_SAS_Create_From_String(const char* key, const char* uriResource, const char* keyName)
+{
+    HTTPAPIEX_SAS_HANDLE result = NULL;
+    if (key == NULL || uriResource == NULL)
+    {
+        /* Codes_SRS_HTTPAPIEXSAS_07_001: [ If the parameter key or uriResource is NULL then HTTPAPIEX_SAS_Create_From_String shall return NULL. ] */
+        LogError("Invalid parameter key: %p, uriResource: %p", key, uriResource);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_HTTPAPIEXSAS_07_002: [ If there are any other errors in the instantiation of this handle then HTTPAPIEX_SAS_Create_From_String shall return NULL. ] */
+        result = construct_httpex_sas(key, uriResource, keyName);
+    }
+    /* Codes_SRS_HTTPAPIEXSAS_07_003: [ HTTPAPIEX_SAS_Create_From_String shall create a new instance of HTTPAPIEX_SAS and return a non-NULL handle to it ] */
+    return result;
+}
+
+HTTPAPIEX_SAS_HANDLE HTTPAPIEX_SAS_Create(STRING_HANDLE key, STRING_HANDLE uriResource, STRING_HANDLE keyName)
+{
+    HTTPAPIEX_SAS_HANDLE result = NULL;
+    if (key == NULL)
+    {
+        /*Codes_SRS_HTTPAPIEXSAS_06_001: [If the parameter key is NULL then HTTPAPIEX_SAS_Create shall return NULL.]*/
+        LogError("No key passed to HTTPAPIEX_SAS_Create.");
+    }
+    else if (uriResource == NULL)
+    {
+        /*Codes_SRS_HTTPAPIEXSAS_06_002: [If the parameter uriResource is NULL then HTTPAPIEX_SAS_Create shall return NULL.]*/
+        LogError("No uri resource passed to HTTPAPIEX_SAS_Create.");
+    }
+    else
+    {
+        /*Codes_SRS_HTTPAPIEXSAS_06_003: [The parameter keyName for HTTPAPIEX_SAS_Create is optional and can be NULL.]*/
+        /*Codes_SRS_HTTPAPIEXSAS_01_001: [ HTTPAPIEX_SAS_Create shall create a new instance of HTTPAPIEX_SAS and return a non-NULL handle to it. ]*/
+        const char* keyStr = STRING_c_str(key);
+        const char* uriStr = STRING_c_str(uriResource);
+        const char* keyNameStr = STRING_c_str(keyName);
+        result = construct_httpex_sas(keyStr, uriStr, keyNameStr);
+    }
+    return result;
+}
+
+void HTTPAPIEX_SAS_Destroy(HTTPAPIEX_SAS_HANDLE handle)
+{
+    /*Codes_SRS_HTTPAPIEXSAS_06_005: [If the parameter handle is NULL then HTTAPIEX_SAS_Destroy shall do nothing and return.]*/
+    if (handle)
+    {
+        HTTPAPIEX_SAS_STATE* state = (HTTPAPIEX_SAS_STATE*)handle;
+        /*Codes_SRS_HTTPAPIEXSAS_06_006: [HTTAPIEX_SAS_Destroy shall deallocate any structures denoted by the parameter handle.]*/
+        if (state->key)
+        {
+            free(state->key);
+        }
+        if (state->uriResource)
+        {
+            free(state->uriResource);
+        }
+        if (state->keyName)
+        {
+            free(state->keyName);
+        }
+        free(state);
+    }
+}
+
+HTTPAPIEX_RESULT HTTPAPIEX_SAS_ExecuteRequest(HTTPAPIEX_SAS_HANDLE sasHandle, HTTPAPIEX_HANDLE handle, HTTPAPI_REQUEST_TYPE requestType, const char* relativePath, HTTP_HEADERS_HANDLE requestHttpHeadersHandle, BUFFER_HANDLE requestContent, unsigned int* statusCode, HTTP_HEADERS_HANDLE responseHeadersHandle, BUFFER_HANDLE responseContent)
+{
+    /*Codes_SRS_HTTPAPIEXSAS_06_007: [If the parameter sasHandle is NULL then HTTPAPIEX_SAS_ExecuteRequest shall simply invoke HTTPAPIEX_ExecuteRequest with the remaining parameters (following sasHandle) as its arguments and shall return immediately with the result of that call as the result of HTTPAPIEX_SAS_ExecuteRequest.]*/
+    if (sasHandle != NULL)
+    {
+        /*Codes_SRS_HTTPAPIEXSAS_06_008: [if the parameter requestHttpHeadersHandle is NULL then fallthrough.]*/
+        if (requestHttpHeadersHandle != NULL)
+        {
+            /*Codes_SRS_HTTPAPIEXSAS_06_009: [HTTPHeaders_FindHeaderValue shall be invoked with the requestHttpHeadersHandle as its first argument and the string "Authorization" as its second argument.]*/
+            /*Codes_SRS_HTTPAPIEXSAS_06_010: [If the return result of the invocation of HTTPHeaders_FindHeaderValue is NULL then fallthrough.]*/
+            if (HTTPHeaders_FindHeaderValue(requestHttpHeadersHandle, "Authorization") != NULL)
+            {
+                HTTPAPIEX_SAS_STATE* state = (HTTPAPIEX_SAS_STATE*)sasHandle;
+                /*Codes_SRS_HTTPAPIEXSAS_06_018: [A value of type time_t that shall be known as currentTime is obtained from calling get_time.]*/
+                time_t currentTime = get_time(NULL);
+                /*Codes_SRS_HTTPAPIEXSAS_06_019: [If the value of currentTime is (time_t)-1 is then fallthrough.]*/
+                if (currentTime == (time_t)-1)
+                {
+                    LogError("Time does not appear to be working.");
+                }
+                else
+                {
+                    STRING_HANDLE newSASToken = NULL;
+                    if (strncmp(state->key, SHARED_ACCESS_SIGNATURE_PREFIX, 4) == 0)
+                    {
+                        /*Codes_SRS_HTTPAPIEXSAS_06_017: [If state->key is prefixed with "sas=", SharedAccessSignature will be used rather than created.  STRING_construct will be invoked.]*/
+                        newSASToken = STRING_construct(&state->key[4]);
+                    }
+                    else
+                    {
+                        /*Codes_SRS_HTTPAPIEXSAS_06_011: [SASToken_Create shall be invoked.]*/
+                        /*Codes_SRS_HTTPAPIEXSAS_06_012: [If the return result of SASToken_Create is NULL then fallthrough.]*/
+                        size_t expiry = (size_t)(difftime(currentTime, 0) + 3600);
+                        newSASToken = SASToken_CreateString(state->key, state->uriResource, state->keyName, expiry);
+                    }
+
+                    if (newSASToken != NULL)
+                    {
+                        /*Codes_SRS_HTTPAPIEXSAS_06_013: [HTTPHeaders_ReplaceHeaderNameValuePair shall be invoked with "Authorization" as its second argument and STRING_c_str (newSASToken) as its third argument.]*/
+                        if (HTTPHeaders_ReplaceHeaderNameValuePair(requestHttpHeadersHandle, "Authorization", STRING_c_str(newSASToken)) != HTTP_HEADERS_OK)
+                        {
+                            /*Codes_SRS_HTTPAPIEXSAS_06_014: [If the result of the invocation of HTTPHeaders_ReplaceHeaderNameValuePair is NOT HTTP_HEADERS_OK then fallthrough.]*/
+                            LogError("Unable to replace the old SAS Token.");
+                        }
+                        /*Codes_SRS_HTTPAPIEXSAS_06_015: [STRING_delete(newSASToken) will be invoked.]*/
+                        STRING_delete(newSASToken);
+                    }
+                    else
+                    {
+                        LogError("Unable to create a new SAS token.");
+                    }
+                }
+            }
+        }
+    }
+    /*Codes_SRS_HTTPAPIEXSAS_06_016: [HTTPAPIEX_ExecuteRequest with the remaining parameters (following sasHandle) as its arguments will be invoked and the result of that call is the result of HTTPAPIEX_SAS_ExecuteRequest.]*/
+    return HTTPAPIEX_ExecuteRequest(handle,requestType,relativePath,requestHttpHeadersHandle,requestContent,statusCode,responseHeadersHandle,responseContent);
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/httpheaders.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/httpheaders.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/httpheaders.c	(revision 389)
@@ -0,0 +1,335 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/map.h"
+#include "azure_c_shared_utility/httpheaders.h"
+#include <string.h>
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+MU_DEFINE_ENUM_STRINGS(HTTP_HEADERS_RESULT, HTTP_HEADERS_RESULT_VALUES);
+
+typedef struct HTTP_HEADERS_HANDLE_DATA_TAG
+{
+    MAP_HANDLE headers;
+} HTTP_HEADERS_HANDLE_DATA;
+
+HTTP_HEADERS_HANDLE HTTPHeaders_Alloc(void)
+{
+    /*Codes_SRS_HTTP_HEADERS_99_002:[ This API shall produce a HTTP_HANDLE that can later be used in subsequent calls to the module.]*/
+    HTTP_HEADERS_HANDLE_DATA* result;
+    result = (HTTP_HEADERS_HANDLE_DATA*)malloc(sizeof(HTTP_HEADERS_HANDLE_DATA));
+
+    if (result == NULL)
+    {
+        LogError("malloc failed");
+    }
+    else
+    {
+        /*Codes_SRS_HTTP_HEADERS_99_004:[ After a successful init, HTTPHeaders_GetHeaderCount shall report 0 existing headers.]*/
+        result->headers = Map_Create(NULL);
+        if (result->headers == NULL)
+        {
+            LogError("Map_Create failed");
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            /*all is fine*/
+        }
+    }
+
+    /*Codes_SRS_HTTP_HEADERS_99_003:[ The function shall return NULL when the function cannot execute properly]*/
+    return (HTTP_HEADERS_HANDLE)result;
+}
+
+/*Codes_SRS_HTTP_HEADERS_99_005:[ Calling this API shall de-allocate the data structures allocated by previous API calls to the same handle.]*/
+void HTTPHeaders_Free(HTTP_HEADERS_HANDLE handle)
+{
+    /*Codes_SRS_HTTP_HEADERS_02_001: [If httpHeadersHandle is NULL then HTTPHeaders_Free shall perform no action.] */
+    if (handle == NULL)
+    {
+        /*do nothing*/
+    }
+    else
+    {
+        /*Codes_SRS_HTTP_HEADERS_99_005:[ Calling this API shall de-allocate the data structures allocated by previous API calls to the same handle.]*/
+        HTTP_HEADERS_HANDLE_DATA* handleData = (HTTP_HEADERS_HANDLE_DATA*)handle;
+
+        Map_Destroy(handleData->headers);
+        free(handleData);
+    }
+}
+
+/*Codes_SRS_HTTP_HEADERS_99_012:[ Calling this API shall record a header from name and value parameters.]*/
+static HTTP_HEADERS_RESULT headers_ReplaceHeaderNameValuePair(HTTP_HEADERS_HANDLE handle, const char* name, const char* value, bool replace)
+{
+    HTTP_HEADERS_RESULT result;
+    /*Codes_SRS_HTTP_HEADERS_99_014:[ The function shall return when the handle is not valid or when name parameter is NULL or when value parameter is NULL.]*/
+    if (
+        (handle == NULL) ||
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = HTTP_HEADERS_INVALID_ARG;
+        LogError("invalid arg (NULL) , result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+    }
+    else
+    {
+        /*Codes_SRS_HTTP_HEADERS_99_036:[ If name contains the characters outside character codes 33 to 126 then the return value shall be HTTP_HEADERS_INVALID_ARG]*/
+        /*Codes_SRS_HTTP_HEADERS_99_031:[ If name contains the character ":" then the return value shall be HTTP_HEADERS_INVALID_ARG.]*/
+        size_t i;
+        size_t nameLen = strlen(name);
+        for (i = 0; i < nameLen; i++)
+        {
+            if ((name[i] < 33) || (126 < name[i]) || (name[i] == ':'))
+            {
+                break;
+            }
+        }
+
+        if (i < nameLen)
+        {
+            result = HTTP_HEADERS_INVALID_ARG;
+            LogError("(result = %s)", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+        }
+        else
+        {
+            HTTP_HEADERS_HANDLE_DATA* handleData = (HTTP_HEADERS_HANDLE_DATA*)handle;
+            const char* existingValue = Map_GetValueFromKey(handleData->headers, name);
+            /*eat up the whitespaces from value, as per RFC 2616, chapter 4.2 "The field value MAY be preceded by any amount of LWS, though a single SP is preferred."*/
+            /*Codes_SRS_HTTP_HEADERS_02_002: [The LWS from the beginning of the value shall not be stored.] */
+            while ((value[0] == ' ') || (value[0] == '\t') || (value[0] == '\r') || (value[0] == '\n'))
+            {
+                value++;
+            }
+
+            if (!replace && (existingValue != NULL))
+            {
+                size_t existingValueLen = strlen(existingValue);
+                size_t valueLen = strlen(value);
+                char* newValue = (char*)malloc(sizeof(char) * (existingValueLen + /*COMMA_AND_SPACE_LENGTH*/ 2 + valueLen + /*EOL*/ 1));
+                if (newValue == NULL)
+                {
+                    /*Codes_SRS_HTTP_HEADERS_99_015:[ The function shall return HTTP_HEADERS_ALLOC_FAILED when an internal request to allocate memory fails.]*/
+                    result = HTTP_HEADERS_ALLOC_FAILED;
+                    LogError("failed to malloc , result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+                }
+                else
+                {
+                    char* runNewValue;
+                    /*Codes_SRS_HTTP_HEADERS_99_017:[ If the name already exists in the collection of headers, the function shall concatenate the new value after the existing value, separated by a comma and a space as in: old-value+", "+new-value.]*/
+                    (void)memcpy(newValue, existingValue, existingValueLen);
+                    runNewValue = newValue + existingValueLen;
+                    (*runNewValue++) = ',';
+                    (*runNewValue++) = ' ';
+                    (void)memcpy(runNewValue, value, valueLen + /*EOL*/ 1);
+
+                    /*Codes_SRS_HTTP_HEADERS_99_016:[ The function shall store the name:value pair in such a way that when later retrieved by a call to GetHeader it will return a string that shall strcmp equal to the name+": "+value.]*/
+                    if (Map_AddOrUpdate(handleData->headers, name, newValue) != MAP_OK)
+                    {
+                        /*Codes_SRS_HTTP_HEADERS_99_015:[ The function shall return HTTP_HEADERS_ALLOC_FAILED when an internal request to allocate memory fails.]*/
+                        result = HTTP_HEADERS_ERROR;
+                        LogError("failed to Map_AddOrUpdate, result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+                    }
+                    else
+                    {
+                        /*Codes_SRS_HTTP_HEADERS_99_013:[ The function shall return HTTP_HEADERS_OK when execution is successful.]*/
+                        result = HTTP_HEADERS_OK;
+                    }
+                    free(newValue);
+                }
+            }
+            else
+            {
+                /*Codes_SRS_HTTP_HEADERS_99_016:[ The function shall store the name:value pair in such a way that when later retrieved by a call to GetHeader it will return a string that shall strcmp equal to the name+": "+value.]*/
+                if (Map_AddOrUpdate(handleData->headers, name, value) != MAP_OK)
+                {
+                    /*Codes_SRS_HTTP_HEADERS_99_015:[ The function shall return HTTP_HEADERS_ALLOC_FAILED when an internal request to allocate memory fails.]*/
+                    result = HTTP_HEADERS_ALLOC_FAILED;
+                    LogError("failed to Map_AddOrUpdate, result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+                }
+                else
+                {
+                    result = HTTP_HEADERS_OK;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+HTTP_HEADERS_RESULT HTTPHeaders_AddHeaderNameValuePair(HTTP_HEADERS_HANDLE httpHeadersHandle, const char* name, const char* value)
+{
+    return headers_ReplaceHeaderNameValuePair(httpHeadersHandle, name, value, false);
+}
+
+/* Codes_SRS_HTTP_HEADERS_06_001: [This API will perform exactly as HTTPHeaders_AddHeaderNameValuePair except that if the header name already exists the already existing value will be replaced as opposed to concatenated to.] */
+HTTP_HEADERS_RESULT HTTPHeaders_ReplaceHeaderNameValuePair(HTTP_HEADERS_HANDLE httpHeadersHandle, const char* name, const char* value)
+{
+    return headers_ReplaceHeaderNameValuePair(httpHeadersHandle, name, value, true);
+}
+
+
+const char* HTTPHeaders_FindHeaderValue(HTTP_HEADERS_HANDLE httpHeadersHandle, const char* name)
+{
+    const char* result;
+    /*Codes_SRS_HTTP_HEADERS_99_022:[ The return value shall be NULL if name parameter is NULL or if httpHeadersHandle is NULL]*/
+    if (
+        (httpHeadersHandle == NULL) ||
+        (name == NULL)
+        )
+    {
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_HTTP_HEADERS_99_018:[ Calling this API shall retrieve the value for a previously stored name.]*/
+        /*Codes_SRS_HTTP_HEADERS_99_020:[ The return value shall be different than NULL when the name matches the name of a previously stored name:value pair.] */
+        /*Codes_SRS_HTTP_HEADERS_99_021:[ In this case the return value shall point to a string that shall strcmp equal to the original stored string.]*/
+        HTTP_HEADERS_HANDLE_DATA* handleData = (HTTP_HEADERS_HANDLE_DATA*)httpHeadersHandle;
+        result = Map_GetValueFromKey(handleData->headers, name);
+    }
+    return result;
+
+}
+
+HTTP_HEADERS_RESULT HTTPHeaders_GetHeaderCount(HTTP_HEADERS_HANDLE handle, size_t* headerCount)
+{
+    HTTP_HEADERS_RESULT result;
+    /*Codes_SRS_HTTP_HEADERS_99_024:[ The function shall return HTTP_HEADERS_INVALID_ARG when an invalid handle is passed.]*/
+    /*Codes_SRS_HTTP_HEADERS_99_025:[ The function shall return HTTP_HEADERS_INVALID_ARG when headersCount is NULL.]*/
+    if ((handle == NULL) ||
+        (headerCount == NULL))
+    {
+        result = HTTP_HEADERS_INVALID_ARG;
+        LogError("(result = %s)", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+    }
+    else
+    {
+        HTTP_HEADERS_HANDLE_DATA *handleData = (HTTP_HEADERS_HANDLE_DATA *)handle;
+        const char*const* keys;
+        const char*const* values;
+        /*Codes_SRS_HTTP_HEADERS_99_023:[ Calling this API shall provide the number of stored headers.]*/
+        if (Map_GetInternals(handleData->headers, &keys, &values, headerCount) != MAP_OK)
+        {
+            /*Codes_SRS_HTTP_HEADERS_99_037:[ The function shall return HTTP_HEADERS_ERROR when an internal error occurs.]*/
+            result = HTTP_HEADERS_ERROR;
+            LogError("Map_GetInternals failed, result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+        }
+        else
+        {
+            /*Codes_SRS_HTTP_HEADERS_99_026:[ The function shall write in *headersCount the number of currently stored headers and shall return HTTP_HEADERS_OK]*/
+            result = HTTP_HEADERS_OK;
+        }
+    }
+
+    return result;
+}
+
+/*produces a string in *destination that is equal to name: value*/
+HTTP_HEADERS_RESULT HTTPHeaders_GetHeader(HTTP_HEADERS_HANDLE handle, size_t index, char** destination)
+{
+    HTTP_HEADERS_RESULT result = HTTP_HEADERS_OK;
+
+    /*Codes_SRS_HTTP_HEADERS_99_028:[ The function shall return NULL if the handle is invalid.]*/
+    /*Codes_SRS_HTTP_HEADERS_99_032:[ The function shall return HTTP_HEADERS_INVALID_ARG if the destination  is NULL]*/
+    if (
+        (handle == NULL) ||
+        (destination == NULL)
+        )
+    {
+        result = HTTP_HEADERS_INVALID_ARG;
+        LogError("invalid arg (NULL), result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+    }
+    /*Codes_SRS_HTTP_HEADERS_99_029:[ The function shall return HTTP_HEADERS_INVALID_ARG if index is not valid (for example, out of range) for the currently stored headers.]*/
+    else
+    {
+        HTTP_HEADERS_HANDLE_DATA* handleData = (HTTP_HEADERS_HANDLE_DATA*)handle;
+        const char*const* keys;
+        const char*const* values;
+        size_t headerCount;
+        if (Map_GetInternals(handleData->headers, &keys, &values, &headerCount) != MAP_OK)
+        {
+            /*Codes_SRS_HTTP_HEADERS_99_034:[ The function shall return HTTP_HEADERS_ERROR when an internal error occurs]*/
+            result = HTTP_HEADERS_ERROR;
+            LogError("Map_GetInternals failed, result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+        }
+        else
+        {
+            /*Codes_SRS_HTTP_HEADERS_99_029:[ The function shall return HTTP_HEADERS_INVALID_ARG if index is not valid (for example, out of range) for the currently stored headers.]*/
+            if (index >= headerCount)
+            {
+                result = HTTP_HEADERS_INVALID_ARG;
+                LogError("index out of bounds, result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+            }
+            else
+            {
+                size_t keyLen = strlen(keys[index]);
+                size_t valueLen = strlen(values[index]);
+                *destination = (char*)malloc(sizeof(char) * (keyLen + /*COLON_AND_SPACE_LENGTH*/ 2 + valueLen + /*EOL*/ 1));
+                if (*destination == NULL)
+                {
+                    /*Codes_SRS_HTTP_HEADERS_99_034:[ The function shall return HTTP_HEADERS_ERROR when an internal error occurs]*/
+                    result = HTTP_HEADERS_ERROR;
+                    LogError("unable to malloc, result= %s", MU_ENUM_TO_STRING(HTTP_HEADERS_RESULT, result));
+                }
+                else
+                {
+                    /*Codes_SRS_HTTP_HEADERS_99_016:[ The function shall store the name:value pair in such a way that when later retrieved by a call to GetHeader it will return a string that shall strcmp equal to the name+": "+value.]*/
+                    /*Codes_SRS_HTTP_HEADERS_99_027:[ Calling this API shall produce the string value+": "+pair) for the index header in the *destination parameter.]*/
+                    char* runDestination = (*destination);
+                    (void)memcpy(runDestination, keys[index], keyLen);
+                    runDestination += keyLen;
+                    (*runDestination++) = ':';
+                    (*runDestination++) = ' ';
+                    (void)memcpy(runDestination, values[index], valueLen + /*EOL*/ 1);
+                    /*Codes_SRS_HTTP_HEADERS_99_035:[ The function shall return HTTP_HEADERS_OK when the function executed without error.]*/
+                    result = HTTP_HEADERS_OK;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+HTTP_HEADERS_HANDLE HTTPHeaders_Clone(HTTP_HEADERS_HANDLE handle)
+{
+    HTTP_HEADERS_HANDLE_DATA* result;
+    /*Codes_SRS_HTTP_HEADERS_02_003: [If handle is NULL then HTTPHeaders_Clone shall return NULL.] */
+    if (handle == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_HTTP_HEADERS_02_004: [Otherwise HTTPHeaders_Clone shall clone the content of handle to a new handle.] */
+        result = (HTTP_HEADERS_HANDLE_DATA*)malloc(sizeof(HTTP_HEADERS_HANDLE_DATA));
+        if (result == NULL)
+        {
+            /*Codes_SRS_HTTP_HEADERS_02_005: [If cloning fails for any reason, then HTTPHeaders_Clone shall return NULL.] */
+        }
+        else
+        {
+            HTTP_HEADERS_HANDLE_DATA* handleData = handle;
+            result->headers = Map_Clone(handleData->headers);
+            if (result->headers == NULL)
+            {
+                /*Codes_SRS_HTTP_HEADERS_02_005: [If cloning fails for any reason, then HTTPHeaders_Clone shall return NULL.] */
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                /*all is fine*/
+            }
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/map.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/map.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/map.c	(revision 389)
@@ -0,0 +1,677 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/map.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/strings.h"
+
+MU_DEFINE_ENUM_STRINGS(MAP_RESULT, MAP_RESULT_VALUES);
+
+typedef struct MAP_HANDLE_DATA_TAG
+{
+    char** keys;
+    char** values;
+    size_t count;
+    MAP_FILTER_CALLBACK mapFilterCallback;
+}MAP_HANDLE_DATA;
+
+#define LOG_MAP_ERROR LogError("result = %s", MU_ENUM_TO_STRING(MAP_RESULT, result));
+
+MAP_HANDLE Map_Create(MAP_FILTER_CALLBACK mapFilterFunc)
+{
+    /*Codes_SRS_MAP_02_001: [Map_Create shall create a new, empty map.]*/
+    MAP_HANDLE_DATA* result = (MAP_HANDLE_DATA*)malloc(sizeof(MAP_HANDLE_DATA));
+    /*Codes_SRS_MAP_02_002: [If during creation there are any error, then Map_Create shall return NULL.]*/
+    if (result != NULL)
+    {
+        /*Codes_SRS_MAP_02_003: [Otherwise, it shall return a non-NULL handle that can be used in subsequent calls.] */
+        result->keys = NULL;
+        result->values = NULL;
+        result->count = 0;
+        result->mapFilterCallback = mapFilterFunc;
+    }
+    return (MAP_HANDLE)result;
+}
+
+void Map_Destroy(MAP_HANDLE handle)
+{
+    /*Codes_SRS_MAP_02_005: [If parameter handle is NULL then Map_Destroy shall take no action.] */
+    if (handle != NULL)
+    {
+        /*Codes_SRS_MAP_02_004: [Map_Destroy shall release all resources associated with the map.] */
+        MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA*)handle;
+        size_t i;
+
+        for (i = 0; i < handleData->count; i++)
+        {
+            free(handleData->keys[i]);
+            free(handleData->values[i]);
+        }
+        free(handleData->keys);
+        free(handleData->values);
+        free(handleData);
+    }
+}
+
+/*makes a copy of a vector of const char*, having size "size". source cannot be NULL*/
+/*returns NULL if it fails*/
+static char** Map_CloneVector(const char*const * source, size_t count)
+{
+    char** result;
+    result = (char**)malloc(count *sizeof(char*));
+    if (result == NULL)
+    {
+        /*do nothing, just return it (NULL)*/
+    }
+    else
+    {
+        size_t i;
+        for (i = 0; i < count; i++)
+        {
+            if (mallocAndStrcpy_s(result + i, source[i]) != 0)
+            {
+                break;
+            }
+        }
+
+        if (i == count)
+        {
+            /*it is all good, proceed to return result*/
+        }
+        else
+        {
+            size_t j;
+            for (j = 0; j < i; j++)
+            {
+                free(result[j]);
+            }
+            free(result);
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+/*Codes_SRS_MAP_02_039: [Map_Clone shall make a copy of the map indicated by parameter handle and return a non-NULL handle to it.]*/
+MAP_HANDLE Map_Clone(MAP_HANDLE handle)
+{
+    MAP_HANDLE_DATA* result;
+    if (handle == NULL)
+    {
+        /*Codes_SRS_MAP_02_038: [Map_Clone returns NULL if parameter handle is NULL.]*/
+        result = NULL;
+        LogError("invalid arg to Map_Clone (NULL)");
+    }
+    else
+    {
+        MAP_HANDLE_DATA * handleData = (MAP_HANDLE_DATA *)handle;
+        result = (MAP_HANDLE_DATA*)malloc(sizeof(MAP_HANDLE_DATA));
+        if (result == NULL)
+        {
+            /*Codes_SRS_MAP_02_047: [If during cloning, any operation fails, then Map_Clone shall return NULL.] */
+            /*do nothing, proceed to return it, this is an error case*/
+            LogError("unable to malloc");
+        }
+        else
+        {
+            if (handleData->count == 0)
+            {
+                result->count = 0;
+                result->keys = NULL;
+                result->values = NULL;
+                result->mapFilterCallback = NULL;
+            }
+            else
+            {
+                result->mapFilterCallback = handleData->mapFilterCallback;
+                result->count = handleData->count;
+                if( (result->keys = Map_CloneVector((const char* const*)handleData->keys, handleData->count))==NULL)
+                {
+                    /*Codes_SRS_MAP_02_047: [If during cloning, any operation fails, then Map_Clone shall return NULL.] */
+                    LogError("unable to clone keys");
+                    free(result);
+                    result = NULL;
+                }
+                else if ((result->values = Map_CloneVector((const char* const*)handleData->values, handleData->count)) == NULL)
+                {
+                    size_t i;
+                    /*Codes_SRS_MAP_02_047: [If during cloning, any operation fails, then Map_Clone shall return NULL.] */
+                    LogError("unable to clone values");
+                    for (i = 0; i < result->count; i++)
+                    {
+                        free(result->keys[i]);
+                    }
+                    free(result->keys);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /*all fine, return it*/
+                }
+            }
+        }
+    }
+    return (MAP_HANDLE)result;
+}
+
+static int Map_IncreaseStorageKeysValues(MAP_HANDLE_DATA* handleData)
+{
+    int result;
+    char** newKeys = (char**)realloc(handleData->keys, (handleData->count + 1) * sizeof(char*));
+    if (newKeys == NULL)
+    {
+        LogError("realloc error");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        char** newValues;
+        handleData->keys = newKeys;
+        handleData->keys[handleData->count] = NULL;
+        newValues = (char**)realloc(handleData->values, (handleData->count + 1) * sizeof(char*));
+        if (newValues == NULL)
+        {
+            LogError("realloc error");
+            if (handleData->count == 0) /*avoiding an implementation defined behavior */
+            {
+                free(handleData->keys);
+                handleData->keys = NULL;
+            }
+            else
+            {
+                char** undoneKeys = (char**)realloc(handleData->keys, (handleData->count) * sizeof(char*));
+                if (undoneKeys == NULL)
+                {
+                    LogError("CATASTROPHIC error, unable to undo through realloc to a smaller size");
+                }
+                else
+                {
+                    handleData->keys = undoneKeys;
+                }
+            }
+            result = MU_FAILURE;
+        }
+        else
+        {
+            handleData->values = newValues;
+            handleData->values[handleData->count] = NULL;
+            handleData->count++;
+            result = 0;
+        }
+    }
+    return result;
+}
+
+static void Map_DecreaseStorageKeysValues(MAP_HANDLE_DATA* handleData)
+{
+    if (handleData->count == 1)
+    {
+        free(handleData->keys);
+        handleData->keys = NULL;
+        free(handleData->values);
+        handleData->values = NULL;
+        handleData->count = 0;
+        handleData->mapFilterCallback = NULL;
+    }
+    else
+    {
+        /*certainly > 1...*/
+        char** undoneValues;
+        char** undoneKeys = (char**)realloc(handleData->keys, sizeof(char*)* (handleData->count - 1));
+        if (undoneKeys == NULL)
+        {
+            LogError("CATASTROPHIC error, unable to undo through realloc to a smaller size");
+        }
+        else
+        {
+            handleData->keys = undoneKeys;
+        }
+
+        undoneValues = (char**)realloc(handleData->values, sizeof(char*)* (handleData->count - 1));
+        if (undoneValues == NULL)
+        {
+            LogError("CATASTROPHIC error, unable to undo through realloc to a smaller size");
+        }
+        else
+        {
+            handleData->values = undoneValues;
+        }
+
+        handleData->count--;
+    }
+}
+
+static char** findKey(MAP_HANDLE_DATA* handleData, const char* key)
+{
+    char** result;
+    if (handleData->keys == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        size_t i;
+        result = NULL;
+        for (i = 0; i < handleData->count; i++)
+        {
+            if (strcmp(handleData->keys[i], key) == 0)
+            {
+                result = handleData->keys + i;
+                break;
+            }
+        }
+    }
+    return result;
+}
+
+static char** findValue(MAP_HANDLE_DATA* handleData, const char* value)
+{
+    char** result;
+    if (handleData->values == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        size_t i;
+        result = NULL;
+        for (i = 0; i < handleData->count; i++)
+        {
+            if (strcmp(handleData->values[i], value) == 0)
+            {
+                result = handleData->values + i;
+                break;
+            }
+        }
+    }
+    return result;
+}
+
+static int insertNewKeyValue(MAP_HANDLE_DATA* handleData, const char* key, const char* value)
+{
+    int result;
+    if (Map_IncreaseStorageKeysValues(handleData) != 0) /*this increases handleData->count*/
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (mallocAndStrcpy_s(&(handleData->keys[handleData->count - 1]), key) != 0)
+        {
+            Map_DecreaseStorageKeysValues(handleData);
+            LogError("unable to mallocAndStrcpy_s");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mallocAndStrcpy_s(&(handleData->values[handleData->count - 1]), value) != 0)
+            {
+                free(handleData->keys[handleData->count - 1]);
+                Map_DecreaseStorageKeysValues(handleData);
+                LogError("unable to mallocAndStrcpy_s");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+MAP_RESULT Map_Add(MAP_HANDLE handle, const char* key, const char* value)
+{
+    MAP_RESULT result;
+    /*Codes_SRS_MAP_02_006: [If parameter handle is NULL then Map_Add shall return MAP_INVALID_ARG.] */
+    /*Codes_SRS_MAP_02_007: [If parameter key is NULL then Map_Add shall return MAP_INVALID_ARG.]*/
+    /*Codes_SRS_MAP_02_008: [If parameter value is NULL then Map_Add shall return MAP_INVALID_ARG.] */
+    if (
+        (handle == NULL) ||
+        (key == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = MAP_INVALIDARG;
+        LOG_MAP_ERROR;
+    }
+    else
+    {
+        MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA*)handle;
+        /*Codes_SRS_MAP_02_009: [If the key already exists, then Map_Add shall return MAP_KEYEXISTS.] */
+        if (findKey(handleData, key) != NULL)
+        {
+            result = MAP_KEYEXISTS;
+        }
+        else
+        {
+            /* Codes_SRS_MAP_07_009: [If the mapFilterCallback function is not NULL, then the return value will be check and if it is not zero then Map_Add shall return MAP_FILTER_REJECT.] */
+            if ( (handleData->mapFilterCallback != NULL) && (handleData->mapFilterCallback(key, value) != 0) )
+            {
+                result = MAP_FILTER_REJECT;
+            }
+            else
+            {
+                /*Codes_SRS_MAP_02_010: [Otherwise, Map_Add shall add the pair <key,value> to the map.] */
+                if (insertNewKeyValue(handleData, key, value) != 0)
+                {
+                    /*Codes_SRS_MAP_02_011: [If adding the pair <key,value> fails then Map_Add shall return MAP_ERROR.] */
+                    result = MAP_ERROR;
+                    LOG_MAP_ERROR;
+                }
+                else
+                {
+                    /*Codes_SRS_MAP_02_012: [Otherwise, Map_Add shall return MAP_OK.] */
+                    result = MAP_OK;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+MAP_RESULT Map_AddOrUpdate(MAP_HANDLE handle, const char* key, const char* value)
+{
+    MAP_RESULT result;
+    /*Codes_SRS_MAP_02_013: [If parameter handle is NULL then Map_AddOrUpdate shall return MAP_INVALID_ARG.]*/
+    /*Codes_SRS_MAP_02_014: [If parameter key is NULL then Map_AddOrUpdate shall return MAP_INVALID_ARG.]*/
+    /*Codes_SRS_MAP_02_015: [If parameter value is NULL then Map_AddOrUpdate shall return MAP_INVALID_ARG.] */
+    if (
+        (handle == NULL) ||
+        (key == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = MAP_INVALIDARG;
+        LOG_MAP_ERROR;
+    }
+    else
+    {
+        MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA*)handle;
+
+        /* Codes_SRS_MAP_07_008: [If the mapFilterCallback function is not NULL, then the return value will be check and if it is not zero then Map_AddOrUpdate shall return MAP_FILTER_REJECT.] */
+        if (handleData->mapFilterCallback != NULL && handleData->mapFilterCallback(key, value) != 0)
+        {
+            result = MAP_FILTER_REJECT;
+        }
+        else
+        {
+            char** whereIsIt = findKey(handleData, key);
+            if (whereIsIt == NULL)
+            {
+                /*Codes_SRS_MAP_02_017: [Otherwise, Map_AddOrUpdate shall add the pair <key,value> to the map.]*/
+                if (insertNewKeyValue(handleData, key, value) != 0)
+                {
+                    result = MAP_ERROR;
+                    LOG_MAP_ERROR;
+                }
+                else
+                {
+                    result = MAP_OK;
+                }
+            }
+            else
+            {
+                /*Codes_SRS_MAP_02_016: [If the key already exists, then Map_AddOrUpdate shall overwrite the value of the existing key with parameter value.]*/
+                size_t index = whereIsIt - handleData->keys;
+                size_t valueLength = strlen(value);
+                /*try to realloc value of this key*/
+                char* newValue = (char*)realloc(handleData->values[index],valueLength  + 1);
+                if (newValue == NULL)
+                {
+                    result = MAP_ERROR;
+                    LOG_MAP_ERROR;
+                }
+                else
+                {
+                    (void)memcpy(newValue, value, valueLength + 1);
+                    handleData->values[index] = newValue;
+                    /*Codes_SRS_MAP_02_019: [Otherwise, Map_AddOrUpdate shall return MAP_OK.] */
+                    result = MAP_OK;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+MAP_RESULT Map_Delete(MAP_HANDLE handle, const char* key)
+{
+    MAP_RESULT result;
+    /*Codes_SRS_MAP_02_020: [If parameter handle is NULL then Map_Delete shall return MAP_INVALIDARG.]*/
+    /*Codes_SRS_MAP_02_021: [If parameter key is NULL then Map_Delete shall return MAP_INVALIDARG.]*/
+    if (
+        (handle == NULL) ||
+        (key == NULL)
+        )
+    {
+        result = MAP_INVALIDARG;
+        LOG_MAP_ERROR;
+    }
+    else
+    {
+        MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA*)handle;
+        char** whereIsIt = findKey(handleData,key);
+        if (whereIsIt == NULL)
+        {
+            /*Codes_SRS_MAP_02_022: [If key does not exist then Map_Delete shall return MAP_KEYNOTFOUND.]*/
+            result = MAP_KEYNOTFOUND;
+        }
+        else
+        {
+            /*Codes_SRS_MAP_02_023: [Otherwise, Map_Delete shall remove the key and its associated value from the map and return MAP_OK.]*/
+            size_t index = whereIsIt - handleData->keys;
+            free(handleData->keys[index]);
+            free(handleData->values[index]);
+            memmove(handleData->keys + index, handleData->keys + index + 1, (handleData->count - index - 1)*sizeof(char*)); /*if order doesn't matter... then this can be optimized*/
+            memmove(handleData->values + index, handleData->values + index + 1, (handleData->count - index - 1)*sizeof(char*));
+            Map_DecreaseStorageKeysValues(handleData);
+            result = MAP_OK;
+        }
+
+    }
+    return result;
+}
+
+MAP_RESULT Map_ContainsKey(MAP_HANDLE handle, const char* key, bool* keyExists)
+{
+    MAP_RESULT result;
+    /*Codes_SRS_MAP_02_024: [If parameter handle, key or keyExists are NULL then Map_ContainsKey shall return MAP_INVALIDARG.]*/
+    if (
+        (handle ==NULL) ||
+        (key == NULL) ||
+        (keyExists == NULL)
+        )
+    {
+        result = MAP_INVALIDARG;
+        LOG_MAP_ERROR;
+    }
+    else
+    {
+        MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA*)handle;
+        /*Codes_SRS_MAP_02_025: [Otherwise if a key exists then Map_ContainsKey shall return MAP_OK and shall write in keyExists "true".]*/
+        /*Codes_SRS_MAP_02_026: [If a key doesn't exist, then Map_ContainsKey shall return MAP_OK and write in keyExists "false".] */
+        *keyExists = (findKey(handleData, key) != NULL) ? true: false;
+        result = MAP_OK;
+    }
+    return result;
+}
+
+MAP_RESULT Map_ContainsValue(MAP_HANDLE handle, const char* value, bool* valueExists)
+{
+    MAP_RESULT result;
+    /*Codes_SRS_MAP_02_027: [If parameter handle, value or valueExists is NULL then Map_ContainsValue shall return MAP_INVALIDARG.] */
+    if (
+        (handle == NULL) ||
+        (value == NULL) ||
+        (valueExists == NULL)
+        )
+    {
+        result = MAP_INVALIDARG;
+        LOG_MAP_ERROR;
+    }
+    else
+    {
+        MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA*)handle;
+        /*Codes_SRS_MAP_02_028: [Otherwise, if a pair <key, value> has its value equal to the parameter value, the Map_ContainsValue shall return MAP_OK and shall write in valueExists "true".]*/
+        /*Codes_SRS_MAP_02_029: [Otherwise, if such a <key, value> does not exist, then Map_ContainsValue shall return MAP_OK and shall write in valueExists "false".] */
+        *valueExists = (findValue(handleData, value) != NULL) ? true : false;
+        result = MAP_OK;
+    }
+    return result;
+}
+
+const char* Map_GetValueFromKey(MAP_HANDLE handle, const char* key)
+{
+    const char* result;
+    /*Codes_SRS_MAP_02_040: [If parameter handle or key is NULL then Map_GetValueFromKey returns NULL.]*/
+    if (
+        (handle == NULL) ||
+        (key == NULL)
+        )
+    {
+        result = NULL;
+        LogError("invalid parameter to Map_GetValueFromKey");
+    }
+    else
+    {
+        MAP_HANDLE_DATA * handleData = (MAP_HANDLE_DATA *)handle;
+        char** whereIsIt = findKey(handleData, key);
+        if(whereIsIt == NULL)
+        {
+            /*Codes_SRS_MAP_02_041: [If the key is not found, then Map_GetValueFromKey returns NULL.]*/
+            result = NULL;
+        }
+        else
+        {
+            /*Codes_SRS_MAP_02_042: [Otherwise, Map_GetValueFromKey returns the key's value.] */
+            size_t index = whereIsIt - handleData->keys;
+            result = handleData->values[index];
+        }
+    }
+    return result;
+}
+
+MAP_RESULT Map_GetInternals(MAP_HANDLE handle, const char*const** keys, const char*const** values, size_t* count)
+{
+    MAP_RESULT result;
+    /*Codes_SRS_MAP_02_046: [If parameter handle, keys, values or count is NULL then Map_GetInternals shall return MAP_INVALIDARG.] */
+    if (
+        (handle == NULL) ||
+        (keys == NULL) ||
+        (values == NULL) ||
+        (count == NULL)
+        )
+    {
+        result = MAP_INVALIDARG;
+        LOG_MAP_ERROR;
+    }
+    else
+    {
+        /*Codes_SRS_MAP_02_043: [Map_GetInternals shall produce in *keys an pointer to an array of const char* having all the keys stored so far by the map.]*/
+        /*Codes_SRS_MAP_02_044: [Map_GetInternals shall produce in *values a pointer to an array of const char* having all the values stored so far by the map.]*/
+        /*Codes_SRS_MAP_02_045: [  Map_GetInternals shall produce in *count the number of stored keys and values.]*/
+        MAP_HANDLE_DATA * handleData = (MAP_HANDLE_DATA *)handle;
+        *keys =(const char* const*)(handleData->keys);
+        *values = (const char* const*)(handleData->values);
+        *count = handleData->count;
+        result = MAP_OK;
+    }
+    return result;
+}
+
+STRING_HANDLE Map_ToJSON(MAP_HANDLE handle)
+{
+    STRING_HANDLE result;
+    /*Codes_SRS_MAP_02_052: [If parameter handle is NULL then Map_ToJSON shall return NULL.] */
+    if (handle == NULL)
+    {
+        result = NULL;
+        LogError("invalid arg (NULL)");
+    }
+    else
+    {
+        /*Codes_SRS_MAP_02_048: [Map_ToJSON shall produce a STRING_HANDLE representing the content of the MAP.] */
+        result = STRING_construct("{");
+        if (result == NULL)
+        {
+            LogError("STRING_construct failed");
+        }
+        else
+        {
+            size_t i;
+            MAP_HANDLE_DATA* handleData = (MAP_HANDLE_DATA *)handle;
+            /*Codes_SRS_MAP_02_049: [If the MAP is empty, then Map_ToJSON shall produce the string "{}".*/
+            bool breakFor = false; /*used to break out of for*/
+            for (i = 0; (i < handleData->count) && (!breakFor); i++)
+            {
+                /*add one entry to the JSON*/
+                /*Codes_SRS_MAP_02_050: [If the map has properties then Map_ToJSON shall produce the following string:{"name1":"value1", "name2":"value2" ...}]*/
+                STRING_HANDLE key = STRING_new_JSON(handleData->keys[i]);
+                if (key == NULL)
+                {
+                    LogError("STRING_new_JSON failed");
+                    STRING_delete(result);
+                    result = NULL;
+                    breakFor = true;
+                }
+                else
+                {
+                    STRING_HANDLE value = STRING_new_JSON(handleData->values[i]);
+                    if (value == NULL)
+                    {
+                        LogError("STRING_new_JSON failed");
+                        STRING_delete(result);
+                        result = NULL;
+                        breakFor = true;
+                    }
+                    else
+                    {
+                        if (!(
+                            ((i>0) ? (STRING_concat(result, ",") == 0) : 1) &&
+                            (STRING_concat_with_STRING(result, key) == 0) &&
+                            (STRING_concat(result, ":") == 0) &&
+                            (STRING_concat_with_STRING(result, value) == 0)
+                            ))
+                        {
+                            LogError("failed to build the JSON");
+                            STRING_delete(result);
+                            result = NULL;
+                            breakFor = true;
+                        }
+                        else
+                        {
+                            /*all nice, go to the next element in the map*/
+                        }
+                        STRING_delete(value);
+                    }
+                    STRING_delete(key);
+                }
+            }
+
+            if (breakFor)
+            {
+                LogError("error happened during JSON string builder");
+            }
+            else
+            {
+                if (STRING_concat(result, "}") != 0)
+                {
+                    LogError("failed to build the JSON");
+                    STRING_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /*return as is, JSON has been build*/
+                }
+            }
+        }
+    }
+    return result;
+
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/optionhandler.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/optionhandler.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/optionhandler.c	(revision 389)
@@ -0,0 +1,268 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/optionhandler.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/vector.h"
+
+typedef struct OPTION_TAG
+{
+    const char* name;
+    void* storage;
+}OPTION;
+
+typedef struct OPTIONHANDLER_HANDLE_DATA_TAG
+{
+    pfCloneOption cloneOption;
+    pfDestroyOption destroyOption;
+    pfSetOption setOption;
+    VECTOR_HANDLE storage;
+}OPTIONHANDLER_HANDLE_DATA;
+
+static OPTIONHANDLER_HANDLE CreateInternal(pfCloneOption cloneOption, pfDestroyOption destroyOption, pfSetOption setOption)
+{
+    OPTIONHANDLER_HANDLE result;
+
+    result = (OPTIONHANDLER_HANDLE_DATA*)malloc(sizeof(OPTIONHANDLER_HANDLE_DATA));
+    if (result == NULL)
+    {
+        /*Codes_SRS_OPTIONHANDLER_02_004: [ Otherwise, OptionHandler_Create shall fail and return NULL. ]*/
+        LogError("unable to malloc");
+        /*return as is*/
+    }
+    else
+    {
+        /*Codes_SRS_OPTIONHANDLER_02_002: [ OptionHandler_Create shall create an empty VECTOR that will hold pairs of const char* and void*. ]*/
+        result->storage = VECTOR_create(sizeof(OPTION));
+        if (result->storage == NULL)
+        {
+            /*Codes_SRS_OPTIONHANDLER_02_004: [ Otherwise, OptionHandler_Create shall fail and return NULL. ]*/
+            LogError("unable to VECTOR_create");
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            /*Codes_SRS_OPTIONHANDLER_02_003: [ If all the operations succeed then OptionHandler_Create shall succeed and return a non-NULL handle. ]*/
+            result->cloneOption = cloneOption;
+            result->destroyOption = destroyOption;
+            result->setOption = setOption;
+            /*return as is*/
+        }
+    }
+
+    return result;
+}
+
+static OPTIONHANDLER_RESULT AddOptionInternal(OPTIONHANDLER_HANDLE handle, const char* name, const void* value)
+{
+    OPTIONHANDLER_RESULT result;
+    const char* cloneOfName;
+    if (mallocAndStrcpy_s((char**)&cloneOfName, name) != 0)
+    {
+        /*Codes_SRS_OPTIONHANDLER_02_009: [ Otherwise, OptionHandler_AddProperty shall succeed and return OPTIONHANDLER_ERROR. ]*/
+        LogError("unable to clone name");
+        result = OPTIONHANDLER_ERROR;
+    }
+    else
+    {
+        /*Codes_SRS_OPTIONHANDLER_02_006: [ OptionHandler_AddProperty shall call pfCloneOption passing name and value. ]*/
+        void* cloneOfValue = handle->cloneOption(name, value);
+        if (cloneOfValue == NULL)
+        {
+            /*Codes_SRS_OPTIONHANDLER_02_009: [ Otherwise, OptionHandler_AddProperty shall succeed and return OPTIONHANDLER_ERROR. ]*/
+            LogError("unable to clone value");
+            free((void*)cloneOfName);
+            result = OPTIONHANDLER_ERROR;
+        }
+        else
+        {
+            OPTION temp;
+            temp.name = cloneOfName;
+            temp.storage = cloneOfValue;
+            /*Codes_SRS_OPTIONHANDLER_02_007: [ OptionHandler_AddProperty shall use VECTOR APIs to save the name and the newly created clone of value. ]*/
+            if (VECTOR_push_back(handle->storage, &temp, 1) != 0)
+            {
+                /*Codes_SRS_OPTIONHANDLER_02_009: [ Otherwise, OptionHandler_AddProperty shall succeed and return OPTIONHANDLER_ERROR. ]*/
+                LogError("unable to VECTOR_push_back");
+                handle->destroyOption(name, cloneOfValue);
+                free((void*)cloneOfName);
+                result = OPTIONHANDLER_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_OPTIONHANDLER_02_008: [ If all the operations succed then OptionHandler_AddProperty shall succeed and return OPTIONHANDLER_OK. ]*/
+                result = OPTIONHANDLER_OK;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void DestroyInternal(OPTIONHANDLER_HANDLE handle)
+{
+    /*Codes_SRS_OPTIONHANDLER_02_016: [ Otherwise, OptionHandler_Destroy shall free all used resources. ]*/
+    size_t nOptions = VECTOR_size(handle->storage), i;
+    for (i = 0; i < nOptions; i++)
+    {
+        OPTION* option = (OPTION*)VECTOR_element(handle->storage, i);
+        handle->destroyOption(option->name, option->storage);
+        free((void*)option->name);
+    }
+
+    VECTOR_destroy(handle->storage);
+    free(handle);
+}
+
+OPTIONHANDLER_HANDLE OptionHandler_Create(pfCloneOption cloneOption, pfDestroyOption destroyOption, pfSetOption setOption)
+{
+    /*Codes_SRS_OPTIONHANDLER_02_001: [ OptionHandler_Create shall fail and retun NULL if any parameters are NULL. ]*/
+    OPTIONHANDLER_HANDLE_DATA* result;
+    if (
+        (cloneOption == NULL) ||
+        (destroyOption == NULL) ||
+        (setOption == NULL)
+        )
+    {
+        LogError("invalid parameter = pfCloneOption cloneOption=%p, pfDestroyOption destroyOption=%p, pfSetOption setOption=%p", cloneOption, destroyOption, setOption);
+        result = NULL;
+    }
+    else
+    {
+        result = CreateInternal(cloneOption, destroyOption, setOption);
+    }
+
+    return result;
+
+}
+
+OPTIONHANDLER_HANDLE OptionHandler_Clone(OPTIONHANDLER_HANDLE handler)
+{
+    OPTIONHANDLER_HANDLE_DATA* result;
+
+    if (handler == NULL)
+    {
+        /* Codes_SRS_OPTIONHANDLER_01_010: [ If handler is NULL, OptionHandler_Clone shall fail and return NULL. ]*/
+        LogError("NULL argument: handler");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_OPTIONHANDLER_01_001: [ OptionHandler_Clone shall clone an existing option handler instance. ]*/
+        /* Codes_SRS_OPTIONHANDLER_01_002: [ On success it shall return a non-NULL handle. ]*/
+        /* Codes_SRS_OPTIONHANDLER_01_003: [ OptionHandler_Clone shall allocate memory for the new option handler instance. ]*/
+        result = CreateInternal(handler->cloneOption, handler->destroyOption, handler->setOption);
+        if (result == NULL)
+        {
+            /* Codes_SRS_OPTIONHANDLER_01_004: [ If allocating memory fails, OptionHandler_Clone shall return NULL. ]*/
+            LogError("unable to create option handler");
+        }
+        else
+        {
+            /* Codes_SRS_OPTIONHANDLER_01_005: [ OptionHandler_Clone shall iterate through all the options stored by the option handler to be cloned by using VECTOR's iteration mechanism. ]*/
+            size_t option_count = VECTOR_size(handler->storage);
+            size_t i;
+
+            for (i = 0; i < option_count; i++)
+            {
+                OPTION* option = (OPTION*)VECTOR_element(handler->storage, i);
+
+                /* Codes_SRS_OPTIONHANDLER_01_006: [ For each option the option name shall be cloned by calling mallocAndStrcpy_s. ]*/
+                /* Codes_SRS_OPTIONHANDLER_01_007: [ For each option the value shall be cloned by using the cloning function associated with the source option handler handler. ]*/
+                if (AddOptionInternal(result, option->name, option->storage) != OPTIONHANDLER_OK)
+                {
+                    /* Codes_SRS_OPTIONHANDLER_01_008: [ If cloning one of the option names fails, OptionHandler_Clone shall return NULL. ]*/
+                    /* Codes_SRS_OPTIONHANDLER_01_009: [ If cloning one of the option values fails, OptionHandler_Clone shall return NULL. ]*/
+                    LogError("Error cloning option %s", option->name);
+                    break;
+                }
+            }
+
+            if (i < option_count)
+            {
+                DestroyInternal(result);
+                result = NULL;
+            }
+        }
+    }
+
+    return result;
+}
+
+OPTIONHANDLER_RESULT OptionHandler_AddOption(OPTIONHANDLER_HANDLE handle, const char* name, const void* value)
+{
+    OPTIONHANDLER_RESULT result;
+    /*Codes_SRS_OPTIONHANDLER_02_001: [ OptionHandler_Create shall fail and retun NULL if any parameters are NULL. ]*/
+    if (
+        (handle == NULL) ||
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        LogError("invalid arguments: OPTIONHANDLER_HANDLE handle=%p, const char* name=%p, void* value=%p", handle, name, value);
+        result= OPTIONHANDLER_INVALIDARG;
+    }
+    else
+    {
+        result = AddOptionInternal(handle, name, value);
+    }
+
+    return result;
+}
+
+OPTIONHANDLER_RESULT OptionHandler_FeedOptions(OPTIONHANDLER_HANDLE handle, void* destinationHandle)
+{
+    OPTIONHANDLER_RESULT result;
+    /*Codes_SRS_OPTIONHANDLER_02_010: [ OptionHandler_FeedOptions shall fail and return OPTIONHANDLER_INVALIDARG if any argument is NULL. ]*/
+    if (
+        (handle == NULL) ||
+        (destinationHandle == NULL)
+        )
+    {
+        LogError("invalid arguments OPTIONHANDLER_HANDLE handle=%p, void* destinationHandle=%p", handle, destinationHandle);
+        result = OPTIONHANDLER_INVALIDARG;
+    }
+    else
+    {
+        /*Codes_SRS_OPTIONHANDLER_02_011: [ Otherwise, OptionHandler_FeedOptions shall use VECTOR's iteration mechanisms to retrieve pairs of name, value (const char* and void*). ]*/
+        size_t nOptions = VECTOR_size(handle->storage), i;
+        for (i = 0;i < nOptions;i++)
+        {
+            OPTION* option = (OPTION*)VECTOR_element(handle->storage, i);
+            /*Codes_SRS_OPTIONHANDLER_02_012: [ OptionHandler_FeedOptions shall call for every pair of name,value setOption passing destinationHandle, name and value. ]*/
+            if (handle->setOption(destinationHandle, option->name, option->storage) != 0)
+            {
+                LogError("failure while trying to SetOption with option %s", option->name);
+                break;
+            }
+        }
+
+        if (i == nOptions)
+        {
+            /*Codes_SRS_OPTIONHANDLER_02_014: [ Otherwise, OptionHandler_FeedOptions shall fail and return OPTIONHANDLER_ERROR. ]*/
+            result = OPTIONHANDLER_OK;
+        }
+        else
+        {
+            /*Codes_SRS_OPTIONHANDLER_02_013: [ If all the operations succeed then OptionHandler_FeedOptions shall succeed and return OPTIONHANDLER_OK. ]*/
+            result = OPTIONHANDLER_ERROR;
+        }
+    }
+    return result;
+}
+
+void OptionHandler_Destroy(OPTIONHANDLER_HANDLE handle)
+{
+    /*Codes_SRS_OPTIONHANDLER_02_015: [ OptionHandler_Destroy shall do nothing if parameter handle is NULL. ]*/
+    if (handle == NULL)
+    {
+        LogError("invalid argument OPTIONHANDLER_HANDLE handle=%p", handle);
+    }
+    else
+    {
+        DestroyInternal(handle);
+    }
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/sastoken.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/sastoken.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/sastoken.c	(revision 389)
@@ -0,0 +1,346 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/sastoken.h"
+#include "azure_c_shared_utility/urlencode.h"
+#include "azure_c_shared_utility/hmacsha256.h"
+#include "azure_c_shared_utility/azure_base64.h"
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+
+static double getExpiryValue(const char* expiryASCII)
+{
+    double value = 0;
+    size_t i = 0;
+    for (i = 0; expiryASCII[i] != '\0'; i++)
+    {
+        if (expiryASCII[i] >= '0' && expiryASCII[i] <= '9')
+        {
+            value = value * 10 + (double)(expiryASCII[i] - '0');
+        }
+        else
+        {
+            value = 0;
+            break;
+        }
+    }
+    return value;
+}
+
+bool SASToken_Validate(STRING_HANDLE sasToken)
+{
+    bool result;
+    /*Codes_SRS_SASTOKEN_25_025: [**SASToken_Validate shall get the SASToken value by invoking STRING_c_str on the handle.**]***/
+    const char* sasTokenArray = STRING_c_str(sasToken);
+
+    /* Codes_SRS_SASTOKEN_25_024: [**If handle is NULL then SASToken_Validate shall return false.**] */
+    /* Codes_SRS_SASTOKEN_25_026: [**If STRING_c_str on handle return NULL then SASToken_Validate shall return false.**] */
+    if (sasToken == NULL || sasTokenArray == NULL)
+    {
+        result = false;
+    }
+    else
+    {
+        int seStart = -1, seStop = -1;
+        int srStart = -1, srStop = -1;
+        int sigStart = -1, sigStop = -1;
+        int tokenLength = (int)STRING_length(sasToken);
+        int i;
+        for (i = 0; i < tokenLength; i++)
+        {
+            if (sasTokenArray[i] == 's' && sasTokenArray[i + 1] == 'e' && sasTokenArray[i + 2] == '=') // Look for se=
+            {
+                seStart = i + 3;
+                if (srStart > 0 && srStop < 0)
+                {
+                    if (sasTokenArray[i - 1] != '&' && sasTokenArray[i - 1] == ' ') // look for either & or space
+                        srStop = i - 1;
+                    else if (sasTokenArray[i - 1] == '&')
+                        srStop = i - 2;
+                    else
+                        seStart = -1; // as the format is not either "&se=" or " se="
+                }
+                else if (sigStart > 0 && sigStop < 0)
+                {
+                    if (sasTokenArray[i - 1] != '&' && sasTokenArray[i - 1] == ' ')
+                        sigStop = i - 1;
+                    else if (sasTokenArray[i - 1] == '&')
+                        sigStop = i - 2;
+                    else
+                        seStart = -1;
+                }
+            }
+            else if (sasTokenArray[i] == 's' && sasTokenArray[i + 1] == 'r' && sasTokenArray[i + 2] == '=') // Look for sr=
+            {
+                srStart = i + 3;
+                if (seStart > 0 && seStop < 0)
+                {
+                    if (sasTokenArray[i - 1] != '&' && sasTokenArray[i - 1] == ' ')
+                        seStop = i - 1;
+                    else if (sasTokenArray[i - 1] == '&')
+                        seStop = i - 2;
+                    else
+                        srStart = -1;
+                }
+                else if (sigStart > 0 && sigStop < 0)
+                {
+                    if (sasTokenArray[i - 1] != '&' && sasTokenArray[i - 1] == ' ')
+                        sigStop = i - 1;
+                    else if (sasTokenArray[i - 1] == '&')
+                        sigStop = i - 2;
+                    else
+                        srStart = -1;
+                }
+            }
+            else if (sasTokenArray[i] == 's' && sasTokenArray[i + 1] == 'i' && sasTokenArray[i + 2] == 'g' && sasTokenArray[i + 3] == '=') // Look for sig=
+            {
+                sigStart = i + 4;
+                if (srStart > 0 && srStop < 0)
+                {
+                    if (sasTokenArray[i - 1] != '&' && sasTokenArray[i - 1] == ' ')
+                        srStop = i - 1;
+                    else if (sasTokenArray[i - 1] == '&')
+                        srStop = i - 2;
+                    else
+                        sigStart = -1;
+                }
+                else if (seStart > 0 && seStop < 0)
+                {
+                    if (sasTokenArray[i - 1] != '&' && sasTokenArray[i - 1] == ' ')
+                        seStop = i - 1;
+                    else if (sasTokenArray[i - 1] == '&')
+                        seStop = i - 2;
+                    else
+                        sigStart = -1;
+                }
+            }
+        }
+
+        /*Codes_SRS_SASTOKEN_25_027: [**If SASTOKEN does not obey the SASToken format then SASToken_Validate shall return false.**]***/
+        /*Codes_SRS_SASTOKEN_25_028: [**SASToken_validate shall check for the presence of sr, se and sig from the token and return false if not found**]***/
+        if (seStart < 0 || srStart < 0 || sigStart < 0)
+        {
+            result = false;
+        }
+        else
+        {
+            if (seStop < 0)
+            {
+                seStop = tokenLength;
+            }
+            else if (srStop < 0)
+            {
+                srStop = tokenLength;
+            }
+            else if (sigStop < 0)
+            {
+                sigStop = tokenLength;
+            }
+
+            if ((seStop <= seStart) ||
+                (srStop <= srStart) ||
+                (sigStop <= sigStart))
+            {
+                result = false;
+            }
+            else
+            {
+                char* expiryASCII = (char*)malloc(seStop - seStart + 1);
+                /*Codes_SRS_SASTOKEN_25_031: [**If malloc fails during validation then SASToken_Validate shall return false.**]***/
+                if (expiryASCII == NULL)
+                {
+                    result = false;
+                }
+                else
+                {
+                    double expiry;
+                    // Add the Null terminator here
+                    memset(expiryASCII, 0, seStop - seStart + 1);
+                    for (i = seStart; i < seStop; i++)
+                    {
+                        // The se contains the expiration values, if a & token is encountered then
+                        // the se field is complete.
+                        if (sasTokenArray[i] == '&')
+                        {
+                            break;
+                        }
+                        expiryASCII[i - seStart] = sasTokenArray[i];
+                    }
+                    expiry = getExpiryValue(expiryASCII);
+                    /*Codes_SRS_SASTOKEN_25_029: [**SASToken_validate shall check for expiry time from token and if token has expired then would return false **]***/
+                    if (expiry <= 0)
+                    {
+                        result = false;
+                    }
+                    else
+                    {
+                        double secSinceEpoch = get_difftime(get_time(NULL), (time_t)0);
+                        if (expiry < secSinceEpoch)
+                        {
+                            /*Codes_SRS_SASTOKEN_25_029: [**SASToken_validate shall check for expiry time from token and if token has expired then would return false **]***/
+                            result = false;
+                        }
+                        else
+                        {
+                            /*Codes_SRS_SASTOKEN_25_030: [**SASToken_validate shall return true only if the format is obeyed and the token has not yet expired **]***/
+                            result = true;
+                        }
+                    }
+                    free(expiryASCII);
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+static STRING_HANDLE construct_sas_token(const char* key, const char* scope, const char* keyname, size_t expiry)
+{
+    STRING_HANDLE result;
+
+    char tokenExpirationTime[32] = { 0 };
+
+    BUFFER_HANDLE decodedKey;
+
+    /*Codes_SRS_SASTOKEN_06_029: [The key parameter is decoded from base64.]*/
+    if ((decodedKey = Azure_Base64_Decode(key)) == NULL)
+    {
+        /*Codes_SRS_SASTOKEN_06_030: [If there is an error in the decoding then SASToken_Create shall return NULL.]*/
+        LogError("Unable to decode the key for generating the SAS.");
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_SASTOKEN_06_026: [If the conversion to string form fails for any reason then SASToken_Create shall return NULL.]*/
+        if (size_tToString(tokenExpirationTime, sizeof(tokenExpirationTime), expiry) != 0)
+        {
+            LogError("For some reason converting seconds to a string failed.  No SAS can be generated.");
+            result = NULL;
+        }
+        else
+        {
+            STRING_HANDLE toBeHashed = NULL;
+            BUFFER_HANDLE hash = NULL;
+            if (((hash = BUFFER_new()) == NULL) ||
+                ((toBeHashed = STRING_new()) == NULL) ||
+                ((result = STRING_new()) == NULL))
+            {
+                LogError("Unable to allocate memory to prepare SAS token.");
+                result = NULL;
+            }
+            else
+            {
+                /*Codes_SRS_SASTOKEN_06_009: [The scope is the basis for creating a STRING_HANDLE.]*/
+                /*Codes_SRS_SASTOKEN_06_010: [A "\n" is appended to that string.]*/
+                /*Codes_SRS_SASTOKEN_06_011: [tokenExpirationTime is appended to that string.]*/
+                if ((STRING_concat(toBeHashed, scope) != 0) ||
+                    (STRING_concat(toBeHashed, "\n") != 0) ||
+                    (STRING_concat(toBeHashed, tokenExpirationTime) != 0))
+                {
+                    LogError("Unable to build the input to the HMAC to prepare SAS token.");
+                    STRING_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    STRING_HANDLE base64Signature = NULL;
+                    STRING_HANDLE urlEncodedSignature = NULL;
+                    size_t inLen = STRING_length(toBeHashed);
+                    const unsigned char* inBuf = (const unsigned char*)STRING_c_str(toBeHashed);
+                    size_t outLen = BUFFER_length(decodedKey);
+                    unsigned char* outBuf = BUFFER_u_char(decodedKey);
+                    /*Codes_SRS_SASTOKEN_06_013: [If an error is returned from the HMAC256 function then NULL is returned from SASToken_Create.]*/
+                    /*Codes_SRS_SASTOKEN_06_012: [An HMAC256 hash is calculated using the decodedKey, over toBeHashed.]*/
+                    /*Codes_SRS_SASTOKEN_06_014: [If there are any errors from the following operations then NULL shall be returned.]*/
+                    /*Codes_SRS_SASTOKEN_06_015: [The hash is base 64 encoded.]*/
+                    /*Codes_SRS_SASTOKEN_06_028: [base64Signature shall be url encoded.]*/
+                    /*Codes_SRS_SASTOKEN_06_016: [The string "SharedAccessSignature sr=" is the first part of the result of SASToken_Create.]*/
+                    /*Codes_SRS_SASTOKEN_06_017: [The scope parameter is appended to result.]*/
+                    /*Codes_SRS_SASTOKEN_06_018: [The string "&sig=" is appended to result.]*/
+                    /*Codes_SRS_SASTOKEN_06_019: [The string urlEncodedSignature shall be appended to result.]*/
+                    /*Codes_SRS_SASTOKEN_06_020: [The string "&se=" shall be appended to result.]*/
+                    /*Codes_SRS_SASTOKEN_06_021: [tokenExpirationTime is appended to result.]*/
+                    /*Codes_SRS_SASTOKEN_06_022: [If keyName is non-NULL, the string "&skn=" is appended to result.]*/
+                    /*Codes_SRS_SASTOKEN_06_023: [If keyName is non-NULL, the argument keyName is appended to result.]*/
+                    if ((HMACSHA256_ComputeHash(outBuf, outLen, inBuf, inLen, hash) != HMACSHA256_OK) ||
+                        ((base64Signature = Azure_Base64_Encode(hash)) == NULL) ||
+                        ((urlEncodedSignature = URL_Encode(base64Signature)) == NULL) ||
+                        (STRING_copy(result, "SharedAccessSignature sr=") != 0) ||
+                        (STRING_concat(result, scope) != 0) ||
+                        (STRING_concat(result, "&sig=") != 0) ||
+                        (STRING_concat_with_STRING(result, urlEncodedSignature) != 0) ||
+                        (STRING_concat(result, "&se=") != 0) ||
+                        (STRING_concat(result, tokenExpirationTime) != 0) ||
+                        ((keyname != NULL) && (STRING_concat(result, "&skn=") != 0)) ||
+                        ((keyname != NULL) && (STRING_concat(result, keyname) != 0)))
+                    {
+                        LogError("Unable to build the SAS token.");
+                        STRING_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /* everything OK */
+                    }
+                    STRING_delete(base64Signature);
+                    STRING_delete(urlEncodedSignature);
+                }
+            }
+            STRING_delete(toBeHashed);
+            BUFFER_delete(hash);
+        }
+        BUFFER_delete(decodedKey);
+    }
+    return result;
+}
+
+STRING_HANDLE SASToken_Create(STRING_HANDLE key, STRING_HANDLE scope, STRING_HANDLE keyName, size_t expiry)
+{
+    STRING_HANDLE result;
+
+    /*Codes_SRS_SASTOKEN_06_001: [If key is NULL then SASToken_Create shall return NULL.]*/
+    /*Codes_SRS_SASTOKEN_06_003: [If scope is NULL then SASToken_Create shall return NULL.]*/
+    /*Codes_SRS_SASTOKEN_06_007: [keyName is optional and can be set to NULL.]*/
+    if ((key == NULL) ||
+        (scope == NULL))
+    {
+        LogError("Invalid Parameter to SASToken_Create. handle key: %p, handle scope: %p, handle keyName: %p", key, scope, keyName);
+        result = NULL;
+    }
+    else
+    {
+        const char* string_key = STRING_c_str(key);
+        const char* string_scope = STRING_c_str(scope);
+        const char* string_name = STRING_c_str(keyName);
+        result = construct_sas_token(string_key, string_scope, string_name, expiry);
+    }
+    return result;
+}
+
+STRING_HANDLE SASToken_CreateString(const char* key, const char* scope, const char* keyName, size_t expiry)
+{
+    STRING_HANDLE result;
+
+    /*Codes_SRS_SASTOKEN_06_001: [If key is NULL then SASToken_Create shall return NULL.]*/
+    /*Codes_SRS_SASTOKEN_06_003: [If scope is NULL then SASToken_Create shall return NULL.]*/
+    /*Codes_SRS_SASTOKEN_06_007: [keyName is optional and can be set to NULL.]*/
+    if ((key == NULL) ||
+        (scope == NULL))
+    {
+        LogError("Invalid Parameter to SASToken_Create. handle key: %p, handle scope: %p, handle keyName: %p", key, scope, keyName);
+        result = NULL;
+    }
+    else
+    {
+        result = construct_sas_token(key, scope, keyName, expiry);
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/sha1.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/sha1.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/sha1.c	(revision 389)
@@ -0,0 +1,440 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/**************************** sha1.c ****************************/
+/******************** See RFC 4634 for details ******************/
+/*
+*  Description:
+*      This file implements the Secure Hash Signature Standard
+*      algorithms as defined in the National Institute of Standards
+*      and Technology Federal Information Processing Standards
+*      Publication (FIPS PUB) 180-1 published on April 17, 1995, 180-2
+*      published on August 1, 2002, and the FIPS PUB 180-2 Change
+*      Notice published on February 28, 2004.
+*
+*      A combined document showing all algorithms is available at
+*              http://csrc.nist.gov/publications/fips/
+*              fips180-2/fips180-2withchangenotice.pdf
+*
+*      The SHA-1 algorithm produces a 160-bit message digest for a
+*      given data stream.  It should take about 2**n steps to find a
+*      message with the same digest as a given message and
+*      2**(n/2) to find any two messages with the same digest,
+*      when n is the digest size in bits.  Therefore, this
+*      algorithm can serve as a means of providing a
+*      "fingerprint" for a message.
+*
+*  Portability Issues:
+*      SHA-1 is defined in terms of 32-bit "words".  This code
+*      uses <stdint.h> (included via "sha.h") to define 32 and 8
+*      bit unsigned integer types.  If your C compiler does not
+*      support 32 bit unsigned integers, this code is not
+*      appropriate.
+*
+*  Caveats:
+*      SHA-1 is designed to work with messages less than 2^64 bits
+*      long. This implementation uses SHA1Input() to hash the bits
+*      that are a multiple of the size of an 8-bit character, and then
+*      uses SHA1FinalBits() to hash the final few bits of the input.
+*/
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+
+#include "azure_c_shared_utility/sha.h"
+#include "azure_c_shared_utility/sha-private.h"
+
+/*
+*  Define the SHA1 circular left shift macro
+*/
+#define SHA1_ROTL(bits,word) \
+                (((word) << (bits)) | ((word) >> (32-(bits))))
+
+/*
+* add "length" to the length
+*/
+#define SHA1AddLength(context, length)                     \
+    (addTemp = (context)->Length_Low,                      \
+     (context)->Corrupted =                                \
+        (((context)->Length_Low += (length)) < addTemp) && \
+        (++(context)->Length_High == 0) ? 1 : 0)
+
+/* Local Function Prototypes */
+static void SHA1Finalize(SHA1Context *context, uint8_t Pad_Byte);
+static void SHA1PadMessage(SHA1Context *, uint8_t Pad_Byte);
+static void SHA1ProcessMessageBlock(SHA1Context *);
+
+/*
+*  SHA1Reset
+*
+*  Description:
+*      This function will initialize the SHA1Context in preparation
+*      for computing a new SHA1 message digest.
+*
+*  Parameters:
+*      context: [in/out]
+*          The context to reset.
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int SHA1Reset(SHA1Context *context)
+{
+    if (!context)
+        return shaNull;
+
+    context->Length_Low = 0;
+    context->Length_High = 0;
+    context->Message_Block_Index = 0;
+
+
+    /* Initial Hash Values: FIPS-180-2 section 5.3.1 */
+    context->Intermediate_Hash[0] = 0x67452301;
+    context->Intermediate_Hash[1] = 0xEFCDAB89;
+    context->Intermediate_Hash[2] = 0x98BADCFE;
+    context->Intermediate_Hash[3] = 0x10325476;
+    context->Intermediate_Hash[4] = 0xC3D2E1F0;
+
+    context->Computed = 0;
+    context->Corrupted = 0;
+
+    return shaSuccess;
+}
+
+/*
+*  SHA1Input
+*
+*  Description:
+*      This function accepts an array of octets as the next portion
+*      of the message.
+*
+*  Parameters:
+*      context: [in/out]
+*          The SHA context to update
+*      message_array: [in]
+*          An array of characters representing the next portion of
+*          the message.
+*      length: [in]
+*          The length of the message in message_array
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int SHA1Input(SHA1Context *context,
+    const uint8_t *message_array, unsigned length)
+{
+    uint32_t addTemp;
+    if (!length)
+        return shaSuccess;
+
+    if (!context || !message_array)
+        return shaNull;
+
+    if (context->Computed) {
+        context->Corrupted = shaStateError;
+        return shaStateError;
+    }
+
+    if (context->Corrupted)
+        return context->Corrupted;
+
+    while (length-- && !context->Corrupted) {
+        context->Message_Block[context->Message_Block_Index++] =
+            (*message_array & 0xFF);
+
+        if (!SHA1AddLength(context, 8) &&
+            (context->Message_Block_Index == SHA1_Message_Block_Size))
+            SHA1ProcessMessageBlock(context);
+
+        message_array++;
+    }
+
+    return shaSuccess;
+}
+
+/*
+* SHA1FinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA1FinalBits(SHA1Context *context, const uint8_t message_bits,
+    unsigned int length)
+{
+    uint32_t addTemp;
+
+    uint8_t masks[8] = {
+        /* 0 0b00000000 */ 0x00, /* 1 0b10000000 */ 0x80,
+        /* 2 0b11000000 */ 0xC0, /* 3 0b11100000 */ 0xE0,
+        /* 4 0b11110000 */ 0xF0, /* 5 0b11111000 */ 0xF8,
+        /* 6 0b11111100 */ 0xFC, /* 7 0b11111110 */ 0xFE
+    };
+    uint8_t markbit[8] = {
+        /* 0 0b10000000 */ 0x80, /* 1 0b01000000 */ 0x40,
+        /* 2 0b00100000 */ 0x20, /* 3 0b00010000 */ 0x10,
+        /* 4 0b00001000 */ 0x08, /* 5 0b00000100 */ 0x04,
+        /* 6 0b00000010 */ 0x02, /* 7 0b00000001 */ 0x01
+    };
+
+    if (!length)
+        return shaSuccess;
+
+    if (!context)
+        return shaNull;
+
+    if (context->Computed || (length >= 8) || (length == 0)) {
+        context->Corrupted = shaStateError;
+        return shaStateError;
+    }
+
+    if (context->Corrupted)
+        return context->Corrupted;
+
+    SHA1AddLength(context, length);
+    SHA1Finalize(context,
+        (uint8_t)((message_bits & masks[length]) | markbit[length]));
+
+    return shaSuccess;
+}
+
+/*
+* SHA1Result
+*
+* Description:
+*   This function will return the 160-bit message digest into the
+*   Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 19th element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA-1 hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA1Result(SHA1Context *context,
+    uint8_t Message_Digest[SHA1HashSize])
+{
+    int i;
+
+    if (!context || !Message_Digest)
+        return shaNull;
+
+    if (context->Corrupted)
+        return context->Corrupted;
+
+    if (!context->Computed)
+        SHA1Finalize(context, 0x80);
+
+    for (i = 0; i < SHA1HashSize; ++i)
+        Message_Digest[i] = (uint8_t)(context->Intermediate_Hash[i >> 2]
+        >> 8 * (3 - (i & 0x03)));
+
+    return shaSuccess;
+}
+
+/*
+* SHA1Finalize
+*
+* Description:
+*   This helper function finishes off the digest calculations.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   Pad_Byte: [in]
+*     The last byte to add to the digest before the 0-padding
+*     and length. This will contain the last bits of the message
+*     followed by another single bit. If the message was an
+*     exact multiple of 8-bits long, Pad_Byte will be 0x80.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+static void SHA1Finalize(SHA1Context *context, uint8_t Pad_Byte)
+{
+    int i;
+    SHA1PadMessage(context, Pad_Byte);
+    /* message may be sensitive, clear it out */
+    for (i = 0; i < SHA1_Message_Block_Size; ++i)
+        context->Message_Block[i] = 0;
+    context->Length_Low = 0;  /* and clear length */
+    context->Length_High = 0;
+    context->Computed = 1;
+}
+
+/*
+* SHA1PadMessage
+*
+* Description:
+*   According to the standard, the message must be padded to an
+*   even 512 bits. The first padding bit must be a '1'. The last
+*   64 bits represent the length of the original message. All bits
+*   in between should be 0. This helper function will pad the
+*   message according to those rules by filling the Message_Block
+*   array accordingly. When it returns, it can be assumed that the
+*   message digest has been computed.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to pad
+*   Pad_Byte: [in]
+*     The last byte to add to the digest before the 0-padding
+*     and length. This will contain the last bits of the message
+*     followed by another single bit. If the message was an
+*     exact multiple of 8-bits long, Pad_Byte will be 0x80.
+*
+* Returns:
+*   Nothing.
+*/
+static void SHA1PadMessage(SHA1Context *context, uint8_t Pad_Byte)
+{
+    /*
+    * Check to see if the current message block is too small to hold
+    * the initial padding bits and length. If so, we will pad the
+    * block, process it, and then continue padding into a second
+    * block.
+    */
+    if (context->Message_Block_Index >= (SHA1_Message_Block_Size - 8)) {
+        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
+        while (context->Message_Block_Index < SHA1_Message_Block_Size)
+            context->Message_Block[context->Message_Block_Index++] = 0;
+
+        SHA1ProcessMessageBlock(context);
+    }
+    else
+        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
+
+    while (context->Message_Block_Index < (SHA1_Message_Block_Size - 8))
+        context->Message_Block[context->Message_Block_Index++] = 0;
+
+    /*
+    * Store the message length as the last 8 octets
+    */
+    context->Message_Block[56] = (uint8_t)(context->Length_High >> 24);
+    context->Message_Block[57] = (uint8_t)(context->Length_High >> 16);
+
+    context->Message_Block[58] = (uint8_t)(context->Length_High >> 8);
+    context->Message_Block[59] = (uint8_t)(context->Length_High);
+    context->Message_Block[60] = (uint8_t)(context->Length_Low >> 24);
+    context->Message_Block[61] = (uint8_t)(context->Length_Low >> 16);
+    context->Message_Block[62] = (uint8_t)(context->Length_Low >> 8);
+    context->Message_Block[63] = (uint8_t)(context->Length_Low);
+
+    SHA1ProcessMessageBlock(context);
+}
+
+/*
+* SHA1ProcessMessageBlock
+*
+* Description:
+*   This helper function will process the next 512 bits of the
+*   message stored in the Message_Block array.
+*
+* Parameters:
+*   None.
+*
+* Returns:
+*   Nothing.
+*
+* Comments:
+*   Many of the variable names in this code, especially the
+*   single character names, were used because those were the
+*   names used in the publication.
+*/
+static void SHA1ProcessMessageBlock(SHA1Context *context)
+{
+    /* Constants defined in FIPS-180-2, section 4.2.1 */
+    const uint32_t K[4] = {
+        0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6
+    };
+    int        t;               /* Loop counter */
+    uint32_t   temp;            /* Temporary word value */
+    uint32_t   W[80];           /* Word sequence */
+    uint32_t   A, B, C, D, E;   /* Word buffers */
+
+    /*
+    * Initialize the first 16 words in the array W
+    */
+    for (t = 0; t < 16; t++) {
+        W[t] = ((uint32_t)context->Message_Block[t * 4]) << 24;
+        W[t] |= ((uint32_t)context->Message_Block[t * 4 + 1]) << 16;
+        W[t] |= ((uint32_t)context->Message_Block[t * 4 + 2]) << 8;
+        W[t] |= ((uint32_t)context->Message_Block[t * 4 + 3]);
+    }
+
+    for (t = 16; t < 80; t++)
+        W[t] = SHA1_ROTL(1, W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16]);
+
+    A = context->Intermediate_Hash[0];
+    B = context->Intermediate_Hash[1];
+    C = context->Intermediate_Hash[2];
+    D = context->Intermediate_Hash[3];
+    E = context->Intermediate_Hash[4];
+
+    for (t = 0; t < 20; t++) {
+        temp = SHA1_ROTL(5, A) + SHA_Ch(B, C, D) + E + W[t] + K[0];
+        E = D;
+        D = C;
+        C = SHA1_ROTL(30, B);
+        B = A;
+        A = temp;
+    }
+
+    for (t = 20; t < 40; t++) {
+        temp = SHA1_ROTL(5, A) + SHA_Parity(B, C, D) + E + W[t] + K[1];
+        E = D;
+        D = C;
+        C = SHA1_ROTL(30, B);
+        B = A;
+        A = temp;
+    }
+
+    for (t = 40; t < 60; t++) {
+        temp = SHA1_ROTL(5, A) + SHA_Maj(B, C, D) + E + W[t] + K[2];
+        E = D;
+        D = C;
+        C = SHA1_ROTL(30, B);
+        B = A;
+        A = temp;
+    }
+
+    for (t = 60; t < 80; t++) {
+        temp = SHA1_ROTL(5, A) + SHA_Parity(B, C, D) + E + W[t] + K[3];
+        E = D;
+        D = C;
+        C = SHA1_ROTL(30, B);
+        B = A;
+        A = temp;
+    }
+
+    context->Intermediate_Hash[0] += A;
+    context->Intermediate_Hash[1] += B;
+    context->Intermediate_Hash[2] += C;
+
+    context->Intermediate_Hash[3] += D;
+    context->Intermediate_Hash[4] += E;
+
+    context->Message_Block_Index = 0;
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/sha224.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/sha224.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/sha224.c	(revision 389)
@@ -0,0 +1,624 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*************************** sha224-256.c ***************************/
+/********************* See RFC 4634 for details *********************/
+/*
+* Description:
+*   This file implements the Secure Hash Signature Standard
+*   algorithms as defined in the National Institute of Standards
+*   and Technology Federal Information Processing Standards
+*   Publication (FIPS PUB) 180-1 published on April 17, 1995, 180-2
+*   published on August 1, 2002, and the FIPS PUB 180-2 Change
+*   Notice published on February 28, 2004.
+*
+*   A combined document showing all algorithms is available at
+*       http://csrc.nist.gov/publications/fips/
+*       fips180-2/fips180-2withchangenotice.pdf
+*
+*   The SHA-224 and SHA-256 algorithms produce 224-bit and 256-bit
+*   message digests for a given data stream. It should take about
+*   2**n steps to find a message with the same digest as a given
+*   message and 2**(n/2) to find any two messages with the same
+*   digest, when n is the digest size in bits. Therefore, this
+*   algorithm can serve as a means of providing a
+*   "fingerprint" for a message.
+*
+* Portability Issues:
+*   SHA-224 and SHA-256 are defined in terms of 32-bit "words".
+*   This code uses <stdint.h> (included via "sha.h") to define 32
+*   and 8 bit unsigned integer types. If your C compiler does not
+*   support 32 bit unsigned integers, this code is not
+*   appropriate.
+*
+* Caveats:
+*   SHA-224 and SHA-256 are designed to work with messages less
+*   than 2^64 bits long. This implementation uses SHA224/256Input()
+*   to hash the bits that are a multiple of the size of an 8-bit
+*   character, and then uses SHA224/256FinalBits() to hash the
+*   final few bits of the input.
+*/
+
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "azure_c_shared_utility/sha.h"
+#include "azure_c_shared_utility/sha-private.h"
+/* Define the SHA shift, rotate left and rotate right macro */
+#define SHA256_SHR(bits,word)      ((word) >> (bits))
+#define SHA256_ROTL(bits,word)                         \
+  (((word) << (bits)) | ((word) >> (32-(bits))))
+#define SHA256_ROTR(bits,word)                         \
+  (((word) >> (bits)) | ((word) << (32-(bits))))
+
+/* Define the SHA SIGMA and sigma macros */
+#define SHA256_SIGMA0(word)   \
+  (SHA256_ROTR( 2,word) ^ SHA256_ROTR(13,word) ^ SHA256_ROTR(22,word))
+#define SHA256_SIGMA1(word)   \
+  (SHA256_ROTR( 6,word) ^ SHA256_ROTR(11,word) ^ SHA256_ROTR(25,word))
+#define SHA256_sigma0(word)   \
+  (SHA256_ROTR( 7,word) ^ SHA256_ROTR(18,word) ^ SHA256_SHR( 3,word))
+#define SHA256_sigma1(word)   \
+  (SHA256_ROTR(17,word) ^ SHA256_ROTR(19,word) ^ SHA256_SHR(10,word))
+
+/*
+* add "length" to the length
+*/
+#define SHA224_256AddLength(context, length)               \
+  (addTemp = (context)->Length_Low, (context)->Corrupted = \
+    (((context)->Length_Low += (length)) < addTemp) &&     \
+    (++(context)->Length_High == 0) ? 1 : 0)
+
+/* Local Function Prototypes */
+static void SHA224_256Finalize(SHA256Context *context, uint8_t Pad_Byte);
+static void SHA224_256PadMessage(SHA256Context *context, uint8_t Pad_Byte);
+static void SHA224_256ProcessMessageBlock(SHA256Context *context);
+static int SHA224_256Reset(SHA256Context *context, uint32_t *H0);
+static int SHA224_256ResultN(SHA256Context *context, uint8_t Message_Digest[], int HashSize);
+
+/* Initial Hash Values: FIPS-180-2 Change Notice 1 */
+static uint32_t SHA224_H0[SHA256HashSize / 4] = {
+    0xC1059ED8, 0x367CD507, 0x3070DD17, 0xF70E5939,
+    0xFFC00B31, 0x68581511, 0x64F98FA7, 0xBEFA4FA4
+};
+
+/* Initial Hash Values: FIPS-180-2 section 5.3.2 */
+static uint32_t SHA256_H0[SHA256HashSize / 4] = {
+    0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A,
+    0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19
+};
+
+/*
+* SHA224Reset
+*
+* Description:
+*   This function will initialize the SHA384Context in preparation
+*   for computing a new SHA224 message digest.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to reset.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA224Reset(SHA224Context *context)
+{
+    return SHA224_256Reset(context, SHA224_H0);
+}
+
+/*
+* SHA224Input
+*
+* Description:
+*   This function accepts an array of octets as the next portion
+*   of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_array: [in]
+*     An array of characters representing the next portion of
+*     the message.
+*   length: [in]
+*     The length of the message in message_array
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA224Input(SHA224Context *context, const uint8_t *message_array, unsigned int length)
+{
+    return SHA256Input(context, message_array, length);
+}
+
+/*
+* SHA224FinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA224FinalBits(SHA224Context *context, const uint8_t message_bits, unsigned int length)
+{
+    return SHA256FinalBits(context, message_bits, length);
+}
+
+/*
+* SHA224Result
+*
+* Description:
+*   This function will return the 224-bit message
+*   digest into the Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 28th element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA224Result(SHA224Context *context, uint8_t Message_Digest[SHA224HashSize])
+{
+    return SHA224_256ResultN(context, Message_Digest, SHA224HashSize);
+}
+
+/*
+* SHA256Reset
+*
+* Description:
+*   This function will initialize the SHA256Context in preparation
+*   for computing a new SHA256 message digest.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to reset.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA256Reset(SHA256Context *context)
+{
+    return SHA224_256Reset(context, SHA256_H0);
+}
+
+/*
+* SHA256Input
+*
+* Description:
+*   This function accepts an array of octets as the next portion
+*   of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_array: [in]
+*     An array of characters representing the next portion of
+*     the message.
+*   length: [in]
+*     The length of the message in message_array
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA256Input(SHA256Context *context, const uint8_t *message_array, unsigned int length)
+{
+    int result;
+    uint32_t addTemp;
+    if (!length)
+    {
+        result = shaSuccess;
+    }
+    else if (!context || !message_array)
+    {
+        result = shaNull;
+    }
+    else if (context->Computed)
+    {
+        result = context->Corrupted = shaStateError;
+    }
+    else if (context->Corrupted)
+    {
+        result = context->Corrupted;
+    }
+    else
+    {
+        while (length-- && !context->Corrupted)
+        {
+            context->Message_Block[context->Message_Block_Index++] = (*message_array & 0xFF);
+
+            if (!SHA224_256AddLength(context, 8) && (context->Message_Block_Index == SHA256_Message_Block_Size))
+            {
+                SHA224_256ProcessMessageBlock(context);
+            }
+            message_array++;
+        }
+        result = shaSuccess;
+    }
+    return result;
+}
+
+/*
+* SHA256FinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA256FinalBits(SHA256Context *context, const uint8_t message_bits, unsigned int length)
+{
+    int result;
+    uint32_t addTemp;
+    uint8_t masks[8] = {
+        /* 0 0b00000000 */ 0x00, /* 1 0b10000000 */ 0x80,
+        /* 2 0b11000000 */ 0xC0, /* 3 0b11100000 */ 0xE0,
+        /* 4 0b11110000 */ 0xF0, /* 5 0b11111000 */ 0xF8,
+        /* 6 0b11111100 */ 0xFC, /* 7 0b11111110 */ 0xFE
+    };
+
+    uint8_t markbit[8] = {
+        /* 0 0b10000000 */ 0x80, /* 1 0b01000000 */ 0x40,
+        /* 2 0b00100000 */ 0x20, /* 3 0b00010000 */ 0x10,
+        /* 4 0b00001000 */ 0x08, /* 5 0b00000100 */ 0x04,
+        /* 6 0b00000010 */ 0x02, /* 7 0b00000001 */ 0x01
+    };
+
+    if (!length)
+    {
+        result = shaSuccess;
+    }
+    else if (!context)
+    {
+        result = shaNull;
+    }
+    else if ((context->Computed) || (length >= 8) || (length == 0))
+    {
+        result = context->Corrupted = shaStateError;
+    }
+    else if (context->Corrupted)
+    {
+        result = context->Corrupted;
+    }
+    else
+    {
+        SHA224_256AddLength(context, length);
+        SHA224_256Finalize(context, (uint8_t)((message_bits & masks[length]) | markbit[length]));
+        result = shaSuccess;
+    }
+    return result;
+}
+
+/*
+* SHA256Result
+*
+* Description:
+*   This function will return the 256-bit message
+*   digest into the Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 32nd element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*
+* Returns:
+*   sha Error Code.
+*/
+int SHA256Result(SHA256Context *context, uint8_t Message_Digest[SHA256HashSize])
+{
+    return SHA224_256ResultN(context, Message_Digest, SHA256HashSize);
+}
+
+/*
+* SHA224_256Finalize
+*
+* Description:
+*   This helper function finishes off the digest calculations.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   Pad_Byte: [in]
+*     The last byte to add to the digest before the 0-padding
+*     and length. This will contain the last bits of the message
+*     followed by another single bit. If the message was an
+*     exact multiple of 8-bits long, Pad_Byte will be 0x80.
+*
+* Returns:
+*   sha Error Code.
+*/
+static void SHA224_256Finalize(SHA256Context *context, uint8_t Pad_Byte)
+{
+    int i;
+    SHA224_256PadMessage(context, Pad_Byte);
+    /* message may be sensitive, so clear it out */
+    for (i = 0; i < SHA256_Message_Block_Size; ++i)
+    {
+        context->Message_Block[i] = 0;
+    }
+    context->Length_Low = 0;  /* and clear length */
+    context->Length_High = 0;
+    context->Computed = 1;
+}
+
+/*
+* SHA224_256PadMessage
+*
+* Description:
+*   According to the standard, the message must be padded to an
+*   even 512 bits. The first padding bit must be a '1'. The
+*   last 64 bits represent the length of the original message.
+*   All bits in between should be 0. This helper function will pad
+*   the message according to those rules by filling the
+*   Message_Block array accordingly. When it returns, it can be
+*   assumed that the message digest has been computed.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to pad
+*   Pad_Byte: [in]
+*     The last byte to add to the digest before the 0-padding
+*     and length. This will contain the last bits of the message
+*     followed by another single bit. If the message was an
+*     exact multiple of 8-bits long, Pad_Byte will be 0x80.
+*
+* Returns:
+*   Nothing.
+*/
+static void SHA224_256PadMessage(SHA256Context *context, uint8_t Pad_Byte)
+{
+    /*
+    * Check to see if the current message block is too small to hold
+    * the initial padding bits and length. If so, we will pad the
+    * block, process it, and then continue padding into a second
+    * block.
+    */
+    if (context->Message_Block_Index >= (SHA256_Message_Block_Size - 8))
+    {
+        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
+        while (context->Message_Block_Index < SHA256_Message_Block_Size)
+        {
+            context->Message_Block[context->Message_Block_Index++] = 0;
+        }
+        SHA224_256ProcessMessageBlock(context);
+    }
+    else
+    {
+        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
+    }
+
+    while (context->Message_Block_Index < (SHA256_Message_Block_Size - 8))
+    {
+        context->Message_Block[context->Message_Block_Index++] = 0;
+    }
+
+    /*
+    * Store the message length as the last 8 octets
+    */
+    context->Message_Block[56] = (uint8_t)(context->Length_High >> 24);
+    context->Message_Block[57] = (uint8_t)(context->Length_High >> 16);
+    context->Message_Block[58] = (uint8_t)(context->Length_High >> 8);
+    context->Message_Block[59] = (uint8_t)(context->Length_High);
+    context->Message_Block[60] = (uint8_t)(context->Length_Low >> 24);
+    context->Message_Block[61] = (uint8_t)(context->Length_Low >> 16);
+    context->Message_Block[62] = (uint8_t)(context->Length_Low >> 8);
+    context->Message_Block[63] = (uint8_t)(context->Length_Low);
+
+    SHA224_256ProcessMessageBlock(context);
+}
+
+/*
+* SHA224_256ProcessMessageBlock
+*
+* Description:
+*   This function will process the next 512 bits of the message
+*   stored in the Message_Block array.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*
+* Returns:
+*   Nothing.
+*
+* Comments:
+*   Many of the variable names in this code, especially the
+*   single character names, were used because those were the
+*   names used in the publication.
+*/
+static void SHA224_256ProcessMessageBlock(SHA256Context *context)
+{
+    /* Constants defined in FIPS-180-2, section 4.2.2 */
+    static const uint32_t K[64] = {
+        0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,
+        0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,
+        0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,
+        0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+        0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,
+        0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
+        0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,
+        0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+        0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
+        0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,
+        0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,
+        0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+        0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+    };
+    int        t, t4;                   /* Loop counter */
+    uint32_t   temp1, temp2;            /* Temporary word value */
+    uint32_t   W[64];                   /* Word sequence */
+    uint32_t   A, B, C, D, E, F, G, H;  /* Word buffers */
+
+    /*
+    * Initialize the first 16 words in the array W
+    */
+    for (t = t4 = 0; t < 16; t++, t4 += 4)
+    {
+        W[t] = (((uint32_t)context->Message_Block[t4]) << 24) |
+            (((uint32_t)context->Message_Block[t4 + 1]) << 16) |
+            (((uint32_t)context->Message_Block[t4 + 2]) << 8) |
+            (((uint32_t)context->Message_Block[t4 + 3]));
+    }
+    for (t = 16; t < 64; t++)
+    {
+        W[t] = SHA256_sigma1(W[t - 2]) + W[t - 7] +
+            SHA256_sigma0(W[t - 15]) + W[t - 16];
+    }
+    A = context->Intermediate_Hash[0];
+    B = context->Intermediate_Hash[1];
+    C = context->Intermediate_Hash[2];
+    D = context->Intermediate_Hash[3];
+    E = context->Intermediate_Hash[4];
+    F = context->Intermediate_Hash[5];
+    G = context->Intermediate_Hash[6];
+    H = context->Intermediate_Hash[7];
+
+    for (t = 0; t < 64; t++)
+    {
+        temp1 = H + SHA256_SIGMA1(E) + SHA_Ch(E, F, G) + K[t] + W[t];
+        temp2 = SHA256_SIGMA0(A) + SHA_Maj(A, B, C);
+        H = G;
+        G = F;
+        F = E;
+        E = D + temp1;
+        D = C;
+        C = B;
+        B = A;
+        A = temp1 + temp2;
+    }
+
+    context->Intermediate_Hash[0] += A;
+    context->Intermediate_Hash[1] += B;
+    context->Intermediate_Hash[2] += C;
+    context->Intermediate_Hash[3] += D;
+    context->Intermediate_Hash[4] += E;
+    context->Intermediate_Hash[5] += F;
+    context->Intermediate_Hash[6] += G;
+    context->Intermediate_Hash[7] += H;
+
+    context->Message_Block_Index = 0;
+}
+
+/*
+* SHA224_256Reset
+*
+* Description:
+*   This helper function will initialize the SHA256Context in
+*   preparation for computing a new SHA256 message digest.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to reset.
+*   H0
+*     The initial hash value to use.
+*
+* Returns:
+*   sha Error Code.
+*/
+static int SHA224_256Reset(SHA256Context *context, uint32_t *H0)
+{
+    int result;
+    if (!context)
+    {
+        result = shaNull;
+    }
+    else
+    {
+        context->Length_Low = 0;
+        context->Length_High = 0;
+        context->Message_Block_Index = 0;
+
+        context->Intermediate_Hash[0] = H0[0];
+        context->Intermediate_Hash[1] = H0[1];
+        context->Intermediate_Hash[2] = H0[2];
+        context->Intermediate_Hash[3] = H0[3];
+        context->Intermediate_Hash[4] = H0[4];
+        context->Intermediate_Hash[5] = H0[5];
+        context->Intermediate_Hash[6] = H0[6];
+        context->Intermediate_Hash[7] = H0[7];
+
+        context->Computed = 0;
+        context->Corrupted = 0;
+        result = shaSuccess;
+    }
+    return result;
+}
+
+/*
+* SHA224_256ResultN
+*
+* Description:
+*   This helper function will return the 224-bit or 256-bit message
+*   digest into the Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 28th/32nd element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*   HashSize: [in]
+*     The size of the hash, either 28 or 32.
+*
+* Returns:
+*   sha Error Code.
+*/
+static int SHA224_256ResultN(SHA256Context *context, uint8_t Message_Digest[], int HashSize)
+{
+    int result;
+    int i;
+
+    if (!context || !Message_Digest)
+    {
+        result = shaNull;
+    }
+    else if (context->Corrupted)
+    {
+        result = context->Corrupted;
+    }
+    else
+    {
+        if (!context->Computed)
+        {
+            SHA224_256Finalize(context, 0x80);
+        }
+        for (i = 0; i < HashSize; ++i)
+        {
+            Message_Digest[i] = (uint8_t)(context->Intermediate_Hash[i >> 2] >> 8 * (3 - (i & 0x03)));
+        }
+        result = shaSuccess;
+    }
+    return result;
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/sha384-512.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/sha384-512.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/sha384-512.c	(revision 389)
@@ -0,0 +1,1046 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/*************************** sha384-512.c ***************************/
+/********************* See RFC 4634 for details *********************/
+/*
+* Description:
+*   This file implements the Secure Hash Signature Standard
+*   algorithms as defined in the National Institute of Standards
+*   and Technology Federal Information Processing Standards
+*   Publication (FIPS PUB) 180-1 published on April 17, 1995, 180-2
+*   published on August 1, 2002, and the FIPS PUB 180-2 Change
+*   Notice published on February 28, 2004.
+*
+*   A combined document showing all algorithms is available at
+*       http://csrc.nist.gov/publications/fips/
+*       fips180-2/fips180-2withchangenotice.pdf
+*
+*   The SHA-384 and SHA-512 algorithms produce 384-bit and 512-bit
+*   message digests for a given data stream. It should take about
+*   2**n steps to find a message with the same digest as a given
+*   message and 2**(n/2) to find any two messages with the same
+*   digest, when n is the digest size in bits. Therefore, this
+*   algorithm can serve as a means of providing a
+*   "fingerprint" for a message.
+*
+* Portability Issues:
+*   SHA-384 and SHA-512 are defined in terms of 64-bit "words",
+*   but if USE_32BIT_ONLY is #defined, this code is implemented in
+*   terms of 32-bit "words". This code uses <stdint.h> (included
+*   via "sha.h") to define the 64, 32 and 8 bit unsigned integer
+*   types. If your C compiler does not support 64 bit unsigned
+*   integers, and you do not #define USE_32BIT_ONLY, this code is
+*   not appropriate.
+*
+* Caveats:
+*   SHA-384 and SHA-512 are designed to work with messages less
+*   than 2^128 bits long. This implementation uses
+*   SHA384/512Input() to hash the bits that are a multiple of the
+*   size of an 8-bit character, and then uses SHA384/256FinalBits()
+*   to hash the final few bits of the input.
+*
+*/
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+
+#include "azure_c_shared_utility/sha.h"
+#include "azure_c_shared_utility/sha-private.h"
+
+#ifdef USE_32BIT_ONLY
+#error IoTHubClient does not support USE_32BIT_ONLY flag
+/*
+* Define 64-bit arithmetic in terms of 32-bit arithmetic.
+* Each 64-bit number is represented in a 2-word array.
+* All macros are defined such that the result is the last parameter.
+*/
+
+/*
+* Define shift, rotate left and rotate right functions
+*/
+#define SHA512_SHR(bits, word, ret) (                          \
+    /* (((uint64_t)((word))) >> (bits)) */                     \
+    (ret)[0] = (((bits) < 32) && ((bits) >= 0)) ?              \
+      ((word)[0] >> (bits)) : 0,                               \
+    (ret)[1] = ((bits) > 32) ? ((word)[0] >> ((bits) - 32)) :  \
+      ((bits) == 32) ? (word)[0] :                             \
+      ((bits) >= 0) ?                                          \
+        (((word)[0] << (32 - (bits))) |                        \
+        ((word)[1] >> (bits))) : 0 )
+
+#define SHA512_SHL(bits, word, ret) (                          \
+    /* (((uint64_t)(word)) << (bits)) */                       \
+    (ret)[0] = ((bits) > 32) ? ((word)[1] << ((bits) - 32)) :  \
+         ((bits) == 32) ? (word)[1] :                          \
+         ((bits) >= 0) ?                                       \
+           (((word)[0] << (bits)) |                            \
+           ((word)[1] >> (32 - (bits)))) :                     \
+0, \
+(ret)[1] = (((bits) < 32) && ((bits) >= 0)) ? \
+((word)[1] << (bits)) : 0)
+
+/*
+* Define 64-bit OR
+*/
+#define SHA512_OR(word1, word2, ret) (                         \
+    (ret)[0] = (word1)[0] | (word2)[0],                        \
+    (ret)[1] = (word1)[1] | (word2)[1] )
+
+/*
+* Define 64-bit XOR
+*/
+#define SHA512_XOR(word1, word2, ret) (                        \
+    (ret)[0] = (word1)[0] ^ (word2)[0],                        \
+    (ret)[1] = (word1)[1] ^ (word2)[1] )
+
+/*
+* Define 64-bit AND
+*/
+#define SHA512_AND(word1, word2, ret) (                        \
+    (ret)[0] = (word1)[0] & (word2)[0],                        \
+    (ret)[1] = (word1)[1] & (word2)[1] )
+
+/*
+* Define 64-bit TILDA
+*/
+#define SHA512_TILDA(word, ret)                                \
+  ( (ret)[0] = ~(word)[0], (ret)[1] = ~(word)[1] )
+
+/*
+* Define 64-bit ADD
+*/
+#define SHA512_ADD(word1, word2, ret) (                        \
+    (ret)[1] = (word1)[1], (ret)[1] += (word2)[1],             \
+    (ret)[0] = (word1)[0] + (word2)[0] + ((ret)[1] < (word1)[1]) )
+
+/*
+* Add the 4word value in word2 to word1.
+*/
+static uint32_t ADDTO4_temp, ADDTO4_temp2;
+#define SHA512_ADDTO4(word1, word2) (                          \
+    ADDTO4_temp = (word1)[3],                                  \
+    (word1)[3] += (word2)[3],                                  \
+    ADDTO4_temp2 = (word1)[2],                                 \
+    (word1)[2] += (word2)[2] + ((word1)[3] < ADDTO4_temp),     \
+    ADDTO4_temp = (word1)[1],                                  \
+(word1)[1] += (word2)[1] + ((word1)[2] < ADDTO4_temp2), \
+(word1)[0] += (word2)[0] + ((word1)[1] < ADDTO4_temp))
+
+/*
+* Add the 2word value in word2 to word1.
+*/
+static uint32_t ADDTO2_temp;
+#define SHA512_ADDTO2(word1, word2) (                          \
+    ADDTO2_temp = (word1)[1],                                  \
+    (word1)[1] += (word2)[1],                                  \
+    (word1)[0] += (word2)[0] + ((word1)[1] < ADDTO2_temp) )
+
+/*
+* SHA rotate   ((word >> bits) | (word << (64-bits)))
+*/
+static uint32_t ROTR_temp1[2], ROTR_temp2[2];
+#define SHA512_ROTR(bits, word, ret) (                         \
+    SHA512_SHR((bits), (word), ROTR_temp1),                    \
+    SHA512_SHL(64-(bits), (word), ROTR_temp2),                 \
+    SHA512_OR(ROTR_temp1, ROTR_temp2, (ret)) )
+
+/*
+* Define the SHA SIGMA and sigma macros
+*  SHA512_ROTR(28,word) ^ SHA512_ROTR(34,word) ^ SHA512_ROTR(39,word)
+*/
+static uint32_t SIGMA0_temp1[2], SIGMA0_temp2[2],
+SIGMA0_temp3[2], SIGMA0_temp4[2];
+#define SHA512_SIGMA0(word, ret) (                             \
+    SHA512_ROTR(28, (word), SIGMA0_temp1),                     \
+    SHA512_ROTR(34, (word), SIGMA0_temp2),                     \
+    SHA512_ROTR(39, (word), SIGMA0_temp3),                     \
+    SHA512_XOR(SIGMA0_temp2, SIGMA0_temp3, SIGMA0_temp4),      \
+    SHA512_XOR(SIGMA0_temp1, SIGMA0_temp4, (ret)) )
+
+/*
+* SHA512_ROTR(14,word) ^ SHA512_ROTR(18,word) ^ SHA512_ROTR(41,word)
+*/
+static uint32_t SIGMA1_temp1[2], SIGMA1_temp2[2],
+SIGMA1_temp3[2], SIGMA1_temp4[2];
+#define SHA512_SIGMA1(word, ret) (                             \
+    SHA512_ROTR(14, (word), SIGMA1_temp1),                     \
+    SHA512_ROTR(18, (word), SIGMA1_temp2),                     \
+    SHA512_ROTR(41, (word), SIGMA1_temp3),                     \
+    SHA512_XOR(SIGMA1_temp2, SIGMA1_temp3, SIGMA1_temp4),      \
+    SHA512_XOR(SIGMA1_temp1, SIGMA1_temp4, (ret)) )
+
+/*
+* (SHA512_ROTR( 1,word) ^ SHA512_ROTR( 8,word) ^ SHA512_SHR( 7,word))
+*/
+static uint32_t sigma0_temp1[2], sigma0_temp2[2],
+sigma0_temp3[2], sigma0_temp4[2];
+#define SHA512_sigma0(word, ret) (                             \
+    SHA512_ROTR( 1, (word), sigma0_temp1),                     \
+    SHA512_ROTR( 8, (word), sigma0_temp2),                     \
+    SHA512_SHR( 7, (word), sigma0_temp3),                      \
+    SHA512_XOR(sigma0_temp2, sigma0_temp3, sigma0_temp4),      \
+    SHA512_XOR(sigma0_temp1, sigma0_temp4, (ret)) )
+
+/*
+* (SHA512_ROTR(19,word) ^ SHA512_ROTR(61,word) ^ SHA512_SHR( 6,word))
+*/
+static uint32_t sigma1_temp1[2], sigma1_temp2[2],
+sigma1_temp3[2], sigma1_temp4[2];
+#define SHA512_sigma1(word, ret) (                             \
+    SHA512_ROTR(19, (word), sigma1_temp1),                     \
+    SHA512_ROTR(61, (word), sigma1_temp2),                     \
+    SHA512_SHR( 6, (word), sigma1_temp3),                      \
+    SHA512_XOR(sigma1_temp2, sigma1_temp3, sigma1_temp4),      \
+    SHA512_XOR(sigma1_temp1, sigma1_temp4, (ret)) )
+
+#undef SHA_Ch
+#undef SHA_Maj
+
+#ifndef USE_MODIFIED_MACROS
+/*
+* These definitions are the ones used in FIPS-180-2, section 4.1.3
+*  Ch(x,y,z)   ((x & y) ^ (~x & z))
+*/
+static uint32_t Ch_temp1[2], Ch_temp2[2], Ch_temp3[2];
+#define SHA_Ch(x, y, z, ret) (                                 \
+    SHA512_AND(x, y, Ch_temp1),                                \
+    SHA512_TILDA(x, Ch_temp2),                                 \
+    SHA512_AND(Ch_temp2, z, Ch_temp3),                         \
+    SHA512_XOR(Ch_temp1, Ch_temp3, (ret)) )
+/*
+*  Maj(x,y,z)  (((x)&(y)) ^ ((x)&(z)) ^ ((y)&(z)))
+*/
+static uint32_t Maj_temp1[2], Maj_temp2[2],
+Maj_temp3[2], Maj_temp4[2];
+#define SHA_Maj(x, y, z, ret) (                                \
+    SHA512_AND(x, y, Maj_temp1),                               \
+    SHA512_AND(x, z, Maj_temp2),                               \
+    SHA512_AND(y, z, Maj_temp3),                               \
+    SHA512_XOR(Maj_temp2, Maj_temp3, Maj_temp4),               \
+    SHA512_XOR(Maj_temp1, Maj_temp4, (ret)) )
+
+#else /* !USE_32BIT_ONLY */
+/*
+* These definitions are potentially faster equivalents for the ones
+* used in FIPS-180-2, section 4.1.3.
+*   ((x & y) ^ (~x & z)) becomes
+*   ((x & (y ^ z)) ^ z)
+*/
+#define SHA_Ch(x, y, z, ret) (                                 \
+   (ret)[0] = (((x)[0] & ((y)[0] ^ (z)[0])) ^ (z)[0]),         \
+   (ret)[1] = (((x)[1] & ((y)[1] ^ (z)[1])) ^ (z)[1]) )
+
+/*
+*   ((x & y) ^ (x & z) ^ (y & z)) becomes
+*   ((x & (y | z)) | (y & z))
+*/
+#define SHA_Maj(x, y, z, ret) (                                 \
+   ret[0] = (((x)[0] & ((y)[0] | (z)[0])) | ((y)[0] & (z)[0])), \
+   ret[1] = (((x)[1] & ((y)[1] | (z)[1])) | ((y)[1] & (z)[1])) )
+#endif /* USE_MODIFIED_MACROS */
+
+/*
+* add "length" to the length
+*/
+static uint32_t addTemp[4] = { 0, 0, 0, 0 };
+#define SHA384_512AddLength(context, length) (                        \
+    addTemp[3] = (length), SHA512_ADDTO4((context)->Length, addTemp), \
+    (context)->Corrupted = (((context)->Length[3] == 0) &&            \
+       ((context)->Length[2] == 0) && ((context)->Length[1] == 0) &&  \
+       ((context)->Length[0] < 8)) ? 1 : 0 )
+
+/* Local Function Prototypes */
+static void SHA384_512Finalize(SHA512Context *context,
+    uint8_t Pad_Byte);
+static void SHA384_512PadMessage(SHA512Context *context,
+    uint8_t Pad_Byte);
+static void SHA384_512ProcessMessageBlock(SHA512Context *context);
+static int SHA384_512Reset(SHA512Context *context, uint32_t H0[]);
+static int SHA384_512ResultN(SHA512Context *context,
+    uint8_t Message_Digest[], int HashSize);
+
+/* Initial Hash Values: FIPS-180-2 sections 5.3.3 and 5.3.4 */
+static uint32_t SHA384_H0[SHA512HashSize / 4] = {
+    0xCBBB9D5D, 0xC1059ED8, 0x629A292A, 0x367CD507, 0x9159015A,
+    0x3070DD17, 0x152FECD8, 0xF70E5939, 0x67332667, 0xFFC00B31,
+    0x8EB44A87, 0x68581511, 0xDB0C2E0D, 0x64F98FA7, 0x47B5481D,
+    0xBEFA4FA4
+};
+
+static uint32_t SHA512_H0[SHA512HashSize / 4] = {
+    0x6A09E667, 0xF3BCC908, 0xBB67AE85, 0x84CAA73B, 0x3C6EF372,
+    0xFE94F82B, 0xA54FF53A, 0x5F1D36F1, 0x510E527F, 0xADE682D1,
+    0x9B05688C, 0x2B3E6C1F, 0x1F83D9AB, 0xFB41BD6B, 0x5BE0CD19,
+    0x137E2179
+};
+
+#else /* !USE_32BIT_ONLY */
+
+/* Define the SHA shift, rotate left and rotate right macro */
+#define SHA512_SHR(bits,word)  (((uint64_t)(word)) >> (bits))
+#define SHA512_ROTR(bits,word) ((((uint64_t)(word)) >> (bits)) | \
+                                (((uint64_t)(word)) << (64-(bits))))
+
+/* Define the SHA SIGMA and sigma macros */
+#define SHA512_SIGMA0(word)   \
+ (SHA512_ROTR(28,word) ^ SHA512_ROTR(34,word) ^ SHA512_ROTR(39,word))
+#define SHA512_SIGMA1(word)   \
+ (SHA512_ROTR(14,word) ^ SHA512_ROTR(18,word) ^ SHA512_ROTR(41,word))
+#define SHA512_sigma0(word)   \
+ (SHA512_ROTR( 1,word) ^ SHA512_ROTR( 8,word) ^ SHA512_SHR( 7,word))
+#define SHA512_sigma1(word)   \
+ (SHA512_ROTR(19,word) ^ SHA512_ROTR(61,word) ^ SHA512_SHR( 6,word))
+
+/*
+* add "length" to the length
+*/
+#define SHA384_512AddLength(context, length)                   \
+   (addTemp = context->Length_Low, context->Corrupted =        \
+    ((context->Length_Low += length) < addTemp) &&             \
+    (++context->Length_High == 0) ? 1 : 0)
+
+/* Local Function Prototypes */
+static void SHA384_512Finalize(SHA512Context *context,
+    uint8_t Pad_Byte);
+static void SHA384_512PadMessage(SHA512Context *context,
+    uint8_t Pad_Byte);
+static void SHA384_512ProcessMessageBlock(SHA512Context *context);
+static int SHA384_512Reset(SHA512Context *context, uint64_t H0[]);
+static int SHA384_512ResultN(SHA512Context *context,
+    uint8_t Message_Digest[], int HashSize);
+
+/* Initial Hash Values: FIPS-180-2 sections 5.3.3 and 5.3.4 */
+static uint64_t SHA384_H0[] = {
+    0xCBBB9D5DC1059ED8ull, 0x629A292A367CD507ull, 0x9159015A3070DD17ull,
+    0x152FECD8F70E5939ull, 0x67332667FFC00B31ull, 0x8EB44A8768581511ull,
+    0xDB0C2E0D64F98FA7ull, 0x47B5481DBEFA4FA4ull
+};
+static uint64_t SHA512_H0[] = {
+    0x6A09E667F3BCC908ull, 0xBB67AE8584CAA73Bull, 0x3C6EF372FE94F82Bull,
+    0xA54FF53A5F1D36F1ull, 0x510E527FADE682D1ull, 0x9B05688C2B3E6C1Full,
+    0x1F83D9ABFB41BD6Bull, 0x5BE0CD19137E2179ull
+};
+
+#endif /* USE_32BIT_ONLY */
+
+/*
+* SHA384Reset
+*
+* Description:
+*   This function will initialize the SHA384Context in preparation
+*   for computing a new SHA384 message digest.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to reset.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA384Reset(SHA384Context *context)
+{
+    return SHA384_512Reset(context, SHA384_H0);
+}
+
+/*
+* SHA384Input
+*
+* Description:
+*   This function accepts an array of octets as the next portion
+*   of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_array: [in]
+*     An array of characters representing the next portion of
+*     the message.
+*   length: [in]
+*     The length of the message in message_array
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA384Input(SHA384Context *context,
+    const uint8_t *message_array, unsigned int length)
+{
+    return SHA512Input(context, message_array, length);
+}
+
+/*
+* SHA384FinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA384FinalBits(SHA384Context *context,
+    const uint8_t message_bits, unsigned int length)
+{
+    return SHA512FinalBits(context, message_bits, length);
+}
+
+/*
+* SHA384Result
+*
+* Description:
+*   This function will return the 384-bit message
+*   digest into the Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 48th element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA384Result(SHA384Context *context,
+    uint8_t Message_Digest[SHA384HashSize])
+{
+    return SHA384_512ResultN(context, Message_Digest, SHA384HashSize);
+}
+
+/*
+* SHA512Reset
+*
+* Description:
+*   This function will initialize the SHA512Context in preparation
+*   for computing a new SHA512 message digest.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to reset.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA512Reset(SHA512Context *context)
+{
+    return SHA384_512Reset(context, SHA512_H0);
+}
+
+/*
+* SHA512Input
+*
+* Description:
+*   This function accepts an array of octets as the next portion
+*   of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_array: [in]
+*     An array of characters representing the next portion of
+*     the message.
+*   length: [in]
+*     The length of the message in message_array
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA512Input(SHA512Context *context,
+    const uint8_t *message_array,
+    unsigned int length)
+{
+    uint64_t addTemp;
+    if (!length)
+        return shaSuccess;
+
+    if (!context || !message_array)
+        return shaNull;
+
+    if (context->Computed) {
+        context->Corrupted = shaStateError;
+        return shaStateError;
+    }
+
+    if (context->Corrupted)
+        return context->Corrupted;
+
+    while (length-- && !context->Corrupted) {
+        context->Message_Block[context->Message_Block_Index++] =
+            (*message_array & 0xFF);
+
+        if (!SHA384_512AddLength(context, 8) &&
+            (context->Message_Block_Index == SHA512_Message_Block_Size))
+            SHA384_512ProcessMessageBlock(context);
+
+        message_array++;
+    }
+
+    return shaSuccess;
+}
+
+/*
+* SHA512FinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA512FinalBits(SHA512Context *context,
+    const uint8_t message_bits, unsigned int length)
+{
+    uint64_t addTemp;
+    uint8_t masks[8] = {
+        /* 0 0b00000000 */ 0x00, /* 1 0b10000000 */ 0x80,
+        /* 2 0b11000000 */ 0xC0, /* 3 0b11100000 */ 0xE0,
+        /* 4 0b11110000 */ 0xF0, /* 5 0b11111000 */ 0xF8,
+        /* 6 0b11111100 */ 0xFC, /* 7 0b11111110 */ 0xFE
+    };
+    uint8_t markbit[8] = {
+        /* 0 0b10000000 */ 0x80, /* 1 0b01000000 */ 0x40,
+        /* 2 0b00100000 */ 0x20, /* 3 0b00010000 */ 0x10,
+        /* 4 0b00001000 */ 0x08, /* 5 0b00000100 */ 0x04,
+        /* 6 0b00000010 */ 0x02, /* 7 0b00000001 */ 0x01
+    };
+
+    if (!length)
+        return shaSuccess;
+
+    if (!context)
+        return shaNull;
+
+    if ((context->Computed) || (length >= 8) || (length == 0)) {
+        context->Corrupted = shaStateError;
+        return shaStateError;
+    }
+
+    if (context->Corrupted)
+        return context->Corrupted;
+
+    SHA384_512AddLength(context, length);
+    SHA384_512Finalize(context, (uint8_t)
+        ((message_bits & masks[length]) | markbit[length]));
+
+    return shaSuccess;
+}
+
+/*
+* SHA384_512Finalize
+*
+* Description:
+*   This helper function finishes off the digest calculations.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   Pad_Byte: [in]
+*     The last byte to add to the digest before the 0-padding
+*     and length. This will contain the last bits of the message
+*     followed by another single bit. If the message was an
+*     exact multiple of 8-bits long, Pad_Byte will be 0x80.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+static void SHA384_512Finalize(SHA512Context *context,
+    uint8_t Pad_Byte)
+{
+    int_least16_t i;
+    SHA384_512PadMessage(context, Pad_Byte);
+    /* message may be sensitive, clear it out */
+    for (i = 0; i < SHA512_Message_Block_Size; ++i)
+        context->Message_Block[i] = 0;
+#ifdef USE_32BIT_ONLY    /* and clear length */
+    context->Length[0] = context->Length[1] = 0;
+    context->Length[2] = context->Length[3] = 0;
+#else /* !USE_32BIT_ONLY */
+    context->Length_Low = 0;
+    context->Length_High = 0;
+#endif /* USE_32BIT_ONLY */
+    context->Computed = 1;
+}
+
+/*
+* SHA512Result
+*
+* Description:
+*   This function will return the 512-bit message
+*   digest into the Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 64th element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int SHA512Result(SHA512Context *context,
+    uint8_t Message_Digest[SHA512HashSize])
+{
+    return SHA384_512ResultN(context, Message_Digest, SHA512HashSize);
+}
+
+/*
+* SHA384_512PadMessage
+*
+* Description:
+*   According to the standard, the message must be padded to an
+*   even 1024 bits. The first padding bit must be a '1'. The
+*   last 128 bits represent the length of the original message.
+*   All bits in between should be 0. This helper function will
+*   pad the message according to those rules by filling the
+*   Message_Block array accordingly. When it returns, it can be
+*   assumed that the message digest has been computed.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to pad
+*   Pad_Byte: [in]
+*     The last byte to add to the digest before the 0-padding
+*     and length. This will contain the last bits of the message
+*     followed by another single bit. If the message was an
+*     exact multiple of 8-bits long, Pad_Byte will be 0x80.
+*
+* Returns:
+*   Nothing.
+*
+*/
+static void SHA384_512PadMessage(SHA512Context *context,
+    uint8_t Pad_Byte)
+{
+    /*
+    * Check to see if the current message block is too small to hold
+    * the initial padding bits and length. If so, we will pad the
+    * block, process it, and then continue padding into a second
+    * block.
+    */
+    if (context->Message_Block_Index >= (SHA512_Message_Block_Size - 16)) {
+        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
+        while (context->Message_Block_Index < SHA512_Message_Block_Size)
+            context->Message_Block[context->Message_Block_Index++] = 0;
+
+        SHA384_512ProcessMessageBlock(context);
+    }
+    else
+        context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
+
+    while (context->Message_Block_Index < (SHA512_Message_Block_Size - 16))
+        context->Message_Block[context->Message_Block_Index++] = 0;
+
+    /*
+    * Store the message length as the last 16 octets
+    */
+#ifdef USE_32BIT_ONLY
+    context->Message_Block[112] = (uint8_t)(context->Length[0] >> 24);
+    context->Message_Block[113] = (uint8_t)(context->Length[0] >> 16);
+    context->Message_Block[114] = (uint8_t)(context->Length[0] >> 8);
+    context->Message_Block[115] = (uint8_t)(context->Length[0]);
+    context->Message_Block[116] = (uint8_t)(context->Length[1] >> 24);
+    context->Message_Block[117] = (uint8_t)(context->Length[1] >> 16);
+    context->Message_Block[118] = (uint8_t)(context->Length[1] >> 8);
+    context->Message_Block[119] = (uint8_t)(context->Length[1]);
+
+    context->Message_Block[120] = (uint8_t)(context->Length[2] >> 24);
+    context->Message_Block[121] = (uint8_t)(context->Length[2] >> 16);
+    context->Message_Block[122] = (uint8_t)(context->Length[2] >> 8);
+    context->Message_Block[123] = (uint8_t)(context->Length[2]);
+    context->Message_Block[124] = (uint8_t)(context->Length[3] >> 24);
+    context->Message_Block[125] = (uint8_t)(context->Length[3] >> 16);
+    context->Message_Block[126] = (uint8_t)(context->Length[3] >> 8);
+    context->Message_Block[127] = (uint8_t)(context->Length[3]);
+#else /* !USE_32BIT_ONLY */
+    context->Message_Block[112] = (uint8_t)(context->Length_High >> 56);
+    context->Message_Block[113] = (uint8_t)(context->Length_High >> 48);
+    context->Message_Block[114] = (uint8_t)(context->Length_High >> 40);
+    context->Message_Block[115] = (uint8_t)(context->Length_High >> 32);
+    context->Message_Block[116] = (uint8_t)(context->Length_High >> 24);
+    context->Message_Block[117] = (uint8_t)(context->Length_High >> 16);
+    context->Message_Block[118] = (uint8_t)(context->Length_High >> 8);
+    context->Message_Block[119] = (uint8_t)(context->Length_High);
+
+    context->Message_Block[120] = (uint8_t)(context->Length_Low >> 56);
+    context->Message_Block[121] = (uint8_t)(context->Length_Low >> 48);
+    context->Message_Block[122] = (uint8_t)(context->Length_Low >> 40);
+    context->Message_Block[123] = (uint8_t)(context->Length_Low >> 32);
+    context->Message_Block[124] = (uint8_t)(context->Length_Low >> 24);
+    context->Message_Block[125] = (uint8_t)(context->Length_Low >> 16);
+    context->Message_Block[126] = (uint8_t)(context->Length_Low >> 8);
+    context->Message_Block[127] = (uint8_t)(context->Length_Low);
+#endif /* USE_32BIT_ONLY */
+
+    SHA384_512ProcessMessageBlock(context);
+}
+
+/*
+* SHA384_512ProcessMessageBlock
+*
+* Description:
+*   This helper function will process the next 1024 bits of the
+*   message stored in the Message_Block array.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*
+* Returns:
+*   Nothing.
+*
+* Comments:
+*   Many of the variable names in this code, especially the
+*   single character names, were used because those were the
+*   names used in the publication.
+*
+*
+*/
+static void SHA384_512ProcessMessageBlock(SHA512Context *context)
+{
+    /* Constants defined in FIPS-180-2, section 4.2.3 */
+#ifdef USE_32BIT_ONLY
+    static const uint32_t K[80 * 2] = {
+        0x428A2F98, 0xD728AE22, 0x71374491, 0x23EF65CD, 0xB5C0FBCF,
+        0xEC4D3B2F, 0xE9B5DBA5, 0x8189DBBC, 0x3956C25B, 0xF348B538,
+        0x59F111F1, 0xB605D019, 0x923F82A4, 0xAF194F9B, 0xAB1C5ED5,
+        0xDA6D8118, 0xD807AA98, 0xA3030242, 0x12835B01, 0x45706FBE,
+        0x243185BE, 0x4EE4B28C, 0x550C7DC3, 0xD5FFB4E2, 0x72BE5D74,
+        0xF27B896F, 0x80DEB1FE, 0x3B1696B1, 0x9BDC06A7, 0x25C71235,
+        0xC19BF174, 0xCF692694, 0xE49B69C1, 0x9EF14AD2, 0xEFBE4786,
+        0x384F25E3, 0x0FC19DC6, 0x8B8CD5B5, 0x240CA1CC, 0x77AC9C65,
+        0x2DE92C6F, 0x592B0275, 0x4A7484AA, 0x6EA6E483, 0x5CB0A9DC,
+        0xBD41FBD4, 0x76F988DA, 0x831153B5, 0x983E5152, 0xEE66DFAB,
+        0xA831C66D, 0x2DB43210, 0xB00327C8, 0x98FB213F, 0xBF597FC7,
+        0xBEEF0EE4, 0xC6E00BF3, 0x3DA88FC2, 0xD5A79147, 0x930AA725,
+        0x06CA6351, 0xE003826F, 0x14292967, 0x0A0E6E70, 0x27B70A85,
+        0x46D22FFC, 0x2E1B2138, 0x5C26C926, 0x4D2C6DFC, 0x5AC42AED,
+        0x53380D13, 0x9D95B3DF, 0x650A7354, 0x8BAF63DE, 0x766A0ABB,
+        0x3C77B2A8, 0x81C2C92E, 0x47EDAEE6, 0x92722C85, 0x1482353B,
+        0xA2BFE8A1, 0x4CF10364, 0xA81A664B, 0xBC423001, 0xC24B8B70,
+        0xD0F89791, 0xC76C51A3, 0x0654BE30, 0xD192E819, 0xD6EF5218,
+        0xD6990624, 0x5565A910, 0xF40E3585, 0x5771202A, 0x106AA070,
+        0x32BBD1B8, 0x19A4C116, 0xB8D2D0C8, 0x1E376C08, 0x5141AB53,
+        0x2748774C, 0xDF8EEB99, 0x34B0BCB5, 0xE19B48A8, 0x391C0CB3,
+        0xC5C95A63, 0x4ED8AA4A, 0xE3418ACB, 0x5B9CCA4F, 0x7763E373,
+        0x682E6FF3, 0xD6B2B8A3, 0x748F82EE, 0x5DEFB2FC, 0x78A5636F,
+        0x43172F60, 0x84C87814, 0xA1F0AB72, 0x8CC70208, 0x1A6439EC,
+        0x90BEFFFA, 0x23631E28, 0xA4506CEB, 0xDE82BDE9, 0xBEF9A3F7,
+        0xB2C67915, 0xC67178F2, 0xE372532B, 0xCA273ECE, 0xEA26619C,
+        0xD186B8C7, 0x21C0C207, 0xEADA7DD6, 0xCDE0EB1E, 0xF57D4F7F,
+        0xEE6ED178, 0x06F067AA, 0x72176FBA, 0x0A637DC5, 0xA2C898A6,
+        0x113F9804, 0xBEF90DAE, 0x1B710B35, 0x131C471B, 0x28DB77F5,
+        0x23047D84, 0x32CAAB7B, 0x40C72493, 0x3C9EBE0A, 0x15C9BEBC,
+        0x431D67C4, 0x9C100D4C, 0x4CC5D4BE, 0xCB3E42B6, 0x597F299C,
+        0xFC657E2A, 0x5FCB6FAB, 0x3AD6FAEC, 0x6C44198C, 0x4A475817
+    };
+    int     t, t2, t8;                  /* Loop counter */
+    uint32_t  temp1[2], temp2[2],       /* Temporary word values */
+        temp3[2], temp4[2], temp5[2];
+    uint32_t  W[2 * 80];                  /* Word sequence */
+    uint32_t  A[2], B[2], C[2], D[2],   /* Word buffers */
+        E[2], F[2], G[2], H[2];
+
+    /* Initialize the first 16 words in the array W */
+    for (t = t2 = t8 = 0; t < 16; t++, t8 += 8) {
+        W[t2++] = ((((uint32_t)context->Message_Block[t8])) << 24) |
+            ((((uint32_t)context->Message_Block[t8 + 1])) << 16) |
+            ((((uint32_t)context->Message_Block[t8 + 2])) << 8) |
+            ((((uint32_t)context->Message_Block[t8 + 3])));
+        W[t2++] = ((((uint32_t)context->Message_Block[t8 + 4])) << 24) |
+            ((((uint32_t)context->Message_Block[t8 + 5])) << 16) |
+            ((((uint32_t)context->Message_Block[t8 + 6])) << 8) |
+            ((((uint32_t)context->Message_Block[t8 + 7])));
+    }
+
+    for (t = 16; t < 80; t++, t2 += 2) {
+        /* W[t] = SHA512_sigma1(W[t-2]) + W[t-7] +
+        SHA512_sigma0(W[t-15]) + W[t-16]; */
+        uint32_t *Wt2 = &W[t2 - 2 * 2];
+        uint32_t *Wt7 = &W[t2 - 7 * 2];
+        uint32_t *Wt15 = &W[t2 - 15 * 2];
+        uint32_t *Wt16 = &W[t2 - 16 * 2];
+        SHA512_sigma1(Wt2, temp1);
+        SHA512_ADD(temp1, Wt7, temp2);
+        SHA512_sigma0(Wt15, temp1);
+        SHA512_ADD(temp1, Wt16, temp3);
+        SHA512_ADD(temp2, temp3, &W[t2]);
+    }
+
+    A[0] = context->Intermediate_Hash[0];
+    A[1] = context->Intermediate_Hash[1];
+    B[0] = context->Intermediate_Hash[2];
+    B[1] = context->Intermediate_Hash[3];
+    C[0] = context->Intermediate_Hash[4];
+    C[1] = context->Intermediate_Hash[5];
+    D[0] = context->Intermediate_Hash[6];
+    D[1] = context->Intermediate_Hash[7];
+    E[0] = context->Intermediate_Hash[8];
+    E[1] = context->Intermediate_Hash[9];
+    F[0] = context->Intermediate_Hash[10];
+    F[1] = context->Intermediate_Hash[11];
+    G[0] = context->Intermediate_Hash[12];
+    G[1] = context->Intermediate_Hash[13];
+    H[0] = context->Intermediate_Hash[14];
+    H[1] = context->Intermediate_Hash[15];
+
+    for (t = t2 = 0; t < 80; t++, t2 += 2) {
+        /*
+        * temp1 = H + SHA512_SIGMA1(E) + SHA_Ch(E,F,G) + K[t] + W[t];
+        */
+        SHA512_SIGMA1(E, temp1);
+        SHA512_ADD(H, temp1, temp2);
+        SHA_Ch(E, F, G, temp3);
+        SHA512_ADD(temp2, temp3, temp4);
+        SHA512_ADD(&K[t2], &W[t2], temp5);
+        SHA512_ADD(temp4, temp5, temp1);
+        /*
+        * temp2 = SHA512_SIGMA0(A) + SHA_Maj(A,B,C);
+        */
+        SHA512_SIGMA0(A, temp3);
+        SHA_Maj(A, B, C, temp4);
+        SHA512_ADD(temp3, temp4, temp2);
+        H[0] = G[0]; H[1] = G[1];
+        G[0] = F[0]; G[1] = F[1];
+        F[0] = E[0]; F[1] = E[1];
+        SHA512_ADD(D, temp1, E);
+        D[0] = C[0]; D[1] = C[1];
+        C[0] = B[0]; C[1] = B[1];
+        B[0] = A[0]; B[1] = A[1];
+        SHA512_ADD(temp1, temp2, A);
+    }
+
+    SHA512_ADDTO2(&context->Intermediate_Hash[0], A);
+    SHA512_ADDTO2(&context->Intermediate_Hash[2], B);
+    SHA512_ADDTO2(&context->Intermediate_Hash[4], C);
+    SHA512_ADDTO2(&context->Intermediate_Hash[6], D);
+    SHA512_ADDTO2(&context->Intermediate_Hash[8], E);
+    SHA512_ADDTO2(&context->Intermediate_Hash[10], F);
+    SHA512_ADDTO2(&context->Intermediate_Hash[12], G);
+    SHA512_ADDTO2(&context->Intermediate_Hash[14], H);
+
+#else /* !USE_32BIT_ONLY */
+    static const uint64_t K[80] = {
+        0x428A2F98D728AE22ull, 0x7137449123EF65CDull, 0xB5C0FBCFEC4D3B2Full,
+        0xE9B5DBA58189DBBCull, 0x3956C25BF348B538ull, 0x59F111F1B605D019ull,
+        0x923F82A4AF194F9Bull, 0xAB1C5ED5DA6D8118ull, 0xD807AA98A3030242ull,
+        0x12835B0145706FBEull, 0x243185BE4EE4B28Cull, 0x550C7DC3D5FFB4E2ull,
+        0x72BE5D74F27B896Full, 0x80DEB1FE3B1696B1ull, 0x9BDC06A725C71235ull,
+        0xC19BF174CF692694ull, 0xE49B69C19EF14AD2ull, 0xEFBE4786384F25E3ull,
+        0x0FC19DC68B8CD5B5ull, 0x240CA1CC77AC9C65ull, 0x2DE92C6F592B0275ull,
+        0x4A7484AA6EA6E483ull, 0x5CB0A9DCBD41FBD4ull, 0x76F988DA831153B5ull,
+        0x983E5152EE66DFABull, 0xA831C66D2DB43210ull, 0xB00327C898FB213Full,
+        0xBF597FC7BEEF0EE4ull, 0xC6E00BF33DA88FC2ull, 0xD5A79147930AA725ull,
+        0x06CA6351E003826Full, 0x142929670A0E6E70ull, 0x27B70A8546D22FFCull,
+        0x2E1B21385C26C926ull, 0x4D2C6DFC5AC42AEDull, 0x53380D139D95B3DFull,
+        0x650A73548BAF63DEull, 0x766A0ABB3C77B2A8ull, 0x81C2C92E47EDAEE6ull,
+        0x92722C851482353Bull, 0xA2BFE8A14CF10364ull, 0xA81A664BBC423001ull,
+        0xC24B8B70D0F89791ull, 0xC76C51A30654BE30ull, 0xD192E819D6EF5218ull,
+        0xD69906245565A910ull, 0xF40E35855771202Aull, 0x106AA07032BBD1B8ull,
+        0x19A4C116B8D2D0C8ull, 0x1E376C085141AB53ull, 0x2748774CDF8EEB99ull,
+        0x34B0BCB5E19B48A8ull, 0x391C0CB3C5C95A63ull, 0x4ED8AA4AE3418ACBull,
+        0x5B9CCA4F7763E373ull, 0x682E6FF3D6B2B8A3ull, 0x748F82EE5DEFB2FCull,
+        0x78A5636F43172F60ull, 0x84C87814A1F0AB72ull, 0x8CC702081A6439ECull,
+        0x90BEFFFA23631E28ull, 0xA4506CEBDE82BDE9ull, 0xBEF9A3F7B2C67915ull,
+        0xC67178F2E372532Bull, 0xCA273ECEEA26619Cull, 0xD186B8C721C0C207ull,
+        0xEADA7DD6CDE0EB1Eull, 0xF57D4F7FEE6ED178ull, 0x06F067AA72176FBAull,
+        0x0A637DC5A2C898A6ull, 0x113F9804BEF90DAEull, 0x1B710B35131C471Bull,
+        0x28DB77F523047D84ull, 0x32CAAB7B40C72493ull, 0x3C9EBE0A15C9BEBCull,
+        0x431D67C49C100D4Cull, 0x4CC5D4BECB3E42B6ull, 0x597F299CFC657E2Aull,
+        0x5FCB6FAB3AD6FAECull, 0x6C44198C4A475817ull
+    };
+    int        t, t8;                   /* Loop counter */
+    uint64_t   temp1, temp2;            /* Temporary word value */
+    uint64_t   W[80];                   /* Word sequence */
+    uint64_t   A, B, C, D, E, F, G, H;  /* Word buffers */
+
+    /*
+    * Initialize the first 16 words in the array W
+    */
+    for (t = t8 = 0; t < 16; t++, t8 += 8)
+        W[t] = ((uint64_t)(context->Message_Block[t8]) << 56) |
+        ((uint64_t)(context->Message_Block[t8 + 1]) << 48) |
+        ((uint64_t)(context->Message_Block[t8 + 2]) << 40) |
+        ((uint64_t)(context->Message_Block[t8 + 3]) << 32) |
+        ((uint64_t)(context->Message_Block[t8 + 4]) << 24) |
+        ((uint64_t)(context->Message_Block[t8 + 5]) << 16) |
+        ((uint64_t)(context->Message_Block[t8 + 6]) << 8) |
+        ((uint64_t)(context->Message_Block[t8 + 7]));
+
+    for (t = 16; t < 80; t++)
+        W[t] = SHA512_sigma1(W[t - 2]) + W[t - 7] +
+        SHA512_sigma0(W[t - 15]) + W[t - 16];
+
+    A = context->Intermediate_Hash[0];
+    B = context->Intermediate_Hash[1];
+    C = context->Intermediate_Hash[2];
+    D = context->Intermediate_Hash[3];
+    E = context->Intermediate_Hash[4];
+    F = context->Intermediate_Hash[5];
+    G = context->Intermediate_Hash[6];
+    H = context->Intermediate_Hash[7];
+
+    for (t = 0; t < 80; t++) {
+        temp1 = H + SHA512_SIGMA1(E) + SHA_Ch(E, F, G) + K[t] + W[t];
+        temp2 = SHA512_SIGMA0(A) + SHA_Maj(A, B, C);
+        H = G;
+        G = F;
+        F = E;
+        E = D + temp1;
+        D = C;
+        C = B;
+        B = A;
+        A = temp1 + temp2;
+    }
+
+    context->Intermediate_Hash[0] += A;
+    context->Intermediate_Hash[1] += B;
+    context->Intermediate_Hash[2] += C;
+    context->Intermediate_Hash[3] += D;
+    context->Intermediate_Hash[4] += E;
+    context->Intermediate_Hash[5] += F;
+    context->Intermediate_Hash[6] += G;
+    context->Intermediate_Hash[7] += H;
+#endif /* USE_32BIT_ONLY */
+
+    context->Message_Block_Index = 0;
+}
+
+/*
+* SHA384_512Reset
+*
+* Description:
+*   This helper function will initialize the SHA512Context in
+*   preparation for computing a new SHA384 or SHA512 message
+*   digest.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to reset.
+*   H0
+*     The initial hash value to use.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+#ifdef USE_32BIT_ONLY
+static int SHA384_512Reset(SHA512Context *context, uint32_t H0[])
+#else /* !USE_32BIT_ONLY */
+static int SHA384_512Reset(SHA512Context *context, uint64_t H0[])
+#endif /* USE_32BIT_ONLY */
+{
+    int i;
+    if (!context)
+        return shaNull;
+
+    context->Message_Block_Index = 0;
+
+#ifdef USE_32BIT_ONLY
+    context->Length[0] = context->Length[1] = 0;
+    context->Length[2] = context->Length[3] = 0;
+
+    for (i = 0; i < SHA512HashSize / 4; i++)
+        context->Intermediate_Hash[i] = H0[i];
+#else /* !USE_32BIT_ONLY */
+    context->Length_High = context->Length_Low = 0;
+
+    for (i = 0; i < SHA512HashSize / 8; i++)
+        context->Intermediate_Hash[i] = H0[i];
+#endif /* USE_32BIT_ONLY */
+
+    context->Computed = 0;
+    context->Corrupted = 0;
+
+    return shaSuccess;
+}
+
+/*
+* SHA384_512ResultN
+*
+* Description:
+*   This helper function will return the 384-bit or 512-bit message
+*   digest into the Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 48th/64th element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*   HashSize: [in]
+*     The size of the hash, either 48 or 64.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+static int SHA384_512ResultN(SHA512Context *context,
+    uint8_t Message_Digest[], int HashSize)
+{
+    int i;
+
+#ifdef USE_32BIT_ONLY
+    int i2;
+#endif /* USE_32BIT_ONLY */
+
+    if (!context || !Message_Digest)
+        return shaNull;
+
+    if (context->Corrupted)
+        return context->Corrupted;
+
+    if (!context->Computed)
+        SHA384_512Finalize(context, 0x80);
+
+#ifdef USE_32BIT_ONLY
+    for (i = i2 = 0; i < HashSize;) {
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2] >> 24);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2] >> 16);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2] >> 8);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2++]);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2] >> 24);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2] >> 16);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2] >> 8);
+        Message_Digest[i++] = (uint8_t)(context->Intermediate_Hash[i2++]);
+    }
+#else /* !USE_32BIT_ONLY */
+    for (i = 0; i < HashSize; ++i)
+        Message_Digest[i] = (uint8_t)
+        (context->Intermediate_Hash[i >> 3] >> 8 * (7 - (i % 8)));
+#endif /* USE_32BIT_ONLY */
+
+    return shaSuccess;
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/singlylinkedlist.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/singlylinkedlist.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/singlylinkedlist.c	(revision 389)
@@ -0,0 +1,409 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/singlylinkedlist.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+typedef struct LIST_ITEM_INSTANCE_TAG
+{
+    const void* item;
+    void* next;
+} LIST_ITEM_INSTANCE;
+
+typedef struct SINGLYLINKEDLIST_INSTANCE_TAG
+{
+    LIST_ITEM_INSTANCE* head;
+    LIST_ITEM_INSTANCE* tail;
+} LIST_INSTANCE;
+
+SINGLYLINKEDLIST_HANDLE singlylinkedlist_create(void)
+{
+    LIST_INSTANCE* result;
+
+    /* Codes_SRS_LIST_01_001: [singlylinkedlist_create shall create a new list and return a non-NULL handle on success.] */
+    result = (LIST_INSTANCE*)malloc(sizeof(LIST_INSTANCE));
+    if (result != NULL)
+    {
+        /* Codes_SRS_LIST_01_002: [If any error occurs during the list creation, singlylinkedlist_create shall return NULL.] */
+        result->head = NULL;
+        result->tail = NULL;
+    }
+
+    return result;
+}
+
+void singlylinkedlist_destroy(SINGLYLINKEDLIST_HANDLE list)
+{
+    /* Codes_SRS_LIST_01_004: [If the list argument is NULL, no freeing of resources shall occur.] */
+    if (list != NULL)
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+
+        while (list_instance->head != NULL)
+        {
+            LIST_ITEM_INSTANCE* current_item = list_instance->head;
+            list_instance->head = (LIST_ITEM_INSTANCE*)current_item->next;
+            free(current_item);
+        }
+
+        /* Codes_SRS_LIST_01_003: [singlylinkedlist_destroy shall free all resources associated with the list identified by the handle argument.] */
+        free(list_instance);
+    }
+}
+
+LIST_ITEM_HANDLE singlylinkedlist_add(SINGLYLINKEDLIST_HANDLE list, const void* item)
+{
+    LIST_ITEM_INSTANCE* result;
+
+    /* Codes_SRS_LIST_01_006: [If any of the arguments is NULL, singlylinkedlist_add shall not add the item to the list and return NULL.] */
+    if ((list == NULL) ||
+        (item == NULL))
+    {
+        LogError("Invalid argument (list=%p, item=%p)", list, item);
+        result = NULL;
+    }
+    else
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+        result = (LIST_ITEM_INSTANCE*)malloc(sizeof(LIST_ITEM_INSTANCE));
+
+        if (result == NULL)
+        {
+            /* Codes_SRS_LIST_01_007: [If allocating the new list node fails, singlylinkedlist_add shall return NULL.] */
+            /*return as is*/
+        }
+        else
+        {
+            /* Codes_SRS_LIST_01_005: [singlylinkedlist_add shall add one item to the tail of the list and on success it shall return a handle to the added item.] */
+            result->next = NULL;
+            result->item = item;
+
+            if (list_instance->head == NULL)
+            {
+                list_instance->head = result;
+                list_instance->tail = result;
+            }
+            else
+            {
+                list_instance->tail->next = result;
+                list_instance->tail = result;
+            }
+        }
+    }
+
+    return result;
+}
+
+int singlylinkedlist_remove(SINGLYLINKEDLIST_HANDLE list, LIST_ITEM_HANDLE item)
+{
+    int result;
+
+    /* Codes_SRS_LIST_01_024: [If any of the arguments list or item_handle is NULL, singlylinkedlist_remove shall fail and return a non-zero value.] */
+    if ((list == NULL) ||
+        (item == NULL))
+    {
+        LogError("Invalid argument (list=%p, item=%p)", list, item);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+        LIST_ITEM_INSTANCE* current_item = list_instance->head;
+        LIST_ITEM_INSTANCE* previous_item = NULL;
+
+        while (current_item != NULL)
+        {
+            if (current_item == item)
+            {
+                if (previous_item != NULL)
+                {
+                    previous_item->next = current_item->next;
+                }
+                else
+                {
+                    list_instance->head = (LIST_ITEM_INSTANCE*)current_item->next;
+                }
+
+                if (current_item == list_instance->tail)
+                {
+                    list_instance->tail = previous_item;
+                }
+
+                free(current_item);
+
+                break;
+            }
+
+            previous_item = current_item;
+            current_item = (LIST_ITEM_INSTANCE*)current_item->next;
+        }
+
+        if (current_item == NULL)
+        {
+            /* Codes_SRS_LIST_01_025: [If the item item_handle is not found in the list, then singlylinkedlist_remove shall fail and return a non-zero value.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /* Codes_SRS_LIST_01_023: [singlylinkedlist_remove shall remove a list item from the list and on success it shall return 0.] */
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+LIST_ITEM_HANDLE singlylinkedlist_get_head_item(SINGLYLINKEDLIST_HANDLE list)
+{
+    LIST_ITEM_HANDLE result;
+
+    if (list == NULL)
+    {
+        /* Codes_SRS_LIST_01_009: [If the list argument is NULL, singlylinkedlist_get_head_item shall return NULL.] */
+        LogError("Invalid argument (list=NULL)");
+        result = NULL;
+    }
+    else
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+
+        /* Codes_SRS_LIST_01_008: [singlylinkedlist_get_head_item shall return the head of the list.] */
+        /* Codes_SRS_LIST_01_010: [If the list is empty, singlylinkedlist_get_head_item_shall_return NULL.] */
+        result = list_instance->head;
+    }
+
+    return result;
+}
+
+LIST_ITEM_HANDLE singlylinkedlist_get_next_item(LIST_ITEM_HANDLE item_handle)
+{
+    LIST_ITEM_HANDLE result;
+
+    if (item_handle == NULL)
+    {
+        LogError("Invalid argument (list is NULL)");
+        /* Codes_SRS_LIST_01_019: [If item_handle is NULL then singlylinkedlist_get_next_item shall return NULL.] */
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_LIST_01_018: [singlylinkedlist_get_next_item shall return the next item in the list following the item item_handle.] */
+        result = (LIST_ITEM_HANDLE)((LIST_ITEM_INSTANCE*)item_handle)->next;
+    }
+
+    return result;
+}
+
+const void* singlylinkedlist_item_get_value(LIST_ITEM_HANDLE item_handle)
+{
+    const void* result;
+
+    if (item_handle == NULL)
+    {
+        LogError("Invalid argument (item_handle is NULL)");
+        /* Codes_SRS_LIST_01_021: [If item_handle is NULL, singlylinkedlist_item_get_value shall return NULL.] */
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_LIST_01_020: [singlylinkedlist_item_get_value shall return the value associated with the list item identified by the item_handle argument.] */
+        result = ((LIST_ITEM_INSTANCE*)item_handle)->item;
+    }
+
+    return result;
+}
+
+LIST_ITEM_HANDLE singlylinkedlist_find(SINGLYLINKEDLIST_HANDLE list, LIST_MATCH_FUNCTION match_function, const void* match_context)
+{
+    LIST_ITEM_HANDLE result;
+
+    if ((list == NULL) ||
+        (match_function == NULL))
+    {
+        LogError("Invalid argument (list=%p, match_function=%p)", list, match_function);
+        /* Codes_SRS_LIST_01_012: [If the list or the match_function argument is NULL, singlylinkedlist_find shall return NULL.] */
+        result = NULL;
+    }
+    else
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+        LIST_ITEM_INSTANCE* current = list_instance->head;
+
+        /* Codes_SRS_LIST_01_011: [singlylinkedlist_find shall iterate through all items in a list and return the first one that satisfies a certain match function.] */
+        while (current != NULL)
+        {
+            /* Codes_SRS_LIST_01_014: [list find shall determine whether an item satisfies the match criteria by invoking the match function for each item in the list until a matching item is found.] */
+            /* Codes_SRS_LIST_01_013: [The match_function shall get as arguments the list item being attempted to be matched and the match_context as is.] */
+            if (match_function((LIST_ITEM_HANDLE)current, match_context) == true)
+            {
+                /* Codes_SRS_LIST_01_017: [If the match function returns true, singlylinkedlist_find shall consider that item as matching.] */
+                break;
+            }
+
+            /* Codes_SRS_LIST_01_016: [If the match function returns false, singlylinkedlist_find shall consider that item as not matching.] */
+            current = (LIST_ITEM_INSTANCE*)current->next;
+        }
+
+        if (current == NULL)
+        {
+            /* Codes_SRS_LIST_01_015: [If the list is empty, singlylinkedlist_find shall return NULL.] */
+            result = NULL;
+        }
+        else
+        {
+            result = current;
+        }
+    }
+
+    return result;
+}
+
+int singlylinkedlist_remove_if(SINGLYLINKEDLIST_HANDLE list, LIST_CONDITION_FUNCTION condition_function, const void* match_context)
+{
+    int result;
+    /* Codes_SRS_LIST_09_001: [ If the list or the condition_function argument is NULL, singlylinkedlist_remove_if shall return non-zero value. ] */
+    if ((list == NULL) ||
+        (condition_function == NULL))
+    {
+        LogError("Invalid argument (list=%p, condition_function=%p)", list, condition_function);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+        LIST_ITEM_INSTANCE* current_item = list_instance->head;
+        LIST_ITEM_INSTANCE* next_item = NULL;
+        LIST_ITEM_INSTANCE* previous_item = NULL;
+
+        /* Codes_SRS_LIST_09_002: [ singlylinkedlist_remove_if shall iterate through all items in a list and remove all that satisfies a certain condition function. ] */
+        while (current_item != NULL)
+        {
+            bool continue_processing = false;
+
+            next_item = (LIST_ITEM_INSTANCE*)current_item->next;
+
+            /* Codes_SRS_LIST_09_003: [ singlylinkedlist_remove_if shall determine whether an item satisfies the condition criteria by invoking the condition function for that item. ] */
+            /* Codes_SRS_LIST_09_004: [ If the condition function returns true, singlylinkedlist_find shall consider that item as to be removed. ] */
+            if (condition_function(current_item->item, match_context, &continue_processing) == true)
+            {
+                if (previous_item != NULL)
+                {
+                    previous_item->next = next_item;
+                }
+                else
+                {
+                    list_instance->head = next_item;
+                }
+
+                if (current_item == list_instance->tail)
+                {
+                    list_instance->tail = previous_item;
+                }
+
+                free(current_item);
+            }
+            /* Codes_SRS_LIST_09_005: [ If the condition function returns false, singlylinkedlist_find shall consider that item as not to be removed. ] */
+            else
+            {
+                previous_item = current_item;
+            }
+
+            /* Codes_SRS_LIST_09_006: [ If the condition function returns continue_processing as false, singlylinkedlist_remove_if shall stop iterating through the list and return. ] */
+            if (continue_processing == false)
+            {
+                break;
+            }
+
+            current_item = next_item;
+        }
+
+        /* Codes_SRS_LIST_09_007: [ If no errors occur, singlylinkedlist_remove_if shall return zero. ] */
+        result = 0;
+    }
+
+    return result;
+}
+
+int singlylinkedlist_foreach(SINGLYLINKEDLIST_HANDLE list, LIST_ACTION_FUNCTION action_function, const void* action_context)
+{
+    int result;
+
+    /* Codes_SRS_LIST_09_008: [ If the list or the action_function argument is NULL, singlylinkedlist_foreach shall return non-zero value. ] */
+    if ((list == NULL) ||
+        (action_function == NULL))
+    {
+        LogError("Invalid argument (list=%p, action_function=%p)", list, action_function);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        LIST_INSTANCE* list_instance = (LIST_INSTANCE*)list;
+        LIST_ITEM_INSTANCE* list_item = list_instance->head;
+
+        while (list_item != NULL)
+        {
+            bool continue_processing = false;
+
+            /* Codes_SRS_LIST_09_009: [ singlylinkedlist_foreach shall iterate through all items in a list and invoke action_function for each one of them. ] */
+            action_function(list_item->item, action_context, &continue_processing);
+
+            /* Codes_SRS_LIST_09_010: [ If the condition function returns continue_processing as false, singlylinkedlist_foreach shall stop iterating through the list and return. ] */
+            if (continue_processing == false)
+            {
+                break;
+            }
+
+            list_item = (LIST_ITEM_INSTANCE*)list_item->next;
+        }
+
+        /* Codes_SRS_LIST_09_011: [ If no errors occur, singlylinkedlist_foreach shall return zero. ] */
+        result = 0;
+    }
+
+    return result;
+}
+
+LIST_ITEM_HANDLE singlylinkedlist_add_head(SINGLYLINKEDLIST_HANDLE list, const void* item)
+{
+    LIST_ITEM_HANDLE result;
+
+    /* Codes_SRS_LIST_02_001: [ If list is NULL then singlylinkedlist_add_head shall fail and return NULL. ]*/
+    if (list == NULL)
+    {
+        LogError("Invalid argument SINGLYLINKEDLIST_HANDLE list=%p", list);
+        result = NULL;
+    }
+    else
+    {
+        result = malloc(sizeof(LIST_ITEM_INSTANCE));
+
+        if (result == NULL)
+        {
+            /*Codes_SRS_LIST_02_003: [ If there are any failures then singlylinkedlist_add_head shall fail and return NULL. ]*/
+            LogError("failure in malloc");
+            /*return as is*/
+        }
+        else
+        {
+            /*Codes_SRS_LIST_02_002: [ singlylinkedlist_add_head shall insert item at head, succeed and return a non-NULL value. ]*/
+            result->item = item;
+            if (list->head == NULL)
+            {
+                result->next = NULL;
+                list->head = result;
+                list->tail = result;
+                
+            }
+            else
+            {
+                result->next = list->head;
+                list->head = result;
+            }
+        }
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/string_token.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/string_token.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/string_token.c	(revision 389)
@@ -0,0 +1,390 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdarg.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/string_token.h"
+
+typedef struct STRING_TOKEN_TAG
+{
+    const char* source;
+    size_t length;
+
+    const char* token_start;
+    const char* delimiter_start;
+    const char* delimiter;
+} STRING_TOKEN;
+
+static size_t* get_delimiters_lengths(const char** delimiters, size_t n_delims)
+{
+    size_t* result;
+
+    if ((result = malloc(sizeof(size_t) * n_delims)) == NULL)
+    {
+        LogError("Failed to allocate array for delimiters lengths");
+    }
+    else
+    {
+        size_t i;
+        for (i = 0; i < n_delims; i++)
+        {
+            if (delimiters[i] == NULL)
+            {
+                // Codes_SRS_STRING_TOKENIZER_09_002: [ If any of the strings in delimiters are NULL, the function shall return NULL ]
+                LogError("Invalid argument (delimiter %lu is NULL)", (unsigned long)i);
+                free(result);
+                result = NULL;
+                break;
+            }
+            else
+            {
+                result[i] = strlen(delimiters[i]);
+            }
+        }
+    }
+
+    return result;
+}
+
+static int get_next_token(STRING_TOKEN* token, const char** delimiters, size_t n_delims)
+{
+    int result;
+
+    if (token->token_start != NULL && token->delimiter_start == NULL)
+    {
+        // The parser reached the end of the input string.
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t* delimiters_lengths;
+
+        if ((delimiters_lengths = get_delimiters_lengths(delimiters, n_delims)) == NULL)
+        {
+            LogError("Failed to get delimiters lengths");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            const char* new_token_start;
+            const char* current_pos;
+            const char* stop_pos = (char*)token->source + token->length;
+            size_t j; // iterator for the delimiters.
+
+            if (token->delimiter_start == NULL)
+            {
+                // Codes_SRS_STRING_TOKENIZER_09_005: [ The source string shall be split in a token starting from the beginning of source up to occurrence of any one of the demiliters, whichever occurs first in the order provided ]
+                new_token_start = (char*)token->source;
+            }
+            else
+            {
+                // Codes_SRS_STRING_TOKENIZER_09_010: [ The next token shall be selected starting from the position in source right after the previous delimiter up to occurrence of any one of demiliters, whichever occurs first in the order provided ]
+                new_token_start = token->delimiter_start + strlen(token->delimiter);
+            }
+
+            current_pos = new_token_start;
+            result = 0;
+
+            while (current_pos < stop_pos)
+            {
+                for (j = 0; j < n_delims; j++)
+                {
+                    if (*current_pos == *delimiters[j])
+                    {
+                        size_t k;
+                        for (k = 1; k < delimiters_lengths[j] && (current_pos + k) < stop_pos; k++)
+                        {
+                            if (*(current_pos + k) != *(delimiters[j] + k))
+                            {
+                                break;
+                            }
+                        }
+
+                        if (k == delimiters_lengths[j])
+                        {
+                            token->delimiter_start = current_pos;
+                            token->delimiter = delimiters[j];
+
+                            if (token->delimiter_start == token->source)
+                            {
+                                // Delimiter occurs in the beginning of the source string.
+                                token->token_start = NULL;
+                            }
+                            else
+                            {
+                                token->token_start = new_token_start;
+                            }
+                            goto SCAN_COMPLETED;
+                        }
+                    }
+                }
+
+                current_pos++;
+            }
+
+            // Codes_SRS_STRING_TOKENIZER_09_006: [ If the source string does not have any of the demiliters, the resulting token shall be the entire source string ]
+            // Codes_SRS_STRING_TOKENIZER_09_011: [ If the source string, starting right after the position of the last delimiter found, does not have any of the demiliters, the resulting token shall be the entire remaining of the source string ]
+            if (current_pos == stop_pos)
+            {
+                token->token_start = new_token_start;
+                token->delimiter_start = NULL;
+                // Codes_SRS_STRING_TOKENIZER_09_019: [ If the current token extends to the end of source, the function shall return NULL ]
+                token->delimiter = NULL;
+            }
+
+SCAN_COMPLETED:
+            free(delimiters_lengths);
+        }
+    }
+
+    return result;
+}
+
+STRING_TOKEN_HANDLE StringToken_GetFirst(const char* source, size_t length, const char** delimiters, size_t n_delims)
+{
+    STRING_TOKEN* result;
+
+    // Codes_SRS_STRING_TOKENIZER_09_001: [ If source or delimiters are NULL, or n_delims is zero, the function shall return NULL ]
+    if (source == NULL || delimiters == NULL || n_delims == 0)
+    {
+        LogError("Invalid argument (source=%p, delimiters=%p, n_delims=%lu)", source, delimiters, (unsigned long)n_delims);
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_003: [ A STRING_TOKEN structure shall be allocated to hold the token parameters ]
+        if ((result = (STRING_TOKEN*)malloc(sizeof(STRING_TOKEN))) == NULL)
+        {
+            // Codes_SRS_STRING_TOKENIZER_09_004: [ If the STRING_TOKEN structure fails to be allocated, the function shall return NULL ]
+            LogError("Failed allocating STRING_TOKEN");
+        }
+        else
+        {
+            (void)memset(result, 0, sizeof(STRING_TOKEN));
+            result->source = source;
+            result->length = length;
+
+            if (get_next_token(result, delimiters, n_delims) != 0)
+            {
+                LogError("Failed to get first token");
+                // Codes_SRS_STRING_TOKENIZER_09_007: [ If any failure occurs, all memory allocated by this function shall be released ]
+                free(result);
+                result = NULL;
+            }
+        }
+    }
+
+    return result;
+}
+
+bool StringToken_GetNext(STRING_TOKEN_HANDLE token, const char** delimiters, size_t n_delims)
+{
+    bool result;
+
+    // Codes_SRS_STRING_TOKENIZER_09_008: [ If token or delimiters are NULL, or n_delims is zero, the function shall return false ]
+    if (token == NULL || delimiters == NULL || n_delims == 0)
+    {
+        LogError("Invalid argument (token=%p, delimiters=%p, n_delims=%lu)", token, delimiters, (unsigned long)n_delims);
+        result = false;
+    }
+    else if (get_next_token(token, delimiters, n_delims) != 0)
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_009: [ If the previous token already extended to the end of source, the function shall return false ]
+        result = false;
+    }
+    else
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_012: [ If a token was identified, the function shall return true ]
+        result = true;
+    }
+
+    return result;
+}
+
+const char* StringToken_GetValue(STRING_TOKEN_HANDLE token)
+{
+    const char* result;
+
+    // Codes_SRS_STRING_TOKENIZER_09_013: [ If token is NULL the function shall return NULL ]
+    if (token == NULL)
+    {
+        LogError("Invalig argument (token is NULL)");
+        result = NULL;
+    }
+    // Beyond the length of the source string.
+    else if (token->token_start == (token->source + token->length))
+    {
+        result = NULL;
+    }
+    // Two delimiters side by side (empty token).
+    else if (token->token_start == token->delimiter_start)
+    {
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_014: [ The function shall return the pointer to the position in source where the current token starts. ]
+        result = token->token_start;
+    }
+
+    return result;
+}
+
+size_t StringToken_GetLength(STRING_TOKEN_HANDLE token)
+{
+    size_t result;
+
+    // Codes_SRS_STRING_TOKENIZER_09_015: [ If token is NULL the function shall return zero ]
+    if (token == NULL)
+    {
+        LogError("Invalig argument (token is NULL)");
+        result = 0;
+    }
+    // Codes_SRS_STRING_TOKENIZER_09_016: [ The function shall return the length of the current token ]
+    else if (token->token_start == NULL)
+    {
+        result = 0;
+    }
+    else if (token->delimiter_start == NULL)
+    {
+        result = token->source + token->length - token->token_start;
+    }
+    else
+    {
+        result = token->delimiter_start - token->token_start;
+    }
+
+    return result;
+}
+
+const char* StringToken_GetDelimiter(STRING_TOKEN_HANDLE token)
+{
+    const char* result;
+
+    if (token == NULL)
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_017: [ If token is NULL the function shall return NULL ]
+        LogError("Invalig argument (token is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_018: [ The function shall return a pointer to the delimiter that defined the current token, as passed to the previous call to StringToken_GetNext() or StringToken_GetFirst() ]
+        result = token->delimiter;
+    }
+
+    return result;
+}
+
+int StringToken_Split(const char* source, size_t length, const char** delimiters, size_t n_delims, bool include_empty, char*** tokens, size_t* token_count)
+{
+    int result;
+
+    // Codes_SRS_STRING_TOKENIZER_09_022: [ If source, delimiters, token or token_count are NULL, or n_delims is zero the function shall return a non-zero value ]
+    if (source == NULL || delimiters == NULL || n_delims == 0 || tokens == NULL || token_count == NULL)
+    {
+        LogError("Invalid argument (source=%p, delimiters=%p, n_delims=%lu, tokens=%p, token_count=%p)", source, delimiters, (unsigned long)n_delims, tokens, token_count);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING_TOKEN_HANDLE tokenizer;
+
+        // Codes_SRS_STRING_TOKENIZER_09_023: [ source (up to length) shall be split into individual tokens separated by any of delimiters ]
+        tokenizer = StringToken_GetFirst(source, length, delimiters, n_delims);
+
+        *token_count = 0;
+        *tokens = NULL;
+        // Codes_SRS_STRING_TOKENIZER_09_027: [ If no failures occur the function shall return zero ]
+        result = 0;
+
+        if (tokenizer != NULL)
+        {
+            do
+            {
+                const char* tokenValue;
+                size_t tokenLength;
+
+                tokenValue = StringToken_GetValue(tokenizer);
+                tokenLength = StringToken_GetLength(tokenizer);
+
+                if ((tokenValue != NULL && tokenLength == 0) || (tokenValue == NULL && tokenLength > 0))
+                {
+                    LogError("Unexpected token value (%p) or length (%lu)", tokenValue, (unsigned long)tokenLength);
+                    result = MU_FAILURE;
+                    break;
+                }
+                // Codes_SRS_STRING_TOKENIZER_09_024: [ All NULL tokens shall be ommited if include_empty is not TRUE ]
+                else if (tokenValue != NULL || include_empty)
+                {
+                    char** temp_token;
+                    // Codes_SRS_STRING_TOKENIZER_09_025: [ The tokens shall be stored in tokens, and their count stored in token_count ]
+                    *token_count = (*token_count) + 1;
+
+                    if ((temp_token = (char**)realloc(*tokens, sizeof(char*) * (*token_count))) == NULL)
+                    {
+                        // Codes_SRS_STRING_TOKENIZER_09_026: [ If any failures splitting or storing the tokens occur the function shall return a non-zero value ]
+                        LogError("Failed re-allocating the token array");
+                        (*token_count)--;
+                        result = MU_FAILURE;
+                        break;
+                    }
+                    else
+                    {
+                        *tokens = temp_token;
+                        if (tokenLength == 0)
+                        {
+                            (*tokens)[(*token_count) - 1] = NULL;
+                        }
+                        else if (((*tokens)[(*token_count) - 1] = (char*)malloc(sizeof(char) * (tokenLength + 1))) == NULL)
+                        {
+                            // Codes_SRS_STRING_TOKENIZER_09_026: [ If any failures splitting or storing the tokens occur the function shall return a non-zero value ]
+                            LogError("Failed copying token into array");
+                            *token_count = (*token_count) - 1;
+                            result = MU_FAILURE;
+                            break;
+                        }
+                        else
+                        {
+                            (void)memcpy((*tokens)[(*token_count) - 1], tokenValue, tokenLength);
+                            (*tokens)[(*token_count) - 1][tokenLength] = '\0';
+                        }
+                    }
+                }
+            } while (StringToken_GetNext(tokenizer, delimiters, n_delims));
+
+            StringToken_Destroy(tokenizer);
+
+            if (result != 0)
+            {
+                while ((*token_count) > 0 && *tokens != NULL)
+                {
+                    *token_count = (*token_count) - 1;
+                    free((*tokens)[*token_count]);
+                }
+                free(*tokens);
+            }
+        }
+    }
+
+    return result;
+}
+
+void StringToken_Destroy(STRING_TOKEN_HANDLE token)
+{
+    if (token == NULL)
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_020: [ If token is NULL the function shall return ]
+        LogError("Invalig argument (token is NULL)");
+    }
+    else
+    {
+        // Codes_SRS_STRING_TOKENIZER_09_021: [ Otherwise the memory allocated for STRING_TOKEN shall be released ]
+        free(token);
+    }
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/string_tokenizer.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/string_tokenizer.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/string_tokenizer.c	(revision 389)
@@ -0,0 +1,202 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include <stdbool.h>
+#include "azure_c_shared_utility/string_tokenizer.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+
+typedef struct STRING_TOKEN_TAG
+{
+    const char* inputString;
+    const char* currentPos;
+    size_t sizeOfinputString;
+} STRING_TOKEN;
+
+STRING_TOKENIZER_HANDLE STRING_TOKENIZER_create(STRING_HANDLE handle)
+{
+    STRING_TOKENIZER_HANDLE result;
+
+    /* Codes_SRS_STRING_04_001: [STRING_TOKENIZER_create shall return an NULL STRING_TOKENIZER_HANDLE if parameter handle is NULL] */
+    if (handle == NULL)
+    {
+        LogError("Invalid Argument. Handle cannot be NULL.");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_STRING_04_002: [STRING_TOKENIZER_create shall allocate a new STRING_TOKENIZER_HANDLE having the content of the STRING_HANDLE copied and current position pointing at the beginning of the string] */
+        result = STRING_TOKENIZER_create_from_char(STRING_c_str(handle));
+    }
+
+    return result;
+}
+
+extern STRING_TOKENIZER_HANDLE STRING_TOKENIZER_create_from_char(const char* input)
+{
+    STRING_TOKEN *result;
+    char* inputStringToMalloc;
+
+    /* Codes_SRS_STRING_07_001: [STRING_TOKENIZER_create shall return an NULL STRING_TOKENIZER_HANDLE if parameter input is NULL] */
+    if (input == NULL)
+    {
+        LogError("Invalid Argument. Handle cannot be NULL.");
+        result = NULL;
+    }
+    /* Codes_SRS_STRING_07_002: [STRING_TOKENIZER_create shall allocate a new STRING_TOKENIZER_HANDLE having the content of the STRING_HANDLE copied and current position pointing at the beginning of the string] */
+    else if ((result = (STRING_TOKEN*)malloc(sizeof(STRING_TOKEN))) == NULL)
+    {
+        LogError("Memory Allocation failed. Cannot allocate STRING_TOKENIZER.");
+    }
+    else if ((mallocAndStrcpy_s(&inputStringToMalloc, input)) != 0)
+    {
+        LogError("Memory Allocation Failed. Cannot allocate and copy string Content.");
+        free(result);
+        result = NULL;
+    }
+    else
+    {
+        result->inputString = inputStringToMalloc;
+        result->currentPos = result->inputString; //Current Pos will point to the initial position of Token.
+        result->sizeOfinputString = strlen(result->inputString); //Calculate Size of Current String
+    }
+    return (STRING_TOKENIZER_HANDLE)result;
+}
+
+int STRING_TOKENIZER_get_next_token(STRING_TOKENIZER_HANDLE tokenizer, STRING_HANDLE output, const char* delimiters)
+{
+    int result;
+    /* Codes_SRS_STRING_04_004: [STRING_TOKENIZER_get_next_token shall return a nonzero value if any of the 3 parameters is NULL] */
+    if (tokenizer == NULL || output == NULL || delimiters == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else 
+    {
+        STRING_TOKEN* token = (STRING_TOKEN*)tokenizer;
+        /* Codes_SRS_STRING_04_011: [Each subsequent call to STRING_TOKENIZER_get_next_token starts searching from the saved position on t and behaves as described above.] */
+        size_t remainingInputStringSize = token->sizeOfinputString - (token->currentPos - token->inputString);
+        size_t delimitterSize = strlen(delimiters);
+
+        /* First Check if we reached the end of the string*/
+        /* Codes_SRS_STRING_TOKENIZER_04_014: [STRING_TOKENIZER_get_next_token shall return nonzero value if t contains an empty string.] */
+        if (remainingInputStringSize == 0)
+        {
+            result = MU_FAILURE;
+        }
+        else if (delimitterSize == 0)
+        {
+            LogError("Empty delimiters parameter.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            size_t i;
+            /* Codes_SRS_STRING_04_005: [STRING_TOKENIZER_get_next_token searches the string inside STRING_TOKENIZER_HANDLE for the first character that is NOT contained in the current delimiter] */
+            for (i = 0; i < remainingInputStringSize; i++)
+            {
+                size_t j;
+
+                bool foundDelimitter = false;
+                for (j = 0; j < delimitterSize; j++)
+                {
+                    if (token->currentPos[i] == delimiters[j])
+                    {
+                        foundDelimitter = true;
+                        break;
+                    }
+                }
+
+                /* Codes_SRS_STRING_04_007: [If such a character is found, STRING_TOKENIZER_get_next_token consider it as the start of a token.] */
+                if (!foundDelimitter)
+                {
+                    break;
+                }
+            }
+
+            /* Codes_SRS_STRING_04_006: [If no such character is found, then STRING_TOKENIZER_get_next_token shall return a nonzero Value (You've reach the end of the string or the string consists with only delimiters).] */
+            //At this point update Current Pos to the character of the last token found or end of String.
+            token->currentPos += i; 
+            
+            //Update the remainingInputStringSize
+            remainingInputStringSize -= i;
+            
+            /* Codes_SRS_STRING_04_006: [If no such character is found, then STRING_TOKENIZER_get_next_token shall return a nonzero Value (You've reach the end of the string or the string consists with only delimiters).] */
+            if (remainingInputStringSize == 0)
+            {
+                result = MU_FAILURE;
+            }
+            else
+            {
+                bool foundDelimitter = false;
+                const char* endOfTokenPosition=NULL;
+                size_t amountOfCharactersToCopy;
+                size_t j;
+                //At this point the Current Pos is pointing to a character that is point to a nonDelimiter. So, now search for a Delimiter, till the end of the String. 
+                /*Codes_SRS_STRING_04_008: [STRING_TOKENIZER_get_next_token than searches from the start of a token for a character that is contained in the delimiters string.] */
+                /* Codes_SRS_STRING_04_009: [If no such character is found, STRING_TOKENIZER_get_next_token extends the current token to the end of the string inside t, copies the token to output and returns 0.] */
+                /* Codes_SRS_STRING_04_010: [If such a character is found, STRING_TOKENIZER_get_next_token consider it the end of the token and copy it's content to output, updates the current position inside t to the next character and returns 0.] */
+                for (j = 0; j < delimitterSize; j++)
+                {
+                    if ((endOfTokenPosition = strchr(token->currentPos, delimiters[j])) != NULL)
+                    {
+                        foundDelimitter = true;
+                        break;
+                    }
+                }
+
+                //If token not found, than update the EndOfToken to the end of the inputString;
+                if (endOfTokenPosition == NULL)
+                {
+                    amountOfCharactersToCopy = remainingInputStringSize;
+                }
+                else
+                {
+                    amountOfCharactersToCopy = endOfTokenPosition - token->currentPos;
+                }
+                
+                //copy here the string to output. 
+                if (STRING_copy_n(output, token->currentPos, amountOfCharactersToCopy) != 0)
+                {
+                    LogError("Problem copying token to output String.");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    //Update the Current position.
+                    //Check if end of String reached so, currentPos points to the end of String.
+                    if (foundDelimitter)
+                    {
+                        token->currentPos += amountOfCharactersToCopy + 1;
+                    }
+                    else
+                    {
+                        token->currentPos += amountOfCharactersToCopy;
+                    }
+                    
+                    result = 0; //Result will be on the output. 
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+
+/* Codes_SRS_STRING_TOKENIZER_04_012: [STRING_TOKENIZER_destroy shall free the memory allocated by the STRING_TOKENIZER_create ] */
+void STRING_TOKENIZER_destroy(STRING_TOKENIZER_HANDLE t)
+{
+    /* Codes_SRS_STRING_TOKENIZER_04_013: [When the t argument is NULL, then STRING_TOKENIZER_destroy shall not attempt to free] */
+    if (t != NULL)
+    {
+        STRING_TOKEN* value = (STRING_TOKEN*)t;
+        free((char*)value->inputString);
+        value->inputString = NULL;
+        free(value);
+    }
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/strings.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/strings.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/strings.c	(revision 389)
@@ -0,0 +1,859 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+//
+// PUT NO INCLUDES BEFORE HERE
+//
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include <stddef.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+//
+// PUT NO CLIENT LIBRARY INCLUDES BEFORE HERE
+//
+
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+static const char hexToASCII[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+typedef struct STRING_TAG
+{
+    char* s;
+} STRING;
+
+/*this function will allocate a new string with just '\0' in it*/
+/*return NULL if it fails*/
+/* Codes_SRS_STRING_07_001: [STRING_new shall allocate a new STRING_HANDLE pointing to an empty string.] */
+STRING_HANDLE STRING_new(void)
+{
+    STRING* result;
+    if ((result = (STRING*)malloc(sizeof(STRING))) != NULL)
+    {
+        if ((result->s = (char*)malloc(1)) != NULL)
+        {
+            result->s[0] = '\0';
+        }
+        else
+        {
+            /* Codes_SRS_STRING_07_002: [STRING_new shall return an NULL STRING_HANDLE on any error that is encountered.] */
+            LogError("Failure allocating in STRING_new.");
+            free(result);
+            result = NULL;
+        }
+    }
+    return (STRING_HANDLE)result;
+}
+
+/*Codes_SRS_STRING_02_001: [STRING_clone shall produce a new string having the same content as the handle string.*/
+STRING_HANDLE STRING_clone(STRING_HANDLE handle)
+{
+    STRING* result;
+    /*Codes_SRS_STRING_02_002: [If parameter handle is NULL then STRING_clone shall return NULL.]*/
+    if (handle == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_STRING_02_003: [If STRING_clone fails for any reason, it shall return NULL.] */
+        if ((result = (STRING*)malloc(sizeof(STRING))) != NULL)
+        {
+            STRING* source = (STRING*)handle;
+            /*Codes_SRS_STRING_02_003: [If STRING_clone fails for any reason, it shall return NULL.] */
+            size_t sourceLen = strlen(source->s);
+            if ((result->s = (char*)malloc(sourceLen + 1)) == NULL)
+            {
+                LogError("Failure allocating clone value.");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                (void)memcpy(result->s, source->s, sourceLen + 1);
+            }
+        }
+        else
+        {
+            /*not much to do, result is NULL from malloc*/
+        }
+    }
+    return (STRING_HANDLE)result;
+}
+
+/* Codes_SRS_STRING_07_003: [STRING_construct shall allocate a new string with the value of the specified const char*.] */
+STRING_HANDLE STRING_construct(const char* psz)
+{
+    STRING_HANDLE result;
+    if (psz == NULL)
+    {
+        /* Codes_SRS_STRING_07_005: [If the supplied const char* is NULL STRING_construct shall return a NULL value.] */
+        result = NULL;
+    }
+    else
+    {
+        STRING* str;
+        if ((str = (STRING*)malloc(sizeof(STRING))) != NULL)
+        {
+            size_t nLen = strlen(psz) + 1;
+            if ((str->s = (char*)malloc(nLen)) != NULL)
+            {
+                (void)memcpy(str->s, psz, nLen);
+                result = (STRING_HANDLE)str;
+            }
+            /* Codes_SRS_STRING_07_032: [STRING_construct encounters any error it shall return a NULL value.] */
+            else
+            {
+                LogError("Failure allocating constructed value.");
+                free(str);
+                result = NULL;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_STRING_07_032: [STRING_construct encounters any error it shall return a NULL value.] */
+            LogError("Failure allocating value.");
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+#if defined(__GNUC__)
+__attribute__ ((format (printf, 1, 2)))
+#endif
+STRING_HANDLE STRING_construct_sprintf(const char* format, ...)
+{
+    STRING* result;
+
+#ifdef STRINGS_C_SPRINTF_BUFFER_SIZE
+    size_t maxBufSize = STRINGS_C_SPRINTF_BUFFER_SIZE;
+    char buf[STRINGS_C_SPRINTF_BUFFER_SIZE];
+#else
+    size_t maxBufSize = 0;
+    char* buf = NULL;
+#endif
+
+    if (format != NULL)
+    {
+        va_list arg_list;
+        int length;
+        va_start(arg_list, format);
+
+        /* Codes_SRS_STRING_07_041: [STRING_construct_sprintf shall determine the size of the resulting string and allocate the necessary memory.] */
+        length = vsnprintf(buf, maxBufSize, format, arg_list);
+        va_end(arg_list);
+        if (length > 0)
+        {
+            result = (STRING*)malloc(sizeof(STRING));
+            if (result != NULL)
+            {
+                result->s = (char*)malloc(length+1);
+                if (result->s != NULL)
+                {
+                    va_start(arg_list, format);
+                    if (vsnprintf(result->s, length+1, format, arg_list) < 0)
+                    {
+                        /* Codes_SRS_STRING_07_040: [If any error is encountered STRING_construct_sprintf shall return NULL.] */
+                        free(result->s);
+                        free(result);
+                        result = NULL;
+                        LogError("Failure: vsnprintf formatting failed.");
+                    }
+                    va_end(arg_list);
+                }
+                else
+                {
+                    /* Codes_SRS_STRING_07_040: [If any error is encountered STRING_construct_sprintf shall return NULL.] */
+                    free(result);
+                    result = NULL;
+                    LogError("Failure: allocation sprintf value failed.");
+                }
+            }
+            else
+            {
+                LogError("Failure: allocation failed.");
+            }
+        }
+        else if (length == 0)
+        {
+            result = (STRING*)STRING_new();
+        }
+        else
+        {
+            /* Codes_SRS_STRING_07_039: [If the parameter format is NULL then STRING_construct_sprintf shall return NULL.] */
+            result = NULL;
+            LogError("Failure: vsnprintf return 0 length");
+        }
+    }
+    else
+    {
+        LogError("Failure: invalid argument.");
+        result = NULL;
+    }
+    /* Codes_SRS_STRING_07_045: [STRING_construct_sprintf shall allocate a new string with the value of the specified printf formated const char. ] */
+    return (STRING_HANDLE)result;
+}
+
+/*this function will return a new STRING with the memory for the actual string passed in as a parameter.*/
+/*return NULL if it fails.*/
+/* The supplied memory must have been allocated with malloc! */
+/* Codes_SRS_STRING_07_006: [STRING_new_with_memory shall return a STRING_HANDLE by using the supplied char* memory.] */
+STRING_HANDLE STRING_new_with_memory(const char* memory)
+{
+    STRING* result;
+    if (memory == NULL)
+    {
+        /* Codes_SRS_STRING_07_007: [STRING_new_with_memory shall return a NULL STRING_HANDLE if the supplied char* is NULL.] */
+        result = NULL;
+    }
+    else
+    {
+        if ((result = (STRING*)malloc(sizeof(STRING))) != NULL)
+        {
+            result->s = (char*)memory;
+        }
+        else
+        {
+            LogError("Failure: allocating memory string");
+        }
+    }
+    return (STRING_HANDLE)result;
+}
+
+/* Codes_SRS_STRING_07_008: [STRING_new_quoted shall return a valid STRING_HANDLE Copying the supplied const char* value surrounded by quotes.] */
+STRING_HANDLE STRING_new_quoted(const char* source)
+{
+    STRING* result;
+    if (source == NULL)
+    {
+        /* Codes_SRS_STRING_07_009: [STRING_new_quoted shall return a NULL STRING_HANDLE if the supplied const char* is NULL.] */
+        result = NULL;
+    }
+    else if ((result = (STRING*)malloc(sizeof(STRING))) != NULL)
+    {
+        size_t sourceLength = strlen(source);
+        if ((result->s = (char*)malloc(sourceLength + 3)) != NULL)
+        {
+            result->s[0] = '"';
+            (void)memcpy(result->s + 1, source, sourceLength);
+            result->s[sourceLength + 1] = '"';
+            result->s[sourceLength + 2] = '\0';
+        }
+        else
+        {
+            /* Codes_SRS_STRING_07_031: [STRING_new_quoted shall return a NULL STRING_HANDLE if any error is encountered.] */
+            LogError("Failure allocating quoted string value.");
+            free(result);
+            result = NULL;
+        }
+    }
+    return (STRING_HANDLE)result;
+}
+
+/*this function takes a regular const char* and turns in into "this is a\"JSON\" strings\u0008" (starting and ending quote included)*/
+/*the newly created handle needs to be disposed of with STRING_delete*/
+/*returns NULL if there are errors*/
+STRING_HANDLE STRING_new_JSON(const char* source)
+{
+    STRING* result;
+    if (source == NULL)
+    {
+        /*Codes_SRS_STRING_02_011: [If source is NULL then STRING_new_JSON shall return NULL.] */
+        result = NULL;
+        LogError("invalid arg (NULL)");
+    }
+    else
+    {
+        size_t i;
+        size_t nControlCharacters = 0; /*counts how many characters are to be expanded from 1 character to \uxxxx (6 characters)*/
+        size_t nEscapeCharacters = 0;
+        size_t vlen = strlen(source);
+
+        for (i = 0; i < vlen; i++)
+        {
+            /*Codes_SRS_STRING_02_014: [If any character has the value outside [1...127] then STRING_new_JSON shall fail and return NULL.] */
+            if ((unsigned char)source[i] >= 128) /*this be a UNICODE character begin*/
+            {
+                break;
+            }
+            else
+            {
+                if (source[i] <= 0x1F)
+                {
+                    nControlCharacters++;
+                }
+                else if (
+                    (source[i] == '"') ||
+                    (source[i] == '\\') ||
+                    (source[i] == '/')
+                    )
+                {
+                    nEscapeCharacters++;
+                }
+            }
+        }
+
+        if (i < vlen)
+        {
+            result = NULL;
+            LogError("invalid character in input string");
+        }
+        else
+        {
+            if ((result = (STRING*)malloc(sizeof(STRING))) == NULL)
+            {
+                /*Codes_SRS_STRING_02_021: [If the complete JSON representation cannot be produced, then STRING_new_JSON shall fail and return NULL.] */
+                LogError("malloc json failure");
+            }
+            else if ((result->s = (char*)malloc(vlen + 5 * nControlCharacters + nEscapeCharacters + 3)) == NULL)
+            {
+                /*Codes_SRS_STRING_02_021: [If the complete JSON representation cannot be produced, then STRING_new_JSON shall fail and return NULL.] */
+                free(result);
+                result = NULL;
+                LogError("malloc failed");
+            }
+            else
+            {
+                size_t pos = 0;
+                /*Codes_SRS_STRING_02_012: [The string shall begin with the quote character.] */
+                result->s[pos++] = '"';
+                for (i = 0; i < vlen; i++)
+                {
+                    if (source[i] <= 0x1F)
+                    {
+                        /*Codes_SRS_STRING_02_019: [If the character code is less than 0x20 then it shall be represented as \u00xx, where xx is the hex representation of the character code.]*/
+                        result->s[pos++] = '\\';
+                        result->s[pos++] = 'u';
+                        result->s[pos++] = '0';
+                        result->s[pos++] = '0';
+                        result->s[pos++] = hexToASCII[(source[i] & 0xF0) >> 4]; /*high nibble*/
+                        result->s[pos++] = hexToASCII[source[i] & 0x0F]; /*low nibble*/
+                    }
+                    else if (source[i] == '"')
+                    {
+                        /*Codes_SRS_STRING_02_016: [If the character is " (quote) then it shall be repsented as \".] */
+                        result->s[pos++] = '\\';
+                        result->s[pos++] = '"';
+                    }
+                    else if (source[i] == '\\')
+                    {
+                        /*Codes_SRS_STRING_02_017: [If the character is \ (backslash) then it shall represented as \\.] */
+                        result->s[pos++] = '\\';
+                        result->s[pos++] = '\\';
+                    }
+                    else if (source[i] == '/')
+                    {
+                        /*Codes_SRS_STRING_02_018: [If the character is / (slash) then it shall be represented as \/.] */
+                        result->s[pos++] = '\\';
+                        result->s[pos++] = '/';
+                    }
+                    else
+                    {
+                        /*Codes_SRS_STRING_02_013: [The string shall copy the characters of source "as they are" (until the '\0' character) with the following exceptions:] */
+                        result->s[pos++] = source[i];
+                    }
+                }
+                /*Codes_SRS_STRING_02_020: [The string shall end with " (quote).] */
+                result->s[pos++] = '"';
+                /*zero terminating it*/
+                result->s[pos] = '\0';
+            }
+        }
+
+    }
+    return (STRING_HANDLE)result;
+}
+
+/*this function will concatenate to the string s1 the string s2, resulting in s1+s2*/
+/*returns 0 if success*/
+/*any other error code is failure*/
+/* Codes_SRS_STRING_07_012: [STRING_concat shall concatenate the given STRING_HANDLE and the const char* value and place the value in the handle.] */
+int STRING_concat(STRING_HANDLE handle, const char* s2)
+{
+    int result;
+    if ((handle == NULL) || (s2 == NULL))
+    {
+        /* Codes_SRS_STRING_07_013: [STRING_concat shall return a nonzero number if an error is encountered.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING* s1 = (STRING*)handle;
+        size_t s1Length = strlen(s1->s);
+        size_t s2Length = strlen(s2);
+        char* temp = (char*)realloc(s1->s, s1Length + s2Length + 1);
+        if (temp == NULL)
+        {
+            /* Codes_SRS_STRING_07_013: [STRING_concat shall return a nonzero number if an error is encountered.] */
+            LogError("Failure reallocating value.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            s1->s = temp;
+            (void)memcpy(s1->s + s1Length, s2, s2Length + 1);
+            result = 0;
+        }
+    }
+    return result;
+}
+
+/*this function will concatenate to the string s1 the string s2, resulting in s1+s2*/
+/*returns 0 if success*/
+/*any other error code is failure*/
+/* Codes_SRS_STRING_07_034: [String_Concat_with_STRING shall concatenate a given STRING_HANDLE variable with a source STRING_HANDLE.] */
+int STRING_concat_with_STRING(STRING_HANDLE s1, STRING_HANDLE s2)
+{
+    int result;
+    if ((s1 == NULL) || (s2 == NULL))
+    {
+        /* Codes_SRS_STRING_07_035: [String_Concat_with_STRING shall return a nonzero number if an error is encountered.] */
+        LogError("Invalid argument specified");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING* dest = (STRING*)s1;
+        STRING* src = (STRING*)s2;
+
+        size_t s1Length = strlen(dest->s);
+        size_t s2Length = strlen(src->s);
+        char* temp = (char*)realloc(dest->s, s1Length + s2Length + 1);
+        if (temp == NULL)
+        {
+            /* Codes_SRS_STRING_07_035: [String_Concat_with_STRING shall return a nonzero number if an error is encountered.] */
+            LogError("Failure reallocating value");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            dest->s = temp;
+            /* Codes_SRS_STRING_07_034: [String_Concat_with_STRING shall concatenate a given STRING_HANDLE variable with a source STRING_HANDLE.] */
+            (void)memcpy(dest->s + s1Length, src->s, s2Length + 1);
+            result = 0;
+        }
+    }
+    return result;
+}
+
+/*this function will copy the string from s2 to s1*/
+/*returns 0 if success*/
+/*any other error code is failure*/
+/* Codes_SRS_STRING_07_016: [STRING_copy shall copy the const char* into the supplied STRING_HANDLE.] */
+int STRING_copy(STRING_HANDLE handle, const char* s2)
+{
+    int result;
+    if ((handle == NULL) || (s2 == NULL))
+    {
+        /* Codes_SRS_STRING_07_017: [STRING_copy shall return a nonzero value if any of the supplied parameters are NULL.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING* s1 = (STRING*)handle;
+        /* Codes_SRS_STRING_07_026: [If the underlying char* refered to by s1 handle is equal to char* s2 than STRING_copy shall be a noop and return 0.] */
+        if (s1->s != s2)
+        {
+            size_t s2Length = strlen(s2);
+            char* temp = (char*)realloc(s1->s, s2Length + 1);
+            if (temp == NULL)
+            {
+                LogError("Failure reallocating value.");
+                /* Codes_SRS_STRING_07_027: [STRING_copy shall return a nonzero value if any error is encountered.] */
+                result = MU_FAILURE;
+            }
+            else
+            {
+                s1->s = temp;
+                memmove(s1->s, s2, s2Length + 1);
+                result = 0;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_STRING_07_033: [If overlapping pointer address is given to STRING_copy the behavior is undefined.] */
+            result = 0;
+        }
+    }
+    return result;
+}
+
+/*this function will copy n chars from s2 to the string s1, resulting in n chars only from s2 being stored in s1.*/
+/*returns 0 if success*/
+/*any other error code is failure*/
+/* Codes_SRS_STRING_07_018: [STRING_copy_n shall copy the number of characters in const char* or the size_t whichever is lesser.] */
+int STRING_copy_n(STRING_HANDLE handle, const char* s2, size_t n)
+{
+    int result;
+    if ((handle == NULL) || (s2 == NULL))
+    {
+        /* Codes_SRS_STRING_07_019: [STRING_copy_n shall return a nonzero value if STRING_HANDLE or const char* is NULL.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING* s1 = (STRING*)handle;
+        size_t s2Length = strlen(s2);
+        char* temp;
+        if (s2Length > n)
+        {
+            s2Length = n;
+        }
+
+        temp = (char*)realloc(s1->s, s2Length + 1);
+        if (temp == NULL)
+        {
+            LogError("Failure reallocating value.");
+            /* Codes_SRS_STRING_07_028: [STRING_copy_n shall return a nonzero value if any error is encountered.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            s1->s = temp;
+            (void)memcpy(s1->s, s2, s2Length);
+            s1->s[s2Length] = 0;
+            result = 0;
+        }
+
+    }
+    return result;
+}
+
+#if defined(__GNUC__)
+__attribute__ ((format (printf, 2, 3)))
+#endif
+int STRING_sprintf(STRING_HANDLE handle, const char* format, ...)
+{
+    int result;
+
+#ifdef STRINGS_C_SPRINTF_BUFFER_SIZE
+    size_t maxBufSize = STRINGS_C_SPRINTF_BUFFER_SIZE;
+    char buf[STRINGS_C_SPRINTF_BUFFER_SIZE];
+#else
+    size_t maxBufSize = 0;
+    char* buf = NULL;
+#endif
+
+    if (handle == NULL || format == NULL)
+    {
+        /* Codes_SRS_STRING_07_042: [if the parameters s1 or format are NULL then STRING_sprintf shall return non zero value.] */
+        LogError("Invalid arg (NULL)");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        va_list arg_list;
+        int s2Length;
+        va_start(arg_list, format);
+
+        s2Length = vsnprintf(buf, maxBufSize, format, arg_list);
+        va_end(arg_list);
+        if (s2Length < 0)
+        {
+            /* Codes_SRS_STRING_07_043: [If any error is encountered STRING_sprintf shall return a non zero value.] */
+            LogError("Failure vsnprintf return < 0");
+            result = MU_FAILURE;
+        }
+        else if (s2Length == 0)
+        {
+            // Don't need to reallocate and nothing should be added
+            result = 0;
+        }
+        else
+        {
+            STRING* s1 = (STRING*)handle;
+            char* temp;
+            size_t s1Length = strlen(s1->s);
+            temp = (char*)realloc(s1->s, s1Length + s2Length + 1);
+            if (temp != NULL)
+            {
+                s1->s = temp;
+                va_start(arg_list, format);
+                if (vsnprintf(s1->s + s1Length, s1Length + s2Length + 1, format, arg_list) < 0)
+                {
+                    /* Codes_SRS_STRING_07_043: [If any error is encountered STRING_sprintf shall return a non zero value.] */
+                    LogError("Failure vsnprintf formatting error");
+                    s1->s[s1Length] = '\0';
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    /* Codes_SRS_STRING_07_044: [On success STRING_sprintf shall return 0.]*/
+                    result = 0;
+                }
+                va_end(arg_list);
+            }
+            else
+            {
+                /* Codes_SRS_STRING_07_043: [If any error is encountered STRING_sprintf shall return a non zero value.] */
+                LogError("Failure unable to reallocate memory");
+                result = MU_FAILURE;
+            }
+        }
+    }
+    return result;
+}
+
+/*this function will quote the string passed as argument string =>"string"*/
+/*returns 0 if success*/ /*doesn't change the string otherwise*/
+/*any other error code is failure*/
+/* Codes_SRS_STRING_07_014: [STRING_quote shall "quote" the supplied STRING_HANDLE and return 0 on success.] */
+int STRING_quote(STRING_HANDLE handle)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_STRING_07_015: [STRING_quote shall return a nonzero value if any of the supplied parameters are NULL.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING* s1 = (STRING*)handle;
+        size_t s1Length = strlen(s1->s);
+        char* temp = (char*)realloc(s1->s, s1Length + 2 + 1);/*2 because 2 quotes, 1 because '\0'*/
+        if (temp == NULL)
+        {
+            LogError("Failure reallocating value.");
+            /* Codes_SRS_STRING_07_029: [STRING_quote shall return a nonzero value if any error is encountered.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            s1->s = temp;
+            memmove(s1->s + 1, s1->s, s1Length);
+            s1->s[0] = '"';
+            s1->s[s1Length + 1] = '"';
+            s1->s[s1Length + 2] = '\0';
+            result = 0;
+        }
+    }
+    return result;
+}
+/*this function will revert a string to an empty state*/
+/*Returns 0 if the revert was succesful*/
+/* Codes_SRS_STRING_07_022: [STRING_empty shall revert the STRING_HANDLE to an empty state.] */
+int STRING_empty(STRING_HANDLE handle)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_STRING_07_023: [STRING_empty shall return a nonzero value if the STRING_HANDLE is NULL.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING* s1 = (STRING*)handle;
+        char* temp = (char*)realloc(s1->s, 1);
+        if (temp == NULL)
+        {
+            LogError("Failure reallocating value.");
+            /* Codes_SRS_STRING_07_030: [STRING_empty shall return a nonzero value if the STRING_HANDLE is NULL.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            s1->s = temp;
+            s1->s[0] = '\0';
+            result = 0;
+        }
+    }
+    return result;
+}
+
+/*this function will deallocate a string constructed by str_new*/
+/* Codes_SRS_STRING_07_010: [STRING_delete will free the memory allocated by the STRING_HANDLE.] */
+void STRING_delete(STRING_HANDLE handle)
+{
+    /* Codes_SRS_STRING_07_011: [STRING_delete will not attempt to free anything with a NULL STRING_HANDLE.] */
+    if (handle != NULL)
+    {
+        STRING* value = (STRING*)handle;
+        free(value->s);
+        value->s = NULL;
+        free(value);
+    }
+}
+
+/* Codes_SRS_STRING_07_020: [STRING_c_str shall return the const char* associated with the given STRING_HANDLE.] */
+const char* STRING_c_str(STRING_HANDLE handle)
+{
+    const char* result;
+    if (handle != NULL)
+    {
+        result = ((STRING*)handle)->s;
+    }
+    else
+    {
+        /* Codes_SRS_STRING_07_021: [STRING_c_str shall return NULL if the STRING_HANDLE is NULL.] */
+        result = NULL;
+    }
+    return result;
+}
+
+/* Codes_SRS_STRING_07_024: [STRING_length shall return the length of the underlying char* for the given handle] */
+size_t STRING_length(STRING_HANDLE handle)
+{
+    size_t result = 0;
+    /* Codes_SRS_STRING_07_025: [STRING_length shall return zero if the given handle is NULL.] */
+    if (handle != NULL)
+    {
+        STRING* value = (STRING*)handle;
+        result = strlen(value->s);
+    }
+    return result;
+}
+
+/*Codes_SRS_STRING_02_007: [STRING_construct_n shall construct a STRING_HANDLE from first "n" characters of the string pointed to by psz parameter.]*/
+STRING_HANDLE STRING_construct_n(const char* psz, size_t n)
+{
+    STRING_HANDLE result;
+    /*Codes_SRS_STRING_02_008: [If psz is NULL then STRING_construct_n shall return NULL.] */
+    if (psz == NULL)
+    {
+        result = NULL;
+        LogError("invalid arg (NULL)");
+    }
+    else
+    {
+        size_t len = strlen(psz);
+        /*Codes_SRS_STRING_02_009: [If n is bigger than the size of the string psz, then STRING_construct_n shall return NULL.] */
+        if (n > len)
+        {
+            result = NULL;
+            LogError("invalig arg (n is bigger than the size of the string)");
+        }
+        else
+        {
+            STRING* str;
+            if ((str = (STRING*)malloc(sizeof(STRING))) != NULL)
+            {
+                if ((str->s = (char*)malloc(len + 1)) != NULL)
+                {
+                    (void)memcpy(str->s, psz, n);
+                    str->s[n] = '\0';
+                    result = (STRING_HANDLE)str;
+                }
+                /* Codes_SRS_STRING_02_010: [In all other error cases, STRING_construct_n shall return NULL.]  */
+                else
+                {
+                    LogError("Failure allocating value.");
+                    free(str);
+                    result = NULL;
+                }
+            }
+            else
+            {
+                /* Codes_SRS_STRING_02_010: [In all other error cases, STRING_construct_n shall return NULL.]  */
+                result = NULL;
+            }
+        }
+    }
+    return result;
+}
+
+/* Codes_SRS_STRING_07_034: [STRING_compare returns an integer greater than, equal to, or less than zero, accordingly as the string pointed to by s1 is greater than, equal to, or less than the string s2.] */
+int STRING_compare(STRING_HANDLE s1, STRING_HANDLE s2)
+{
+    int result;
+    if (s1 == NULL && s2 == NULL)
+    {
+        /* Codes_SRS_STRING_07_035: [If h1 and h2 are both NULL then STRING_compare shall return 0.]*/
+        result = 0;
+    }
+    else if (s1 == NULL)
+    {
+        /* Codes_SRS_STRING_07_036: [If h1 is NULL and h2 is nonNULL then STRING_compare shall return 1.]*/
+        result = 1;
+    }
+    else if (s2 == NULL)
+    {
+        /* Codes_SRS_STRING_07_037: [If h2 is NULL and h1 is nonNULL then STRING_compare shall return -1.] */
+        result = -1;
+    }
+    else
+    {
+        /* Codes_SRS_STRING_07_038: [STRING_compare shall compare the char s variable using the strcmp function.] */
+        STRING* value1 = (STRING*)s1;
+        STRING* value2 = (STRING*)s2;
+        result = strcmp(value1->s, value2->s);
+    }
+    return result;
+}
+
+STRING_HANDLE STRING_from_byte_array(const unsigned char* source, size_t size)
+{
+    STRING* result;
+    /*Codes_SRS_STRING_02_022: [ If source is NULL and size > 0 then STRING_from_BUFFER shall fail and return NULL. ]*/
+    if ((source == NULL) && (size > 0))
+    {
+        LogError("invalid parameter (NULL)");
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_STRING_02_023: [ Otherwise, STRING_from_BUFFER shall build a string that has the same content (byte-by-byte) as source and return a non-NULL handle. ]*/
+        result = (STRING*)malloc(sizeof(STRING));
+        if (result == NULL)
+        {
+            /*Codes_SRS_STRING_02_024: [ If building the string fails, then STRING_from_BUFFER shall fail and return NULL. ]*/
+            LogError("oom - unable to malloc");
+            /*return as is*/
+        }
+        else
+        {
+            /*Codes_SRS_STRING_02_023: [ Otherwise, STRING_from_BUFFER shall build a string that has the same content (byte-by-byte) as source and return a non-NULL handle. ]*/
+            result->s = (char*)malloc(size + 1);
+            if (result->s == NULL)
+            {
+                /*Codes_SRS_STRING_02_024: [ If building the string fails, then STRING_from_BUFFER shall fail and return NULL. ]*/
+                LogError("oom - unable to malloc");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                (void)memcpy(result->s, source, size);
+                result->s[size] = '\0'; /*all is fine*/
+            }
+        }
+    }
+    return (STRING_HANDLE)result;
+}
+
+int STRING_replace(STRING_HANDLE handle, char target, char replace)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_STRING_07_046: [ If handle is NULL STRING_replace shall return a non-zero value. ] */
+        result = MU_FAILURE;
+    }
+    else if (target == replace)
+    {
+        /* Codes_SRS_STRING_07_048: [ If target and replace are equal STRING_replace, shall do nothing shall return zero. ] */
+        result = 0;
+    }
+    else
+    {
+        size_t length;
+        size_t index;
+        /* Codes_SRS_STRING_07_047: [ STRING_replace shall replace all instances of target with replace. ] */
+        STRING* str_value = (STRING*)handle;
+        length = strlen(str_value->s);
+        for (index = 0; index < length; index++)
+        {
+            if (str_value->s[index] == target)
+            {
+                str_value->s[index] = replace;
+            }
+        }
+        /* Codes_SRS_STRING_07_049: [ On success STRING_replace shall return zero. ] */
+        result = 0;
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/urlencode.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/urlencode.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/urlencode.c	(revision 389)
@@ -0,0 +1,351 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/urlencode.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+
+#define NIBBLE_TO_STRING(c) (char)((c) < 10 ? (c) + '0' : (c) - 10 + 'a')
+#define NIBBLE_FROM_STRING(c) (char)(ISDIGIT(c) ? (c) - '0' : TOUPPER(c) + 10 - 'A')
+#define IS_HEXDIGIT(c) (            \
+    ((c >= '0') && (c <= '9')) ||   \
+    ((c >= 'A') && (c <= 'F')) ||   \
+    ((c >= 'a') && (c <= 'f'))      \
+)
+#define IS_PRINTABLE(c) (                           \
+    (c == 0) ||                                     \
+    (c == '!') ||                                   \
+    (c == '(') || (c == ')') || (c == '*') ||       \
+    (c == '-') || (c == '.') ||                     \
+    ((c >= '0') && (c <= '9')) ||                   \
+    ((c >= 'A') && (c <= 'Z')) ||                   \
+    (c == '_') ||                                   \
+    ((c >= 'a') && (c <= 'z'))                      \
+)
+
+/*The below macros are to be called on the big nibble of a hex value*/
+#define IS_IN_ASCII_RANGE(c) (  \
+    (c >= '0') && (c <= '7')    \
+)
+#define IS_IN_EXTENDED_ASCII_RANGE(c) ( \
+    ((c >= '8') && (c <= '9')) ||       \
+    ((c >= 'A') && (c <= 'F')) ||       \
+    ((c >= 'a') && (c <= 'f'))          \
+)
+#define IS_IN_CONTINUATION_BYTE_RANGE(c) (  \
+    (c == '8') || (c == '9') ||             \
+    (c == 'A') || (c == 'B') ||             \
+    (c == 'a') || (c == 'b')                \
+)
+#define IS_IN_LEADING_BYTE_RANGE(c) (   \
+    ((c >= 'C') && (c <= 'F')) ||       \
+    ((c >= 'c') && (c <= 'f'))          \
+)
+#define IS_IN_UNSUPPORTED_LEADING_BYTE_RANGE(c) (   \
+    ((c >= 'D') && (c <= 'F')) ||                   \
+    ((c >= 'd') && (c <= 'f'))                      \
+)
+
+static size_t URL_PrintableChar(unsigned char charVal, char* buffer)
+{
+    size_t size;
+    if (IS_PRINTABLE(charVal))
+    {
+        buffer[0] = (char)charVal;
+        size = 1;
+    }
+    else
+    {
+        char bigNibbleStr;
+        char littleNibbleStr;
+        unsigned char bigNibbleVal = charVal >> 4;
+        unsigned char littleNibbleVal = charVal & 0x0F;
+
+        if (bigNibbleVal >= 0x0C)
+        {
+            bigNibbleVal -= 0x04;
+        }
+
+        bigNibbleStr = NIBBLE_TO_STRING(bigNibbleVal);
+        littleNibbleStr = NIBBLE_TO_STRING(littleNibbleVal);
+
+        buffer[0] = '%';
+
+        if (charVal < 0x80)
+        {
+            buffer[1] = bigNibbleStr;
+            buffer[2] = littleNibbleStr;
+            size = 3;
+        }
+        else
+        {
+            buffer[1] = 'c';
+            buffer[3] = '%';
+            buffer[4] = bigNibbleStr;
+            buffer[5] = littleNibbleStr;
+            if (charVal < 0xC0)
+            {
+                buffer[2] = '2';
+            }
+            else
+            {
+                buffer[2] = '3';
+            }
+            size = 6;
+        }
+    }
+
+    return size;
+}
+
+static size_t calculateDecodedStringSize(const char* encodedString, size_t len)
+{
+    size_t decodedSize = 0;
+
+    if (encodedString == NULL)
+    {
+        LogError("Null encoded string");
+    }
+    else if (len == 0)
+    {
+        decodedSize = 1; //for null terminator
+    }
+    else
+    {
+        size_t remaining_len = len;
+        size_t next_step = 0;
+        size_t i = 0;
+        while (i < len)
+        {
+            //percent encoded character
+            if (encodedString[i] == '%')
+            {
+                if (remaining_len < 3 || !IS_HEXDIGIT(encodedString[i+1]) || !IS_HEXDIGIT(encodedString[i+2]))
+                {
+                    LogError("Incomplete or invalid percent encoding");
+                    break;
+                }
+                else if (!IS_IN_ASCII_RANGE(encodedString[i+1]))
+                {
+                    LogError("Out of range of characters accepted by this decoder");
+                    break;
+                }
+                else
+                {
+                    decodedSize++;
+                    next_step = 3;
+                }
+            }
+            else if (!IS_PRINTABLE(encodedString[i]))
+            {
+                LogError("Unprintable value in encoded string");
+                break;
+            }
+            //safe character
+            else
+            {
+                decodedSize++;
+                next_step = 1;
+            }
+
+            i += next_step;
+            remaining_len -= next_step;
+        }
+
+        if (encodedString[i] != '\0') //i.e. broke out of above loop due to error
+        {
+            decodedSize = 0;
+        }
+        else
+        {
+            decodedSize++; //add space for the null terminator
+        }
+    }
+    return decodedSize;
+}
+
+static unsigned char charFromNibbles(char bigNibbleStr, char littleNibbleStr)
+{
+    unsigned char bigNibbleVal = NIBBLE_FROM_STRING(bigNibbleStr);
+    unsigned char littleNibbleVal = NIBBLE_FROM_STRING(littleNibbleStr);
+
+    return bigNibbleVal << 4 | littleNibbleVal;
+}
+
+static void createDecodedString(const char* input, size_t input_size, char* output)
+{
+    /* Note that there is no danger of reckless indexing here, as calculateDecodedStringSize()
+    has already checked lengths of strings to ensure the formatting is always correct*/
+    size_t i = 0;
+    while (i <= input_size) //the <= instead of < ensures the '\0' will be copied
+    {
+        if (input[i] != '%')
+        {
+            *output++ = input[i];
+            i++;
+        }
+        else
+        {
+            *output++ = charFromNibbles(input[i+1], input[i+2]);
+            i += 3;
+        }
+    }
+}
+
+static size_t URL_PrintableCharSize(unsigned char charVal)
+{
+    size_t size;
+    if (IS_PRINTABLE(charVal))
+    {
+        size = 1;
+    }
+    else
+    {
+        if (charVal < 0x80)
+        {
+            size = 3;
+        }
+        else
+        {
+            size = 6;
+        }
+    }
+    return size;
+}
+
+static STRING_HANDLE encode_url_data(const char* text)
+{
+    STRING_HANDLE result;
+    size_t lengthOfResult = 0;
+    char* encodedURL;
+    unsigned char currentUnsignedChar;
+    const char* iterator = text;
+
+    /*Codes_SRS_URL_ENCODE_06_003: [If input is a zero length string then URL_Encode will return a zero length string.]*/
+    do
+    {
+        currentUnsignedChar = (unsigned char)(*iterator++);
+        lengthOfResult += URL_PrintableCharSize(currentUnsignedChar);
+    } while (currentUnsignedChar != 0);
+
+    if ((encodedURL = (char*)malloc(lengthOfResult)) == NULL)
+    {
+        /*Codes_SRS_URL_ENCODE_06_002: [If an error occurs during the encoding of input then URL_Encode will return NULL.]*/
+        result = NULL;
+        LogError("URL_Encode:: MALLOC failure on encode.");
+    }
+    else
+    {
+        size_t currentEncodePosition = 0;
+        iterator = text;;
+        do
+        {
+            currentUnsignedChar = (unsigned char)(*iterator++);
+            currentEncodePosition += URL_PrintableChar(currentUnsignedChar, &encodedURL[currentEncodePosition]);
+        } while (currentUnsignedChar != 0);
+
+        result = STRING_new_with_memory(encodedURL);
+        if (result == NULL)
+        {
+            LogError("URL_Encode:: MALLOC failure on encode.");
+            free(encodedURL);
+        }
+    }
+    return result;
+}
+
+STRING_HANDLE URL_EncodeString(const char* textEncode)
+{
+    STRING_HANDLE result;
+    if (textEncode == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        result = encode_url_data(textEncode);
+    }
+    return result;
+}
+
+STRING_HANDLE URL_Encode(STRING_HANDLE input)
+{
+    STRING_HANDLE result;
+    if (input == NULL)
+    {
+        /*Codes_SRS_URL_ENCODE_06_001: [If input is NULL then URL_Encode will return NULL.]*/
+        result = NULL;
+        LogError("URL_Encode:: NULL input");
+    }
+    else
+    {
+        result = encode_url_data(STRING_c_str(input));
+    }
+    return result;
+}
+
+STRING_HANDLE URL_DecodeString(const char* textDecode)
+{
+    STRING_HANDLE result;
+    if (textDecode == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        STRING_HANDLE tempString = STRING_construct(textDecode);
+        if (tempString == NULL)
+        {
+            result = NULL;
+        }
+        else
+        {
+            result = URL_Decode(tempString);
+            STRING_delete(tempString);
+        }
+    }
+    return result;
+}
+
+STRING_HANDLE URL_Decode(STRING_HANDLE input)
+{
+    STRING_HANDLE result;
+    if (input == NULL)
+    {
+        LogError("URL_Decode:: NULL input");
+        result = NULL;
+    }
+    else
+    {
+        size_t decodedStringSize;
+        char* decodedString;
+        const char* inputString = STRING_c_str(input);
+        size_t inputLen = strlen(inputString);
+        if ((decodedStringSize = calculateDecodedStringSize(inputString, inputLen)) == 0)
+        {
+            LogError("URL_Decode:: Invalid input string");
+            result = NULL;
+        }
+        else if ((decodedString = (char*)malloc(decodedStringSize)) == NULL)
+        {
+            LogError("URL_Decode:: MALLOC failure on decode.");
+            result = NULL;
+        }
+        else
+        {
+            createDecodedString(inputString, inputLen, decodedString);
+            result = STRING_new_with_memory(decodedString);
+            if (result == NULL)
+            {
+                LogError("URL_Decode:: MALLOC failure on decode");
+                free(decodedString);
+            }
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/usha.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/usha.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/usha.c	(revision 389)
@@ -0,0 +1,263 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/**************************** usha.c ****************************/
+/******************** See RFC 4634 for details ******************/
+/*
+*  Description:
+*     This file implements a unified interface to the SHA algorithms.
+*/
+
+#include "azure_c_shared_utility/sha.h"
+
+/*
+*  USHAReset
+*
+*  Description:
+*      This function will initialize the SHA Context in preparation
+*      for computing a new SHA message digest.
+*
+*  Parameters:
+*      context: [in/out]
+*          The context to reset.
+*      whichSha: [in]
+*          Selects which SHA reset to call
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int USHAReset(USHAContext *ctx, enum SHAversion whichSha)
+{
+    if (ctx) {
+        ctx->whichSha = whichSha;
+        switch (whichSha) {
+        case SHA1:   return SHA1Reset((SHA1Context*)&ctx->ctx);
+        case SHA224: return SHA224Reset((SHA224Context*)&ctx->ctx);
+        case SHA256: return SHA256Reset((SHA256Context*)&ctx->ctx);
+        case SHA384: return SHA384Reset((SHA384Context*)&ctx->ctx);
+        case SHA512: return SHA512Reset((SHA512Context*)&ctx->ctx);
+        default: return shaBadParam;
+        }
+    }
+    else {
+        return shaNull;
+    }
+}
+
+/*
+*  USHAInput
+*
+*  Description:
+*      This function accepts an array of octets as the next portion
+*      of the message.
+*
+*  Parameters:
+*      context: [in/out]
+*          The SHA context to update
+*      message_array: [in]
+*          An array of characters representing the next portion of
+*          the message.
+*      length: [in]
+*          The length of the message in message_array
+*
+*  Returns:
+*      sha Error Code.
+*
+*/
+int USHAInput(USHAContext *ctx,
+    const uint8_t *bytes, unsigned int bytecount)
+{
+    if (ctx) {
+        switch (ctx->whichSha) {
+        case SHA1:
+            return SHA1Input((SHA1Context*)&ctx->ctx, bytes, bytecount);
+        case SHA224:
+            return SHA224Input((SHA224Context*)&ctx->ctx, bytes,
+                bytecount);
+        case SHA256:
+            return SHA256Input((SHA256Context*)&ctx->ctx, bytes,
+                bytecount);
+        case SHA384:
+            return SHA384Input((SHA384Context*)&ctx->ctx, bytes,
+                bytecount);
+        case SHA512:
+            return SHA512Input((SHA512Context*)&ctx->ctx, bytes,
+                bytecount);
+        default: return shaBadParam;
+        }
+    }
+    else {
+        return shaNull;
+    }
+}
+
+/*
+* USHAFinalBits
+*
+* Description:
+*   This function will add in any final bits of the message.
+*
+* Parameters:
+*   context: [in/out]
+*     The SHA context to update
+*   message_bits: [in]
+*     The final bits of the message, in the upper portion of the
+*     byte. (Use 0b###00000 instead of 0b00000### to input the
+*     three bits ###.)
+*   length: [in]
+*     The number of bits in message_bits, between 1 and 7.
+*
+* Returns:
+*   sha Error Code.
+*/
+int USHAFinalBits(USHAContext *ctx,
+const uint8_t bits, unsigned int bitcount)
+{
+    if (ctx) {
+        switch (ctx->whichSha) {
+        case SHA1:
+            return SHA1FinalBits((SHA1Context*)&ctx->ctx, bits, bitcount);
+        case SHA224:
+            return SHA224FinalBits((SHA224Context*)&ctx->ctx, bits,
+                bitcount);
+        case SHA256:
+            return SHA256FinalBits((SHA256Context*)&ctx->ctx, bits,
+                bitcount);
+        case SHA384:
+            return SHA384FinalBits((SHA384Context*)&ctx->ctx, bits,
+                bitcount);
+        case SHA512:
+            return SHA512FinalBits((SHA512Context*)&ctx->ctx, bits,
+                bitcount);
+        default: return shaBadParam;
+        }
+    }
+    else {
+        return shaNull;
+    }
+}
+
+/*
+* USHAResult
+*
+* Description:
+*   This function will return the 160-bit message digest into the
+*   Message_Digest array provided by the caller.
+*   NOTE: The first octet of hash is stored in the 0th element,
+*      the last octet of hash in the 19th element.
+*
+* Parameters:
+*   context: [in/out]
+*     The context to use to calculate the SHA-1 hash.
+*   Message_Digest: [out]
+*     Where the digest is returned.
+*
+* Returns:
+*   sha Error Code.
+*
+*/
+int USHAResult(USHAContext *ctx,
+    uint8_t Message_Digest[USHAMaxHashSize])
+{
+    if (ctx) {
+        switch (ctx->whichSha) {
+        case SHA1:
+            return SHA1Result((SHA1Context*)&ctx->ctx, Message_Digest);
+        case SHA224:
+            return SHA224Result((SHA224Context*)&ctx->ctx, Message_Digest);
+        case SHA256:
+            return SHA256Result((SHA256Context*)&ctx->ctx, Message_Digest);
+        case SHA384:
+            return SHA384Result((SHA384Context*)&ctx->ctx, Message_Digest);
+        case SHA512:
+            return SHA512Result((SHA512Context*)&ctx->ctx, Message_Digest);
+        default: return shaBadParam;
+        }
+    }
+    else {
+        return shaNull;
+    }
+}
+
+/*
+* USHABlockSize
+*
+* Description:
+*   This function will return the blocksize for the given SHA
+*   algorithm.
+*
+* Parameters:
+*   whichSha:
+*     which SHA algorithm to query
+*
+* Returns:
+*   block size
+*
+*/
+int USHABlockSize(enum SHAversion whichSha)
+{
+    switch (whichSha) {
+    case SHA1:   return SHA1_Message_Block_Size;
+    case SHA224: return SHA224_Message_Block_Size;
+    case SHA256: return SHA256_Message_Block_Size;
+    case SHA384: return SHA384_Message_Block_Size;
+    default:
+    case SHA512: return SHA512_Message_Block_Size;
+    }
+}
+
+/*
+* USHAHashSize
+*
+* Description:
+*   This function will return the hashsize for the given SHA
+*   algorithm.
+*
+* Parameters:
+*   whichSha:
+*     which SHA algorithm to query
+*
+* Returns:
+*   hash size
+*
+*/
+int USHAHashSize(enum SHAversion whichSha)
+{
+    switch (whichSha) {
+    case SHA1:   return SHA1HashSize;
+    case SHA224: return SHA224HashSize;
+    case SHA256: return SHA256HashSize;
+    case SHA384: return SHA384HashSize;
+    default:
+    case SHA512: return SHA512HashSize;
+    }
+}
+
+/*
+* USHAHashSizeBits
+*
+* Description:
+*   This function will return the hashsize for the given SHA
+*   algorithm, expressed in bits.
+*
+* Parameters:
+*   whichSha:
+*     which SHA algorithm to query
+*
+* Returns:
+*   hash size in bits
+*
+*/
+int USHAHashSizeBits(enum SHAversion whichSha)
+{
+    switch (whichSha) {
+    case SHA1:   return SHA1HashSizeBits;
+    case SHA224: return SHA224HashSizeBits;
+    case SHA256: return SHA256HashSizeBits;
+    case SHA384: return SHA384HashSizeBits;
+    default:
+    case SHA512: return SHA512HashSizeBits;
+    }
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/utf8_checker.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/utf8_checker.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/utf8_checker.c	(revision 389)
@@ -0,0 +1,177 @@
+ // Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifdef __cplusplus
+#include <cstdlib>
+#include <cstddef>
+#include <cstdint>
+#else
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#endif
+
+#include "azure_c_shared_utility/utf8_checker.h"
+
+bool utf8_checker_is_valid_utf8(const unsigned char* utf8_str, size_t length)
+{
+    bool result;
+
+    if (utf8_str == NULL)
+    {
+        /* Codes_SRS_UTF8_CHECKER_01_002: [ If utf8_checker_is_valid_utf8 is called with NULL utf8_str it shall return false. ]*/
+        result = false;
+    }
+    else
+    {
+        size_t pos = 0;
+
+        /* Codes_SRS_UTF8_CHECKER_01_003: [ If length is 0, utf8_checker_is_valid_utf8 shall consider utf8_str to be valid UTF-8 and return true. ]*/
+        result = true;
+
+        while ((result == true) &&
+               (pos < length))
+        {
+            /* Codes_SRS_UTF8_CHECKER_01_001: [ utf8_checker_is_valid_utf8 shall verify that the sequence of chars pointed to by utf8_str represent UTF-8 encoded codepoints. ]*/
+            if ((utf8_str[pos] >> 3) == 0x1E)
+            {
+                /* 4 bytes */
+                /* Codes_SRS_UTF8_CHECKER_01_009: [ 000uuuuu zzzzyyyy yyxxxxxx 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx ]*/
+                uint32_t code_point = (utf8_str[pos] & 0x07);
+
+                pos++;
+                if ((pos < length) &&
+                    ((utf8_str[pos] >> 6) == 0x02))
+                {
+                    code_point <<= 6;
+                    code_point += utf8_str[pos] & 0x3F;
+
+                    pos++;
+                    if ((pos < length) &&
+                        ((utf8_str[pos] >> 6) == 0x02))
+                    {
+                        code_point <<= 6;
+                        code_point += utf8_str[pos] & 0x3F;
+
+                        pos++;
+                        if ((pos < length) &&
+                            ((utf8_str[pos] >> 6) == 0x02))
+                        {
+                            code_point <<= 6;
+                            code_point += utf8_str[pos] & 0x3F;
+
+                            if (code_point <= 0xFFFF)
+                            {
+                                result = false;
+                            }
+                            else
+                            {
+                                /* Codes_SRS_UTF8_CHECKER_01_005: [ On success it shall return true. ]*/
+                                result = true;
+                                pos++;
+                            }
+                        }
+                        else
+                        {
+                            result = false;
+                        }
+                    }
+                    else
+                    {
+                        result = false;
+                    }
+                }
+                else
+                {
+                    result = false;
+                }
+            }
+            else if ((utf8_str[pos] >> 4) == 0x0E)
+            {
+                /* 3 bytes */
+                /* Codes_SRS_UTF8_CHECKER_01_008: [ zzzzyyyy yyxxxxxx 1110zzzz 10yyyyyy 10xxxxxx ]*/
+                uint32_t code_point = (utf8_str[pos] & 0x0F);
+
+                pos++;
+                if ((pos < length) &&
+                    ((utf8_str[pos] >> 6) == 0x02))
+                {
+                    code_point <<= 6;
+                    code_point += utf8_str[pos] & 0x3F;
+
+                    pos++;
+                    if ((pos < length) &&
+                        ((utf8_str[pos] >> 6) == 0x02))
+                    {
+                        code_point <<= 6;
+                        code_point += utf8_str[pos] & 0x3F;
+
+                        if (code_point <= 0x7FF)
+                        {
+                            result = false;
+                        }
+                        else
+                        {
+                            /* Codes_SRS_UTF8_CHECKER_01_005: [ On success it shall return true. ]*/
+                            result = true;
+                            pos++;
+                        }
+                    }
+                    else
+                    {
+                        result = false;
+                    }
+                }
+                else
+                {
+                    result = false;
+                }
+            }
+            else if ((utf8_str[pos] >> 5) == 0x06)
+            {
+                /* 2 bytes */
+                /* Codes_SRS_UTF8_CHECKER_01_007: [ 00000yyy yyxxxxxx 110yyyyy 10xxxxxx ]*/
+                uint32_t code_point = (utf8_str[pos] & 0x1F);
+
+                pos++;
+                if ((pos < length) &&
+                    ((utf8_str[pos] >> 6) == 0x02))
+                {
+                    code_point <<= 6;
+                    code_point += utf8_str[pos] & 0x3F;
+
+                    if (code_point <= 0x7F)
+                    {
+                        result = false;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_UTF8_CHECKER_01_005: [ On success it shall return true. ]*/
+                        result = true;
+                        pos++;
+                    }
+                }
+                else
+                {
+                    result = false;
+                }
+            }
+            else if ((utf8_str[pos] >> 7) == 0x00)
+            {
+                /* 1 byte */
+                /* Codes_SRS_UTF8_CHECKER_01_006: [ 00000000 0xxxxxxx 0xxxxxxx ]*/
+                /* Codes_SRS_UTF8_CHECKER_01_005: [ On success it shall return true. ]*/
+                result = true;
+                pos++;
+            }
+            else
+            {
+                /* error */
+                result = false;
+            }
+        }
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/uuid.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/uuid.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/uuid.c	(revision 389)
@@ -0,0 +1,167 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/uuid.h"
+#include "azure_c_shared_utility/uniqueid.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+#define UUID_STRING_LENGTH          36
+#define UUID_STRING_SIZE            (UUID_STRING_LENGTH + 1)
+#define __SUCCESS__                 0
+#define UUID_FORMAT_STRING          "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
+
+int UUID_from_string(const char* uuid_string, UUID_T* uuid)
+{
+    int result;
+
+    // Codes_SRS_UUID_09_007: [ If uuid_string or uuid are NULL, UUID_from_string shall return a non-zero value ]
+    if (uuid_string == NULL || uuid == NULL)
+    {
+        LogError("Invalid argument (uuid_string=%p, uuid=%p)", uuid_string, uuid);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t uuid_string_length = strlen(uuid_string);
+
+        if (uuid_string_length != UUID_STRING_LENGTH)
+        {
+            LogError("Unexpected size for an UUID string (%lu)", (unsigned long)uuid_string_length);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            // Codes_SRS_UUID_09_008: [ Each pair of digits in uuid_string, excluding dashes, shall be read as a single HEX value and saved on the respective position in uuid ]
+            size_t i, j;
+            char* uuid_bytes;
+
+            uuid_bytes = (char *)uuid;
+            // Codes_SRS_UUID_09_010: [ If no failures occur, UUID_from_string shall return zero ]
+            result = __SUCCESS__;
+
+            for (i = 0, j = 0; i < uuid_string_length; )
+            {
+                if (uuid_string[i] == '-')
+                {
+                    i++;
+                }
+                else
+                {
+                    char double_hex_digit[3] = { 0, 0, 0 };
+
+                    (void)memcpy(double_hex_digit, uuid_string + i, 2);
+
+                    if (sscanf(double_hex_digit, "%02hhx", uuid_bytes + j) != 1)
+                    {
+                        // Codes_SRS_UUID_09_009: [ If uuid fails to be generated, UUID_from_string shall return a non-zero value ]
+                        LogError("Failed decoding UUID string (%lu)", (unsigned long)i);
+                        result = MU_FAILURE;
+                        break;
+                    }
+                    else
+                    {
+                        i += 2;
+                        j++;
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+char* UUID_to_string(const UUID_T* uuid)
+{
+    char* result;
+
+    // Codes_SRS_UUID_09_011: [ If uuid is NULL, UUID_to_string shall return a non-zero value ]
+    if (uuid == NULL)
+    {
+        LogError("Invalid argument (uuid is NULL)");
+        result = NULL;
+    }
+    // Codes_SRS_UUID_09_012: [ UUID_to_string shall allocate a valid UUID string (uuid_string) as per RFC 4122 ]
+    else if ((result = (char*)malloc(sizeof(char) * UUID_STRING_SIZE)) == NULL)
+    {
+        // Codes_SRS_UUID_09_013: [ If uuid_string fails to be allocated, UUID_to_string shall return NULL ]
+        LogError("Failed allocating UUID string");
+    }
+    else
+    {
+        unsigned char* uuid_bytes;
+        int number_of_chars_written;
+
+        uuid_bytes = (unsigned char*)uuid;
+
+        // Codes_SRS_UUID_09_014: [ Each character in uuid shall be written in the respective positions of uuid_string as a 2-digit HEX value ]  
+        number_of_chars_written = sprintf(result, "%" PRI_UUID,
+            UUID_FORMAT_VALUES(uuid_bytes));
+
+        if (number_of_chars_written != UUID_STRING_LENGTH)
+        {
+            // Tests_SRS_UUID_09_015: [ If uuid_string fails to be set, UUID_to_string shall return NULL ]
+            LogError("Failed encoding UUID string");
+            free(result);
+            result = NULL;
+        }
+    }
+
+    // Codes_SRS_UUID_09_016: [ If no failures occur, UUID_to_string shall return uuid_string ]
+    return result;
+}
+
+int UUID_generate(UUID_T* uuid)
+{
+    int result;
+
+    // Codes_SRS_UUID_09_001: [ If uuid is NULL, UUID_generate shall return a non-zero value ]
+    if (uuid == NULL)
+    {
+        LogError("Invalid argument (uuid is NULL)");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        char* uuid_string;
+
+        if ((uuid_string = (char*)malloc(sizeof(char) * UUID_STRING_SIZE)) == NULL)
+        {
+            // Codes_SRS_UUID_09_003: [ If the UUID string fails to be obtained, UUID_generate shall fail and return a non-zero value ]
+            LogError("Failed allocating UUID string");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            (void)memset(uuid_string, 0, sizeof(char) * UUID_STRING_SIZE);
+
+            // Codes_SRS_UUID_09_002: [ UUID_generate shall obtain an UUID string from UniqueId_Generate ]
+            if (UniqueId_Generate(uuid_string, UUID_STRING_SIZE) != UNIQUEID_OK)
+            {
+                // Codes_SRS_UUID_09_003: [ If the UUID string fails to be obtained, UUID_generate shall fail and return a non-zero value ]
+                LogError("Failed generating UUID");
+                result = MU_FAILURE;
+            }
+            // Codes_SRS_UUID_09_004: [ The UUID string shall be parsed into an UUID_T type (16 unsigned char array) and filled in uuid ]
+            else if (UUID_from_string(uuid_string, uuid) != 0)
+            {
+                // Codes_SRS_UUID_09_005: [ If uuid fails to be set, UUID_generate shall fail and return a non-zero value ]
+                LogError("Failed parsing UUID string");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                // Codes_SRS_UUID_09_006: [ If no failures occur, UUID_generate shall return zero ]
+                result = __SUCCESS__;
+            }
+
+            free(uuid_string);
+        }
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/uws_client.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/uws_client.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/uws_client.c	(revision 389)
@@ -0,0 +1,2224 @@
+ // Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+#include <ctype.h>
+#include <limits.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/uws_client.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/singlylinkedlist.h"
+#include "azure_c_shared_utility/socketio.h"
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/tlsio.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/uws_frame_encoder.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/utf8_checker.h"
+#include "azure_c_shared_utility/gb_rand.h"
+#include "azure_c_shared_utility/azure_base64.h"
+#include "azure_c_shared_utility/optionhandler.h"
+#include "azure_c_shared_utility/map.h"
+
+static const char* UWS_CLIENT_OPTIONS = "uWSClientOptions";
+
+static const char* HTTP_HEADER_KEY_VALUE_SEPARATOR = ": ";
+static const size_t HTTP_HEADER_KEY_VALUE_SEPARATOR_LENGTH = 2;
+static const char* HTTP_HEADER_TERMINATOR = "\r\n";
+static const size_t HTTP_HEADER_TERMINATOR_LENGTH = 2;
+
+/* Requirements not needed as they are optional:
+Codes_SRS_UWS_CLIENT_01_254: [ If an endpoint receives a Ping frame and has not yet sent Pong frame(s) in response to previous Ping frame(s), the endpoint MAY elect to send a Pong frame for only the most recently processed Ping frame. ]
+Codes_SRS_UWS_CLIENT_01_255: [ A Pong frame MAY be sent unsolicited. ]
+Codes_SRS_UWS_CLIENT_01_256: [ A response to an unsolicited Pong frame is not expected. ]
+*/
+
+/* Requirements satisfied by the underlying TLS/socket stack
+Codes_SRS_UWS_CLIENT_01_362: [ To achieve reasonable levels of protection, clients should use only Strong TLS algorithms. ]
+Codes_SRS_UWS_CLIENT_01_289: [ An endpoint SHOULD use a method that cleanly closes the TCP connection, as well as the TLS session, if applicable, discarding any trailing bytes that may have been received. ]
+Codes_SRS_UWS_CLIENT_01_078: [ Otherwise, all further communication on this channel MUST run through the encrypted tunnel [RFC5246]. ]
+Codes_SRS_UWS_CLIENT_01_141: [ masking is done whether or not the WebSocket Protocol is running over TLS. ]
+*/
+
+/* Requirements satisfied by the way the APIs are designed:
+Codes_SRS_UWS_CLIENT_01_211: [One implication of this is that in absence of extensions, senders and receivers must not depend on the presence of specific frame boundaries.]
+*/
+
+typedef enum UWS_STATE_TAG
+{
+    UWS_STATE_CLOSED,
+    UWS_STATE_OPENING_UNDERLYING_IO,
+    UWS_STATE_WAITING_FOR_UPGRADE_RESPONSE,
+    UWS_STATE_OPEN,
+    UWS_STATE_CLOSING_WAITING_FOR_CLOSE,
+    UWS_STATE_CLOSING_SENDING_CLOSE,
+    UWS_STATE_CLOSING_UNDERLYING_IO,
+    UWS_STATE_ERROR
+} UWS_STATE;
+
+typedef struct WS_INSTANCE_PROTOCOL_TAG
+{
+    char* protocol;
+} WS_INSTANCE_PROTOCOL;
+
+typedef struct WS_PENDING_SEND_TAG
+{
+    ON_WS_SEND_FRAME_COMPLETE on_ws_send_frame_complete;
+    void* context;
+    UWS_CLIENT_HANDLE uws_client;
+} WS_PENDING_SEND;
+
+typedef struct UWS_CLIENT_INSTANCE_TAG
+{
+    SINGLYLINKEDLIST_HANDLE pending_sends;
+    XIO_HANDLE underlying_io;
+    char* hostname;
+    char* resource_name;
+    WS_INSTANCE_PROTOCOL* protocols;
+    size_t protocol_count;
+    int port;
+    MAP_HANDLE request_headers;
+    UWS_STATE uws_state;
+    ON_WS_OPEN_COMPLETE on_ws_open_complete;
+    void* on_ws_open_complete_context;
+    ON_WS_FRAME_RECEIVED on_ws_frame_received;
+    void* on_ws_frame_received_context;
+    ON_WS_PEER_CLOSED on_ws_peer_closed;
+    void* on_ws_peer_closed_context;
+    ON_WS_ERROR on_ws_error;
+    void* on_ws_error_context;
+    ON_WS_CLOSE_COMPLETE on_ws_close_complete;
+    void* on_ws_close_complete_context;
+    unsigned char* stream_buffer;
+    size_t stream_buffer_count;
+    unsigned char* fragment_buffer;
+    size_t fragment_buffer_count;
+    unsigned char fragmented_frame_type;
+} UWS_CLIENT_INSTANCE;
+
+/* Codes_SRS_UWS_CLIENT_01_360: [ Connection confidentiality and integrity is provided by running the WebSocket Protocol over TLS (wss URIs). ]*/
+/* Codes_SRS_UWS_CLIENT_01_361: [ WebSocket implementations MUST support TLS and SHOULD employ it when communicating with their peers. ]*/
+/* Codes_SRS_UWS_CLIENT_01_063: [ A client will need to supply a /host/, /port/, /resource name/, and a /secure/ flag, which are the components of a WebSocket URI as discussed in Section 3, along with a list of /protocols/ and /extensions/ to be used. ]*/
+UWS_CLIENT_HANDLE uws_client_create(const char* hostname, unsigned int port, const char* resource_name, bool use_ssl, const WS_PROTOCOL* protocols, size_t protocol_count)
+{
+    UWS_CLIENT_HANDLE result;
+
+    /* Codes_SRS_UWS_CLIENT_01_002: [ If any of the arguments hostname and resource_name is NULL then uws_client_create shall return NULL. ]*/
+    if ((hostname == NULL) ||
+        (resource_name == NULL) ||
+        /* Codes_SRS_UWS_CLIENT_01_411: [ If protocol_count is non zero and protocols is NULL then uws_client_create shall fail and return NULL. ]*/
+        ((protocols == NULL) && (protocol_count > 0)))
+    {
+        LogError("Invalid arguments: hostname = %p, resource_name = %p, protocols = %p, protocol_count = %lu", hostname, resource_name, protocols, (unsigned long)protocol_count);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_UWS_CLIENT_01_412: [ If the protocol member of any of the items in the protocols argument is NULL, then uws_client_create shall fail and return NULL. ]*/
+        size_t i;
+        for (i = 0; i < protocol_count; i++)
+        {
+            if (protocols[i].protocol == NULL)
+            {
+                break;
+            }
+        }
+
+        if (i < protocol_count)
+        {
+            LogError("Protocol index %lu has NULL name", (unsigned long)i);
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_001: [uws_client_create shall create an instance of uws and return a non-NULL handle to it.]*/
+            result = (UWS_CLIENT_HANDLE)malloc(sizeof(UWS_CLIENT_INSTANCE));
+            if (result == NULL)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_003: [ If allocating memory for the new uws instance fails then uws_client_create shall return NULL. ]*/
+                LogError("Could not allocate uWS instance");
+            }
+            else
+            {
+                (void)memset(result, 0, sizeof(UWS_CLIENT_INSTANCE));
+
+                /* Codes_SRS_UWS_CLIENT_01_004: [ The argument hostname shall be copied for later use. ]*/
+                if (mallocAndStrcpy_s(&result->hostname, hostname) != 0)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_392: [ If allocating memory for the copy of the hostname argument fails, then uws_client_create shall return NULL. ]*/
+                    LogError("Could not copy hostname.");
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_404: [ The argument resource_name shall be copied for later use. ]*/
+                    if (mallocAndStrcpy_s(&result->resource_name, resource_name) != 0)
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_405: [ If allocating memory for the copy of the resource argument fails, then uws_client_create shall return NULL. ]*/
+                        LogError("Could not copy resource.");
+                        free(result->hostname);
+                        free(result);
+                        result = NULL;
+                    }
+                    else if ((result->request_headers = Map_Create(NULL)) == NULL)
+                    {
+                        LogError("Failed allocating MAP for request headers");
+                        free(result->resource_name);
+                        free(result->hostname);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_017: [ uws_client_create shall create a pending send IO list that is to be used to queue send packets by calling singlylinkedlist_create. ]*/
+                        result->pending_sends = singlylinkedlist_create();
+                        if (result->pending_sends == NULL)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_018: [ If singlylinkedlist_create fails then uws_client_create shall fail and return NULL. ]*/
+                            LogError("Could not allocate pending send frames list");
+                            Map_Destroy(result->request_headers);
+                            free(result->resource_name);
+                            free(result->hostname);
+                            free(result);
+                            result = NULL;
+                        }
+                        else
+                        {
+                            if (use_ssl == true)
+                            {
+                                TLSIO_CONFIG tlsio_config;
+
+                                /* Codes_SRS_UWS_CLIENT_01_006: [ If use_ssl is true then uws_client_create shall obtain the interface used to create a tlsio instance by calling platform_get_default_tlsio. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_076: [ If /secure/ is true, the client MUST perform a TLS handshake over the connection after opening the connection and before sending the handshake data [RFC2818]. ]*/
+                                const IO_INTERFACE_DESCRIPTION* tlsio_interface = platform_get_default_tlsio();
+                                if (tlsio_interface == NULL)
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_007: [ If obtaining the underlying IO interface fails, then uws_client_create shall fail and return NULL. ]*/
+                                    LogError("NULL TLSIO interface description");
+                                    result->underlying_io = NULL;
+                                }
+                                else
+                                {
+                                    SOCKETIO_CONFIG socketio_config;
+
+                                    /* Codes_SRS_UWS_CLIENT_01_013: [ The create arguments for the tls IO (when use_ssl is 1) shall have: ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_014: [ - hostname set to the hostname argument passed to uws_client_create. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_015: [ - port set to the port argument passed to uws_client_create. ]*/
+                                    socketio_config.hostname = hostname;
+                                    socketio_config.port = port;
+                                    socketio_config.accepted_socket = NULL;
+
+                                    tlsio_config.hostname = hostname;
+                                    tlsio_config.port = port;
+                                    tlsio_config.underlying_io_interface = socketio_get_interface_description();
+                                    tlsio_config.underlying_io_parameters = &socketio_config;
+
+                                    result->underlying_io = xio_create(tlsio_interface, &tlsio_config);
+                                    if (result->underlying_io == NULL)
+                                    {
+                                        LogError("Cannot create underlying TLS IO.");
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                SOCKETIO_CONFIG socketio_config;
+                                /* Codes_SRS_UWS_CLIENT_01_005: [ If use_ssl is false then uws_client_create shall obtain the interface used to create a socketio instance by calling socketio_get_interface_description. ]*/
+                                const IO_INTERFACE_DESCRIPTION* socketio_interface = socketio_get_interface_description();
+                                if (socketio_interface == NULL)
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_007: [ If obtaining the underlying IO interface fails, then uws_client_create shall fail and return NULL. ]*/
+                                    LogError("NULL socketio interface description");
+                                    result->underlying_io = NULL;
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_010: [ The create arguments for the socket IO (when use_ssl is 0) shall have: ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_011: [ - hostname set to the hostname argument passed to uws_client_create. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_012: [ - port set to the port argument passed to uws_client_create. ]*/
+                                    socketio_config.hostname = hostname;
+                                    socketio_config.port = port;
+                                    socketio_config.accepted_socket = NULL;
+
+                                    /* Codes_SRS_UWS_CLIENT_01_008: [ The obtained interface shall be used to create the IO used as underlying IO by the newly created uws instance. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_009: [ The underlying IO shall be created by calling xio_create. ]*/
+                                    result->underlying_io = xio_create(socketio_interface, &socketio_config);
+                                    if (result->underlying_io == NULL)
+                                    {
+                                        LogError("Cannot create underlying socket IO.");
+                                    }
+                                }
+                            }
+
+                            if (result->underlying_io == NULL)
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_016: [ If xio_create fails, then uws_client_create shall fail and return NULL. ]*/
+                                singlylinkedlist_destroy(result->pending_sends);
+                                Map_Destroy(result->request_headers);
+                                free(result->resource_name);
+                                free(result->hostname);
+                                free(result);
+                                result = NULL;
+                            }
+                            else
+                            {
+                                result->uws_state = UWS_STATE_CLOSED;
+                                /* Codes_SRS_UWS_CLIENT_01_403: [ The argument port shall be copied for later use. ]*/
+                                result->port = port;
+
+                                result->fragmented_frame_type = WS_FRAME_TYPE_UNKNOWN;
+
+                                result->protocol_count = protocol_count;
+
+                                /* Codes_SRS_UWS_CLIENT_01_410: [ The protocols argument shall be allowed to be NULL, in which case no protocol is to be specified by the client in the upgrade request. ]*/
+                                if (protocols == NULL)
+                                {
+                                    result->protocols = NULL;
+                                }
+                                else
+                                {
+                                    result->protocols = (WS_INSTANCE_PROTOCOL*)malloc(sizeof(WS_INSTANCE_PROTOCOL) * protocol_count);
+                                    if (result->protocols == NULL)
+                                    {
+                                        /* Codes_SRS_UWS_CLIENT_01_414: [ If allocating memory for the copied protocol information fails then uws_client_create shall fail and return NULL. ]*/
+                                        LogError("Cannot allocate memory for the protocols array.");
+                                        xio_destroy(result->underlying_io);
+                                        singlylinkedlist_destroy(result->pending_sends);
+                                        Map_Destroy(result->request_headers);
+                                        free(result->resource_name);
+                                        free(result->hostname);
+                                        free(result);
+                                        result = NULL;
+                                    }
+                                    else
+                                    {
+                                        /* Codes_SRS_UWS_CLIENT_01_413: [ The protocol information indicated by protocols and protocol_count shall be copied for later use (for constructing the upgrade request). ]*/
+                                        for (i = 0; i < protocol_count; i++)
+                                        {
+                                            if (mallocAndStrcpy_s(&result->protocols[i].protocol, protocols[i].protocol) != 0)
+                                            {
+                                                /* Codes_SRS_UWS_CLIENT_01_414: [ If allocating memory for the copied protocol information fails then uws_client_create shall fail and return NULL. ]*/
+                                                LogError("Cannot allocate memory for the protocol index %u.", (unsigned int)i);
+                                                break;
+                                            }
+                                        }
+
+                                        if (i < protocol_count)
+                                        {
+                                            size_t j;
+
+                                            for (j = 0; j < i; j++)
+                                            {
+                                                free(result->protocols[j].protocol);
+                                            }
+
+                                            free(result->protocols);
+                                            xio_destroy(result->underlying_io);
+                                            singlylinkedlist_destroy(result->pending_sends);
+                                            Map_Destroy(result->request_headers);
+                                            free(result->resource_name);
+                                            free(result->hostname);
+                                            free(result);
+                                            result = NULL;
+                                        }
+                                        else
+                                        {
+                                            result->protocol_count = protocol_count;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+UWS_CLIENT_HANDLE uws_client_create_with_io(const IO_INTERFACE_DESCRIPTION* io_interface, void* io_create_parameters, const char* hostname, unsigned int port, const char* resource_name, const WS_PROTOCOL* protocols, size_t protocol_count)
+{
+    UWS_CLIENT_HANDLE result;
+
+    /* Codes_SRS_UWS_CLIENT_01_516: [ If any of the arguments io_interface, hostname and resource_name is NULL then uws_client_create_with_io shall return NULL. ]*/
+    if ((hostname == NULL) ||
+        (io_interface == NULL) ||
+        (resource_name == NULL) ||
+        /* Codes_SRS_UWS_CLIENT_01_525: [ If protocol_count is non zero and protocols is NULL then uws_client_create_with_io shall fail and return NULL. ]*/
+        ((protocols == NULL) && (protocol_count > 0)))
+    {
+        LogError("Invalid arguments: io_interface = %p, resource_name = %p, protocols = %p, protocol_count = %lu", io_interface, resource_name, protocols, (unsigned long)protocol_count);
+        result = NULL;
+    }
+    else
+    {
+        size_t i;
+        for (i = 0; i < protocol_count; i++)
+        {
+            if (protocols[i].protocol == NULL)
+            {
+                break;
+            }
+        }
+
+        if (i < protocol_count)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_526: [ If the protocol member of any of the items in the protocols argument is NULL, then uws_client_create_with_io shall fail and return NULL. ]*/
+            LogError("Protocol index %lu has NULL name", (unsigned long)i);
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_515: [ uws_client_create_with_io shall create an instance of uws and return a non-NULL handle to it. ]*/
+            result = (UWS_CLIENT_HANDLE)malloc(sizeof(UWS_CLIENT_INSTANCE));
+            if (result == NULL)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_517: [ If allocating memory for the new uws instance fails then uws_client_create_with_io shall return NULL. ]*/
+                LogError("Could not allocate uWS instance");
+            }
+            else
+            {
+                memset(result, 0, sizeof(UWS_CLIENT_INSTANCE));
+
+                /* Codes_SRS_UWS_CLIENT_01_518: [ The argument hostname shall be copied for later use. ]*/
+                if (mallocAndStrcpy_s(&result->hostname, hostname) != 0)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_519: [ If allocating memory for the copy of the hostname argument fails, then uws_client_create shall return NULL. ]*/
+                    LogError("Could not copy hostname.");
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_523: [ The argument resource_name shall be copied for later use. ]*/
+                    if (mallocAndStrcpy_s(&result->resource_name, resource_name) != 0)
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_529: [ If allocating memory for the copy of the resource_name argument fails, then uws_client_create_with_io shall return NULL. ]*/
+                        LogError("Could not copy resource.");
+                        free(result->hostname);
+                        free(result);
+                        result = NULL;
+                    }
+                    else if ((result->request_headers = Map_Create(NULL)) == NULL)
+                    {
+                        LogError("Failed allocating MAP for request headers");
+                        free(result->resource_name);
+                        free(result->hostname);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_530: [ uws_client_create_with_io shall create a pending send IO list that is to be used to queue send packets by calling singlylinkedlist_create. ]*/
+                        result->pending_sends = singlylinkedlist_create();
+                        if (result->pending_sends == NULL)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_531: [ If singlylinkedlist_create fails then uws_client_create_with_io shall fail and return NULL. ]*/
+                            LogError("Could not allocate pending send frames list");
+                            Map_Destroy(result->request_headers);
+                            free(result->resource_name);
+                            free(result->hostname);
+                            free(result);
+                            result = NULL;
+                        }
+                        else
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_521: [ The underlying IO shall be created by calling xio_create, while passing as arguments the io_interface and io_create_parameters argument values. ]*/
+                            result->underlying_io = xio_create(io_interface, io_create_parameters);
+                            if (result->underlying_io == NULL)
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_522: [ If xio_create fails, then uws_client_create_with_io shall fail and return NULL. ]*/
+                                LogError("Cannot create underlying IO.");
+                                singlylinkedlist_destroy(result->pending_sends);
+                                Map_Destroy(result->request_headers);
+                                free(result->resource_name);
+                                free(result->hostname);
+                                free(result);
+                                result = NULL;
+                            }
+                            else
+                            {
+                                result->uws_state = UWS_STATE_CLOSED;
+
+                                /* Codes_SRS_UWS_CLIENT_01_520: [ The argument port shall be copied for later use. ]*/
+                                result->port = port;
+
+                                result->fragmented_frame_type = WS_FRAME_TYPE_UNKNOWN;
+
+                                result->protocol_count = protocol_count;
+
+                                /* Codes_SRS_UWS_CLIENT_01_524: [ The protocols argument shall be allowed to be NULL, in which case no protocol is to be specified by the client in the upgrade request. ]*/
+                                if (protocols == NULL)
+                                {
+                                    result->protocols = NULL;
+                                }
+                                else
+                                {
+                                    result->protocols = (WS_INSTANCE_PROTOCOL*)malloc(sizeof(WS_INSTANCE_PROTOCOL) * protocol_count);
+                                    if (result->protocols == NULL)
+                                    {
+                                        /* Codes_SRS_UWS_CLIENT_01_414: [ If allocating memory for the copied protocol information fails then uws_client_create shall fail and return NULL. ]*/
+                                        LogError("Cannot allocate memory for the protocols array.");
+                                        xio_destroy(result->underlying_io);
+                                        singlylinkedlist_destroy(result->pending_sends);
+                                        Map_Destroy(result->request_headers);
+                                        free(result->resource_name);
+                                        free(result->hostname);
+                                        free(result);
+                                        result = NULL;
+                                    }
+                                    else
+                                    {
+                                        /* Codes_SRS_UWS_CLIENT_01_527: [ The protocol information indicated by protocols and protocol_count shall be copied for later use (for constructing the upgrade request). ]*/
+                                        for (i = 0; i < protocol_count; i++)
+                                        {
+                                            if (mallocAndStrcpy_s(&result->protocols[i].protocol, protocols[i].protocol) != 0)
+                                            {
+                                                /* Codes_SRS_UWS_CLIENT_01_528: [ If allocating memory for the copied protocol information fails then uws_client_create_with_io shall fail and return NULL. ]*/
+                                                LogError("Cannot allocate memory for the protocol index %u.", (unsigned int)i);
+                                                break;
+                                            }
+                                        }
+
+                                        if (i < protocol_count)
+                                        {
+                                            size_t j;
+
+                                            for (j = 0; j < i; j++)
+                                            {
+                                                free(result->protocols[j].protocol);
+                                            }
+
+                                            free(result->protocols);
+                                            xio_destroy(result->underlying_io);
+                                            singlylinkedlist_destroy(result->pending_sends);
+                                            Map_Destroy(result->request_headers);
+                                            free(result->resource_name);
+                                            free(result->hostname);
+                                            free(result);
+                                            result = NULL;
+                                        }
+                                        else
+                                        {
+                                            result->protocol_count = protocol_count;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+void uws_client_destroy(UWS_CLIENT_HANDLE uws_client)
+{
+    /* Codes_SRS_UWS_CLIENT_01_020: [ If uws_client is NULL, uws_client_destroy shall do nothing. ]*/
+    if (uws_client == NULL)
+    {
+        LogError("NULL uws handle");
+    }
+    else
+    {
+        free(uws_client->stream_buffer);
+        free(uws_client->fragment_buffer);
+
+        /* Codes_SRS_UWS_CLIENT_01_021: [ uws_client_destroy shall perform a close action if the uws instance has already been open. ]*/
+        switch (uws_client->uws_state)
+        {
+        default:
+            break;
+
+        case UWS_STATE_OPEN:
+        case UWS_STATE_ERROR:
+            uws_client_close_async(uws_client, NULL, NULL);
+            break;
+        }
+
+        if (uws_client->protocol_count > 0)
+        {
+            size_t i;
+
+            /* Codes_SRS_UWS_CLIENT_01_437: [ uws_client_destroy shall free the protocols array allocated in uws_client_create. ]*/
+            for (i = 0; i < uws_client->protocol_count; i++)
+            {
+                free(uws_client->protocols[i].protocol);
+            }
+
+            free(uws_client->protocols);
+        }
+
+        /* Codes_SRS_UWS_CLIENT_01_019: [ uws_client_destroy shall free all resources associated with the uws instance. ]*/
+        /* Codes_SRS_UWS_CLIENT_01_023: [ uws_client_destroy shall ensure the underlying IO created in uws_client_open_async is destroyed by calling xio_destroy. ]*/
+        if (uws_client->underlying_io != NULL)
+        {
+            xio_destroy(uws_client->underlying_io);
+            uws_client->underlying_io = NULL;
+        }
+
+        /* Codes_SRS_UWS_CLIENT_01_024: [ uws_client_destroy shall free the list used to track the pending sends by calling singlylinkedlist_destroy. ]*/
+        singlylinkedlist_destroy(uws_client->pending_sends);
+        free(uws_client->resource_name);
+        free(uws_client->hostname);
+        Map_Destroy(uws_client->request_headers);
+        free(uws_client);
+    }
+}
+
+static void indicate_ws_open_complete_error(UWS_CLIENT_INSTANCE* uws_client, WS_OPEN_RESULT ws_open_result)
+{
+    /* Codes_SRS_UWS_CLIENT_01_409: [ After any error is indicated by on_ws_open_complete, a subsequent uws_client_open_async shall be possible. ]*/
+    uws_client->uws_state = UWS_STATE_CLOSED;
+    uws_client->on_ws_open_complete(uws_client->on_ws_open_complete_context, ws_open_result);
+}
+
+static void indicate_ws_open_complete_error_and_close(UWS_CLIENT_INSTANCE* uws_client, WS_OPEN_RESULT ws_open_result)
+{
+    (void)xio_close(uws_client->underlying_io, NULL, NULL);
+    indicate_ws_open_complete_error(uws_client, ws_open_result);
+}
+
+static void indicate_ws_error(UWS_CLIENT_INSTANCE* uws_client, WS_ERROR error_code)
+{
+    uws_client->uws_state = UWS_STATE_ERROR;
+    if (uws_client->on_ws_error != NULL) {
+        uws_client->on_ws_error(uws_client->on_ws_error_context, error_code);
+    }
+}
+
+static void indicate_ws_close_complete(UWS_CLIENT_INSTANCE* uws_client)
+{
+    uws_client->uws_state = UWS_STATE_CLOSED;
+
+    /* Codes_SRS_UWS_CLIENT_01_496: [ If the close was initiated by the peer no on_ws_close_complete shall be called. ]*/
+    if (uws_client->on_ws_close_complete != NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_491: [ When calling on_ws_close_complete callback, the on_ws_close_complete_context argument shall be passed to it. ]*/
+        uws_client->on_ws_close_complete(uws_client->on_ws_close_complete_context);
+    }
+}
+
+// This callback usage needs to be either verified and commented or integrated into
+// the state machine.
+static void unchecked_on_send_complete(void* context, IO_SEND_RESULT send_result)
+{
+    (void)context;
+    (void)send_result;
+}
+
+static int send_close_frame(UWS_CLIENT_INSTANCE* uws_client, unsigned int close_error_code)
+{
+    unsigned char* close_frame;
+    unsigned char close_frame_payload[2];
+    size_t close_frame_length;
+    int result;
+    BUFFER_HANDLE close_frame_buffer;
+
+    close_frame_payload[0] = (unsigned char)(close_error_code >> 8);
+    close_frame_payload[1] = (unsigned char)(close_error_code & 0xFF);
+
+    /* Codes_SRS_UWS_CLIENT_01_140: [ To avoid confusing network intermediaries (such as intercepting proxies) and for security reasons that are further discussed in Section 10.3, a client MUST mask all frames that it sends to the server (see Section 5.3 for further details). ]*/
+    close_frame_buffer = uws_frame_encoder_encode(WS_CLOSE_FRAME, close_frame_payload, sizeof(close_frame_payload), true, true, 0);
+    if (close_frame_buffer == NULL)
+    {
+        LogError("Encoding of CLOSE failed.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        close_frame = BUFFER_u_char(close_frame_buffer);
+        close_frame_length = BUFFER_length(close_frame_buffer);
+
+        /* Codes_SRS_UWS_CLIENT_01_471: [ The callback on_underlying_io_close_sent shall be passed as argument to xio_send. ]*/
+        if (xio_send(uws_client->underlying_io, close_frame, close_frame_length, unchecked_on_send_complete, NULL) != 0)
+        {
+            LogError("Sending CLOSE frame failed.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+
+        BUFFER_delete(close_frame_buffer);
+    }
+
+    return result;
+}
+
+static void indicate_ws_error_and_close(UWS_CLIENT_INSTANCE* uws_client, WS_ERROR error_code, unsigned int close_error_code)
+{
+    uws_client->uws_state = UWS_STATE_ERROR;
+
+    (void)send_close_frame(uws_client, close_error_code);
+
+    uws_client->on_ws_error(uws_client->on_ws_error_context, error_code);
+}
+
+static char* get_request_headers(MAP_HANDLE headers)
+{
+    char* result;
+    const char* const* keys;
+    const char* const* values;
+    size_t count;
+
+    if (Map_GetInternals(headers, &keys, &values, &count) != MAP_OK)
+    {
+        LogError("Failed getting the request headers");
+        result = NULL;
+    }
+    else
+    {
+        size_t length = 0;
+        size_t i;
+
+        for (i = 0; i < count; i++)
+        {
+            // 4 = 2 (": ") + 2 ("\r\n")
+            length += strlen(keys[i]) + strlen(values[i]) + 4;
+        }
+
+        if ((result = (char*)malloc(sizeof(char) * (length + 1))) == NULL)
+        {
+            LogError("Failed allocating string for request headers");
+            result = NULL;
+        }
+        else
+        {
+            size_t position = 0;
+
+            for (i = 0; i < count; i++)
+            {
+                size_t key_length = strlen(keys[i]);
+                size_t value_length = strlen(values[i]);
+
+                (void)memcpy(result + position, keys[i], key_length);
+                position += key_length;
+                (void)memcpy(result + position, HTTP_HEADER_KEY_VALUE_SEPARATOR, HTTP_HEADER_KEY_VALUE_SEPARATOR_LENGTH);
+                position += HTTP_HEADER_KEY_VALUE_SEPARATOR_LENGTH;
+                (void)memcpy(result + position, values[i], value_length);
+                position += value_length;
+                (void)memcpy(result + position, HTTP_HEADER_TERMINATOR, HTTP_HEADER_TERMINATOR_LENGTH);
+                position += HTTP_HEADER_TERMINATOR_LENGTH;
+            }
+
+            result[position] = '\0';
+        }
+    }
+
+    return result;
+}
+
+static void on_underlying_io_open_complete(void* context, IO_OPEN_RESULT open_result)
+{
+    UWS_CLIENT_HANDLE uws_client = (UWS_CLIENT_HANDLE)context;
+    /* Codes_SRS_UWS_CLIENT_01_401: [ If on_underlying_io_open_complete is called with a NULL context, on_underlying_io_open_complete shall do nothing. ]*/
+    if (uws_client == NULL)
+    {
+        LogError("NULL context");
+    }
+    else
+    {
+        switch (uws_client->uws_state)
+        {
+        default:
+        case UWS_STATE_WAITING_FOR_UPGRADE_RESPONSE:
+            /* Codes_SRS_UWS_CLIENT_01_407: [ When on_underlying_io_open_complete is called when the uws instance has send the upgrade request but it is waiting for the response, an error shall be reported to the user by calling the on_ws_open_complete with WS_OPEN_ERROR_MULTIPLE_UNDERLYING_IO_OPEN_EVENTS. ]*/
+            LogError("underlying on_io_open_complete was called again after upgrade request was sent.");
+            indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_MULTIPLE_UNDERLYING_IO_OPEN_EVENTS);
+            break;
+        case UWS_STATE_OPENING_UNDERLYING_IO:
+            switch (open_result)
+            {
+            default:
+            case IO_OPEN_ERROR:
+                /* Codes_SRS_UWS_CLIENT_01_369: [ When on_underlying_io_open_complete is called with IO_OPEN_ERROR while uws is OPENING (uws_client_open_async was called), uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED. ]*/
+                indicate_ws_open_complete_error(uws_client, WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED);
+                break;
+
+            case IO_OPEN_CANCELLED:
+                /* Codes_SRS_UWS_CLIENT_01_402: [ When on_underlying_io_open_complete is called with IO_OPEN_CANCELLED while uws is OPENING (uws_client_open_async was called), uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_UNDERLYING_IO_OPEN_CANCELLED. ]*/
+                indicate_ws_open_complete_error(uws_client, WS_OPEN_ERROR_UNDERLYING_IO_OPEN_CANCELLED);
+                break;
+
+            case IO_OPEN_OK:
+            {
+                int upgrade_request_length;
+                char* upgrade_request;
+                size_t i;
+                unsigned char nonce[16];
+                STRING_HANDLE base64_nonce;
+                char* request_headers = NULL;
+
+                /* Codes_SRS_UWS_CLIENT_01_089: [ The value of this header field MUST be a nonce consisting of a randomly selected 16-byte value that has been base64-encoded (see Section 4 of [RFC4648]). ]*/
+                /* Codes_SRS_UWS_CLIENT_01_090: [ The nonce MUST be selected randomly for each connection. ]*/
+                for (i = 0; i < sizeof(nonce); i++)
+                {
+                    nonce[i] = (unsigned char)gb_rand();
+                }
+
+                /* Codes_SRS_UWS_CLIENT_01_497: [ The nonce needed for the upgrade request shall be Base64 encoded with Base64_Encode_Bytes. ]*/
+                base64_nonce = Azure_Base64_Encode_Bytes(nonce, sizeof(nonce));
+                if (base64_nonce == NULL)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_498: [ If Base64 encoding the nonce for the upgrade request fails, then the uws client shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_BASE64_ENCODE_FAILED. ]*/
+                    LogError("Cannot construct the WebSocket upgrade request");
+                    indicate_ws_open_complete_error(uws_client, WS_OPEN_ERROR_BASE64_ENCODE_FAILED);
+                }
+                else if ((request_headers = get_request_headers(uws_client->request_headers)) == NULL)
+                {
+                    LogError("Cannot construct the WebSocket request headers");
+                    indicate_ws_open_complete_error(uws_client, WS_OPEN_ERROR_CONSTRUCTING_UPGRADE_REQUEST);
+                }
+                else
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_371: [ When on_underlying_io_open_complete is called with IO_OPEN_OK while uws is OPENING (uws_client_open_async was called), uws shall prepare the WebSockets upgrade request. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_081: [ The handshake consists of an HTTP Upgrade request, along with a list of required and optional header fields. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_082: [ The handshake MUST be a valid HTTP request as specified by [RFC2616]. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_083: [ The method of the request MUST be GET, and the HTTP version MUST be at least 1.1. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_084: [ The "Request-URI" part of the request MUST match the /resource name/ defined in Section 3 (a relative URI) or be an absolute http/https URI that, when parsed, has a /resource name/, /host/, and /port/ that match the corresponding ws/wss URI. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_085: [ The request MUST contain a |Host| header field whose value contains /host/ plus optionally ":" followed by /port/ (when not using the default port). ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_086: [ The request MUST contain an |Upgrade| header field whose value MUST include the "websocket" keyword. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_087: [ The request MUST contain a |Connection| header field whose value MUST include the "Upgrade" token. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_088: [ The request MUST include a header field with the name |Sec-WebSocket-Key|. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_094: [ The request MUST include a header field with the name |Sec-WebSocket-Version|. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_095: [ The value of this header field MUST be 13. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_096: [ The request MAY include a header field with the name |Sec-WebSocket-Protocol|. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_100: [ The request MAY include a header field with the name |Sec-WebSocket-Extensions|. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_101: [ The request MAY include any other header fields, for example, cookies [RFC6265] and/or authentication-related header fields such as the |Authorization| header field [RFC2616], which are processed according to documents that define them. ] */
+                    const char upgrade_request_format[] = "GET %s HTTP/1.1\r\n"
+                        "Host: %s:%d\r\n"
+                        "Upgrade: websocket\r\n"
+                        "Connection: Upgrade\r\n"
+                        "Sec-WebSocket-Key: %s\r\n"
+                        "Sec-WebSocket-Protocol: %s\r\n"
+                        "Sec-WebSocket-Version: 13\r\n"
+                        "%s"
+                        "\r\n";
+
+                    const char* base64_nonce_chars = STRING_c_str(base64_nonce);
+
+                    upgrade_request_length = (int)(strlen(upgrade_request_format) + strlen(uws_client->resource_name)+strlen(uws_client->hostname) + strlen(base64_nonce_chars) + strlen(uws_client->protocols[0].protocol) + strlen(request_headers) + 5);
+                    if (upgrade_request_length < 0)
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_408: [ If constructing of the WebSocket upgrade request fails, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_CONSTRUCTING_UPGRADE_REQUEST. ]*/
+                        LogError("Cannot construct the WebSocket upgrade request");
+                        indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_CONSTRUCTING_UPGRADE_REQUEST);
+                    }
+                    else
+                    {
+                        upgrade_request = (char*)malloc(upgrade_request_length + 1);
+                        if (upgrade_request == NULL)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_406: [ If not enough memory can be allocated to construct the WebSocket upgrade request, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_NOT_ENOUGH_MEMORY. ]*/
+                            LogError("Cannot allocate memory for the WebSocket upgrade request");
+                            indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_NOT_ENOUGH_MEMORY);
+                        }
+                        else
+                        {
+
+                            upgrade_request_length = sprintf(upgrade_request, upgrade_request_format,
+                                uws_client->resource_name,
+                                uws_client->hostname,
+                                uws_client->port,
+                                base64_nonce_chars,
+                                uws_client->protocols[0].protocol,
+                                request_headers);
+
+                            /* No need to have any send complete here, as we are monitoring the received bytes */
+                            /* Codes_SRS_UWS_CLIENT_01_372: [ Once prepared the WebSocket upgrade request shall be sent by calling xio_send. ]*/
+                            /* Codes_SRS_UWS_CLIENT_01_080: [ Once a connection to the server has been established (including a connection via a proxy or over a TLS-encrypted tunnel), the client MUST send an opening handshake to the server. ]*/
+                            if (xio_send(uws_client->underlying_io, upgrade_request, upgrade_request_length, unchecked_on_send_complete, NULL) != 0)
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_373: [ If xio_send fails then uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_CANNOT_SEND_UPGRADE_REQUEST. ]*/
+                                LogError("Cannot send upgrade request");
+                                indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_CANNOT_SEND_UPGRADE_REQUEST);
+                            }
+                            else
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_102: [ Once the client's opening handshake has been sent, the client MUST wait for a response from the server before sending any further data. ]*/
+                                uws_client->uws_state = UWS_STATE_WAITING_FOR_UPGRADE_RESPONSE;
+                            }
+
+                            free(upgrade_request);
+                        }
+                    }
+
+                    STRING_delete(base64_nonce);
+                    free(request_headers);
+                }
+
+                break;
+            }
+            }
+        }
+    }
+}
+
+static void consume_stream_buffer_bytes(UWS_CLIENT_INSTANCE* uws_client, size_t consumed_bytes)
+{
+    if (consumed_bytes < uws_client->stream_buffer_count)
+    {
+        (void)memmove(uws_client->stream_buffer, uws_client->stream_buffer + consumed_bytes, uws_client->stream_buffer_count - consumed_bytes);
+    }
+
+    uws_client->stream_buffer_count -= consumed_bytes;
+}
+
+static void on_underlying_io_close_complete(void* context)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_477: [ When on_underlying_io_close_complete is called with a NULL context, it shall do nothing. ]*/
+        LogError("NULL context for on_underlying_io_close_complete");
+    }
+    else
+    {
+        UWS_CLIENT_HANDLE uws_client = (UWS_CLIENT_HANDLE)context;
+        if (uws_client->uws_state == UWS_STATE_CLOSING_UNDERLYING_IO)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_475: [ When on_underlying_io_close_complete is called while closing the underlying IO a subsequent uws_client_open_async shall succeed. ]*/
+            indicate_ws_close_complete(uws_client);
+            uws_client->uws_state = UWS_STATE_CLOSED;
+        }
+    }
+}
+
+static void on_underlying_io_close_sent(void* context, IO_SEND_RESULT io_send_result)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_489: [ When on_underlying_io_close_sent is called with NULL context, it shall do nothing. ] */
+        LogError("NULL context in ");
+    }
+    else
+    {
+        UWS_CLIENT_INSTANCE* uws_client = (UWS_CLIENT_HANDLE)context;
+
+        switch (io_send_result)
+        {
+        case IO_SEND_OK:
+        case IO_SEND_CANCELLED:
+            if (uws_client->uws_state == UWS_STATE_CLOSING_SENDING_CLOSE)
+            {
+                uws_client->uws_state = UWS_STATE_CLOSING_UNDERLYING_IO;
+
+                /* Codes_SRS_UWS_CLIENT_01_490: [ When on_underlying_io_close_sent is called while the uws client is CLOSING, on_underlying_io_close_sent shall close the underlying IO by calling xio_close. ]*/
+                if (xio_close(uws_client->underlying_io, on_underlying_io_close_complete, uws_client) != 0)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_496: [ If the close was initiated by the peer no on_ws_close_complete shall be called. ]*/
+                    indicate_ws_close_complete(uws_client);
+                }
+            }
+
+        case IO_SEND_ERROR:
+            break;
+        }
+    }
+}
+
+/*the following function does the same as sscanf(pos2, "%d", &sec)*/
+/*this function only exists because some of platforms do not have sscanf. */
+static int ParseStringToDecimal(const char *src, int* dst)
+{
+    int result;
+    char* next;
+
+    (*dst) = (int)strtol(src, &next, 0);
+    if ((src == next) || ((((*dst) == INT_MAX) || ((*dst) == INT_MIN)) && (errno != 0)))
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = 0;
+    }
+
+    return result;
+}
+
+/*the following function does the same as sscanf(buf, "HTTP/%*d.%*d %d %*[^\r\n]", &ret) */
+/*this function only exists because some of platforms do not have sscanf. This is not a full implementation; it only works with well-defined HTTP response. */
+static int ParseHttpResponse(const char* src, int* dst)
+{
+    int result;
+    static const char HTTPPrefix[] = "HTTP/";
+    bool fail;
+    const char* runPrefix;
+
+    if ((src == NULL) || (dst == NULL))
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        fail = false;
+        runPrefix = HTTPPrefix;
+
+        while ((*runPrefix) != '\0')
+        {
+            if ((*runPrefix) != (*src))
+            {
+                fail = true;
+                break;
+            }
+            src++;
+            runPrefix++;
+        }
+
+        if (!fail)
+        {
+            while ((*src) != '.')
+            {
+                if ((*src) == '\0')
+                {
+                    fail = true;
+                    break;
+                }
+                src++;
+            }
+        }
+
+        if (!fail)
+        {
+            while ((*src) != ' ')
+            {
+                if ((*src) == '\0')
+                {
+                    fail = true;
+                    break;
+                }
+                src++;
+            }
+        }
+
+        if (fail)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (ParseStringToDecimal(src, dst) != 0)
+            {
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static int process_frame_fragment(UWS_CLIENT_INSTANCE *uws_client, size_t length, size_t needed_bytes)
+{
+    int result;
+    unsigned char *new_fragment_bytes = (unsigned char *)realloc(uws_client->fragment_buffer, uws_client->fragment_buffer_count + length);
+    if (new_fragment_bytes == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_379: [ If allocating memory for accumulating the bytes fails, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_NOT_ENOUGH_MEMORY. ]*/
+        LogError("Cannot allocate memory for received data");
+        indicate_ws_error(uws_client, WS_ERROR_NOT_ENOUGH_MEMORY);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        uws_client->fragment_buffer = new_fragment_bytes;
+        (void)memcpy(uws_client->fragment_buffer + uws_client->fragment_buffer_count, uws_client->stream_buffer + needed_bytes - length, length);
+        uws_client->fragment_buffer_count += length;
+        result = 0;
+    }
+
+    return result;
+}
+
+static void on_underlying_io_bytes_received(void* context, const unsigned char* buffer, size_t size)
+{
+    /* Codes_SRS_UWS_CLIENT_01_415: [ If called with a NULL context argument, on_underlying_io_bytes_received shall do nothing. ]*/
+    if (context != NULL)
+    {
+        UWS_CLIENT_HANDLE uws_client = (UWS_CLIENT_HANDLE)context;
+
+        if ((buffer == NULL) ||
+            (size == 0))
+        {
+            /* Codes_SRS_UWS_CLIENT_01_416: [ If called with NULL buffer or zero size and the state of the iws is OPENING, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_INVALID_BYTES_RECEIVED_ARGUMENTS. ]*/
+            indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_INVALID_BYTES_RECEIVED_ARGUMENTS);
+        }
+        else
+        {
+            unsigned char decode_stream = 1;
+
+            switch (uws_client->uws_state)
+            {
+            default:
+            case UWS_STATE_CLOSED:
+                decode_stream = 0;
+                break;
+
+            case UWS_STATE_OPENING_UNDERLYING_IO:
+                /* Codes_SRS_UWS_CLIENT_01_417: [ When on_underlying_io_bytes_received is called while OPENING but before the on_underlying_io_open_complete has been called, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_BYTES_RECEIVED_BEFORE_UNDERLYING_OPEN. ]*/
+                indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_BYTES_RECEIVED_BEFORE_UNDERLYING_OPEN);
+                decode_stream = 0;
+                break;
+
+            case UWS_STATE_WAITING_FOR_UPGRADE_RESPONSE:
+            {
+                /* Codes_SRS_UWS_CLIENT_01_378: [ When on_underlying_io_bytes_received is called while the uws is OPENING, the received bytes shall be accumulated in order to attempt parsing the WebSocket Upgrade response. ]*/
+                unsigned char* new_received_bytes = (unsigned char*)realloc(uws_client->stream_buffer, uws_client->stream_buffer_count + size + 1);
+                if (new_received_bytes == NULL)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_379: [ If allocating memory for accumulating the bytes fails, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_NOT_ENOUGH_MEMORY. ]*/
+                    indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_NOT_ENOUGH_MEMORY);
+                    decode_stream = 0;
+                }
+                else
+                {
+                    uws_client->stream_buffer = new_received_bytes;
+                    (void)memcpy(uws_client->stream_buffer + uws_client->stream_buffer_count, buffer, size);
+                    uws_client->stream_buffer_count += size;
+
+                    decode_stream = 1;
+                }
+
+                break;
+            }
+
+            case UWS_STATE_OPEN:
+            case UWS_STATE_CLOSING_WAITING_FOR_CLOSE:
+            {
+                /* Codes_SRS_UWS_CLIENT_01_385: [ If the state of the uws instance is OPEN, the received bytes shall be used for decoding WebSocket frames. ]*/
+                unsigned char* new_received_bytes = (unsigned char*)realloc(uws_client->stream_buffer, uws_client->stream_buffer_count + size + 1);
+                if (new_received_bytes == NULL)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_418: [ If allocating memory for the bytes accumulated for decoding WebSocket frames fails, an error shall be indicated by calling the on_ws_error callback with WS_ERROR_NOT_ENOUGH_MEMORY. ]*/
+                    LogError("Cannot allocate memory for received data");
+                    indicate_ws_error(uws_client, WS_ERROR_NOT_ENOUGH_MEMORY);
+
+                    decode_stream = 0;
+                }
+                else
+                {
+                    uws_client->stream_buffer = new_received_bytes;
+                    (void)memcpy(uws_client->stream_buffer + uws_client->stream_buffer_count, buffer, size);
+                    uws_client->stream_buffer_count += size;
+
+                    decode_stream = 1;
+                }
+
+                break;
+            }
+            }
+
+            while (decode_stream)
+            {
+                decode_stream = 0;
+
+                switch (uws_client->uws_state)
+                {
+                default:
+                case UWS_STATE_CLOSED:
+                    break;
+
+                case UWS_STATE_OPENING_UNDERLYING_IO:
+                    /* Codes_SRS_UWS_CLIENT_01_417: [ When on_underlying_io_bytes_received is called while OPENING but before the on_underlying_io_open_complete has been called, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_BYTES_RECEIVED_BEFORE_UNDERLYING_OPEN. ]*/
+                    indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_BYTES_RECEIVED_BEFORE_UNDERLYING_OPEN);
+                    break;
+
+                case UWS_STATE_WAITING_FOR_UPGRADE_RESPONSE:
+                {
+                    const char* request_end_ptr;
+
+                    /* Make sure it is zero terminated */
+                    uws_client->stream_buffer[uws_client->stream_buffer_count] = '\0';
+
+                    /* Codes_SRS_UWS_CLIENT_01_380: [ If an WebSocket Upgrade request can be parsed from the accumulated bytes, the status shall be read from the WebSocket upgrade response. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_381: [ If the status is 101, uws shall be considered OPEN and this shall be indicated by calling the on_ws_open_complete callback passed to uws_client_open_async with IO_OPEN_OK. ]*/
+                    if ((uws_client->stream_buffer_count >= 4) &&
+                        ((request_end_ptr = strstr((const char*)uws_client->stream_buffer, "\r\n\r\n")) != NULL))
+                    {
+                        int status_code;
+
+                        /* This part should really be done with the HTTPAPI, but that has to be done as a separate step
+                        as the HTTPAPI has to expose somehow the underlying IO and currently this would be a too big of a change. */
+
+                        /* Codes_SRS_UWS_CLIENT_01_382: [ If a negative status is decoded from the WebSocket upgrade request, an error shall be indicated by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_BAD_RESPONSE_STATUS. ]*/
+                        /* Codes_SRS_UWS_CLIENT_01_478: [ A Status-Line with a 101 response code as per RFC 2616 [RFC2616]. ]*/
+                        if (ParseHttpResponse((const char*)uws_client->stream_buffer, &status_code) != 0)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_383: [ If the WebSocket upgrade request cannot be decoded an error shall be indicated by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_BAD_UPGRADE_RESPONSE. ]*/
+                            LogError("Cannot decode HTTP response");
+                            indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_BAD_UPGRADE_RESPONSE);
+                        }
+                        else if (status_code != 101)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_382: [ If a negative status is decoded from the WebSocket upgrade request, an error shall be indicated by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_BAD_RESPONSE_STATUS. ]*/
+                            LogError("Bad status (%d) received in WebSocket Upgrade response", status_code);
+                            indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_BAD_RESPONSE_STATUS);
+                        }
+                        else
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_384: [ Any extra bytes that are left unconsumed after decoding a succesfull WebSocket upgrade response shall be used for decoding WebSocket frames ]*/
+                            consume_stream_buffer_bytes(uws_client, request_end_ptr - (char*)uws_client->stream_buffer + 4);
+
+                            /* Codes_SRS_UWS_CLIENT_01_381: [ If the status is 101, uws shall be considered OPEN and this shall be indicated by calling the on_ws_open_complete callback passed to uws_client_open_async with IO_OPEN_OK. ]*/
+                            uws_client->uws_state = UWS_STATE_OPEN;
+
+                            /* Codes_SRS_UWS_CLIENT_01_065: [ When the client is to _Establish a WebSocket Connection_ given a set of (/host/, /port/, /resource name/, and /secure/ flag), along with a list of /protocols/ and /extensions/ to be used, and an /origin/ in the case of web browsers, it MUST open a connection, send an opening handshake, and read the server's handshake in response. ]*/
+                            /* Codes_SRS_UWS_CLIENT_01_115: [ If the server's response is validated as provided for above, it is said that _The WebSocket Connection is Established_ and that the WebSocket Connection is in the OPEN state. ]*/
+                            uws_client->on_ws_open_complete(uws_client->on_ws_open_complete_context, WS_OPEN_OK);
+
+                            decode_stream = 1;
+                        }
+                    }
+
+                    break;
+                }
+
+                case UWS_STATE_OPEN:
+                case UWS_STATE_CLOSING_WAITING_FOR_CLOSE:
+                {
+                    size_t needed_bytes = 2;
+                    size_t length;
+
+                    /* Codes_SRS_UWS_CLIENT_01_277: [ To receive WebSocket data, an endpoint listens on the underlying network connection. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_278: [ Incoming data MUST be parsed as WebSocket frames as defined in Section 5.2. ]*/
+                    if (uws_client->stream_buffer_count >= needed_bytes)
+                    {
+                        unsigned char has_error = 0;
+
+                        /* Codes_SRS_UWS_CLIENT_01_160: [ Defines whether the "Payload data" is masked. ]*/
+                        if ((uws_client->stream_buffer[1] & 0x80) != 0)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_144: [ A client MUST close a connection if it detects a masked frame. ]*/
+                            /* Codes_SRS_UWS_CLIENT_01_145: [ In this case, it MAY use the status code 1002 (protocol error) as defined in Section 7.4.1. (These rules might be relaxed in a future specification.) ]*/
+                            LogError("Masked frame detected by WebSocket client");
+                            indicate_ws_error_and_close(uws_client, WS_ERROR_BAD_FRAME_RECEIVED, 1002);
+                        }
+
+                        /* Codes_SRS_UWS_CLIENT_01_163: [ The length of the "Payload data", in bytes: ]*/
+                        /* Codes_SRS_UWS_CLIENT_01_164: [ if 0-125, that is the payload length. ]*/
+                        length = uws_client->stream_buffer[1];
+
+                        if (length == 126)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_165: [ If 126, the following 2 bytes interpreted as a 16-bit unsigned integer are the payload length. ]*/
+                            needed_bytes += 2;
+                            if (uws_client->stream_buffer_count >= needed_bytes)
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_167: [ Multibyte length quantities are expressed in network byte order. ]*/
+                                length = ((size_t)(uws_client->stream_buffer[2]) << 8) + (size_t)uws_client->stream_buffer[3];
+
+                                if (length < 126)
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_168: [ Note that in all cases, the minimal number of bytes MUST be used to encode the length, for example, the length of a 124-byte-long string can't be encoded as the sequence 126, 0, 124. ]*/
+                                    LogError("Bad frame: received a %u length on the 16 bit length", (unsigned int)length);
+
+                                    /* Codes_SRS_UWS_CLIENT_01_419: [ If there is an error decoding the WebSocket frame, an error shall be indicated by calling the on_ws_error callback with WS_ERROR_BAD_FRAME_RECEIVED. ]*/
+                                    indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                    has_error = 1;
+                                }
+                                else
+                                {
+                                    needed_bytes += (size_t)length;
+                                }
+                            }
+                        }
+                        else if (length == 127)
+                        {
+                            /* Codes_SRS_UWS_CLIENT_01_166: [ If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the most significant bit MUST be 0) are the payload length. ]*/
+                            needed_bytes += 8;
+                            if (uws_client->stream_buffer_count >= needed_bytes)
+                            {
+                                if ((uws_client->stream_buffer[2] & 0x80) != 0)
+                                {
+                                    LogError("Bad frame: received a 64 bit length frame with the highest bit set");
+
+                                    /* Codes_SRS_UWS_CLIENT_01_419: [ If there is an error decoding the WebSocket frame, an error shall be indicated by calling the on_ws_error callback with WS_ERROR_BAD_FRAME_RECEIVED. ]*/
+                                    indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                    has_error = 1;
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_167: [ Multibyte length quantities are expressed in network byte order. ]*/
+                                    length = (size_t)(((uint64_t)(uws_client->stream_buffer[2]) << 56) +
+                                        (((uint64_t)uws_client->stream_buffer[3]) << 48) +
+                                        (((uint64_t)uws_client->stream_buffer[4]) << 40) +
+                                        (((uint64_t)uws_client->stream_buffer[5]) << 32) +
+                                        (((uint64_t)uws_client->stream_buffer[6]) << 24) +
+                                        (((uint64_t)uws_client->stream_buffer[7]) << 16) +
+                                        (((uint64_t)uws_client->stream_buffer[8]) << 8) +
+                                        (uint64_t)(uws_client->stream_buffer[9]));
+
+                                    if (length < 65536)
+                                    {
+                                        /* Codes_SRS_UWS_CLIENT_01_168: [ Note that in all cases, the minimal number of bytes MUST be used to encode the length, for example, the length of a 124-byte-long string can't be encoded as the sequence 126, 0, 124. ]*/
+                                        LogError("Bad frame: received a %u length on the 64 bit length", (unsigned int)length);
+
+                                        /* Codes_SRS_UWS_CLIENT_01_419: [ If there is an error decoding the WebSocket frame, an error shall be indicated by calling the on_ws_error callback with WS_ERROR_BAD_FRAME_RECEIVED. ]*/
+                                        indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                        has_error = 1;
+                                    }
+                                    else
+                                    {
+                                        needed_bytes += length;
+                                    }
+                                }
+                            }
+                        }
+                        else
+                        {
+                            needed_bytes += length;
+                        }
+
+                        if ((has_error == 0) &&
+                            (uws_client->stream_buffer_count >= needed_bytes))
+                        {
+                            unsigned char opcode = uws_client->stream_buffer[0] & 0xF;
+
+                            /* Codes_SRS_UWS_CLIENT_01_147: [ Indicates that this is the final fragment in a message. ]*/
+                            bool is_final = (uws_client->stream_buffer[0] & 0x80) != 0;
+
+                            switch (opcode)
+                            {
+                            default:
+                                break;
+                                /* Codes_SRS_UWS_CLIENT_01_152: [* *  %x0 denotes a continuation frame *]*/
+                            case (unsigned char)WS_CONTINUATION_FRAME:
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_213: [ A fragmented message consists of a single frame with the FIN bit clear and an opcode other than 0, followed by zero or more frames with the FIN bit clear and the opcode set to 0, and terminated by a single frame with the FIN bit set and an opcode of 0. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_216: [ Message fragments MUST be delivered to the recipient in the order sent by the sender. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_219: [ A sender MAY create fragments of any size for non-control messages. ]*/
+                                if (process_frame_fragment(uws_client, length, needed_bytes) != 0)
+                                {
+                                    break;
+                                }
+
+                                if (is_final)
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_225: [ As a consequence of these rules, all fragments of a message are of the same type, as set by the first fragment's opcode. ]*/
+                                    if (uws_client->fragmented_frame_type == WS_FRAME_TYPE_UNKNOWN)
+                                    {
+                                        LogError("Continuation fragment received without initial fragment specifying frame data type");
+                                        indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                        decode_stream = 1;
+                                        break;
+                                    }
+                                    uws_client->on_ws_frame_received(uws_client->on_ws_frame_received_context, uws_client->fragmented_frame_type, uws_client->fragment_buffer, uws_client->fragment_buffer_count);
+                                    uws_client->fragment_buffer_count = 0;
+                                    uws_client->fragmented_frame_type = WS_FRAME_TYPE_UNKNOWN;
+                                }
+                                decode_stream = 1;
+                                break;
+                            }
+                                /* Codes_SRS_UWS_CLIENT_01_153: [ *  %x1 denotes a text frame ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_258: [** Currently defined opcodes for data frames include 0x1 (Text), 0x2 (Binary). ]*/
+                            case (unsigned char)WS_TEXT_FRAME:
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_386: [ When a WebSocket data frame is decoded succesfully it shall be indicated via the callback on_ws_frame_received. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_169: [ The payload length is the length of the "Extension data" + the length of the "Application data". ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_173: [ The "Payload data" is defined as "Extension data" concatenated with "Application data". ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_280: [ Upon receiving a data frame (Section 5.6), the endpoint MUST note the /type/ of the data as defined by the opcode (frame-opcode) from Section 5.2. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_281: [ The "Application data" from this frame is defined as the /data/ of the message. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_282: [ If the frame comprises an unfragmented message (Section 5.4), it is said that _A WebSocket Message Has Been Received_ with type /type/ and data /data/. ]*/
+                                if (is_final)
+                                {
+                                    uws_client->on_ws_frame_received(uws_client->on_ws_frame_received_context, WS_FRAME_TYPE_TEXT, uws_client->stream_buffer + needed_bytes - length, length);
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_217: [ The fragments of one message MUST NOT be interleaved between the fragments of another message unless an extension has been negotiated that can interpret the interleaving. ]*/
+                                    if (uws_client->fragmented_frame_type != WS_FRAME_TYPE_UNKNOWN)
+                                    {
+                                        LogError("Fragmented frame received interleaved between the fragments of another message");
+                                        indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                        decode_stream = 1;
+                                        break;
+                                    }
+                                    /* Codes_SRS_UWS_CLIENT_01_213: [ A fragmented message consists of a single frame with the FIN bit clear and an opcode other than 0, followed by zero or more frames with the FIN bit clear and the opcode set to 0, and terminated by a single frame with the FIN bit set and an opcode of 0. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_216: [ Message fragments MUST be delivered to the recipient in the order sent by the sender. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_219: [ A sender MAY create fragments of any size for non-control messages. ]*/
+                                    if (process_frame_fragment(uws_client, length, needed_bytes) != 0)
+                                    {
+                                        break;
+                                    }
+
+                                    /* Codes_SRS_UWS_CLIENT_01_225: [ As a consequence of these rules, all fragments of a message are of the same type, as set by the first fragment's opcode. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_226: [ Since control frames cannot be fragmented, the type for all fragments in a message MUST be either text, binary, or one of the reserved opcodes. ]*/
+                                    uws_client->fragmented_frame_type = WS_FRAME_TYPE_TEXT;
+                                }
+                                decode_stream = 1;
+                                break;
+                            }
+
+                                /* Codes_SRS_UWS_CLIENT_01_154: [ *  %x2 denotes a binary frame ]*/
+                            case (unsigned char)WS_BINARY_FRAME:
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_386: [ When a WebSocket data frame is decoded succesfully it shall be indicated via the callback on_ws_frame_received. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_169: [ The payload length is the length of the "Extension data" + the length of the "Application data". ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_173: [ The "Payload data" is defined as "Extension data" concatenated with "Application data". ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_264: [ The "Payload data" is arbitrary binary data whose interpretation is solely up to the application layer. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_280: [ Upon receiving a data frame (Section 5.6), the endpoint MUST note the /type/ of the data as defined by the opcode (frame-opcode) from Section 5.2. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_281: [ The "Application data" from this frame is defined as the /data/ of the message. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_282: [ If the frame comprises an unfragmented message (Section 5.4), it is said that _A WebSocket Message Has Been Received_ with type /type/ and data /data/. ]*/
+                                if (is_final)
+                                {
+                                    uws_client->on_ws_frame_received(uws_client->on_ws_frame_received_context, WS_FRAME_TYPE_BINARY, uws_client->stream_buffer + needed_bytes - length, length);
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_217: [ The fragments of one message MUST NOT be interleaved between the fragments of another message unless an extension has been negotiated that can interpret the interleaving. ]*/
+                                    if (uws_client->fragmented_frame_type != WS_FRAME_TYPE_UNKNOWN)
+                                    {
+                                        LogError("Fragmented frame received interleaved between the fragments of another message");
+                                        indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                        decode_stream = 1;
+                                        break;
+                                    }
+                                    /* Codes_SRS_UWS_CLIENT_01_213: [ A fragmented message consists of a single frame with the FIN bit clear and an opcode other than 0, followed by zero or more frames with the FIN bit clear and the opcode set to 0, and terminated by a single frame with the FIN bit set and an opcode of 0. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_216: [ Message fragments MUST be delivered to the recipient in the order sent by the sender. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_219: [ A sender MAY create fragments of any size for non-control messages. ]*/
+                                    if (process_frame_fragment(uws_client, length, needed_bytes) != 0)
+                                    {
+                                        break;
+                                    }
+
+                                    /* Codes_SRS_UWS_CLIENT_01_225: [ As a consequence of these rules, all fragments of a message are of the same type, as set by the first fragment's opcode. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_226: [ Since control frames cannot be fragmented, the type for all fragments in a message MUST be either text, binary, or one of the reserved opcodes. ]*/
+                                    uws_client->fragmented_frame_type = WS_FRAME_TYPE_BINARY;
+                                }
+                                decode_stream = 1;
+                                break;
+                            }
+
+                                /* Codes_SRS_UWS_CLIENT_01_156: [ *  %x8 denotes a connection close ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_234: [ The Close frame contains an opcode of 0x8. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_214: [ Control frames (see Section 5.5) MAY be injected in the middle of a fragmented message. ]*/
+                            case (unsigned char)WS_CLOSE_FRAME:
+                            {
+                                uint16_t close_code;
+                                uint16_t* close_code_ptr;
+                                const unsigned char* data_ptr = uws_client->stream_buffer + needed_bytes - length;
+                                const unsigned char* extra_data_ptr;
+                                size_t extra_data_length;
+                                unsigned char* close_frame_bytes;
+                                size_t close_frame_length;
+                                bool utf8_error = false;
+
+                                /* Codes_SRS_UWS_CLIENT_01_215: [ Control frames themselves MUST NOT be fragmented. ]*/
+                                if (!is_final)
+                                {
+                                    LogError("Fragmented control frame received.");
+                                    indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                    break;
+                                }
+
+                                /* Codes_SRS_UWS_CLIENT_01_235: [ The Close frame MAY contain a body (the "Application data" portion of the frame) that indicates a reason for closing, such as an endpoint shutting down, an endpoint having received a frame too large, or an endpoint having received a frame that does not conform to the format expected by the endpoint. ]*/
+                                if (length >= 2)
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_236: [ If there is a body, the first two bytes of the body MUST be a 2-byte unsigned integer (in network byte order) representing a status code with value /code/ defined in Section 7.4. ]*/
+                                    close_code = (data_ptr[0] << 8) + data_ptr[1];
+
+                                    /* Codes_SRS_UWS_CLIENT_01_461: [ The argument close_code shall be set to point to the code extracted from the CLOSE frame. ]*/
+                                    close_code_ptr = &close_code;
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_462: [ If no code can be extracted then close_code shall be NULL. ]*/
+                                    close_code_ptr = NULL;
+                                }
+
+                                if (length > 2)
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_463: [ The extra bytes (besides the close code) shall be passed to the on_ws_peer_closed callback by using extra_data and extra_data_length. ]*/
+                                    extra_data_ptr = data_ptr + 2;
+                                    extra_data_length = length - 2;
+
+                                    /* Codes_SRS_UWS_CLIENT_01_238: [ As the data is not guaranteed to be human readable, clients MUST NOT show it to end users. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_237: [ Following the 2-byte integer, the body MAY contain UTF-8-encoded data with value /reason/, the interpretation of which is not defined by this specification. ]*/
+                                    if (utf8_checker_is_valid_utf8(extra_data_ptr, extra_data_length) != true)
+                                    {
+                                        LogError("Reason in CLOSE frame is not UTF-8.");
+                                        extra_data_ptr = NULL;
+                                        extra_data_length = 0;
+                                        utf8_error = true;
+                                    }
+                                }
+                                else
+                                {
+                                    extra_data_ptr = NULL;
+                                    extra_data_length = 0;
+                                }
+
+                                if (utf8_error)
+                                {
+                                    uws_client->uws_state = UWS_STATE_CLOSING_UNDERLYING_IO;
+                                    if (xio_close(uws_client->underlying_io, on_underlying_io_close_complete, uws_client) != 0)
+                                    {
+                                        LogError("Could not close underlying IO");
+                                        indicate_ws_error(uws_client, WS_ERROR_CANNOT_CLOSE_UNDERLYING_IO);
+                                        uws_client->uws_state = UWS_STATE_CLOSED;
+                                    }
+                                }
+                                else
+                                {
+                                    BUFFER_HANDLE close_frame_buffer;
+
+                                    if (uws_client->uws_state == UWS_STATE_CLOSING_WAITING_FOR_CLOSE)
+                                    {
+                                        uws_client->uws_state = UWS_STATE_CLOSING_UNDERLYING_IO;
+                                        if (xio_close(uws_client->underlying_io, on_underlying_io_close_complete, uws_client) != 0)
+                                        {
+                                            indicate_ws_close_complete(uws_client);
+                                            uws_client->uws_state = UWS_STATE_CLOSED;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        /* Codes_SRS_UWS_CLIENT_01_296: [ Upon either sending or receiving a Close control frame, it is said that _The WebSocket Closing Handshake is Started_ and that the WebSocket connection is in the CLOSING state. ]*/
+                                        /* Codes_SRS_UWS_CLIENT_01_240: [ The application MUST NOT send any more data frames after sending a Close frame. ]*/
+                                        uws_client->uws_state = UWS_STATE_CLOSING_SENDING_CLOSE;
+                                    }
+
+                                    /* Codes_SRS_UWS_CLIENT_01_241: [ If an endpoint receives a Close frame and did not previously send a Close frame, the endpoint MUST send a Close frame in response. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_242: [ It SHOULD do so as soon as practical. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_239: [ Close frames sent from client to server must be masked as per Section 5.3. ]*/
+                                    /* Codes_SRS_UWS_CLIENT_01_140: [ To avoid confusing network intermediaries (such as intercepting proxies) and for security reasons that are further discussed in Section 10.3, a client MUST mask all frames that it sends to the server (see Section 5.3 for further details). ]*/
+                                    close_frame_buffer = uws_frame_encoder_encode(WS_CLOSE_FRAME, NULL, 0, true, true, 0);
+                                    if (close_frame_buffer == NULL)
+                                    {
+                                        LogError("Cannot encode the response CLOSE frame");
+
+                                        /* Codes_SRS_UWS_CLIENT_01_288: [ To _Close the WebSocket Connection_, an endpoint closes the underlying TCP connection. ]*/
+                                        /* Codes_SRS_UWS_CLIENT_01_290: [ An endpoint MAY close the connection via any means available when necessary, such as when under attack. ]*/
+                                        uws_client->uws_state = UWS_STATE_CLOSING_UNDERLYING_IO;
+                                        if (xio_close(uws_client->underlying_io, on_underlying_io_close_complete, uws_client) != 0)
+                                        {
+                                            indicate_ws_error(uws_client, WS_ERROR_CANNOT_CLOSE_UNDERLYING_IO);
+                                            uws_client->uws_state = UWS_STATE_CLOSED;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        close_frame_bytes = BUFFER_u_char(close_frame_buffer);
+                                        close_frame_length = BUFFER_length(close_frame_buffer);
+                                        if (xio_send(uws_client->underlying_io, close_frame_bytes, close_frame_length, on_underlying_io_close_sent, uws_client) != 0)
+                                        {
+                                            LogError("Cannot send the response CLOSE frame");
+
+                                            /* Codes_SRS_UWS_CLIENT_01_288: [ To _Close the WebSocket Connection_, an endpoint closes the underlying TCP connection. ]*/
+                                            /* Codes_SRS_UWS_CLIENT_01_290: [ An endpoint MAY close the connection via any means available when necessary, such as when under attack. ]*/
+                                            uws_client->uws_state = UWS_STATE_CLOSING_UNDERLYING_IO;
+                                            if (xio_close(uws_client->underlying_io, on_underlying_io_close_complete, uws_client) != 0)
+                                            {
+                                                indicate_ws_error(uws_client, WS_ERROR_CANNOT_CLOSE_UNDERLYING_IO);
+                                                uws_client->uws_state = UWS_STATE_CLOSED;
+                                            }
+                                        }
+
+                                        BUFFER_delete(close_frame_buffer);
+                                    }
+                                }
+
+                                /* Codes_SRS_UWS_CLIENT_01_460: [ When a CLOSE frame is received the callback on_ws_peer_closed passed to uws_client_open_async shall be called, while passing to it the argument on_ws_peer_closed_context. ]*/
+                                uws_client->on_ws_peer_closed(uws_client->on_ws_peer_closed_context, close_code_ptr, extra_data_ptr, extra_data_length);
+
+                                break;
+                            }
+
+                                /* Codes_SRS_UWS_CLIENT_01_157: [ *  %x9 denotes a ping ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_247: [ The Ping frame contains an opcode of 0x9. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_251: [ An endpoint MAY send a Ping frame any time after the connection is established and before the connection is closed. ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_214: [ Control frames (see Section 5.5) MAY be injected in the middle of a fragmented message. ]*/
+                            case (unsigned char)WS_PING_FRAME:
+                            {
+                                /* Codes_SRS_UWS_CLIENT_01_249: [ Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response ]*/
+                                /* Codes_SRS_UWS_CLIENT_01_250: [ It SHOULD respond with Pong frame as soon as is practical. ]*/
+                                unsigned char* pong_frame;
+                                size_t pong_frame_length;
+                                BUFFER_HANDLE pong_frame_buffer;
+
+                                /* Codes_SRS_UWS_CLIENT_01_215: [ Control frames themselves MUST NOT be fragmented. ]*/
+                                if (!is_final)
+                                {
+                                    LogError("Fragmented control frame received.");
+                                    indicate_ws_error(uws_client, WS_ERROR_BAD_FRAME_RECEIVED);
+                                    break;
+                                }
+
+                                /* Codes_SRS_UWS_CLIENT_01_140: [ To avoid confusing network intermediaries (such as intercepting proxies) and for security reasons that are further discussed in Section 10.3, a client MUST mask all frames that it sends to the server (see Section 5.3 for further details). ]*/
+                                pong_frame_buffer = uws_frame_encoder_encode(WS_PONG_FRAME, uws_client->stream_buffer + needed_bytes - length, length, true, true, 0);
+                                if (pong_frame_buffer == NULL)
+                                {
+                                    LogError("Encoding of PONG failed.");
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_UWS_CLIENT_01_248: [ A Ping frame MAY include "Application data". ]*/
+                                    pong_frame = BUFFER_u_char(pong_frame_buffer);
+                                    pong_frame_length = BUFFER_length(pong_frame_buffer);
+                                    if (xio_send(uws_client->underlying_io, pong_frame, pong_frame_length, unchecked_on_send_complete, NULL) != 0)
+                                    {
+                                        LogError("Sending PONG frame failed.");
+                                    }
+
+                                    BUFFER_delete(pong_frame_buffer);
+                                }
+
+                                break;
+                            }
+                            /* Codes_SRS_UWS_CLIENT_01_252: [ The Pong frame contains an opcode of 0xA. ]*/
+                            case (unsigned char)WS_PONG_FRAME:
+                                break;
+                            }
+
+                            consume_stream_buffer_bytes(uws_client, needed_bytes);
+                        }
+                    }
+
+                    break;
+                }
+                }
+            }
+        }
+    }
+}
+
+static void on_underlying_io_error(void* context)
+{
+    UWS_CLIENT_HANDLE uws_client = (UWS_CLIENT_HANDLE)context;
+
+    switch (uws_client->uws_state)
+    {
+    default:
+        break;
+
+    case UWS_STATE_CLOSING_WAITING_FOR_CLOSE:
+    case UWS_STATE_CLOSING_SENDING_CLOSE:
+    case UWS_STATE_CLOSING_UNDERLYING_IO:
+        /* Codes_SRS_UWS_CLIENT_01_500: [ The callback on_ws_close_complete shall be called, while passing the on_ws_close_complete_context argument to it. ]*/
+        /* Codes_SRS_UWS_CLIENT_01_377: [ When on_underlying_io_error is called while the uws instance is CLOSING the underlying IO shall be closed by calling xio_close. ]*/
+        (void)xio_close(uws_client->underlying_io, NULL, NULL);
+
+        /* Codes_SRS_UWS_CLIENT_01_499: [ If the CLOSE was due to the peer closing, the callback on_ws_close_complete shall not be called. ]*/
+        indicate_ws_close_complete(uws_client);
+        break;
+
+    case UWS_STATE_OPENING_UNDERLYING_IO:
+    case UWS_STATE_WAITING_FOR_UPGRADE_RESPONSE:
+        /* Codes_SRS_UWS_CLIENT_01_375: [ When on_underlying_io_error is called while uws is OPENING, uws shall report that the open failed by calling the on_ws_open_complete callback passed to uws_client_open_async with WS_OPEN_ERROR_UNDERLYING_IO_ERROR. ]*/
+        /* Codes_SRS_UWS_CLIENT_01_077: [ If this fails (e.g., the server's certificate could not be verified), then the client MUST _Fail the WebSocket Connection_ and abort the connection. ]*/
+        indicate_ws_open_complete_error_and_close(uws_client, WS_OPEN_ERROR_UNDERLYING_IO_ERROR);
+        break;
+
+    case UWS_STATE_OPEN:
+        /* Codes_SRS_UWS_CLIENT_01_376: [ When on_underlying_io_error is called while the uws instance is OPEN, an error shall be reported to the user by calling the on_ws_error callback that was passed to uws_client_open_async with the argument WS_ERROR_UNDERLYING_IO_ERROR. ]*/
+        /* Codes_SRS_UWS_CLIENT_01_318: [ Servers MAY close the WebSocket connection whenever desired. ]*/
+        /* Codes_SRS_UWS_CLIENT_01_269: [ If at any point the state of the WebSocket connection changes, the endpoint MUST abort the following steps. ]*/
+        indicate_ws_error(uws_client, WS_ERROR_UNDERLYING_IO_ERROR);
+        break;
+    }
+}
+
+int uws_client_open_async(UWS_CLIENT_HANDLE uws_client, ON_WS_OPEN_COMPLETE on_ws_open_complete, void* on_ws_open_complete_context, ON_WS_FRAME_RECEIVED on_ws_frame_received, void* on_ws_frame_received_context, ON_WS_PEER_CLOSED on_ws_peer_closed, void* on_ws_peer_closed_context, ON_WS_ERROR on_ws_error, void* on_ws_error_context)
+{
+    int result;
+
+    /* Codes_SRS_UWS_CLIENT_01_393: [ The context arguments for the callbacks shall be allowed to be NULL. ]*/
+    if ((uws_client == NULL) ||
+        (on_ws_open_complete == NULL) ||
+        (on_ws_frame_received == NULL) ||
+        (on_ws_peer_closed == NULL) ||
+        (on_ws_error == NULL))
+    {
+        /* Codes_SRS_UWS_CLIENT_01_027: [ If uws_client, on_ws_open_complete, on_ws_frame_received, on_ws_peer_closed or on_ws_error is NULL, uws_client_open_async shall fail and return a non-zero value. ]*/
+        LogError("Invalid arguments: uws=%p, on_ws_open_complete=%p, on_ws_frame_received=%p, on_ws_error=%p",
+            uws_client, on_ws_open_complete, on_ws_frame_received, on_ws_error);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (uws_client->uws_state != UWS_STATE_CLOSED)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_400: [ uws_client_open_async while CLOSING shall fail and return a non-zero value. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_394: [ uws_client_open_async while the uws instance is already OPEN or OPENING shall fail and return a non-zero value. ]*/
+            LogError("Invalid uWS state while trying to open: %d", (int)uws_client->uws_state);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            uws_client->uws_state = UWS_STATE_OPENING_UNDERLYING_IO;
+
+            uws_client->stream_buffer_count = 0;
+            uws_client->fragment_buffer_count = 0;
+            uws_client->fragmented_frame_type = WS_FRAME_TYPE_UNKNOWN;
+
+            uws_client->on_ws_open_complete = on_ws_open_complete;
+            uws_client->on_ws_open_complete_context = on_ws_open_complete_context;
+            uws_client->on_ws_frame_received = on_ws_frame_received;
+            uws_client->on_ws_frame_received_context = on_ws_frame_received_context;
+            uws_client->on_ws_peer_closed = on_ws_peer_closed;
+            uws_client->on_ws_peer_closed_context = on_ws_peer_closed_context;
+            uws_client->on_ws_error = on_ws_error;
+            uws_client->on_ws_error_context = on_ws_error_context;
+
+            /* Codes_SRS_UWS_CLIENT_01_025: [ uws_client_open_async shall open the underlying IO by calling xio_open and providing the IO handle created in uws_client_create as argument. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_367: [ The callbacks on_underlying_io_open_complete, on_underlying_io_bytes_received and on_underlying_io_error shall be passed as arguments to xio_open. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_061: [ To _Establish a WebSocket Connection_, a client opens a connection and sends a handshake as defined in this section. ]*/
+            if (xio_open(uws_client->underlying_io, on_underlying_io_open_complete, uws_client, on_underlying_io_bytes_received, uws_client, on_underlying_io_error, uws_client) != 0)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_028: [ If opening the underlying IO fails then uws_client_open_async shall fail and return a non-zero value. ]*/
+                /* Codes_SRS_UWS_CLIENT_01_075: [ If the connection could not be opened, either because a direct connection failed or because any proxy used returned an error, then the client MUST _Fail the WebSocket Connection_ and abort the connection attempt. ]*/
+                LogError("Opening the underlying IO failed");
+                uws_client->uws_state = UWS_STATE_CLOSED;
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_UWS_CLIENT_01_026: [ On success, uws_client_open_async shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static int complete_send_frame(WS_PENDING_SEND* ws_pending_send, LIST_ITEM_HANDLE pending_send_frame_item, WS_SEND_FRAME_RESULT ws_send_frame_result)
+{
+    int result;
+    UWS_CLIENT_INSTANCE* uws_client = ws_pending_send->uws_client;
+
+    /* Codes_SRS_UWS_CLIENT_01_432: [ The indicated sent frame shall be removed from the list by calling singlylinkedlist_remove. ]*/
+    if (singlylinkedlist_remove(uws_client->pending_sends, pending_send_frame_item) != 0)
+    {
+        LogError("Failed removing item from list");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (ws_pending_send->on_ws_send_frame_complete != NULL)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_037: [ When indicating pending send frames as cancelled the callback context passed to the on_ws_send_frame_complete callback shall be the context given to uws_client_send_frame_async. ]*/
+            ws_pending_send->on_ws_send_frame_complete(ws_pending_send->context, ws_send_frame_result);
+        }
+
+        /* Codes_SRS_UWS_CLIENT_01_434: [ The memory associated with the sent frame shall be freed. ]*/
+        free(ws_pending_send);
+
+        result = 0;
+    }
+
+    return result;
+}
+
+/* Codes_SRS_UWS_CLIENT_01_029: [ uws_client_close_async shall close the uws instance connection if an open action is either pending or has completed successfully (if the IO is open). ]*/
+/* Codes_SRS_UWS_CLIENT_01_317: [ Clients SHOULD NOT close the WebSocket connection arbitrarily. ]*/
+int uws_client_close_async(UWS_CLIENT_HANDLE uws_client, ON_WS_CLOSE_COMPLETE on_ws_close_complete, void* on_ws_close_complete_context)
+{
+    int result;
+
+    /* Codes_SRS_UWS_CLIENT_01_397: [ The on_ws_close_complete argument shall be allowed to be NULL, in which case no callback shall be called when the close is complete. ]*/
+    /* Codes_SRS_UWS_CLIENT_01_398: [ on_ws_close_complete_context shall also be allows to be NULL. ]*/
+    if (uws_client == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_030: [ if uws_client is NULL, uws_client_close_async shall return a non-zero value. ]*/
+        LogError("NULL uWS handle.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if ((uws_client->uws_state == UWS_STATE_CLOSED) ||
+            (uws_client->uws_state == UWS_STATE_CLOSING_SENDING_CLOSE) ||
+            (uws_client->uws_state == UWS_STATE_CLOSING_WAITING_FOR_CLOSE) ||
+            (uws_client->uws_state == UWS_STATE_CLOSING_UNDERLYING_IO))
+        {
+            /* Codes_SRS_UWS_CLIENT_01_032: [ uws_client_close_async when no open action has been issued shall fail and return a non-zero value. ]*/
+            LogError("close has been called when already CLOSED");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_399: [ on_ws_close_complete and on_ws_close_complete_context shall be saved and the callback on_ws_close_complete shall be triggered when the close is complete. ]*/
+            uws_client->on_ws_close_complete = on_ws_close_complete;
+            uws_client->on_ws_close_complete_context = on_ws_close_complete_context;
+
+            uws_client->uws_state = UWS_STATE_CLOSING_UNDERLYING_IO;
+
+            /* Codes_SRS_UWS_CLIENT_01_031: [ uws_client_close_async shall close the connection by calling xio_close while passing as argument the IO handle created in uws_client_create. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_368: [ The callback on_underlying_io_close shall be passed as argument to xio_close. ]*/
+            if (xio_close(uws_client->underlying_io, (on_ws_close_complete == NULL) ? NULL :  on_underlying_io_close_complete, (on_ws_close_complete == NULL) ? NULL : uws_client) != 0)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_395: [ If xio_close fails, uws_client_close_async shall fail and return a non-zero value. ]*/
+                LogError("Closing the underlying IO failed.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_UWS_CLIENT_01_034: [ uws_client_close_async shall obtain all the pending send frames by repetitively querying for the head of the pending IO list and freeing that head item. ]*/
+                LIST_ITEM_HANDLE first_pending_send;
+
+                /* Codes_SRS_UWS_CLIENT_01_035: [ Obtaining the head of the pending send frames list shall be done by calling singlylinkedlist_get_head_item. ]*/
+                while ((first_pending_send = singlylinkedlist_get_head_item(uws_client->pending_sends)) != NULL)
+                {
+                    WS_PENDING_SEND* ws_pending_send = (WS_PENDING_SEND*)singlylinkedlist_item_get_value(first_pending_send);
+
+                    /* Codes_SRS_UWS_CLIENT_01_036: [ For each pending send frame the send complete callback shall be called with UWS_SEND_FRAME_CANCELLED. ]*/
+                    complete_send_frame(ws_pending_send, first_pending_send, WS_SEND_FRAME_CANCELLED);
+                }
+
+                /* Codes_SRS_UWS_CLIENT_01_396: [ On success uws_client_close_async shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+/* Codes_SRS_UWS_CLIENT_01_317: [ Clients SHOULD NOT close the WebSocket connection arbitrarily. ]*/
+int uws_client_close_handshake_async(UWS_CLIENT_HANDLE uws_client, uint16_t close_code, const char* close_reason, ON_WS_CLOSE_COMPLETE on_ws_close_complete, void* on_ws_close_complete_context)
+{
+    int result;
+
+    if (uws_client == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_467: [ if uws_client is NULL, uws_client_close_handshake_async shall return a non-zero value. ]*/
+        LogError("NULL uws_client");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if ((uws_client->uws_state == UWS_STATE_CLOSED) ||
+            /* Codes_SRS_UWS_CLIENT_01_474: [ uws_client_close_handshake_async when already CLOSING shall fail and return a non-zero value. ]*/
+            (uws_client->uws_state == UWS_STATE_CLOSING_WAITING_FOR_CLOSE) ||
+            (uws_client->uws_state == UWS_STATE_CLOSING_SENDING_CLOSE) ||
+            (uws_client->uws_state == UWS_STATE_CLOSING_UNDERLYING_IO))
+        {
+            /* Codes_SRS_UWS_CLIENT_01_473: [ uws_client_close_handshake_async when no open action has been issued shall fail and return a non-zero value. ]*/
+            LogError("uws_client_close_handshake_async has been called when already CLOSED");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            (void)close_reason;
+
+            /* Codes_SRS_UWS_CLIENT_01_468: [ on_ws_close_complete and on_ws_close_complete_context shall be saved and the callback on_ws_close_complete shall be triggered when the close is complete. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_469: [ The on_ws_close_complete argument shall be allowed to be NULL, in which case no callback shall be called when the close is complete. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_470: [ on_ws_close_complete_context shall also be allowed to be NULL. ]*/
+            uws_client->on_ws_close_complete = on_ws_close_complete;
+            uws_client->on_ws_close_complete_context = on_ws_close_complete_context;
+
+            uws_client->uws_state = UWS_STATE_CLOSING_WAITING_FOR_CLOSE;
+
+            /* Codes_SRS_UWS_CLIENT_01_465: [ uws_client_close_handshake_async shall initiate the close handshake by sending a close frame to the peer. ]*/
+            if (send_close_frame(uws_client, close_code) != 0)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_472: [ If xio_send fails, uws_client_close_handshake_async shall fail and return a non-zero value. ]*/
+                LogError("Sending CLOSE frame failed");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                LIST_ITEM_HANDLE first_pending_send;
+
+                while ((first_pending_send = singlylinkedlist_get_head_item(uws_client->pending_sends)) != NULL)
+                {
+                    WS_PENDING_SEND* ws_pending_send = (WS_PENDING_SEND*)singlylinkedlist_item_get_value(first_pending_send);
+
+                    complete_send_frame(ws_pending_send, first_pending_send, WS_SEND_FRAME_CANCELLED);
+                }
+
+                /* Codes_SRS_UWS_CLIENT_01_466: [ On success uws_client_close_handshake_async shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void on_underlying_io_send_complete(void* context, IO_SEND_RESULT send_result)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_435: [ When on_underlying_io_send_complete is called with a NULL context, it shall do nothing. ]*/
+        LogError("on_underlying_io_send_complete called with NULL context");
+    }
+    else
+    {
+        LIST_ITEM_HANDLE ws_pending_send_list_item = (LIST_ITEM_HANDLE)context;
+        WS_PENDING_SEND* ws_pending_send = (WS_PENDING_SEND*)singlylinkedlist_item_get_value(ws_pending_send_list_item);
+        if (ws_pending_send != NULL)
+        {
+            UWS_CLIENT_HANDLE uws_client = ws_pending_send->uws_client;
+            WS_SEND_FRAME_RESULT ws_send_frame_result;
+
+            switch (send_result)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_436: [ When on_underlying_io_send_complete is called with any other error code, the send shall be indicated to the uws user by calling on_ws_send_frame_complete with WS_SEND_FRAME_ERROR. ]*/
+            default:
+            case IO_SEND_ERROR:
+                /* Codes_SRS_UWS_CLIENT_01_390: [ When on_underlying_io_send_complete is called with IO_SEND_ERROR as a result of sending a WebSocket frame to the underlying IO, the send shall be indicated to the uws user by calling on_ws_send_frame_complete with WS_SEND_FRAME_ERROR. ]*/
+                ws_send_frame_result = WS_SEND_FRAME_ERROR;
+                break;
+
+            case IO_SEND_OK:
+                /* Codes_SRS_UWS_CLIENT_01_389: [ When on_underlying_io_send_complete is called with IO_SEND_OK as a result of sending a WebSocket frame to the underlying IO, the send shall be indicated to the uws user by calling on_ws_send_frame_complete with WS_SEND_FRAME_OK. ]*/
+                ws_send_frame_result = WS_SEND_FRAME_OK;
+                break;
+
+            case IO_SEND_CANCELLED:
+                /* Codes_SRS_UWS_CLIENT_01_391: [ When on_underlying_io_send_complete is called with IO_SEND_CANCELLED as a result of sending a WebSocket frame to the underlying IO, the send shall be indicated to the uws user by calling on_ws_send_frame_complete with WS_SEND_FRAME_CANCELLED. ]*/
+                ws_send_frame_result = WS_SEND_FRAME_CANCELLED;
+                break;
+            }
+
+            if (complete_send_frame(ws_pending_send, ws_pending_send_list_item, ws_send_frame_result) != 0)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_433: [ If singlylinkedlist_remove fails an error shall be indicated by calling the on_ws_error callback with WS_ERROR_CANNOT_REMOVE_SENT_ITEM_FROM_LIST. ]*/
+                indicate_ws_error(uws_client, WS_ERROR_CANNOT_REMOVE_SENT_ITEM_FROM_LIST);
+            }
+        }
+        else
+        {
+            LogError("Failing getting singlylinkedlist_item_get_value on_underlying_io_send_complete");
+        }
+    }
+}
+
+static bool find_list_node(LIST_ITEM_HANDLE list_item, const void* match_context)
+{
+    return list_item == (LIST_ITEM_HANDLE)match_context;
+}
+
+int uws_client_send_frame_async(UWS_CLIENT_HANDLE uws_client, unsigned char frame_type, const unsigned char* buffer, size_t size, bool is_final, ON_WS_SEND_FRAME_COMPLETE on_ws_send_frame_complete, void* on_ws_send_frame_complete_context)
+{
+    int result;
+
+    if (uws_client == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_044: [ If any the arguments uws_client is NULL, uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+        LogError("NULL uws handle.");
+        result = MU_FAILURE;
+    }
+    else if ((buffer == NULL) &&
+        (size > 0))
+    {
+        /* Codes_SRS_UWS_CLIENT_01_045: [ If size is non-zero and buffer is NULL then uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+        LogError("NULL buffer with %u size.", (unsigned int)size);
+        result = MU_FAILURE;
+    }
+    /* Codes_SRS_UWS_CLIENT_01_146: [ A data frame MAY be transmitted by either the client or the server at any time after opening handshake completion and before that endpoint has sent a Close frame (Section 5.5.1). ]*/
+    /* Codes_SRS_UWS_CLIENT_01_268: [ The endpoint MUST ensure the WebSocket connection is in the OPEN state ]*/
+    else if (uws_client->uws_state != UWS_STATE_OPEN)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_043: [ If the uws instance is not OPEN (open has not been called or is still in progress) then uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+        LogError("uws not in OPEN state.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        WS_PENDING_SEND* ws_pending_send = (WS_PENDING_SEND*)malloc(sizeof(WS_PENDING_SEND));
+        if (ws_pending_send == NULL)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_047: [ If allocating memory for the newly queued item fails, uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+            LogError("Cannot allocate memory for frame to be sent.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            BUFFER_HANDLE non_control_frame_buffer;
+
+            /* Codes_SRS_UWS_CLIENT_01_425: [ Encoding shall be done by calling uws_frame_encoder_encode and passing to it the buffer and size argument for payload, the is_final flag and setting is_masked to true. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_270: [ An endpoint MUST encapsulate the /data/ in a WebSocket frame as defined in Section 5.2. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_272: [ The opcode (frame-opcode) of the first frame containing the data MUST be set to the appropriate value from Section 5.2 for data that is to be interpreted by the recipient as text or binary data. ]*/
+            /* Codes_SRS_UWS_CLIENT_01_274: [ If the data is being sent by the client, the frame(s) MUST be masked as defined in Section 5.3. ]*/
+            non_control_frame_buffer = uws_frame_encoder_encode((WS_FRAME_TYPE)frame_type, buffer, size, true, is_final, 0);
+            if (non_control_frame_buffer == NULL)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_426: [ If uws_frame_encoder_encode fails, uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+                LogError("Failed encoding WebSocket frame");
+                free(ws_pending_send);
+                result = MU_FAILURE;
+            }
+            else
+            {
+                const unsigned char* encoded_frame;
+                size_t encoded_frame_length;
+                LIST_ITEM_HANDLE new_pending_send_list_item;
+
+                /* Codes_SRS_UWS_CLIENT_01_428: [ The encoded frame buffer memory shall be obtained by calling BUFFER_u_char on the encode buffer. ]*/
+                encoded_frame = BUFFER_u_char(non_control_frame_buffer);
+                /* Codes_SRS_UWS_CLIENT_01_429: [ The encoded frame size shall be obtained by calling BUFFER_length on the encode buffer. ]*/
+                encoded_frame_length = BUFFER_length(non_control_frame_buffer);
+
+                /* Codes_SRS_UWS_CLIENT_01_038: [ uws_client_send_frame_async shall create and queue a structure that contains: ]*/
+                /* Codes_SRS_UWS_CLIENT_01_050: [ The argument on_ws_send_frame_complete shall be optional, if NULL is passed by the caller then no send complete callback shall be triggered. ]*/
+                /* Codes_SRS_UWS_CLIENT_01_040: [ - the send complete callback on_ws_send_frame_complete ]*/
+                /* Codes_SRS_UWS_CLIENT_01_041: [ - the send complete callback context on_ws_send_frame_complete_context ]*/
+                ws_pending_send->on_ws_send_frame_complete = on_ws_send_frame_complete;
+                ws_pending_send->context = on_ws_send_frame_complete_context;
+                ws_pending_send->uws_client = uws_client;
+
+                /* Codes_SRS_UWS_CLIENT_01_048: [ Queueing shall be done by calling singlylinkedlist_add. ]*/
+                new_pending_send_list_item = singlylinkedlist_add(uws_client->pending_sends, ws_pending_send);
+                if (new_pending_send_list_item == NULL)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_049: [ If singlylinkedlist_add fails, uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+                    LogError("Could not allocate memory for pending frames");
+                    free(ws_pending_send);
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_431: [ Once encoded the frame shall be sent by using xio_send with the following arguments: ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_053: [ - the io handle shall be the underlyiong IO handle created in uws_client_create. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_054: [ - the buffer argument shall point to the complete websocket frame to be sent. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_055: [ - the size argument shall indicate the websocket frame length. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_056: [ - the send_complete callback shall be the on_underlying_io_send_complete function. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_057: [ - the send_complete_context argument shall identify the pending send. ]*/
+                    /* Codes_SRS_UWS_CLIENT_01_276: [ The frame(s) that have been formed MUST be transmitted over the underlying network connection. ]*/
+                    if (xio_send(uws_client->underlying_io, encoded_frame, encoded_frame_length, on_underlying_io_send_complete, new_pending_send_list_item) != 0)
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_058: [ If xio_send fails, uws_client_send_frame_async shall fail and return a non-zero value. ]*/
+                        LogError("Could not send bytes through the underlying IO");
+
+                        /* Codes_SRS_UWS_CLIENT_09_001: [ If xio_send fails and the message is still queued, it shall be de-queued and destroyed. ] */
+                        if (singlylinkedlist_find(uws_client->pending_sends, find_list_node, new_pending_send_list_item) != NULL)
+                        {
+                            // Guards against double free in case the underlying I/O invoked 'on_underlying_io_send_complete' within xio_send.
+                            (void)singlylinkedlist_remove(uws_client->pending_sends, new_pending_send_list_item);
+                            free(ws_pending_send);
+                        }
+
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_UWS_CLIENT_01_042: [ On success, uws_client_send_frame_async shall return 0. ]*/
+                        result = 0;
+                    }
+                }
+
+                BUFFER_delete(non_control_frame_buffer);
+            }
+        }
+    }
+
+    return result;
+}
+
+void uws_client_dowork(UWS_CLIENT_HANDLE uws_client)
+{
+    if (uws_client == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_059: [ If the uws_client argument is NULL, uws_client_dowork shall do nothing. ]*/
+        LogError("NULL uws handle.");
+    }
+    else
+    {
+        /* Codes_SRS_UWS_CLIENT_01_060: [ If the IO is not yet open, uws_client_dowork shall do nothing. ]*/
+        if (uws_client->uws_state != UWS_STATE_CLOSED)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_430: [ uws_client_dowork shall call xio_dowork with the IO handle argument set to the underlying IO created in uws_client_create. ]*/
+            xio_dowork(uws_client->underlying_io);
+        }
+    }
+}
+
+int uws_client_set_option(UWS_CLIENT_HANDLE uws_client, const char* option_name, const void* value)
+{
+    int result;
+
+    if (
+        (uws_client == NULL) ||
+        (option_name == NULL)
+        )
+    {
+        /* Codes_SRS_UWS_CLIENT_01_440: [ If any of the arguments uws_client or option_name is NULL uws_client_set_option shall return a non-zero value. ]*/
+        LogError("invalid parameter (NULL) passed to uws_client_set_option");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (strcmp(UWS_CLIENT_OPTIONS, option_name) == 0)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_510: [ If the option name is uWSClientOptions then uws_client_set_option shall call OptionHandler_FeedOptions and pass to it the underlying IO handle and the value argument. ]*/
+            if (OptionHandler_FeedOptions((OPTIONHANDLER_HANDLE)value, uws_client->underlying_io) != OPTIONHANDLER_OK)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_511: [ If OptionHandler_FeedOptions fails, uws_client_set_option shall fail and return a non-zero value. ]*/
+                LogError("OptionHandler_FeedOptions failed");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_UWS_CLIENT_01_442: [ On success, uws_client_set_option shall return 0. ]*/
+                result = 0;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_441: [ Otherwise all options shall be passed as they are to the underlying IO by calling xio_setoption. ]*/
+            if (xio_setoption(uws_client->underlying_io, option_name, value) != 0)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_443: [ If xio_setoption fails, uws_client_set_option shall fail and return a non-zero value. ]*/
+                LogError("xio_setoption failed.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_UWS_CLIENT_01_442: [ On success, uws_client_set_option shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void* uws_client_clone_option(const char* name, const void* value)
+{
+    void* result;
+
+    if (
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        /* Codes_SRS_UWS_CLIENT_01_506: [ If uws_client_clone_option is called with NULL name or value it shall return NULL. ]*/
+        LogError("invalid argument detected: const char* name=%p, const void* value=%p", name, value);
+        result = NULL;
+    }
+    else
+    {
+        if (strcmp(name, UWS_CLIENT_OPTIONS) == 0)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_507: [ uws_client_clone_option called with name being uWSClientOptions shall return the same value. ]*/
+            result = (void*)value;
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_512: [ uws_client_clone_option called with any other option name than uWSClientOptions shall return NULL. ]*/
+            LogError("unknown option: %s", name);
+            result = NULL;
+        }
+    }
+
+    return result;
+}
+
+static void uws_client_destroy_option(const char* name, const void* value)
+{
+    if (
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        /* Codes_SRS_UWS_CLIENT_01_509: [ If uws_client_destroy_option is called with NULL name or value it shall do nothing. ]*/
+        LogError("invalid argument detected: const char* name=%p, const void* value=%p", name, value);
+    }
+    else
+    {
+        if (strcmp(name, UWS_CLIENT_OPTIONS) == 0)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_508: [ uws_client_destroy_option called with the option name being uWSClientOptions shall destroy the value by calling OptionHandler_Destroy. ]*/
+            OptionHandler_Destroy((OPTIONHANDLER_HANDLE)value);
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_513: [ If uws_client_destroy_option is called with any other name it shall do nothing. ]*/
+            LogError("unknown option: %s", name);
+        }
+    }
+}
+
+OPTIONHANDLER_HANDLE uws_client_retrieve_options(UWS_CLIENT_HANDLE uws_client)
+{
+    OPTIONHANDLER_HANDLE result;
+
+    if (uws_client == NULL)
+    {
+        /* Codes_SRS_UWS_CLIENT_01_444: [ If parameter uws_client is NULL then uws_client_retrieve_options shall fail and return NULL. ]*/
+        LogError("NULL uws handle.");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_UWS_CLIENT_01_445: [ uws_client_retrieve_options shall call OptionHandler_Create to produce an OPTIONHANDLER_HANDLE and on success return the new OPTIONHANDLER_HANDLE handle. ]*/
+        result = OptionHandler_Create(uws_client_clone_option, uws_client_destroy_option, (pfSetOption)uws_client_set_option);
+        if (result == NULL)
+        {
+            /* Codes_SRS_UWS_CLIENT_01_446: [ If OptionHandler_Create fails then uws_client_retrieve_options shall fail and return NULL. ]*/
+            LogError("OptionHandler_Create failed");
+        }
+        else
+        {
+            /* Codes_SRS_UWS_CLIENT_01_502: [ When calling xio_retrieveoptions the underlying IO handle shall be passed to it. ]*/
+            OPTIONHANDLER_HANDLE underlying_io_options = xio_retrieveoptions(uws_client->underlying_io);
+            if (underlying_io_options == NULL)
+            {
+                /* Codes_SRS_UWS_CLIENT_01_503: [ If xio_retrieveoptions fails, uws_client_retrieve_options shall fail and return NULL. ]*/
+                LogError("unable to concrete_io_retrieveoptions");
+                OptionHandler_Destroy(result);
+                result = NULL;
+            }
+            else
+            {
+                /* Codes_SRS_UWS_CLIENT_01_501: [ uws_client_retrieve_options shall add to the option handler one option, whose name shall be uWSClientOptions and the value shall be queried by calling xio_retrieveoptions. ]*/
+                /* Codes_SRS_UWS_CLIENT_01_504: [ Adding the option shall be done by calling OptionHandler_AddOption. ]*/
+                if (OptionHandler_AddOption(result, UWS_CLIENT_OPTIONS, underlying_io_options) != OPTIONHANDLER_OK)
+                {
+                    /* Codes_SRS_UWS_CLIENT_01_505: [ If OptionHandler_AddOption fails, uws_client_retrieve_options shall fail and return NULL. ]*/
+                    LogError("OptionHandler_AddOption failed");
+                    OptionHandler_Destroy(underlying_io_options);
+                    OptionHandler_Destroy(result);
+                    result = NULL;
+                }
+            }
+        }
+
+    }
+
+    return result;
+}
+
+int uws_client_set_request_header(UWS_CLIENT_HANDLE uws_client, const char* name, const char* value)
+{
+    int result;
+
+    if (uws_client == NULL || name == NULL || value == NULL)
+    {
+        // Codes_SRS_UWS_CLIENT_09_002: [ If any of the arguments uws_client or name or value is NULL uws_client_set_request_header shall fail and return a non-zero value. ]  
+        LogError("invalid parameter (uws_client=%p, name=%p, value=%p)", uws_client, name, value);
+        result = MU_FAILURE;
+    }
+    // Codes_SRS_UWS_CLIENT_09_003: [ A copy of name and value shall be stored for later sending in the request message. ]  
+    else if (Map_AddOrUpdate(uws_client->request_headers, name, value) != MAP_OK)
+    {
+        // Codes_SRS_UWS_CLIENT_09_004: [ If name or value fail to be stored the function shall fail and return a non-zero value. ]  
+        LogError("Failed adding request header %s", name);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        // Codes_SRS_UWS_CLIENT_09_005: [ If no failures occur the function shall return zero. ]
+        result = 0;
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/uws_frame_encoder.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/uws_frame_encoder.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/uws_frame_encoder.c	(revision 389)
@@ -0,0 +1,191 @@
+ // Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/gb_rand.h"
+#include "azure_c_shared_utility/uws_frame_encoder.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/uniqueid.h"
+
+BUFFER_HANDLE uws_frame_encoder_encode(WS_FRAME_TYPE opcode, const unsigned char* payload, size_t length, bool is_masked, bool is_final, unsigned char reserved)
+{
+    BUFFER_HANDLE result;
+
+    if (reserved > 7)
+    {
+        /* Codes_SRS_UWS_FRAME_ENCODER_01_052: [ If reserved has any bits set except the lowest 3 then uws_frame_encoder_encode shall fail and return NULL. ]*/
+        LogError("Bad reserved value: 0x%02x", reserved);
+        result = NULL;
+    }
+    else if (opcode > 0x0F)
+    {
+        /* Codes_SRS_UWS_FRAME_ENCODER_01_006: [ If an unknown opcode is received, the receiving endpoint MUST _Fail the WebSocket Connection_. ]*/
+        LogError("Invalid opcode: 0x%02x", opcode);
+        result = NULL;
+    }
+    else if ((length > 0) &&
+        (payload == NULL))
+    {
+        /* Codes_SRS_UWS_FRAME_ENCODER_01_054: [ If length is greater than 0 and payload is NULL, then uws_frame_encoder_encode shall fail and return NULL. ]*/
+        LogError("Invalid arguments: NULL payload and length=%u", (unsigned int)length);
+        result = NULL;
+    }
+    else
+    {
+        size_t needed_bytes = 2;
+        size_t header_bytes;
+
+        /* Codes_SRS_UWS_FRAME_ENCODER_01_044: [ On success uws_frame_encoder_encode shall return a non-NULL handle to the result buffer. ]*/
+        /* Codes_SRS_UWS_FRAME_ENCODER_01_048: [ The newly created buffer shall be created by calling BUFFER_new. ]*/
+        result = BUFFER_new();
+        if (result == NULL)
+        {
+            /* Codes_SRS_UWS_FRAME_ENCODER_01_049: [ If BUFFER_new fails then uws_frame_encoder_encode shall fail and return NULL. ]*/
+            LogError("Cannot create new buffer");
+        }
+        else
+        {
+            /* Codes_SRS_UWS_FRAME_ENCODER_01_001: [ uws_frame_encoder_encode shall encode the information given in opcode, payload, length, is_masked, is_final and reserved according to the RFC6455 into a new buffer.]*/
+            if (length > 65535)
+            {
+                needed_bytes += 8;
+            }
+            else if (length > 125)
+            {
+                needed_bytes += 2;
+            }
+
+            if (is_masked)
+            {
+                needed_bytes += 4;
+            }
+
+            header_bytes = needed_bytes;
+            needed_bytes += length;
+
+            /* Codes_SRS_UWS_FRAME_ENCODER_01_046: [ The result buffer shall be resized accordingly using BUFFER_enlarge. ]*/
+            if (BUFFER_enlarge(result, needed_bytes) != 0)
+            {
+                /* Codes_SRS_UWS_FRAME_ENCODER_01_047: [ If BUFFER_enlarge fails then uws_frame_encoder_encode shall fail and return NULL. ]*/
+                LogError("Cannot allocate memory for encoded frame");
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                /* Codes_SRS_UWS_FRAME_ENCODER_01_050: [ The allocated memory shall be accessed by calling BUFFER_u_char. ]*/
+                unsigned char* buffer = BUFFER_u_char(result);
+                if (buffer == NULL)
+                {
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_051: [ If BUFFER_u_char fails then uws_frame_encoder_encode shall fail and return a NULL. ]*/
+                    LogError("Cannot get encoded buffer pointer");
+                    BUFFER_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_007: [ *  %x0 denotes a continuation frame ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_008: [ *  %x1 denotes a text frame ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_009: [ *  %x2 denotes a binary frame ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_010: [ *  %x3-7 are reserved for further non-control frames ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_011: [ *  %x8 denotes a connection close ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_012: [ *  %x9 denotes a ping ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_013: [ *  %xA denotes a pong ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_014: [ *  %xB-F are reserved for further control frames ]*/
+                    buffer[0] = (unsigned char)opcode;
+
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_002: [ Indicates that this is the final fragment in a message. ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_003: [ The first fragment MAY also be the final fragment. ]*/
+                    if (is_final)
+                    {
+                        buffer[0] |= 0x80;
+                    }
+
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_004: [ MUST be 0 unless an extension is negotiated that defines meanings for non-zero values. ]*/
+                    buffer[0] |= reserved << 4;
+
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_022: [ Note that in all cases, the minimal number of bytes MUST be used to encode the length, for example, the length of a 124-byte-long string can't be encoded as the sequence 126, 0, 124. ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_018: [ The length of the "Payload data", in bytes: ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_023: [ The payload length is the length of the "Extension data" + the length of the "Application data". ]*/
+                    /* Codes_SRS_UWS_FRAME_ENCODER_01_042: [ The payload length, indicated in the framing as frame-payload-length, does NOT include the length of the masking key. ]*/
+                    if (length > 65535)
+                    {
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_020: [ If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the most significant bit MUST be 0) are the payload length. ]*/
+                        buffer[1] = 127;
+
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_021: [ Multibyte length quantities are expressed in network byte order. ]*/
+                        buffer[2] = (unsigned char)((uint64_t)length >> 56) & 0xFF;
+                        buffer[3] = (unsigned char)((uint64_t)length >> 48) & 0xFF;
+                        buffer[4] = (unsigned char)((uint64_t)length >> 40) & 0xFF;
+                        buffer[5] = (unsigned char)((uint64_t)length >> 32) & 0xFF;
+                        buffer[6] = (unsigned char)((uint64_t)length >> 24) & 0xFF;
+                        buffer[7] = (unsigned char)((uint64_t)length >> 16) & 0xFF;
+                        buffer[8] = (unsigned char)((uint64_t)length >> 8) & 0xFF;
+                        buffer[9] = (unsigned char)(length & 0xFF);
+                    }
+                    else if (length > 125)
+                    {
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_019: [ If 126, the following 2 bytes interpreted as a 16-bit unsigned integer are the payload length. ]*/
+                        buffer[1] = 126;
+
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_021: [ Multibyte length quantities are expressed in network byte order. ]*/
+                        buffer[2] = (unsigned char)(length >> 8);
+                        buffer[3] = (unsigned char)(length & 0xFF);
+                    }
+                    else
+                    {
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_043: [ if 0-125, that is the payload length. ]*/
+                        buffer[1] = (unsigned char)length;
+                    }
+
+                    if (is_masked)
+                    {
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_015: [ Defines whether the "Payload data" is masked. ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_033: [ A masked frame MUST have the field frame-masked set to 1, as defined in Section 5.2. ]*/
+                        buffer[1] |= 0x80;
+
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_053: [ In order to obtain a 32 bit value for masking, gb_rand shall be used 4 times (for each byte). ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_016: [ If set to 1, a masking key is present in masking-key, and this is used to unmask the "Payload data" as per Section 5.3. ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_026: [ This field is present if the mask bit is set to 1 and is absent if the mask bit is set to 0. ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_034: [ The masking key is contained completely within the frame, as defined in Section 5.2 as frame-masking-key. ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_036: [ The masking key is a 32-bit value chosen at random by the client. ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_037: [ When preparing a masked frame, the client MUST pick a fresh masking key from the set of allowed 32-bit values. ]*/
+                        /* Codes_SRS_UWS_FRAME_ENCODER_01_038: [ The masking key needs to be unpredictable; thus, the masking key MUST be derived from a strong source of entropy, and the masking key for a given frame MUST NOT make it simple for a server/proxy to predict the masking key for a subsequent frame. ]*/
+                        buffer[header_bytes - 4] = (unsigned char)gb_rand();
+                        buffer[header_bytes - 3] = (unsigned char)gb_rand();
+                        buffer[header_bytes - 2] = (unsigned char)gb_rand();
+                        buffer[header_bytes - 1] = (unsigned char)gb_rand();
+                    }
+
+                    if (length > 0)
+                    {
+                        if (is_masked)
+                        {
+                            size_t i;
+
+                            /* Codes_SRS_UWS_FRAME_ENCODER_01_035: [ It is used to mask the "Payload data" defined in the same section as frame-payload-data, which includes "Extension data" and "Application data". ]*/
+                            /* Codes_SRS_UWS_FRAME_ENCODER_01_039: [ To convert masked data into unmasked data, or vice versa, the following algorithm is applied. ]*/
+                            /* Codes_SRS_UWS_FRAME_ENCODER_01_040: [ The same algorithm applies regardless of the direction of the translation, e.g., the same steps are applied to mask the data as to unmask the data. ]*/
+                            for (i = 0; i < length; i++)
+                            {
+                                /* Codes_SRS_UWS_FRAME_ENCODER_01_041: [ Octet i of the transformed data ("transformed-octet-i") is the XOR of octet i of the original data ("original-octet-i") with octet at index i modulo 4 of the masking key ("masking-key-octet-j"): ]*/
+                                buffer[header_bytes + i] = ((unsigned char*)payload)[i] ^ buffer[header_bytes - 4 + (i % 4)];
+                            }
+                        }
+                        else
+                        {
+                            (void)memcpy(buffer + header_bytes, payload, length);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/vector.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/vector.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/vector.c	(revision 389)
@@ -0,0 +1,338 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/vector.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+#include "azure_c_shared_utility/vector_types_internal.h"
+
+VECTOR_HANDLE VECTOR_create(size_t elementSize)
+{
+    VECTOR_HANDLE result;
+
+    /* Codes_SRS_VECTOR_10_002: [VECTOR_create shall fail and return NULL if elementsize is 0.] */
+    if (elementSize == 0)
+    {
+        LogError("invalid elementSize(%zd).", elementSize);
+        result = NULL;
+    }
+    else
+    {
+        result = (VECTOR*)malloc(sizeof(VECTOR));
+        /* Codes_SRS_VECTOR_10_002 : [VECTOR_create shall fail and return NULL if malloc fails.] */
+        if (result == NULL)
+        {
+            LogError("malloc failed.");
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_001: [VECTOR_create shall allocate a VECTOR_HANDLE that will contain an empty vector.The size of each element is given with the parameter elementSize.] */
+            result->storage = NULL;
+            result->count = 0;
+            result->elementSize = elementSize;
+        }
+    }
+    return result;
+}
+
+void VECTOR_destroy(VECTOR_HANDLE handle)
+{
+    /* Codes_SRS_VECTOR_10_009: [VECTOR_destroy shall return if the given handle is NULL.] */
+    if (handle == NULL)
+    {
+        LogError("invalid argument handle(NULL).");
+    }
+    else
+    {
+        /* Codes_SRS_VECTOR_10_008: [VECTOR_destroy shall free the given handle and its internal storage.] */
+        free(handle->storage);
+        free(handle);
+    }
+}
+
+VECTOR_HANDLE VECTOR_move(VECTOR_HANDLE handle)
+{
+    VECTOR_HANDLE result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_VECTOR_10_005: [VECTOR_move shall fail and return NULL if the given handle is NULL.] */
+        LogError("invalid argument - handle(NULL).");
+        result = NULL;
+    }
+    else
+    {
+        result = (VECTOR*)malloc(sizeof(VECTOR));
+        if (result == NULL)
+        {
+            /* Codes_SRS_VECTOR_10_006: [VECTOR_move shall fail and return NULL if malloc fails.] */
+            LogError("malloc failed.");
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_004: [VECTOR_move shall allocate a VECTOR_HANDLE and move the data to it from the given handle.] */
+            result->count = handle->count;
+            result->elementSize = handle->elementSize;
+            result->storage = handle->storage;
+
+            handle->storage = NULL;
+            handle->count = 0;
+        }
+    }
+    return result;
+}
+
+/* insertion */
+
+int VECTOR_push_back(VECTOR_HANDLE handle, const void* elements, size_t numElements)
+{
+    int result;
+    if (handle == NULL || elements == NULL || numElements == 0)
+    {
+       /* Codes_SRS_VECTOR_10_011: [VECTOR_push_back shall fail and return non-zero if handle is NULL.] */
+       /* Codes_SRS_VECTOR_10_034: [VECTOR_push_back shall fail and return non-zero if elements is NULL.] */
+       /* Codes_SRS_VECTOR_10_035: [VECTOR_push_back shall fail and return non-zero if numElements is 0.] */
+        LogError("invalid argument - handle(%p), elements(%p), numElements(%zd).", handle, elements, numElements);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t curSize = handle->elementSize * handle->count;
+        size_t appendSize = handle->elementSize * numElements;
+
+        void* temp = realloc(handle->storage, curSize + appendSize);
+        if (temp == NULL)
+        {
+           /* Codes_SRS_VECTOR_10_012: [VECTOR_push_back shall fail and return non-zero if memory allocation fails.] */
+            LogError("realloc failed.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_013: [VECTOR_push_back shall append the given elements and return 0 indicating success.] */
+            (void)memcpy((unsigned char*)temp + curSize, elements, appendSize);
+            handle->storage = temp;
+            handle->count += numElements;
+            result = 0;
+        }
+    }
+    return result;
+}
+
+/* removal */
+
+void VECTOR_erase(VECTOR_HANDLE handle, void* elements, size_t numElements)
+{
+    if (handle == NULL || elements == NULL || numElements == 0)
+    {
+        /* Codes_SRS_VECTOR_10_015: [VECTOR_erase shall return if handle is NULL.] */
+        /* Codes_SRS_VECTOR_10_038: [VECTOR_erase shall return if elements is NULL.] */
+        /* Codes_SRS_VECTOR_10_039: [VECTOR_erase shall return if numElements is 0.] */
+        LogError("invalid argument - handle(%p), elements(%p), numElements(%zd).", handle, elements, numElements);
+    }
+    else
+    {
+        if (elements < handle->storage)
+        {
+            /* Codes_SRS_VECTOR_10_040: [VECTOR_erase shall return if elements is out of bound.] */
+            LogError("invalid argument elements(%p) is not a member of this object.", elements);
+        }
+        else
+        {
+            ptrdiff_t diff = ((unsigned char*)elements) - ((unsigned char*)handle->storage);
+            if ((diff % handle->elementSize) != 0)
+            {
+                /* Codes_SRS_VECTOR_10_041: [VECTOR_erase shall return if elements is misaligned.] */
+                LogError("invalid argument - elements(%p) is misaligned", elements);
+            }
+            else
+            {
+                /* Compute the arguments needed for memmove. */
+                unsigned char* src = (unsigned char*)elements + (handle->elementSize * numElements);
+                unsigned char* srcEnd = (unsigned char*)handle->storage + (handle->elementSize * handle->count);
+                if (src > srcEnd)
+                {
+                    /* Codes_SRS_VECTOR_10_040: [VECTOR_erase shall return if elements is out of bound.] */
+                    LogError("invalid argument - numElements(%zd) is out of bound.", numElements);
+                }
+                else
+                {
+                    /* Codes_SRS_VECTOR_10_014: [VECTOR_erase shall remove the 'numElements' starting at 'elements' and reduce its internal storage.] */
+                    handle->count -= numElements;
+                    if (handle->count == 0)
+                    {
+                        free(handle->storage);
+                        handle->storage = NULL;
+                    }
+                    else
+                    {
+                        void* tmp;
+                        (void)memmove(elements, src, srcEnd - src);
+                        tmp = realloc(handle->storage, (handle->elementSize * handle->count));
+                        if (tmp == NULL)
+                        {
+                            LogInfo("realloc failed. Keeping original internal storage pointer.");
+                        }
+                        else
+                        {
+                            handle->storage = tmp;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+void VECTOR_clear(VECTOR_HANDLE handle)
+{
+    /* Codes_SRS_VECTOR_10_017: [VECTOR_clear shall if the object is NULL or empty.] */
+    if (handle == NULL)
+    {
+        LogError("invalid argument handle(NULL).");
+    }
+    else
+    {
+        /* Codes_SRS_VECTOR_10_016: [VECTOR_clear shall remove all elements from the object and release internal storage.] */
+        free(handle->storage);
+        handle->storage = NULL;
+        handle->count = 0;
+    }
+}
+
+/* access */
+
+void* VECTOR_element(VECTOR_HANDLE handle, size_t index)
+{
+    void* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_VECTOR_10_019: [VECTOR_element shall fail and return NULL if handle is NULL.] */
+        LogError("invalid argument handle(NULL).");
+        result = NULL;
+    }
+    else
+    {
+        if (index >= handle->count)
+        {
+            /* Codes_SRS_VECTOR_10_020: [VECTOR_element shall fail and return NULL if the given index is out of range.] */
+            LogError("invalid argument - index(%zd); should be >= 0 and < %zd.", index, handle->count);
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_018: [VECTOR_element shall return the element at the given index.] */
+            result = (unsigned char*)handle->storage + (handle->elementSize * index);
+        }
+    }
+    return result;
+}
+
+void* VECTOR_front(VECTOR_HANDLE handle)
+{
+    void* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_VECTOR_10_022: [VECTOR_front shall fail and return NULL if handle is NULL.] */
+        LogError("invalid argument handle (NULL).");
+        result = NULL;
+    }
+    else
+    {
+        if (handle->count == 0)
+        {
+            /* Codes_SRS_VECTOR_10_028: [VECTOR_front shall return NULL if the vector is empty.] */
+            LogError("vector is empty.");
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_021: [VECTOR_front shall return a pointer to the element at index 0.] */
+            result = handle->storage;
+        }
+    }
+    return result;
+}
+
+void* VECTOR_back(VECTOR_HANDLE handle)
+{
+    void* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_VECTOR_10_024: [VECTOR_back shall fail and return NULL if handle is NULL.] */
+        LogError("invalid argument handle (NULL).");
+        result = NULL;
+    }
+    else
+    {
+        if (handle->count == 0)
+        {
+            /* Codes_SRS_VECTOR_10_029: [VECTOR_back shall return NULL if the vector is empty.] */
+            LogError("vector is empty.");
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_023: [VECTOR_front shall return the last element of the vector.] */
+            result = (unsigned char*)handle->storage + (handle->elementSize * (handle->count - 1));
+        }
+    }
+    return result;
+}
+
+void* VECTOR_find_if(VECTOR_HANDLE handle, PREDICATE_FUNCTION pred, const void* value)
+{
+    void* result;
+    if (handle == NULL || pred == NULL)
+    {
+        /* Codes_SRS_VECTOR_10_030: [VECTOR_find_if shall fail and return NULL if handle is NULL.] */
+        /* Codes_SRS_VECTOR_10_036: [VECTOR_find_if shall fail and return NULL if pred is NULL.] */
+        LogError("invalid argument - handle(%p), pred(%p)", handle, pred);
+        result = NULL;
+    }
+    else
+    {
+        size_t i;
+        for (i = 0; i < handle->count; ++i)
+        {
+            if (true == pred((unsigned char*)handle->storage + (handle->elementSize * i), value))
+            {
+                /* Codes_SRS_VECTOR_10_031: [VECTOR_find_if shall return the first element in the vector that matches pred.] */
+                break;
+            }
+        }
+
+        if (i == handle->count)
+        {
+            /* Codes_SRS_VECTOR_10_032: [VECTOR_find_if shall return NULL if no matching element is found.] */
+            result = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_VECTOR_10_031: [VECTOR_find_if shall return the first element in the vector that matches pred.]*/
+            result = (unsigned char*)handle->storage + (handle->elementSize * i);
+        }
+    }
+    return result;
+}
+
+/* capacity */
+
+size_t VECTOR_size(VECTOR_HANDLE handle)
+{
+    size_t result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_VECTOR_10_026: [**VECTOR_size shall return 0 if the given handle is NULL.] */
+        LogError("invalid argument handle(NULL).");
+        result = 0;
+    }
+    else
+    {
+        /* Codes_SRS_VECTOR_10_025: [VECTOR_size shall return the number of elements stored with the given handle.] */
+        result = handle->count;
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/wsio.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/wsio.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/wsio.c	(revision 389)
@@ -0,0 +1,826 @@
+ // Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/wsio.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/singlylinkedlist.h"
+#include "azure_c_shared_utility/optionhandler.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/uws_client.h"
+#include "azure_c_shared_utility/optimize_size.h"
+
+static const char* WSIO_OPTIONS = "WSIOOptions";
+
+typedef enum IO_STATE_TAG
+{
+    IO_STATE_NOT_OPEN,
+    IO_STATE_OPENING,
+    IO_STATE_OPEN,
+    IO_STATE_CLOSING,
+    IO_STATE_ERROR
+} IO_STATE;
+
+typedef struct PENDING_IO_TAG
+{
+    ON_SEND_COMPLETE on_send_complete;
+    void* callback_context;
+    void* wsio;
+} PENDING_IO;
+
+typedef struct WSIO_INSTANCE_TAG
+{
+    ON_BYTES_RECEIVED on_bytes_received;
+    void* on_bytes_received_context;
+    ON_IO_OPEN_COMPLETE on_io_open_complete;
+    void* on_io_open_complete_context;
+    ON_IO_ERROR on_io_error;
+    void* on_io_error_context;
+    ON_IO_CLOSE_COMPLETE on_io_close_complete;
+    void* on_io_close_complete_context;
+    IO_STATE io_state;
+    SINGLYLINKEDLIST_HANDLE pending_io_list;
+    UWS_CLIENT_HANDLE uws;
+} WSIO_INSTANCE;
+
+static void indicate_error(WSIO_INSTANCE* wsio_instance)
+{
+    wsio_instance->io_state = IO_STATE_ERROR;
+    wsio_instance->on_io_error(wsio_instance->on_io_error_context);
+}
+
+static void indicate_open_complete(WSIO_INSTANCE* ws_io_instance, IO_OPEN_RESULT open_result)
+{
+    ws_io_instance->on_io_open_complete(ws_io_instance->on_io_open_complete_context, open_result);
+}
+
+static void complete_send_item(LIST_ITEM_HANDLE pending_io_list_item, IO_SEND_RESULT io_send_result)
+{
+    PENDING_IO* pending_io = (PENDING_IO*)singlylinkedlist_item_get_value(pending_io_list_item);
+    WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)pending_io->wsio;
+
+    /* Codes_SRS_WSIO_01_145: [ Removing it from the list shall be done by calling singlylinkedlist_remove. ]*/
+    if (singlylinkedlist_remove(wsio_instance->pending_io_list, pending_io_list_item) != 0)
+    {
+        LogError("Failed removing pending IO from linked list.");
+    }
+
+    /* Codes_SRS_WSIO_01_105: [ The argument on_send_complete shall be optional, if NULL is passed by the caller then no send complete callback shall be triggered. ]*/
+    if (pending_io->on_send_complete != NULL)
+    {
+        pending_io->on_send_complete(pending_io->callback_context, io_send_result);
+    }
+
+    /* Codes_SRS_WSIO_01_144: [ Also the pending IO data shall be freed. ]*/
+    free(pending_io);
+}
+
+static void on_underlying_ws_send_frame_complete(void* context, WS_SEND_FRAME_RESULT ws_send_frame_result)
+{
+    if (context == NULL)
+    {
+        LogError("NULL context for on_underlying_ws_send_frame_complete");
+    }
+    else
+    {
+        IO_SEND_RESULT io_send_result;
+        LIST_ITEM_HANDLE list_item_handle = (LIST_ITEM_HANDLE)context;
+
+        /* Codes_SRS_WSIO_01_143: [ When on_underlying_ws_send_frame_complete is called after sending a WebSocket frame, the pending IO shall be removed from the list. ]*/
+        switch (ws_send_frame_result)
+        {
+        default:
+            /* Codes_SRS_WSIO_01_148: [ When on_underlying_ws_send_frame_complete is called with any other error code, the callback on_send_complete shall be called with IO_SEND_ERROR. ]*/
+            LogError("Frame send error with result %d", (int)ws_send_frame_result);
+            io_send_result = IO_SEND_ERROR;
+            break;
+
+        case WS_SEND_FRAME_OK:
+            /* Codes_SRS_WSIO_01_146: [ When on_underlying_ws_send_frame_complete is called with WS_SEND_OK, the callback on_send_complete shall be called with IO_SEND_OK. ]*/
+            io_send_result = IO_SEND_OK;
+            break;
+
+        case WS_SEND_FRAME_CANCELLED:
+            /* Codes_SRS_WSIO_01_147: [ When on_underlying_ws_send_frame_complete is called with WS_SEND_CANCELLED, the callback on_send_complete shall be called with IO_SEND_CANCELLED. ]*/
+            io_send_result = IO_SEND_CANCELLED;
+            break;
+        }
+
+        complete_send_item(list_item_handle, io_send_result);
+    }
+}
+
+static void on_underlying_ws_close_complete(void* context)
+{
+    WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)context;
+    if (wsio_instance == NULL)
+    {
+        /* Codes_SRS_WSIO_01_161: [ If the context passed to on_underlying_ws_close_complete is NULL, on_underlying_ws_close_complete shall do nothing. ]*/
+        LogError("NULL context passed to on_underlying_ws_close_complete");
+    }
+    else
+    {
+        wsio_instance->io_state = IO_STATE_NOT_OPEN;
+
+        /* Codes_SRS_WSIO_01_160: [ If NULL was passed to wsio_close no callback shall be called. ]*/
+        if (wsio_instance->on_io_close_complete != NULL)
+        {
+            /* Codes_SRS_WSIO_01_159: [ When on_underlying_ws_close_complete while the IO is closing (after wsio_close), the close shall be indicated up by calling the on_io_close_complete callback passed to wsio_close. ]*/
+            /* Codes_SRS_WSIO_01_163: [ When on_io_close_complete is called, the context passed to wsio_close shall be passed as argument to on_io_close_complete. ]*/
+            wsio_instance->on_io_close_complete(wsio_instance->on_io_close_complete_context);
+        }
+    }
+}
+
+static int internal_close(WSIO_INSTANCE* wsio_instance, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* on_io_close_complete_context)
+{
+    int result;
+
+    /* Codes_SRS_WSIO_01_089: [ wsio_close after a wsio_close shall fail and return a non-zero value.  ]*/
+    /* Codes_SRS_WSIO_01_088: [ wsio_close when no open action has been issued shall fail and return a non-zero value. ]*/
+    if (wsio_instance->io_state == IO_STATE_NOT_OPEN)
+    {
+        LogError("wsio_close when not open.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (wsio_instance->io_state == IO_STATE_OPENING)
+        {
+            wsio_instance->io_state = IO_STATE_NOT_OPEN;
+            indicate_open_complete(wsio_instance, IO_OPEN_CANCELLED);
+            result = 0;
+        }
+        else if (wsio_instance->io_state == IO_STATE_CLOSING)
+        {
+            LogError("Already closing");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            LIST_ITEM_HANDLE first_pending_io;
+
+            wsio_instance->io_state = IO_STATE_CLOSING;
+
+            wsio_instance->on_io_close_complete = on_io_close_complete;
+            wsio_instance->on_io_close_complete_context = on_io_close_complete_context;
+
+            /* Codes_SRS_WSIO_01_087: [ wsio_close shall call uws_client_close_async while passing as argument the IO handle created in wsio_create.  ]*/
+            if (uws_client_close_async(wsio_instance->uws, on_underlying_ws_close_complete, wsio_instance) != 0)
+            {
+                /* Codes_SRS_WSIO_01_164: [ When uws_client_close_async fails, wsio_close shall call the on_io_close_complete callback and continue. ] */
+                if (wsio_instance->on_io_close_complete != NULL)
+                {
+                    wsio_instance->on_io_close_complete(wsio_instance->on_io_close_complete_context);
+                }
+            }
+
+            /* Codes_SRS_WSIO_01_085: [ wsio_close shall close the websockets IO if an open action is either pending or has completed successfully (if the IO is open).  ]*/
+            /* Codes_SRS_WSIO_01_091: [ wsio_close shall obtain all the pending IO items by repetitively querying for the head of the pending IO list and freeing that head item. ]*/
+            /* Codes_SRS_WSIO_01_092: [ Obtaining the head of the pending IO list shall be done by calling singlylinkedlist_get_head_item. ]*/
+            while ((first_pending_io = singlylinkedlist_get_head_item(wsio_instance->pending_io_list)) != NULL)
+            {
+                complete_send_item(first_pending_io, IO_SEND_CANCELLED);
+            }
+
+            /* Codes_SRS_WSIO_01_133: [ On success wsio_close shall return 0. ]*/
+            result = 0;
+            wsio_instance->io_state = IO_STATE_NOT_OPEN;
+        }
+    }
+    return result;
+}
+
+CONCRETE_IO_HANDLE wsio_create(void* io_create_parameters)
+{
+    /* Codes_SRS_WSIO_01_066: [ io_create_parameters shall be used as a WSIO_CONFIG* . ]*/
+    WSIO_CONFIG* ws_io_config = (WSIO_CONFIG*)io_create_parameters;
+    WSIO_INSTANCE* result;
+
+    /* Codes_SRS_WSIO_01_065: [ If the argument io_create_parameters is NULL then wsio_create shall return NULL. ]*/
+    if ((ws_io_config == NULL) ||
+        /* Codes_SRS_WSIO_01_067: [ If any of the members hostname, resource_name or protocol is NULL in WSIO_CONFIG then wsio_create shall return NULL. ]*/
+        (ws_io_config->hostname == NULL) ||
+        (ws_io_config->resource_name == NULL) ||
+        (ws_io_config->protocol == NULL))
+    {
+        LogError("NULL io_create_parameters.");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_WSIO_01_001: [wsio_create shall create an instance of wsio and return a non-NULL handle to it.] */
+        result = (WSIO_INSTANCE*)malloc(sizeof(WSIO_INSTANCE));
+        if (result == NULL)
+        {
+            /* Codes_SRS_WSIO_01_068: [ If allocating memory for the new wsio instance fails then wsio_create shall return NULL. ]*/
+            LogError("Cannot allocate memory for the new WSIO instance.");
+        }
+        else
+        {
+            WS_PROTOCOL protocols;
+
+            protocols.protocol = ws_io_config->protocol;
+
+            result->on_bytes_received = NULL;
+            result->on_bytes_received_context = NULL;
+            result->on_io_open_complete = NULL;
+            result->on_io_open_complete_context = NULL;
+            result->on_io_error = NULL;
+            result->on_io_error_context = NULL;
+            result->on_io_close_complete = NULL;
+            result->on_io_close_complete_context = NULL;
+
+            /* Codes_SRS_WSIO_01_070: [ The underlying uws instance shall be created by calling uws_client_create_with_io. ]*/
+            /* Codes_SRS_WSIO_01_071: [ The arguments for uws_client_create_with_io shall be: ]*/
+            /* Codes_SRS_WSIO_01_185: [ - underlying_io_interface shall be set to the underlying_io_interface field in the io_create_parameters passed to wsio_create. ]*/
+            /* Codes_SRS_WSIO_01_186: [ - underlying_io_parameters shall be set to the underlying_io_parameters field in the io_create_parameters passed to wsio_create. ]*/
+            /* Codes_SRS_WSIO_01_072: [ - hostname set to the hostname field in the io_create_parameters passed to wsio_create. ]*/
+            /* Codes_SRS_WSIO_01_130: [ - port set to the port field in the io_create_parameters passed to wsio_create. ]*/
+            /* Codes_SRS_WSIO_01_128: [ - resource_name set to the resource_name field in the io_create_parameters passed to wsio_create. ]*/
+            /* Codes_SRS_WSIO_01_129: [ - protocols shall be filled with only one structure, that shall have the protocol set to the value of the protocol field in the io_create_parameters passed to wsio_create. ]*/
+            result->uws = uws_client_create_with_io(ws_io_config->underlying_io_interface, ws_io_config->underlying_io_parameters, ws_io_config->hostname, ws_io_config->port, ws_io_config->resource_name, &protocols, 1);
+            if (result->uws == NULL)
+            {
+                /* Codes_SRS_WSIO_01_075: [ If uws_client_create_with_io fails, then wsio_create shall fail and return NULL. ]*/
+                LogError("Cannot create uws instance.");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_076: [ wsio_create shall create a pending send IO list that is to be used to queue send packets by calling singlylinkedlist_create. ]*/
+                result->pending_io_list = singlylinkedlist_create();
+                if (result->pending_io_list == NULL)
+                {
+                    /* Codes_SRS_WSIO_01_077: [ If singlylinkedlist_create fails then wsio_create shall fail and return NULL. ]*/
+                    LogError("Cannot create singly linked list.");
+                    uws_client_destroy(result->uws);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    result->io_state = IO_STATE_NOT_OPEN;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+void wsio_destroy(CONCRETE_IO_HANDLE ws_io)
+{
+    /* Codes_SRS_WSIO_01_079: [ If ws_io is NULL, wsio_destroy shall do nothing.  ]*/
+    if (ws_io == NULL)
+    {
+        LogError("NULL handle");
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)ws_io;
+
+        if (wsio_instance->io_state != IO_STATE_NOT_OPEN)
+        {
+            internal_close(wsio_instance, NULL, NULL);
+        }
+
+        /* Codes_SRS_WSIO_01_078: [ wsio_destroy shall free all resources associated with the wsio instance. ]*/
+        /* Codes_SRS_WSIO_01_080: [ wsio_destroy shall destroy the uws instance created in wsio_create by calling uws_client_destroy. ]*/
+        uws_client_destroy(wsio_instance->uws);
+        /* Codes_SRS_WSIO_01_081: [ wsio_destroy shall free the list used to track the pending send IOs by calling singlylinkedlist_destroy. ]*/
+        singlylinkedlist_destroy(wsio_instance->pending_io_list);
+        free(ws_io);
+    }
+}
+
+static void on_underlying_ws_open_complete(void* context, WS_OPEN_RESULT open_result)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_WSIO_01_138: [ When on_underlying_ws_open_complete is called with a NULL context, it shall do nothing. ]*/
+        LogError("NULL context in on_underlying_ws_open_complete");
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)context;
+
+        switch (wsio_instance->io_state)
+        {
+        default:
+        /* Codes_SRS_WSIO_01_142: [ When on_underlying_ws_open_complete is called while in the CLOSING state an error shall be indicated by calling the on_io_error callback passed to wsio_open. ]*/
+        case IO_STATE_CLOSING:
+        /* Codes_SRS_WSIO_01_141: [ When on_underlying_ws_open_complete is called while in the ERROR state it shall indicate an error by calling the on_io_error callback passed to wsio_open. ]*/
+        case IO_STATE_ERROR:
+        /* Codes_SRS_WSIO_01_139: [ When on_underlying_ws_open_complete is called while in OPEN state it shall indicate an error by calling the on_io_error callback passed to wsio_open and switch to the ERROR state. ]*/
+        case IO_STATE_OPEN:
+            /* Codes_SRS_WSIO_01_140: [ When calling on_io_error, the on_io_error_context argument given in wsio_open shall be passed to the callback on_io_error. ]*/
+            indicate_error(wsio_instance);
+            break;
+
+        case IO_STATE_OPENING:
+            wsio_instance->io_state = IO_STATE_OPEN;
+
+            switch (open_result)
+            {
+            default:
+                /* Codes_SRS_WSIO_01_137: [ When on_underlying_ws_open_complete is called with any other error code while the IO is opening, the callback on_io_open_complete shall be called with IO_OPEN_ERROR. ]*/
+                wsio_instance->io_state = IO_STATE_NOT_OPEN;
+                indicate_open_complete(wsio_instance, IO_OPEN_ERROR);
+                break;
+
+            case WS_OPEN_CANCELLED:
+                /* Codes_SRS_WSIO_01_149: [ When on_underlying_ws_open_complete is called with WS_OPEN_CANCELLED while the IO is opening, the callback on_io_open_complete shall be called with IO_OPEN_CANCELLED. ]*/
+                wsio_instance->io_state = IO_STATE_NOT_OPEN;
+                indicate_open_complete(wsio_instance, IO_OPEN_CANCELLED);
+                break;
+
+            case WS_OPEN_OK:
+                /* Codes_SRS_WSIO_01_136: [ When on_underlying_ws_open_complete is called with WS_OPEN_OK while the IO is opening, the callback on_io_open_complete shall be called with IO_OPEN_OK. ]*/
+                wsio_instance->io_state = IO_STATE_OPEN;
+                indicate_open_complete(wsio_instance, IO_OPEN_OK);
+                break;
+            }
+
+            break;
+        }
+    }
+}
+
+static void on_underlying_ws_frame_received(void* context, unsigned char frame_type, const unsigned char* buffer, size_t size)
+{
+    if (context == NULL)
+    {
+        /* Codes_SRS_WSIO_01_150: [ If on_underlying_ws_frame_received is called with NULL context it shall do nothing. ]*/
+        LogError("NULL context for on_underlying_ws_frame_received");
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)context;
+
+        if (wsio_instance->io_state != IO_STATE_OPEN)
+        {
+            /* Codes_SRS_WSIO_01_126: [ If on_underlying_ws_frame_received is called while the IO is in any state other than OPEN, it shall do nothing. ]*/
+            LogError("on_underlying_ws_frame_received called in a bad state.");
+        }
+        else
+        {
+            if (frame_type != WS_FRAME_TYPE_BINARY)
+            {
+                /* Codes_SRS_WSIO_01_151: [ If the WebSocket frame type is not binary then an error shall be indicated by calling the on_io_error callback passed to wsio_open. ]*/
+                LogError("Invalid non binary WebSocket frame received.");
+                /* Codes_SRS_WSIO_01_152: [ When calling on_io_error, the on_io_error_context argument given in wsio_open shall be passed to the callback on_io_error. ]*/
+                indicate_error(wsio_instance);
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_153: [ When on_underlying_ws_frame_received is called with zero size, no bytes shall be indicated up as received. ]*/
+                if (size > 0)
+                {
+                    if (buffer == NULL)
+                    {
+                        /* Codes_SRS_WSIO_01_154: [ When on_underlying_ws_frame_received is called with a positive size and a NULL buffer, an error shall be indicated by calling the on_io_error callback passed to wsio_open. ]*/
+                        LogError("NULL buffer received for Websocket frame with positive payload length.");
+                        indicate_error(wsio_instance);
+                    }
+                    else
+                    {
+                        /* Codes_SRS_WSIO_01_124: [ When on_underlying_ws_frame_received is called the bytes in the frame shall be indicated by calling the on_bytes_received callback passed to wsio_open. ]*/
+                        /* Codes_SRS_WSIO_01_125: [ When calling on_bytes_received, the on_bytes_received_context argument given in wsio_open shall be passed to the callback on_bytes_received. ]*/
+                        wsio_instance->on_bytes_received(wsio_instance->on_bytes_received_context, buffer, size);
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void on_underlying_ws_peer_closed(void* context, uint16_t* close_code, const unsigned char* extra_data, size_t extra_data_length)
+{
+    /* Codes_SRS_WSIO_01_168: [ The close_code, extra_data and extra_data_length arguments shall be ignored. ]*/
+    (void)close_code;
+    (void)extra_data;
+    (void)extra_data_length;
+
+    if (context == NULL)
+    {
+        /* Codes_SRS_WSIO_01_167: [ If on_underlying_ws_peer_closed is called with a NULL context it shall do nothing. ]*/
+        LogError("NULL context for on_underlying_ws_peer_closed");
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)context;
+
+        switch (wsio_instance->io_state)
+        {
+        default:
+            /* Codes_SRS_WSIO_01_166: [ When on_underlying_ws_peer_closed and the state of the IO is OPEN an error shall be indicated by calling the on_io_error callback passed to wsio_open. ]*/
+        case IO_STATE_OPEN:
+            /* Codes_SRS_WSIO_01_169: [ When on_underlying_ws_peer_closed and the state of the IO is CLOSING an error shall be indicated by calling the on_io_error callback passed to wsio_open. ]*/
+        case IO_STATE_CLOSING:
+            indicate_error(wsio_instance);
+            break;
+
+        case IO_STATE_NOT_OPEN:
+            // Codes_SRS_WSIO_07_001: [When on_underlying_ws_peer_closed and the state of the IO is NOT_OPEN an error will be raised and the io_state will remain as NOT_OPEN]
+            indicate_error(wsio_instance);
+            wsio_instance->io_state = IO_STATE_NOT_OPEN;
+            break;
+
+        case IO_STATE_OPENING:
+            /* Codes_SRS_WSIO_01_170: [ When on_underlying_ws_peer_closed and the state of the IO is OPENING an error shall be indicated by calling the on_io_open_complete callback passed to wsio_open with the error code IO_OPEN_ERROR. ]*/
+            wsio_instance->io_state = IO_STATE_NOT_OPEN;
+            indicate_open_complete(wsio_instance, IO_OPEN_ERROR);
+            break;
+        }
+    }
+}
+
+static void on_underlying_ws_error(void* context, WS_ERROR ws_error)
+{
+    (void)ws_error;
+    /* Don't have much to do with the error here */
+    LogError("on_underlying_ws_error called with error code %d", (int)ws_error);
+
+    if (context == NULL)
+    {
+        /* Codes_SRS_WSIO_01_135: [ When on_underlying_ws_error is called with a NULL context, it shall do nothing. ]*/
+        LogError("NULL context in on_underlying_ws_error");
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)context;
+
+        if (wsio_instance->io_state == IO_STATE_OPENING)
+        {
+            /* Codes_SRS_WSIO_01_123: [ When calling on_io_error, the on_io_error_context argument given in wsio_open shall be passed to the callback on_io_error. ]*/
+            wsio_instance->on_io_open_complete(wsio_instance->on_io_open_complete_context, IO_OPEN_ERROR);
+            wsio_instance->io_state = IO_STATE_NOT_OPEN;
+        }
+        else
+        {
+            /* Codes_SRS_WSIO_01_123: [ When calling on_io_error, the on_io_error_context argument given in wsio_open shall be passed to the callback on_io_error. ]*/
+            wsio_instance->on_io_error(wsio_instance->on_io_error_context);
+        }
+    }
+}
+
+int wsio_open(CONCRETE_IO_HANDLE ws_io, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context)
+{
+    int result = 0;
+
+    if ((ws_io == NULL) ||
+        (on_io_open_complete == NULL) ||
+        (on_bytes_received == NULL) ||
+        (on_io_error == NULL))
+    {
+        /* Codes_SRS_WSIO_01_132: [ If any of the arguments ws_io, on_io_open_complete, on_bytes_received, on_io_error is NULL, wsio_open shall fail and return a non-zero value. ]*/
+        LogError("Bad arguments: ws_io=%p, on_io_open_complete=%p, on_bytes_received=%p, on_io_error=%p",
+            ws_io, on_io_open_complete, on_bytes_received, on_io_error);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)ws_io;
+
+        if (wsio_instance->io_state != IO_STATE_NOT_OPEN)
+        {
+            /* Codes_SRS_WSIO_01_165: [ wsio_open when CLOSING shall fail and return a non-zero value. ]*/
+            /* Codes_SRS_WSIO_01_131: [ wsio_open when already OPEN or OPENING shall fail and return a non-zero value. ]*/
+            LogError("wsio has already been opened current state: %d", wsio_instance->io_state);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            wsio_instance->on_bytes_received = on_bytes_received;
+            wsio_instance->on_bytes_received_context = on_bytes_received_context;
+            wsio_instance->on_io_open_complete = on_io_open_complete;
+            wsio_instance->on_io_open_complete_context = on_io_open_complete_context;
+            wsio_instance->on_io_error = on_io_error;
+            wsio_instance->on_io_error_context = on_io_error_context;
+
+            wsio_instance->io_state = IO_STATE_OPENING;
+
+            /* Codes_SRS_WSIO_01_082: [ wsio_open shall open the underlying uws instance by calling uws_client_open_async and providing the uws handle created in wsio_create as argument. ] */
+            if (uws_client_open_async(wsio_instance->uws, on_underlying_ws_open_complete, wsio_instance, on_underlying_ws_frame_received, wsio_instance, on_underlying_ws_peer_closed, wsio_instance, on_underlying_ws_error, wsio_instance) != 0)
+            {
+                /* Codes_SRS_WSIO_01_084: [ If opening the underlying uws instance fails then wsio_open shall fail and return a non-zero value. ]*/
+                LogError("Opening the uws instance failed.");
+                wsio_instance->io_state = IO_STATE_NOT_OPEN;
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_083: [ On success, wsio_open shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+int wsio_close(CONCRETE_IO_HANDLE ws_io, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* on_io_close_complete_context)
+{
+    int result = 0;
+
+    if (ws_io == NULL)
+    {
+        /* Codes_SRS_WSIO_01_086: [ if ws_io is NULL, wsio_close shall return a non-zero value.  ]*/
+        LogError("NULL handle");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)ws_io;
+
+        if (internal_close(wsio_instance, on_io_close_complete, on_io_close_complete_context) != 0)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+int wsio_send(CONCRETE_IO_HANDLE ws_io, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context)
+{
+    int result;
+
+    /* Codes_SRS_WSIO_01_100: [ If any of the arguments ws_io or buffer are NULL, wsio_send shall fail and return a non-zero value. ]*/
+    if ((ws_io == NULL) ||
+        (buffer == NULL) ||
+        /* Codes_SRS_WSIO_01_101: [ If size is zero then wsio_send shall fail and return a non-zero value. ]*/
+        (size == 0))
+    {
+        LogError("Bad arguments: ws_io=%p, buffer=%p, size=%u",
+            ws_io, buffer, (unsigned int)size);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)ws_io;
+
+        if (wsio_instance->io_state != IO_STATE_OPEN)
+        {
+            /* Codes_SRS_WSIO_01_099: [ If the wsio is not OPEN (open has not been called or is still in progress) then wsio_send shall fail and return a non-zero value. ]*/
+            LogError("Attempting to send when not open");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            LIST_ITEM_HANDLE new_item;
+            PENDING_IO* pending_socket_io = (PENDING_IO*)malloc(sizeof(PENDING_IO));
+            if (pending_socket_io == NULL)
+            {
+                /* Codes_SRS_WSIO_01_134: [ If allocating memory for the pending IO data fails, wsio_send shall fail and return a non-zero value. ]*/
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_103: [ The entry shall contain the on_send_complete callback and its context. ]*/
+                pending_socket_io->on_send_complete = on_send_complete;
+                pending_socket_io->callback_context = callback_context;
+                pending_socket_io->wsio = wsio_instance;
+
+                /* Codes_SRS_WSIO_01_102: [ An entry shall be queued in the singly linked list by calling singlylinkedlist_add. ]*/
+                if ((new_item = singlylinkedlist_add(wsio_instance->pending_io_list, pending_socket_io)) == NULL)
+                {
+                    /* Codes_SRS_WSIO_01_104: [ If singlylinkedlist_add fails, wsio_send shall fail and return a non-zero value. ]*/
+                    free(pending_socket_io);
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    /* Codes_SRS_WSIO_01_095: [ wsio_send shall call uws_client_send_frame_async, passing the buffer and size arguments as they are: ]*/
+                    /* Codes_SRS_WSIO_01_097: [ The is_final argument shall be set to true. ]*/
+                    /* Codes_SRS_WSIO_01_096: [ The frame type used shall be WS_FRAME_TYPE_BINARY. ]*/
+                    if (uws_client_send_frame_async(wsio_instance->uws, WS_FRAME_TYPE_BINARY, (const unsigned char*)buffer, size, true, on_underlying_ws_send_frame_complete, new_item) != 0)
+                    {
+                        if (singlylinkedlist_remove(wsio_instance->pending_io_list, new_item) != 0)
+                        {
+                            LogError("Failed removing pending IO from linked list.");
+                        }
+
+                        free(pending_socket_io);
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_WSIO_01_098: [ On success, wsio_send shall return 0. ]*/
+                        result = 0;
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+void wsio_dowork(CONCRETE_IO_HANDLE ws_io)
+{
+    if (ws_io == NULL)
+    {
+        /* Codes_SRS_WSIO_01_107: [ If the ws_io argument is NULL, wsio_dowork shall do nothing. ]*/
+        LogError("NULL handle");
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)ws_io;
+
+        /* Codes_SRS_WSIO_01_108: [ If the IO is not yet open, wsio_dowork shall do nothing. ]*/
+        if (wsio_instance->io_state != IO_STATE_NOT_OPEN)
+        {
+            /* Codes_SRS_WSIO_01_106: [ wsio_dowork shall call uws_client_dowork with the uws handle created in wsio_create. ]*/
+            uws_client_dowork(wsio_instance->uws);
+        }
+    }
+}
+
+int wsio_setoption(CONCRETE_IO_HANDLE ws_io, const char* optionName, const void* value)
+{
+    int result;
+    if (
+        /* Codes_SRS_WSIO_01_109: [ If any of the arguments ws_io or option_name is NULL wsio_setoption shall return a non-zero value. ]*/
+        (ws_io == NULL) ||
+        (optionName == NULL)
+        )
+    {
+        LogError("Bad parameters: ws_io=%p, optionName=%p",
+            ws_io, optionName);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio_instance = (WSIO_INSTANCE*)ws_io;
+
+        if (strcmp(WSIO_OPTIONS, optionName) == 0)
+        {
+            /* Codes_SRS_WSIO_01_183: [ If the option name is WSIOOptions then wsio_setoption shall call OptionHandler_FeedOptions and pass to it the underlying IO handle and the value argument. ]*/
+            if (OptionHandler_FeedOptions((OPTIONHANDLER_HANDLE)value, wsio_instance->uws) != OPTIONHANDLER_OK)
+            {
+                /* Codes_SRS_WSIO_01_184: [ If OptionHandler_FeedOptions fails, wsio_setoption shall fail and return a non-zero value. ]*/
+                LogError("unable to OptionHandler_FeedOptions");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_158: [ On success, wsio_setoption shall return 0. ]*/
+                result = 0;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_WSIO_01_156: [ Otherwise all options shall be passed as they are to uws by calling uws_client_set_option. ]*/
+            if (uws_client_set_option(wsio_instance->uws, optionName, value) != 0)
+            {
+                /* Codes_SRS_WSIO_01_157: [ If uws_client_set_option fails, wsio_setoption shall fail and return a non-zero value. ]*/
+                LogError("Setting the option %s failed", optionName);
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_158: [ On success, wsio_setoption shall return 0. ]*/
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+static void* wsio_clone_option(const char* name, const void* value)
+{
+    void *result;
+
+    if (
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        /* Codes_SRS_WSIO_01_174: [ If wsio_clone_option is called with NULL name or value it shall return NULL. ]*/
+        LogError("invalid argument detected: const char* name=%p, const void* value=%p", name, value);
+        result = NULL;
+    }
+    else
+    {
+        if (strcmp(name, WSIO_OPTIONS) == 0)
+        {
+            /* Codes_SRS_WSIO_01_171: [** wsio_clone_option called with name being WSIOOptions shall return the same value. ]*/
+            result = (void*)value;
+        }
+        else
+        {
+            /* Codes_SRS_WSIO_01_173: [ wsio_clone_option called with any other option name than WSIOOptions shall return NULL. ]*/
+            LogError("unknown option: %s", name);
+            result = NULL;
+        }
+    }
+
+    return result;
+}
+
+static void wsio_destroy_option(const char* name, const void* value)
+{
+    if (
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        /* Codes_SRS_WSIO_01_177: [ If wsio_destroy_option is called with NULL name or value it shall do nothing. ]*/
+        LogError("Bad arguments: const char* name=%p, const void* value=%p", name, value);
+    }
+    else
+    {
+        if (strcmp(name, WSIO_OPTIONS) == 0)
+        {
+            /* Codes_SRS_WSIO_01_175: [ wsio_destroy_option called with the option name being WSIOOptions shall destroy the value by calling OptionHandler_Destroy. ]*/
+            OptionHandler_Destroy((OPTIONHANDLER_HANDLE)value);
+        }
+        else
+        {
+            /* Codes_SRS_WSIO_01_176: [ If wsio_destroy_option is called with any other name it shall do nothing. ]*/
+            LogError("unknown option: %s", name);
+        }
+    }
+}
+
+OPTIONHANDLER_HANDLE wsio_retrieveoptions(CONCRETE_IO_HANDLE handle)
+{
+    OPTIONHANDLER_HANDLE result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_WSIO_01_118: [ If parameter handle is NULL then wsio_retrieveoptions shall fail and return NULL. ]*/
+        LogError("parameter handle is NULL");
+        result = NULL;
+    }
+    else
+    {
+        WSIO_INSTANCE* wsio = (WSIO_INSTANCE*)handle;
+
+        /* Codes_SRS_WSIO_01_119: [ wsio_retrieveoptions shall call OptionHandler_Create to produce an OPTIONHANDLER_HANDLE and on success return the new OPTIONHANDLER_HANDLE handle. ]*/
+        result = OptionHandler_Create(wsio_clone_option, wsio_destroy_option, wsio_setoption);
+        if (result == NULL)
+        {
+            /* Codes_SRS_WSIO_01_120: [ If OptionHandler_Create fails then wsio_retrieveoptions shall fail and return NULL.  ]*/
+            LogError("OptionHandler_Create failed");
+        }
+        else
+        {
+            /* Codes_SRS_WSIO_01_179: [ When calling uws_client_retrieve_options the uws client handle shall be passed to it. ]*/
+            /* Codes_SRS_WSIO_01_178: [ uws_client_retrieve_options shall add to the option handler one option, whose name shall be uWSCLientOptions and the value shall be queried by calling uws_client_retrieve_options. ]*/
+            OPTIONHANDLER_HANDLE concreteOptions = uws_client_retrieve_options(wsio->uws);
+            if (concreteOptions == NULL)
+            {
+                /* Codes_SRS_WSIO_01_180: [ If uws_client_retrieve_options fails, uws_client_retrieve_options shall fail and return NULL. ]*/
+                LogError("unable to concrete_io_retrieveoptions");
+                OptionHandler_Destroy(result);
+                result = NULL;
+            }
+            else
+            {
+                /* Codes_SRS_WSIO_01_181: [ Adding the option shall be done by calling OptionHandler_AddOption. ]*/
+                if (OptionHandler_AddOption(result, WSIO_OPTIONS, concreteOptions) != OPTIONHANDLER_OK)
+                {
+                    /* Codes_SRS_WSIO_01_182: [ If OptionHandler_AddOption fails, uws_client_retrieve_options shall fail and return NULL. ]*/
+                    LogError("unable to OptionHandler_AddOption");
+                    OptionHandler_Destroy(concreteOptions);
+                    OptionHandler_Destroy(result);
+                    result = NULL;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+static const IO_INTERFACE_DESCRIPTION ws_io_interface_description =
+{
+    wsio_retrieveoptions,
+    wsio_create,
+    wsio_destroy,
+    wsio_open,
+    wsio_close,
+    wsio_send,
+    wsio_dowork,
+    wsio_setoption
+};
+
+const IO_INTERFACE_DESCRIPTION* wsio_get_interface_description(void)
+{
+    return &ws_io_interface_description;
+}
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/xio.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/xio.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/xio.c	(revision 389)
@@ -0,0 +1,303 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+static const char* CONCRETE_OPTIONS = "concreteOptions";
+
+typedef struct XIO_INSTANCE_TAG
+{
+    const IO_INTERFACE_DESCRIPTION* io_interface_description;
+    CONCRETE_IO_HANDLE concrete_xio_handle;
+} XIO_INSTANCE;
+
+XIO_HANDLE xio_create(const IO_INTERFACE_DESCRIPTION* io_interface_description, const void* xio_create_parameters)
+{
+    XIO_INSTANCE* xio_instance;
+    /* Codes_SRS_XIO_01_003: [If the argument io_interface_description is NULL, xio_create shall return NULL.] */
+    if ((io_interface_description == NULL) ||
+        /* Codes_SRS_XIO_01_004: [If any io_interface_description member is NULL, xio_create shall return NULL.] */
+        (io_interface_description->concrete_io_retrieveoptions == NULL) ||
+        (io_interface_description->concrete_io_create == NULL) ||
+        (io_interface_description->concrete_io_destroy == NULL) ||
+        (io_interface_description->concrete_io_open == NULL) ||
+        (io_interface_description->concrete_io_close == NULL) ||
+        (io_interface_description->concrete_io_send == NULL) ||
+        (io_interface_description->concrete_io_dowork == NULL) ||
+        (io_interface_description->concrete_io_setoption == NULL))
+    {
+        xio_instance = NULL;
+    }
+    else
+    {
+        xio_instance = (XIO_INSTANCE*)malloc(sizeof(XIO_INSTANCE));
+
+        /* Codes_SRS_XIO_01_017: [If allocating the memory needed for the IO interface fails then xio_create shall return NULL.] */
+        if (xio_instance != NULL)
+        {
+            /* Codes_SRS_XIO_01_001: [xio_create shall return on success a non-NULL handle to a new IO interface.] */
+            xio_instance->io_interface_description = io_interface_description;
+
+            /* Codes_SRS_XIO_01_002: [In order to instantiate the concrete IO implementation the function concrete_io_create from the io_interface_description shall be called, passing the xio_create_parameters argument.] */
+            xio_instance->concrete_xio_handle = xio_instance->io_interface_description->concrete_io_create((void*)xio_create_parameters);
+
+            /* Codes_SRS_XIO_01_016: [If the underlying concrete_io_create call fails, xio_create shall return NULL.] */
+            if (xio_instance->concrete_xio_handle == NULL)
+            {
+                free(xio_instance);
+                xio_instance = NULL;
+            }
+        }
+    }
+    return (XIO_HANDLE)xio_instance;
+}
+
+void xio_destroy(XIO_HANDLE xio)
+{
+    /* Codes_SRS_XIO_01_007: [If the argument io is NULL, xio_destroy shall do nothing.] */
+    if (xio != NULL)
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+
+        /* Codes_SRS_XIO_01_006: [xio_destroy shall also call the concrete_io_destroy function that is member of the io_interface_description argument passed to xio_create, while passing as argument to concrete_io_destroy the result of the underlying concrete_io_create handle that was called as part of the xio_create call.] */
+        xio_instance->io_interface_description->concrete_io_destroy(xio_instance->concrete_xio_handle);
+
+        /* Codes_SRS_XIO_01_005: [xio_destroy shall free all resources associated with the IO handle.] */
+        free(xio_instance);
+    }
+}
+
+int xio_open(XIO_HANDLE xio, ON_IO_OPEN_COMPLETE on_io_open_complete, void* on_io_open_complete_context, ON_BYTES_RECEIVED on_bytes_received, void* on_bytes_received_context, ON_IO_ERROR on_io_error, void* on_io_error_context)
+{
+    int result;
+
+    if (xio == NULL)
+    {
+        /* Codes_SRS_XIO_01_021: [If handle is NULL, xio_open shall return a non-zero value.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+
+        /* Codes_SRS_XIO_01_019: [xio_open shall call the specific concrete_xio_open function specified in xio_create, passing callback function and context arguments for three events: open completed, bytes received, and IO error.] */
+        if (xio_instance->io_interface_description->concrete_io_open(xio_instance->concrete_xio_handle, on_io_open_complete, on_io_open_complete_context, on_bytes_received, on_bytes_received_context, on_io_error, on_io_error_context) != 0)
+        {
+            /* Codes_SRS_XIO_01_022: [If the underlying concrete_io_open fails, xio_open shall return a non-zero value.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /* Codes_SRS_XIO_01_020: [On success, xio_open shall return 0.] */
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+int xio_close(XIO_HANDLE xio, ON_IO_CLOSE_COMPLETE on_io_close_complete, void* callback_context)
+{
+    int result;
+
+    if (xio == NULL)
+    {
+        /* Codes_SRS_XIO_01_025: [If handle is NULL, xio_close shall return a non-zero value.] */
+        result = MU_FAILURE;
+    }
+    else
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+
+        /* Codes_SRS_XIO_01_023: [xio_close shall call the specific concrete_io_close function specified in xio_create.] */
+        if (xio_instance->io_interface_description->concrete_io_close(xio_instance->concrete_xio_handle, on_io_close_complete, callback_context) != 0)
+        {
+            /* Codes_SRS_XIO_01_026: [If the underlying concrete_io_close fails, xio_close shall return a non-zero value.] */
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /* Codes_SRS_XIO_01_024: [On success, xio_close shall return 0.] */
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+int xio_send(XIO_HANDLE xio, const void* buffer, size_t size, ON_SEND_COMPLETE on_send_complete, void* callback_context)
+{
+    int result;
+
+    /* Codes_SRS_XIO_01_011: [No error check shall be performed on buffer and size.] */
+    /* Codes_SRS_XIO_01_010: [If handle is NULL, xio_send shall return a non-zero value.] */
+    if (xio == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+
+        /* Codes_SRS_XIO_01_008: [xio_send shall pass the sequence of bytes pointed to by buffer to the concrete IO implementation specified in xio_create, by calling the concrete_io_send function while passing down the buffer and size arguments to it.] */
+        /* Codes_SRS_XIO_01_009: [On success, xio_send shall return 0.] */
+        /* Codes_SRS_XIO_01_015: [If the underlying concrete_io_send fails, xio_send shall return a non-zero value.] */
+        /* Codes_SRS_XIO_01_027: [xio_send shall pass to the concrete_io_send function the on_send_complete and callback_context arguments.] */
+        result = xio_instance->io_interface_description->concrete_io_send(xio_instance->concrete_xio_handle, buffer, size, on_send_complete, callback_context);
+    }
+
+    return result;
+}
+
+void xio_dowork(XIO_HANDLE xio)
+{
+    /* Codes_SRS_XIO_01_018: [When the handle argument is NULL, xio_dowork shall do nothing.] */
+    if (xio != NULL)
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+
+        /* Codes_SRS_XIO_01_012: [xio_dowork shall call the concrete XIO implementation specified in xio_create, by calling the concrete_io_dowork function.] */
+        xio_instance->io_interface_description->concrete_io_dowork(xio_instance->concrete_xio_handle);
+    }
+}
+
+int xio_setoption(XIO_HANDLE xio, const char* optionName, const void* value)
+{
+    int result;
+
+    /* Codes_SRS_XIO_03_030: [If the xio argument or the optionName argument is NULL, xio_setoption shall return a non-zero value.] */
+    if (xio == NULL || optionName == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+
+        if (strcmp(CONCRETE_OPTIONS, optionName) == 0)
+        {
+            /*then value is a pointer to OPTIONHANDLER_HANDLE*/
+            if (OptionHandler_FeedOptions((OPTIONHANDLER_HANDLE)value, xio_instance->concrete_xio_handle) != OPTIONHANDLER_OK)
+            {
+                LogError("unable to OptionHandler_FeedOptions");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+        else /*passthrough*/ 
+        {
+            /* Codes_SRS_XIO_003_028: [xio_setoption shall pass the optionName and value to the concrete IO implementation specified in xio_create by invoking the concrete_xio_setoption function.] */
+            /* Codes_SRS_XIO_03_029: [xio_setoption shall return 0 upon success.] */
+            /* Codes_SRS_XIO_03_031: [If the underlying concrete_xio_setoption fails, xio_setOption shall return a non-zero value.] */
+            result = xio_instance->io_interface_description->concrete_io_setoption(xio_instance->concrete_xio_handle, optionName, value);
+        }
+    }
+
+    return result;
+}
+
+static void* xio_CloneOption(const char* name, const void* value)
+{
+    void *result;
+    if (
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        LogError("invalid argument detected: const char* name=%p, const void* value=%p", name, value);
+        result = NULL;
+    }
+    else
+    {
+        if (strcmp(name, CONCRETE_OPTIONS) == 0)
+        {
+            result = (void*)value;
+        }
+        else
+        {
+            LogError("unknown option: %s", name);
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+
+static void xio_DestroyOption(const char* name, const void* value)
+{
+    if (
+        (name == NULL) ||
+        (value == NULL)
+        )
+    {
+        LogError("invalid argument detected: const char* name=%p, const void* value=%p", name, value);
+    }
+    else
+    {
+        if (strcmp(name, CONCRETE_OPTIONS) == 0)
+        {
+            OptionHandler_Destroy((OPTIONHANDLER_HANDLE)value);
+        }
+        else
+        {
+            LogError("unknown option: %s", name);
+        }
+    }
+}
+
+OPTIONHANDLER_HANDLE xio_retrieveoptions(XIO_HANDLE xio)
+{
+    OPTIONHANDLER_HANDLE result;
+
+    if (xio == NULL)
+    {
+        LogError("invalid argument detected: XIO_HANDLE xio=%p", xio);
+        result = NULL;
+    }
+    else
+    {
+        XIO_INSTANCE* xio_instance = (XIO_INSTANCE*)xio;
+        /*xio_retrieveoptions shall return a OPTIONHANDLER_HANDLE that has 1 option called "underlyingOptions" which is of type OPTIONHANDLER_HANDLE*/
+        result = OptionHandler_Create(xio_CloneOption, xio_DestroyOption, (pfSetOption)xio_setoption);
+        if (result == NULL)
+        {
+            LogError("unable to OptionHandler_Create");
+            /*return as is*/
+        }
+        else
+        {
+            OPTIONHANDLER_HANDLE concreteOptions = xio_instance->io_interface_description->concrete_io_retrieveoptions(xio_instance->concrete_xio_handle);
+            if (concreteOptions == NULL)
+            {
+                LogError("unable to concrete_io_retrieveoptions");
+                OptionHandler_Destroy(result);
+                result = NULL;
+            }
+            else
+            {
+                if (OptionHandler_AddOption(result, CONCRETE_OPTIONS, concreteOptions) != OPTIONHANDLER_OK)
+                {
+                    LogError("unable to OptionHandler_AddOption");
+                    OptionHandler_Destroy(concreteOptions);
+                    OptionHandler_Destroy(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /*all is fine*/
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
Index: azure_iot_hub/trunk/azure_iothub/c-utility/src/xlogging.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/c-utility/src/xlogging.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/c-utility/src/xlogging.c	(revision 389)
@@ -0,0 +1,145 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/consolelogger.h"
+
+#ifndef NO_LOGGING
+
+#ifdef WIN32
+#include "windows.h"
+#endif // WIN32
+
+
+LOGGER_LOG global_log_function = consolelogger_log;
+
+void xlogging_set_log_function(LOGGER_LOG log_function)
+{
+    global_log_function = log_function;
+}
+
+LOGGER_LOG xlogging_get_log_function(void)
+{
+    return global_log_function;
+}
+
+#if (defined(_MSC_VER))
+
+LOGGER_LOG_GETLASTERROR global_log_function_GetLastError = consolelogger_log_with_GetLastError;
+
+void xlogging_set_log_function_GetLastError(LOGGER_LOG_GETLASTERROR log_function_GetLastError)
+{
+    global_log_function_GetLastError = log_function_GetLastError;
+}
+
+LOGGER_LOG_GETLASTERROR xlogging_get_log_function_GetLastError(void)
+{
+    return global_log_function_GetLastError;
+}
+#endif
+
+/* Print up to 16 bytes per line. */
+#define LINE_SIZE 16
+
+/* Return the printable char for the provided value. */
+#define PRINTABLE(c)         ((c >= ' ') && (c <= '~')) ? (char)c : '.'
+
+/* Convert the lower nibble of the provided byte to a hexadecimal printable char. */
+#define HEX_STR(c)           (((c) & 0xF) < 0xA) ? (char)(((c) & 0xF) + '0') : (char)(((c) & 0xF) - 0xA + 'A')
+
+void LogBinary(const char* comment, const void* data, size_t size)
+{
+    char charBuf[LINE_SIZE + 1];
+    char hexBuf[LINE_SIZE * 3 + 1];
+    size_t countbuf = 0;
+    size_t i = 0;
+    const unsigned char* bufAsChar = (const unsigned char*)data;
+    const unsigned char* startPos = bufAsChar;
+
+    LOG(AZ_LOG_TRACE, LOG_LINE, "%s     %lu bytes", comment, (unsigned long)size);
+
+    /* Print the whole buffer. */
+    for (i = 0; i < size; i++)
+    {
+        /* Store the printable value of the char in the charBuf to print. */
+        charBuf[countbuf] = PRINTABLE(*bufAsChar);
+
+        /* Convert the high nibble to a printable hexadecimal value. */
+        hexBuf[countbuf * 3] = HEX_STR(*bufAsChar >> 4);
+
+        /* Convert the low nibble to a printable hexadecimal value. */
+        hexBuf[countbuf * 3 + 1] = HEX_STR(*bufAsChar);
+
+        hexBuf[countbuf * 3 + 2] = ' ';
+
+        countbuf++;
+        bufAsChar++;
+        /* If the line is full, print it to start another one. */
+        if (countbuf == LINE_SIZE)
+        {
+            charBuf[countbuf] = '\0';
+            hexBuf[countbuf * 3] = '\0';
+            LOG(AZ_LOG_TRACE, LOG_LINE, "%p: %s    %s", startPos, hexBuf, charBuf);
+            countbuf = 0;
+            startPos = bufAsChar;
+        }
+    }
+
+    /* If the last line does not fit the line size. */
+    if (countbuf > 0)
+    {
+        /* Close the charBuf string. */
+        charBuf[countbuf] = '\0';
+
+        /* Fill the hexBuf with spaces to keep the charBuf alignment. */
+        while ((countbuf++) < LINE_SIZE - 1)
+        {
+            hexBuf[countbuf * 3] = ' ';
+            hexBuf[countbuf * 3 + 1] = ' ';
+            hexBuf[countbuf * 3 + 2] = ' ';
+        }
+        hexBuf[countbuf * 3] = '\0';
+
+        /* Print the last line. */
+        LOG(AZ_LOG_TRACE, LOG_LINE, "%p: %s    %s", startPos, hexBuf, charBuf);
+    }
+}
+
+#ifdef WIN32
+
+void xlogging_LogErrorWinHTTPWithGetLastErrorAsStringFormatter(int errorMessageID)
+{
+    char messageBuffer[MESSAGE_BUFFER_SIZE];
+    if (errorMessageID == 0)
+    {
+        LogError("GetLastError() returned 0. Make sure you are calling this right after the code that failed. ");
+    }
+    else
+    {
+        int size = FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
+            GetModuleHandle("WinHttp"), errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), messageBuffer, MESSAGE_BUFFER_SIZE, NULL);
+        if (size == 0)
+        {
+            size = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), messageBuffer, MESSAGE_BUFFER_SIZE, NULL);
+            if (size == 0)
+            {
+                LogError("GetLastError Code: %d. ", errorMessageID);
+            }
+            else
+            {
+                LogError("GetLastError: %s.", messageBuffer);
+            }
+        }
+        else
+        {
+            LogError("GetLastError: %s.", messageBuffer);
+        }
+    }
+}
+#endif // WIN32
+
+
+#endif // NO_LOGGING
+
+
+
Index: azure_iot_hub/trunk/azure_iothub/certs/certs.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/certs/certs.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/certs/certs.c	(revision 389)
@@ -0,0 +1,80 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/* This file contains certs needed to communicate with Azure (IoT) */
+
+#include "certs.h"
+
+const char certificates[] =
+/* DigiCert Baltimore Root */
+"-----BEGIN CERTIFICATE-----\r\n"
+"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\r\n"
+"RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\r\n"
+"VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\r\n"
+"DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\r\n"
+"ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\r\n"
+"VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\r\n"
+"mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\r\n"
+"IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\r\n"
+"mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\r\n"
+"XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\r\n"
+"dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\r\n"
+"jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\r\n"
+"BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\r\n"
+"DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\r\n"
+"9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\r\n"
+"jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\r\n"
+"Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\r\n"
+"ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\r\n"
+"R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\r\n"
+"-----END CERTIFICATE-----\r\n"
+/*DigiCert Global Root CA*/
+"-----BEGIN CERTIFICATE-----\r\n"
+"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n"
+"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n"
+"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n"
+"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n"
+"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n"
+"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n"
+"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n"
+"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n"
+"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n"
+"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n"
+"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n"
+"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n"
+"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n"
+"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n"
+"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n"
+"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n"
+"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n"
+"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n"
+"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n"
+"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n"
+"-----END CERTIFICATE-----\r\n"
+/*D-TRUST Root Class 3 CA 2 2009*/
+"-----BEGIN CERTIFICATE-----\r\n"
+"MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF\r\n"
+"MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD\r\n"
+"bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha\r\n"
+"ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM\r\n"
+"HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB\r\n"
+"BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03\r\n"
+"UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42\r\n"
+"tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R\r\n"
+"ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM\r\n"
+"lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp\r\n"
+"/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G\r\n"
+"A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G\r\n"
+"A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj\r\n"
+"dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy\r\n"
+"MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl\r\n"
+"cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js\r\n"
+"L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL\r\n"
+"BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni\r\n"
+"acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0\r\n"
+"o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K\r\n"
+"zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8\r\n"
+"PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y\r\n"
+"Johw1+qRzT65ysCQblrGXnRl11z+o+I=\r\n"
+"-----END CERTIFICATE-----\r\n"
+;
Index: azure_iot_hub/trunk/azure_iothub/certs/certs.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/certs/certs.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/certs/certs.h	(revision 389)
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef CERTS_H
+#define CERTS_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    extern const char certificates[];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CERTS_H */
Index: azure_iot_hub/trunk/azure_iothub/deps/parson/parson.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/deps/parson/parson.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/deps/parson/parson.c	(revision 389)
@@ -0,0 +1,2048 @@
+/*
+ Parson ( http://kgabis.github.com/parson/ )
+ Copyright (c) 2012 - 2017 Krzysztof Gabis
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+#ifdef _MSC_VER
+#ifndef _CRT_SECURE_NO_WARNINGS
+#define _CRT_SECURE_NO_WARNINGS
+#endif /* _CRT_SECURE_NO_WARNINGS */
+#endif /* _MSC_VER */
+
+#include "parson.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <errno.h>
+
+/* Apparently sscanf is not implemented in some "standard" libraries, so don't use it, if you
+ * don't have to. */
+#define sscanf THINK_TWICE_ABOUT_USING_SSCANF
+
+#define STARTING_CAPACITY 16
+#define MAX_NESTING       2048
+
+#define FLOAT_FORMAT "%1.17g" /* do not increase precision without incresing NUM_BUF_SIZE */
+#define NUM_BUF_SIZE 64 /* double printed with "%1.17g" shouldn't be longer than 25 bytes so let's be paranoid and use 64 */
+
+#define SIZEOF_TOKEN(a)       (sizeof(a) - 1)
+#define SKIP_CHAR(str)        ((*str)++)
+#define SKIP_WHITESPACES(str) while (isspace((unsigned char)(**str))) { SKIP_CHAR(str); }
+#define MAX(a, b)             ((a) > (b) ? (a) : (b))
+
+#ifndef __c2__
+#undef malloc
+#undef free
+#endif // !_MSC_VER
+
+#if defined(isnan) && defined(isinf)
+#define IS_NUMBER_INVALID(x) (isnan((x)) || isinf((x)))
+#else
+#define IS_NUMBER_INVALID(x) (((x) * 0.0) != 0.0)
+#endif
+
+static JSON_Malloc_Function parson_malloc = malloc;
+static JSON_Free_Function parson_free = free;
+
+#define IS_CONT(b) (((unsigned char)(b) & 0xC0) == 0x80) /* is utf-8 continuation byte */
+
+/* Type definitions */
+typedef union json_value_value {
+    char        *string;
+    double       number;
+    JSON_Object *object;
+    JSON_Array  *array;
+    int          boolean;
+    int          null;
+} JSON_Value_Value;
+
+struct json_value_t {
+    JSON_Value      *parent;
+    JSON_Value_Type  type;
+    JSON_Value_Value value;
+};
+
+struct json_object_t {
+    JSON_Value  *wrapping_value;
+    char       **names;
+    JSON_Value **values;
+    size_t       count;
+    size_t       capacity;
+};
+
+struct json_array_t {
+    JSON_Value  *wrapping_value;
+    JSON_Value **items;
+    size_t       count;
+    size_t       capacity;
+};
+
+/* Various */
+static char * read_file(const char *filename);
+static void   remove_comments(char *string, const char *start_token, const char *end_token);
+static char * parson_strndup(const char *string, size_t n);
+static char * parson_strdup(const char *string);
+static int    hex_char_to_int(char c);
+static int    parse_utf16_hex(const char *string, unsigned int *result);
+static int    num_bytes_in_utf8_sequence(unsigned char c);
+static int    verify_utf8_sequence(const unsigned char *string, int *len);
+static int    is_valid_utf8(const char *string, size_t string_len);
+static int    is_decimal(const char *string, size_t length);
+
+/* JSON Object */
+static JSON_Object * json_object_init(JSON_Value *wrapping_value);
+static JSON_Status   json_object_add(JSON_Object *object, const char *name, JSON_Value *value);
+static JSON_Status   json_object_addn(JSON_Object *object, const char *name, size_t name_len, JSON_Value *value);
+static JSON_Status   json_object_resize(JSON_Object *object, size_t new_capacity);
+static JSON_Value  * json_object_getn_value(const JSON_Object *object, const char *name, size_t name_len);
+static JSON_Status   json_object_remove_internal(JSON_Object *object, const char *name, int free_value);
+static JSON_Status   json_object_dotremove_internal(JSON_Object *object, const char *name, int free_value);
+static void          json_object_free(JSON_Object *object);
+
+/* JSON Array */
+static JSON_Array * json_array_init(JSON_Value *wrapping_value);
+static JSON_Status  json_array_add(JSON_Array *array, JSON_Value *value);
+static JSON_Status  json_array_resize(JSON_Array *array, size_t new_capacity);
+static void         json_array_free(JSON_Array *array);
+
+/* JSON Value */
+static JSON_Value * json_value_init_string_no_copy(char *string);
+
+/* Parser */
+static JSON_Status  skip_quotes(const char **string);
+static int          parse_utf16(const char **unprocessed, char **processed);
+static char *       process_string(const char *input, size_t len);
+static char *       get_quoted_string(const char **string);
+static JSON_Value * parse_object_value(const char **string, size_t nesting);
+static JSON_Value * parse_array_value(const char **string, size_t nesting);
+static JSON_Value * parse_string_value(const char **string);
+static JSON_Value * parse_boolean_value(const char **string);
+static JSON_Value * parse_number_value(const char **string);
+static JSON_Value * parse_null_value(const char **string);
+static JSON_Value * parse_value(const char **string, size_t nesting);
+
+/* Serialization */
+static int    json_serialize_to_buffer_r(const JSON_Value *value, char *buf, int level, int is_pretty, char *num_buf);
+static int    json_serialize_string(const char *string, char *buf);
+static int    append_indent(char *buf, int level);
+static int    append_string(char *buf, const char *string);
+
+/* Various */
+static char * parson_strndup(const char *string, size_t n) {
+    char *output_string = (char*)parson_malloc(n + 1);
+    if (!output_string) {
+        return NULL;
+    }
+    output_string[n] = '\0';
+    strncpy(output_string, string, n);
+    return output_string;
+}
+
+static char * parson_strdup(const char *string) {
+    return parson_strndup(string, strlen(string));
+}
+
+static int hex_char_to_int(char c) {
+    if (c >= '0' && c <= '9') {
+        return c - '0';
+    } else if (c >= 'a' && c <= 'f') {
+        return c - 'a' + 10;
+    } else if (c >= 'A' && c <= 'F') {
+        return c - 'A' + 10;
+    }
+    return -1;
+}
+
+static int parse_utf16_hex(const char *s, unsigned int *result) {
+    int x1, x2, x3, x4;
+    if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0' || s[3] == '\0') {
+        return 0;
+    }
+    x1 = hex_char_to_int(s[0]);
+    x2 = hex_char_to_int(s[1]);
+    x3 = hex_char_to_int(s[2]);
+    x4 = hex_char_to_int(s[3]);
+    if (x1 == -1 || x2 == -1 || x3 == -1 || x4 == -1) {
+        return 0;
+    }
+    *result = (unsigned int)((x1 << 12) | (x2 << 8) | (x3 << 4) | x4);
+    return 1;
+}
+
+static int num_bytes_in_utf8_sequence(unsigned char c) {
+    if (c == 0xC0 || c == 0xC1 || c > 0xF4 || IS_CONT(c)) {
+        return 0;
+    } else if ((c & 0x80) == 0) {    /* 0xxxxxxx */
+        return 1;
+    } else if ((c & 0xE0) == 0xC0) { /* 110xxxxx */
+        return 2;
+    } else if ((c & 0xF0) == 0xE0) { /* 1110xxxx */
+        return 3;
+    } else if ((c & 0xF8) == 0xF0) { /* 11110xxx */
+        return 4;
+    }
+    return 0; /* won't happen */
+}
+
+static int verify_utf8_sequence(const unsigned char *string, int *len) {
+    unsigned int cp = 0;
+    *len = num_bytes_in_utf8_sequence(string[0]);
+
+    if (*len == 1) {
+        cp = string[0];
+    } else if (*len == 2 && IS_CONT(string[1])) {
+        cp = string[0] & 0x1F;
+        cp = (cp << 6) | (string[1] & 0x3F);
+    } else if (*len == 3 && IS_CONT(string[1]) && IS_CONT(string[2])) {
+        cp = ((unsigned char)string[0]) & 0xF;
+        cp = (cp << 6) | (string[1] & 0x3F);
+        cp = (cp << 6) | (string[2] & 0x3F);
+    } else if (*len == 4 && IS_CONT(string[1]) && IS_CONT(string[2]) && IS_CONT(string[3])) {
+        cp = string[0] & 0x7;
+        cp = (cp << 6) | (string[1] & 0x3F);
+        cp = (cp << 6) | (string[2] & 0x3F);
+        cp = (cp << 6) | (string[3] & 0x3F);
+    } else {
+        return 0;
+    }
+
+    /* overlong encodings */
+    if ((cp < 0x80    && *len > 1) ||
+        (cp < 0x800   && *len > 2) ||
+        (cp < 0x10000 && *len > 3)) {
+        return 0;
+    }
+
+    /* invalid unicode */
+    if (cp > 0x10FFFF) {
+        return 0;
+    }
+
+    /* surrogate halves */
+    if (cp >= 0xD800 && cp <= 0xDFFF) {
+        return 0;
+    }
+
+    return 1;
+}
+
+static int is_valid_utf8(const char *string, size_t string_len) {
+    int len = 0;
+    const char *string_end =  string + string_len;
+    while (string < string_end) {
+        if (!verify_utf8_sequence((const unsigned char*)string, &len)) {
+            return 0;
+        }
+        string += len;
+    }
+    return 1;
+}
+
+static int is_decimal(const char *string, size_t length) {
+    if (length > 1 && string[0] == '0' && string[1] != '.') {
+        return 0;
+    }
+    if (length > 2 && !strncmp(string, "-0", 2) && string[2] != '.') {
+        return 0;
+    }
+    while (length--) {
+        if (strchr("xX", string[length])) {
+            return 0;
+        }
+    }
+    return 1;
+}
+
+static char * read_file(const char * filename) {
+    FILE *fp = fopen(filename, "r");
+    size_t size_to_read = 0;
+    size_t size_read = 0;
+    long pos;
+    char *file_contents;
+    if (!fp) {
+        return NULL;
+    }
+    fseek(fp, 0L, SEEK_END);
+    pos = ftell(fp);
+    if (pos < 0) {
+        fclose(fp);
+        return NULL;
+    }
+    size_to_read = pos;
+    rewind(fp);
+    file_contents = (char*)parson_malloc(sizeof(char) * (size_to_read + 1));
+    if (!file_contents) {
+        fclose(fp);
+        return NULL;
+    }
+    size_read = fread(file_contents, 1, size_to_read, fp);
+    if (size_read == 0 || ferror(fp)) {
+        fclose(fp);
+        parson_free(file_contents);
+        return NULL;
+    }
+    fclose(fp);
+    file_contents[size_read] = '\0';
+    return file_contents;
+}
+
+static void remove_comments(char *string, const char *start_token, const char *end_token) {
+    int in_string = 0, escaped = 0;
+    size_t i;
+    char *ptr = NULL, current_char;
+    size_t start_token_len = strlen(start_token);
+    size_t end_token_len = strlen(end_token);
+    if (start_token_len == 0 || end_token_len == 0) {
+        return;
+    }
+    while ((current_char = *string) != '\0') {
+        if (current_char == '\\' && !escaped) {
+            escaped = 1;
+            string++;
+            continue;
+        } else if (current_char == '\"' && !escaped) {
+            in_string = !in_string;
+        } else if (!in_string && strncmp(string, start_token, start_token_len) == 0) {
+            for(i = 0; i < start_token_len; i++) {
+                string[i] = ' ';
+            }
+            string = string + start_token_len;
+            ptr = strstr(string, end_token);
+            if (!ptr) {
+                return;
+            }
+            for (i = 0; i < (ptr - string) + end_token_len; i++) {
+                string[i] = ' ';
+            }
+            string = ptr + end_token_len - 1;
+        }
+        escaped = 0;
+        string++;
+    }
+}
+
+/* JSON Object */
+static JSON_Object * json_object_init(JSON_Value *wrapping_value) {
+    JSON_Object *new_obj = (JSON_Object*)parson_malloc(sizeof(JSON_Object));
+    if (new_obj == NULL) {
+        return NULL;
+    }
+    new_obj->wrapping_value = wrapping_value;
+    new_obj->names = (char**)NULL;
+    new_obj->values = (JSON_Value**)NULL;
+    new_obj->capacity = 0;
+    new_obj->count = 0;
+    return new_obj;
+}
+
+static JSON_Status json_object_add(JSON_Object *object, const char *name, JSON_Value *value) {
+    if (name == NULL) {
+        return JSONFailure;
+    }
+    return json_object_addn(object, name, strlen(name), value);
+}
+
+static JSON_Status json_object_addn(JSON_Object *object, const char *name, size_t name_len, JSON_Value *value) {
+    size_t index = 0;
+    if (object == NULL || name == NULL || value == NULL) {
+        return JSONFailure;
+    }
+    if (json_object_getn_value(object, name, name_len) != NULL) {
+        return JSONFailure;
+    }
+    if (object->count >= object->capacity) {
+        size_t new_capacity = MAX(object->capacity * 2, STARTING_CAPACITY);
+        if (json_object_resize(object, new_capacity) == JSONFailure) {
+            return JSONFailure;
+        }
+    }
+    index = object->count;
+    object->names[index] = parson_strndup(name, name_len);
+    if (object->names[index] == NULL) {
+        return JSONFailure;
+    }
+    value->parent = json_object_get_wrapping_value(object);
+    object->values[index] = value;
+    object->count++;
+    return JSONSuccess;
+}
+
+static JSON_Status json_object_resize(JSON_Object *object, size_t new_capacity) {
+    char **temp_names = NULL;
+    JSON_Value **temp_values = NULL;
+
+    if ((object->names == NULL && object->values != NULL) ||
+        (object->names != NULL && object->values == NULL) ||
+        new_capacity == 0) {
+            return JSONFailure; /* Shouldn't happen */
+    }
+    temp_names = (char**)parson_malloc(new_capacity * sizeof(char*));
+    if (temp_names == NULL) {
+        return JSONFailure;
+    }
+    temp_values = (JSON_Value**)parson_malloc(new_capacity * sizeof(JSON_Value*));
+    if (temp_values == NULL) {
+        parson_free(temp_names);
+        return JSONFailure;
+    }
+    if (object->names != NULL && object->values != NULL && object->count > 0) {
+        memcpy(temp_names, object->names, object->count * sizeof(char*));
+        memcpy(temp_values, object->values, object->count * sizeof(JSON_Value*));
+    }
+    parson_free(object->names);
+    parson_free(object->values);
+    object->names = temp_names;
+    object->values = temp_values;
+    object->capacity = new_capacity;
+    return JSONSuccess;
+}
+
+static JSON_Value * json_object_getn_value(const JSON_Object *object, const char *name, size_t name_len) {
+    size_t i, name_length;
+    for (i = 0; i < json_object_get_count(object); i++) {
+        name_length = strlen(object->names[i]);
+        if (name_length != name_len) {
+            continue;
+        }
+        if (strncmp(object->names[i], name, name_len) == 0) {
+            return object->values[i];
+        }
+    }
+    return NULL;
+}
+
+static JSON_Status json_object_remove_internal(JSON_Object *object, const char *name, int free_value) {
+    size_t i = 0, last_item_index = 0;
+    if (object == NULL || json_object_get_value(object, name) == NULL) {
+        return JSONFailure;
+    }
+    last_item_index = json_object_get_count(object) - 1;
+    for (i = 0; i < json_object_get_count(object); i++) {
+        if (strcmp(object->names[i], name) == 0) {
+            parson_free(object->names[i]);
+            if (free_value) {
+                json_value_free(object->values[i]);
+            }
+            if (i != last_item_index) { /* Replace key value pair with one from the end */
+                object->names[i] = object->names[last_item_index];
+                object->values[i] = object->values[last_item_index];
+            }
+            object->count -= 1;
+            return JSONSuccess;
+        }
+    }
+    return JSONFailure; /* No execution path should end here */
+}
+
+static JSON_Status json_object_dotremove_internal(JSON_Object *object, const char *name, int free_value) {
+    JSON_Value *temp_value = NULL;
+    JSON_Object *temp_object = NULL;
+    const char *dot_pos = strchr(name, '.');
+    if (dot_pos == NULL) {
+        return json_object_remove_internal(object, name, free_value);
+    }
+    temp_value = json_object_getn_value(object, name, dot_pos - name);
+    if (json_value_get_type(temp_value) != JSONObject) {
+        return JSONFailure;
+    }
+    temp_object = json_value_get_object(temp_value);
+    return json_object_dotremove_internal(temp_object, dot_pos + 1, free_value);
+}
+
+static void json_object_free(JSON_Object *object) {
+    size_t i;
+    for (i = 0; i < object->count; i++) {
+        parson_free(object->names[i]);
+        json_value_free(object->values[i]);
+    }
+    parson_free(object->names);
+    parson_free(object->values);
+    parson_free(object);
+}
+
+/* JSON Array */
+static JSON_Array * json_array_init(JSON_Value *wrapping_value) {
+    JSON_Array *new_array = (JSON_Array*)parson_malloc(sizeof(JSON_Array));
+    if (new_array == NULL) {
+        return NULL;
+    }
+    new_array->wrapping_value = wrapping_value;
+    new_array->items = (JSON_Value**)NULL;
+    new_array->capacity = 0;
+    new_array->count = 0;
+    return new_array;
+}
+
+static JSON_Status json_array_add(JSON_Array *array, JSON_Value *value) {
+    if (array->count >= array->capacity) {
+        size_t new_capacity = MAX(array->capacity * 2, STARTING_CAPACITY);
+        if (json_array_resize(array, new_capacity) == JSONFailure) {
+            return JSONFailure;
+        }
+    }
+    value->parent = json_array_get_wrapping_value(array);
+    array->items[array->count] = value;
+    array->count++;
+    return JSONSuccess;
+}
+
+static JSON_Status json_array_resize(JSON_Array *array, size_t new_capacity) {
+    JSON_Value **new_items = NULL;
+    if (new_capacity == 0) {
+        return JSONFailure;
+    }
+    new_items = (JSON_Value**)parson_malloc(new_capacity * sizeof(JSON_Value*));
+    if (new_items == NULL) {
+        return JSONFailure;
+    }
+    if (array->items != NULL && array->count > 0) {
+        memcpy(new_items, array->items, array->count * sizeof(JSON_Value*));
+    }
+    parson_free(array->items);
+    array->items = new_items;
+    array->capacity = new_capacity;
+    return JSONSuccess;
+}
+
+static void json_array_free(JSON_Array *array) {
+    size_t i;
+    for (i = 0; i < array->count; i++) {
+        json_value_free(array->items[i]);
+    }
+    parson_free(array->items);
+    parson_free(array);
+}
+
+/* JSON Value */
+static JSON_Value * json_value_init_string_no_copy(char *string) {
+    JSON_Value *new_value = (JSON_Value*)parson_malloc(sizeof(JSON_Value));
+    if (!new_value) {
+        return NULL;
+    }
+    new_value->parent = NULL;
+    new_value->type = JSONString;
+    new_value->value.string = string;
+    return new_value;
+}
+
+/* Parser */
+static JSON_Status skip_quotes(const char **string) {
+    if (**string != '\"') {
+        return JSONFailure;
+    }
+    SKIP_CHAR(string);
+    while (**string != '\"') {
+        if (**string == '\0') {
+            return JSONFailure;
+        } else if (**string == '\\') {
+            SKIP_CHAR(string);
+            if (**string == '\0') {
+                return JSONFailure;
+            }
+        }
+        SKIP_CHAR(string);
+    }
+    SKIP_CHAR(string);
+    return JSONSuccess;
+}
+
+static int parse_utf16(const char **unprocessed, char **processed) {
+    unsigned int cp, lead, trail;
+    int parse_succeeded = 0;
+    char *processed_ptr = *processed;
+    const char *unprocessed_ptr = *unprocessed;
+    unprocessed_ptr++; /* skips u */
+    parse_succeeded = parse_utf16_hex(unprocessed_ptr, &cp);
+    if (!parse_succeeded) {
+        return JSONFailure;
+    }
+    if (cp < 0x80) {
+        processed_ptr[0] = (char)cp; /* 0xxxxxxx */
+    } else if (cp < 0x800) {
+        processed_ptr[0] = ((cp >> 6) & 0x1F) | 0xC0; /* 110xxxxx */
+        processed_ptr[1] = ((cp)      & 0x3F) | 0x80; /* 10xxxxxx */
+        processed_ptr += 1;
+    } else if (cp < 0xD800 || cp > 0xDFFF) {
+        processed_ptr[0] = ((cp >> 12) & 0x0F) | 0xE0; /* 1110xxxx */
+        processed_ptr[1] = ((cp >> 6)  & 0x3F) | 0x80; /* 10xxxxxx */
+        processed_ptr[2] = ((cp)       & 0x3F) | 0x80; /* 10xxxxxx */
+        processed_ptr += 2;
+    } else if (cp >= 0xD800 && cp <= 0xDBFF) { /* lead surrogate (0xD800..0xDBFF) */
+        lead = cp;
+        unprocessed_ptr += 4; /* should always be within the buffer, otherwise previous sscanf would fail */
+        if (*unprocessed_ptr++ != '\\' || *unprocessed_ptr++ != 'u') {
+            return JSONFailure;
+        }
+        parse_succeeded = parse_utf16_hex(unprocessed_ptr, &trail);
+        if (!parse_succeeded || trail < 0xDC00 || trail > 0xDFFF) { /* valid trail surrogate? (0xDC00..0xDFFF) */
+            return JSONFailure;
+        }
+        cp = ((((lead - 0xD800) & 0x3FF) << 10) | ((trail - 0xDC00) & 0x3FF)) + 0x010000;
+        processed_ptr[0] = (((cp >> 18) & 0x07) | 0xF0); /* 11110xxx */
+        processed_ptr[1] = (((cp >> 12) & 0x3F) | 0x80); /* 10xxxxxx */
+        processed_ptr[2] = (((cp >> 6)  & 0x3F) | 0x80); /* 10xxxxxx */
+        processed_ptr[3] = (((cp)       & 0x3F) | 0x80); /* 10xxxxxx */
+        processed_ptr += 3;
+    } else { /* trail surrogate before lead surrogate */
+        return JSONFailure;
+    }
+    unprocessed_ptr += 3;
+    *processed = processed_ptr;
+    *unprocessed = unprocessed_ptr;
+    return JSONSuccess;
+}
+
+
+/* Copies and processes passed string up to supplied length.
+Example: "\u006Corem ipsum" -> lorem ipsum */
+static char* process_string(const char *input, size_t len) {
+    const char *input_ptr = input;
+    size_t initial_size = (len + 1) * sizeof(char);
+    size_t final_size = 0;
+    char *output = NULL, *output_ptr = NULL, *resized_output = NULL;
+    output = (char*)parson_malloc(initial_size);
+    if (output == NULL) {
+        goto error;
+    }
+    output_ptr = output;
+    while ((*input_ptr != '\0') && (size_t)(input_ptr - input) < len) {
+        if (*input_ptr == '\\') {
+            input_ptr++;
+            switch (*input_ptr) {
+                case '\"': *output_ptr = '\"'; break;
+                case '\\': *output_ptr = '\\'; break;
+                case '/':  *output_ptr = '/';  break;
+                case 'b':  *output_ptr = '\b'; break;
+                case 'f':  *output_ptr = '\f'; break;
+                case 'n':  *output_ptr = '\n'; break;
+                case 'r':  *output_ptr = '\r'; break;
+                case 't':  *output_ptr = '\t'; break;
+                case 'u':
+                    if (parse_utf16(&input_ptr, &output_ptr) == JSONFailure) {
+                        goto error;
+                    }
+                    break;
+                default:
+                    goto error;
+            }
+        } else if ((unsigned char)*input_ptr < 0x20) {
+            goto error; /* 0x00-0x19 are invalid characters for json string (http://www.ietf.org/rfc/rfc4627.txt) */
+        } else {
+            *output_ptr = *input_ptr;
+        }
+        output_ptr++;
+        input_ptr++;
+    }
+    *output_ptr = '\0';
+    /* resize to new length */
+    final_size = (size_t)(output_ptr-output) + 1;
+    /* todo: don't resize if final_size == initial_size */
+    resized_output = (char*)parson_malloc(final_size);
+    if (resized_output == NULL) {
+        goto error;
+    }
+    memcpy(resized_output, output, final_size);
+    parson_free(output);
+    return resized_output;
+error:
+    parson_free(output);
+    return NULL;
+}
+
+/* Return processed contents of a string between quotes and
+   skips passed argument to a matching quote. */
+static char * get_quoted_string(const char **string) {
+    const char *string_start = *string;
+    size_t string_len = 0;
+    JSON_Status status = skip_quotes(string);
+    if (status != JSONSuccess) {
+        return NULL;
+    }
+    string_len = *string - string_start - 2; /* length without quotes */
+    return process_string(string_start + 1, string_len);
+}
+
+static JSON_Value * parse_value(const char **string, size_t nesting) {
+    if (nesting > MAX_NESTING) {
+        return NULL;
+    }
+    SKIP_WHITESPACES(string);
+    switch (**string) {
+        case '{':
+            return parse_object_value(string, nesting + 1);
+        case '[':
+            return parse_array_value(string, nesting + 1);
+        case '\"':
+            return parse_string_value(string);
+        case 'f': case 't':
+            return parse_boolean_value(string);
+        case '-':
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+            return parse_number_value(string);
+        case 'n':
+            return parse_null_value(string);
+        default:
+            return NULL;
+    }
+}
+
+static JSON_Value * parse_object_value(const char **string, size_t nesting) {
+    JSON_Value *output_value = NULL, *new_value = NULL;
+    JSON_Object *output_object = NULL;
+    char *new_key = NULL;
+    output_value = json_value_init_object();
+    if (output_value == NULL) {
+        return NULL;
+    }
+    if (**string != '{') {
+        json_value_free(output_value);
+        return NULL;
+    }
+    output_object = json_value_get_object(output_value);
+    SKIP_CHAR(string);
+    SKIP_WHITESPACES(string);
+    if (**string == '}') { /* empty object */
+        SKIP_CHAR(string);
+        return output_value;
+    }
+    while (**string != '\0') {
+        new_key = get_quoted_string(string);
+        if (new_key == NULL) {
+            json_value_free(output_value);
+            return NULL;
+        }
+        SKIP_WHITESPACES(string);
+        if (**string != ':') {
+            parson_free(new_key);
+            json_value_free(output_value);
+            return NULL;
+        }
+        SKIP_CHAR(string);
+        new_value = parse_value(string, nesting);
+        if (new_value == NULL) {
+            parson_free(new_key);
+            json_value_free(output_value);
+            return NULL;
+        }
+        if (json_object_add(output_object, new_key, new_value) == JSONFailure) {
+            parson_free(new_key);
+            json_value_free(new_value);
+            json_value_free(output_value);
+            return NULL;
+        }
+        parson_free(new_key);
+        SKIP_WHITESPACES(string);
+        if (**string != ',') {
+            break;
+        }
+        SKIP_CHAR(string);
+        SKIP_WHITESPACES(string);
+    }
+    SKIP_WHITESPACES(string);
+    if (**string != '}' || /* Trim object after parsing is over */
+        json_object_resize(output_object, json_object_get_count(output_object)) == JSONFailure) {
+            json_value_free(output_value);
+            return NULL;
+    }
+    SKIP_CHAR(string);
+    return output_value;
+}
+
+static JSON_Value * parse_array_value(const char **string, size_t nesting) {
+    JSON_Value *output_value = NULL, *new_array_value = NULL;
+    JSON_Array *output_array = NULL;
+    output_value = json_value_init_array();
+    if (output_value == NULL) {
+        return NULL;
+    }
+    if (**string != '[') {
+        json_value_free(output_value);
+        return NULL;
+    }
+    output_array = json_value_get_array(output_value);
+    SKIP_CHAR(string);
+    SKIP_WHITESPACES(string);
+    if (**string == ']') { /* empty array */
+        SKIP_CHAR(string);
+        return output_value;
+    }
+    while (**string != '\0') {
+        new_array_value = parse_value(string, nesting);
+        if (new_array_value == NULL) {
+            json_value_free(output_value);
+            return NULL;
+        }
+        if (json_array_add(output_array, new_array_value) == JSONFailure) {
+            json_value_free(new_array_value);
+            json_value_free(output_value);
+            return NULL;
+        }
+        SKIP_WHITESPACES(string);
+        if (**string != ',') {
+            break;
+        }
+        SKIP_CHAR(string);
+        SKIP_WHITESPACES(string);
+    }
+    SKIP_WHITESPACES(string);
+    if (**string != ']' || /* Trim array after parsing is over */
+        json_array_resize(output_array, json_array_get_count(output_array)) == JSONFailure) {
+            json_value_free(output_value);
+            return NULL;
+    }
+    SKIP_CHAR(string);
+    return output_value;
+}
+
+static JSON_Value * parse_string_value(const char **string) {
+    JSON_Value *value = NULL;
+    char *new_string = get_quoted_string(string);
+    if (new_string == NULL) {
+        return NULL;
+    }
+    value = json_value_init_string_no_copy(new_string);
+    if (value == NULL) {
+        parson_free(new_string);
+        return NULL;
+    }
+    return value;
+}
+
+static JSON_Value * parse_boolean_value(const char **string) {
+    size_t true_token_size = SIZEOF_TOKEN("true");
+    size_t false_token_size = SIZEOF_TOKEN("false");
+    if (strncmp("true", *string, true_token_size) == 0) {
+        *string += true_token_size;
+        return json_value_init_boolean(1);
+    } else if (strncmp("false", *string, false_token_size) == 0) {
+        *string += false_token_size;
+        return json_value_init_boolean(0);
+    }
+    return NULL;
+}
+
+static JSON_Value * parse_number_value(const char **string) {
+    char *end;
+    double number = 0;
+    errno = 0;
+    number = strtod(*string, &end);
+    if (errno || !is_decimal(*string, end - *string)) {
+        return NULL;
+    }
+    *string = end;
+    return json_value_init_number(number);
+}
+
+static JSON_Value * parse_null_value(const char **string) {
+    size_t token_size = SIZEOF_TOKEN("null");
+    if (strncmp("null", *string, token_size) == 0) {
+        *string += token_size;
+        return json_value_init_null();
+    }
+    return NULL;
+}
+
+/* Serialization */
+#define APPEND_STRING(str) do { written = append_string(buf, (str));\
+                                if (written < 0) { return -1; }\
+                                if (buf != NULL) { buf += written; }\
+                                written_total += written; } while(0)
+
+#define APPEND_INDENT(level) do { written = append_indent(buf, (level));\
+                                  if (written < 0) { return -1; }\
+                                  if (buf != NULL) { buf += written; }\
+                                  written_total += written; } while(0)
+
+static int json_serialize_to_buffer_r(const JSON_Value *value, char *buf, int level, int is_pretty, char *num_buf)
+{
+    const char *key = NULL, *string = NULL;
+    JSON_Value *temp_value = NULL;
+    JSON_Array *array = NULL;
+    JSON_Object *object = NULL;
+    size_t i = 0, count = 0;
+    double num = 0.0;
+    int written = -1, written_total = 0;
+
+    switch (json_value_get_type(value)) {
+        case JSONArray:
+            array = json_value_get_array(value);
+            count = json_array_get_count(array);
+            APPEND_STRING("[");
+            if (count > 0 && is_pretty) {
+                APPEND_STRING("\n");
+            }
+            for (i = 0; i < count; i++) {
+                if (is_pretty) {
+                    APPEND_INDENT(level+1);
+                }
+                temp_value = json_array_get_value(array, i);
+                written = json_serialize_to_buffer_r(temp_value, buf, level+1, is_pretty, num_buf);
+                if (written < 0) {
+                    return -1;
+                }
+                if (buf != NULL) {
+                    buf += written;
+                }
+                written_total += written;
+                if (i < (count - 1)) {
+                    APPEND_STRING(",");
+                }
+                if (is_pretty) {
+                    APPEND_STRING("\n");
+                }
+            }
+            if (count > 0 && is_pretty) {
+                APPEND_INDENT(level);
+            }
+            APPEND_STRING("]");
+            return written_total;
+        case JSONObject:
+            object = json_value_get_object(value);
+            count  = json_object_get_count(object);
+            APPEND_STRING("{");
+            if (count > 0 && is_pretty) {
+                APPEND_STRING("\n");
+            }
+            for (i = 0; i < count; i++) {
+                key = json_object_get_name(object, i);
+                if (key == NULL) {
+                    return -1;
+                }
+                if (is_pretty) {
+                    APPEND_INDENT(level+1);
+                }
+                written = json_serialize_string(key, buf);
+                if (written < 0) {
+                    return -1;
+                }
+                if (buf != NULL) {
+                    buf += written;
+                }
+                written_total += written;
+                APPEND_STRING(":");
+                if (is_pretty) {
+                    APPEND_STRING(" ");
+                }
+                temp_value = json_object_get_value(object, key);
+                written = json_serialize_to_buffer_r(temp_value, buf, level+1, is_pretty, num_buf);
+                if (written < 0) {
+                    return -1;
+                }
+                if (buf != NULL) {
+                    buf += written;
+                }
+                written_total += written;
+                if (i < (count - 1)) {
+                    APPEND_STRING(",");
+                }
+                if (is_pretty) {
+                    APPEND_STRING("\n");
+                }
+            }
+            if (count > 0 && is_pretty) {
+                APPEND_INDENT(level);
+            }
+            APPEND_STRING("}");
+            return written_total;
+        case JSONString:
+            string = json_value_get_string(value);
+            if (string == NULL) {
+                return -1;
+            }
+            written = json_serialize_string(string, buf);
+            if (written < 0) {
+                return -1;
+            }
+            if (buf != NULL) {
+                buf += written;
+            }
+            written_total += written;
+            return written_total;
+        case JSONBoolean:
+            if (json_value_get_boolean(value)) {
+                APPEND_STRING("true");
+            } else {
+                APPEND_STRING("false");
+            }
+            return written_total;
+        case JSONNumber:
+            num = json_value_get_number(value);
+            if (buf != NULL) {
+                num_buf = buf;
+            }
+            written = sprintf(num_buf, FLOAT_FORMAT, num);
+            if (written < 0) {
+                return -1;
+            }
+            if (buf != NULL) {
+                buf += written;
+            }
+            written_total += written;
+            return written_total;
+        case JSONNull:
+            APPEND_STRING("null");
+            return written_total;
+        case JSONError:
+            return -1;
+        default:
+            return -1;
+    }
+}
+
+static int json_serialize_string(const char *string, char *buf) {
+    size_t i = 0, len = strlen(string);
+    char c = '\0';
+    int written = -1, written_total = 0;
+    APPEND_STRING("\"");
+    for (i = 0; i < len; i++) {
+        c = string[i];
+        switch (c) {
+            case '\"': APPEND_STRING("\\\""); break;
+            case '\\': APPEND_STRING("\\\\"); break;
+            case '/':  APPEND_STRING("\\/"); break; /* to make json embeddable in xml\/html */
+            case '\b': APPEND_STRING("\\b"); break;
+            case '\f': APPEND_STRING("\\f"); break;
+            case '\n': APPEND_STRING("\\n"); break;
+            case '\r': APPEND_STRING("\\r"); break;
+            case '\t': APPEND_STRING("\\t"); break;
+            case '\x00': APPEND_STRING("\\u0000"); break;
+            case '\x01': APPEND_STRING("\\u0001"); break;
+            case '\x02': APPEND_STRING("\\u0002"); break;
+            case '\x03': APPEND_STRING("\\u0003"); break;
+            case '\x04': APPEND_STRING("\\u0004"); break;
+            case '\x05': APPEND_STRING("\\u0005"); break;
+            case '\x06': APPEND_STRING("\\u0006"); break;
+            case '\x07': APPEND_STRING("\\u0007"); break;
+            /* '\x08' duplicate: '\b' */
+            /* '\x09' duplicate: '\t' */
+            /* '\x0a' duplicate: '\n' */
+            case '\x0b': APPEND_STRING("\\u000b"); break;
+            /* '\x0c' duplicate: '\f' */
+            /* '\x0d' duplicate: '\r' */
+            case '\x0e': APPEND_STRING("\\u000e"); break;
+            case '\x0f': APPEND_STRING("\\u000f"); break;
+            case '\x10': APPEND_STRING("\\u0010"); break;
+            case '\x11': APPEND_STRING("\\u0011"); break;
+            case '\x12': APPEND_STRING("\\u0012"); break;
+            case '\x13': APPEND_STRING("\\u0013"); break;
+            case '\x14': APPEND_STRING("\\u0014"); break;
+            case '\x15': APPEND_STRING("\\u0015"); break;
+            case '\x16': APPEND_STRING("\\u0016"); break;
+            case '\x17': APPEND_STRING("\\u0017"); break;
+            case '\x18': APPEND_STRING("\\u0018"); break;
+            case '\x19': APPEND_STRING("\\u0019"); break;
+            case '\x1a': APPEND_STRING("\\u001a"); break;
+            case '\x1b': APPEND_STRING("\\u001b"); break;
+            case '\x1c': APPEND_STRING("\\u001c"); break;
+            case '\x1d': APPEND_STRING("\\u001d"); break;
+            case '\x1e': APPEND_STRING("\\u001e"); break;
+            case '\x1f': APPEND_STRING("\\u001f"); break;
+            default:
+                if (buf != NULL) {
+                    buf[0] = c;
+                    buf += 1;
+                }
+                written_total += 1;
+                break;
+        }
+    }
+    APPEND_STRING("\"");
+    return written_total;
+}
+
+static int append_indent(char *buf, int level) {
+    int i;
+    int written = -1, written_total = 0;
+    for (i = 0; i < level; i++) {
+        APPEND_STRING("    ");
+    }
+    return written_total;
+}
+
+static int append_string(char *buf, const char *string) {
+    if (buf == NULL) {
+        return (int)strlen(string);
+    }
+    return sprintf(buf, "%s", string);
+}
+
+#undef APPEND_STRING
+#undef APPEND_INDENT
+
+/* Parser API */
+JSON_Value * json_parse_file(const char *filename) {
+    char *file_contents = read_file(filename);
+    JSON_Value *output_value = NULL;
+    if (file_contents == NULL) {
+        return NULL;
+    }
+    output_value = json_parse_string(file_contents);
+    parson_free(file_contents);
+    return output_value;
+}
+
+JSON_Value * json_parse_file_with_comments(const char *filename) {
+    char *file_contents = read_file(filename);
+    JSON_Value *output_value = NULL;
+    if (file_contents == NULL) {
+        return NULL;
+    }
+    output_value = json_parse_string_with_comments(file_contents);
+    parson_free(file_contents);
+    return output_value;
+}
+
+JSON_Value * json_parse_string(const char *string) {
+    if (string == NULL) {
+        return NULL;
+    }
+    if (string[0] == '\xEF' && string[1] == '\xBB' && string[2] == '\xBF') {
+        string = string + 3; /* Support for UTF-8 BOM */
+    }
+    return parse_value((const char**)&string, 0);
+}
+
+JSON_Value * json_parse_string_with_comments(const char *string) {
+    JSON_Value *result = NULL;
+    char *string_mutable_copy = NULL, *string_mutable_copy_ptr = NULL;
+    string_mutable_copy = parson_strdup(string);
+    if (string_mutable_copy == NULL) {
+        return NULL;
+    }
+    remove_comments(string_mutable_copy, "/*", "*/");
+    remove_comments(string_mutable_copy, "//", "\n");
+    string_mutable_copy_ptr = string_mutable_copy;
+    result = parse_value((const char**)&string_mutable_copy_ptr, 0);
+    parson_free(string_mutable_copy);
+    return result;
+}
+
+/* JSON Object API */
+
+JSON_Value * json_object_get_value(const JSON_Object *object, const char *name) {
+    if (object == NULL || name == NULL) {
+        return NULL;
+    }
+    return json_object_getn_value(object, name, strlen(name));
+}
+
+const char * json_object_get_string(const JSON_Object *object, const char *name) {
+    return json_value_get_string(json_object_get_value(object, name));
+}
+
+double json_object_get_number(const JSON_Object *object, const char *name) {
+    return json_value_get_number(json_object_get_value(object, name));
+}
+
+JSON_Object * json_object_get_object(const JSON_Object *object, const char *name) {
+    return json_value_get_object(json_object_get_value(object, name));
+}
+
+JSON_Array * json_object_get_array(const JSON_Object *object, const char *name) {
+    return json_value_get_array(json_object_get_value(object, name));
+}
+
+int json_object_get_boolean(const JSON_Object *object, const char *name) {
+    return json_value_get_boolean(json_object_get_value(object, name));
+}
+
+JSON_Value * json_object_dotget_value(const JSON_Object *object, const char *name) {
+    const char *dot_position = strchr(name, '.');
+    if (!dot_position) {
+        return json_object_get_value(object, name);
+    }
+    object = json_value_get_object(json_object_getn_value(object, name, dot_position - name));
+    return json_object_dotget_value(object, dot_position + 1);
+}
+
+const char * json_object_dotget_string(const JSON_Object *object, const char *name) {
+    return json_value_get_string(json_object_dotget_value(object, name));
+}
+
+double json_object_dotget_number(const JSON_Object *object, const char *name) {
+    return json_value_get_number(json_object_dotget_value(object, name));
+}
+
+JSON_Object * json_object_dotget_object(const JSON_Object *object, const char *name) {
+    return json_value_get_object(json_object_dotget_value(object, name));
+}
+
+JSON_Array * json_object_dotget_array(const JSON_Object *object, const char *name) {
+    return json_value_get_array(json_object_dotget_value(object, name));
+}
+
+int json_object_dotget_boolean(const JSON_Object *object, const char *name) {
+    return json_value_get_boolean(json_object_dotget_value(object, name));
+}
+
+size_t json_object_get_count(const JSON_Object *object) {
+    return object ? object->count : 0;
+}
+
+const char * json_object_get_name(const JSON_Object *object, size_t index) {
+    if (object == NULL || index >= json_object_get_count(object)) {
+        return NULL;
+    }
+    return object->names[index];
+}
+
+JSON_Value * json_object_get_value_at(const JSON_Object *object, size_t index) {
+    if (object == NULL || index >= json_object_get_count(object)) {
+        return NULL;
+    }
+    return object->values[index];
+}
+
+JSON_Value *json_object_get_wrapping_value(const JSON_Object *object) {
+    return object->wrapping_value;
+}
+
+int json_object_has_value (const JSON_Object *object, const char *name) {
+    return json_object_get_value(object, name) != NULL;
+}
+
+int json_object_has_value_of_type(const JSON_Object *object, const char *name, JSON_Value_Type type) {
+    JSON_Value *val = json_object_get_value(object, name);
+    return val != NULL && json_value_get_type(val) == type;
+}
+
+int json_object_dothas_value (const JSON_Object *object, const char *name) {
+    return json_object_dotget_value(object, name) != NULL;
+}
+
+int json_object_dothas_value_of_type(const JSON_Object *object, const char *name, JSON_Value_Type type) {
+    JSON_Value *val = json_object_dotget_value(object, name);
+    return val != NULL && json_value_get_type(val) == type;
+}
+
+/* JSON Array API */
+JSON_Value * json_array_get_value(const JSON_Array *array, size_t index) {
+    if (array == NULL || index >= json_array_get_count(array)) {
+        return NULL;
+    }
+    return array->items[index];
+}
+
+const char * json_array_get_string(const JSON_Array *array, size_t index) {
+    return json_value_get_string(json_array_get_value(array, index));
+}
+
+double json_array_get_number(const JSON_Array *array, size_t index) {
+    return json_value_get_number(json_array_get_value(array, index));
+}
+
+JSON_Object * json_array_get_object(const JSON_Array *array, size_t index) {
+    return json_value_get_object(json_array_get_value(array, index));
+}
+
+JSON_Array * json_array_get_array(const JSON_Array *array, size_t index) {
+    return json_value_get_array(json_array_get_value(array, index));
+}
+
+int json_array_get_boolean(const JSON_Array *array, size_t index) {
+    return json_value_get_boolean(json_array_get_value(array, index));
+}
+
+size_t json_array_get_count(const JSON_Array *array) {
+    return array ? array->count : 0;
+}
+
+JSON_Value * json_array_get_wrapping_value(const JSON_Array *array) {
+    return array->wrapping_value;
+}
+
+/* JSON Value API */
+JSON_Value_Type json_value_get_type(const JSON_Value *value) {
+    return value ? value->type : JSONError;
+}
+
+JSON_Object * json_value_get_object(const JSON_Value *value) {
+    return json_value_get_type(value) == JSONObject ? value->value.object : NULL;
+}
+
+JSON_Array * json_value_get_array(const JSON_Value *value) {
+    return json_value_get_type(value) == JSONArray ? value->value.array : NULL;
+}
+
+const char * json_value_get_string(const JSON_Value *value) {
+    return json_value_get_type(value) == JSONString ? value->value.string : NULL;
+}
+
+double json_value_get_number(const JSON_Value *value) {
+    return json_value_get_type(value) == JSONNumber ? value->value.number : 0;
+}
+
+int json_value_get_boolean(const JSON_Value *value) {
+    return json_value_get_type(value) == JSONBoolean ? value->value.boolean : -1;
+}
+
+JSON_Value * json_value_get_parent (const JSON_Value *value) {
+    return value ? value->parent : NULL;
+}
+
+void json_value_free(JSON_Value *value) {
+    switch (json_value_get_type(value)) {
+        case JSONObject:
+            json_object_free(value->value.object);
+            break;
+        case JSONString:
+            parson_free(value->value.string);
+            break;
+        case JSONArray:
+            json_array_free(value->value.array);
+            break;
+        default:
+            break;
+    }
+    parson_free(value);
+}
+
+JSON_Value * json_value_init_object(void) {
+    JSON_Value *new_value = (JSON_Value*)parson_malloc(sizeof(JSON_Value));
+    if (!new_value) {
+        return NULL;
+    }
+    new_value->parent = NULL;
+    new_value->type = JSONObject;
+    new_value->value.object = json_object_init(new_value);
+    if (!new_value->value.object) {
+        parson_free(new_value);
+        return NULL;
+    }
+    return new_value;
+}
+
+JSON_Value * json_value_init_array(void) {
+    JSON_Value *new_value = (JSON_Value*)parson_malloc(sizeof(JSON_Value));
+    if (!new_value) {
+        return NULL;
+    }
+    new_value->parent = NULL;
+    new_value->type = JSONArray;
+    new_value->value.array = json_array_init(new_value);
+    if (!new_value->value.array) {
+        parson_free(new_value);
+        return NULL;
+    }
+    return new_value;
+}
+
+JSON_Value * json_value_init_string(const char *string) {
+    char *copy = NULL;
+    JSON_Value *value;
+    size_t string_len = 0;
+    if (string == NULL) {
+        return NULL;
+    }
+    string_len = strlen(string);
+    if (!is_valid_utf8(string, string_len)) {
+        return NULL;
+    }
+    copy = parson_strndup(string, string_len);
+    if (copy == NULL) {
+        return NULL;
+    }
+    value = json_value_init_string_no_copy(copy);
+    if (value == NULL) {
+        parson_free(copy);
+    }
+    return value;
+}
+
+JSON_Value * json_value_init_number(double number) {
+    JSON_Value *new_value = NULL;
+    if (IS_NUMBER_INVALID(number)) {
+        return NULL;
+    }
+    new_value = (JSON_Value*)parson_malloc(sizeof(JSON_Value));
+    if (new_value == NULL) {
+        return NULL;
+    }
+    new_value->parent = NULL;
+    new_value->type = JSONNumber;
+    new_value->value.number = number;
+    return new_value;
+}
+
+JSON_Value * json_value_init_boolean(int boolean) {
+    JSON_Value *new_value = (JSON_Value*)parson_malloc(sizeof(JSON_Value));
+    if (!new_value) {
+        return NULL;
+    }
+    new_value->parent = NULL;
+    new_value->type = JSONBoolean;
+    new_value->value.boolean = boolean ? 1 : 0;
+    return new_value;
+}
+
+JSON_Value * json_value_init_null(void) {
+    JSON_Value *new_value = (JSON_Value*)parson_malloc(sizeof(JSON_Value));
+    if (!new_value) {
+        return NULL;
+    }
+    new_value->parent = NULL;
+    new_value->type = JSONNull;
+    return new_value;
+}
+
+JSON_Value * json_value_deep_copy(const JSON_Value *value) {
+    size_t i = 0;
+    JSON_Value *return_value = NULL, *temp_value_copy = NULL, *temp_value = NULL;
+    const char *temp_string = NULL, *temp_key = NULL;
+    char *temp_string_copy = NULL;
+    JSON_Array *temp_array = NULL, *temp_array_copy = NULL;
+    JSON_Object *temp_object = NULL, *temp_object_copy = NULL;
+
+    switch (json_value_get_type(value)) {
+        case JSONArray:
+            temp_array = json_value_get_array(value);
+            return_value = json_value_init_array();
+            if (return_value == NULL) {
+                return NULL;
+            }
+            temp_array_copy = json_value_get_array(return_value);
+            for (i = 0; i < json_array_get_count(temp_array); i++) {
+                temp_value = json_array_get_value(temp_array, i);
+                temp_value_copy = json_value_deep_copy(temp_value);
+                if (temp_value_copy == NULL) {
+                    json_value_free(return_value);
+                    return NULL;
+                }
+                if (json_array_add(temp_array_copy, temp_value_copy) == JSONFailure) {
+                    json_value_free(return_value);
+                    json_value_free(temp_value_copy);
+                    return NULL;
+                }
+            }
+            return return_value;
+        case JSONObject:
+            temp_object = json_value_get_object(value);
+            return_value = json_value_init_object();
+            if (return_value == NULL) {
+                return NULL;
+            }
+            temp_object_copy = json_value_get_object(return_value);
+            for (i = 0; i < json_object_get_count(temp_object); i++) {
+                temp_key = json_object_get_name(temp_object, i);
+                temp_value = json_object_get_value(temp_object, temp_key);
+                temp_value_copy = json_value_deep_copy(temp_value);
+                if (temp_value_copy == NULL) {
+                    json_value_free(return_value);
+                    return NULL;
+                }
+                if (json_object_add(temp_object_copy, temp_key, temp_value_copy) == JSONFailure) {
+                    json_value_free(return_value);
+                    json_value_free(temp_value_copy);
+                    return NULL;
+                }
+            }
+            return return_value;
+        case JSONBoolean:
+            return json_value_init_boolean(json_value_get_boolean(value));
+        case JSONNumber:
+            return json_value_init_number(json_value_get_number(value));
+        case JSONString:
+            temp_string = json_value_get_string(value);
+            if (temp_string == NULL) {
+                return NULL;
+            }
+            temp_string_copy = parson_strdup(temp_string);
+            if (temp_string_copy == NULL) {
+                return NULL;
+            }
+            return_value = json_value_init_string_no_copy(temp_string_copy);
+            if (return_value == NULL) {
+                parson_free(temp_string_copy);
+            }
+            return return_value;
+        case JSONNull:
+            return json_value_init_null();
+        case JSONError:
+            return NULL;
+        default:
+            return NULL;
+    }
+}
+
+size_t json_serialization_size(const JSON_Value *value) {
+    char num_buf[NUM_BUF_SIZE]; /* recursively allocating buffer on stack is a bad idea, so let's do it only once */
+    int res = json_serialize_to_buffer_r(value, NULL, 0, 0, num_buf);
+    return res < 0 ? 0 : (size_t)(res + 1);
+}
+
+JSON_Status json_serialize_to_buffer(const JSON_Value *value, char *buf, size_t buf_size_in_bytes) {
+    int written = -1;
+    size_t needed_size_in_bytes = json_serialization_size(value);
+    if (needed_size_in_bytes == 0 || buf_size_in_bytes < needed_size_in_bytes) {
+        return JSONFailure;
+    }
+    written = json_serialize_to_buffer_r(value, buf, 0, 0, NULL);
+    if (written < 0) {
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_serialize_to_file(const JSON_Value *value, const char *filename) {
+    JSON_Status return_code = JSONSuccess;
+    FILE *fp = NULL;
+    char *serialized_string = json_serialize_to_string(value);
+    if (serialized_string == NULL) {
+        return JSONFailure;
+    }
+    fp = fopen(filename, "w");
+    if (fp == NULL) {
+        json_free_serialized_string(serialized_string);
+        return JSONFailure;
+    }
+    if (fputs(serialized_string, fp) == EOF) {
+        return_code = JSONFailure;
+    }
+    if (fclose(fp) == EOF) {
+        return_code = JSONFailure;
+    }
+    json_free_serialized_string(serialized_string);
+    return return_code;
+}
+
+char * json_serialize_to_string(const JSON_Value *value) {
+    JSON_Status serialization_result = JSONFailure;
+    size_t buf_size_bytes = json_serialization_size(value);
+    char *buf = NULL;
+    if (buf_size_bytes == 0) {
+        return NULL;
+    }
+    buf = (char*)parson_malloc(buf_size_bytes);
+    if (buf == NULL) {
+        return NULL;
+    }
+    serialization_result = json_serialize_to_buffer(value, buf, buf_size_bytes);
+    if (serialization_result == JSONFailure) {
+        json_free_serialized_string(buf);
+        return NULL;
+    }
+    return buf;
+}
+
+size_t json_serialization_size_pretty(const JSON_Value *value) {
+    char num_buf[NUM_BUF_SIZE]; /* recursively allocating buffer on stack is a bad idea, so let's do it only once */
+    int res = json_serialize_to_buffer_r(value, NULL, 0, 1, num_buf);
+    return res < 0 ? 0 : (size_t)(res + 1);
+}
+
+JSON_Status json_serialize_to_buffer_pretty(const JSON_Value *value, char *buf, size_t buf_size_in_bytes) {
+    int written = -1;
+    size_t needed_size_in_bytes = json_serialization_size_pretty(value);
+    if (needed_size_in_bytes == 0 || buf_size_in_bytes < needed_size_in_bytes) {
+        return JSONFailure;
+    }
+    written = json_serialize_to_buffer_r(value, buf, 0, 1, NULL);
+    if (written < 0) {
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_serialize_to_file_pretty(const JSON_Value *value, const char *filename) {
+    JSON_Status return_code = JSONSuccess;
+    FILE *fp = NULL;
+    char *serialized_string = json_serialize_to_string_pretty(value);
+    if (serialized_string == NULL) {
+        return JSONFailure;
+    }
+    fp = fopen(filename, "w");
+    if (fp == NULL) {
+        json_free_serialized_string(serialized_string);
+        return JSONFailure;
+    }
+    if (fputs(serialized_string, fp) == EOF) {
+        return_code = JSONFailure;
+    }
+    if (fclose(fp) == EOF) {
+        return_code = JSONFailure;
+    }
+    json_free_serialized_string(serialized_string);
+    return return_code;
+}
+
+char * json_serialize_to_string_pretty(const JSON_Value *value) {
+    JSON_Status serialization_result = JSONFailure;
+    size_t buf_size_bytes = json_serialization_size_pretty(value);
+    char *buf = NULL;
+    if (buf_size_bytes == 0) {
+        return NULL;
+    }
+    buf = (char*)parson_malloc(buf_size_bytes);
+    if (buf == NULL) {
+        return NULL;
+    }
+    serialization_result = json_serialize_to_buffer_pretty(value, buf, buf_size_bytes);
+    if (serialization_result == JSONFailure) {
+        json_free_serialized_string(buf);
+        return NULL;
+    }
+    return buf;
+}
+
+void json_free_serialized_string(char *string) {
+    parson_free(string);
+}
+
+JSON_Status json_array_remove(JSON_Array *array, size_t ix) {
+    size_t to_move_bytes = 0;
+    if (array == NULL || ix >= json_array_get_count(array)) {
+        return JSONFailure;
+    }
+    json_value_free(json_array_get_value(array, ix));
+    to_move_bytes = (json_array_get_count(array) - 1 - ix) * sizeof(JSON_Value*);
+    memmove(array->items + ix, array->items + ix + 1, to_move_bytes);
+    array->count -= 1;
+    return JSONSuccess;
+}
+
+JSON_Status json_array_replace_value(JSON_Array *array, size_t ix, JSON_Value *value) {
+    if (array == NULL || value == NULL || value->parent != NULL || ix >= json_array_get_count(array)) {
+        return JSONFailure;
+    }
+    json_value_free(json_array_get_value(array, ix));
+    value->parent = json_array_get_wrapping_value(array);
+    array->items[ix] = value;
+    return JSONSuccess;
+}
+
+JSON_Status json_array_replace_string(JSON_Array *array, size_t i, const char* string) {
+    JSON_Value *value = json_value_init_string(string);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_replace_value(array, i, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_replace_number(JSON_Array *array, size_t i, double number) {
+    JSON_Value *value = json_value_init_number(number);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_replace_value(array, i, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_replace_boolean(JSON_Array *array, size_t i, int boolean) {
+    JSON_Value *value = json_value_init_boolean(boolean);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_replace_value(array, i, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_replace_null(JSON_Array *array, size_t i) {
+    JSON_Value *value = json_value_init_null();
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_replace_value(array, i, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_clear(JSON_Array *array) {
+    size_t i = 0;
+    if (array == NULL) {
+        return JSONFailure;
+    }
+    for (i = 0; i < json_array_get_count(array); i++) {
+        json_value_free(json_array_get_value(array, i));
+    }
+    array->count = 0;
+    return JSONSuccess;
+}
+
+JSON_Status json_array_append_value(JSON_Array *array, JSON_Value *value) {
+    if (array == NULL || value == NULL || value->parent != NULL) {
+        return JSONFailure;
+    }
+    return json_array_add(array, value);
+}
+
+JSON_Status json_array_append_string(JSON_Array *array, const char *string) {
+    JSON_Value *value = json_value_init_string(string);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_append_value(array, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_append_number(JSON_Array *array, double number) {
+    JSON_Value *value = json_value_init_number(number);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_append_value(array, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_append_boolean(JSON_Array *array, int boolean) {
+    JSON_Value *value = json_value_init_boolean(boolean);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_append_value(array, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_array_append_null(JSON_Array *array) {
+    JSON_Value *value = json_value_init_null();
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_array_append_value(array, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_object_set_value(JSON_Object *object, const char *name, JSON_Value *value) {
+    size_t i = 0;
+    JSON_Value *old_value;
+    if (object == NULL || name == NULL || value == NULL || value->parent != NULL) {
+        return JSONFailure;
+    }
+    old_value = json_object_get_value(object, name);
+    if (old_value != NULL) { /* free and overwrite old value */
+        json_value_free(old_value);
+        for (i = 0; i < json_object_get_count(object); i++) {
+            if (strcmp(object->names[i], name) == 0) {
+                value->parent = json_object_get_wrapping_value(object);
+                object->values[i] = value;
+                return JSONSuccess;
+            }
+        }
+    }
+    /* add new key value pair */
+    return json_object_add(object, name, value);
+}
+
+JSON_Status json_object_set_string(JSON_Object *object, const char *name, const char *string) {
+    return json_object_set_value(object, name, json_value_init_string(string));
+}
+
+JSON_Status json_object_set_number(JSON_Object *object, const char *name, double number) {
+    return json_object_set_value(object, name, json_value_init_number(number));
+}
+
+JSON_Status json_object_set_boolean(JSON_Object *object, const char *name, int boolean) {
+    return json_object_set_value(object, name, json_value_init_boolean(boolean));
+}
+
+JSON_Status json_object_set_null(JSON_Object *object, const char *name) {
+    return json_object_set_value(object, name, json_value_init_null());
+}
+
+JSON_Status json_object_dotset_value(JSON_Object *object, const char *name, JSON_Value *value) {
+    const char *dot_pos = NULL;
+    JSON_Value *temp_value = NULL, *new_value = NULL;
+    JSON_Object *temp_object = NULL, *new_object = NULL;
+    JSON_Status status = JSONFailure;
+    size_t name_len = 0;
+    if (object == NULL || name == NULL || value == NULL) {
+        return JSONFailure;
+    }
+    dot_pos = strchr(name, '.');
+    if (dot_pos == NULL) {
+        return json_object_set_value(object, name, value);
+    }
+    name_len = dot_pos - name;
+    temp_value = json_object_getn_value(object, name, name_len);
+    if (temp_value) {
+        /* Don't overwrite existing non-object (unlike json_object_set_value, but it shouldn't be changed at this point) */
+        if (json_value_get_type(temp_value) != JSONObject) {
+            return JSONFailure;
+        }
+        temp_object = json_value_get_object(temp_value);
+        return json_object_dotset_value(temp_object, dot_pos + 1, value);
+    }
+    new_value = json_value_init_object();
+    if (new_value == NULL) {
+        return JSONFailure;
+    }
+    new_object = json_value_get_object(new_value);
+    status = json_object_dotset_value(new_object, dot_pos + 1, value);
+    if (status != JSONSuccess) {
+        json_value_free(new_value);
+        return JSONFailure;
+    }
+    status = json_object_addn(object, name, name_len, new_value);
+    if (status != JSONSuccess) {
+        json_object_dotremove_internal(new_object, dot_pos + 1, 0);
+        json_value_free(new_value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_object_dotset_string(JSON_Object *object, const char *name, const char *string) {
+    JSON_Value *value = json_value_init_string(string);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_object_dotset_value(object, name, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_object_dotset_number(JSON_Object *object, const char *name, double number) {
+    JSON_Value *value = json_value_init_number(number);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_object_dotset_value(object, name, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_object_dotset_boolean(JSON_Object *object, const char *name, int boolean) {
+    JSON_Value *value = json_value_init_boolean(boolean);
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_object_dotset_value(object, name, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_object_dotset_null(JSON_Object *object, const char *name) {
+    JSON_Value *value = json_value_init_null();
+    if (value == NULL) {
+        return JSONFailure;
+    }
+    if (json_object_dotset_value(object, name, value) == JSONFailure) {
+        json_value_free(value);
+        return JSONFailure;
+    }
+    return JSONSuccess;
+}
+
+JSON_Status json_object_remove(JSON_Object *object, const char *name) {
+    return json_object_remove_internal(object, name, 1);
+}
+
+JSON_Status json_object_dotremove(JSON_Object *object, const char *name) {
+    return json_object_dotremove_internal(object, name, 1);
+}
+
+JSON_Status json_object_clear(JSON_Object *object) {
+    size_t i = 0;
+    if (object == NULL) {
+        return JSONFailure;
+    }
+    for (i = 0; i < json_object_get_count(object); i++) {
+        parson_free(object->names[i]);
+        json_value_free(object->values[i]);
+    }
+    object->count = 0;
+    return JSONSuccess;
+}
+
+JSON_Status json_validate(const JSON_Value *schema, const JSON_Value *value) {
+    JSON_Value *temp_schema_value = NULL, *temp_value = NULL;
+    JSON_Array *schema_array = NULL, *value_array = NULL;
+    JSON_Object *schema_object = NULL, *value_object = NULL;
+    JSON_Value_Type schema_type = JSONError, value_type = JSONError;
+    const char *key = NULL;
+    size_t i = 0, count = 0;
+    if (schema == NULL || value == NULL) {
+        return JSONFailure;
+    }
+    schema_type = json_value_get_type(schema);
+    value_type = json_value_get_type(value);
+    if (schema_type != value_type && schema_type != JSONNull) { /* null represents all values */
+        return JSONFailure;
+    }
+    switch (schema_type) {
+        case JSONArray:
+            schema_array = json_value_get_array(schema);
+            value_array = json_value_get_array(value);
+            count = json_array_get_count(schema_array);
+            if (count == 0) {
+                return JSONSuccess; /* Empty array allows all types */
+            }
+            /* Get first value from array, rest is ignored */
+            temp_schema_value = json_array_get_value(schema_array, 0);
+            for (i = 0; i < json_array_get_count(value_array); i++) {
+                temp_value = json_array_get_value(value_array, i);
+                if (json_validate(temp_schema_value, temp_value) == JSONFailure) {
+                    return JSONFailure;
+                }
+            }
+            return JSONSuccess;
+        case JSONObject:
+            schema_object = json_value_get_object(schema);
+            value_object = json_value_get_object(value);
+            count = json_object_get_count(schema_object);
+            if (count == 0) {
+                return JSONSuccess; /* Empty object allows all objects */
+            } else if (json_object_get_count(value_object) < count) {
+                return JSONFailure; /* Tested object mustn't have less name-value pairs than schema */
+            }
+            for (i = 0; i < count; i++) {
+                key = json_object_get_name(schema_object, i);
+                temp_schema_value = json_object_get_value(schema_object, key);
+                temp_value = json_object_get_value(value_object, key);
+                if (temp_value == NULL) {
+                    return JSONFailure;
+                }
+                if (json_validate(temp_schema_value, temp_value) == JSONFailure) {
+                    return JSONFailure;
+                }
+            }
+            return JSONSuccess;
+        case JSONString: case JSONNumber: case JSONBoolean: case JSONNull:
+            return JSONSuccess; /* equality already tested before switch */
+        case JSONError: default:
+            return JSONFailure;
+    }
+}
+
+int json_value_equals(const JSON_Value *a, const JSON_Value *b) {
+    JSON_Object *a_object = NULL, *b_object = NULL;
+    JSON_Array *a_array = NULL, *b_array = NULL;
+    const char *a_string = NULL, *b_string = NULL;
+    const char *key = NULL;
+    size_t a_count = 0, b_count = 0, i = 0;
+    JSON_Value_Type a_type, b_type;
+    a_type = json_value_get_type(a);
+    b_type = json_value_get_type(b);
+    if (a_type != b_type) {
+        return 0;
+    }
+    switch (a_type) {
+        case JSONArray:
+            a_array = json_value_get_array(a);
+            b_array = json_value_get_array(b);
+            a_count = json_array_get_count(a_array);
+            b_count = json_array_get_count(b_array);
+            if (a_count != b_count) {
+                return 0;
+            }
+            for (i = 0; i < a_count; i++) {
+                if (!json_value_equals(json_array_get_value(a_array, i),
+                                       json_array_get_value(b_array, i))) {
+                    return 0;
+                }
+            }
+            return 1;
+        case JSONObject:
+            a_object = json_value_get_object(a);
+            b_object = json_value_get_object(b);
+            a_count = json_object_get_count(a_object);
+            b_count = json_object_get_count(b_object);
+            if (a_count != b_count) {
+                return 0;
+            }
+            for (i = 0; i < a_count; i++) {
+                key = json_object_get_name(a_object, i);
+                if (!json_value_equals(json_object_get_value(a_object, key),
+                                       json_object_get_value(b_object, key))) {
+                    return 0;
+                }
+            }
+            return 1;
+        case JSONString:
+            a_string = json_value_get_string(a);
+            b_string = json_value_get_string(b);
+            if (a_string == NULL || b_string == NULL) {
+                return 0; /* shouldn't happen */
+            }
+            return strcmp(a_string, b_string) == 0;
+        case JSONBoolean:
+            return json_value_get_boolean(a) == json_value_get_boolean(b);
+        case JSONNumber:
+            return fabs(json_value_get_number(a) - json_value_get_number(b)) < 0.000001; /* EPSILON */
+        case JSONError:
+            return 1;
+        case JSONNull:
+            return 1;
+        default:
+            return 1;
+    }
+}
+
+JSON_Value_Type json_type(const JSON_Value *value) {
+    return json_value_get_type(value);
+}
+
+JSON_Object * json_object (const JSON_Value *value) {
+    return json_value_get_object(value);
+}
+
+JSON_Array * json_array  (const JSON_Value *value) {
+    return json_value_get_array(value);
+}
+
+const char * json_string (const JSON_Value *value) {
+    return json_value_get_string(value);
+}
+
+double json_number (const JSON_Value *value) {
+    return json_value_get_number(value);
+}
+
+int json_boolean(const JSON_Value *value) {
+    return json_value_get_boolean(value);
+}
+
+void json_set_allocation_functions(JSON_Malloc_Function malloc_fun, JSON_Free_Function free_fun) {
+    parson_malloc = malloc_fun;
+    parson_free = free_fun;
+}
Index: azure_iot_hub/trunk/azure_iothub/deps/parson/parson.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/deps/parson/parson.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/deps/parson/parson.h	(revision 389)
@@ -0,0 +1,234 @@
+/*
+ Parson ( http://kgabis.github.com/parson/ )
+ Copyright (c) 2012 - 2017 Krzysztof Gabis
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+#ifndef parson_parson_h
+#define parson_parson_h
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stddef.h>   /* size_t */
+
+/* Types and enums */
+typedef struct json_object_t JSON_Object;
+typedef struct json_array_t  JSON_Array;
+typedef struct json_value_t  JSON_Value;
+
+enum json_value_type {
+    JSONError   = -1,
+    JSONNull    = 1,
+    JSONString  = 2,
+    JSONNumber  = 3,
+    JSONObject  = 4,
+    JSONArray   = 5,
+    JSONBoolean = 6
+};
+typedef int JSON_Value_Type;
+
+enum json_result_t {
+    JSONSuccess = 0,
+    JSONFailure = -1
+};
+typedef int JSON_Status;
+
+typedef void * (*JSON_Malloc_Function)(size_t);
+typedef void   (*JSON_Free_Function)(void *);
+
+/* Call only once, before calling any other function from parson API. If not called, malloc and free
+   from stdlib will be used for all allocations */
+void json_set_allocation_functions(JSON_Malloc_Function malloc_fun, JSON_Free_Function free_fun);
+
+/* Parses first JSON value in a file, returns NULL in case of error */
+JSON_Value * json_parse_file(const char *filename);
+
+/* Parses first JSON value in a file and ignores comments (/ * * / and //),
+   returns NULL in case of error */
+JSON_Value * json_parse_file_with_comments(const char *filename);
+
+/*  Parses first JSON value in a string, returns NULL in case of error */
+JSON_Value * json_parse_string(const char *string);
+
+/*  Parses first JSON value in a string and ignores comments (/ * * / and //),
+    returns NULL in case of error */
+JSON_Value * json_parse_string_with_comments(const char *string);
+
+/* Serialization */
+size_t      json_serialization_size(const JSON_Value *value); /* returns 0 on fail */
+JSON_Status json_serialize_to_buffer(const JSON_Value *value, char *buf, size_t buf_size_in_bytes);
+JSON_Status json_serialize_to_file(const JSON_Value *value, const char *filename);
+char *      json_serialize_to_string(const JSON_Value *value);
+
+/* Pretty serialization */
+size_t      json_serialization_size_pretty(const JSON_Value *value); /* returns 0 on fail */
+JSON_Status json_serialize_to_buffer_pretty(const JSON_Value *value, char *buf, size_t buf_size_in_bytes);
+JSON_Status json_serialize_to_file_pretty(const JSON_Value *value, const char *filename);
+char *      json_serialize_to_string_pretty(const JSON_Value *value);
+
+void        json_free_serialized_string(char *string); /* frees string from json_serialize_to_string and json_serialize_to_string_pretty */
+
+/* Comparing */
+int  json_value_equals(const JSON_Value *a, const JSON_Value *b);
+
+/* Validation
+   This is *NOT* JSON Schema. It validates json by checking if object have identically
+   named fields with matching types.
+   For example schema {"name":"", "age":0} will validate
+   {"name":"Joe", "age":25} and {"name":"Joe", "age":25, "gender":"m"},
+   but not {"name":"Joe"} or {"name":"Joe", "age":"Cucumber"}.
+   In case of arrays, only first value in schema is checked against all values in tested array.
+   Empty objects ({}) validate all objects, empty arrays ([]) validate all arrays,
+   null validates values of every type.
+ */
+JSON_Status json_validate(const JSON_Value *schema, const JSON_Value *value);
+
+/*
+ * JSON Object
+ */
+JSON_Value  * json_object_get_value  (const JSON_Object *object, const char *name);
+const char  * json_object_get_string (const JSON_Object *object, const char *name);
+JSON_Object * json_object_get_object (const JSON_Object *object, const char *name);
+JSON_Array  * json_object_get_array  (const JSON_Object *object, const char *name);
+double        json_object_get_number (const JSON_Object *object, const char *name); /* returns 0 on fail */
+int           json_object_get_boolean(const JSON_Object *object, const char *name); /* returns -1 on fail */
+
+/* dotget functions enable addressing values with dot notation in nested objects,
+ just like in structs or c++/java/c# objects (e.g. objectA.objectB.value).
+ Because valid names in JSON can contain dots, some values may be inaccessible
+ this way. */
+JSON_Value  * json_object_dotget_value  (const JSON_Object *object, const char *name);
+const char  * json_object_dotget_string (const JSON_Object *object, const char *name);
+JSON_Object * json_object_dotget_object (const JSON_Object *object, const char *name);
+JSON_Array  * json_object_dotget_array  (const JSON_Object *object, const char *name);
+double        json_object_dotget_number (const JSON_Object *object, const char *name); /* returns 0 on fail */
+int           json_object_dotget_boolean(const JSON_Object *object, const char *name); /* returns -1 on fail */
+
+/* Functions to get available names */
+size_t        json_object_get_count   (const JSON_Object *object);
+const char  * json_object_get_name    (const JSON_Object *object, size_t index);
+JSON_Value  * json_object_get_value_at(const JSON_Object *object, size_t index);
+JSON_Value  * json_object_get_wrapping_value(const JSON_Object *object);
+
+/* Functions to check if object has a value with a specific name. Returned value is 1 if object has
+ * a value and 0 if it doesn't. dothas functions behave exactly like dotget functions. */
+int json_object_has_value        (const JSON_Object *object, const char *name);
+int json_object_has_value_of_type(const JSON_Object *object, const char *name, JSON_Value_Type type);
+
+int json_object_dothas_value        (const JSON_Object *object, const char *name);
+int json_object_dothas_value_of_type(const JSON_Object *object, const char *name, JSON_Value_Type type);
+
+/* Creates new name-value pair or frees and replaces old value with a new one.
+ * json_object_set_value does not copy passed value so it shouldn't be freed afterwards. */
+JSON_Status json_object_set_value(JSON_Object *object, const char *name, JSON_Value *value);
+JSON_Status json_object_set_string(JSON_Object *object, const char *name, const char *string);
+JSON_Status json_object_set_number(JSON_Object *object, const char *name, double number);
+JSON_Status json_object_set_boolean(JSON_Object *object, const char *name, int boolean);
+JSON_Status json_object_set_null(JSON_Object *object, const char *name);
+
+/* Works like dotget functions, but creates whole hierarchy if necessary.
+ * json_object_dotset_value does not copy passed value so it shouldn't be freed afterwards. */
+JSON_Status json_object_dotset_value(JSON_Object *object, const char *name, JSON_Value *value);
+JSON_Status json_object_dotset_string(JSON_Object *object, const char *name, const char *string);
+JSON_Status json_object_dotset_number(JSON_Object *object, const char *name, double number);
+JSON_Status json_object_dotset_boolean(JSON_Object *object, const char *name, int boolean);
+JSON_Status json_object_dotset_null(JSON_Object *object, const char *name);
+
+/* Frees and removes name-value pair */
+JSON_Status json_object_remove(JSON_Object *object, const char *name);
+
+/* Works like dotget function, but removes name-value pair only on exact match. */
+JSON_Status json_object_dotremove(JSON_Object *object, const char *key);
+
+/* Removes all name-value pairs in object */
+JSON_Status json_object_clear(JSON_Object *object);
+
+/*
+ *JSON Array
+ */
+JSON_Value  * json_array_get_value  (const JSON_Array *array, size_t index);
+const char  * json_array_get_string (const JSON_Array *array, size_t index);
+JSON_Object * json_array_get_object (const JSON_Array *array, size_t index);
+JSON_Array  * json_array_get_array  (const JSON_Array *array, size_t index);
+double        json_array_get_number (const JSON_Array *array, size_t index); /* returns 0 on fail */
+int           json_array_get_boolean(const JSON_Array *array, size_t index); /* returns -1 on fail */
+size_t        json_array_get_count  (const JSON_Array *array);
+JSON_Value  * json_array_get_wrapping_value(const JSON_Array *array);
+    
+/* Frees and removes value at given index, does nothing and returns JSONFailure if index doesn't exist.
+ * Order of values in array may change during execution.  */
+JSON_Status json_array_remove(JSON_Array *array, size_t i);
+
+/* Frees and removes from array value at given index and replaces it with given one.
+ * Does nothing and returns JSONFailure if index doesn't exist.
+ * json_array_replace_value does not copy passed value so it shouldn't be freed afterwards. */
+JSON_Status json_array_replace_value(JSON_Array *array, size_t i, JSON_Value *value);
+JSON_Status json_array_replace_string(JSON_Array *array, size_t i, const char* string);
+JSON_Status json_array_replace_number(JSON_Array *array, size_t i, double number);
+JSON_Status json_array_replace_boolean(JSON_Array *array, size_t i, int boolean);
+JSON_Status json_array_replace_null(JSON_Array *array, size_t i);
+
+/* Frees and removes all values from array */
+JSON_Status json_array_clear(JSON_Array *array);
+
+/* Appends new value at the end of array.
+ * json_array_append_value does not copy passed value so it shouldn't be freed afterwards. */
+JSON_Status json_array_append_value(JSON_Array *array, JSON_Value *value);
+JSON_Status json_array_append_string(JSON_Array *array, const char *string);
+JSON_Status json_array_append_number(JSON_Array *array, double number);
+JSON_Status json_array_append_boolean(JSON_Array *array, int boolean);
+JSON_Status json_array_append_null(JSON_Array *array);
+
+/*
+ *JSON Value
+ */
+JSON_Value * json_value_init_object (void);
+JSON_Value * json_value_init_array  (void);
+JSON_Value * json_value_init_string (const char *string); /* copies passed string */
+JSON_Value * json_value_init_number (double number);
+JSON_Value * json_value_init_boolean(int boolean);
+JSON_Value * json_value_init_null   (void);
+JSON_Value * json_value_deep_copy   (const JSON_Value *value);
+void         json_value_free        (JSON_Value *value);
+
+JSON_Value_Type json_value_get_type   (const JSON_Value *value);
+JSON_Object *   json_value_get_object (const JSON_Value *value);
+JSON_Array  *   json_value_get_array  (const JSON_Value *value);
+const char  *   json_value_get_string (const JSON_Value *value);
+double          json_value_get_number (const JSON_Value *value);
+int             json_value_get_boolean(const JSON_Value *value);
+JSON_Value  *   json_value_get_parent (const JSON_Value *value);
+
+/* Same as above, but shorter */
+JSON_Value_Type json_type   (const JSON_Value *value);
+JSON_Object *   json_object (const JSON_Value *value);
+JSON_Array  *   json_array  (const JSON_Value *value);
+const char  *   json_string (const JSON_Value *value);
+double          json_number (const JSON_Value *value);
+int             json_boolean(const JSON_Value *value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/blob.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/blob.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/blob.h	(revision 389)
@@ -0,0 +1,81 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file blob.h
+*    @brief Contains blob APIs needed for File Upload feature of IoTHub client.
+*
+*    @details IoTHub client needs to upload a byte array by using blob storage API
+*             IoTHub service provides the complete SAS URI to execute a PUT request
+*             that will upload the data.
+*
+*/
+
+#ifndef BLOB_H
+#define BLOB_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/strings_types.h"
+#include "azure_c_shared_utility/httpapiex.h"
+#include "iothub_client_core_ll.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+/* Allow unit tests to override MAX_BLOCK_COUNT to something much smaller */
+#ifndef MAX_BLOCK_COUNT
+/* Maximum count of blocks uploaded is 50000, per server*/
+#define MAX_BLOCK_COUNT 50000
+#endif
+
+#define BLOB_RESULT_VALUES \
+    BLOB_OK,               \
+    BLOB_ERROR,            \
+    BLOB_NOT_IMPLEMENTED,  \
+    BLOB_HTTP_ERROR,       \
+    BLOB_INVALID_ARG,      \
+    BLOB_ABORTED
+
+MU_DEFINE_ENUM(BLOB_RESULT, BLOB_RESULT_VALUES)
+
+/**
+* @brief  Synchronously uploads a byte array to blob storage
+*
+* @param  SASURI            The URI to use to upload data
+* @param  getDataCallbackEx A callback to be invoked to acquire the file chunks to be uploaded, as well as to indicate the status of the upload of the previous block.
+* @param  context           Any data provided by the user to serve as context on getDataCallback.
+* @param  httpStatus        A pointer to an out argument receiving the HTTP status (available only when the return value is BLOB_OK)
+* @param  httpResponse      A BUFFER_HANDLE that receives the HTTP response from the server (available only when the return value is BLOB_OK)
+* @param  certificates      A null terminated string containing CA certificates to be used
+* @param    proxyOptions    A structure that contains optional web proxy information
+*
+* @return    A @c BLOB_RESULT. BLOB_OK means the blob has been uploaded successfully. Any other value indicates an error
+*/
+MOCKABLE_FUNCTION(, BLOB_RESULT, Blob_UploadMultipleBlocksFromSasUri, const char*, SASURI, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context, unsigned int*, httpStatus, BUFFER_HANDLE, httpResponse, const char*, certificates, HTTP_PROXY_OPTIONS*, proxyOptions)
+
+/**
+* @brief  Synchronously uploads a byte array as a new block to blob storage
+*
+* @param  requestContent      The data to upload
+* @param  blockId             The block id (from 00000 to 49999)
+* @param  xml                 The XML file containing the blockId list
+* @param  relativePath        The destination path within the storage
+* @param  httpApiExHandle     The connection handle
+* @param  httpStatus          A pointer to an out argument receiving the HTTP status (available only when the return value is BLOB_OK)
+* @param  httpResponse        A BUFFER_HANDLE that receives the HTTP response from the server (available only when the return value is BLOB_OK)
+*/
+//MOCKABLE_FUNCTION(, BLOB_RESULT, Blob_UploadNextBlock, BUFFER_HANDLE, requestContent, unsigned int, blockID, STRING_HANDLE, xml, const char*, relativePath, HTTPAPIEX_HANDLE, httpApiExHandle, unsigned int*, httpStatus, BUFFER_HANDLE, httpResponse)
+MOCKABLE_FUNCTION(, BLOB_RESULT, Blob_UploadBlock, HTTPAPIEX_HANDLE, httpApiExHandle, const char*, relativePath, BUFFER_HANDLE, requestContent, unsigned int, blockID, STRING_HANDLE, blockIDList, unsigned int*, httpStatus, BUFFER_HANDLE, httpResponse)
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BLOB_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_authorization.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_authorization.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_authorization.h	(revision 389)
@@ -0,0 +1,64 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_CLIENT_AUTHORIZATION_H
+#define IOTHUB_CLIENT_AUTHORIZATION_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/xio.h"
+
+#ifdef __cplusplus
+extern "C" {
+#include <cstdint>
+#else
+#include <stdint.h>
+#include <stdbool.h>
+#endif /* __cplusplus */
+
+typedef struct IOTHUB_AUTHORIZATION_DATA_TAG* IOTHUB_AUTHORIZATION_HANDLE;
+
+#define IOTHUB_CREDENTIAL_TYPE_VALUES       \
+    IOTHUB_CREDENTIAL_TYPE_UNKNOWN,         \
+    IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY,      \
+    IOTHUB_CREDENTIAL_TYPE_X509,            \
+    IOTHUB_CREDENTIAL_TYPE_X509_ECC,        \
+    IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN,       \
+    IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH
+
+
+MU_DEFINE_ENUM(IOTHUB_CREDENTIAL_TYPE, IOTHUB_CREDENTIAL_TYPE_VALUES);
+
+#define SAS_TOKEN_STATUS_VALUES  \
+    SAS_TOKEN_STATUS_FAILED,     \
+    SAS_TOKEN_STATUS_VALID,      \
+    SAS_TOKEN_STATUS_INVALID
+
+MU_DEFINE_ENUM(SAS_TOKEN_STATUS, SAS_TOKEN_STATUS_VALUES);
+
+MOCKABLE_FUNCTION(, IOTHUB_AUTHORIZATION_HANDLE, IoTHubClient_Auth_Create, const char*, device_key, const char*, device_id, const char*, device_sas_token, const char *, module_id);
+MOCKABLE_FUNCTION(, IOTHUB_AUTHORIZATION_HANDLE, IoTHubClient_Auth_CreateFromDeviceAuth, const char*, device_id, const char*, module_id);
+MOCKABLE_FUNCTION(, void, IoTHubClient_Auth_Destroy, IOTHUB_AUTHORIZATION_HANDLE, handle);
+MOCKABLE_FUNCTION(, IOTHUB_CREDENTIAL_TYPE, IoTHubClient_Auth_Set_x509_Type, IOTHUB_AUTHORIZATION_HANDLE, handle, bool, enable_x509);
+MOCKABLE_FUNCTION(, IOTHUB_CREDENTIAL_TYPE, IoTHubClient_Auth_Get_Credential_Type, IOTHUB_AUTHORIZATION_HANDLE, handle);
+MOCKABLE_FUNCTION(, char*, IoTHubClient_Auth_Get_SasToken, IOTHUB_AUTHORIZATION_HANDLE, handle, const char*, scope, size_t, expiry_time_relative_seconds, const char*, key_name);
+MOCKABLE_FUNCTION(, int, IoTHubClient_Auth_Set_xio_Certificate, IOTHUB_AUTHORIZATION_HANDLE, handle, XIO_HANDLE, xio);
+MOCKABLE_FUNCTION(, const char*, IoTHubClient_Auth_Get_DeviceId, IOTHUB_AUTHORIZATION_HANDLE, handle);
+MOCKABLE_FUNCTION(, const char*, IoTHubClient_Auth_Get_ModuleId, IOTHUB_AUTHORIZATION_HANDLE, handle);
+MOCKABLE_FUNCTION(, const char*, IoTHubClient_Auth_Get_DeviceKey, IOTHUB_AUTHORIZATION_HANDLE, handle);
+MOCKABLE_FUNCTION(, SAS_TOKEN_STATUS, IoTHubClient_Auth_Is_SasToken_Valid, IOTHUB_AUTHORIZATION_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, IoTHubClient_Auth_Get_x509_info, IOTHUB_AUTHORIZATION_HANDLE, handle, char**, x509_cert, char**, x509_key);
+MOCKABLE_FUNCTION(, int, IoTHubClient_Auth_Set_SasToken_Expiry, IOTHUB_AUTHORIZATION_HANDLE, handle, size_t, expiry_time_seconds);
+MOCKABLE_FUNCTION(, size_t, IoTHubClient_Auth_Get_SasToken_Expiry, IOTHUB_AUTHORIZATION_HANDLE, handle);
+
+
+#ifdef USE_EDGE_MODULES
+MOCKABLE_FUNCTION(, char*, IoTHubClient_Auth_Get_TrustBundle, IOTHUB_AUTHORIZATION_HANDLE, handle, const char*, certificate_file_name);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_AUTHORIZATION_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_diagnostic.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_diagnostic.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_diagnostic.h	(revision 389)
@@ -0,0 +1,48 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file   iothub_client_diagnostic.h
+*    @brief  The @c diagnostic is a component that helps to add predefined diagnostic
+            properties to message for end to end diagnostic purpose
+*/
+
+#ifndef IOTHUB_CLIENT_DIAGNOSTIC_H
+#define IOTHUB_CLIENT_DIAGNOSTIC_H
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#include "iothub_message.h"
+#include <stdint.h>
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C" {
+#else
+#include <stddef.h>
+#endif
+
+/** @brief diagnostic related setting */
+typedef struct IOTHUB_DIAGNOSTIC_SETTING_DATA_TAG
+{
+    uint32_t diagSamplingPercentage;
+    uint32_t currentMessageNumber;
+} IOTHUB_DIAGNOSTIC_SETTING_DATA;
+
+/**
+    * @brief    Adds diagnostic information to message if:
+    *           a. diagSetting->diagSamplingPercentage > 0 and
+    *           b. the number of current message matches sample rule specified by diagSetting->diagSamplingPercentage
+    *
+    * @param    diagSetting        Pointer to an @c IOTHUB_DIAGNOSTIC_SETTING_DATA structure
+    *
+    * @param    messageHandle    message handle
+    *
+    * @return    0 upon success
+    */
+MOCKABLE_FUNCTION(, int, IoTHubClient_Diagnostic_AddIfNecessary, IOTHUB_DIAGNOSTIC_SETTING_DATA *, diagSetting, IOTHUB_MESSAGE_HANDLE, messageHandle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_DIAGNOSTIC_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_ll_uploadtoblob.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_ll_uploadtoblob.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_ll_uploadtoblob.h	(revision 389)
@@ -0,0 +1,58 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_client_ll.h
+*    @brief     APIs that allow a user (usually a device) to communicate
+*             with an Azure IoTHub.
+*
+*    @details IoTHubClient_LL is a module that allows a user (usually a
+*             device) to communicate with an Azure IoTHub. It can send events
+*             and receive messages. At any given moment in time there can only
+*             be at most 1 message callback function.
+*
+*             This API surface contains a set of APIs that allows the user to
+*             interact with the lower layer portion of the IoTHubClient. These APIs
+*             contain @c _LL_ in their name, but retain the same functionality like the
+*             @c IoTHubClient_... APIs, with one difference. If the @c _LL_ APIs are
+*             used then the user is responsible for scheduling when the actual work done
+*             by the IoTHubClient happens (when the data is sent/received on/from the wire).
+*             This is useful for constrained devices where spinning a separate thread is
+*             often not desired.
+*/
+
+#ifndef DONT_USE_UPLOADTOBLOB
+
+#ifndef IOTHUB_CLIENT_LL_UPLOADTOBLOB_H
+#define IOTHUB_CLIENT_LL_UPLOADTOBLOB_H
+
+#include "iothub_client_core_ll.h"
+#include "internal/iothub_client_authorization.h"
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+    #define BLOCK_SIZE (4*1024*1024)
+
+    typedef struct IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE;
+
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, IoTHubClient_LL_UploadToBlob_Create, const IOTHUB_CLIENT_CONFIG*, config, IOTHUB_AUTHORIZATION_HANDLE, auth_handle);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadToBlob_Impl, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle, const char*, destinationFileName, const unsigned char*, source, size_t, size);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadToBlob_SetOption, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle, const char*, optionName, const void*, value);
+    MOCKABLE_FUNCTION(, void, IoTHubClient_LL_UploadToBlob_Destroy, IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_LL_UPLOADTOBLOB_H */
+
+#else
+#error "trying to #include iothub_client_ll_uploadtoblob.h in the presence of #define DONT_USE_UPLOADTOBLOB"
+#endif /*DONT_USE_UPLOADTOBLOB*/
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_private.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_private.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_private.h	(revision 389)
@@ -0,0 +1,76 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_CLIENT_PRIVATE_H
+#define IOTHUB_CLIENT_PRIVATE_H
+
+#include <stdbool.h>
+
+#include "azure_c_shared_utility/constbuffer.h"
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#include "iothub_message.h"
+#include "internal/iothub_transport_ll_private.h"
+#include "iothub_client_core_common.h"
+#include "iothub_client_core_ll.h"
+
+#ifdef USE_EDGE_MODULES
+#include "internal/iothub_client_edge.h"
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define CLIENT_DEVICE_TYPE_PREFIX "iothubclient"
+#define CLIENT_DEVICE_BACKSLASH "/"
+
+typedef bool(*IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX)(MESSAGE_CALLBACK_INFO* messageData, void* userContextCallback);
+
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetMessageCallback_Ex, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX, messageCallback, void*, userContextCallback);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SendMessageDisposition, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, MESSAGE_CALLBACK_INFO*, messageData, IOTHUBMESSAGE_DISPOSITION_RESULT, disposition);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetInputMessageCallbackEx, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX, eventHandlerCallbackEx, void *, userContextCallback, size_t, userContextCallbackLength);
+MOCKABLE_FUNCTION(, int, IoTHubClientCore_LL_GetTransportCallbacks, TRANSPORT_CALLBACKS_INFO*, transport_cb);
+
+#ifdef USE_EDGE_MODULES
+/* (Should be replaced after iothub_client refactor)*/
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_EDGE_HANDLE, IoTHubClientCore_LL_GetEdgeHandle, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_GenericMethodInvoke, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, deviceId, const char*, moduleId, const char*, methodName, const char*, methodPayload, unsigned int, timeout, int*, responseStatus, unsigned char**, responsePayload, size_t*, responsePayloadSize);
+#endif
+
+typedef struct IOTHUB_MESSAGE_LIST_TAG
+{
+    IOTHUB_MESSAGE_HANDLE messageHandle;
+    IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK callback;
+    void* context;
+    DLIST_ENTRY entry;
+    tickcounter_ms_t ms_timesOutAfter; /* a value of "0" means "no timeout", if the IOTHUBCLIENT_LL's handle tickcounter > msTimesOutAfer then the message shall timeout*/
+    tickcounter_ms_t message_timeout_value;
+}IOTHUB_MESSAGE_LIST;
+
+typedef struct IOTHUB_DEVICE_TWIN_TAG
+{
+    uint32_t item_id;
+    tickcounter_ms_t ms_timesOutAfter; /* a value of "0" means "no timeout", if the IOTHUBCLIENT_LL's handle tickcounter > msTimesOutAfer then the message shall timeout*/
+    IOTHUB_CLIENT_REPORTED_STATE_CALLBACK reported_state_callback;
+    CONSTBUFFER_HANDLE report_data_handle;
+    void* context;
+    DLIST_ENTRY entry;
+    IOTHUB_CLIENT_CORE_LL_HANDLE client_handle;
+    IOTHUB_DEVICE_HANDLE device_handle;
+} IOTHUB_DEVICE_TWIN;
+
+union IOTHUB_IDENTITY_INFO_TAG
+{
+    IOTHUB_DEVICE_TWIN* device_twin;
+    IOTHUB_MESSAGE_LIST* iothub_message;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_PRIVATE_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_retry_control.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_retry_control.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_client_retry_control.h	(revision 389)
@@ -0,0 +1,47 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_CLIENT_RETRY_CONTROL
+#define IOTHUB_CLIENT_RETRY_CONTROL
+
+#include <stdlib.h>
+#include <stdbool.h>
+#include "azure_c_shared_utility/optionhandler.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "iothub_client_core_ll.h"
+#include "internal/iothubtransport.h"
+#include "azure_c_shared_utility/const_defines.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+static STATIC_VAR_UNUSED const char* RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS = "initial_wait_time_in_secs";
+static STATIC_VAR_UNUSED const char* RETRY_CONTROL_OPTION_MAX_JITTER_PERCENT = "max_jitter_percent";
+static STATIC_VAR_UNUSED const char* RETRY_CONTROL_OPTION_SAVED_OPTIONS = "retry_control_saved_options";
+
+typedef enum RETRY_ACTION_TAG
+{
+    RETRY_ACTION_RETRY_NOW,
+    RETRY_ACTION_RETRY_LATER,
+    RETRY_ACTION_STOP_RETRYING
+} RETRY_ACTION;
+
+struct RETRY_CONTROL_INSTANCE_TAG;
+typedef struct RETRY_CONTROL_INSTANCE_TAG* RETRY_CONTROL_HANDLE;
+
+MOCKABLE_FUNCTION(, RETRY_CONTROL_HANDLE, retry_control_create, IOTHUB_CLIENT_RETRY_POLICY, policy, unsigned int, max_retry_time_in_secs);
+MOCKABLE_FUNCTION(, int, retry_control_should_retry, RETRY_CONTROL_HANDLE, retry_control_handle, RETRY_ACTION*, retry_action);
+MOCKABLE_FUNCTION(, void, retry_control_reset, RETRY_CONTROL_HANDLE, retry_control_handle);
+MOCKABLE_FUNCTION(, int, retry_control_set_option, RETRY_CONTROL_HANDLE, retry_control_handle, const char*, name, const void*, value);
+MOCKABLE_FUNCTION(, OPTIONHANDLER_HANDLE, retry_control_retrieve_options, RETRY_CONTROL_HANDLE, retry_control_handle);
+MOCKABLE_FUNCTION(, void, retry_control_destroy, RETRY_CONTROL_HANDLE, retry_control_handle);
+
+MOCKABLE_FUNCTION(, int, is_timeout_reached, time_t, start_time, unsigned int, timeout_in_secs, bool*, is_timed_out);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // IOTHUB_CLIENT_RETRY_CONTROL
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_transport_ll_private.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_transport_ll_private.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothub_transport_ll_private.h	(revision 389)
@@ -0,0 +1,129 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_TRANSPORT_LL_PRIVATE_H
+#define IOTHUB_TRANSPORT_LL_PRIVATE_H
+
+#include "iothub_transport_ll.h"
+
+union IOTHUB_IDENTITY_INFO_TAG;
+typedef union IOTHUB_IDENTITY_INFO_TAG IOTHUB_IDENTITY_INFO;
+
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/strings.h"
+#include "internal/iothub_client_authorization.h"
+#include "iothub_message.h"
+
+struct MESSAGE_DISPOSITION_CONTEXT_TAG;
+typedef struct MESSAGE_DISPOSITION_CONTEXT_TAG* MESSAGE_DISPOSITION_CONTEXT_HANDLE;
+typedef struct MESSAGE_CALLBACK_INFO_TAG
+{
+    IOTHUB_MESSAGE_HANDLE messageHandle;
+    MESSAGE_DISPOSITION_CONTEXT_HANDLE transportContext;
+}MESSAGE_CALLBACK_INFO;
+
+#include "iothub_client_ll.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef bool (*pfTransport_MessageCallbackFromInput)(MESSAGE_CALLBACK_INFO* messageData, void* ctx);
+    typedef bool (*pfTransport_MessageCallback)(MESSAGE_CALLBACK_INFO* messageData, void* ctx);
+    typedef void (*pfTransport_ConnectionStatusCallBack)(IOTHUB_CLIENT_CONNECTION_STATUS status, IOTHUB_CLIENT_CONNECTION_STATUS_REASON reason, void* ctx);
+    typedef void (*pfTransport_SendComplete_Callback)(PDLIST_ENTRY completed, IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* ctx);
+    typedef const char* (*pfTransport_GetOption_Product_Info_Callback)(void* ctx);
+    typedef void (*pfTransport_Twin_ReportedStateComplete_Callback)(uint32_t item_id, int status_code, void* ctx);
+    typedef void (*pfTransport_Twin_RetrievePropertyComplete_Callback)(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* ctx);
+    typedef int (*pfTransport_DeviceMethod_Complete_Callback)(const char* method_name, const unsigned char* payLoad, size_t size, METHOD_HANDLE response_id, void* ctx);
+
+    /** @brief    This struct captures device configuration. */
+    typedef struct IOTHUB_DEVICE_CONFIG_TAG
+    {
+        /** @brief    A string that identifies the device. */
+        const char* deviceId;
+
+        /** @brief    The device key used to authenticate the device. */
+        const char* deviceKey;
+
+        /** @brief    The device SAS used to authenticate the device in place of using the device key. */
+        const char* deviceSasToken;
+
+        IOTHUB_AUTHORIZATION_HANDLE authorization_module; // with either SAS Token, x509 Certs, and Device SAS Token
+
+        /** @brief  A string that identifies the module.  Optional. */
+        const char* moduleId;
+    } IOTHUB_DEVICE_CONFIG;
+
+    typedef struct TRANSPORT_CALLBACKS_INFO_TAG
+    {
+        pfTransport_MessageCallbackFromInput msg_input_cb;
+        pfTransport_MessageCallback msg_cb;
+        pfTransport_ConnectionStatusCallBack connection_status_cb;
+        pfTransport_SendComplete_Callback send_complete_cb;
+        pfTransport_GetOption_Product_Info_Callback prod_info_cb;
+        pfTransport_Twin_ReportedStateComplete_Callback twin_rpt_state_complete_cb;
+        pfTransport_Twin_RetrievePropertyComplete_Callback twin_retrieve_prop_complete_cb;
+        pfTransport_DeviceMethod_Complete_Callback method_complete_cb;
+    } TRANSPORT_CALLBACKS_INFO;
+
+    typedef STRING_HANDLE (*pfIoTHubTransport_GetHostname)(TRANSPORT_LL_HANDLE handle);
+    typedef IOTHUB_CLIENT_RESULT(*pfIoTHubTransport_SetOption)(TRANSPORT_LL_HANDLE handle, const char *optionName, const void* value);
+    typedef TRANSPORT_LL_HANDLE(*pfIoTHubTransport_Create)(const IOTHUBTRANSPORT_CONFIG* config, TRANSPORT_CALLBACKS_INFO* cb_info, void* ctx);
+    typedef void (*pfIoTHubTransport_Destroy)(TRANSPORT_LL_HANDLE handle);
+    typedef IOTHUB_DEVICE_HANDLE(*pfIotHubTransport_Register)(TRANSPORT_LL_HANDLE handle, const IOTHUB_DEVICE_CONFIG* device, PDLIST_ENTRY waitingToSend);
+    typedef void(*pfIotHubTransport_Unregister)(IOTHUB_DEVICE_HANDLE deviceHandle);
+    typedef int (*pfIoTHubTransport_Subscribe)(IOTHUB_DEVICE_HANDLE handle);
+    typedef void (*pfIoTHubTransport_Unsubscribe)(IOTHUB_DEVICE_HANDLE handle);
+    typedef void (*pfIoTHubTransport_DoWork)(TRANSPORT_LL_HANDLE handle);
+    typedef int(*pfIoTHubTransport_SetRetryPolicy)(TRANSPORT_LL_HANDLE handle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitInSeconds);
+    typedef IOTHUB_CLIENT_RESULT(*pfIoTHubTransport_GetSendStatus)(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_STATUS *iotHubClientStatus);
+    typedef int (*pfIoTHubTransport_Subscribe_DeviceTwin)(IOTHUB_DEVICE_HANDLE handle);
+    typedef void (*pfIoTHubTransport_Unsubscribe_DeviceTwin)(IOTHUB_DEVICE_HANDLE handle);
+    typedef IOTHUB_CLIENT_RESULT(*pfIoTHubTransport_GetTwinAsync)(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK completionCallback, void* callbackContext);
+    typedef IOTHUB_CLIENT_RESULT(*pfIotHubTransport_SendMessageDisposition)(MESSAGE_CALLBACK_INFO* messageData, IOTHUBMESSAGE_DISPOSITION_RESULT disposition);
+    typedef IOTHUB_PROCESS_ITEM_RESULT(*pfIoTHubTransport_ProcessItem)(TRANSPORT_LL_HANDLE handle, IOTHUB_IDENTITY_TYPE item_type, IOTHUB_IDENTITY_INFO* iothub_item);
+    typedef int(*pfIoTHubTransport_Subscribe_DeviceMethod)(IOTHUB_DEVICE_HANDLE handle);
+    typedef void(*pfIoTHubTransport_Unsubscribe_DeviceMethod)(IOTHUB_DEVICE_HANDLE handle);
+    typedef int(*pfIoTHubTransport_DeviceMethod_Response)(IOTHUB_DEVICE_HANDLE handle, METHOD_HANDLE methodId, const unsigned char* response, size_t response_size, int status_response);
+    typedef int(*pfIoTHubTransport_Subscribe_InputQueue)(IOTHUB_DEVICE_HANDLE handle);
+    typedef void(*pfIoTHubTransport_Unsubscribe_InputQueue)(IOTHUB_DEVICE_HANDLE handle);
+    typedef int(*pfIoTHubTransport_SetCallbackContext)(TRANSPORT_LL_HANDLE handle, void* ctx);
+
+#define TRANSPORT_PROVIDER_FIELDS                                                   \
+pfIotHubTransport_SendMessageDisposition IoTHubTransport_SendMessageDisposition;    \
+pfIoTHubTransport_Subscribe_DeviceMethod IoTHubTransport_Subscribe_DeviceMethod;    \
+pfIoTHubTransport_Unsubscribe_DeviceMethod IoTHubTransport_Unsubscribe_DeviceMethod;\
+pfIoTHubTransport_DeviceMethod_Response IoTHubTransport_DeviceMethod_Response;      \
+pfIoTHubTransport_Subscribe_DeviceTwin IoTHubTransport_Subscribe_DeviceTwin;        \
+pfIoTHubTransport_Unsubscribe_DeviceTwin IoTHubTransport_Unsubscribe_DeviceTwin;    \
+pfIoTHubTransport_ProcessItem IoTHubTransport_ProcessItem;                          \
+pfIoTHubTransport_GetHostname IoTHubTransport_GetHostname;                          \
+pfIoTHubTransport_SetOption IoTHubTransport_SetOption;                              \
+pfIoTHubTransport_Create IoTHubTransport_Create;                                    \
+pfIoTHubTransport_Destroy IoTHubTransport_Destroy;                                  \
+pfIotHubTransport_Register IoTHubTransport_Register;                                \
+pfIotHubTransport_Unregister IoTHubTransport_Unregister;                            \
+pfIoTHubTransport_Subscribe IoTHubTransport_Subscribe;                              \
+pfIoTHubTransport_Unsubscribe IoTHubTransport_Unsubscribe;                          \
+pfIoTHubTransport_DoWork IoTHubTransport_DoWork;                                    \
+pfIoTHubTransport_SetRetryPolicy IoTHubTransport_SetRetryPolicy;                    \
+pfIoTHubTransport_GetSendStatus IoTHubTransport_GetSendStatus;                      \
+pfIoTHubTransport_Subscribe_InputQueue IoTHubTransport_Subscribe_InputQueue;        \
+pfIoTHubTransport_Unsubscribe_InputQueue IoTHubTransport_Unsubscribe_InputQueue;    \
+pfIoTHubTransport_SetCallbackContext IoTHubTransport_SetCallbackContext;            \
+pfIoTHubTransport_GetTwinAsync IoTHubTransport_GetTwinAsync     /*there's an intentional missing ; on this line*/
+
+    struct TRANSPORT_PROVIDER_TAG
+    {
+        TRANSPORT_PROVIDER_FIELDS;
+    };
+
+    MOCKABLE_FUNCTION(, int, IoTHub_Transport_ValidateCallbacks, const TRANSPORT_CALLBACKS_INFO*, transport_cb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_TRANSPORT_LL_PRIVATE_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothubtransport.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothubtransport.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothubtransport.h	(revision 389)
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_TRANSPORT_H
+#define IOTHUB_TRANSPORT_H
+
+#include "azure_c_shared_utility/lock.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "iothub_transport_ll.h"
+#include "iothub_client_core.h"
+#include "internal/iothub_client_private.h"
+#include "internal/iothub_transport_ll_private.h"
+#include "internal/iothub_client_authorization.h"
+
+#ifndef IOTHUB_CLIENT_CORE_INSTANCE_TYPE
+typedef struct IOTHUB_CLIENT_CORE_INSTANCE_TAG* IOTHUB_CLIENT_CORE_HANDLE;
+#define IOTHUB_CLIENT_CORE_INSTANCE_TYPE
+#endif // IOTHUB_CLIENT_CORE_INSTANCE
+
+#ifdef __cplusplus
+extern "C"
+{
+#else
+#include <stdbool.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+    /** @brief  This struct captures IoTHub transport configuration. */
+    struct IOTHUBTRANSPORT_CONFIG_TAG
+    {
+        const IOTHUB_CLIENT_CONFIG* upperConfig;
+        PDLIST_ENTRY waitingToSend;
+        IOTHUB_AUTHORIZATION_HANDLE auth_module_handle;
+        const char* moduleId;
+    };
+
+    typedef void(*IOTHUB_CLIENT_MULTIPLEXED_DO_WORK)(void* iotHubClientInstance);
+
+    MOCKABLE_FUNCTION(, LOCK_HANDLE, IoTHubTransport_GetLock, TRANSPORT_HANDLE, transportHandle);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubTransport_StartWorkerThread, TRANSPORT_HANDLE, transportHandle, IOTHUB_CLIENT_CORE_HANDLE, clientHandle, IOTHUB_CLIENT_MULTIPLEXED_DO_WORK, muxDoWork);
+    MOCKABLE_FUNCTION(, bool, IoTHubTransport_SignalEndWorkerThread, TRANSPORT_HANDLE, transportHandle, IOTHUB_CLIENT_CORE_HANDLE, clientHandle);
+    MOCKABLE_FUNCTION(, void, IoTHubTransport_JoinWorkerThread, TRANSPORT_HANDLE, transportHandle, IOTHUB_CLIENT_CORE_HANDLE, clientHandle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_TRANSPORT_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothubtransport_mqtt_common.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothubtransport_mqtt_common.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/internal/iothubtransport_mqtt_common.h	(revision 389)
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUBTRANSPORT_MQTT_COMMON_H
+#define IOTHUBTRANSPORT_MQTT_COMMON_H
+
+#include "internal/iothub_transport_ll_private.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#include <cstdlib>
+#else
+#include <stdlib.h>
+#endif
+
+typedef struct MQTT_TRANSPORT_PROXY_OPTIONS_TAG
+{
+    const char* host_address;
+    int port;
+    const char* username;
+    const char* password;
+} MQTT_TRANSPORT_PROXY_OPTIONS;
+
+typedef XIO_HANDLE(*MQTT_GET_IO_TRANSPORT)(const char* fully_qualified_name, const MQTT_TRANSPORT_PROXY_OPTIONS* mqtt_transport_proxy_options);
+
+MOCKABLE_FUNCTION(, TRANSPORT_LL_HANDLE, IoTHubTransport_MQTT_Common_Create, const IOTHUBTRANSPORT_CONFIG*,  config, MQTT_GET_IO_TRANSPORT, get_io_transport, TRANSPORT_CALLBACKS_INFO*, cb_info, void*, ctx);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_Destroy, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_Common_Subscribe, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_Unsubscribe, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubTransport_MQTT_Common_GetTwinAsync, IOTHUB_DEVICE_HANDLE, handle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, completionCallback, void*, callbackContext);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_Common_DeviceMethod_Response, TRANSPORT_LL_HANDLE, handle, METHOD_HANDLE, methodId, const unsigned char*, response, size_t, response_size, int, status_response);
+MOCKABLE_FUNCTION(, IOTHUB_PROCESS_ITEM_RESULT, IoTHubTransport_MQTT_Common_ProcessItem, TRANSPORT_LL_HANDLE, handle, IOTHUB_IDENTITY_TYPE, item_type, IOTHUB_IDENTITY_INFO*, iothub_item);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_DoWork, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubTransport_MQTT_Common_GetSendStatus, TRANSPORT_LL_HANDLE, handle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubTransport_MQTT_Common_SetOption, TRANSPORT_LL_HANDLE, handle, const char*, option, const void*, value);
+MOCKABLE_FUNCTION(, TRANSPORT_LL_HANDLE, IoTHubTransport_MQTT_Common_Register, TRANSPORT_LL_HANDLE, handle, const IOTHUB_DEVICE_CONFIG*, device, PDLIST_ENTRY, waitingToSend);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_Unregister, TRANSPORT_LL_HANDLE, deviceHandle);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_Common_SetRetryPolicy, TRANSPORT_LL_HANDLE, handle, IOTHUB_CLIENT_RETRY_POLICY, retryPolicy, size_t, retryTimeoutLimitInSeconds);
+MOCKABLE_FUNCTION(, STRING_HANDLE, IoTHubTransport_MQTT_Common_GetHostname, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubTransport_MQTT_Common_SendMessageDisposition, MESSAGE_CALLBACK_INFO*, message_data, IOTHUBMESSAGE_DISPOSITION_RESULT, disposition);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_Common_Subscribe_InputQueue, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_MQTT_Common_Unsubscribe_InputQueue, TRANSPORT_LL_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, IoTHubTransport_MQTT_SetCallbackContext, TRANSPORT_LL_HANDLE, handle, void*, ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUBTRANSPORT_MQTT_COMMON_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client.h	(revision 389)
@@ -0,0 +1,392 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_client.h
+*    @brief Extends the IoTHubCLient_LL module with additional features.
+*
+*    @details IoTHubClient is a module that extends the IoTHubCLient_LL
+*             module with 2 features:
+*                - scheduling the work for the IoTHubCLient from a
+*                  thread, so that the user does not need to create their
+*                  own thread
+*                - thread-safe APIs
+*/
+
+#ifndef IOTHUB_CLIENT_H
+#define IOTHUB_CLIENT_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "iothub_transport_ll.h"
+#include "iothub_client_core_ll.h"
+#include "iothub_client_core.h"
+#include "iothub_client_ll.h"
+
+#ifndef IOTHUB_CLIENT_INSTANCE_TYPE
+typedef IOTHUB_CLIENT_CORE_HANDLE IOTHUB_CLIENT_HANDLE;
+#define IOTHUB_CLIENT_INSTANCE_TYPE
+#endif // IOTHUB_CLIENT_INSTANCE
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing
+    *             IoT Hub using the specified connection string parameter.
+    *
+    * @param    connectionString    Pointer to a character string
+    * @param    protocol            Function pointer for protocol implementation
+    *
+    *            Sample connection string:
+    *                <blockquote>
+    *                    <pre>HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessKey=[Device key goes here];</pre>
+    *                   <pre>HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessSignature=SharedAccessSignature sr=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net]/devices/[Device ID goes here]&sig=[SAS Token goes here]&se=[Expiry Time goes here];</pre>
+    *                </blockquote>
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *             Hub using the specified parameters.
+    *
+    * @param    config    Pointer to an @c IOTHUB_CLIENT_CONFIG structure
+    *
+    *            The API does not allow sharing of a connection across multiple
+    *            devices. This is a blocking call.
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_Create, const IOTHUB_CLIENT_CONFIG*, config);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *             Hub using the specified parameters.
+    *
+    * @param    transportHandle    TRANSPORT_HANDLE which represents a connection.
+    * @param    config    Pointer to an @c IOTHUB_CLIENT_CONFIG structure
+    *
+    *            The API allows sharing of a connection across multiple
+    *            devices. This is a blocking call.
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_CreateWithTransport, TRANSPORT_HANDLE, transportHandle, const IOTHUB_CLIENT_CONFIG*, config);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *             Hub using the device auth module.
+    *
+    * @param    iothub_uri    Pointer to an ioThub hostname received in the registration process
+    * @param    device_id    Pointer to the device Id of the device
+    * @param    protocol    Function pointer for protocol implementation
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_HANDLE, IoTHubClient_CreateFromDeviceAuth, const char*, iothub_uri, const char*, device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+
+    /**
+    * @brief    Disposes of resources allocated by the IoT Hub client. This is a
+    *             blocking call.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    */
+    MOCKABLE_FUNCTION(, void, IoTHubClient_Destroy, IOTHUB_CLIENT_HANDLE, iotHubClientHandle);
+
+    /**
+    * @brief    Asynchronous call to send the message specified by @p eventMessageHandle.
+    *
+    * @param    iotHubClientHandle               The handle created by a call to the create function.
+    * @param    eventMessageHandle               The handle to an IoT Hub message.
+    * @param    eventConfirmationCallback      The callback specified by the device for receiving
+    *                                         confirmation of the delivery of the IoT Hub message.
+    *                                         This callback can be expected to invoke the
+    *                                         ::IoTHubClient_SendEventAsync function for the
+    *                                         same message in an attempt to retry sending a failing
+    *                                         message. The user can specify a @c NULL value here to
+    *                                         indicate that no callback is required.
+    * @param    userContextCallback            User specified context that will be provided to the
+    *                                         callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SendEventAsync, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This function returns the current sending status for IoTHubClient.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    iotHubClientStatus        The sending state is populated at the address pointed
+    *                                     at by this parameter. The value will be set to
+    *                                     @c IOTHUBCLIENT_SENDSTATUS_IDLE if there is currently
+    *                                     no item to be sent and @c IOTHUBCLIENT_SENDSTATUS_BUSY
+    *                                     if there are.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_GetSendStatus, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus);
+
+    /**
+    * @brief    Sets up the message callback to be invoked when IoT Hub issues a
+    *             message to the device. This is a blocking call.
+    *
+    * @param    iotHubClientHandle               The handle created by a call to the create function.
+    * @param    messageCallback                The callback specified by the device for receiving
+    *                                         messages from IoT Hub.
+    * @param    userContextCallback            User specified context that will be provided to the
+    *                                         callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetMessageCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                       The handle created by a call to the create function.
+    * @param    connectionStatusCallback                The callback specified by the device for receiving
+    *                                                 updates about the status of the connection to IoT Hub.
+    * @param    userContextCallback                    User specified context that will be provided to the
+    *                                                 callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetConnectionStatusCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK, connectionStatusCallback, void*, userContextCallback);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                       The handle created by a call to the create function.
+    * @param    retryPolicy                             The policy to use to reconnect to IoT Hub when a
+    *                                               connection drops.
+    * @param    retryTimeoutLimitInSeconds            Maximum amount of time(seconds) to attempt reconnection when a
+    *                                               connection drops to IOT Hub.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetRetryPolicy, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY, retryPolicy, size_t, retryTimeoutLimitInSeconds);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                       The handle created by a call to the create function.
+    * @param    retryPolicy                             Out parameter containing the policy to use to reconnect to IoT Hub.
+    * @param    retryTimeoutLimitInSeconds            Out parameter containing maximum amount of time in seconds to attempt reconnection
+    to IOT Hub.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_GetRetryPolicy, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY*, retryPolicy, size_t*, retryTimeoutLimitInSeconds);
+
+    /**
+    * @brief    This function returns in the out parameter @p lastMessageReceiveTime
+    *             what was the value of the @c time function when the last message was
+    *             received at the client.
+    *
+    * @param    iotHubClientHandle                The handle created by a call to the create function.
+    * @param    lastMessageReceiveTime          Out parameter containing the value of @c time function
+    *                                             when the last message was received.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_GetLastMessageReceiveTime, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime);
+
+    /**
+    * @brief    This API sets a runtime option identified by parameter @p optionName
+    *             to a value pointed to by @p value. @p optionName and the data type
+    *             @p value is pointing to are specific for every option.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    * @param    optionName              Name of the option.
+    * @param    value                  The value.
+    *
+    *            The options that can be set via this API are:
+    *                - @b timeout - the maximum time in milliseconds a communication is
+    *                  allowed to use. @p value is a pointer to an @c unsigned @c int with
+    *                  the timeout value in milliseconds. This is only supported for the HTTP
+    *                  protocol as of now. When the HTTP protocol uses CURL, the meaning of
+    *                  the parameter is <em>total request time</em>. When the HTTP protocol uses
+    *                  winhttp, the meaning is the same as the @c dwSendTimeout and
+    *                  @c dwReceiveTimeout parameters of the
+    *                  <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa384116(v=vs.85).aspx">
+    *                  WinHttpSetTimeouts</a> API.
+    *                - @b CURLOPT_LOW_SPEED_LIMIT - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_LOW_SPEED_TIME - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_FORBID_REUSE - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_FRESH_CONNECT - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_VERBOSE - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b messageTimeout - the maximum time in milliseconds until a message
+    *                 is timeouted. The time starts at IoTHubClient_SendEventAsync. By default,
+    *                 messages do not expire. @p is a pointer to a uint64_t
+    *                - @b svc2cl_keep_alive_timeout_secs - the AMQP service side keep alive interval in seconds.
+    *                 After the connection established the client requests the server to set the
+    *                 keep alive interval for given time.
+    *                 If it is not set then the default 240 sec applies.
+    *                 If it is set to zero the server will not send keep alive messages to the client.
+    *                - @b cl2svc_keep_alive_send_ratio - the AMQP client side keep alive interval in seconds.
+    *                 After the connection established the server requests the client to set the
+    *                 keep alive interval for given time.
+    *                 If it is not set then the default ratio of 1/2 is applied.
+    *                 The ratio has to be greater than 0.0 and equal to or less than 0.9
+
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetOption, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value);
+
+    /**
+    * @brief    This API specifies a call back to be used when the device receives a state update.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    deviceTwinCallback        The callback specified by the device client to be used for updating
+    *                                    the desired state. The callback will be called in response to a
+    *                                    request send by the IoTHub services. The payload will be passed to the
+    *                                    callback, along with two version numbers:
+    *                                        - Desired:
+    *                                        - LastSeenReported:
+    * @param    userContextCallback        User specified context that will be provided to the
+    *                                     callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetDeviceTwinCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This API sends a report of the device's properties and their current values.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    reportedState            The current device property values to be 'reported' to the IoTHub.
+    * @param    reportedStateCallback    The callback specified by the device client to be called with the
+    *                                    result of the transaction.
+    * @param    userContextCallback        User specified context that will be provided to the
+    *                                     callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SendReportedState, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This API sets callback for cloud to device method call.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    deviceMethodCallback    The callback which will be called by IoTHub.
+    * @param    userContextCallback        User specified context that will be provided to the
+    *                                     callback. This can be @c NULL.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetDeviceMethodCallback, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This API sets callback for async cloud to device method call.
+    *
+    * @param    iotHubClientHandle                The handle created by a call to the create function.
+    * @param    inboundDeviceMethodCallback     The callback which will be called by IoTHub.
+    * @param    userContextCallback                User specified context that will be provided to the
+    *                                             callback. This can be @c NULL.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_SetDeviceMethodCallback_Ex, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK, inboundDeviceMethodCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This API responses to a asnyc method callback identified the methodId.
+    *
+    * @param    iotHubClientHandle      The handle created by a call to the create function.
+    * @param    methodId                The methodId of the Device Method callback.
+    * @param    response                The response data for the method callback.
+    * @param    response_size           The size of the response data buffer.
+    * @param    status_response         The status response of the method callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_DeviceMethodResponse, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, METHOD_HANDLE, methodId, const unsigned char*, response, size_t, response_size, int, statusCode);
+
+#ifndef DONT_USE_UPLOADTOBLOB
+    /**
+    * @brief    IoTHubClient_UploadToBlobAsync uploads data from memory to a file in Azure Blob Storage.
+    *
+    * @param    iotHubClientHandle                    The handle created by a call to the IoTHubClient_Create function.
+    * @param    destinationFileName                    The name of the file to be created in Azure Blob Storage.
+    * @param    source                              The source of data.
+    * @param    size                                The size of data.
+    * @param    iotHubClientFileUploadCallback      A callback to be invoked when the file upload operation has finished.
+    * @param    context                             A user-provided context to be passed to the file upload callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_UploadToBlobAsync, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size, IOTHUB_CLIENT_FILE_UPLOAD_CALLBACK, iotHubClientFileUploadCallback, void*, context);
+
+    /**
+    ** DEPRECATED: Use IoTHubClient_UploadMultipleBlocksToBlobAsyncEx instead **
+    * @brief                          Uploads a file to a Blob storage in chunks, fed through the callback function provided by the user.
+    * @remarks                        This function allows users to upload large files in chunks, not requiring the whole file content to be passed in memory.
+    * @param iotHubClientHandle       The handle created by a call to the IoTHubClient_Create function.
+    * @param destinationFileName      The name of the file to be created in Azure Blob Storage.
+    * @param getDataCallback          A callback to be invoked to acquire the file chunks to be uploaded, as well as to indicate the status of the upload of the previous block.
+    * @param context                  Any data provided by the user to serve as context on getDataCallback.
+    * @returns                        An IOTHUB_CLIENT_RESULT value indicating the success or failure of the API call.
+    ** DEPRECATED: Use IoTHubClient_UploadMultipleBlocksToBlobAsyncEx instead **
+    */
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_UploadMultipleBlocksToBlobAsync, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK, getDataCallback, void*, context);
+
+    /**
+    * @brief                          Uploads a file to a Blob storage in chunks, fed through the callback function provided by the user.
+    * @remarks                        This function allows users to upload large files in chunks, not requiring the whole file content to be passed in memory.
+    * @param iotHubClientHandle       The handle created by a call to the IoTHubClient_Create function.
+    * @param destinationFileName      The name of the file to be created in Azure Blob Storage.
+    * @param getDataCallbackEx        A callback to be invoked to acquire the file chunks to be uploaded, as well as to indicate the status of the upload of the previous block.
+    * @param context                  Any data provided by the user to serve as context on getDataCallback.
+    * @returns                        An IOTHUB_CLIENT_RESULT value indicating the success or failure of the API call.*/
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_UploadMultipleBlocksToBlobAsyncEx, IOTHUB_CLIENT_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context);
+
+#endif /* DONT_USE_UPLOADTOBLOB */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core.h	(revision 389)
@@ -0,0 +1,71 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_client_core.h
+*    @brief Extends the IoTHubClientCore_LL module with additional features.
+*
+*    @details IoTHubClientCore is a module that extends the IoTHubClientCore_LL
+*             module with 2 features:
+*                - scheduling the work for the IoTHubCLient from a
+*                  thread, so that the user does not need to create their
+*                  own thread
+*                - thread-safe APIs
+*/
+
+#ifndef IOTHUB_CLIENT_CORE_H
+#define IOTHUB_CLIENT_CORE_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#include "iothub_client_core_ll.h"
+
+#ifndef IOTHUB_CLIENT_CORE_INSTANCE_TYPE
+typedef struct IOTHUB_CLIENT_CORE_INSTANCE_TAG* IOTHUB_CLIENT_CORE_HANDLE;
+#define IOTHUB_CLIENT_CORE_INSTANCE_TYPE
+#endif // IOTHUB_CLIENT_CORE_INSTANCE
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_HANDLE, IoTHubClientCore_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_HANDLE, IoTHubClientCore_Create, const IOTHUB_CLIENT_CONFIG*, config);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_HANDLE, IoTHubClientCore_CreateWithTransport, TRANSPORT_HANDLE, transportHandle, const IOTHUB_CLIENT_CONFIG*, config);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_HANDLE, IoTHubClientCore_CreateFromDeviceAuth, const char*, iothub_uri, const char*, device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+    MOCKABLE_FUNCTION(, void, IoTHubClientCore_Destroy, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SendEventAsync, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_GetSendStatus, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetMessageCallback, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetConnectionStatusCallback, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK, connectionStatusCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetRetryPolicy, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY, retryPolicy, size_t, retryTimeoutLimitInSeconds);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_GetRetryPolicy, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY*, retryPolicy, size_t*, retryTimeoutLimitInSeconds);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_GetLastMessageReceiveTime, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetOption, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetDeviceTwinCallback, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SendReportedState, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_GetTwinAsync, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetDeviceMethodCallback, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetDeviceMethodCallback_Ex, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK, inboundDeviceMethodCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_DeviceMethodResponse, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, METHOD_HANDLE, methodId, const unsigned char*, response, size_t, response_size, int, statusCode);
+
+#ifndef DONT_USE_UPLOADTOBLOB
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_UploadToBlobAsync, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size, IOTHUB_CLIENT_FILE_UPLOAD_CALLBACK, iotHubClientFileUploadCallback, void*, context);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_UploadMultipleBlocksToBlobAsync, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK, getDataCallback, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context);
+#endif /* DONT_USE_UPLOADTOBLOB */
+
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SendEventToOutputAsync, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, const char*, outputName, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_SetInputMessageCallback, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, const char*, inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, eventHandlerCallback, void*, userContextCallback);
+
+#ifdef USE_EDGE_MODULES
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_HANDLE, IoTHubClientCore_CreateFromEnvironment, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_GenericMethodInvoke, IOTHUB_CLIENT_CORE_HANDLE, iotHubClientHandle, const char*, deviceId, const char*, moduleId, const char*, methodName, const char*, methodPayload, unsigned int, timeout, IOTHUB_METHOD_INVOKE_CALLBACK, methodInvokeCallback, void*, context);
+#endif /* USE_EDGE_MODULES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_CORE_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core_common.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core_common.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core_common.h	(revision 389)
@@ -0,0 +1,240 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/* Shared structures and enums for iothub convenience layer and LL layer */
+
+#ifndef IOTHUB_CLIENT_CORE_COMMON_H
+#define IOTHUB_CLIENT_CORE_COMMON_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#include "iothub_transport_ll.h"
+#include "iothub_message.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define IOTHUB_CLIENT_FILE_UPLOAD_RESULT_VALUES \
+    FILE_UPLOAD_OK, \
+    FILE_UPLOAD_ERROR
+
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_FILE_UPLOAD_RESULT, IOTHUB_CLIENT_FILE_UPLOAD_RESULT_VALUES)
+        typedef void(*IOTHUB_CLIENT_FILE_UPLOAD_CALLBACK)(IOTHUB_CLIENT_FILE_UPLOAD_RESULT result, void* userContextCallback);
+
+#define IOTHUB_CLIENT_RESULT_VALUES       \
+    IOTHUB_CLIENT_OK,                     \
+    IOTHUB_CLIENT_INVALID_ARG,            \
+    IOTHUB_CLIENT_ERROR,                  \
+    IOTHUB_CLIENT_INVALID_SIZE,           \
+    IOTHUB_CLIENT_INDEFINITE_TIME
+
+    /** @brief Enumeration specifying the status of calls to various APIs in this module.
+    */
+
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_RESULT, IOTHUB_CLIENT_RESULT_VALUES);
+
+    typedef void(*IOTHUB_METHOD_INVOKE_CALLBACK)(IOTHUB_CLIENT_RESULT result, int responseStatus, unsigned char* responsePayload, size_t responsePayloadSize, void* context);
+
+#define IOTHUB_CLIENT_RETRY_POLICY_VALUES     \
+    IOTHUB_CLIENT_RETRY_NONE,                   \
+    IOTHUB_CLIENT_RETRY_IMMEDIATE,                  \
+    IOTHUB_CLIENT_RETRY_INTERVAL,      \
+    IOTHUB_CLIENT_RETRY_LINEAR_BACKOFF,      \
+    IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF,                 \
+    IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER,                 \
+    IOTHUB_CLIENT_RETRY_RANDOM
+
+    /** @brief Enumeration passed in by the IoT Hub when the event confirmation
+    *           callback is invoked to indicate status of the event processing in
+    *           the hub.
+    */
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_RETRY_POLICY, IOTHUB_CLIENT_RETRY_POLICY_VALUES);
+
+    struct IOTHUBTRANSPORT_CONFIG_TAG;
+    typedef struct IOTHUBTRANSPORT_CONFIG_TAG IOTHUBTRANSPORT_CONFIG;
+
+#define IOTHUB_CLIENT_STATUS_VALUES       \
+    IOTHUB_CLIENT_SEND_STATUS_IDLE,       \
+    IOTHUB_CLIENT_SEND_STATUS_BUSY
+
+    /** @brief Enumeration returned by the ::IoTHubClient_LL_GetSendStatus
+    *           API to indicate the current sending status of the IoT Hub client.
+    */
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_STATUS, IOTHUB_CLIENT_STATUS_VALUES);
+
+#define IOTHUB_IDENTITY_TYPE_VALUE  \
+    IOTHUB_TYPE_TELEMETRY,          \
+    IOTHUB_TYPE_DEVICE_TWIN,        \
+    IOTHUB_TYPE_DEVICE_METHODS,     \
+    IOTHUB_TYPE_EVENT_QUEUE
+    MU_DEFINE_ENUM(IOTHUB_IDENTITY_TYPE, IOTHUB_IDENTITY_TYPE_VALUE);
+
+#define IOTHUB_PROCESS_ITEM_RESULT_VALUE    \
+    IOTHUB_PROCESS_OK,                      \
+    IOTHUB_PROCESS_ERROR,                   \
+    IOTHUB_PROCESS_NOT_CONNECTED,           \
+    IOTHUB_PROCESS_CONTINUE
+    MU_DEFINE_ENUM(IOTHUB_PROCESS_ITEM_RESULT, IOTHUB_PROCESS_ITEM_RESULT_VALUE);
+
+#define IOTHUBMESSAGE_DISPOSITION_RESULT_VALUES \
+    IOTHUBMESSAGE_ACCEPTED, \
+    IOTHUBMESSAGE_REJECTED, \
+    IOTHUBMESSAGE_ABANDONED
+
+    /** @brief Enumeration returned by the callback which is invoked whenever the
+    *           IoT Hub sends a message to the device.
+    */
+    MU_DEFINE_ENUM(IOTHUBMESSAGE_DISPOSITION_RESULT, IOTHUBMESSAGE_DISPOSITION_RESULT_VALUES);
+
+#define IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_VALUES \
+    IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_SUCCESS,   \
+    IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_ERROR      \
+
+    /** @brief Enumeration returned by remotely executed functions
+    */
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_IOTHUB_METHOD_STATUS, IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_VALUES);
+
+
+#define IOTHUB_CLIENT_CONFIRMATION_RESULT_VALUES     \
+    IOTHUB_CLIENT_CONFIRMATION_OK,                   \
+    IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY,      \
+    IOTHUB_CLIENT_CONFIRMATION_MESSAGE_TIMEOUT,      \
+    IOTHUB_CLIENT_CONFIRMATION_ERROR                 \
+
+    /** @brief Enumeration passed in by the IoT Hub when the event confirmation
+    *           callback is invoked to indicate status of the event processing in
+    *           the hub.
+    */
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_CONFIRMATION_RESULT, IOTHUB_CLIENT_CONFIRMATION_RESULT_VALUES);
+
+#define IOTHUB_CLIENT_CONNECTION_STATUS_VALUES             \
+    IOTHUB_CLIENT_CONNECTION_AUTHENTICATED,                \
+    IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED               \
+
+
+    /** @brief Enumeration passed in by the IoT Hub when the connection status
+    *           callback is invoked to indicate status of the connection in
+    *           the hub.
+    */
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_CONNECTION_STATUS, IOTHUB_CLIENT_CONNECTION_STATUS_VALUES);
+
+#define IOTHUB_CLIENT_CONNECTION_STATUS_REASON_VALUES      \
+    IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN,            \
+    IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED,              \
+    IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL,               \
+    IOTHUB_CLIENT_CONNECTION_RETRY_EXPIRED,                \
+    IOTHUB_CLIENT_CONNECTION_NO_NETWORK,                   \
+    IOTHUB_CLIENT_CONNECTION_COMMUNICATION_ERROR,          \
+    IOTHUB_CLIENT_CONNECTION_OK                            \
+
+    /** @brief Enumeration passed in by the IoT Hub when the connection status
+    *           callback is invoked to indicate status of the connection in
+    *           the hub.
+    */
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_CONNECTION_STATUS_REASON, IOTHUB_CLIENT_CONNECTION_STATUS_REASON_VALUES);
+
+#define TRANSPORT_TYPE_VALUES \
+    TRANSPORT_LL, /*LL comes from "LowLevel" */ \
+    TRANSPORT_THREADED
+
+    MU_DEFINE_ENUM(TRANSPORT_TYPE, TRANSPORT_TYPE_VALUES);
+
+#define DEVICE_TWIN_UPDATE_STATE_VALUES \
+    DEVICE_TWIN_UPDATE_COMPLETE, \
+    DEVICE_TWIN_UPDATE_PARTIAL
+
+    MU_DEFINE_ENUM(DEVICE_TWIN_UPDATE_STATE, DEVICE_TWIN_UPDATE_STATE_VALUES);
+
+    typedef void(*IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK)(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback);
+    typedef void(*IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK)(IOTHUB_CLIENT_CONNECTION_STATUS result, IOTHUB_CLIENT_CONNECTION_STATUS_REASON reason, void* userContextCallback);
+    typedef IOTHUBMESSAGE_DISPOSITION_RESULT (*IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC)(IOTHUB_MESSAGE_HANDLE message, void* userContextCallback);
+
+    typedef void(*IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK)(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* userContextCallback);
+    typedef void(*IOTHUB_CLIENT_REPORTED_STATE_CALLBACK)(int status_code, void* userContextCallback);
+    typedef int(*IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC)(const char* method_name, const unsigned char* payload, size_t size, unsigned char** response, size_t* response_size, void* userContextCallback);
+    typedef int(*IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK)(const char* method_name, const unsigned char* payload, size_t size, METHOD_HANDLE method_id, void* userContextCallback);
+
+
+#define IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT_VALUES \
+    IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_OK, \
+    IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_ABORT
+
+    MU_DEFINE_ENUM(IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT_VALUES);
+
+    /**
+    *  @brief           Callback invoked by IoTHubClient_UploadMultipleBlocksToBlobAsync requesting the chunks of data to be uploaded.
+    *  @param result    The result of the upload of the previous block of data provided by the user (IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX only)
+    *  @param data      Next block of data to be uploaded, to be provided by the user when this callback is invoked.
+    *  @param size      Size of the data parameter.
+    *  @param context   User context provided on the call to IoTHubClient_UploadMultipleBlocksToBlobAsync.
+    *  @remarks         If the user wants to abort the upload, the callback should return IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_ABORT
+    *                   It should return IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_OK otherwise.
+    *                   If a NULL is provided for parameter "data" and/or zero is provided for "size", the user indicates to the client that the complete file has been uploaded.
+    *                   In such case this callback will be invoked only once more to indicate the status of the final block upload.
+    *                   If result is not FILE_UPLOAD_OK, the upload is cancelled and this callback stops being invoked.
+    *                   When this callback is called for the last time, no data or size is expected, so data and size are NULL
+    */
+    typedef void(*IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK)(IOTHUB_CLIENT_FILE_UPLOAD_RESULT result, unsigned char const ** data, size_t* size, void* context);
+    typedef IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT(*IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX)(IOTHUB_CLIENT_FILE_UPLOAD_RESULT result, unsigned char const ** data, size_t* size, void* context);
+
+    /** @brief    This struct captures IoTHub client configuration. */
+    typedef struct IOTHUB_CLIENT_CONFIG_TAG
+    {
+        /** @brief A function pointer that is passed into the @c IoTHubClientCreate.
+        *    A function definition for AMQP is defined in the include @c iothubtransportamqp.h.
+        *   A function definition for HTTP is defined in the include @c iothubtransporthttp.h
+        *   A function definition for MQTT is defined in the include @c iothubtransportmqtt.h */
+        IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol;
+
+        /** @brief    A string that identifies the device. */
+        const char* deviceId;
+
+        /** @brief    The device key used to authenticate the device.
+        If neither deviceSasToken nor deviceKey is present then the authentication is assumed x509.*/
+        const char* deviceKey;
+
+        /** @brief    The device SAS Token used to authenticate the device in place of device key.
+        If neither deviceSasToken nor deviceKey is present then the authentication is assumed x509.*/
+        const char* deviceSasToken;
+
+        /** @brief    The IoT Hub name to which the device is connecting. */
+        const char* iotHubName;
+
+        /** @brief    IoT Hub suffix goes here, e.g., private.azure-devices-int.net. */
+        const char* iotHubSuffix;
+
+        const char* protocolGatewayHostName;
+    } IOTHUB_CLIENT_CONFIG;
+
+    /** @brief    This struct captures IoTHub client device configuration. */
+    typedef struct IOTHUB_CLIENT_DEVICE_CONFIG_TAG
+    {
+        /** @brief A function pointer that is passed into the @c IoTHubClientCreate.
+        *    A function definition for AMQP is defined in the include @c iothubtransportamqp.h.
+        *   A function definition for HTTP is defined in the include @c iothubtransporthttp.h
+        *   A function definition for MQTT is defined in the include @c iothubtransportmqtt.h */
+        IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol;
+
+        /** @brief a transport handle implementing the protocol */
+        void * transportHandle;
+
+        /** @brief    A string that identifies the device. */
+        const char* deviceId;
+
+        /** @brief    The device key used to authenticate the device.
+        x509 authentication is is not supported for multiplexed connections*/
+        const char* deviceKey;
+
+        /** @brief    The device SAS Token used to authenticate the device in place of device key.
+        x509 authentication is is not supported for multiplexed connections.*/
+        const char* deviceSasToken;
+    } IOTHUB_CLIENT_DEVICE_CONFIG;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_CORE_COMMON_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core_ll.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core_ll.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_core_ll.h	(revision 389)
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_client_core_ll.h
+*    @brief     APIs that allow a user (usually a device) to communicate
+*             with an Azure IoTHub.
+*
+*    @details IoTHubClientCore_LL is a module that allows a user (usually a
+*             device) to communicate with an Azure IoTHub. It can send events
+*             and receive messages. At any given moment in time there can only
+*             be at most 1 message callback function.
+*
+*             This API surface contains a set of APIs that allows the user to
+*             interact with the lower layer portion of the IoTHubClient. These APIs
+*             contain @c _LL_ in their name, but retain the same functionality like the
+*             @c IoTHubClient_... APIs, with one difference. If the @c _LL_ APIs are
+*             used then the user is responsible for scheduling when the actual work done
+*             by the IoTHubClient happens (when the data is sent/received on/from the wire).
+*             This is useful for constrained devices where spinning a separate thread is
+*             often not desired.
+*/
+
+#ifndef IOTHUB_CLIENT_CORE_LL_H
+#define IOTHUB_CLIENT_CORE_LL_H
+
+typedef struct IOTHUB_CLIENT_CORE_LL_HANDLE_DATA_TAG* IOTHUB_CLIENT_CORE_LL_HANDLE;
+
+#include <time.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "iothub_transport_ll.h"
+#include "iothub_client_core_common.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_LL_HANDLE, IoTHubClientCore_LL_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_LL_HANDLE, IoTHubClientCore_LL_Create, const IOTHUB_CLIENT_CONFIG*, config);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_LL_HANDLE, IoTHubClientCore_LL_CreateWithTransport, const IOTHUB_CLIENT_DEVICE_CONFIG*, config);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_LL_HANDLE, IoTHubClientCore_LL_CreateFromDeviceAuth, const char*, iothub_uri, const char*, device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+     MOCKABLE_FUNCTION(, void, IoTHubClientCore_LL_Destroy, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SendEventAsync, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_GetSendStatus, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetMessageCallback, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetConnectionStatusCallback, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK, connectionStatusCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetRetryPolicy, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY, retryPolicy, size_t, retryTimeoutLimitInSeconds);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_GetRetryPolicy, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY*, retryPolicy, size_t*, retryTimeoutLimitInSeconds);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_GetLastMessageReceiveTime, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime);
+     MOCKABLE_FUNCTION(, void, IoTHubClientCore_LL_DoWork, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetOption, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetDeviceTwinCallback, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SendReportedState, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_GetTwinAsync, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetDeviceMethodCallback, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetDeviceMethodCallback_Ex, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK, inboundDeviceMethodCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_DeviceMethodResponse, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, METHOD_HANDLE, methodId, const unsigned char*, response, size_t, respSize, int, statusCode);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SendEventToOutputAsync, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, const char*, outputName, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_SetInputMessageCallback, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, eventHandlerCallback, void*, userContextCallback);
+
+#ifndef DONT_USE_UPLOADTOBLOB
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_UploadToBlob, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_UploadMultipleBlocksToBlob, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK, getDataCallback, void*, context);
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClientCore_LL_UploadMultipleBlocksToBlobEx, IOTHUB_CLIENT_CORE_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context);
+#endif /*DONT_USE_UPLOADTOBLOB*/
+
+#ifdef USE_EDGE_MODULES
+    MOCKABLE_FUNCTION(, IOTHUB_CLIENT_CORE_LL_HANDLE, IoTHubClientCore_LL_CreateFromEnvironment, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_CORE_LL_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_ll.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_ll.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_ll.h	(revision 389)
@@ -0,0 +1,404 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_client_ll.h
+*    @brief     APIs that allow a user (usually a device) to communicate
+*             with an Azure IoTHub.
+*
+*    @details IoTHubClient_LL is a module that allows a user (usually a
+*             device) to communicate with an Azure IoTHub. It can send events
+*             and receive messages. At any given moment in time there can only
+*             be at most 1 message callback function.
+*
+*             This API surface contains a set of APIs that allows the user to
+*             interact with the lower layer portion of the IoTHubClient. These APIs
+*             contain @c _LL_ in their name, but retain the same functionality like the
+*             @c IoTHubClient_... APIs, with one difference. If the @c _LL_ APIs are
+*             used then the user is responsible for scheduling when the actual work done
+*             by the IoTHubClient happens (when the data is sent/received on/from the wire).
+*             This is useful for constrained devices where spinning a separate thread is
+*             often not desired.
+*/
+
+#ifndef IOTHUB_CLIENT_LL_H
+#define IOTHUB_CLIENT_LL_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <time.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#include "iothub_client_core_common.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef struct IOTHUB_CLIENT_CORE_LL_HANDLE_DATA_TAG* IOTHUB_CLIENT_LL_HANDLE;
+
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing
+    *             IoT Hub using the specified connection string parameter.
+    *
+    * @param    connectionString    Pointer to a character string
+    * @param    protocol            Function pointer for protocol implementation
+    *
+    *            Sample connection string:
+    *                <blockquote>
+    *                    <pre>HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessKey=[Device key goes here];</pre>
+    *                </blockquote>
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *             Hub using the specified parameters.
+    *
+    * @param    config    Pointer to an @c IOTHUB_CLIENT_CONFIG structure
+    *
+    *            The API does not allow sharing of a connection across multiple
+    *            devices. This is a blocking call.
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_Create, const IOTHUB_CLIENT_CONFIG*, config);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *             Hub using an existing transport.
+    *
+    * @param    config    Pointer to an @c IOTHUB_CLIENT_DEVICE_CONFIG structure
+    *
+    *            The API *allows* sharing of a connection across multiple
+    *            devices. This is a blocking call.
+    *
+    * @return    A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_CreateWithTransport, const IOTHUB_CLIENT_DEVICE_CONFIG*, config);
+
+     /**
+     * @brief    Creates a IoT Hub client for communication with an existing IoT
+     *             Hub using the device auth module.
+     *
+     * @param    iothub_uri    Pointer to an ioThub hostname received in the registration process
+     * @param    device_id    Pointer to the device Id of the device
+     * @param    device_auth_handle    a device auth handle used to generate the connection string
+     * @param    protocol            Function pointer for protocol implementation
+     *
+     * @return    A non-NULL @c IOTHUB_CLIENT_LL_HANDLE value that is used when
+     *             invoking other functions for IoT Hub client and @c NULL on failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_LL_HANDLE, IoTHubClient_LL_CreateFromDeviceAuth, const char*, iothub_uri, const char*, device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+
+    /**
+    * @brief    Disposes of resources allocated by the IoT Hub client. This is a
+    *             blocking call.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    */
+     MOCKABLE_FUNCTION(, void, IoTHubClient_LL_Destroy, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle);
+
+    /**
+    * @brief    Asynchronous call to send the message specified by @p eventMessageHandle.
+    *
+    * @param    iotHubClientHandle               The handle created by a call to the create function.
+    * @param    eventMessageHandle               The handle to an IoT Hub message.
+    * @param    eventConfirmationCallback      The callback specified by the device for receiving
+    *                                         confirmation of the delivery of the IoT Hub message.
+    *                                         This callback can be expected to invoke the
+    *                                         ::IoTHubClient_LL_SendEventAsync function for the
+    *                                         same message in an attempt to retry sending a failing
+    *                                         message. The user can specify a @c NULL value here to
+    *                                         indicate that no callback is required.
+    * @param    userContextCallback            User specified context that will be provided to the
+    *                                         callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SendEventAsync, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This function returns the current sending status for IoTHubClient.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    iotHubClientStatus        The sending state is populated at the address pointed
+    *                                     at by this parameter. The value will be set to
+    *                                     @c IOTHUBCLIENT_SENDSTATUS_IDLE if there is currently
+    *                                     no item to be sent and @c IOTHUBCLIENT_SENDSTATUS_BUSY
+    *                                     if there are.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_GetSendStatus, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus);
+
+    /**
+    * @brief    Sets up the message callback to be invoked when IoT Hub issues a
+    *             message to the device. This is a blocking call.
+    *
+    * @param    iotHubClientHandle               The handle created by a call to the create function.
+    * @param    messageCallback                The callback specified by the device for receiving
+    *                                         messages from IoT Hub.
+    * @param    userContextCallback            User specified context that will be provided to the
+    *                                         callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetMessageCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                       The handle created by a call to the create function.
+    * @param    connectionStatusCallback                The callback specified by the device for receiving
+    *                                                 updates about the status of the connection to IoT Hub.
+    * @param    userContextCallback                    User specified context that will be provided to the
+    *                                                 callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetConnectionStatusCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK, connectionStatusCallback, void*, userContextCallback);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                       The handle created by a call to the create function.
+    * @param    retryPolicy                             The policy to use to reconnect to IoT Hub when a
+    *                                               connection drops.
+    * @param    retryTimeoutLimitInSeconds            Maximum amount of time(seconds) to attempt reconnection when a
+    *                                               connection drops to IOT Hub.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetRetryPolicy, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY, retryPolicy, size_t, retryTimeoutLimitInSeconds);
+
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                       The handle created by a call to the create function.
+    * @param    retryPolicy                             Out parameter containing the policy to use to reconnect to IoT Hub.
+    * @param    retryTimeoutLimitInSeconds            Out parameter containing maximum amount of time in seconds to attempt reconnection
+                                                    to IOT Hub.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_GetRetryPolicy, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY*, retryPolicy, size_t*, retryTimeoutLimitInSeconds);
+
+    /**
+    * @brief    This function returns in the out parameter @p lastMessageReceiveTime
+    *             what was the value of the @c time function when the last message was
+    *             received at the client.
+    *
+    * @param    iotHubClientHandle                The handle created by a call to the create function.
+    * @param    lastMessageReceiveTime          Out parameter containing the value of @c time function
+    *                                             when the last message was received.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_GetLastMessageReceiveTime, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime);
+
+    /**
+    * @brief    This function is meant to be called by the user when work
+    *             (sending/receiving) can be done by the IoTHubClient.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    *
+    *            All IoTHubClient interactions (in regards to network traffic
+    *            and/or user level callbacks) are the effect of calling this
+    *            function and they take place synchronously inside _DoWork.
+    */
+     MOCKABLE_FUNCTION(, void, IoTHubClient_LL_DoWork, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle);
+
+    /**
+    * @brief    This API sets a runtime option identified by parameter @p optionName
+    *             to a value pointed to by @p value. @p optionName and the data type
+    *             @p value is pointing to are specific for every option.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    * @param    optionName              Name of the option.
+    * @param    value                  The value.
+    *
+    *            The options that can be set via this API are:
+    *                - @b timeout - the maximum time in milliseconds a communication is
+    *                  allowed to use. @p value is a pointer to an @c unsigned @c int with
+    *                  the timeout value in milliseconds. This is only supported for the HTTP
+    *                  protocol as of now. When the HTTP protocol uses CURL, the meaning of
+    *                  the parameter is <em>total request time</em>. When the HTTP protocol uses
+    *                  winhttp, the meaning is the same as the @c dwSendTimeout and
+    *                  @c dwReceiveTimeout parameters of the
+    *                  <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa384116(v=vs.85).aspx">
+    *                  WinHttpSetTimeouts</a> API.
+    *                - @b CURLOPT_LOW_SPEED_LIMIT - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_LOW_SPEED_TIME - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_FORBID_REUSE - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_FRESH_CONNECT - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_VERBOSE - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *              - @b keepalive - available for MQTT protocol.  Integer value that sets the
+    *                interval in seconds when pings are sent to the server.
+    *              - @b logtrace - available for MQTT protocol.  Boolean value that turns on and
+    *                off the diagnostic logging.
+    *              - @b sas_token_lifetime - available for MQTT & AMQP protocol.  size_t value that that determines the
+    *                sas token timeout length.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetOption, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value);
+
+    /**
+    * @brief    This API specifies a call back to be used when the device receives a desired state update.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    deviceTwinCallback        The callback specified by the device client to be used for updating
+    *                                    the desired state. The callback will be called in response to patch
+    *                                    request send by the IoTHub services. The payload will be passed to the
+    *                                    callback, along with two version numbers:
+    *                                        - Desired:
+    *                                        - LastSeenReported:
+    * @param    userContextCallback        User specified context that will be provided to the
+    *                                     callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetDeviceTwinCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This API sneds a report of the device's properties and their current values.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    reportedState            The current device property values to be 'reported' to the IoTHub.
+    * @param    reportedStateCallback    The callback specified by the device client to be called with the
+    *                                    result of the transaction.
+    * @param    userContextCallback        User specified context that will be provided to the
+    *                                     callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SendReportedState, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback);
+
+     /**
+     * @brief    This API sets callback for cloud to device method call.
+     *
+     * @param    iotHubClientHandle        The handle created by a call to the create function.
+     * @param    deviceMethodCallback    The callback which will be called by IoTHub.
+     * @param    userContextCallback        User specified context that will be provided to the
+     *                                     callback. This can be @c NULL.
+     *
+     * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetDeviceMethodCallback, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback);
+
+     /**
+     * @brief    This API sets callback for async cloud to device method call.
+     *
+     * @param    iotHubClientHandle                The handle created by a call to the create function.
+     * @param    inboundDeviceMethodCallback     The callback which will be called by IoTHub.
+     * @param    userContextCallback                User specified context that will be provided to the
+     *                                             callback. This can be @c NULL.
+     *
+     * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_SetDeviceMethodCallback_Ex, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK, inboundDeviceMethodCallback, void*, userContextCallback);
+
+     /**
+     * @brief    This API responses to a asnyc method callback identified the methodId.
+     *
+     * @param    iotHubClientHandle      The handle created by a call to the create function.
+     * @param    methodId                The methodId of the Device Method callback.
+     * @param    response                The response data for the method callback.
+     * @param    response_size           The size of the response data buffer.
+     * @param    status_response         The status response of the method callback.
+     *
+     * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_DeviceMethodResponse, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, METHOD_HANDLE, methodId, const unsigned char*, response, size_t, respSize, int, statusCode);
+
+#ifndef DONT_USE_UPLOADTOBLOB
+    /**
+    * @brief    This API uploads to Azure Storage the content pointed to by @p source having the size @p size
+    *           under the blob name devicename/@pdestinationFileName
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    destinationFileName     name of the file.
+    * @param    source                  pointer to the source for file content (can be NULL)
+    * @param    size                    the size of the source in memory (if @p source is NULL then size needs to be 0).
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadToBlob, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size);
+
+     /**
+     ** DEPRECATED: Use IoTHubClient_LL_UploadMultipleBlocksToBlobAsyncEx instead **
+     * @brief    This API uploads to Azure Storage the content provided block by block by @p getDataCallback
+     *           under the blob name devicename/@pdestinationFileName
+     *
+     * @param    iotHubClientHandle      The handle created by a call to the create function.
+     * @param    destinationFileName     name of the file.
+     * @param    getDataCallback         A callback to be invoked to acquire the file chunks to be uploaded, as well as to indicate the status of the upload of the previous block.
+     * @param    context                 Any data provided by the user to serve as context on getDataCallback.
+     *
+     * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     ** DEPRECATED: Use IoTHubClient_LL_UploadMultipleBlocksToBlobAsyncEx instead **
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadMultipleBlocksToBlob, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK, getDataCallback, void*, context);
+
+     /**
+     * @brief    This API uploads to Azure Storage the content provided block by block by @p getDataCallback
+     *           under the blob name devicename/@pdestinationFileName
+     *
+     * @param    iotHubClientHandle      The handle created by a call to the create function.
+     * @param    destinationFileName     name of the file.
+     * @param    getDataCallbackEx       A callback to be invoked to acquire the file chunks to be uploaded, as well as to indicate the status of the upload of the previous block.
+     * @param    context                 Any data provided by the user to serve as context on getDataCallback.
+     *
+     * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubClient_LL_UploadMultipleBlocksToBlobEx, IOTHUB_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context);
+
+#endif /*DONT_USE_UPLOADTOBLOB*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_LL_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_options.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_options.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_options.h	(revision 389)
@@ -0,0 +1,85 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_CLIENT_OPTIONS_H
+#define IOTHUB_CLIENT_OPTIONS_H
+
+#include "azure_c_shared_utility/const_defines.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    typedef struct IOTHUB_PROXY_OPTIONS_TAG
+    {
+        const char* host_address;
+        const char* username;
+        const char* password;
+    } IOTHUB_PROXY_OPTIONS;
+
+    static STATIC_VAR_UNUSED const char* OPTION_LOG_TRACE = "logtrace";
+    static STATIC_VAR_UNUSED const char* OPTION_X509_CERT = "x509certificate";
+    static STATIC_VAR_UNUSED const char* OPTION_X509_PRIVATE_KEY = "x509privatekey";
+    static STATIC_VAR_UNUSED const char* OPTION_KEEP_ALIVE = "keepalive";
+    static STATIC_VAR_UNUSED const char* OPTION_CONNECTION_TIMEOUT = "connect_timeout";
+
+    static STATIC_VAR_UNUSED const char* OPTION_PROXY_HOST = "proxy_address";
+    static STATIC_VAR_UNUSED const char* OPTION_PROXY_USERNAME = "proxy_username";
+    static STATIC_VAR_UNUSED const char* OPTION_PROXY_PASSWORD = "proxy_password";
+
+    static STATIC_VAR_UNUSED const char* OPTION_SAS_TOKEN_LIFETIME = "sas_token_lifetime";
+    static STATIC_VAR_UNUSED const char* OPTION_SAS_TOKEN_REFRESH_TIME = "sas_token_refresh_time";
+    static STATIC_VAR_UNUSED const char* OPTION_CBS_REQUEST_TIMEOUT = "cbs_request_timeout";
+
+    static STATIC_VAR_UNUSED const char* OPTION_MIN_POLLING_TIME = "MinimumPollingTime";
+    static STATIC_VAR_UNUSED const char* OPTION_BATCHING = "Batching";
+
+    /* DEPRECATED:: OPTION_MESSAGE_TIMEOUT is DEPRECATED! Use OPTION_SERVICE_SIDE_KEEP_ALIVE_FREQ_SECS for AMQP; MQTT has no option available. OPTION_MESSAGE_TIMEOUT legacy variable will be kept for back-compat.  */
+    static STATIC_VAR_UNUSED const char* OPTION_MESSAGE_TIMEOUT = "messageTimeout";
+    static STATIC_VAR_UNUSED const char* OPTION_BLOB_UPLOAD_TIMEOUT_SECS = "blob_upload_timeout_secs";
+    static STATIC_VAR_UNUSED const char* OPTION_PRODUCT_INFO = "product_info";
+
+    /*
+    * @brief    Turns on automatic URL encoding of message properties + system properties. Only valid for use with MQTT Transport
+    */
+    static STATIC_VAR_UNUSED const char* OPTION_AUTO_URL_ENCODE_DECODE = "auto_url_encode_decode";
+
+    /*
+    * @brief Informs the service of what is the maximum period the client will wait for a keep-alive message from the service.
+    *        The service must send keep-alives before this timeout is reached, otherwise the client will trigger its re-connection logic.
+    *        Setting this option to a low value results in more aggressive/responsive re-connection by the client.
+    *        The default value for this option is 240 seconds, and the minimum allowed is usually 5 seconds.
+    *        To virtually disable the keep-alives from the service (and consequently the keep-alive timeout control on the client-side), set this option to a high value (e.g., UINT_MAX).
+    */
+    static STATIC_VAR_UNUSED const char* OPTION_SERVICE_SIDE_KEEP_ALIVE_FREQ_SECS = "svc2cl_keep_alive_timeout_secs";
+
+    /* DEPRECATED:: OPTION_C2D_KEEP_ALIVE_FREQ_SECS is DEPRECATED!  Use OPTION_SERVICE_SIDE_KEEP_ALIVE_FREQ_SECS, but OPTION_C2D_KEEP_ALIVE_FREQ_SECS legacy variable kept for back-compat.  */
+    static STATIC_VAR_UNUSED const char* OPTION_C2D_KEEP_ALIVE_FREQ_SECS = "c2d_keep_alive_freq_secs";
+
+    /*
+    * @brief Ratio to be used for client side pings in AMQP protocol.
+    *        The client must use this ratio to send keep-alives before service side remote idle timeout is reached, otherwise the service will disconnect the client.
+    *        The default value for this option is 1/2 of the remote idle value sent by the service.
+    *        For AMQP remote idle set to 4 minutes, default client ping will be 2 minutes. For AMQP remote idle set to 25 minutes configured via per Hub basis, the default ping will be 12.5 minutes.
+    */
+    static STATIC_VAR_UNUSED const char* OPTION_REMOTE_IDLE_TIMEOUT_RATIO = "cl2svc_keep_alive_send_ratio";
+
+    /*
+    * @brief This option should be used instead of OPTION_MESSAGE_TIMEOUT if using AMQP protocol.
+    *        It defines the maximum ammount of time, in seconds, the client will wait for a telemetry message to complete sending before returning it with a IOTHUB_CLIENT_CONFIRMATION_MESSAGE_TIMEOUT error.
+    *        The default value 5 (five) minutes.
+    *        This option is applicable only to AMQP protocol.
+    */
+    static STATIC_VAR_UNUSED const char* OPTION_EVENT_SEND_TIMEOUT_SECS = "event_send_timeout_secs";
+
+    //diagnostic sampling percentage value, [0-100]
+    static STATIC_VAR_UNUSED const char* OPTION_DIAGNOSTIC_SAMPLING_PERCENTAGE = "diag_sampling_percentage";
+
+    static STATIC_VAR_UNUSED const char* OPTION_DO_WORK_FREQUENCY_IN_MS = "do_work_freq_ms";
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_CLIENT_OPTIONS_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_version.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_version.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_client_version.h	(revision 389)
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_client_version.h
+*    @brief Functions for managing the client SDK version.
+*/
+
+#ifndef IOTHUB_CLIENT_VERSION_H
+#define IOTHUB_CLIENT_VERSION_H
+
+#define IOTHUB_SDK_VERSION "1.3.1"
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    /**
+     * @brief   Returns a pointer to a null terminated string containing the
+     *          current IoT Hub Client SDK version.
+     *
+     * @return  Pointer to a null terminated string containing the
+     *          current IoT Hub Client SDK version.
+     */
+    MOCKABLE_FUNCTION(, const char*, IoTHubClient_GetVersionString);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // IOTHUB_CLIENT_VERSION_H
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_device_client_ll.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_device_client_ll.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_device_client_ll.h	(revision 389)
@@ -0,0 +1,396 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file iothub_device_client_ll.h
+*    @brief     APIs that allow a user (usually a device) to communicate
+*             with an Azure IoTHub.
+*
+*    @details IoTHubDeviceClient_LL is a module that allows a user (usually a
+*             device) to communicate with an Azure IoTHub. It can send events
+*             and receive messages. At any given moment in time there can only
+*             be at most 1 message callback function.
+*
+*             This API surface contains a set of APIs that allows the user to
+*             interact with the lower layer portion of the IoTHubClient. These APIs
+*             contain @c _LL_ in their name, but retain the same functionality like the
+*             @c IoTHubDeviceClient_... APIs, with one difference. If the @c _LL_ APIs are
+*             used then the user is responsible for scheduling when the actual work done
+*             by the IoTHubClient happens (when the data is sent/received on/from the wire).
+*             This is useful for constrained devices where spinning a separate thread is
+*             often not desired.
+*/
+
+#ifndef IOTHUB_DEVICE_CLIENT_LL_H
+#define IOTHUB_DEVICE_CLIENT_LL_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#include "iothub_transport_ll.h"
+#include "iothub_client_core_ll.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef struct IOTHUB_CLIENT_CORE_LL_HANDLE_DATA_TAG* IOTHUB_DEVICE_CLIENT_LL_HANDLE;
+
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing
+    *           IoT Hub using the specified connection string parameter.
+    *
+    * @param    connectionString    Pointer to a character string
+    * @param    protocol            Function pointer for protocol implementation
+    *
+    *            Sample connection string:
+    *                <blockquote>
+    *                    <pre>HostName=[IoT Hub name goes here].[IoT Hub suffix goes here, e.g., private.azure-devices-int.net];DeviceId=[Device ID goes here];SharedAccessKey=[Device key goes here];</pre>
+    *                </blockquote>
+    *
+    * @return    A non-NULL @c IOTHUB_DEVICE_CLIENT_LL_HANDLE value that is used when
+    *             invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_DEVICE_CLIENT_LL_HANDLE, IoTHubDeviceClient_LL_CreateFromConnectionString, const char*, connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *           Hub using the specified parameters.
+    *
+    * @param    config    Pointer to an @c IOTHUB_CLIENT_CONFIG structure
+    *
+    *           The API does not allow sharing of a connection across multiple
+    *           devices. This is a blocking call.
+    *
+    * @return    A non-NULL @c IOTHUB_DEVICE_CLIENT_LL_HANDLE value that is used when
+    *            invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_DEVICE_CLIENT_LL_HANDLE, IoTHubDeviceClient_LL_Create, const IOTHUB_CLIENT_CONFIG*, config);
+
+    /**
+    * @brief    Creates a IoT Hub client for communication with an existing IoT
+    *           Hub using an existing transport.
+    *
+    * @param    config    Pointer to an @c IOTHUB_CLIENT_DEVICE_CONFIG structure
+    *
+    *           The API *allows* sharing of a connection across multiple
+    *           devices. This is a blocking call.
+    *
+    * @return   A non-NULL @c IOTHUB_DEVICE_CLIENT_LL_HANDLE value that is used when
+    *           invoking other functions for IoT Hub client and @c NULL on failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_DEVICE_CLIENT_LL_HANDLE, IoTHubDeviceClient_LL_CreateWithTransport, const IOTHUB_CLIENT_DEVICE_CONFIG*, config);
+
+     /**
+     * @brief    Creates a IoT Hub client for communication with an existing IoT
+     *           Hub using the device auth module.
+     *
+     * @param    iothub_uri             Pointer to an ioThub hostname received in the registration process
+     * @param    device_id              Pointer to the device Id of the device
+     * @param    device_auth_handle     A device auth handle used to generate the connection string
+     * @param    protocol               Function pointer for protocol implementation
+     *
+     * @return   A non-NULL @c IOTHUB_DEVICE_CLIENT_LL_HANDLE value that is used when
+     *           invoking other functions for IoT Hub client and @c NULL on failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_DEVICE_CLIENT_LL_HANDLE, IoTHubDeviceClient_LL_CreateFromDeviceAuth, const char*, iothub_uri, const char*, device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol);
+
+    /**
+    * @brief    Disposes of resources allocated by the IoT Hub client. This is a
+    *           blocking call.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    */
+     MOCKABLE_FUNCTION(, void, IoTHubDeviceClient_LL_Destroy, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle);
+
+    /**
+    * @brief    Asynchronous call to send the message specified by @p eventMessageHandle.
+    *
+    * @param    iotHubClientHandle              The handle created by a call to the create function.
+    * @param    eventMessageHandle              The handle to an IoT Hub message.
+    * @param    eventConfirmationCallback       The callback specified by the device for receiving
+    *                                           confirmation of the delivery of the IoT Hub message.
+    *                                           This callback can be expected to invoke the
+    *                                           ::IoTHubDeviceClient_LL_SendEventAsync function for the
+    *                                           same message in an attempt to retry sending a failing
+    *                                           message. The user can specify a @c NULL value here to
+    *                                           indicate that no callback is required.
+    * @param    userContextCallback             User specified context that will be provided to the
+    *                                           callback. This can be @c NULL.
+    *
+    *           @b NOTE: The application behavior is undefined if the user calls
+    *           the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SendEventAsync, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_MESSAGE_HANDLE, eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, eventConfirmationCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This function returns the current sending status for IoTHubClient.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    iotHubClientStatus        The sending state is populated at the address pointed
+    *                                     at by this parameter. The value will be set to
+    *                                     @c IOTHUBCLIENT_SENDSTATUS_IDLE if there is currently
+    *                                     no item to be sent and @c IOTHUBCLIENT_SENDSTATUS_BUSY
+    *                                     if there are.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_GetSendStatus, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_STATUS*, iotHubClientStatus);
+
+    /**
+    * @brief    Sets up the message callback to be invoked when IoT Hub issues a
+    *           message to the device. This is a blocking call.
+    *
+    * @param    iotHubClientHandle              The handle created by a call to the create function.
+    * @param    messageCallback                 The callback specified by the device for receiving
+    *                                           messages from IoT Hub.
+    * @param    userContextCallback             User specified context that will be provided to the
+    *                                           callback. This can be @c NULL.
+    *
+    *           @b NOTE: The application behavior is undefined if the user calls
+    *           the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetMessageCallback, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC, messageCallback, void*, userContextCallback);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle              The handle created by a call to the create function.
+    * @param    connectionStatusCallback        The callback specified by the device for receiving
+    *                                           updates about the status of the connection to IoT Hub.
+    * @param    userContextCallback             User specified context that will be provided to the
+    *                                           callback. This can be @c NULL.
+    *
+    *           @b NOTE: The application behavior is undefined if the user calls
+    *           the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetConnectionStatusCallback, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK, connectionStatusCallback, void*, userContextCallback);
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle              The handle created by a call to the create function.
+    * @param    retryPolicy                     The policy to use to reconnect to IoT Hub when a
+    *                                           connection drops.
+    * @param    retryTimeoutLimitInSeconds      Maximum amount of time(seconds) to attempt reconnection when a
+    *                                           connection drops to IOT Hub.
+    *
+    *           @b NOTE: The application behavior is undefined if the user calls
+    *           the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetRetryPolicy, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY, retryPolicy, size_t, retryTimeoutLimitInSeconds);
+
+
+    /**
+    * @brief    Sets up the connection status callback to be invoked representing the status of
+    * the connection to IOT Hub. This is a blocking call.
+    *
+    * @param    iotHubClientHandle                  The handle created by a call to the create function.
+    * @param    retryPolicy                         Out parameter containing the policy to use to reconnect to IoT Hub.
+    * @param    retryTimeoutLimitInSeconds          Out parameter containing maximum amount of time in seconds to attempt reconnection
+                                                    to IOT Hub.
+    *
+    *           @b NOTE: The application behavior is undefined if the user calls
+    *           the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_GetRetryPolicy, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY*, retryPolicy, size_t*, retryTimeoutLimitInSeconds);
+
+    /**
+    * @brief    This function returns in the out parameter @p lastMessageReceiveTime
+    *           what was the value of the @c time function when the last message was
+    *           received at the client.
+    *
+    * @param    iotHubClientHandle          The handle created by a call to the create function.
+    * @param    lastMessageReceiveTime      Out parameter containing the value of @c time function
+    *                                       when the last message was received.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_GetLastMessageReceiveTime, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, time_t*, lastMessageReceiveTime);
+
+    /**
+    * @brief    This function MUST be called by the user so work (sending/receiving data on the wire,
+    *           computing and enforcing timeout controls, managing the connection to the IoT Hub) can
+    *           be done by the IoTHubClient.
+    *           The recommended call frequency is at least once every 100 milliseconds.
+    *
+    * @param    iotHubClientHandle    The handle created by a call to the create function.
+    *
+    *           All IoTHubClient interactions (in regards to network traffic
+    *           and/or user level callbacks) are the effect of calling this
+    *           function and they take place synchronously inside _DoWork.
+    */
+     MOCKABLE_FUNCTION(, void, IoTHubDeviceClient_LL_DoWork, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle);
+
+    /**
+    * @brief    This API sets a runtime option identified by parameter @p optionName
+    *           to a value pointed to by @p value. @p optionName and the data type
+    *           @p value is pointing to are specific for every option.
+    *
+    * @param    iotHubClientHandle      The handle created by a call to the create function.
+    * @param    optionName              Name of the option.
+    * @param    value                   The value.
+    *
+    *           The options that can be set via this API are:
+    *                - @b timeout - the maximum time in milliseconds a communication is
+    *                  allowed to use. @p value is a pointer to an @c unsigned @c int with
+    *                  the timeout value in milliseconds. This is only supported for the HTTP
+    *                  protocol as of now. When the HTTP protocol uses CURL, the meaning of
+    *                  the parameter is <em>total request time</em>. When the HTTP protocol uses
+    *                  winhttp, the meaning is the same as the @c dwSendTimeout and
+    *                  @c dwReceiveTimeout parameters of the
+    *                  <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa384116(v=vs.85).aspx">
+    *                  WinHttpSetTimeouts</a> API.
+    *                - @b CURLOPT_LOW_SPEED_LIMIT - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_LOW_SPEED_TIME - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_FORBID_REUSE - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_FRESH_CONNECT - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *                - @b CURLOPT_VERBOSE - only available for HTTP protocol and only
+    *                  when CURL is used. It has the same meaning as CURL's option with the same
+    *                  name. @p value is pointer to a long.
+    *              - @b keepalive - available for MQTT protocol.  Integer value that sets the
+    *                interval in seconds when pings are sent to the server.
+    *              - @b logtrace - available for MQTT protocol.  Boolean value that turns on and
+    *                off the diagnostic logging.
+    *              - @b sas_token_lifetime - available for MQTT & AMQP protocol.  size_t value that that determines the
+    *                sas token timeout length.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetOption, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, optionName, const void*, value);
+
+    /**
+    * @brief   This API specifies a callback to be used when the device receives a desired state update.
+    *
+    * @param   iotHubClientHandle        The handle created by a call to the create function.
+    * @param   deviceTwinCallback        The callback specified by the device client to be used for updating
+    *                                    the desired state. The callback will be called in response to patch
+    *                                    request send by the IoTHub services. The payload will be passed to the
+    *                                    callback, along with two version numbers:
+    *                                        - Desired:
+    *                                        - LastSeenReported:
+    * @param   userContextCallback       User specified context that will be provided to the
+    *                                    callback. This can be @c NULL.
+    *
+    *           @b NOTE: The application behavior is undefined if the user calls
+    *           the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetDeviceTwinCallback, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+
+    /**
+    * @brief    This API sends a report of the device's properties and their current values.
+    *
+    * @param    iotHubClientHandle        The handle created by a call to the create function.
+    * @param    reportedState             The current device property values to be 'reported' to the IoTHub.
+    * @param    reportedStateCallback     The callback specified by the device client to be called with the
+    *                                     result of the transaction.
+    * @param    userContextCallback       User specified context that will be provided to the
+    *                                     callback. This can be @c NULL.
+    *
+    *            @b NOTE: The application behavior is undefined if the user calls
+    *            the ::IoTHubDeviceClient_LL_Destroy function from within any callback.
+    *
+    * @return    IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SendReportedState, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, const unsigned char*, reportedState, size_t, size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK, reportedStateCallback, void*, userContextCallback);
+
+     /**
+     * @brief	This API enabled the device to request the full device twin (with all the desired and reported properties) on demand.
+     *
+     * @param	iotHubClientHandle		The handle created by a call to the create function.
+     * @param	deviceTwinCallback	    The callback specified by the device client to receive the Twin document.
+     * @param	userContextCallback		User specified context that will be provided to the
+     * 									callback. This can be @c NULL.
+     *
+     *			@b NOTE: The application behavior is undefined if the user calls
+     *			the ::IoTHubClient_LL_Destroy function from within any callback.
+     *
+     * @return	IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_GetTwinAsync, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK, deviceTwinCallback, void*, userContextCallback);
+
+     /**
+     * @brief    This API sets the callback for async cloud to device method calls.
+     *
+     * @param    iotHubClientHandle                 The handle created by a call to the create function.
+     * @param    inboundDeviceMethodCallback        The callback which will be called by IoTHub.
+     * @param    userContextCallback                User specified context that will be provided to the
+     *                                              callback. This can be @c NULL.
+     *
+     * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_SetDeviceMethodCallback, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC, deviceMethodCallback, void*, userContextCallback);
+
+     /**
+     * @brief    This API responds to an asnyc method callback identified the methodId.
+     *
+     * @param    iotHubClientHandle      The handle created by a call to the create function.
+     * @param    methodId                The methodId of the Device Method callback.
+     * @param    response                The response data for the method callback.
+     * @param    response_size           The size of the response data buffer.
+     * @param    status_response         The status response of the method callback.
+     *
+     * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_DeviceMethodResponse, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, METHOD_HANDLE, methodId, const unsigned char*, response, size_t, respSize, int, statusCode);
+
+#ifndef DONT_USE_UPLOADTOBLOB
+    /**
+    * @brief    This API uploads to Azure Storage the content pointed to by @p source having the size @p size
+    *           under the blob name devicename/@pdestinationFileName
+    *
+    * @param    iotHubClientHandle      The handle created by a call to the create function.
+    * @param    destinationFileName     name of the file.
+    * @param    source                  pointer to the source for file content (can be NULL)
+    * @param    size                    the size of the source in memory (if @p source is NULL then size needs to be 0).
+    *
+    * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+    */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_UploadToBlob, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, const unsigned char*, source, size_t, size);
+
+     /**
+     * @brief    This API uploads to Azure Storage the content provided block by block by @p getDataCallback
+     *           under the blob name devicename/@pdestinationFileName
+     *
+     * @param    iotHubClientHandle      The handle created by a call to the create function.
+     * @param    destinationFileName     name of the file.
+     * @param    getDataCallbackEx       A callback to be invoked to acquire the file chunks to be uploaded, as well as to indicate the status of the upload of the previous block.
+     * @param    context                 Any data provided by the user to serve as context on getDataCallback.
+     *
+     * @return   IOTHUB_CLIENT_OK upon success or an error code upon failure.
+     */
+     MOCKABLE_FUNCTION(, IOTHUB_CLIENT_RESULT, IoTHubDeviceClient_LL_UploadMultipleBlocksToBlob, IOTHUB_DEVICE_CLIENT_LL_HANDLE, iotHubClientHandle, const char*, destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX, getDataCallbackEx, void*, context);
+
+#endif /*DONT_USE_UPLOADTOBLOB*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_DEVICE_CLIENT_LL_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_message.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_message.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_message.h	(revision 389)
@@ -0,0 +1,362 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+/** @file   iothub_message.h
+*    @brief  The @c IoTHub_Message component encapsulates one message that
+*           can be transferred by an IoT hub client.
+*/
+
+#ifndef IOTHUB_MESSAGE_H
+#define IOTHUB_MESSAGE_H
+
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/map.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+extern "C"
+{
+#else
+#include <stddef.h>
+#endif
+
+#define IOTHUB_MESSAGE_RESULT_VALUES         \
+    IOTHUB_MESSAGE_OK,                       \
+    IOTHUB_MESSAGE_INVALID_ARG,              \
+    IOTHUB_MESSAGE_INVALID_TYPE,             \
+    IOTHUB_MESSAGE_ERROR                     \
+
+/** @brief Enumeration specifying the status of calls to various
+*  APIs in this module.
+*/
+MU_DEFINE_ENUM(IOTHUB_MESSAGE_RESULT, IOTHUB_MESSAGE_RESULT_VALUES);
+
+#define IOTHUBMESSAGE_CONTENT_TYPE_VALUES \
+IOTHUBMESSAGE_BYTEARRAY, \
+IOTHUBMESSAGE_STRING, \
+IOTHUBMESSAGE_UNKNOWN \
+
+/** @brief Enumeration specifying the content type of the a given
+* message.
+*/
+MU_DEFINE_ENUM(IOTHUBMESSAGE_CONTENT_TYPE, IOTHUBMESSAGE_CONTENT_TYPE_VALUES);
+
+typedef struct IOTHUB_MESSAGE_HANDLE_DATA_TAG* IOTHUB_MESSAGE_HANDLE;
+
+/** @brief diagnostic related data*/
+typedef struct IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_TAG
+{
+    char* diagnosticId;
+    char* diagnosticCreationTimeUtc;
+}IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA, *IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE;
+
+static const char DIAG_CREATION_TIME_UTC_PROPERTY_NAME[] = "diag_creation_time_utc";
+
+/**
+* @brief   Creates a new IoT hub message from a byte array. The type of the
+*          message will be set to @c IOTHUBMESSAGE_BYTEARRAY.
+*
+* @param   byteArray   The byte array from which the message is to be created.
+* @param   size        The size of the byte array.
+*
+* @return  A valid @c IOTHUB_MESSAGE_HANDLE if the message was successfully
+*          created or @c NULL in case an error occurs.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_HANDLE, IoTHubMessage_CreateFromByteArray, const unsigned char*, byteArray, size_t, size);
+
+/**
+* @brief   Creates a new IoT hub message from a null terminated string.  The
+*          type of the message will be set to @c IOTHUBMESSAGE_STRING.
+*
+* @param   source  The null terminated string from which the message is to be
+*                  created.
+*
+* @return  A valid @c IOTHUB_MESSAGE_HANDLE if the message was successfully
+*          created or @c NULL in case an error occurs.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_HANDLE, IoTHubMessage_CreateFromString, const char*, source);
+
+/**
+* @brief   Creates a new IoT hub message with the content identical to that
+*          of the @p iotHubMessageHandle parameter.
+*
+* @param   iotHubMessageHandle Handle to the message that is to be cloned.
+*
+* @return  A valid @c IOTHUB_MESSAGE_HANDLE if the message was successfully
+*          cloned or @c NULL in case an error occurs.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_HANDLE, IoTHubMessage_Clone, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Fetches a pointer and size for the data associated with the IoT
+*          hub message handle. If the content type of the message is not
+*          @c IOTHUBMESSAGE_BYTEARRAY then the function returns
+*          @c IOTHUB_MESSAGE_INVALID_ARG.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   buffer              Pointer to the memory location where the
+*                              pointer to the buffer will be written.
+* @param   size                The size of the buffer will be written to
+*                              this address.
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the byte array was fetched successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_GetByteArray, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const unsigned char**, buffer, size_t*, size);
+
+/**
+* @brief   Returns the null terminated string stored in the message.
+*          If the content type of the message is not @c IOTHUBMESSAGE_STRING
+*          then the function returns @c NULL.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  @c NULL if an error occurs or a pointer to the stored null
+*          terminated string otherwise.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetString, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Returns the content type of the message given by parameter
+*          @c iotHubMessageHandle.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @remarks This function retrieves the standardized type of the payload, which indicates if @c iotHubMessageHandle was created using a String or a Byte Array.
+*
+* @return  An @c IOTHUBMESSAGE_CONTENT_TYPE value.
+*/
+MOCKABLE_FUNCTION(, IOTHUBMESSAGE_CONTENT_TYPE, IoTHubMessage_GetContentType, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets the content-type of the message payload, as per supported values on RFC 2046.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @param   contentType String defining the type of the payload (e.g., text/plain).
+*
+* @return  An @c IOTHUB_MESSAGE_RESULT value.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetContentTypeSystemProperty, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, contentType);
+
+/**
+* @brief   Returns the content-type of the message payload, if defined.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A string with the content-type value if defined (or NULL otherwise).
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetContentTypeSystemProperty, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets the content-encoding of the message payload, as per supported values on RFC 2616.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @param   contentEncoding String defining the encoding of the payload (e.g., utf-8).
+*
+* @return  An @c IOTHUB_MESSAGE_RESULT value.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetContentEncodingSystemProperty, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, contentEncoding);
+
+/**
+* @brief   Returns the content-encoding of the message payload, if defined.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A string with the content-encoding value if defined (or NULL otherwise).
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetContentEncodingSystemProperty, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+** DEPRECATED: Use IoTHubMessage_SetProperty and IoTHubMessage_GetProperty instead. **
+* @brief   Gets a handle to the message's properties map.
+*          Note that when sending messages via the HTTP transport, the key names in the map must not contain spaces.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A @c MAP_HANDLE pointing to the properties map for this message.
+*/
+MOCKABLE_FUNCTION(, MAP_HANDLE, IoTHubMessage_Properties, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets a property on a Iothub Message.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @param   key name of the property to set.  Note that when sending messages via the HTTP transport, this value must not contain spaces.
+*
+* @param   value of the property to set.
+*
+* @return  An @c IOTHUB_MESSAGE_RESULT value indicating the result of setting the property.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetProperty, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, key, const char*, value);
+
+/**
+* @brief   Gets a IotHub Message's properties item.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @param   key name of the property to retrieve.
+*
+* @return  A string with the property's value, or NULL if it does not exist in the properties list.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetProperty, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, key);
+
+/**
+* @brief   Gets the MessageId from the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const char* pointing to the Message Id.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetMessageId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets the MessageId for the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   messageId Pointer to the memory location of the messageId
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the messageId was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetMessageId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, messageId);
+
+/**
+* @brief   Gets the CorrelationId from the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const char* pointing to the Correlation Id.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetCorrelationId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets the CorrelationId for the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   correlationId Pointer to the memory location of the messageId
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the messageId was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetCorrelationId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, correlationId);
+
+/**
+* @brief   Gets the DiagnosticData from the IOTHUB_MESSAGE_HANDLE. CAUTION: SDK user should not call it directly, it is for internal use only.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* pointing to the diagnostic property data.
+*/
+MOCKABLE_FUNCTION(, const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA*, IoTHubMessage_GetDiagnosticPropertyData, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets the DiagnosticData for the IOTHUB_MESSAGE_HANDLE. CAUTION: SDK user should not call it directly, it is for internal use only.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   diagnosticData Pointer to the memory location of the diagnosticData
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the DiagnosticData was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetDiagnosticPropertyData, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA*, diagnosticData);
+
+/**
+* @brief   Gets the output name from the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const char* pointing to the Output Id.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetOutputName, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+
+/**
+* @brief   Sets output for named queues. CAUTION: SDK user should not call it directly, it is for internal use only.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   outputName Pointer to the queue to output message to
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the DiagnosticData was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetOutputName, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, outputName);
+
+
+/**
+* @brief   Gets the input name from the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const char* pointing to the Input Id.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetInputName, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets input for named queues. CAUTION: SDK user should not call it directly, it is for internal use only.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   inputName Pointer to the queue to input message to
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the DiagnosticData was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetInputName, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, inputName);
+
+/**
+* @brief   Gets the module name from the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const char* pointing to the connection module Id.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetConnectionModuleId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets connection module ID. CAUTION: SDK user should not call it directly, it is for internal use only.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   connectionModuleId Pointer to the module ID of connector
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the DiagnosticData was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetConnectionModuleId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, connectionModuleId);
+
+
+/**
+* @brief   Gets the connection device ID from the IOTHUB_MESSAGE_HANDLE.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*
+* @return  A const char* pointing to the connection device Id.
+*/
+MOCKABLE_FUNCTION(, const char*, IoTHubMessage_GetConnectionDeviceId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+/**
+* @brief   Sets connection device Id. CAUTION: SDK user should not call it directly, it is for internal use only.
+*
+* @param   iotHubMessageHandle Handle to the message.
+* @param   connectionDeviceId Pointer to the device ID of connector
+*
+* @return  Returns IOTHUB_MESSAGE_OK if the DiagnosticData was set successfully
+*          or an error code otherwise.
+*/
+MOCKABLE_FUNCTION(, IOTHUB_MESSAGE_RESULT, IoTHubMessage_SetConnectionDeviceId, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle, const char*, connectionDeviceId);
+
+
+/**
+* @brief   Frees all resources associated with the given message handle.
+*
+* @param   iotHubMessageHandle Handle to the message.
+*/
+MOCKABLE_FUNCTION(, void, IoTHubMessage_Destroy, IOTHUB_MESSAGE_HANDLE, iotHubMessageHandle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_MESSAGE_H */
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_transport_ll.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_transport_ll.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothub_transport_ll.h	(revision 389)
@@ -0,0 +1,41 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUB_TRANSPORT_LL_H
+#define IOTHUB_TRANSPORT_LL_H
+
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdint>
+extern "C"
+{
+#else
+#include <stddef.h>
+#include <stdint.h>
+#endif
+
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+typedef void* TRANSPORT_LL_HANDLE;
+typedef void* IOTHUB_DEVICE_HANDLE;
+
+struct TRANSPORT_HANDLE_DATA_TAG;
+typedef struct TRANSPORT_HANDLE_DATA_TAG* TRANSPORT_HANDLE;
+
+typedef void* METHOD_HANDLE;
+
+struct TRANSPORT_PROVIDER_TAG;
+typedef struct TRANSPORT_PROVIDER_TAG TRANSPORT_PROVIDER;
+
+typedef const TRANSPORT_PROVIDER*(*IOTHUB_CLIENT_TRANSPORT_PROVIDER)(void);
+
+MOCKABLE_FUNCTION(, TRANSPORT_HANDLE, IoTHubTransport_Create, IOTHUB_CLIENT_TRANSPORT_PROVIDER, protocol, const char*, iotHubName, const char*, iotHubSuffix);
+MOCKABLE_FUNCTION(, void, IoTHubTransport_Destroy, TRANSPORT_HANDLE, transportHandle);
+MOCKABLE_FUNCTION(, TRANSPORT_LL_HANDLE, IoTHubTransport_GetLLTransport, TRANSPORT_HANDLE, transportHandle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IOTHUB_TRANSPORT_LL_H */
+
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothubtransporthttp.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothubtransporthttp.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothubtransporthttp.h	(revision 389)
@@ -0,0 +1,20 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUBTRANSPORTHTTP_H
+#define IOTHUBTRANSPORTHTTP_H
+
+#include "iothub_transport_ll.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+	extern const TRANSPORT_PROVIDER* HTTP_Protocol(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*IOTHUBTRANSPORTHTTP_H*/
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothubtransportmqtt_websockets.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothubtransportmqtt_websockets.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/inc/iothubtransportmqtt_websockets.h	(revision 389)
@@ -0,0 +1,20 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef IOTHUBTRANSPORTMQTT_WEBSOCKETS_H
+#define IOTHUBTRANSPORTMQTT_WEBSOCKETS_H
+
+#include "iothub_transport_ll.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    extern const TRANSPORT_PROVIDER* MQTT_WebSocket_Protocol(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*IOTHUBTRANSPORTMQTT_WEBSOCKETS_H*/
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/blob.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/blob.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/blob.c	(revision 389)
@@ -0,0 +1,381 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdint.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "internal/blob.h"
+#include "internal/iothub_client_ll_uploadtoblob.h"
+
+#include "azure_c_shared_utility/httpapiex.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/azure_base64.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+
+BLOB_RESULT Blob_UploadBlock(
+        HTTPAPIEX_HANDLE httpApiExHandle,
+        const char* relativePath,
+        BUFFER_HANDLE requestContent,
+        unsigned int blockID,
+        STRING_HANDLE blockIDList,
+        unsigned int* httpStatus,
+        BUFFER_HANDLE httpResponse)
+{
+    BLOB_RESULT result;
+
+    if (requestContent == NULL ||
+        blockIDList == NULL ||
+        relativePath == NULL ||
+        httpApiExHandle == NULL ||
+        httpStatus == NULL ||
+        httpResponse == NULL)
+    {
+        LogError("invalid argument detected requestContent=%p blockIDList=%p relativePath=%p httpApiExHandle=%p httpStatus=%p httpResponse=%p", requestContent, blockIDList, relativePath, httpApiExHandle, httpStatus, httpResponse);
+        result = BLOB_ERROR;
+    }
+    else
+    {
+        char temp[7]; /*this will contain 000000... 049999*/
+        if (sprintf(temp, "%6u", (unsigned int)blockID) != 6) /*produces 000000... 049999*/
+        {
+            /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+            LogError("failed to sprintf");
+            result = BLOB_ERROR;
+        }
+        else
+        {
+            STRING_HANDLE blockIdString = Azure_Base64_Encode_Bytes((const unsigned char*)temp, 6);
+            if (blockIdString == NULL)
+            {
+                /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                LogError("unable to Azure_Base64_Encode_Bytes");
+                result = BLOB_ERROR;
+            }
+            else
+            {
+                /*add the blockId base64 encoded to the XML*/
+                if (!(
+                    (STRING_concat(blockIDList, "<Latest>") == 0) &&
+                    (STRING_concat_with_STRING(blockIDList, blockIdString) == 0) &&
+                    (STRING_concat(blockIDList, "</Latest>") == 0)
+                    ))
+                {
+                    /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                    LogError("unable to STRING_concat");
+                    result = BLOB_ERROR;
+                }
+                else
+                {
+                    /*Codes_SRS_BLOB_02_022: [ Blob_UploadMultipleBlocksFromSasUri shall construct a new relativePath from following string: base relativePath + "&comp=block&blockid=BASE64 encoded string of blockId" ]*/
+                    STRING_HANDLE newRelativePath = STRING_construct(relativePath);
+                    if (newRelativePath == NULL)
+                    {
+                        /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                        LogError("unable to STRING_construct");
+                        result = BLOB_ERROR;
+                    }
+                    else
+                    {
+                        if (!(
+                            (STRING_concat(newRelativePath, "&comp=block&blockid=") == 0) &&
+                            (STRING_concat_with_STRING(newRelativePath, blockIdString) == 0)
+                            ))
+                        {
+                            /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                            LogError("unable to STRING concatenate");
+                            result = BLOB_ERROR;
+                        }
+                        else
+                        {
+                            /*Codes_SRS_BLOB_02_024: [ Blob_UploadMultipleBlocksFromSasUri shall call HTTPAPIEX_ExecuteRequest with a PUT operation, passing httpStatus and httpResponse. ]*/
+                            if (HTTPAPIEX_ExecuteRequest(
+                                httpApiExHandle,
+                                HTTPAPI_REQUEST_PUT,
+                                STRING_c_str(newRelativePath),
+                                NULL,
+                                requestContent,
+                                httpStatus,
+                                NULL,
+                                httpResponse) != HTTPAPIEX_OK
+                                )
+                            {
+                                /*Codes_SRS_BLOB_02_025: [ If HTTPAPIEX_ExecuteRequest fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_HTTP_ERROR. ]*/
+                                LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                result = BLOB_HTTP_ERROR;
+                            }
+                            else if (*httpStatus >= 300)
+                            {
+                                /*Codes_SRS_BLOB_02_026: [ Otherwise, if HTTP response code is >=300 then Blob_UploadMultipleBlocksFromSasUri shall succeed and return BLOB_OK. ]*/
+                                LogError("HTTP status from storage does not indicate success (%d)", (int)*httpStatus);
+                                result = BLOB_OK;
+                            }
+                            else
+                            {
+                                /*Codes_SRS_BLOB_02_027: [ Otherwise Blob_UploadMultipleBlocksFromSasUri shall continue execution. ]*/
+                                result = BLOB_OK;
+                            }
+                        }
+                        STRING_delete(newRelativePath);
+                    }
+                }
+                STRING_delete(blockIdString);
+            }
+        }
+    }
+    return result;
+}
+
+BLOB_RESULT Blob_UploadMultipleBlocksFromSasUri(const char* SASURI, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx, void* context, unsigned int* httpStatus, BUFFER_HANDLE httpResponse, const char* certificates, HTTP_PROXY_OPTIONS *proxyOptions)
+{
+    BLOB_RESULT result;
+    /*Codes_SRS_BLOB_02_001: [ If SASURI is NULL then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_INVALID_ARG. ]*/
+    if (SASURI == NULL)
+    {
+        LogError("parameter SASURI is NULL");
+        result = BLOB_INVALID_ARG;
+    }
+    else
+    {
+        /*Codes_SRS_BLOB_02_002: [ If getDataCallbackEx is NULL then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_INVALID_ARG. ]*/
+        if (getDataCallbackEx == NULL)
+        {
+            LogError("IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx is NULL");
+            result = BLOB_INVALID_ARG;
+        }
+        /*the below define avoid a "condition always false" on some compilers*/
+        else
+        {
+            /*Codes_SRS_BLOB_02_017: [ Blob_UploadMultipleBlocksFromSasUri shall copy from SASURI the hostname to a new const char* ]*/
+            /*to find the hostname, the following logic is applied:*/
+            /*the hostname starts at the first character after "://"*/
+            /*the hostname ends at the first character before the next "/" after "://"*/
+            const char* hostnameBegin = strstr(SASURI, "://");
+            if (hostnameBegin == NULL)
+            {
+                /*Codes_SRS_BLOB_02_005: [ If the hostname cannot be determined, then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_INVALID_ARG. ]*/
+                LogError("hostname cannot be determined");
+                result = BLOB_INVALID_ARG;
+            }
+            else
+            {
+                hostnameBegin += 3; /*have to skip 3 characters which are "://"*/
+                const char* hostnameEnd = strchr(hostnameBegin, '/');
+                if (hostnameEnd == NULL)
+                {
+                    /*Codes_SRS_BLOB_02_005: [ If the hostname cannot be determined, then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_INVALID_ARG. ]*/
+                    LogError("hostname cannot be determined");
+                    result = BLOB_INVALID_ARG;
+                }
+                else
+                {
+                    size_t hostnameSize = hostnameEnd - hostnameBegin;
+                    char* hostname = (char*)malloc(hostnameSize + 1); /*+1 because of '\0' at the end*/
+                    if (hostname == NULL)
+                    {
+                        /*Codes_SRS_BLOB_02_016: [ If the hostname copy cannot be made then then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                        LogError("oom - out of memory");
+                        result = BLOB_ERROR;
+                    }
+                    else
+                    {
+                        HTTPAPIEX_HANDLE httpApiExHandle;
+                        (void)memcpy(hostname, hostnameBegin, hostnameSize);
+                        hostname[hostnameSize] = '\0';
+
+                        /*Codes_SRS_BLOB_02_018: [ Blob_UploadMultipleBlocksFromSasUri shall create a new HTTPAPI_EX_HANDLE by calling HTTPAPIEX_Create passing the hostname. ]*/
+                        httpApiExHandle = HTTPAPIEX_Create(hostname);
+                        if (httpApiExHandle == NULL)
+                        {
+                            /*Codes_SRS_BLOB_02_007: [ If HTTPAPIEX_Create fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR. ]*/
+                            LogError("unable to create a HTTPAPIEX_HANDLE");
+                            result = BLOB_ERROR;
+                        }
+                        else
+                        {
+                            if ((certificates != NULL)&& (HTTPAPIEX_SetOption(httpApiExHandle, "TrustedCerts", certificates) == HTTPAPIEX_ERROR))
+                            {
+                                LogError("failure in setting trusted certificates");
+                                result = BLOB_ERROR;
+                            }
+                            else if ((proxyOptions != NULL && proxyOptions->host_address != NULL) && HTTPAPIEX_SetOption(httpApiExHandle, OPTION_HTTP_PROXY, proxyOptions) == HTTPAPIEX_ERROR)
+                            {
+                                LogError("failure in setting proxy options");
+                                result = BLOB_ERROR;
+                            }
+                            else
+                            {
+                                /*Codes_SRS_BLOB_02_019: [ Blob_UploadMultipleBlocksFromSasUri shall compute the base relative path of the request from the SASURI parameter. ]*/
+                                const char* relativePath = hostnameEnd; /*this is where the relative path begins in the SasUri*/
+
+                                /*Codes_SRS_BLOB_02_028: [ Blob_UploadMultipleBlocksFromSasUri shall construct an XML string with the following content: ]*/
+                                STRING_HANDLE blockIDList = STRING_construct("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<BlockList>"); /*the XML "build as we go"*/
+                                if (blockIDList == NULL)
+                                {
+                                    /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                                    LogError("failed to STRING_construct");
+                                    result = BLOB_HTTP_ERROR;
+                                }
+                                else
+                                {
+                                    /*Codes_SRS_BLOB_02_021: [ For every block returned by `getDataCallbackEx` the following operations shall happen: ]*/
+                                    unsigned int blockID = 0; /* incremented for each new block */
+                                    unsigned int isError = 0; /* set to 1 if a block upload fails or if getDataCallbackEx returns incorrect blocks to upload */
+                                    unsigned int uploadOneMoreBlock = 1; /* set to 1 while getDataCallbackEx returns correct blocks to upload */
+                                    unsigned char const * source; /* data set by getDataCallbackEx */
+                                    size_t size; /* source size set by getDataCallbackEx */
+                                    IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT getDataReturnValue;
+
+                                    do
+                                    {
+                                        getDataReturnValue = getDataCallbackEx(FILE_UPLOAD_OK, &source, &size, context);
+                                        if (getDataReturnValue == IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_ABORT)
+                                        {
+                                            /*Codes_SRS_BLOB_99_004: [ If `getDataCallbackEx` returns `IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT_ABORT`, then `Blob_UploadMultipleBlocksFromSasUri` shall exit the loop and return `BLOB_ABORTED`. ]*/
+                                            LogInfo("Upload to blob has been aborted by the user");
+                                            uploadOneMoreBlock = 0;
+                                            result = BLOB_ABORTED;
+                                        }
+                                        else if (source == NULL || size == 0)
+                                        {
+                                            /*Codes_SRS_BLOB_99_002: [ If the size of the block returned by `getDataCallbackEx` is 0 or if the data is NULL, then `Blob_UploadMultipleBlocksFromSasUri` shall exit the loop. ]*/
+                                            uploadOneMoreBlock = 0;
+                                            result = BLOB_OK;
+                                        }
+                                        else
+                                        {
+                                            if (size > BLOCK_SIZE)
+                                            {
+                                                /*Codes_SRS_BLOB_99_001: [ If the size of the block returned by `getDataCallbackEx` is bigger than 4MB, then `Blob_UploadMultipleBlocksFromSasUri` shall fail and return `BLOB_INVALID_ARG`. ]*/
+                                                LogError("tried to upload block of size %lu, max allowed size is %d", (unsigned long)size, BLOCK_SIZE);
+                                                result = BLOB_INVALID_ARG;
+                                                isError = 1;
+                                            }
+                                            else if (blockID >= MAX_BLOCK_COUNT)
+                                            {
+                                                /*Codes_SRS_BLOB_99_003: [ If `getDataCallbackEx` returns more than 50000 blocks, then `Blob_UploadMultipleBlocksFromSasUri` shall fail and return `BLOB_INVALID_ARG`. ]*/
+                                                LogError("unable to upload more than %lu blocks in one blob", (unsigned long)MAX_BLOCK_COUNT);
+                                                result = BLOB_INVALID_ARG;
+                                                isError = 1;
+                                            }
+                                            else
+                                            {
+                                                /*Codes_SRS_BLOB_02_023: [ Blob_UploadMultipleBlocksFromSasUri shall create a BUFFER_HANDLE from source and size parameters. ]*/
+                                                BUFFER_HANDLE requestContent = BUFFER_create(source, size);
+                                                if (requestContent == NULL)
+                                                {
+                                                    /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                                                    LogError("unable to BUFFER_create");
+                                                    result = BLOB_ERROR;
+                                                    isError = 1;
+                                                }
+                                                else
+                                                {
+                                                    result = Blob_UploadBlock(
+                                                            httpApiExHandle,
+                                                            relativePath,
+                                                            requestContent,
+                                                            blockID,
+                                                            blockIDList,
+                                                            httpStatus,
+                                                            httpResponse);
+
+                                                    BUFFER_delete(requestContent);
+                                                }
+
+                                                /*Codes_SRS_BLOB_02_026: [ Otherwise, if HTTP response code is >=300 then Blob_UploadMultipleBlocksFromSasUri shall succeed and return BLOB_OK. ]*/
+                                                if (result != BLOB_OK || *httpStatus >= 300)
+                                                {
+                                                    LogError("unable to Blob_UploadBlock. Returned value=%d, httpStatus=%u", result, (unsigned int)*httpStatus);
+                                                    isError = 1;
+                                                }
+                                            }
+                                            blockID++;
+                                        }
+                                    }
+                                    while(uploadOneMoreBlock && !isError);
+
+                                    if (isError || result != BLOB_OK)
+                                    {
+                                        /*do nothing, it will be reported "as is"*/
+                                    }
+                                    else
+                                    {
+                                        /*complete the XML*/
+                                        if (STRING_concat(blockIDList, "</BlockList>") != 0)
+                                        {
+                                            /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                                            LogError("failed to STRING_concat");
+                                            result = BLOB_ERROR;
+                                        }
+                                        else
+                                        {
+                                            /*Codes_SRS_BLOB_02_029: [Blob_UploadMultipleBlocksFromSasUri shall construct a new relativePath from following string : base relativePath + "&comp=blocklist"]*/
+                                            STRING_HANDLE newRelativePath = STRING_construct(relativePath);
+                                            if (newRelativePath == NULL)
+                                            {
+                                                /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                                                LogError("failed to STRING_construct");
+                                                result = BLOB_ERROR;
+                                            }
+                                            else
+                                            {
+                                                if (STRING_concat(newRelativePath, "&comp=blocklist") != 0)
+                                                {
+                                                    /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                                                    LogError("failed to STRING_concat");
+                                                    result = BLOB_ERROR;
+                                                }
+                                                else
+                                                {
+                                                    /*Codes_SRS_BLOB_02_030: [ Blob_UploadMultipleBlocksFromSasUri shall call HTTPAPIEX_ExecuteRequest with a PUT operation, passing the new relativePath, httpStatus and httpResponse and the XML string as content. ]*/
+                                                    const char* s = STRING_c_str(blockIDList);
+                                                    BUFFER_HANDLE blockIDListAsBuffer = BUFFER_create((const unsigned char*)s, strlen(s));
+                                                    if (blockIDListAsBuffer == NULL)
+                                                    {
+                                                        /*Codes_SRS_BLOB_02_033: [ If any previous operation that doesn't have an explicit failure description fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_ERROR ]*/
+                                                        LogError("failed to BUFFER_create");
+                                                        result = BLOB_ERROR;
+                                                    }
+                                                    else
+                                                    {
+                                                        if (HTTPAPIEX_ExecuteRequest(
+                                                            httpApiExHandle,
+                                                            HTTPAPI_REQUEST_PUT,
+                                                            STRING_c_str(newRelativePath),
+                                                            NULL,
+                                                            blockIDListAsBuffer,
+                                                            httpStatus,
+                                                            NULL,
+                                                            httpResponse
+                                                        ) != HTTPAPIEX_OK)
+                                                        {
+                                                            /*Codes_SRS_BLOB_02_031: [ If HTTPAPIEX_ExecuteRequest fails then Blob_UploadMultipleBlocksFromSasUri shall fail and return BLOB_HTTP_ERROR. ]*/
+                                                            LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                                            result = BLOB_HTTP_ERROR;
+                                                        }
+                                                        else
+                                                        {
+                                                            /*Codes_SRS_BLOB_02_032: [ Otherwise, Blob_UploadMultipleBlocksFromSasUri shall succeed and return BLOB_OK. ]*/
+                                                            result = BLOB_OK;
+                                                        }
+                                                        BUFFER_delete(blockIDListAsBuffer);
+                                                    }
+                                                }
+                                                STRING_delete(newRelativePath);
+                                            }
+                                        }
+                                    }
+                                    STRING_delete(blockIDList);
+                                }
+
+                            }
+                            HTTPAPIEX_Destroy(httpApiExHandle);
+                        }
+                        free(hostname);
+                    }
+                }
+            }
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client.c	(revision 389)
@@ -0,0 +1,119 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/gballoc.h"
+
+#include "iothub_client_core.h"
+#include "iothub_client.h"
+
+IOTHUB_CLIENT_HANDLE IoTHubClient_CreateFromConnectionString(const char* connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    return (IOTHUB_CLIENT_HANDLE)IoTHubClientCore_CreateFromConnectionString(connectionString, protocol);
+}
+
+IOTHUB_CLIENT_HANDLE IoTHubClient_Create(const IOTHUB_CLIENT_CONFIG* config)
+{
+    return (IOTHUB_CLIENT_HANDLE)IoTHubClientCore_Create(config);
+}
+
+IOTHUB_CLIENT_HANDLE IoTHubClient_CreateWithTransport(TRANSPORT_HANDLE transportHandle, const IOTHUB_CLIENT_CONFIG* config)
+{
+    return (IOTHUB_CLIENT_HANDLE)IoTHubClientCore_CreateWithTransport(transportHandle, config);
+}
+
+IOTHUB_CLIENT_HANDLE IoTHubClient_CreateFromDeviceAuth(const char* iothub_uri, const char* device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    return (IOTHUB_CLIENT_HANDLE)IoTHubClientCore_CreateFromDeviceAuth(iothub_uri, device_id, protocol);
+}
+
+void IoTHubClient_Destroy(IOTHUB_CLIENT_HANDLE iotHubClientHandle)
+{
+    IoTHubClientCore_Destroy((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SendEventAsync(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_MESSAGE_HANDLE eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK eventConfirmationCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_SendEventAsync((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, eventMessageHandle, eventConfirmationCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_GetSendStatus(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_STATUS *iotHubClientStatus)
+{
+    return IoTHubClientCore_GetSendStatus((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, iotHubClientStatus);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetMessageCallback(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC messageCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_SetMessageCallback((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, messageCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetConnectionStatusCallback(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK connectionStatusCallback, void * userContextCallback)
+{
+    return IoTHubClientCore_SetConnectionStatusCallback((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, connectionStatusCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetRetryPolicy(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitInSeconds)
+{
+    return IoTHubClientCore_SetRetryPolicy((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, retryPolicy, retryTimeoutLimitInSeconds);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_GetRetryPolicy(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY* retryPolicy, size_t* retryTimeoutLimitInSeconds)
+{
+    return IoTHubClientCore_GetRetryPolicy((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, retryPolicy, retryTimeoutLimitInSeconds);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_GetLastMessageReceiveTime(IOTHUB_CLIENT_HANDLE iotHubClientHandle, time_t* lastMessageReceiveTime)
+{
+    return IoTHubClientCore_GetLastMessageReceiveTime((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, lastMessageReceiveTime);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetOption(IOTHUB_CLIENT_HANDLE iotHubClientHandle, const char* optionName, const void* value)
+{
+    return IoTHubClientCore_SetOption((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, optionName, value);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetDeviceTwinCallback(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK deviceTwinCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_SetDeviceTwinCallback((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, deviceTwinCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SendReportedState(IOTHUB_CLIENT_HANDLE iotHubClientHandle, const unsigned char* reportedState, size_t size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK reportedStateCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_SendReportedState((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, reportedState, size, reportedStateCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetDeviceMethodCallback(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC deviceMethodCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_SetDeviceMethodCallback((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, deviceMethodCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_SetDeviceMethodCallback_Ex(IOTHUB_CLIENT_HANDLE iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK inboundDeviceMethodCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_SetDeviceMethodCallback_Ex((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, inboundDeviceMethodCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_DeviceMethodResponse(IOTHUB_CLIENT_HANDLE iotHubClientHandle, METHOD_HANDLE methodId, const unsigned char* response, size_t respSize, int statusCode)
+{
+    return IoTHubClientCore_DeviceMethodResponse((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, methodId, response, respSize, statusCode);
+}
+
+#ifndef DONT_USE_UPLOADTOBLOB
+
+IOTHUB_CLIENT_RESULT IoTHubClient_UploadToBlobAsync(IOTHUB_CLIENT_HANDLE iotHubClientHandle, const char* destinationFileName, const unsigned char* source, size_t size, IOTHUB_CLIENT_FILE_UPLOAD_CALLBACK iotHubClientFileUploadCallback, void* context)
+{
+    return IoTHubClientCore_UploadToBlobAsync((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, destinationFileName, source, size, iotHubClientFileUploadCallback, context);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_UploadMultipleBlocksToBlobAsync(IOTHUB_CLIENT_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK getDataCallback, void* context)
+{
+    return IoTHubClientCore_UploadMultipleBlocksToBlobAsync((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, destinationFileName, getDataCallback, NULL, context);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_UploadMultipleBlocksToBlobAsyncEx(IOTHUB_CLIENT_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx, void* context)
+{
+    return IoTHubClientCore_UploadMultipleBlocksToBlobAsync((IOTHUB_CLIENT_CORE_HANDLE)iotHubClientHandle, destinationFileName, NULL, getDataCallbackEx, context);
+}
+
+#endif /*DONT_USE_UPLOADTOBLOB*/
+
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_authorization.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_authorization.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_authorization.c	(revision 389)
@@ -0,0 +1,705 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/sastoken.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+
+#ifdef USE_PROV_MODULE
+#include "azure_prov_client/internal/iothub_auth_client.h"
+#endif
+
+#include "internal/iothub_client_authorization.h"
+
+#define DEFAULT_SAS_TOKEN_EXPIRY_TIME_SECS          3600
+#define INDEFINITE_TIME                             ((time_t)(-1))
+#define MIN_SAS_EXPIRY_TIME                         5  // 5 seconds
+
+typedef struct IOTHUB_AUTHORIZATION_DATA_TAG
+{
+    char* device_sas_token;
+    char* device_key;
+    char* device_id;
+    char* module_id;
+    size_t token_expiry_time_sec;
+    IOTHUB_CREDENTIAL_TYPE cred_type;
+#ifdef USE_PROV_MODULE
+    IOTHUB_SECURITY_HANDLE device_auth_handle;
+#endif
+} IOTHUB_AUTHORIZATION_DATA;
+
+static int get_seconds_since_epoch(size_t* seconds)
+{
+    int result;
+    time_t current_time;
+    if ((current_time = get_time(NULL)) == INDEFINITE_TIME)
+    {
+        LogError("Failed getting the current local time (get_time() failed)");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        *seconds = (size_t)get_difftime(current_time, (time_t)0);
+        result = 0;
+    }
+    return result;
+}
+
+static IOTHUB_AUTHORIZATION_DATA* initialize_auth_client(const char* device_id, const char* module_id)
+{
+    IOTHUB_AUTHORIZATION_DATA* result;
+
+    /* Codes_SRS_IoTHub_Authorization_07_002: [IoTHubClient_Auth_Create shall allocate a IOTHUB_AUTHORIZATION_HANDLE that is needed for subsequent calls. ] */
+    result = (IOTHUB_AUTHORIZATION_DATA*)malloc(sizeof(IOTHUB_AUTHORIZATION_DATA) );
+    if (result == NULL)
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_019: [ On error IoTHubClient_Auth_Create shall return NULL. ] */
+        LogError("Failed allocating IOTHUB_AUTHORIZATION_DATA");
+        result = NULL;
+    }
+    else
+    {
+        memset(result, 0, sizeof(IOTHUB_AUTHORIZATION_DATA) );
+        if (mallocAndStrcpy_s(&result->device_id, device_id) != 0)
+        {
+            /* Codes_SRS_IoTHub_Authorization_07_019: [ On error IoTHubClient_Auth_Create shall return NULL. ] */
+            LogError("Failed allocating device_key");
+            free(result);
+            result = NULL;
+        }
+        else if (module_id != NULL && mallocAndStrcpy_s(&result->module_id, module_id) != 0)
+        {
+            /* Codes_SRS_IoTHub_Authorization_07_019: [ On error IoTHubClient_Auth_Create shall return NULL. ] */
+            LogError("Failed allocating module_id");
+            free(result->device_id);
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            result->token_expiry_time_sec = DEFAULT_SAS_TOKEN_EXPIRY_TIME_SECS;
+        }
+    }
+    return result;
+}
+
+IOTHUB_AUTHORIZATION_HANDLE IoTHubClient_Auth_Create(const char* device_key, const char* device_id, const char* device_sas_token, const char *module_id)
+{
+    IOTHUB_AUTHORIZATION_DATA* result;
+    /* Codes_SRS_IoTHub_Authorization_07_001: [if device_id is NULL IoTHubClient_Auth_Create, shall return NULL. ] */
+    if (device_id == NULL)
+    {
+        LogError("Invalid Parameter device_id: %p", device_id);
+        result = NULL;
+    }
+    else
+    {
+        result = initialize_auth_client(device_id, module_id);
+        if (result == NULL)
+        {
+            LogError("Failure initializing auth client");
+        }
+        else if (device_key != NULL && mallocAndStrcpy_s(&result->device_key, device_key) != 0)
+        {
+            /* Codes_SRS_IoTHub_Authorization_07_019: [ On error IoTHubClient_Auth_Create shall return NULL. ] */
+            LogError("Failed allocating device_key");
+            free(result->device_id);
+            free(result->module_id);
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            if (device_key != NULL)
+            {
+                /* Codes_SRS_IoTHub_Authorization_07_003: [ IoTHubClient_Auth_Create shall set the credential type to IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY if the device_sas_token is NULL. ]*/
+                result->cred_type = IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY;
+            }
+            else if (device_sas_token != NULL)
+            {
+                /* Codes_SRS_IoTHub_Authorization_07_020: [ else IoTHubClient_Auth_Create shall set the credential type to IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN. ] */
+                result->cred_type = IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN;
+                if (mallocAndStrcpy_s(&result->device_sas_token, device_sas_token) != 0)
+                {
+                    /* Codes_SRS_IoTHub_Authorization_07_019: [ On error IoTHubClient_Auth_Create shall return NULL. ] */
+                    LogError("Failed allocating device_key");
+                    free(result->device_key);
+                    free(result->device_id);
+                    free(result->module_id);
+                    free(result);
+                    result = NULL;
+                }
+            }
+            else
+            {
+                /* Codes_SRS_IoTHub_Authorization_07_024: [ if device_sas_token and device_key are NULL IoTHubClient_Auth_Create shall set the credential type to IOTHUB_CREDENTIAL_TYPE_UNKNOWN. ] */
+                result->cred_type = IOTHUB_CREDENTIAL_TYPE_UNKNOWN;
+            }
+        }
+    }
+    /* Codes_SRS_IoTHub_Authorization_07_004: [ If successful IoTHubClient_Auth_Create shall return a IOTHUB_AUTHORIZATION_HANDLE value. ] */
+    return result;
+}
+
+IOTHUB_AUTHORIZATION_HANDLE IoTHubClient_Auth_CreateFromDeviceAuth(const char* device_id, const char* module_id)
+{
+    IOTHUB_AUTHORIZATION_DATA* result;
+    if (device_id == NULL)
+    {
+        LogError("Invalid Parameter device_id: %p", device_id);
+        result = NULL;
+    }
+    else
+    {
+#ifdef USE_PROV_MODULE
+        result = initialize_auth_client(device_id, module_id);
+        if (result == NULL)
+        {
+            LogError("Failure initializing auth client");
+        }
+        else
+        {
+            result->device_auth_handle = iothub_device_auth_create();
+            if (result->device_auth_handle == NULL)
+            {
+                LogError("Failed allocating IOTHUB_AUTHORIZATION_DATA");
+                free(result->device_id);
+                free(result->module_id);
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                DEVICE_AUTH_TYPE auth_type = iothub_device_auth_get_type(result->device_auth_handle);
+                if (auth_type == AUTH_TYPE_SAS || auth_type == AUTH_TYPE_SYMM_KEY)
+                {
+                    result->cred_type = IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH;
+                }
+                else
+                {
+                    result->cred_type = IOTHUB_CREDENTIAL_TYPE_X509_ECC;
+                }
+            }
+        }
+#else
+        (void)module_id;
+        LogError("Failed HSM module is not supported");
+        result = NULL;
+#endif
+    }
+    return result;
+}
+
+void IoTHubClient_Auth_Destroy(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    /* Codes_SRS_IoTHub_Authorization_07_005: [ if handle is NULL IoTHubClient_Auth_Destroy shall do nothing. ] */
+    if (handle != NULL)
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_006: [ IoTHubClient_Auth_Destroy shall free all resources associated with the IOTHUB_AUTHORIZATION_HANDLE handle. ] */
+#ifdef USE_PROV_MODULE
+        iothub_device_auth_destroy(handle->device_auth_handle);
+#endif
+        free(handle->device_key);
+        free(handle->device_id);
+        free(handle->module_id);
+        free(handle->device_sas_token);
+        free(handle);
+    }
+}
+
+IOTHUB_CREDENTIAL_TYPE IoTHubClient_Auth_Set_x509_Type(IOTHUB_AUTHORIZATION_HANDLE handle, bool enable_x509)
+{
+    IOTHUB_CREDENTIAL_TYPE result;
+    if (handle != NULL)
+    {
+        if (enable_x509)
+        {
+            result = handle->cred_type = IOTHUB_CREDENTIAL_TYPE_X509;
+        }
+        else
+        {
+            if (handle->device_sas_token == NULL)
+            {
+                result = handle->cred_type = IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY;
+            }
+            else if (handle->device_key == NULL)
+            {
+                result = handle->cred_type = IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN;
+            }
+            else
+            {
+                result = handle->cred_type = IOTHUB_CREDENTIAL_TYPE_UNKNOWN;
+            }
+        }
+    }
+    else
+    {
+        result = IOTHUB_CREDENTIAL_TYPE_UNKNOWN;
+    }
+    return result;
+}
+
+int IoTHubClient_Auth_Set_xio_Certificate(IOTHUB_AUTHORIZATION_HANDLE handle, XIO_HANDLE xio)
+{
+    int result;
+    if (handle == NULL || xio == NULL)
+    {
+        LogError("Invalid Parameter handle: %p xio: %p", handle, xio);
+        result = MU_FAILURE;
+    }
+    else if (handle->cred_type != IOTHUB_CREDENTIAL_TYPE_X509_ECC)
+    {
+        LogError("Invalid credential types for this operation");
+        result = MU_FAILURE;
+    }
+    else
+    {
+#ifdef USE_PROV_MODULE
+        CREDENTIAL_RESULT* cred_result = iothub_device_auth_generate_credentials(handle->device_auth_handle, NULL);
+        if (cred_result == NULL)
+        {
+            LogError("Failure generating credentials");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (xio_setoption(xio, OPTION_X509_ECC_CERT, cred_result->auth_cred_result.x509_result.x509_cert) != 0)
+            {
+                LogError("Failure setting x509 cert on xio");
+                result = MU_FAILURE;
+            }
+            else if (xio_setoption(xio, OPTION_X509_ECC_KEY, cred_result->auth_cred_result.x509_result.x509_alias_key) != 0)
+            {
+                LogError("Failure setting x509 key on xio");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+            free(cred_result);
+        }
+#else
+        LogError("Failed HSM module is not supported");
+        result = MU_FAILURE;
+#endif
+    }
+    return result;
+}
+
+int IoTHubClient_Auth_Get_x509_info(IOTHUB_AUTHORIZATION_HANDLE handle, char** x509_cert, char** x509_key)
+{
+    int result;
+    if (handle == NULL || x509_cert == NULL || x509_key == NULL)
+    {
+        LogError("Invalid Parameter handle: %p, x509_cert: %p, x509_key: %p", handle, x509_cert, x509_key);
+        result = MU_FAILURE;
+    }
+    else if (handle->cred_type != IOTHUB_CREDENTIAL_TYPE_X509_ECC)
+    {
+        LogError("Invalid credential types for this operation");
+        result = MU_FAILURE;
+    }
+    else
+    {
+#ifdef USE_PROV_MODULE
+        CREDENTIAL_RESULT* cred_result = iothub_device_auth_generate_credentials(handle->device_auth_handle, NULL);
+        if (cred_result == NULL)
+        {
+            LogError("Failure generating credentials");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mallocAndStrcpy_s(x509_cert, cred_result->auth_cred_result.x509_result.x509_cert) != 0)
+            {
+                LogError("Failure copying certificate");
+                result = MU_FAILURE;
+            }
+            else if (mallocAndStrcpy_s(x509_key, cred_result->auth_cred_result.x509_result.x509_alias_key) != 0)
+            {
+                LogError("Failure copying private key");
+                result = MU_FAILURE;
+                free(*x509_cert);
+            }
+            else
+            {
+                result = 0;
+            }
+            free(cred_result);
+        }
+#else
+        LogError("Failed HSM module is not supported");
+        result = MU_FAILURE;
+#endif
+    }
+    return result;
+}
+
+IOTHUB_CREDENTIAL_TYPE IoTHubClient_Auth_Get_Credential_Type(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    IOTHUB_CREDENTIAL_TYPE result;
+    /* Codes_SRS_IoTHub_Authorization_07_007: [ if handle is NULL IoTHub_Auth_Get_Credential_Type shall return IOTHUB_CREDENTIAL_TYPE_UNKNOWN. ] */
+    if (handle == NULL)
+    {
+        LogError("Invalid Parameter handle: %p", handle);
+        result = IOTHUB_CREDENTIAL_TYPE_UNKNOWN;
+    }
+    else
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_008: [ IoTHub_Auth_Get_Credential_Type shall return the credential type that is set upon creation. ] */
+        result = handle->cred_type;
+    }
+    return result;
+}
+
+char* IoTHubClient_Auth_Get_SasToken(IOTHUB_AUTHORIZATION_HANDLE handle, const char* scope, size_t expiry_time_relative_seconds, const char* key_name)
+{
+    char* result;
+    (void)expiry_time_relative_seconds;
+    /* Codes_SRS_IoTHub_Authorization_07_009: [ if handle or scope are NULL, IoTHubClient_Auth_Get_SasToken shall return NULL. ] */
+    if (handle == NULL)
+    {
+        LogError("Invalid Parameter handle: %p", handle);
+        result = NULL;
+    }
+    else
+    {
+        if (handle->cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH)
+        {
+#ifdef USE_PROV_MODULE
+            DEVICE_AUTH_CREDENTIAL_INFO dev_auth_cred;
+            size_t sec_since_epoch;
+
+            if (get_seconds_since_epoch(&sec_since_epoch) != 0)
+            {
+                LogError("failure getting seconds from epoch");
+                result = NULL;
+            }
+            else
+            {
+                memset(&dev_auth_cred, 0, sizeof(DEVICE_AUTH_CREDENTIAL_INFO));
+                size_t expiry_time = sec_since_epoch + handle->token_expiry_time_sec;
+                dev_auth_cred.sas_info.expiry_seconds = expiry_time;
+                dev_auth_cred.sas_info.token_scope = scope;
+                dev_auth_cred.sas_info.key_name = key_name;
+                dev_auth_cred.dev_auth_type = AUTH_TYPE_SAS;
+
+                CREDENTIAL_RESULT* cred_result = iothub_device_auth_generate_credentials(handle->device_auth_handle, &dev_auth_cred);
+                if (cred_result == NULL)
+                {
+                    LogError("failure getting credentials from device auth module");
+                    result = NULL;
+                }
+                else
+                {
+                    if (mallocAndStrcpy_s(&result, cred_result->auth_cred_result.sas_result.sas_token) != 0)
+                    {
+                        LogError("failure allocating Sas Token");
+                        result = NULL;
+                    }
+                    free(cred_result);
+                }
+            }
+#else
+            LogError("Failed HSM module is not supported");
+            result = NULL;
+#endif
+        }
+        else if (handle->cred_type == IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN)
+        {
+            /* Codes_SRS_IoTHub_Authorization_07_021: [If the device_sas_token is NOT NULL IoTHubClient_Auth_Get_SasToken shall return a copy of the device_sas_token. ] */
+            if (handle->device_sas_token != NULL)
+            {
+                if (mallocAndStrcpy_s(&result, handle->device_sas_token) != 0)
+                {
+                    LogError("failure allocating sas token");
+                    result = NULL;
+                }
+            }
+            else
+            {
+                LogError("failure device sas token is NULL");
+                result = NULL;
+            }
+        }
+        else if (handle->cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY)
+        {
+            /* Codes_SRS_IoTHub_Authorization_07_009: [ if handle or scope are NULL, IoTHubClient_Auth_Get_SasToken shall return NULL. ] */
+            if (scope == NULL)
+            {
+                LogError("Invalid Parameter scope: %p", scope);
+                result = NULL;
+            }
+            else
+            {
+                STRING_HANDLE sas_token;
+                size_t sec_since_epoch;
+
+                /* Codes_SRS_IoTHub_Authorization_07_010: [ IoTHubClient_Auth_Get_SasToken` shall construct the expiration time using the handle->token_expiry_time_sec added to epoch time. ] */
+                if (get_seconds_since_epoch(&sec_since_epoch) != 0)
+                {
+                    /* Codes_SRS_IoTHub_Authorization_07_020: [ If any error is encountered IoTHubClient_Auth_Get_ConnString shall return NULL. ] */
+                    LogError("failure getting seconds from epoch");
+                    result = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_IoTHub_Authorization_07_011: [ IoTHubClient_Auth_Get_ConnString shall call SASToken_CreateString to construct the sas token. ] */
+                    size_t expiry_time = sec_since_epoch + handle->token_expiry_time_sec;
+                    if ( (sas_token = SASToken_CreateString(handle->device_key, scope, key_name, expiry_time)) == NULL)
+                    {
+                        /* Codes_SRS_IoTHub_Authorization_07_020: [ If any error is encountered IoTHubClient_Auth_Get_ConnString shall return NULL. ] */
+                        LogError("Failed creating sas_token");
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_IoTHub_Authorization_07_012: [ On success IoTHubClient_Auth_Get_ConnString shall allocate and return the sas token in a char*. ] */
+                        if (mallocAndStrcpy_s(&result, STRING_c_str(sas_token) ) != 0)
+                        {
+                            /* Codes_SRS_IoTHub_Authorization_07_020: [ If any error is encountered IoTHubClient_Auth_Get_ConnString shall return NULL. ] */
+                            LogError("Failed copying result");
+                            result = NULL;
+                        }
+                        STRING_delete(sas_token);
+                    }
+                }
+            }
+        }
+        else
+        {
+            LogError("Failed getting sas token invalid credential type");
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+const char* IoTHubClient_Auth_Get_DeviceId(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    const char* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_013: [ if handle is NULL, IoTHubClient_Auth_Get_DeviceId shall return NULL. ] */
+        LogError("Invalid Parameter handle: %p", handle);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_014: [ IoTHubClient_Auth_Get_DeviceId shall return the device_id specified upon creation. ] */
+        result = handle->device_id;
+    }
+    return result;
+}
+
+const char* IoTHubClient_Auth_Get_ModuleId(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    const char* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_IoTHub_Authorization_31_025: [ if handle is NULL, IoTHubClient_Auth_Get_ModuleId shall return NULL. ] */
+        LogError("Invalid Parameter handle: %p", handle);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IoTHub_Authorization_31_026: [ IoTHubClient_Auth_Get_ModuleId shall return the module_id specified upon creation. ] */
+        result = handle->module_id;
+    }
+    return result;
+}
+
+const char* IoTHubClient_Auth_Get_DeviceKey(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    const char* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_022: [ if handle is NULL, IoTHubClient_Auth_Get_DeviceKey shall return NULL. ] */
+        LogError("Invalid Parameter handle: %p", handle);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_023: [ IoTHubClient_Auth_Get_DeviceKey shall return the device_key specified upon creation. ] */
+        result = handle->device_key;
+    }
+    return result;
+}
+
+SAS_TOKEN_STATUS IoTHubClient_Auth_Is_SasToken_Valid(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    SAS_TOKEN_STATUS result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_IoTHub_Authorization_07_015: [ if handle is NULL, IoTHubClient_Auth_Is_SasToken_Valid shall return false. ] */
+        LogError("Invalid Parameter handle: %p", handle);
+        result = SAS_TOKEN_STATUS_FAILED;
+    }
+    else
+    {
+        if (handle->cred_type == IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN)
+        {
+            if (handle->device_sas_token == NULL)
+            {
+                /* Codes_SRS_IoTHub_Authorization_07_017: [ If the sas_token is NULL IoTHubClient_Auth_Is_SasToken_Valid shall return false. ] */
+                LogError("Failure: device_sas_toke is NULL");
+                result = SAS_TOKEN_STATUS_FAILED;
+            }
+            else
+            {
+                /* Codes_SRS_IoTHub_Authorization_07_018: [ otherwise IoTHubClient_Auth_Is_SasToken_Valid shall return the value returned by SASToken_Validate. ] */
+                STRING_HANDLE strSasToken = STRING_construct(handle->device_sas_token);
+                if (strSasToken != NULL)
+                {
+                    if (!SASToken_Validate(strSasToken))
+                    {
+                        result = SAS_TOKEN_STATUS_INVALID;
+                    }
+                    else
+                    {
+                        result = SAS_TOKEN_STATUS_VALID;
+                    }
+                    STRING_delete(strSasToken);
+                }
+                else
+                {
+                    LogError("Failure constructing SAS Token");
+                    result = SAS_TOKEN_STATUS_FAILED;
+                }
+            }
+        }
+        else
+        {
+            /* Codes_SRS_IoTHub_Authorization_07_016: [ if credential type is not IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN IoTHubClient_Auth_Is_SasToken_Valid shall return SAS_TOKEN_STATUS_VALID. ] */
+            result = SAS_TOKEN_STATUS_VALID;
+        }
+    }
+    return result;
+}
+
+#ifdef USE_EDGE_MODULES
+
+// For debugging C modules, the environment can set the environment variable 'EdgeModuleCACertificateFile' to provide
+// trusted certificates.  We'd otherwise usually get these from trusted Edge service, but this complicates debugging experience.
+// EdgeModuleCACertificateFile and the related EdgeHubConnectionString can be set either manually or by tooling (e.g. VS Code).
+static char* read_ca_certificate_from_file(const char* certificate_file_name)
+{
+    char* result;
+    FILE *file_stream = NULL;
+
+    if ((file_stream = fopen(certificate_file_name, "r")) == NULL)
+    {
+        LogError("Cannot read file %s, errno=%d", certificate_file_name, errno);
+        result = NULL;
+    }
+    else if (fseek(file_stream, 0, SEEK_END) != 0)
+    {
+        LogError("fseek on file %s fails, errno=%d", certificate_file_name, errno);
+        result = NULL;
+    }
+    else
+    {
+        long int file_size = ftell(file_stream);
+        if (file_size < 0)
+        {
+            LogError("ftell fails reading %s, errno=%d",  certificate_file_name, errno);
+            result = NULL;
+        }
+        else if (file_size == 0)
+        {
+            LogError("file %s is 0 bytes, which is not valid certificate",  certificate_file_name);
+            result = NULL;
+        }
+        else
+        {
+            rewind(file_stream);
+
+            if ((result = calloc(1, file_size + 1)) == NULL)
+            {
+                LogError("Cannot allocate %lu bytes", (unsigned long)file_size);
+            }
+            else if ((fread(result, 1, file_size, file_stream) == 0) || (ferror(file_stream) != 0))
+            {
+                LogError("fread failed on file %s, errno=%d", certificate_file_name, errno);
+                free(result);
+                result = NULL;
+            }
+        }
+    }
+
+    if (file_stream != NULL)
+    {
+        fclose(file_stream);
+    }
+
+    return result;
+}
+
+// IoTHubClient_Auth_Get_TrustBundle retrieves a trust bundle - namely a PEM indicating the certificates the client should
+// trust as root authorities - to caller.  If certificate_file_name, we read this from a local file.  This should in general
+// be limited only to debugging modules on Edge.  If certificate_file_name is NULL, we invoke into the underlying
+// HSM to retrieve this.
+char* IoTHubClient_Auth_Get_TrustBundle(IOTHUB_AUTHORIZATION_HANDLE handle, const char* certificate_file_name)
+{
+    char* result;
+    if (handle == NULL)
+    {
+        LogError("Security Handle is NULL");
+        result = NULL;
+    }
+    else if (certificate_file_name != NULL)
+    {
+        result = read_ca_certificate_from_file(certificate_file_name);
+    }
+    else
+    {
+        result = iothub_device_auth_get_trust_bundle(handle->device_auth_handle);
+    }
+    return result;
+}
+#endif
+
+int IoTHubClient_Auth_Set_SasToken_Expiry(IOTHUB_AUTHORIZATION_HANDLE handle, size_t expiry_time_seconds)
+{
+    int result;
+    if (handle == NULL)
+    {
+        LogError("Invalid handle value handle: NULL");
+        result = MU_FAILURE;
+    }
+    // Validate the expiry_time in seconds
+    else if (expiry_time_seconds < MIN_SAS_EXPIRY_TIME)
+    {
+        LogError("Failure setting expiry time to value %lu min value is %d", (unsigned long)expiry_time_seconds, MIN_SAS_EXPIRY_TIME);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        handle->token_expiry_time_sec = expiry_time_seconds;
+        result = 0;
+    }
+    return result;
+}
+
+size_t IoTHubClient_Auth_Get_SasToken_Expiry(IOTHUB_AUTHORIZATION_HANDLE handle)
+{
+    size_t result;
+    if (handle == NULL)
+    {
+        LogError("Invalid handle value handle: NULL");
+        result = 0;
+    }
+    else
+    {
+        result = handle->token_expiry_time_sec;
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_core_ll.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_core_ll.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_core_ll.c	(revision 389)
@@ -0,0 +1,2989 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/string_tokenizer.h"
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/constbuffer.h"
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/singlylinkedlist.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+#include "azure_c_shared_utility/agenttime.h"
+
+#include "iothub_client_core_ll.h"
+#include "iothub_client_options.h"
+#include "iothub_client_version.h"
+#include "iothub_transport_ll.h"
+#include "internal/iothub_client_authorization.h"
+#include "internal/iothub_client_private.h"
+#include "internal/iothub_client_diagnostic.h"
+#include "internal/iothubtransport.h"
+
+#ifndef DONT_USE_UPLOADTOBLOB
+#include "internal/iothub_client_ll_uploadtoblob.h"
+#endif
+
+#ifdef USE_EDGE_MODULES
+#include "azure_c_shared_utility/envvariable.h"
+#include "azure_prov_client/iothub_security_factory.h"
+#include "internal/iothub_client_edge.h"
+#endif
+
+#define LOG_ERROR_RESULT LogError("result = %s", MU_ENUM_TO_STRING(IOTHUB_CLIENT_RESULT, result));
+#define INDEFINITE_TIME ((time_t)(-1))
+
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_FILE_UPLOAD_RESULT, IOTHUB_CLIENT_FILE_UPLOAD_RESULT_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_RESULT, IOTHUB_CLIENT_RESULT_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_RETRY_POLICY, IOTHUB_CLIENT_RETRY_POLICY_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_STATUS, IOTHUB_CLIENT_STATUS_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_IDENTITY_TYPE, IOTHUB_IDENTITY_TYPE_VALUE);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_PROCESS_ITEM_RESULT, IOTHUB_PROCESS_ITEM_RESULT_VALUE);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_IOTHUB_METHOD_STATUS, IOTHUB_CLIENT_IOTHUB_METHOD_STATUS_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_CONFIRMATION_RESULT, IOTHUB_CLIENT_CONFIRMATION_RESULT_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_CONNECTION_STATUS, IOTHUB_CLIENT_CONNECTION_STATUS_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_CONNECTION_STATUS_REASON, IOTHUB_CLIENT_CONNECTION_STATUS_REASON_VALUES);
+MU_DEFINE_ENUM_STRINGS(TRANSPORT_TYPE, TRANSPORT_TYPE_VALUES);
+MU_DEFINE_ENUM_STRINGS(DEVICE_TWIN_UPDATE_STATE, DEVICE_TWIN_UPDATE_STATE_VALUES);
+#ifndef DONT_USE_UPLOADTOBLOB
+MU_DEFINE_ENUM_STRINGS(IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT_VALUES);
+#endif // DONT_USE_UPLOADTOBLOB
+
+#define CALLBACK_TYPE_VALUES \
+    CALLBACK_TYPE_NONE,      \
+    CALLBACK_TYPE_SYNC,    \
+    CALLBACK_TYPE_ASYNC
+
+MU_DEFINE_ENUM(CALLBACK_TYPE, CALLBACK_TYPE_VALUES)
+MU_DEFINE_ENUM_STRINGS(CALLBACK_TYPE, CALLBACK_TYPE_VALUES)
+
+typedef struct IOTHUB_METHOD_CALLBACK_DATA_TAG
+{
+    CALLBACK_TYPE type;
+    IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC callbackSync;
+    IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK callbackAsync;
+    void* userContextCallback;
+}IOTHUB_METHOD_CALLBACK_DATA;
+
+typedef struct IOTHUB_EVENT_CALLBACK_TAG
+{
+    STRING_HANDLE inputName;
+    IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC callbackAsync;
+    IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX callbackAsyncEx;
+    void* userContextCallback;
+    void* userContextCallbackEx;
+}IOTHUB_EVENT_CALLBACK;
+
+typedef struct IOTHUB_MESSAGE_CALLBACK_DATA_TAG
+{
+    CALLBACK_TYPE type;
+    IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC callbackSync;
+    IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX callbackAsync;
+    void* userContextCallback;
+}IOTHUB_MESSAGE_CALLBACK_DATA;
+
+typedef struct GET_TWIN_CONTEXT_TAG
+{
+    IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK callback;
+    void* context;
+} GET_TWIN_CONTEXT;
+
+typedef struct IOTHUB_CLIENT_CORE_LL_HANDLE_DATA_TAG
+{
+    DLIST_ENTRY waitingToSend;
+    DLIST_ENTRY iot_msg_queue;
+    DLIST_ENTRY iot_ack_queue;
+    TRANSPORT_LL_HANDLE transportHandle;
+    bool isSharedTransport;
+    IOTHUB_DEVICE_HANDLE deviceHandle;
+    TRANSPORT_PROVIDER_FIELDS;
+    IOTHUB_MESSAGE_CALLBACK_DATA messageCallback;
+    IOTHUB_METHOD_CALLBACK_DATA methodCallback;
+    IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK conStatusCallback;
+    void* conStatusUserContextCallback;
+    time_t lastMessageReceiveTime;
+    TICK_COUNTER_HANDLE tickCounter; /*shared tickcounter used to track message timeouts in waitingToSend list*/
+    tickcounter_ms_t currentMessageTimeout;
+    uint64_t current_device_twin_timeout;
+    IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK deviceTwinCallback;
+    void* deviceTwinContextCallback;
+    IOTHUB_CLIENT_RETRY_POLICY retryPolicy;
+    size_t retryTimeoutLimitInSeconds;
+#ifndef DONT_USE_UPLOADTOBLOB
+    IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE uploadToBlobHandle;
+#endif
+#ifdef USE_EDGE_MODULES
+    IOTHUB_CLIENT_EDGE_HANDLE methodHandle;
+#endif
+    uint32_t data_msg_id;
+    bool complete_twin_update_encountered;
+    IOTHUB_AUTHORIZATION_HANDLE authorization_module;
+    STRING_HANDLE product_info;
+    IOTHUB_DIAGNOSTIC_SETTING_DATA diagnostic_setting;
+    SINGLYLINKEDLIST_HANDLE event_callbacks;  // List of IOTHUB_EVENT_CALLBACK's
+}IOTHUB_CLIENT_CORE_LL_HANDLE_DATA;
+
+static const char HOSTNAME_TOKEN[] = "HostName";
+static const char DEVICEID_TOKEN[] = "DeviceId";
+static const char X509_TOKEN[] = "x509";
+static const char X509_TOKEN_ONLY_ACCEPTABLE_VALUE[] = "true";
+static const char DEVICEKEY_TOKEN[] = "SharedAccessKey";
+static const char DEVICESAS_TOKEN[] = "SharedAccessSignature";
+static const char PROTOCOL_GATEWAY_HOST_TOKEN[] = "GatewayHostName";
+static const char MODULE_ID_TOKEN[] = "ModuleId";
+static const char PROVISIONING_TOKEN[] = "UseProvisioning";
+static const char PROVISIONING_ACCEPTABLE_VALUE[] = "true";
+
+
+#ifdef USE_EDGE_MODULES
+/*The following section should be moved to iothub_module_client_ll.c during impending refactor*/
+
+static const char* ENVIRONMENT_VAR_EDGEHUB_CONNECTIONSTRING = "EdgeHubConnectionString";
+static const char* ENVIRONMENT_VAR_EDGEHUB_CACERTIFICATEFILE = "EdgeModuleCACertificateFile";
+static const char* ENVIRONMENT_VAR_EDGEAUTHSCHEME = "IOTEDGE_AUTHSCHEME";
+static const char* ENVIRONMENT_VAR_EDGEDEVICEID = "IOTEDGE_DEVICEID";
+static const char* ENVIRONMENT_VAR_EDGEMODULEID = "IOTEDGE_MODULEID";
+static const char* ENVIRONMENT_VAR_EDGEHUBHOSTNAME = "IOTEDGE_IOTHUBHOSTNAME";
+static const char* ENVIRONMENT_VAR_EDGEGATEWAYHOST = "IOTEDGE_GATEWAYHOSTNAME";
+static const char* SAS_TOKEN_AUTH = "sasToken";
+
+
+typedef struct EDGE_ENVIRONMENT_VARIABLES_TAG
+{
+    const char* connection_string;
+    const char* ca_trusted_certificate_file;
+    const char* auth_scheme;
+    const char* device_id;
+    const char* iothub_name;
+    const char* iothub_suffix;
+    const char* gatewayhostname;
+    const char* module_id;
+    char* iothub_buffer;
+} EDGE_ENVIRONMENT_VARIABLES;
+
+
+static int retrieve_edge_environment_variabes(EDGE_ENVIRONMENT_VARIABLES *edge_environment_variables)
+{
+    int result;
+    const char* edgehubhostname;
+    char* edgehubhostname_separator;
+
+    if ((edge_environment_variables->connection_string = environment_get_variable(ENVIRONMENT_VAR_EDGEHUB_CONNECTIONSTRING)) != NULL)
+    {
+        if ((edge_environment_variables->ca_trusted_certificate_file = environment_get_variable(ENVIRONMENT_VAR_EDGEHUB_CACERTIFICATEFILE)) == NULL)
+        {
+            LogError("Environment variable %s is missing.  When %s is set, it is required", ENVIRONMENT_VAR_EDGEHUB_CACERTIFICATEFILE, ENVIRONMENT_VAR_EDGEHUB_CONNECTIONSTRING);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            // If we can read in the connection string and trusted certs, we're done.
+            result = 0;
+        }
+    }
+    else
+    {
+        // We're NOT using pre-configured EdgeConnection string / certificates.  In this case, we use these environment variables when
+        // communicating to Edge service.
+        if ((edge_environment_variables->auth_scheme = environment_get_variable(ENVIRONMENT_VAR_EDGEAUTHSCHEME)) == NULL)
+        {
+            LogError("Environment %s not set", ENVIRONMENT_VAR_EDGEAUTHSCHEME);
+            result = MU_FAILURE;
+        }
+        else if (strcmp(edge_environment_variables->auth_scheme, SAS_TOKEN_AUTH) != 0)
+        {
+            LogError("Environment %s was set to %s, but only support for %s", ENVIRONMENT_VAR_EDGEAUTHSCHEME, edge_environment_variables->auth_scheme, SAS_TOKEN_AUTH);
+            result = MU_FAILURE;
+        }
+        else if ((edge_environment_variables->device_id = environment_get_variable(ENVIRONMENT_VAR_EDGEDEVICEID)) == NULL)
+        {
+            LogError("Environment %s not set", ENVIRONMENT_VAR_EDGEDEVICEID);
+            result = MU_FAILURE;
+        }
+        else if ((edgehubhostname = environment_get_variable(ENVIRONMENT_VAR_EDGEHUBHOSTNAME)) == NULL)
+        {
+            LogError("Environment %s not set", ENVIRONMENT_VAR_EDGEHUBHOSTNAME);
+            result = MU_FAILURE;
+        }
+        else if ((edge_environment_variables->gatewayhostname = environment_get_variable(ENVIRONMENT_VAR_EDGEGATEWAYHOST)) == NULL)
+        {
+            LogError("Environment %s not set", ENVIRONMENT_VAR_EDGEGATEWAYHOST);
+            result = MU_FAILURE;
+        }
+        else if ((edge_environment_variables->module_id = environment_get_variable(ENVIRONMENT_VAR_EDGEMODULEID)) == NULL)
+        {
+            LogError("Environment %s not set", ENVIRONMENT_VAR_EDGEMODULEID);
+            result = MU_FAILURE;
+        }
+        // Make a copy of just ENVIRONMENT_VAR_EDGEHUBHOSTNAME.  We need to make changes in place (namely inserting a '\0')
+        // and can't do this with system environment variable safely.
+        else if (mallocAndStrcpy_s(&edge_environment_variables->iothub_buffer, edgehubhostname) != 0)
+        {
+            LogError("Unable to copy buffer");
+            result = MU_FAILURE;
+        }
+        else if ((edgehubhostname_separator = strchr(edge_environment_variables->iothub_buffer, '.')) == NULL)
+        {
+            LogError("Environment edgehub %s invalid, requires '.' separator", edge_environment_variables->iothub_buffer);
+            result = MU_FAILURE;
+        }
+        else if (*(edgehubhostname_separator + 1) == 0)
+        {
+            LogError("Environment edgehub %s invalid, no content after '.' separator", edge_environment_variables->iothub_buffer);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            edge_environment_variables->iothub_name = edge_environment_variables->iothub_buffer;
+            *edgehubhostname_separator = 0;
+            edge_environment_variables->iothub_suffix = edgehubhostname_separator + 1;
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_EDGE_HANDLE IoTHubClientCore_LL_GetEdgeHandle(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle)
+{
+    IOTHUB_CLIENT_EDGE_HANDLE result;
+    if (iotHubClientHandle != NULL)
+    {
+        result = iotHubClientHandle->methodHandle;
+    }
+    else
+    {
+        result = NULL;
+    }
+
+    return result;
+}
+#endif /* USE_EDGE_MODULES */
+
+static void setTransportProtocol(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData, TRANSPORT_PROVIDER* protocol)
+{
+    handleData->IoTHubTransport_SendMessageDisposition = protocol->IoTHubTransport_SendMessageDisposition;
+    handleData->IoTHubTransport_GetHostname = protocol->IoTHubTransport_GetHostname;
+    handleData->IoTHubTransport_SetOption = protocol->IoTHubTransport_SetOption;
+    handleData->IoTHubTransport_Create = protocol->IoTHubTransport_Create;
+    handleData->IoTHubTransport_Destroy = protocol->IoTHubTransport_Destroy;
+    handleData->IoTHubTransport_Register = protocol->IoTHubTransport_Register;
+    handleData->IoTHubTransport_Unregister = protocol->IoTHubTransport_Unregister;
+    handleData->IoTHubTransport_Subscribe = protocol->IoTHubTransport_Subscribe;
+    handleData->IoTHubTransport_Unsubscribe = protocol->IoTHubTransport_Unsubscribe;
+    handleData->IoTHubTransport_DoWork = protocol->IoTHubTransport_DoWork;
+    handleData->IoTHubTransport_SetRetryPolicy = protocol->IoTHubTransport_SetRetryPolicy;
+    handleData->IoTHubTransport_GetSendStatus = protocol->IoTHubTransport_GetSendStatus;
+    handleData->IoTHubTransport_ProcessItem = protocol->IoTHubTransport_ProcessItem;
+    handleData->IoTHubTransport_Subscribe_DeviceTwin = protocol->IoTHubTransport_Subscribe_DeviceTwin;
+    handleData->IoTHubTransport_Unsubscribe_DeviceTwin = protocol->IoTHubTransport_Unsubscribe_DeviceTwin;
+    handleData->IoTHubTransport_GetTwinAsync = protocol->IoTHubTransport_GetTwinAsync;
+    handleData->IoTHubTransport_Subscribe_DeviceMethod = protocol->IoTHubTransport_Subscribe_DeviceMethod;
+    handleData->IoTHubTransport_Unsubscribe_DeviceMethod = protocol->IoTHubTransport_Unsubscribe_DeviceMethod;
+    handleData->IoTHubTransport_DeviceMethod_Response = protocol->IoTHubTransport_DeviceMethod_Response;
+    handleData->IoTHubTransport_Subscribe_InputQueue = protocol->IoTHubTransport_Subscribe_InputQueue;
+    handleData->IoTHubTransport_Unsubscribe_InputQueue = protocol->IoTHubTransport_Unsubscribe_InputQueue;
+    handleData->IoTHubTransport_SetCallbackContext = protocol->IoTHubTransport_SetCallbackContext;
+}
+
+static bool is_event_equal(IOTHUB_EVENT_CALLBACK *event_callback, const char *input_name)
+{
+    bool result;
+
+    if (event_callback != NULL)
+    {
+        const char* event_input_name = STRING_c_str(event_callback->inputName);
+        if ((event_input_name != NULL) && (input_name != NULL))
+        {
+            // Matched the input queue name of a named handler
+            result = (strcmp(event_input_name, input_name) == 0);
+        }
+        else if ((input_name == NULL) && (event_input_name == NULL))
+        {
+            // Matched the default handler
+            result = true;
+        }
+        else
+        {
+            result = false;
+        }
+    }
+    else
+    {
+        result = false;
+    }
+    return result;
+}
+
+static bool is_event_equal_for_match(LIST_ITEM_HANDLE list_item, const void* match_context)
+{
+    return is_event_equal((IOTHUB_EVENT_CALLBACK*)singlylinkedlist_item_get_value(list_item), (const char*)match_context);
+}
+
+static void device_twin_data_destroy(IOTHUB_DEVICE_TWIN* client_item)
+{
+    CONSTBUFFER_DecRef(client_item->report_data_handle);
+    free(client_item);
+}
+
+static int create_edge_handle(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handle_data, const IOTHUB_CLIENT_CONFIG* config, const char* module_id)
+{
+    int result;
+    (void)config;
+    (void)module_id;
+#ifdef USE_EDGE_MODULES
+    /* There is no way to currently distinguish a regular module from a edge module, so this handle is created regardless of if appropriate.
+    However, as a gateway hostname is required in order to create an Edge Handle, we need to at least make sure that exists
+    in order to prevent errors.
+
+    The end result is that all edge modules will have an EdgeHandle, but only some non-edge modules will have it.
+    Regardless, non-edge modules will never be able to use the handle.
+    */
+    if (config->protocolGatewayHostName != NULL)
+    {
+        handle_data->methodHandle = IoTHubClient_EdgeHandle_Create(config, handle_data->authorization_module, module_id);
+
+        if (handle_data->methodHandle == NULL)
+        {
+            LogError("Unable to IoTHubModuleClient_LL_MethodHandle_Create");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            result = 0;
+        }
+    }
+    else
+    {
+        result = 0;
+    }
+
+#else
+    (void)handle_data;
+    result = 0;
+#endif
+    return result;
+}
+
+static int create_blob_upload_module(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handle_data, const IOTHUB_CLIENT_CONFIG* config)
+{
+    int result;
+    (void)handle_data;
+    (void)config;
+#ifndef DONT_USE_UPLOADTOBLOB
+    handle_data->uploadToBlobHandle = IoTHubClient_LL_UploadToBlob_Create(config, handle_data->authorization_module);
+    if (handle_data->uploadToBlobHandle == NULL)
+    {
+        LogError("unable to IoTHubClientCore_LL_UploadToBlob_Create");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = 0;
+    }
+#else
+    result = 0;
+#endif
+    return result;
+}
+
+static void destroy_blob_upload_module(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handle_data)
+{
+    (void)handle_data;
+#ifndef DONT_USE_UPLOADTOBLOB
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_046: [ If creating the TICK_COUNTER_HANDLE fails then IoTHubClientCore_LL_Create shall fail and return NULL. ]*/
+    IoTHubClient_LL_UploadToBlob_Destroy(handle_data->uploadToBlobHandle);
+#endif
+}
+
+static void destroy_module_method_module(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handle_data)
+{
+    (void)handle_data;
+#ifdef USE_EDGE_MODULES
+    IoTHubClient_EdgeHandle_Destroy(handle_data->methodHandle);
+#endif
+}
+
+static bool invoke_message_callback(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData, MESSAGE_CALLBACK_INFO* messageData)
+{
+    bool result;
+    /* Codes_SRS_IOTHUBCLIENT_LL_09_004: [IoTHubClient_LL_GetLastMessageReceiveTime shall return lastMessageReceiveTime in localtime] */
+    handleData->lastMessageReceiveTime = get_time(NULL);
+
+    switch (handleData->messageCallback.type)
+    {
+        case CALLBACK_TYPE_NONE:
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_032: [If the client is not subscribed to receive messages then IoTHubClient_LL_MessageCallback shall return false.] */
+            LogError("Invalid workflow - not currently set up to accept messages");
+            result = false;
+            break;
+        }
+        case CALLBACK_TYPE_SYNC:
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_030: [If messageCallbackType is LEGACY then IoTHubClient_LL_MessageCallback shall invoke the last callback function (the parameter messageCallback to IoTHubClient_LL_SetMessageCallback) passing the message and the passed userContextCallback.]*/
+            IOTHUBMESSAGE_DISPOSITION_RESULT cb_result = handleData->messageCallback.callbackSync(messageData->messageHandle, handleData->messageCallback.userContextCallback);
+
+            /*Codes_SRS_IOTHUBCLIENT_LL_10_007: [If messageCallbackType is LEGACY then IoTHubClient_LL_MessageCallback shall send the message disposition as returned by the client to the underlying layer.] */
+            if (handleData->IoTHubTransport_SendMessageDisposition(messageData, cb_result) != IOTHUB_CLIENT_OK)
+            {
+                LogError("IoTHubTransport_SendMessageDisposition failed");
+            }
+            result = true;
+            break;
+        }
+        case CALLBACK_TYPE_ASYNC:
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_10_009: [If messageCallbackType is ASYNC then IoTHubClient_LL_MessageCallback shall return what messageCallbacEx returns.] */
+            result = handleData->messageCallback.callbackAsync(messageData, handleData->messageCallback.userContextCallback);
+            if (!result)
+            {
+                LogError("messageCallbackEx failed");
+            }
+            break;
+        }
+        default:
+        {
+            LogError("Invalid state");
+            result = false;
+            break;
+        }
+    }
+
+    return result;
+}
+
+/*Codes_SRS_IOTHUBCLIENT_LL_10_032: ["product_info" - takes a char string as an argument to specify the product information(e.g. `"ProductName/ProductVersion"`). ]*/
+/*Codes_SRS_IOTHUBCLIENT_LL_10_034: ["product_info" - shall store the given string concatenated with the sdk information and the platform information in the form(ProductInfo DeviceSDKName / DeviceSDKVersion(OSName OSVersion; Architecture). ]*/
+static STRING_HANDLE make_product_info(const char* product)
+{
+    STRING_HANDLE result;
+    STRING_HANDLE pfi = platform_get_platform_info(PLATFORM_INFO_OPTION_DEFAULT);
+    if (pfi == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        if (product == NULL)
+        {
+            result = STRING_construct_sprintf("%s %s", CLIENT_DEVICE_TYPE_PREFIX CLIENT_DEVICE_BACKSLASH IOTHUB_SDK_VERSION, STRING_c_str(pfi));
+        }
+        else
+        {
+            result = STRING_construct_sprintf("%s %s %s", product, CLIENT_DEVICE_TYPE_PREFIX CLIENT_DEVICE_BACKSLASH IOTHUB_SDK_VERSION, STRING_c_str(pfi));
+        }
+        STRING_delete(pfi);
+    }
+    return result;
+}
+
+static void IoTHubClientCore_LL_SendComplete(PDLIST_ENTRY completed, IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* ctx)
+{
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_022: [If parameter completed is NULL, or parameter handle is NULL then IoTHubClientCore_LL_SendBatch shall return.]*/
+    if (
+        (ctx == NULL) ||
+        (completed == NULL)
+        )
+    {
+        /*"shall return"*/
+        LogError("invalid arg");
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_027: [If parameter result is IOTHUB_CLIENT_CONFIRMATION_ERROR then IoTHubClientCore_LL_SendComplete shall call all the non-NULL callbacks with the result parameter set to IOTHUB_CLIENT_CONFIRMATION_ERROR and the context set to the context passed originally in the SendEventAsync call.] */
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_025: [If parameter result is IOTHUB_CLIENT_CONFIRMATION_OK then IoTHubClientCore_LL_SendComplete shall call all the non-NULL callbacks with the result parameter set to IOTHUB_CLIENT_CONFIRMATION_OK and the context set to the context passed originally in the SendEventAsync call.]*/
+        PDLIST_ENTRY oldest;
+        while ((oldest = DList_RemoveHeadList(completed)) != completed)
+        {
+            IOTHUB_MESSAGE_LIST* messageList = (IOTHUB_MESSAGE_LIST*)containingRecord(oldest, IOTHUB_MESSAGE_LIST, entry);
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_026: [If any callback is NULL then there shall not be a callback call.]*/
+            if (messageList->callback != NULL)
+            {
+                messageList->callback(result, messageList->context);
+            }
+            IoTHubMessage_Destroy(messageList->messageHandle);
+            free(messageList);
+        }
+    }
+}
+
+static void IoTHubClientCore_LL_RetrievePropertyComplete(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* ctx)
+{
+    if (ctx == NULL)
+    {
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_013: [ If handle is NULL then IoTHubClientCore_LL_RetrievePropertyComplete shall do nothing.] */
+        LogError("Invalid argument ctx NULL");
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_014: [ If deviceTwinCallback is NULL then IoTHubClientCore_LL_RetrievePropertyComplete shall do nothing.] */
+        if (handleData->deviceTwinCallback)
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_07_015: [ If the the update_state parameter is DEVICE_TWIN_UPDATE_PARTIAL and a DEVICE_TWIN_UPDATE_COMPLETE has not been previously recieved then IoTHubClientCore_LL_RetrievePropertyComplete shall do nothing.] */
+            if (update_state == DEVICE_TWIN_UPDATE_COMPLETE)
+            {
+                handleData->complete_twin_update_encountered = true;
+            }
+            if (handleData->complete_twin_update_encountered)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_016: [ If deviceTwinCallback is set and DEVICE_TWIN_UPDATE_COMPLETE has been encountered then IoTHubClientCore_LL_RetrievePropertyComplete shall call deviceTwinCallback.] */
+                handleData->deviceTwinCallback(update_state, payLoad, size, handleData->deviceTwinContextCallback);
+            }
+        }
+    }
+}
+
+static void IoTHubClientCore_LL_ReportedStateComplete(uint32_t item_id, int status_code, void* ctx)
+{
+    /* Codes_SRS_IOTHUBCLIENT_LL_07_002: [ if handle or queue_handle are NULL then IoTHubClientCore_LL_ReportedStateComplete shall do nothing. ] */
+    if (ctx == NULL)
+    {
+        /*"shall return"*/
+        LogError("Invalid argument handle=%p", ctx);
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_003: [ IoTHubClientCore_LL_ReportedStateComplete shall enumerate through the IOTHUB_DEVICE_TWIN structures in queue_handle. ]*/
+        DLIST_ENTRY* client_item = handleData->iot_ack_queue.Flink;
+        while (client_item != &(handleData->iot_ack_queue)) /*while we are not at the end of the list*/
+        {
+            PDLIST_ENTRY next_item = client_item->Flink;
+            IOTHUB_DEVICE_TWIN* queue_data = containingRecord(client_item, IOTHUB_DEVICE_TWIN, entry);
+            if (queue_data->item_id == item_id)
+            {
+                if (queue_data->reported_state_callback != NULL)
+                {
+                    queue_data->reported_state_callback(status_code, queue_data->context);
+                }
+                /*Codes_SRS_IOTHUBCLIENT_LL_07_009: [ IoTHubClientCore_LL_ReportedStateComplete shall remove the IOTHUB_DEVICE_TWIN item from the ack queue.]*/
+                DList_RemoveEntryList(client_item);
+                device_twin_data_destroy(queue_data);
+                break;
+            }
+            client_item = next_item;
+        }
+    }
+}
+
+static void IoTHubClientCore_LL_ConnectionStatusCallBack(IOTHUB_CLIENT_CONNECTION_STATUS status, IOTHUB_CLIENT_CONNECTION_STATUS_REASON reason, void* ctx)
+{
+    /*Codes_SRS_IOTHUBCLIENT_LL_25_113: [If parameter connectionStatus is NULL or parameter handle is NULL then IoTHubClientCore_LL_ConnectionStatusCallBack shall return.]*/
+    if (ctx == NULL)
+    {
+        /*"shall return"*/
+        LogError("invalid arg");
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_25_114: [IoTHubClientCore_LL_ConnectionStatusCallBack shall call non-callback set by the user from IoTHubClientCore_LL_SetConnectionStatusCallback passing the status, reason and the passed userContextCallback.]*/
+        if (handleData->conStatusCallback != NULL)
+        {
+            handleData->conStatusCallback(status, reason, handleData->conStatusUserContextCallback);
+        }
+    }
+
+}
+
+static const char* IoTHubClientCore_LL_GetProductInfo(void* ctx)
+{
+    const char* result;
+    if (ctx == NULL)
+    {
+        result = NULL;
+        LogError("invalid argument ctx %p", ctx);
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* iothub_data = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+        result = STRING_c_str(iothub_data->product_info);
+    }
+    return result;
+}
+
+static bool IoTHubClientCore_LL_MessageCallbackFromInput(MESSAGE_CALLBACK_INFO* messageData, void* ctx)
+{
+    bool result;
+    IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+
+    if ((handleData == NULL) || messageData == NULL)
+    {
+        // Codes_SRS_IOTHUBCLIENT_LL_31_137: [ If either parameter `handle` or `messageData` is `NULL` then `IoTHubClient_LL_MessageCallbackFromInput` shall return `false`.** ]
+        LogError("invalid argument: handle(%p), messageData(%p)", handleData, messageData);
+        result = false;
+    }
+    else if (messageData->messageHandle == NULL)
+    {
+        // Codes_SRS_IOTHUBCLIENT_LL_31_137: [ If either parameter `handle` or `messageData` is `NULL` then `IoTHubClient_LL_MessageCallbackFromInput` shall return `false`.** ]
+        LogError("invalid argument messageData->messageHandle(NULL)");
+        result = false;
+    }
+    else if (handleData->event_callbacks == NULL)
+    {
+        LogError("Callback from input called but no input specific callbacks registered");
+        result = false;
+    }
+    else
+    {
+        const char* inputName = IoTHubMessage_GetInputName(messageData->messageHandle);
+
+        LIST_ITEM_HANDLE item_handle = NULL;
+
+        item_handle = singlylinkedlist_find(handleData->event_callbacks, is_event_equal_for_match, (const void*)inputName);
+
+        if (item_handle == NULL)
+        {
+            // Codes_SRS_IOTHUBCLIENT_LL_31_138: [ If there is no registered handler for the inputName from `IoTHubMessage_GetInputName`, then `IoTHubClient_LL_MessageCallbackFromInput` shall attempt invoke the default handler handler.** ]
+            item_handle = singlylinkedlist_find(handleData->event_callbacks, is_event_equal_for_match, NULL);
+        }
+
+        if (item_handle == NULL)
+        {
+            LogError("Could not find callback (explicit or default) for input queue %s", inputName);
+            result = false;
+        }
+        else
+        {
+            IOTHUB_EVENT_CALLBACK* event_callback = (IOTHUB_EVENT_CALLBACK*)singlylinkedlist_item_get_value(item_handle);
+            if (NULL == event_callback)
+            {
+                LogError("singlylinkedlist_item_get_value for event_callback failed");
+                result = false;
+            }
+            else
+            {
+                // Codes_SRS_IOTHUBCLIENT_LL_09_004: [IoTHubClient_LL_GetLastMessageReceiveTime shall return lastMessageReceiveTime in localtime]
+                handleData->lastMessageReceiveTime = get_time(NULL);
+
+                if (event_callback->callbackAsyncEx != NULL)
+                {
+                    // Codes_SRS_IOTHUBCLIENT_LL_31_139: [ `IoTHubClient_LL_MessageCallbackFromInput` shall the callback from the given inputName queue if it has been registered.** ]
+                    result = event_callback->callbackAsyncEx(messageData, event_callback->userContextCallbackEx);
+                }
+                else
+                {
+                    // Codes_SRS_IOTHUBCLIENT_LL_31_139: [ `IoTHubClient_LL_MessageCallbackFromInput` shall the callback from the given inputName queue if it has been registered.** ]
+                    IOTHUBMESSAGE_DISPOSITION_RESULT cb_result = event_callback->callbackAsync(messageData->messageHandle, event_callback->userContextCallback);
+
+                    // Codes_SRS_IOTHUBCLIENT_LL_31_140: [ `IoTHubClient_LL_MessageCallbackFromInput` shall send the message disposition as returned by the client to the underlying layer and return `true` if an input queue match is found.** ]
+                    if (handleData->IoTHubTransport_SendMessageDisposition(messageData, cb_result) != IOTHUB_CLIENT_OK)
+                    {
+                        LogError("IoTHubTransport_SendMessageDisposition failed");
+                    }
+                    result = true;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+static bool IoTHubClientCore_LL_MessageCallback(MESSAGE_CALLBACK_INFO* messageData, void* ctx)
+{
+    bool result;
+    if ((ctx == NULL) || messageData == NULL)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_029: [If parameter handle is NULL then IoTHubClient_LL_MessageCallback shall return IOTHUBMESSAGE_ABANDONED.] */
+        LogError("invalid argument: ctx(%p), messageData(%p)", ctx, messageData);
+        result = false;
+    }
+    else if (messageData->messageHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_10_004: [If messageHandle field of paramger messageData is NULL then IoTHubClient_LL_MessageCallback shall return IOTHUBMESSAGE_ABANDONED.] */
+        LogError("invalid argument messageData->messageHandle(NULL)");
+        result = false;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+        return invoke_message_callback(handleData, messageData);
+    }
+    return result;
+}
+
+static int IoTHubClientCore_LL_DeviceMethodComplete(const char* method_name, const unsigned char* payLoad, size_t size, METHOD_HANDLE response_id, void* ctx)
+{
+    int result;
+    if (ctx == NULL)
+    {
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_017: [ If handle or response is NULL then IoTHubClientCore_LL_DeviceMethodComplete shall return 500. ] */
+        LogError("Invalid argument ctx=%p", ctx);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_018: [ If deviceMethodCallback is not NULL IoTHubClientCore_LL_DeviceMethodComplete shall execute deviceMethodCallback and return the status. ] */
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)ctx;
+        switch (handleData->methodCallback.type)
+        {
+            case CALLBACK_TYPE_SYNC:
+            {
+                unsigned char* payload_resp = NULL;
+                size_t response_size = 0;
+                result = handleData->methodCallback.callbackSync(method_name, payLoad, size, &payload_resp, &response_size, handleData->methodCallback.userContextCallback);
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_020: [ deviceMethodCallback shall build the BUFFER_HANDLE with the response payload from the IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC callback. ] */
+                if (payload_resp != NULL && response_size > 0)
+                {
+                    result = handleData->IoTHubTransport_DeviceMethod_Response(handleData->deviceHandle, response_id, payload_resp, response_size, result);
+                }
+                else
+                {
+                    result = MU_FAILURE;
+                }
+                if (payload_resp != NULL)
+                {
+                    free(payload_resp);
+                }
+                break;
+            }
+            case CALLBACK_TYPE_ASYNC:
+                result = handleData->methodCallback.callbackAsync(method_name, payLoad, size, response_id, handleData->methodCallback.userContextCallback);
+                break;
+            default:
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_019: [ If deviceMethodCallback is NULL IoTHubClientCore_LL_DeviceMethodComplete shall return 404. ] */
+                result = 0;
+                break;
+        }
+    }
+    return result;
+}
+
+static IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* initialize_iothub_client(const IOTHUB_CLIENT_CONFIG* client_config, const IOTHUB_CLIENT_DEVICE_CONFIG* device_config, bool use_dev_auth, const char* module_id)
+{
+    IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* result;
+    srand((unsigned int)time(NULL));
+    STRING_HANDLE product_info = make_product_info(NULL);
+    if (product_info == NULL)
+    {
+        LogError("failed to initialize product info");
+        result = NULL;
+    }
+    else
+    {
+        result = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)malloc(sizeof(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA));
+        if (result == NULL)
+        {
+            LogError("failure allocating IOTHUB_CLIENT_CORE_LL_HANDLE_DATA");
+            STRING_delete(product_info);
+        }
+        else
+        {
+            IOTHUB_CLIENT_CONFIG actual_config;
+            const IOTHUB_CLIENT_CONFIG* config = NULL;
+            char* IoTHubName = NULL;
+            char* IoTHubSuffix = NULL;
+
+            memset(result, 0, sizeof(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA));
+            if (use_dev_auth)
+            {
+                if ((result->authorization_module = IoTHubClient_Auth_CreateFromDeviceAuth(client_config->deviceId, module_id)) == NULL)
+                {
+                    LogError("Failed create authorization module");
+                    free(result);
+                    STRING_delete(product_info);
+                    result = NULL;
+                }
+            }
+            else
+            {
+                const char* device_key;
+                const char* device_id;
+                const char* sas_token;
+                if (device_config == NULL)
+                {
+                    device_key = client_config->deviceKey;
+                    device_id = client_config->deviceId;
+                    sas_token = client_config->deviceSasToken;
+                }
+                else
+                {
+                    device_key = device_config->deviceKey;
+                    device_id = device_config->deviceId;
+                    sas_token = device_config->deviceSasToken;
+                }
+
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_029: [ IoTHubClientCore_LL_Create shall create the Auth module with the device_key, device_id, and/or deviceSasToken values ] */
+                if ((result->authorization_module = IoTHubClient_Auth_Create(device_key, device_id, sas_token, module_id)) == NULL)
+                {
+                    LogError("Failed create authorization module");
+                    free(result);
+                    STRING_delete(product_info);
+                    result = NULL;
+                }
+            }
+
+            if (result != NULL)
+            {
+                TRANSPORT_CALLBACKS_INFO transport_cb;
+                memset(&transport_cb, 0, sizeof(TRANSPORT_CALLBACKS_INFO));
+                transport_cb.send_complete_cb = IoTHubClientCore_LL_SendComplete;
+                transport_cb.twin_retrieve_prop_complete_cb = IoTHubClientCore_LL_RetrievePropertyComplete;
+                transport_cb.twin_rpt_state_complete_cb = IoTHubClientCore_LL_ReportedStateComplete;
+                transport_cb.connection_status_cb = IoTHubClientCore_LL_ConnectionStatusCallBack;
+                transport_cb.prod_info_cb = IoTHubClientCore_LL_GetProductInfo;
+                transport_cb.msg_input_cb = IoTHubClientCore_LL_MessageCallbackFromInput;
+                transport_cb.msg_cb = IoTHubClientCore_LL_MessageCallback;
+                transport_cb.method_complete_cb = IoTHubClientCore_LL_DeviceMethodComplete;
+
+                if (client_config != NULL)
+                {
+                    IOTHUBTRANSPORT_CONFIG lowerLayerConfig;
+                    memset(&lowerLayerConfig, 0, sizeof(IOTHUBTRANSPORT_CONFIG));
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_006: [IoTHubClientCore_LL_Create shall populate a structure of type IOTHUBTRANSPORT_CONFIG with the information from config parameter and the previous DLIST and shall pass that to the underlying layer _Create function.]*/
+                    lowerLayerConfig.upperConfig = client_config;
+                    lowerLayerConfig.waitingToSend = &(result->waitingToSend);
+                    lowerLayerConfig.auth_module_handle = result->authorization_module;
+                    lowerLayerConfig.moduleId = module_id;
+
+                    setTransportProtocol(result, (TRANSPORT_PROVIDER*)client_config->protocol());
+                    if ((result->transportHandle = result->IoTHubTransport_Create(&lowerLayerConfig, &transport_cb, result)) == NULL)
+                    {
+                        /*Codes_SRS_IOTHUBCLIENT_LL_02_007: [If the underlaying layer _Create function fails them IoTHubClientCore_LL_Create shall fail and return NULL.] */
+                        LogError("underlying transport failed");
+                        destroy_blob_upload_module(result);
+                        destroy_module_method_module(result);
+                        tickcounter_destroy(result->tickCounter);
+                        IoTHubClient_Auth_Destroy(result->authorization_module);
+                        STRING_delete(product_info);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /*Codes_SRS_IOTHUBCLIENT_LL_02_008: [Otherwise, IoTHubClientCore_LL_Create shall succeed and return a non-NULL handle.] */
+                        result->isSharedTransport = false;
+                        config = client_config;
+                    }
+                }
+                else
+                {
+                    STRING_HANDLE transport_hostname = NULL;
+
+                    result->transportHandle = device_config->transportHandle;
+                    setTransportProtocol(result, (TRANSPORT_PROVIDER*)device_config->protocol());
+
+                    if (result->IoTHubTransport_SetCallbackContext(result->transportHandle, result) != 0)
+                    {
+                        LogError("unable to set transport callbacks");
+                        IoTHubClient_Auth_Destroy(result->authorization_module);
+                        STRING_delete(product_info);
+                        free(result);
+                        result = NULL;
+                    }
+                    else if ((transport_hostname = result->IoTHubTransport_GetHostname(result->transportHandle)) == NULL)
+                    {
+                        /*Codes_SRS_IOTHUBCLIENT_LL_02_097: [ If creating the data structures fails or instantiating the IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE fails then IoTHubClientCore_LL_CreateWithTransport shall fail and return NULL. ]*/
+                        LogError("unable to determine the transport IoTHub name");
+                        IoTHubClient_Auth_Destroy(result->authorization_module);
+                        STRING_delete(product_info);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        const char* hostname = STRING_c_str(transport_hostname);
+                        /*Codes_SRS_IOTHUBCLIENT_LL_02_096: [ IoTHubClientCore_LL_CreateWithTransport shall create the data structures needed to instantiate a IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE. ]*/
+                        /*the first '.' says where the iothubname finishes*/
+                        const char* whereIsDot = strchr(hostname, '.');
+                        if (whereIsDot == NULL)
+                        {
+                            /*Codes_SRS_IOTHUBCLIENT_LL_02_097: [ If creating the data structures fails or instantiating the IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE fails then IoTHubClientCore_LL_CreateWithTransport shall fail and return NULL. ]*/
+                            LogError("unable to determine the IoTHub name");
+                            IoTHubClient_Auth_Destroy(result->authorization_module);
+                            STRING_delete(product_info);
+                            free(result);
+                            result = NULL;
+                        }
+                        else
+                        {
+                            size_t suffix_len = strlen(whereIsDot);
+                            /*Codes_SRS_IOTHUBCLIENT_LL_02_096: [ IoTHubClientCore_LL_CreateWithTransport shall create the data structures needed to instantiate a IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE. ]*/
+                            IoTHubName = (char*)malloc(whereIsDot - hostname + 1);
+                            if (IoTHubName == NULL)
+                            {
+                                /*Codes_SRS_IOTHUBCLIENT_LL_02_097: [ If creating the data structures fails or instantiating the IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE fails then IoTHubClientCore_LL_CreateWithTransport shall fail and return NULL. ]*/
+                                LogError("unable to malloc");
+                                IoTHubClient_Auth_Destroy(result->authorization_module);
+                                STRING_delete(product_info);
+                                free(result);
+                                result = NULL;
+                            }
+                            else if ((IoTHubSuffix = (char*)malloc(suffix_len + 1)) == NULL)
+                            {
+                                /*Codes_SRS_IOTHUBCLIENT_LL_02_097: [ If creating the data structures fails or instantiating the IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE fails then IoTHubClientCore_LL_CreateWithTransport shall fail and return NULL. ]*/
+                                LogError("unable to malloc");
+                                IoTHubClient_Auth_Destroy(result->authorization_module);
+                                STRING_delete(product_info);
+                                free(result);
+                                result = NULL;
+                            }
+                            else
+                            {
+                                memset(IoTHubName, 0, whereIsDot - hostname + 1);
+                                (void)memcpy(IoTHubName, hostname, whereIsDot - hostname);
+                                (void)strcpy(IoTHubSuffix, whereIsDot+1);
+
+                                actual_config.deviceId = device_config->deviceId;
+                                actual_config.deviceKey = device_config->deviceKey;
+                                actual_config.deviceSasToken = device_config->deviceSasToken;
+                                actual_config.iotHubName = IoTHubName;
+                                actual_config.iotHubSuffix = IoTHubSuffix;
+                                actual_config.protocol = NULL; /*irrelevant to IoTHubClientCore_LL_UploadToBlob*/
+                                actual_config.protocolGatewayHostName = NULL; /*irrelevant to IoTHubClientCore_LL_UploadToBlob*/
+
+                                config = &actual_config;
+
+                                /*Codes_SRS_IOTHUBCLIENT_LL_02_008: [Otherwise, IoTHubClientCore_LL_Create shall succeed and return a non-NULL handle.] */
+                                result->isSharedTransport = true;
+                            }
+                        }
+                    }
+                    STRING_delete(transport_hostname);
+                }
+            }
+            if (result != NULL)
+            {
+                if (create_blob_upload_module(result, config) != 0)
+                {
+                    LogError("unable to create blob upload");
+                    // Codes_SRS_IOTHUBCLIENT_LL_09_010: [ If any failure occurs `IoTHubClientCore_LL_Create` shall destroy the `transportHandle` only if it has created it ]
+                    if (!result->isSharedTransport)
+                    {
+                        result->IoTHubTransport_Destroy(result->transportHandle);
+                    }
+                    destroy_blob_upload_module(result);
+                    IoTHubClient_Auth_Destroy(result->authorization_module);
+                    STRING_delete(product_info);
+                    free(result);
+                    result = NULL;
+                }
+                else if ((module_id != NULL) && create_edge_handle(result, config, module_id) != 0)
+                {
+                    LogError("unable to create module method handle");
+                    if (!result->isSharedTransport)
+                    {
+                        result->IoTHubTransport_Destroy(result->transportHandle);
+                    }
+                    destroy_blob_upload_module(result);
+                    IoTHubClient_Auth_Destroy(result->authorization_module);
+                    STRING_delete(product_info);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    if ((result->tickCounter = tickcounter_create()) == NULL)
+                    {
+                        LogError("unable to get a tickcounter");
+                        // Codes_SRS_IOTHUBCLIENT_LL_09_010: [ If any failure occurs `IoTHubClientCore_LL_Create` shall destroy the `transportHandle` only if it has created it ]
+                        if (!result->isSharedTransport)
+                        {
+                            result->IoTHubTransport_Destroy(result->transportHandle);
+                        }
+                        destroy_blob_upload_module(result);
+                        destroy_module_method_module(result);
+                        IoTHubClient_Auth_Destroy(result->authorization_module);
+                        STRING_delete(product_info);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /*Codes_SRS_IOTHUBCLIENT_LL_02_004: [Otherwise IoTHubClientCore_LL_Create shall initialize a new DLIST (further called "waitingToSend") containing records with fields of the following types: IOTHUB_MESSAGE_HANDLE, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK, void*.]*/
+                        DList_InitializeListHead(&(result->waitingToSend));
+                        DList_InitializeListHead(&(result->iot_msg_queue));
+                        DList_InitializeListHead(&(result->iot_ack_queue));
+                        result->messageCallback.type = CALLBACK_TYPE_NONE;
+                        result->lastMessageReceiveTime = INDEFINITE_TIME;
+                        result->data_msg_id = 1;
+                        result->product_info = product_info;
+
+                        IOTHUB_DEVICE_CONFIG deviceConfig;
+                        deviceConfig.deviceId = config->deviceId;
+                        deviceConfig.deviceKey = config->deviceKey;
+                        deviceConfig.deviceSasToken = config->deviceSasToken;
+                        deviceConfig.authorization_module = result->authorization_module;
+                        deviceConfig.moduleId = module_id;
+
+                        /*Codes_SRS_IOTHUBCLIENT_LL_17_008: [IoTHubClientCore_LL_Create shall call the transport _Register function with a populated structure of type IOTHUB_DEVICE_CONFIG and waitingToSend list.] */
+                        if ((result->deviceHandle = result->IoTHubTransport_Register(result->transportHandle, &deviceConfig, &(result->waitingToSend))) == NULL)
+                        {
+                            LogError("Registering device in transport failed");
+                            IoTHubClient_Auth_Destroy(result->authorization_module);
+                            // Codes_SRS_IOTHUBCLIENT_LL_09_010: [ If any failure occurs `IoTHubClientCore_LL_Create` shall destroy the `transportHandle` only if it has created it ]
+                            if (!result->isSharedTransport)
+                            {
+                                result->IoTHubTransport_Destroy(result->transportHandle);
+                            }
+                            destroy_blob_upload_module(result);
+                            destroy_module_method_module(result);
+                            tickcounter_destroy(result->tickCounter);
+                            STRING_delete(product_info);
+                            free(result);
+                            result = NULL;
+                        }
+                        else
+                        {
+                            /*Codes_SRS_IOTHUBCLIENT_LL_02_042: [ By default, messages shall not timeout. ]*/
+                            result->currentMessageTimeout = 0;
+                            result->current_device_twin_timeout = 0;
+
+                            result->diagnostic_setting.currentMessageNumber = 0;
+                            result->diagnostic_setting.diagSamplingPercentage = 0;
+                            /*Codes_SRS_IOTHUBCLIENT_LL_25_124: [ `IoTHubClientCore_LL_Create` shall set the default retry policy as Exponential backoff with jitter and if succeed and return a `non-NULL` handle. ]*/
+                            if (IoTHubClientCore_LL_SetRetryPolicy(result, IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER, 0) != IOTHUB_CLIENT_OK)
+                            {
+                                LogError("Setting default retry policy in transport failed");
+                                result->IoTHubTransport_Unregister(result->deviceHandle);
+                                IoTHubClient_Auth_Destroy(result->authorization_module);
+                                // Codes_SRS_IOTHUBCLIENT_LL_09_010: [ If any failure occurs `IoTHubClientCore_LL_Create` shall destroy the `transportHandle` only if it has created it ]
+                                if (!result->isSharedTransport)
+                                {
+                                    result->IoTHubTransport_Destroy(result->transportHandle);
+                                }
+                                destroy_blob_upload_module(result);
+                                destroy_module_method_module(result);
+                                tickcounter_destroy(result->tickCounter);
+                                STRING_delete(product_info);
+                                free(result);
+                                result = NULL;
+                            }
+                        }
+                    }
+                }
+            }
+            if (IoTHubName)
+            {
+                free(IoTHubName);
+            }
+            if (IoTHubSuffix)
+            {
+                free(IoTHubSuffix);
+            }
+        }
+    }
+    return result;
+}
+
+static uint32_t get_next_item_id(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData)
+{
+    if (handleData->data_msg_id+1 >= UINT32_MAX)
+    {
+        handleData->data_msg_id = 1;
+    }
+    else
+    {
+        handleData->data_msg_id++;
+    }
+    return handleData->data_msg_id;
+}
+
+static IOTHUB_DEVICE_TWIN* dev_twin_data_create(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData, uint32_t id, const unsigned char* reportedState, size_t size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK reportedStateCallback, void* userContextCallback)
+{
+    IOTHUB_DEVICE_TWIN* result = (IOTHUB_DEVICE_TWIN*)malloc(sizeof(IOTHUB_DEVICE_TWIN) );
+    if (result != NULL)
+    {
+        result->report_data_handle = CONSTBUFFER_Create(reportedState, size);
+        if (result->report_data_handle == NULL)
+        {
+            LogError("Failure allocating reported state data");
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            result->item_id = id;
+            result->ms_timesOutAfter = 0;
+            result->context = userContextCallback;
+            result->reported_state_callback = reportedStateCallback;
+            result->client_handle = handleData;
+            result->device_handle = handleData->deviceHandle;
+        }
+    }
+    else
+    {
+        LogError("Failure allocating device twin information");
+    }
+    return result;
+}
+
+static void on_get_device_twin_completed(DEVICE_TWIN_UPDATE_STATE update_state, const unsigned char* payLoad, size_t size, void* userContextCallback)
+{
+    if (userContextCallback == NULL)
+    {
+        LogError("Invalid argument (userContextCallback=NULL)");
+    }
+    else
+    {
+        GET_TWIN_CONTEXT* getTwinCtx = (GET_TWIN_CONTEXT*)userContextCallback;
+
+        getTwinCtx->callback(update_state, payLoad, size, getTwinCtx->context);
+
+        free(getTwinCtx);
+    }
+}
+
+static void delete_event(IOTHUB_EVENT_CALLBACK* event_callback)
+{
+    STRING_delete(event_callback->inputName);
+    free(event_callback->userContextCallbackEx);
+    free(event_callback);
+}
+
+static void delete_event_callback(const void* item, const void* action_context, bool* continue_processing)
+{
+    (void)action_context;
+    delete_event((IOTHUB_EVENT_CALLBACK*)item);
+    *continue_processing = true;
+}
+
+static void delete_event_callback_list(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData)
+{
+    if (handleData->event_callbacks != NULL)
+    {
+        singlylinkedlist_foreach(handleData->event_callbacks, delete_event_callback, NULL);
+        singlylinkedlist_destroy(handleData->event_callbacks);
+        handleData->event_callbacks = NULL;
+    }
+}
+
+
+IOTHUB_CLIENT_CORE_LL_HANDLE IoTHubClientCore_LL_CreateFromDeviceAuth(const char* iothub_uri, const char* device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    IOTHUB_CLIENT_CORE_LL_HANDLE result;
+    if (iothub_uri == NULL || protocol == NULL || device_id == NULL)
+    {
+        LogError("Input parameter is NULL: iothub_uri: %p  protocol: %p device_id: %p", iothub_uri, protocol, device_id);
+        result = NULL;
+    }
+    else
+    {
+#ifdef USE_PROV_MODULE
+        IOTHUB_CLIENT_CONFIG* config = (IOTHUB_CLIENT_CONFIG*)malloc(sizeof(IOTHUB_CLIENT_CONFIG));
+        if (config == NULL)
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_12_012: [If the allocation failed IoTHubClientCore_LL_CreateFromConnectionString  returns NULL]  */
+            LogError("Malloc failed");
+            result = NULL;
+        }
+        else
+        {
+            const char* iterator;
+            const char* initial;
+            char* iothub_name = NULL;
+            char* iothub_suffix = NULL;
+
+            memset(config, 0, sizeof(IOTHUB_CLIENT_CONFIG));
+            config->protocol = protocol;
+            config->deviceId = device_id;
+
+            // Find the iothub suffix
+            initial = iterator = iothub_uri;
+            while (iterator != NULL && *iterator != '\0')
+            {
+                if (*iterator == '.')
+                {
+                    size_t length = iterator - initial;
+                    iothub_name = (char*)malloc(length + 1);
+                    if (iothub_name != NULL)
+                    {
+                        memset(iothub_name, 0, length + 1);
+                        memcpy(iothub_name, initial, length);
+                        config->iotHubName = iothub_name;
+
+                        length = strlen(initial) - length - 1;
+                        iothub_suffix = (char*)malloc(length + 1);
+                        if (iothub_suffix != NULL)
+                        {
+                            memset(iothub_suffix, 0, length + 1);
+                            memcpy(iothub_suffix, iterator + 1, length);
+                            config->iotHubSuffix = iothub_suffix;
+                            break;
+                        }
+                        else
+                        {
+                            LogError("Failed to allocate iothub suffix");
+                            free(iothub_name);
+                            iothub_name = NULL;
+                            result = NULL;
+                        }
+                    }
+                    else
+                    {
+                        LogError("Failed to allocate iothub name");
+                        result = NULL;
+                    }
+                }
+                iterator++;
+            }
+
+            if (config->iotHubName == NULL || config->iotHubSuffix == NULL)
+            {
+                LogError("initialize iothub client");
+                result = NULL;
+            }
+            else
+            {
+                IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = initialize_iothub_client(config, NULL, true, NULL);
+                if (handleData == NULL)
+                {
+                    LogError("initialize iothub client");
+                    result = NULL;
+                }
+                else
+                {
+                    result = handleData;
+                }
+            }
+
+            free(iothub_name);
+            free(iothub_suffix);
+            free(config);
+        }
+#else
+        LogError("HSM module is not included");
+        result = NULL;
+#endif
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_CORE_LL_HANDLE IoTHubClientCore_LL_CreateFromConnectionString(const char* connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    IOTHUB_CLIENT_CORE_LL_HANDLE result;
+
+    /* Codes_SRS_IOTHUBCLIENT_LL_12_003: [IoTHubClientCore_LL_CreateFromConnectionString shall verify the input parameter and if it is NULL then return NULL] */
+    if (connectionString == NULL)
+    {
+        LogError("Input parameter is NULL: connectionString");
+        result = NULL;
+    }
+    else if (protocol == NULL)
+    {
+        LogError("Input parameter is NULL: protocol");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUBCLIENT_LL_12_004: [IoTHubClientCore_LL_CreateFromConnectionString shall allocate IOTHUB_CLIENT_CONFIG structure] */
+        IOTHUB_CLIENT_CONFIG* config = (IOTHUB_CLIENT_CONFIG*) malloc(sizeof(IOTHUB_CLIENT_CONFIG));
+        if (config == NULL)
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_12_012: [If the allocation failed IoTHubClientCore_LL_CreateFromConnectionString  returns NULL]  */
+            LogError("Malloc failed");
+            result = NULL;
+        }
+        else
+        {
+            STRING_TOKENIZER_HANDLE tokenizer1 = NULL;
+            STRING_HANDLE connString = NULL;
+            STRING_HANDLE tokenString = NULL;
+            STRING_HANDLE valueString = NULL;
+            STRING_HANDLE hostNameString = NULL;
+            STRING_HANDLE hostSuffixString = NULL;
+            STRING_HANDLE deviceIdString = NULL;
+            STRING_HANDLE deviceKeyString = NULL;
+            STRING_HANDLE deviceSasTokenString = NULL;
+            STRING_HANDLE protocolGateway = NULL;
+            STRING_HANDLE moduleId = NULL;
+
+            memset(config, 0, sizeof(*config));
+            config->protocol = protocol;
+
+            /* Codes_SRS_IOTHUBCLIENT_LL_04_002: [If it does not, it shall pass the protocolGatewayHostName NULL.] */
+            config->protocolGatewayHostName = NULL;
+
+            if ((connString = STRING_construct(connectionString)) == NULL)
+            {
+                LogError("Error constructing connectiong String");
+                result = NULL;
+            }
+            else if ((tokenizer1 = STRING_TOKENIZER_create(connString)) == NULL)
+            {
+                LogError("Error creating Tokenizer");
+                result = NULL;
+            }
+            else if ((tokenString = STRING_new()) == NULL)
+            {
+                LogError("Error creating Token String");
+                result = NULL;
+            }
+            else if ((valueString = STRING_new()) == NULL)
+            {
+                LogError("Error creating Value String");
+                result = NULL;
+            }
+            else if ((hostNameString = STRING_new()) == NULL)
+            {
+                LogError("Error creating HostName String");
+                result = NULL;
+            }
+            else if ((hostSuffixString = STRING_new()) == NULL)
+            {
+                LogError("Error creating HostSuffix String");
+                result = NULL;
+            }
+            /* Codes_SRS_IOTHUBCLIENT_LL_12_005: [IoTHubClientCore_LL_CreateFromConnectionString shall try to parse the connectionString input parameter for the following structure: "Key1=value1;key2=value2;key3=value3..."] */
+            /* Codes_SRS_IOTHUBCLIENT_LL_12_006: [IoTHubClientCore_LL_CreateFromConnectionString shall verify the existence of the following Key/Value pairs in the connection string: HostName, DeviceId, SharedAccessKey, SharedAccessSignature or x509]  */
+            else
+            {
+                int isx509found = 0;
+                bool use_provisioning = false;
+                while ((STRING_TOKENIZER_get_next_token(tokenizer1, tokenString, "=") == 0))
+                {
+                    if (STRING_TOKENIZER_get_next_token(tokenizer1, valueString, ";") != 0)
+                    {
+                        LogError("Tokenizer error");
+                        break;
+                    }
+                    else
+                    {
+                        if (tokenString != NULL)
+                        {
+                            /* Codes_SRS_IOTHUBCLIENT_LL_12_010: [IoTHubClientCore_LL_CreateFromConnectionString shall fill up the IOTHUB_CLIENT_CONFIG structure using the following mapping: iotHubName = Name, iotHubSuffix = Suffix, deviceId = DeviceId, deviceKey = SharedAccessKey or deviceSasToken = SharedAccessSignature] */
+                            const char* s_token = STRING_c_str(tokenString);
+                            if (strcmp(s_token, HOSTNAME_TOKEN) == 0)
+                            {
+                                /* Codes_SRS_IOTHUBCLIENT_LL_12_009: [IoTHubClientCore_LL_CreateFromConnectionString shall split the value of HostName to Name and Suffix using the first "." as a separator] */
+                                STRING_TOKENIZER_HANDLE tokenizer2 = NULL;
+                                if ((tokenizer2 = STRING_TOKENIZER_create(valueString)) == NULL)
+                                {
+                                    LogError("Error creating Tokenizer");
+                                    break;
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_IOTHUBCLIENT_LL_12_015: [If the string split failed, IoTHubClientCore_LL_CreateFromConnectionString returns NULL ] */
+                                    if (STRING_TOKENIZER_get_next_token(tokenizer2, hostNameString, ".") != 0)
+                                    {
+                                        LogError("Tokenizer error");
+                                        STRING_TOKENIZER_destroy(tokenizer2);
+                                        break;
+                                    }
+                                    else
+                                    {
+                                        config->iotHubName = STRING_c_str(hostNameString);
+                                        if (STRING_TOKENIZER_get_next_token(tokenizer2, hostSuffixString, ";") != 0)
+                                        {
+                                            LogError("Tokenizer error");
+                                            STRING_TOKENIZER_destroy(tokenizer2);
+                                            break;
+                                        }
+                                        else
+                                        {
+                                            config->iotHubSuffix = STRING_c_str(hostSuffixString);
+                                        }
+                                    }
+                                    STRING_TOKENIZER_destroy(tokenizer2);
+                                }
+                            }
+                            else if (strcmp(s_token, DEVICEID_TOKEN) == 0)
+                            {
+                                deviceIdString = STRING_clone(valueString);
+                                if (deviceIdString != NULL)
+                                {
+                                    config->deviceId = STRING_c_str(deviceIdString);
+                                }
+                                else
+                                {
+                                    LogError("Failure cloning device id string");
+                                    break;
+                                }
+                            }
+                            else if (strcmp(s_token, DEVICEKEY_TOKEN) == 0)
+                            {
+                                deviceKeyString = STRING_clone(valueString);
+                                if (deviceKeyString != NULL)
+                                {
+                                    config->deviceKey = STRING_c_str(deviceKeyString);
+                                }
+                                else
+                                {
+                                    LogError("Failure cloning device key string");
+                                    break;
+                                }
+                            }
+                            else if (strcmp(s_token, DEVICESAS_TOKEN) == 0)
+                            {
+                                deviceSasTokenString = STRING_clone(valueString);
+                                if (deviceSasTokenString != NULL)
+                                {
+                                    config->deviceSasToken = STRING_c_str(deviceSasTokenString);
+                                }
+                                else
+                                {
+                                    LogError("Failure cloning device sasToken string");
+                                    break;
+                                }
+                            }
+                            else if (strcmp(s_token, X509_TOKEN) == 0)
+                            {
+                                if (strcmp(STRING_c_str(valueString), X509_TOKEN_ONLY_ACCEPTABLE_VALUE) != 0)
+                                {
+                                    LogError("x509 option has wrong value, the only acceptable one is \"true\"");
+                                    break;
+                                }
+                                else
+                                {
+                                    isx509found = 1;
+                                }
+                            }
+                            else if (strcmp(s_token, PROVISIONING_TOKEN) == 0)
+                            {
+                                if (strcmp(STRING_c_str(valueString), PROVISIONING_ACCEPTABLE_VALUE) != 0)
+                                {
+                                    LogError("provisioning option has wrong value, the only acceptable one is \"true\"");
+                                    break;
+                                }
+                                else
+                                {
+                                    use_provisioning = 1;
+                                }
+                            }
+
+                            /* Codes_SRS_IOTHUBCLIENT_LL_04_001: [IoTHubClientCore_LL_CreateFromConnectionString shall verify the existence of key/value pair GatewayHostName. If it does exist it shall pass the value to IoTHubClientCore_LL_Create API.] */
+                            else if (strcmp(s_token, PROTOCOL_GATEWAY_HOST_TOKEN) == 0)
+                            {
+                                protocolGateway = STRING_clone(valueString);
+                                if (protocolGateway != NULL)
+                                {
+                                    config->protocolGatewayHostName = STRING_c_str(protocolGateway);
+                                }
+                                else
+                                {
+                                    LogError("Failure cloning protocol Gateway Name");
+                                    break;
+                                }
+                            }
+                            /*Codes_SRS_IOTHUBCLIENT_LL_31_126: [IoTHubClient_LL_CreateFromConnectionString shall optionally parse ModuleId, if present.] */
+                            else if (strcmp(s_token, MODULE_ID_TOKEN) == 0)
+                            {
+                                moduleId = STRING_clone(valueString);
+                                if (moduleId == NULL)
+                                {
+                                    LogError("Failure cloning moduleId string");
+                                    break;
+                                }
+                            }
+                            else
+                            {
+                                // If we get an unknown token, log it to error stream but do not cause a fatal error.
+                                LogError("Unknown token <%s> in connection string.  Ignoring error and continuing to parse", s_token);
+                            }
+                        }
+                    }
+                }
+                /* parsing is done - check the result */
+                if (config->iotHubName == NULL)
+                {
+                    LogError("iotHubName is not found");
+                    result = NULL;
+                }
+                else if (config->iotHubSuffix == NULL)
+                {
+                    LogError("iotHubSuffix is not found");
+                    result = NULL;
+                }
+                else if (config->deviceId == NULL)
+                {
+                    LogError("deviceId is not found");
+                    result = NULL;
+                }
+                else if (!(
+                    ((!use_provisioning && !isx509found) && (config->deviceSasToken == NULL) ^ (config->deviceKey == NULL)) ||
+                    ((use_provisioning || isx509found) && (config->deviceSasToken == NULL) && (config->deviceKey == NULL))
+                    ))
+                {
+                    LogError("invalid combination of x509, provisioning, deviceSasToken and deviceKey");
+                    result = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_IOTHUBCLIENT_LL_12_011: [IoTHubClientCore_LL_CreateFromConnectionString shall call into the IoTHubClientCore_LL_Create API with the current structure and returns with the return value of it] */
+                    result = initialize_iothub_client(config, NULL, use_provisioning, STRING_c_str(moduleId));
+                    if (result == NULL)
+                    {
+                        LogError("IoTHubClientCore_LL_Create failed");
+                    }
+                    else
+                    {
+                        /*return as is*/
+                    }
+                }
+            }
+            if (deviceSasTokenString != NULL)
+                STRING_delete(deviceSasTokenString);
+            if (deviceKeyString != NULL)
+                STRING_delete(deviceKeyString);
+            if (deviceIdString != NULL)
+                STRING_delete(deviceIdString);
+            if (hostSuffixString != NULL)
+                STRING_delete(hostSuffixString);
+            if (hostNameString != NULL)
+                STRING_delete(hostNameString);
+            if (valueString != NULL)
+                STRING_delete(valueString);
+            if (tokenString != NULL)
+                STRING_delete(tokenString);
+            if (connString != NULL)
+                STRING_delete(connString);
+            if (protocolGateway != NULL)
+                STRING_delete(protocolGateway);
+            if (moduleId != NULL)
+                STRING_delete(moduleId);
+
+            if (tokenizer1 != NULL)
+                STRING_TOKENIZER_destroy(tokenizer1);
+
+            free(config);
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_CORE_LL_HANDLE IoTHubClientCore_LL_CreateImpl(const IOTHUB_CLIENT_CONFIG* config, const char* module_id, bool use_dev_auth)
+{
+    IOTHUB_CLIENT_CORE_LL_HANDLE result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_001: [IoTHubClientCore_LL_Create shall return NULL if config parameter is NULL or protocol field is NULL.]*/
+    if(
+        (config == NULL) ||
+        (config->protocol == NULL)
+        )
+    {
+        result = NULL;
+        LogError("invalid configuration (NULL detected)");
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = initialize_iothub_client(config, NULL, use_dev_auth, module_id);
+        if (handleData == NULL)
+        {
+            LogError("initialize iothub client");
+            result = NULL;
+        }
+        else
+        {
+            result = handleData;
+        }
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_CORE_LL_HANDLE IoTHubClientCore_LL_Create(const IOTHUB_CLIENT_CONFIG* config)
+{
+    return IoTHubClientCore_LL_CreateImpl(config, NULL, false);
+}
+
+#ifdef USE_EDGE_MODULES
+IOTHUB_CLIENT_CORE_LL_HANDLE IoTHubClientCore_LL_CreateFromEnvironment(IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* result;
+    EDGE_ENVIRONMENT_VARIABLES edge_environment_variables;
+
+    memset(&edge_environment_variables, 0, sizeof(edge_environment_variables));
+
+    if (retrieve_edge_environment_variabes(&edge_environment_variables) != 0)
+    {
+        LogError("retrieve_edge_environment_variabes failed");
+        result = NULL;
+    }
+    // The presence of a connection string environment variable means we use it, ignoring other settings
+    else if (edge_environment_variables.connection_string != NULL)
+    {
+        if ((result = IoTHubClientCore_LL_CreateFromConnectionString(edge_environment_variables.connection_string, protocol)) == NULL)
+        {
+            LogError("IoTHubClientCore_LL_CreateFromConnectionString fails");
+        }
+    }
+    else if (iothub_security_init(IOTHUB_SECURITY_TYPE_HTTP_EDGE) != 0)
+    {
+        LogError("iothub_security_init failed");
+        result = NULL;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CONFIG client_config;
+
+        memset(&client_config, 0, sizeof(client_config));
+        client_config.protocol = protocol;
+        client_config.deviceId = edge_environment_variables.device_id;
+        client_config.iotHubName = edge_environment_variables.iothub_name;
+        client_config.iotHubSuffix = edge_environment_variables.iothub_suffix;
+        client_config.protocolGatewayHostName = edge_environment_variables.gatewayhostname;
+
+        if ((result = IoTHubClientCore_LL_CreateImpl(&client_config, edge_environment_variables.module_id, true)) == NULL)
+        {
+            LogError("IoTHubClientCore_LL_CreateImpl fails");
+        }
+    }
+
+    if (result != NULL)
+    {
+        // Because the Edge Hub almost always use self-signed certificates, we need to specify which certificates to trust.  We need to do 
+        // this regardless of how we created the underlying IOTHUB_CLIENT_CORE_LL_HANDLE_DATA.
+        IOTHUB_CLIENT_RESULT setTrustResult;
+        char* trustedCertificate = IoTHubClient_Auth_Get_TrustBundle(result->authorization_module, edge_environment_variables.ca_trusted_certificate_file);
+        
+        if (trustedCertificate == NULL)
+        {
+            LogError("IoTHubClient_Auth_Get_TrustBundle failed");
+            IoTHubClientCore_LL_Destroy(result);
+            result = NULL;
+        }
+        else if ((setTrustResult = IoTHubClientCore_LL_SetOption(result, OPTION_TRUSTED_CERT, trustedCertificate)) != IOTHUB_CLIENT_OK)
+        {
+            LogError("IoTHubClientCore_LL_SetOption failed, err = %d", setTrustResult);
+            IoTHubClientCore_LL_Destroy(result);
+            result = NULL;
+        }
+        
+        free(trustedCertificate);
+    }
+
+    free(edge_environment_variables.iothub_buffer);
+    return result;
+}
+#endif
+
+
+IOTHUB_CLIENT_CORE_LL_HANDLE IoTHubClientCore_LL_CreateWithTransport(const IOTHUB_CLIENT_DEVICE_CONFIG * config)
+{
+    IOTHUB_CLIENT_CORE_LL_HANDLE result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_17_001: [IoTHubClientCore_LL_CreateWithTransport shall return NULL if config parameter is NULL, or protocol field is NULL or transportHandle is NULL.]*/
+    if (
+        (config == NULL) ||
+        (config->protocol == NULL) ||
+        (config->transportHandle == NULL) ||
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_098: [ IoTHubClientCore_LL_CreateWithTransport shall fail and return NULL if both config->deviceKey AND config->deviceSasToken are NULL. ]*/
+        ((config->deviceKey == NULL) && (config->deviceSasToken == NULL))
+        )
+    {
+        result = NULL;
+        LogError("invalid configuration (NULL detected)");
+    }
+    else
+    {
+        result = initialize_iothub_client(NULL, config, false, NULL);
+    }
+    return result;
+}
+
+void IoTHubClientCore_LL_Destroy(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle)
+{
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_009: [IoTHubClientCore_LL_Destroy shall do nothing if parameter iotHubClientHandle is NULL.]*/
+    if (iotHubClientHandle != NULL)
+    {
+        PDLIST_ENTRY unsend;
+        /*Codes_SRS_IOTHUBCLIENT_LL_17_010: [IoTHubClientCore_LL_Destroy  shall call the underlaying layer's _Unregister function] */
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        handleData->IoTHubTransport_Unregister(handleData->deviceHandle);
+        if (handleData->isSharedTransport == false)
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_010: [If iotHubClientHandle was not created by IoTHubClientCore_LL_CreateWithTransport, IoTHubClientCore_LL_Destroy  shall call the underlaying layer's _Destroy function.] */
+            handleData->IoTHubTransport_Destroy(handleData->transportHandle);
+        }
+        /*if any, remove the items currently not send*/
+        while ((unsend = DList_RemoveHeadList(&(handleData->waitingToSend))) != &(handleData->waitingToSend))
+        {
+            IOTHUB_MESSAGE_LIST* temp = containingRecord(unsend, IOTHUB_MESSAGE_LIST, entry);
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_033: [Otherwise, IoTHubClientCore_LL_Destroy shall complete all the event message callbacks that are in the waitingToSend list with the result IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY.] */
+            if (temp->callback != NULL)
+            {
+                temp->callback(IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY, temp->context);
+            }
+            IoTHubMessage_Destroy(temp->messageHandle);
+            free(temp);
+        }
+
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_007: [ IoTHubClientCore_LL_Destroy shall iterate the device twin queues and destroy any remaining items. ] */
+        while ((unsend = DList_RemoveHeadList(&(handleData->iot_msg_queue))) != &(handleData->iot_msg_queue))
+        {
+            IOTHUB_DEVICE_TWIN* temp = containingRecord(unsend, IOTHUB_DEVICE_TWIN, entry);
+            device_twin_data_destroy(temp);
+        }
+        while ((unsend = DList_RemoveHeadList(&(handleData->iot_ack_queue))) != &(handleData->iot_ack_queue))
+        {
+            IOTHUB_DEVICE_TWIN* temp = containingRecord(unsend, IOTHUB_DEVICE_TWIN, entry);
+            device_twin_data_destroy(temp);
+        }
+
+        /* Codes_SRS_IOTHUBCLIENT_LL_31_141: [ IoTHubClient_LL_Destroy shall iterate registered callbacks for input queues and destroy any remaining items. ] */
+        delete_event_callback_list(handleData);
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_17_011: [IoTHubClientCore_LL_Destroy  shall free the resources allocated by IoTHubClient (if any).] */
+        IoTHubClient_Auth_Destroy(handleData->authorization_module);
+        tickcounter_destroy(handleData->tickCounter);
+#ifndef DONT_USE_UPLOADTOBLOB
+        IoTHubClient_LL_UploadToBlob_Destroy(handleData->uploadToBlobHandle);
+#endif
+#ifdef USE_EDGE_MODULES
+        IoTHubClient_EdgeHandle_Destroy(handleData->methodHandle);
+#endif
+        STRING_delete(handleData->product_info);
+        free(handleData);
+    }
+}
+
+/*Codes_SRS_IOTHUBCLIENT_LL_02_044: [ Messages already delivered to IoTHubClientCore_LL shall not have their timeouts modified by a new call to IoTHubClientCore_LL_SetOption. ]*/
+/*returns 0 on success, any other value is error*/
+static int attach_ms_timesOutAfter(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData, IOTHUB_MESSAGE_LIST *newEntry)
+{
+    int result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_043: [ Calling IoTHubClientCore_LL_SetOption with value set to "0" shall disable the timeout mechanism for all new messages. ]*/
+    if (handleData->currentMessageTimeout == 0)
+    {
+        newEntry->ms_timesOutAfter = 0; /*do not timeout*/
+        newEntry->message_timeout_value = 0;
+        result = 0;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_039: [ "messageTimeout" - once IoTHubClientCore_LL_SendEventAsync is called the message shall timeout after value miliseconds. Value is a pointer to a tickcounter_ms_t. ]*/
+        if (tickcounter_get_current_ms(handleData->tickCounter, &newEntry->ms_timesOutAfter) != 0)
+        {
+            result = MU_FAILURE;
+            LogError("unable to get the current relative tickcount");
+        }
+        else
+        {
+            newEntry->message_timeout_value = handleData->currentMessageTimeout;
+            result = 0;
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SendEventAsync(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_MESSAGE_HANDLE eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK eventConfirmationCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_011: [IoTHubClientCore_LL_SendEventAsync shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle or eventMessageHandle is NULL.]*/
+    if (
+        (iotHubClientHandle == NULL) ||
+        (eventMessageHandle == NULL) ||
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_012: [IoTHubClientCore_LL_SendEventAsync shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter eventConfirmationCallback is NULL and userContextCallback is not NULL.] */
+        ((eventConfirmationCallback == NULL) && (userContextCallback != NULL))
+        )
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_LIST *newEntry = (IOTHUB_MESSAGE_LIST*)malloc(sizeof(IOTHUB_MESSAGE_LIST));
+        if (newEntry == NULL)
+        {
+            result = IOTHUB_CLIENT_ERROR;
+            LOG_ERROR_RESULT;
+        }
+        else
+        {
+            IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+            if (attach_ms_timesOutAfter(handleData, newEntry) != 0)
+            {
+                result = IOTHUB_CLIENT_ERROR;
+                LOG_ERROR_RESULT;
+                free(newEntry);
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_013: [IoTHubClientCore_LL_SendEventAsync shall add the DLIST waitingToSend a new record cloning the information from eventMessageHandle, eventConfirmationCallback, userContextCallback.]*/
+                if ((newEntry->messageHandle = IoTHubMessage_Clone(eventMessageHandle)) == NULL)
+                {
+                    result = IOTHUB_CLIENT_ERROR;
+                    free(newEntry);
+                    LOG_ERROR_RESULT;
+                }
+                else if (IoTHubClient_Diagnostic_AddIfNecessary(&handleData->diagnostic_setting, newEntry->messageHandle) != 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_014: [If cloning and/or adding the information/diagnostic fails for any reason, IoTHubClientCore_LL_SendEventAsync shall fail and return IOTHUB_CLIENT_ERROR.] */
+                    result = IOTHUB_CLIENT_ERROR;
+                    IoTHubMessage_Destroy(newEntry->messageHandle);
+                    free(newEntry);
+                    LOG_ERROR_RESULT;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_013: [IoTHubClientCore_LL_SendEventAsync shall add the DLIST waitingToSend a new record cloning the information from eventMessageHandle, eventConfirmationCallback, userContextCallback.]*/
+                    newEntry->callback = eventConfirmationCallback;
+                    newEntry->context = userContextCallback;
+                    DList_InsertTailList(&(iotHubClientHandle->waitingToSend), &(newEntry->entry));
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_015: [Otherwise IoTHubClientCore_LL_SendEventAsync shall succeed and return IOTHUB_CLIENT_OK.] */
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetMessageCallback(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC messageCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if (iotHubClientHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_016: [IoTHubClientCore_LL_SetMessageCallback shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle is NULL.] */
+        LogError("Invalid argument - iotHubClientHandle is NULL");
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        if (messageCallback == NULL)
+        {
+            if (handleData->messageCallback.type == CALLBACK_TYPE_NONE)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_010: [If parameter messageCallback is NULL and the _SetMessageCallback had not been called to subscribe for messages, then IoTHubClientCore_LL_SetMessageCallback shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("not currently set to accept or process incoming messages.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else if (handleData->messageCallback.type == CALLBACK_TYPE_ASYNC)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_010: [If parameter messageCallback is NULL and the _SetMessageCallback had not been called to subscribe for messages, then IoTHubClientCore_LL_SetMessageCallback shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetMessageCallback_Ex function.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_019: [If parameter messageCallback is NULL then IoTHubClientCore_LL_SetMessageCallback shall call the underlying layer's _Unsubscribe function and return IOTHUB_CLIENT_OK.] */
+                handleData->IoTHubTransport_Unsubscribe(handleData->deviceHandle);
+                handleData->messageCallback.type = CALLBACK_TYPE_NONE;
+                handleData->messageCallback.callbackSync = NULL;
+                handleData->messageCallback.callbackAsync = NULL;
+                handleData->messageCallback.userContextCallback = NULL;
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else
+        {
+            if (handleData->messageCallback.type == CALLBACK_TYPE_ASYNC)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_011: [If parameter messageCallback is non-NULL and the _SetMessageCallback_Ex had been used to susbscribe for messages, then IoTHubClientCore_LL_SetMessageCallback shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetMessageCallback_Ex function before subscribing with MessageCallback.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                if (handleData->IoTHubTransport_Subscribe(handleData->deviceHandle) == 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_017: [If parameter messageCallback is non-NULL then IoTHubClientCore_LL_SetMessageCallback shall call the underlying layer's _Subscribe function.]*/
+                    handleData->messageCallback.type = CALLBACK_TYPE_SYNC;
+                    handleData->messageCallback.callbackSync = messageCallback;
+                    handleData->messageCallback.userContextCallback = userContextCallback;
+                    result = IOTHUB_CLIENT_OK;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_018: [If the underlying layer's _Subscribe function fails, then IoTHubClientCore_LL_SetMessageCallback shall fail and return IOTHUB_CLIENT_ERROR. Otherwise IoTHubClientCore_LL_SetMessageCallback shall succeed and return IOTHUB_CLIENT_OK.]*/
+                    LogError("IoTHubTransport_Subscribe failed");
+                    handleData->messageCallback.type = CALLBACK_TYPE_NONE;
+                    handleData->messageCallback.callbackSync = NULL;
+                    handleData->messageCallback.callbackAsync = NULL;
+                    handleData->messageCallback.userContextCallback = NULL;
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetMessageCallback_Ex(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX messageCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if (iotHubClientHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_10_021: [IoTHubClientCore_LL_SetMessageCallback_Ex shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle is NULL.]*/
+        LogError("Invalid argument - iotHubClientHandle is NULL");
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        if (messageCallback == NULL)
+        {
+            if (handleData->messageCallback.type == CALLBACK_TYPE_NONE)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_018: [If parameter messageCallback is NULL and IoTHubClientCore_LL_SetMessageCallback_Ex had not been used to subscribe for messages, then IoTHubClientCore_LL_SetMessageCallback_Ex shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("not currently set to accept or process incoming messages.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else if (handleData->messageCallback.type == CALLBACK_TYPE_SYNC)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_019: [If parameter messageCallback is NULL and IoTHubClientCore_LL_SetMessageCallback had been used to subscribe for messages, then IoTHubClientCore_LL_SetMessageCallback_Ex shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetMessageCallback function.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_023: [If parameter messageCallback is NULL then IoTHubClientCore_LL_SetMessageCallback_Ex shall call the underlying layer's _Unsubscribe function and return IOTHUB_CLIENT_OK.] */
+                handleData->IoTHubTransport_Unsubscribe(handleData->deviceHandle);
+                handleData->messageCallback.type = CALLBACK_TYPE_NONE;
+                handleData->messageCallback.callbackSync = NULL;
+                handleData->messageCallback.callbackAsync = NULL;
+                handleData->messageCallback.userContextCallback = NULL;
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else
+        {
+            if (handleData->messageCallback.type == CALLBACK_TYPE_SYNC)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_020: [If parameter messageCallback is non-NULL, and IoTHubClientCore_LL_SetMessageCallback had been used to subscribe for messages, then IoTHubClientCore_LL_SetMessageCallback_Ex shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_MessageCallbackEx function before subscribing with MessageCallback.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                if (handleData->IoTHubTransport_Subscribe(handleData->deviceHandle) == 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_10_024: [If parameter messageCallback is non-NULL then IoTHubClientCore_LL_SetMessageCallback_Ex shall call the underlying layer's _Subscribe function.]*/
+                    handleData->messageCallback.type = CALLBACK_TYPE_ASYNC;
+                    handleData->messageCallback.callbackAsync = messageCallback;
+                    handleData->messageCallback.userContextCallback = userContextCallback;
+                    result = IOTHUB_CLIENT_OK;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_10_025: [If the underlying layer's _Subscribe function fails, then IoTHubClientCore_LL_SetMessageCallback_Ex shall fail and return IOTHUB_CLIENT_ERROR. Otherwise IoTHubClientCore_LL_SetMessageCallback_Ex shall succeed and return IOTHUB_CLIENT_OK.] */
+                    LogError("IoTHubTransport_Subscribe failed");
+                    handleData->messageCallback.type = CALLBACK_TYPE_NONE;
+                    handleData->messageCallback.callbackSync = NULL;
+                    handleData->messageCallback.callbackAsync = NULL;
+                    handleData->messageCallback.userContextCallback = NULL;
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SendMessageDisposition(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, MESSAGE_CALLBACK_INFO* message_data, IOTHUBMESSAGE_DISPOSITION_RESULT disposition)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if ((iotHubClientHandle == NULL) || (message_data == NULL))
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_10_026: [IoTHubClientCore_LL_SendMessageDisposition shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle is NULL.]*/
+        LogError("Invalid argument handle=%p, message=%p", iotHubClientHandle, message_data);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        /*Codes_SRS_IOTHUBCLIENT_LL_10_027: [IoTHubClientCore_LL_SendMessageDisposition shall return the result from calling the underlying layer's _Send_Message_Disposition.]*/
+        result = handleData->IoTHubTransport_SendMessageDisposition(message_data, disposition);
+    }
+    return result;
+}
+
+static void DoTimeouts(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData)
+{
+    tickcounter_ms_t nowTick;
+    if (tickcounter_get_current_ms(handleData->tickCounter, &nowTick) != 0)
+    {
+        LogError("unable to get the current ms, timeouts will not be processed");
+    }
+    else
+    {
+        DLIST_ENTRY* currentItemInWaitingToSend = handleData->waitingToSend.Flink;
+        while (currentItemInWaitingToSend != &(handleData->waitingToSend)) /*while we are not at the end of the list*/
+        {
+            IOTHUB_MESSAGE_LIST* fullEntry = containingRecord(currentItemInWaitingToSend, IOTHUB_MESSAGE_LIST, entry);
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_041: [ If more than value miliseconds have passed since the call to IoTHubClientCore_LL_SendEventAsync then the message callback shall be called with a status code of IOTHUB_CLIENT_CONFIRMATION_TIMEOUT. ]*/
+            if ((fullEntry->ms_timesOutAfter != 0) && ((nowTick - fullEntry->ms_timesOutAfter) > fullEntry->message_timeout_value))
+            {
+                PDLIST_ENTRY theNext = currentItemInWaitingToSend->Flink; /*need to save the next item, because the below operations are destructive*/
+                DList_RemoveEntryList(currentItemInWaitingToSend);
+                if (fullEntry->callback != NULL)
+                {
+                    fullEntry->callback(IOTHUB_CLIENT_CONFIRMATION_MESSAGE_TIMEOUT, fullEntry->context);
+                }
+                IoTHubMessage_Destroy(fullEntry->messageHandle); /*because it has been cloned*/
+                free(fullEntry);
+                currentItemInWaitingToSend = theNext;
+            }
+            else
+            {
+                currentItemInWaitingToSend = currentItemInWaitingToSend->Flink;
+            }
+        }
+    }
+}
+
+void IoTHubClientCore_LL_DoWork(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle)
+{
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_020: [If parameter iotHubClientHandle is NULL then IoTHubClientCore_LL_DoWork shall not perform any action.] */
+    if (iotHubClientHandle != NULL)
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        DoTimeouts(handleData);
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_07_008: [ IoTHubClientCore_LL_DoWork shall iterate the message queue and execute the underlying transports IoTHubTransport_ProcessItem function for each item. ] */
+        DLIST_ENTRY* client_item = handleData->iot_msg_queue.Flink;
+        while (client_item != &(handleData->iot_msg_queue)) /*while we are not at the end of the list*/
+        {
+            PDLIST_ENTRY next_item = client_item->Flink;
+
+            IOTHUB_DEVICE_TWIN* queue_data = containingRecord(client_item, IOTHUB_DEVICE_TWIN, entry);
+            IOTHUB_IDENTITY_INFO identity_info;
+            identity_info.device_twin = queue_data;
+            IOTHUB_PROCESS_ITEM_RESULT process_results =  handleData->IoTHubTransport_ProcessItem(handleData->transportHandle, IOTHUB_TYPE_DEVICE_TWIN, &identity_info);
+            if (process_results == IOTHUB_PROCESS_CONTINUE || process_results == IOTHUB_PROCESS_NOT_CONNECTED)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_07_010: [ If 'IoTHubTransport_ProcessItem' returns IOTHUB_PROCESS_CONTINUE or IOTHUB_PROCESS_NOT_CONNECTED IoTHubClientCore_LL_DoWork shall continue on to call the underlaying layer's _DoWork function. ]*/
+                break;
+            }
+            else
+            {
+                DList_RemoveEntryList(client_item);
+                if (process_results == IOTHUB_PROCESS_OK)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_07_011: [ If 'IoTHubTransport_ProcessItem' returns IOTHUB_PROCESS_OK IoTHubClientCore_LL_DoWork shall add the IOTHUB_DEVICE_TWIN to the ack queue. ]*/
+                    DList_InsertTailList(&(iotHubClientHandle->iot_ack_queue), &(queue_data->entry));
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_07_012: [ If 'IoTHubTransport_ProcessItem' returns any other value IoTHubClientCore_LL_DoWork shall destroy the IOTHUB_DEVICE_TWIN item. ]*/
+                    LogError("Failure queue processing item");
+                    device_twin_data_destroy(queue_data);
+                }
+            }
+            // Move along to the next item
+            client_item = next_item;
+        }
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_021: [Otherwise, IoTHubClientCore_LL_DoWork shall invoke the underlaying layer's _DoWork function.]*/
+        handleData->IoTHubTransport_DoWork(handleData->transportHandle);
+    }
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_GetSendStatus(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_STATUS *iotHubClientStatus)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    /* Codes_SRS_IOTHUBCLIENT_09_007: [IoTHubClient_GetSendStatus shall return IOTHUB_CLIENT_INVALID_ARG if called with NULL parameter] */
+    if (iotHubClientHandle == NULL || iotHubClientStatus == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+        /* Codes_SRS_IOTHUBCLIENT_09_008: [IoTHubClient_GetSendStatus shall return IOTHUB_CLIENT_OK and status IOTHUB_CLIENT_SEND_STATUS_IDLE if there is currently no items to be sent] */
+        /* Codes_SRS_IOTHUBCLIENT_09_009: [IoTHubClient_GetSendStatus shall return IOTHUB_CLIENT_OK and status IOTHUB_CLIENT_SEND_STATUS_BUSY if there are currently items to be sent] */
+        result = handleData->IoTHubTransport_GetSendStatus(handleData->deviceHandle, iotHubClientStatus);
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetConnectionStatusCallback(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK connectionStatusCallback, void * userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_25_111: [IoTHubClientCore_LL_SetConnectionStatusCallback shall return IOTHUB_CLIENT_INVALID_ARG if called with NULL parameter iotHubClientHandle**]** */
+    if (iotHubClientHandle == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        /*Codes_SRS_IOTHUBCLIENT_LL_25_112: [IoTHubClientCore_LL_SetConnectionStatusCallback shall return IOTHUB_CLIENT_OK and save the callback and userContext as a member of the handle.] */
+        handleData->conStatusCallback = connectionStatusCallback;
+        handleData->conStatusUserContextCallback = userContextCallback;
+        result = IOTHUB_CLIENT_OK;
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetRetryPolicy(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitInSeconds)
+{
+    IOTHUB_CLIENT_RESULT result;
+    IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+    /* Codes_SRS_IOTHUBCLIENT_LL_25_116: [If iotHubClientHandle, retryPolicy or retryTimeoutLimitinSeconds is NULL, IoTHubClientCore_LL_GetRetryPolicy shall return IOTHUB_CLIENT_INVALID_ARG]*/
+    if (handleData == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        if (handleData->transportHandle == NULL)
+        {
+            result = IOTHUB_CLIENT_ERROR;
+            LOG_ERROR_RESULT;
+        }
+        else
+        {
+            if (handleData->IoTHubTransport_SetRetryPolicy(handleData->transportHandle, retryPolicy, retryTimeoutLimitInSeconds) != 0)
+            {
+                result = IOTHUB_CLIENT_ERROR;
+                LOG_ERROR_RESULT;
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_25_118: [IoTHubClientCore_LL_SetRetryPolicy shall save connection retry policies specified by the user to retryPolicy in struct IOTHUB_CLIENT_CORE_LL_HANDLE_DATA] */
+                /* Codes_SRS_IOTHUBCLIENT_LL_25_119: [IoTHubClientCore_LL_SetRetryPolicy shall save retryTimeoutLimitInSeconds in seconds to retryTimeout in struct IOTHUB_CLIENT_CORE_LL_HANDLE_DATA] */
+                handleData->retryPolicy = retryPolicy;
+                handleData->retryTimeoutLimitInSeconds = retryTimeoutLimitInSeconds;
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_GetRetryPolicy(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY* retryPolicy, size_t* retryTimeoutLimitInSeconds)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    /* Codes_SRS_IOTHUBCLIENT_LL_09_001: [IoTHubClientCore_LL_GetLastMessageReceiveTime shall return IOTHUB_CLIENT_INVALID_ARG if any of the arguments is NULL] */
+    if (iotHubClientHandle == NULL || retryPolicy == NULL || retryTimeoutLimitInSeconds == NULL)
+    {
+        LogError("Invalid parameter IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle = %p, IOTHUB_CLIENT_RETRY_POLICY* retryPolicy = %p, size_t* retryTimeoutLimitInSeconds = %p", iotHubClientHandle, retryPolicy, retryTimeoutLimitInSeconds);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+        *retryPolicy = handleData->retryPolicy;
+        *retryTimeoutLimitInSeconds = handleData->retryTimeoutLimitInSeconds;
+        result = IOTHUB_CLIENT_OK;
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_GetLastMessageReceiveTime(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, time_t* lastMessageReceiveTime)
+{
+    IOTHUB_CLIENT_RESULT result;
+    IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+    /* Codes_SRS_IOTHUBCLIENT_LL_09_001: [IoTHubClientCore_LL_GetLastMessageReceiveTime shall return IOTHUB_CLIENT_INVALID_ARG if any of the arguments is NULL] */
+    if (handleData == NULL || lastMessageReceiveTime == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUBCLIENT_LL_09_002: [IoTHubClientCore_LL_GetLastMessageReceiveTime shall return IOTHUB_CLIENT_INDEFINITE_TIME - and not set 'lastMessageReceiveTime' - if it is unable to provide the time for the last commands] */
+        if (handleData->lastMessageReceiveTime == INDEFINITE_TIME)
+        {
+            result = IOTHUB_CLIENT_INDEFINITE_TIME;
+            LOG_ERROR_RESULT;
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_09_003: [IoTHubClientCore_LL_GetLastMessageReceiveTime shall return IOTHUB_CLIENT_OK if it wrote in the lastMessageReceiveTime the time when the last command was received] */
+            /* Codes_SRS_IOTHUBCLIENT_LL_09_004: [IoTHubClientCore_LL_GetLastMessageReceiveTime shall return lastMessageReceiveTime in localtime] */
+            *lastMessageReceiveTime = handleData->lastMessageReceiveTime;
+            result = IOTHUB_CLIENT_OK;
+        }
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetOption(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* optionName, const void* value)
+{
+
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_034: [If iotHubClientHandle is NULL then IoTHubClientCore_LL_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_035: [If optionName is NULL then IoTHubClientCore_LL_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_036: [If value is NULL then IoTHubClientCore_LL_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    if (
+        (iotHubClientHandle == NULL) ||
+        (optionName == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("invalid argument (NULL)");
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_039: [ "messageTimeout" - once IoTHubClientCore_LL_SendEventAsync is called the message shall timeout after value miliseconds. Value is a pointer to a tickcounter_ms_t. ]*/
+        if (strcmp(optionName, OPTION_MESSAGE_TIMEOUT) == 0)
+        {
+            /*this is an option handled by IoTHubClientCore_LL*/
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_043: [ Calling IoTHubClientCore_LL_SetOption with value set to "0" shall disable the timeout mechanism for all new messages. ]*/
+            handleData->currentMessageTimeout = *(const tickcounter_ms_t*)value;
+            result = IOTHUB_CLIENT_OK;
+        }
+        else if (strcmp(optionName, OPTION_PRODUCT_INFO) == 0)
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_10_033: [repeat calls with "product_info" will erase the previously set product information if applicatble. ]*/
+            if (handleData->product_info != NULL)
+            {
+                STRING_delete(handleData->product_info);
+                handleData->product_info = NULL;
+            }
+
+            /*Codes_SRS_IOTHUBCLIENT_LL_10_035: [If string concatenation fails, `IoTHubClientCore_LL_SetOption` shall return `IOTHUB_CLIENT_ERRROR`. Otherwise, `IOTHUB_CLIENT_OK` shall be returned. ]*/
+            handleData->product_info = make_product_info((const char*)value);
+            if (handleData->product_info == NULL)
+            {
+                LogError("STRING_construct_sprintf failed");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else if (strcmp(optionName, OPTION_DIAGNOSTIC_SAMPLING_PERCENTAGE) == 0)
+        {
+            uint32_t percentage = *(uint32_t*)value;
+            if (percentage > 100)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_036: [Calling IoTHubClientCore_LL_SetOption with value > 100 shall return `IOTHUB_CLIENT_ERRROR`. ]*/
+                LogError("The value of diag_sampling_percentage is out of range [0, 100]: %u", percentage);
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_10_037: [Calling IoTHubClientCore_LL_SetOption with value between [0, 100] shall return `IOTHUB_CLIENT_OK`. ]*/
+                handleData->diagnostic_setting.diagSamplingPercentage = percentage;
+                handleData->diagnostic_setting.currentMessageNumber = 0;
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else if ((strcmp(optionName, OPTION_BLOB_UPLOAD_TIMEOUT_SECS) == 0) || (strcmp(optionName, OPTION_CURL_VERBOSE) == 0))
+        {
+#ifndef DONT_USE_UPLOADTOBLOB
+            // This option just gets passed down into IoTHubClientCore_LL_UploadToBlob
+            /*Codes_SRS_IOTHUBCLIENT_LL_30_010: [ blob_xfr_timeout - IoTHubClientCore_LL_SetOption shall pass this option to IoTHubClient_UploadToBlob_SetOption and return its result. ]*/
+            result = IoTHubClient_LL_UploadToBlob_SetOption(handleData->uploadToBlobHandle, optionName, value);
+            if(result != IOTHUB_CLIENT_OK)
+            {
+                LogError("unable to IoTHubClientCore_LL_UploadToBlob_SetOption, result=%d", result);
+            }
+#else
+            LogError("%s option being set with DONT_USE_UPLOADTOBLOB compiler switch", optionName);
+            result = IOTHUB_CLIENT_ERROR;
+#endif /*DONT_USE_UPLOADTOBLOB*/
+        }
+        // OPTION_SAS_TOKEN_REFRESH_TIME is, but may be updated in the future
+        // if this becomes necessary
+        else if (strcmp(optionName, OPTION_SAS_TOKEN_REFRESH_TIME) == 0 || strcmp(optionName, OPTION_SAS_TOKEN_LIFETIME) == 0)
+        {
+            if (IoTHubClient_Auth_Set_SasToken_Expiry(handleData->authorization_module, *(size_t*)value) != 0)
+            {
+                LogError("Failed setting the Token Expiry time");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else
+        {
+            // This section is unusual for SetOption calls because it attempts to pass unhandled options
+            // to two downstream targets (IoTHubTransport_SetOption and IoTHubClientCore_LL_UploadToBlob_SetOption) instead of one.
+
+            /*Codes_SRS_IOTHUBCLIENT_LL_30_011: [ IoTHubClientCore_LL_SetOption shall always pass unhandled options to Transport_SetOption. ]*/
+            /*Codes_SRS_IOTHUBCLIENT_LL_30_012: [ If Transport_SetOption fails, IoTHubClientCore_LL_SetOption shall return that failure code. ]*/
+            result = handleData->IoTHubTransport_SetOption(handleData->transportHandle, optionName, value);
+            if(result != IOTHUB_CLIENT_OK)
+            {
+                LogError("unable to IoTHubTransport_SetOption");
+            }
+#ifndef DONT_USE_UPLOADTOBLOB
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_30_013: [ If the DONT_USE_UPLOADTOBLOB compiler switch is undefined, IoTHubClientCore_LL_SetOption shall pass unhandled options to IoTHubClient_UploadToBlob_SetOption and ignore the result. ]*/
+                (void)IoTHubClient_LL_UploadToBlob_SetOption(handleData->uploadToBlobHandle, optionName, value);
+            }
+#endif /*DONT_USE_UPLOADTOBLOB*/
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetDeviceTwinCallback(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK deviceTwinCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /* Codes_SRS_IOTHUBCLIENT_LL_10_001: [ IoTHubClientCore_LL_SetDeviceTwinCallback shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle is NULL.] */
+    if (iotHubClientHandle == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("Invalid argument specified iothubClientHandle=%p", iotHubClientHandle);
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        if (deviceTwinCallback == NULL)
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_10_006: [ If deviceTwinCallback is NULL, then IoTHubClientCore_LL_SetDeviceTwinCallback shall call the underlying layer's _Unsubscribe function and return IOTHUB_CLIENT_OK.] */
+            handleData->IoTHubTransport_Unsubscribe_DeviceTwin(handleData->transportHandle);
+            handleData->deviceTwinCallback = NULL;
+            result = IOTHUB_CLIENT_OK;
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_10_002: [ If deviceTwinCallback is not NULL, then IoTHubClientCore_LL_SetDeviceTwinCallback shall call the underlying layer's _Subscribe function.] */
+            if (handleData->IoTHubTransport_Subscribe_DeviceTwin(handleData->transportHandle) == 0)
+            {
+                handleData->deviceTwinCallback = deviceTwinCallback;
+                handleData->deviceTwinContextCallback = userContextCallback;
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_005: [ Otherwise IoTHubClientCore_LL_SetDeviceTwinCallback shall succeed and return IOTHUB_CLIENT_OK.] */
+                result = IOTHUB_CLIENT_OK;
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_003: [ If the underlying layer's _Subscribe function fails, then IoTHubClientCore_LL_SetDeviceTwinCallback shall fail and return IOTHUB_CLIENT_ERROR.] */
+                result = IOTHUB_CLIENT_ERROR;
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SendReportedState(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const unsigned char* reportedState, size_t size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK reportedStateCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /* Codes_SRS_IOTHUBCLIENT_LL_10_012: [ IoTHubClientCore_LL_SendReportedState shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle is NULL. ] */
+    /* Codes_SRS_IOTHUBCLIENT_LL_10_013: [ IoTHubClientCore_LL_SendReportedState shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter reportedState is NULL] */
+    /* Codes_SRS_IOTHUBCLIENT_LL_07_005: [ IoTHubClientCore_LL_SendReportedState shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter size is equal to 0. ] */
+    if (iotHubClientHandle == NULL || (reportedState == NULL || size == 0) )
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("Invalid argument specified iothubClientHandle=%p, reportedState=%p, size=%lu", iotHubClientHandle, reportedState, (unsigned long)size);
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        /* Codes_SRS_IOTHUBCLIENT_LL_10_014: [IoTHubClientCore_LL_SendReportedState shall construct and queue the reported a Device_Twin structure for transmition by the underlying transport.] */
+        IOTHUB_DEVICE_TWIN* client_data = dev_twin_data_create(handleData, get_next_item_id(handleData), reportedState, size, reportedStateCallback, userContextCallback);
+        if (client_data == NULL)
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_10_015: [If any error is encountered IoTHubClientCore_LL_SendReportedState shall return IOTHUB_CLIENT_ERROR.] */
+            LogError("Failure constructing device twin data");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            if (handleData->IoTHubTransport_Subscribe_DeviceTwin(handleData->transportHandle) != 0)
+            {
+                LogError("Failure adding device twin data to queue");
+                device_twin_data_destroy(client_data);
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_001: [ IoTHubClientCore_LL_SendReportedState shall queue the constructed reportedState data to be consumed by the targeted transport. ] */
+                DList_InsertTailList(&(iotHubClientHandle->iot_msg_queue), &(client_data->entry));
+
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_016: [ Otherwise IoTHubClientCore_LL_SendReportedState shall succeed and return IOTHUB_CLIENT_OK.] */
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_GetTwinAsync(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK deviceTwinCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    // Codes_SRS_IOTHUBCLIENT_LL_09_011: [ If `iotHubClientHandle` or `deviceTwinCallback` are `NULL`, `IoTHubClientCore_LL_GetTwinAsync` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]
+    if (iotHubClientHandle == NULL || deviceTwinCallback == NULL)
+    {
+        LogError("Invalid argument iothubClientHandle=%p, deviceTwinCallback=%p", iotHubClientHandle, deviceTwinCallback);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        if (iotHubClientHandle->IoTHubTransport_Subscribe_DeviceTwin(iotHubClientHandle->transportHandle) != 0)
+        {
+            LogError("Failure adding device twin data to queue");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            GET_TWIN_CONTEXT* getTwinCtx;
+
+            if ((getTwinCtx = (GET_TWIN_CONTEXT*)malloc(sizeof(GET_TWIN_CONTEXT))) == NULL)
+            {
+                LogError("Failed creating get-twin context");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+
+                getTwinCtx->callback = deviceTwinCallback;
+                getTwinCtx->context = userContextCallback;
+
+                // Codes_SRS_IOTHUBCLIENT_LL_09_012: [ IoTHubClientCore_LL_GetTwinAsync shall invoke IoTHubTransport_GetTwinAsync, passing `on_device_twin_report_received` and the user data as context  ]
+                if (handleData->IoTHubTransport_GetTwinAsync(handleData->deviceHandle, on_get_device_twin_completed, getTwinCtx) != IOTHUB_CLIENT_OK)
+                {
+                    // Codes_SRS_IOTHUBCLIENT_LL_09_013: [ If IoTHubTransport_GetTwinAsync fails, `IoTHubClientCore_LL_GetTwinAsync` shall fail and return `IOTHUB_CLIENT_ERROR`. ]
+                    LogError("Failed getting device twin document");
+                    free(getTwinCtx);
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    // Codes_SRS_IOTHUBCLIENT_LL_09_014: [ If no errors occur IoTHubClientCore_LL_GetTwinAsync shall return `IOTHUB_CLIENT_OK`. ]
+                    handleData->complete_twin_update_encountered = true;
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetDeviceMethodCallback(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC deviceMethodCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    /*Codes_SRS_IOTHUBCLIENT_LL_12_017: [ IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_INVALID_ARG if parameter iotHubClientHandle is NULL. ] */
+    if (iotHubClientHandle == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        if (deviceMethodCallback == NULL)
+        {
+            if (handleData->methodCallback.type == CALLBACK_TYPE_NONE)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_029: [ If deviceMethodCallback is NULL and the client is not subscribed to receive method calls, IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_ERROR. ] */
+                LogError("not currently set to accept or process incoming messages.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else if (handleData->methodCallback.type == CALLBACK_TYPE_ASYNC)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_028: [If the user has subscribed using IoTHubClientCore_LL_SetDeviceMethodCallback_Ex, IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_ERROR. ] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetDeviceMethodCallback_Ex function.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_019: [If parameter messageCallback is NULL then IoTHubClientCore_LL_SetMessageCallback shall call the underlying layer's _Unsubscribe function and return IOTHUB_CLIENT_OK.] */
+                /*Codes_SRS_IOTHUBCLIENT_LL_12_018: [If deviceMethodCallback is NULL, then IoTHubClientCore_LL_SetDeviceMethodCallback shall call the underlying layer's IoTHubTransport_Unsubscribe_DeviceMethod function and return IOTHUB_CLIENT_OK. ] */
+                /*Codes_SRS_IOTHUBCLIENT_LL_12_022: [ Otherwise IoTHubClientCore_LL_SetDeviceMethodCallback shall succeed and return IOTHUB_CLIENT_OK. ]*/
+                handleData->IoTHubTransport_Unsubscribe_DeviceMethod(handleData->deviceHandle);
+                handleData->methodCallback.type = CALLBACK_TYPE_NONE;
+                handleData->methodCallback.callbackSync = NULL;
+                handleData->methodCallback.userContextCallback = NULL;
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else
+        {
+            if (handleData->methodCallback.type == CALLBACK_TYPE_ASYNC)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_028: [If the user has subscribed using IoTHubClientCore_LL_SetDeviceMethodCallback_Ex, IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_ERROR. ] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetDeviceMethodCallback_Ex function before subscribing with IoTHubClientCore_LL_SetDeviceMethodCallback.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_12_019: [ If deviceMethodCallback is not NULL, then IoTHubClientCore_LL_SetDeviceMethodCallback shall call the underlying layer's IoTHubTransport_Subscribe_DeviceMethod function. ]*/
+                if (handleData->IoTHubTransport_Subscribe_DeviceMethod(handleData->deviceHandle) == 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_12_022: [ Otherwise IoTHubClientCore_LL_SetDeviceMethodCallback shall succeed and return IOTHUB_CLIENT_OK. ]*/
+                    handleData->methodCallback.type = CALLBACK_TYPE_SYNC;
+                    handleData->methodCallback.callbackSync = deviceMethodCallback;
+                    handleData->methodCallback.callbackAsync = NULL;
+                    handleData->methodCallback.userContextCallback = userContextCallback;
+                    result = IOTHUB_CLIENT_OK;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_12_020: [ If the underlying layer's IoTHubTransport_Subscribe_DeviceMethod function fails, then IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    /*Codes_SRS_IOTHUBCLIENT_LL_12_021: [ If adding the information fails for any reason, IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    LogError("IoTHubTransport_Subscribe_DeviceMethod failed");
+                    handleData->methodCallback.type = CALLBACK_TYPE_NONE;
+                    handleData->methodCallback.callbackAsync = NULL;
+                    handleData->methodCallback.callbackSync = NULL;
+                    handleData->methodCallback.userContextCallback = NULL;
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetDeviceMethodCallback_Ex(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK inboundDeviceMethodCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /* Codes_SRS_IOTHUBCLIENT_LL_07_021: [ If handle is NULL then IoTHubClientCore_LL_SetDeviceMethodCallback_Ex shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    if (iotHubClientHandle == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        if (inboundDeviceMethodCallback == NULL)
+        {
+            if (handleData->methodCallback.type == CALLBACK_TYPE_NONE)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_030: [ If deviceMethodCallback is NULL and the client is not subscribed to receive method calls, IoTHubClientCore_LL_SetDeviceMethodCallback shall fail and return IOTHUB_CLIENT_ERROR. ] */
+                LogError("not currently set to accept or process incoming messages.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else if (handleData->methodCallback.type == CALLBACK_TYPE_SYNC)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_031: [If the user has subscribed using IoTHubClientCore_LL_SetDeviceMethodCallback, IoTHubClientCore_LL_SetDeviceMethodCallback_Ex shall fail and return IOTHUB_CLIENT_ERROR. ] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetDeviceMethodCallback function.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_022: [ If inboundDeviceMethodCallback is NULL then IoTHubClientCore_LL_SetDeviceMethodCallback_Ex shall call the underlying layer's IoTHubTransport_Unsubscribe_DeviceMethod function and return IOTHUB_CLIENT_OK.] */
+                handleData->IoTHubTransport_Unsubscribe_DeviceMethod(handleData->deviceHandle);
+                handleData->methodCallback.type = CALLBACK_TYPE_NONE;
+                handleData->methodCallback.callbackAsync = NULL;
+                handleData->methodCallback.userContextCallback = NULL;
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+        else
+        {
+            if (handleData->methodCallback.type == CALLBACK_TYPE_SYNC)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_10_031: [If the user has subscribed using IoTHubClientCore_LL_SetDeviceMethodCallback, IoTHubClientCore_LL_SetDeviceMethodCallback_Ex shall fail and return IOTHUB_CLIENT_ERROR. ] */
+                LogError("Invalid workflow sequence. Please unsubscribe using the IoTHubClientCore_LL_SetDeviceMethodCallback function before subscribing with IoTHubClientCore_LL_SetDeviceMethodCallback_Ex.");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_023: [ If inboundDeviceMethodCallback is non-NULL then IoTHubClientCore_LL_SetDeviceMethodCallback_Ex shall call the underlying layer's IoTHubTransport_Subscribe_DeviceMethod function.]*/
+                if (handleData->IoTHubTransport_Subscribe_DeviceMethod(handleData->deviceHandle) == 0)
+                {
+                    handleData->methodCallback.type = CALLBACK_TYPE_ASYNC;
+                    handleData->methodCallback.callbackAsync = inboundDeviceMethodCallback;
+                    handleData->methodCallback.callbackSync = NULL;
+                    handleData->methodCallback.userContextCallback = userContextCallback;
+                    result = IOTHUB_CLIENT_OK;
+                }
+                else
+                {
+                    /* Codes_SRS_IOTHUBCLIENT_LL_07_025: [ If any error is encountered then IoTHubClientCore_LL_SetDeviceMethodCallback_Ex shall return IOTHUB_CLIENT_ERROR.] */
+                    LogError("IoTHubTransport_Subscribe_DeviceMethod failed");
+                    handleData->methodCallback.type = CALLBACK_TYPE_NONE;
+                    handleData->methodCallback.callbackAsync = NULL;
+                    handleData->methodCallback.callbackSync = NULL;
+                    handleData->methodCallback.userContextCallback = NULL;
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_DeviceMethodResponse(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, METHOD_HANDLE methodId, const unsigned char* response, size_t response_size, int status_response)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /* Codes_SRS_IOTHUBCLIENT_LL_07_026: [ If handle or methodId is NULL then IoTHubClientCore_LL_DeviceMethodResponse shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    if (iotHubClientHandle == NULL || methodId == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LOG_ERROR_RESULT;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        /* Codes_SRS_IOTHUBCLIENT_LL_07_027: [ IoTHubClientCore_LL_DeviceMethodResponse shall call the IoTHubTransport_DeviceMethod_Response transport function.] */
+        if (handleData->IoTHubTransport_DeviceMethod_Response(handleData->deviceHandle, methodId, response, response_size, status_response) != 0)
+        {
+            LogError("IoTHubTransport_DeviceMethod_Response failed");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            result = IOTHUB_CLIENT_OK;
+        }
+    }
+    return result;
+}
+
+#ifndef DONT_USE_UPLOADTOBLOB
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_UploadToBlob(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* destinationFileName, const unsigned char* source, size_t size)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_061: [ If iotHubClientHandle is NULL then IoTHubClientCore_LL_UploadToBlob shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_062: [ If destinationFileName is NULL then IoTHubClientCore_LL_UploadToBlob shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_063: [ If `source` is `NULL` and size is greater than 0 then `IoTHubClientCore_LL_UploadToBlob` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    if (
+        (iotHubClientHandle == NULL) ||
+        (destinationFileName == NULL) ||
+        ((source == NULL) && (size >0))
+        )
+    {
+        LogError("invalid parameters IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle=%p, const char* destinationFileName=%s, const unsigned char* source=%p, size_t size=%lu", iotHubClientHandle, destinationFileName, source, (unsigned long)size);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        result = IoTHubClient_LL_UploadToBlob_Impl(iotHubClientHandle->uploadToBlobHandle, destinationFileName, source, size);
+    }
+    return result;
+}
+
+typedef struct UPLOAD_MULTIPLE_BLOCKS_WRAPPER_CONTEXT_TAG
+{
+    IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK getDataCallback;
+    void* context;
+} UPLOAD_MULTIPLE_BLOCKS_WRAPPER_CONTEXT;
+
+
+static IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT uploadMultipleBlocksCallbackWrapper(IOTHUB_CLIENT_FILE_UPLOAD_RESULT result, unsigned char const ** data, size_t* size, void* context)
+{
+    UPLOAD_MULTIPLE_BLOCKS_WRAPPER_CONTEXT* wrapperContext = (UPLOAD_MULTIPLE_BLOCKS_WRAPPER_CONTEXT*)context;
+    wrapperContext->getDataCallback(result, data, size, wrapperContext->context);
+    return IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_OK;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_UploadMultipleBlocksToBlob(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK getDataCallback, void* context)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_99_005: [ If `iotHubClientHandle` is `NULL` then `IoTHubClientCore_LL_UploadMultipleBlocksToBlob(Ex)` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_99_006: [ If `destinationFileName` is `NULL` then `IoTHubClientCore_LL_UploadMultipleBlocksToBlob(Ex)` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_99_007: [ If `getDataCallback` is `NULL` then `IoTHubClientCore_LL_UploadMultipleBlocksToBlob(Ex)` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    if (
+        (iotHubClientHandle == NULL) ||
+        (destinationFileName == NULL) ||
+        (getDataCallback == NULL)
+        )
+    {
+        LogError("invalid parameters IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle=%p, const char* destinationFileName=%p, getDataCallback=%p", iotHubClientHandle, destinationFileName, getDataCallback);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        UPLOAD_MULTIPLE_BLOCKS_WRAPPER_CONTEXT uploadMultipleBlocksWrapperContext;
+        uploadMultipleBlocksWrapperContext.getDataCallback = getDataCallback;
+        uploadMultipleBlocksWrapperContext.context = context;
+
+        result = IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl(iotHubClientHandle->uploadToBlobHandle, destinationFileName, uploadMultipleBlocksCallbackWrapper, &uploadMultipleBlocksWrapperContext);
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_UploadMultipleBlocksToBlobEx(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx, void* context)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_99_005: [ If `iotHubClientHandle` is `NULL` then `IoTHubClientCore_LL_UploadMultipleBlocksToBlob(Ex)` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_99_006: [ If `destinationFileName` is `NULL` then `IoTHubClientCore_LL_UploadMultipleBlocksToBlob(Ex)` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_99_007: [ If `getDataCallback` is `NULL` then `IoTHubClientCore_LL_UploadMultipleBlocksToBlob(Ex)` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+    if (
+        (iotHubClientHandle == NULL) ||
+        (destinationFileName == NULL) ||
+        (getDataCallbackEx == NULL)
+        )
+    {
+        LogError("invalid parameters IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle=%p, destinationFileName=%p, getDataCallbackEx=%p", iotHubClientHandle, destinationFileName, getDataCallbackEx);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        result = IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl(iotHubClientHandle->uploadToBlobHandle, destinationFileName, getDataCallbackEx, context);
+    }
+    return result;
+}
+#endif // DONT_USE_UPLOADTOBLOB
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SendEventToOutputAsync(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, IOTHUB_MESSAGE_HANDLE eventMessageHandle, const char* outputName, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK eventConfirmationCallback, void* userContextCallback)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    if ((iotHubClientHandle == NULL) || (outputName == NULL) || (eventMessageHandle == NULL) || ((eventConfirmationCallback == NULL) && (userContextCallback != NULL)))
+    {
+        // Codes_SRS_IOTHUBCLIENT_LL_31_127: [ If `iotHubClientHandle`, `outputName`, or `eventConfirmationCallback` is `NULL`, `IoTHubClient_LL_SendEventToOutputAsync` shall return `IOTHUB_CLIENT_INVALID_ARG`. ]
+        LogError("Invalid argument (iotHubClientHandle=%p, outputName=%p, eventMessageHandle=%p)", iotHubClientHandle, outputName, eventMessageHandle);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUBCLIENT_LL_31_128: [ `IoTHubClient_LL_SendEventToOutputAsync` shall set the outputName of the message to send. ]
+        if (IoTHubMessage_SetOutputName(eventMessageHandle, outputName) != IOTHUB_MESSAGE_OK)
+        {
+            LogError("IoTHubMessage_SetOutputName failed");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        // Codes_SRS_IOTHUBCLIENT_LL_31_129: [ `IoTHubClient_LL_SendEventToOutputAsync` shall invoke `IoTHubClient_LL_SendEventAsync` to send the message. ]
+        else if ((result = IoTHubClientCore_LL_SendEventAsync(iotHubClientHandle, eventMessageHandle, eventConfirmationCallback, userContextCallback)) != IOTHUB_CLIENT_OK)
+        {
+            LogError("Call into IoTHubClient_LL_SendEventAsync failed, result=%d", result);
+        }
+    }
+
+    return result;
+}
+
+
+static IOTHUB_CLIENT_RESULT create_event_handler_callback(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData, const char* inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC callbackSync, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX callbackSyncEx, void* userContextCallback, void* userContextCallbackEx, size_t userContextCallbackExLength)
+{
+    IOTHUB_CLIENT_RESULT result = IOTHUB_CLIENT_ERROR;
+    bool add_to_list = false;
+
+    if ((handleData->event_callbacks == NULL) && ((handleData->event_callbacks = singlylinkedlist_create()) == NULL))
+    {
+        LogError("Could not allocate linked list for callbacks");
+        result = IOTHUB_CLIENT_ERROR;
+    }
+    else
+    {
+        IOTHUB_EVENT_CALLBACK* event_callback = NULL;
+        LIST_ITEM_HANDLE item_handle = singlylinkedlist_find(handleData->event_callbacks, is_event_equal_for_match, (const void*)inputName);
+        if (item_handle == NULL)
+        {
+            // Codes_SRS_IOTHUBCLIENT_LL_31_134: [ `IoTHubClient_LL_SetInputMessageCallback` shall allocate a callback handle to associate callbacks from the transport => client if `inputName` isn't already present in the callback list. ]
+            event_callback = (IOTHUB_EVENT_CALLBACK*)malloc(sizeof(IOTHUB_EVENT_CALLBACK));
+            if (event_callback == NULL)
+            {
+                LogError("Could not allocate IOTHUB_EVENT_CALLBACK");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                memset(event_callback, 0, sizeof(*event_callback));
+                add_to_list = true;
+            }
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBCLIENT_LL_31_135: [ `IoTHubClient_LL_SetInputMessageCallback` shall reuse the existing callback handle if `inputName` is already present in the callback list. ]
+            event_callback = (IOTHUB_EVENT_CALLBACK*)singlylinkedlist_item_get_value(item_handle);
+            if (event_callback == NULL)
+            {
+                LogError("singlylinkedlist_item_get_value failed looking up event callback");
+            }
+        }
+
+        if (event_callback != NULL)
+        {
+            if ((inputName != NULL) && (event_callback->inputName == NULL))
+            {
+                event_callback->inputName = STRING_construct(inputName);
+            }
+
+            if ((inputName == NULL) || (event_callback->inputName != NULL))
+            {
+                event_callback->callbackAsync = callbackSync;
+                event_callback->callbackAsyncEx = callbackSyncEx;
+
+                free(event_callback->userContextCallbackEx);
+                event_callback->userContextCallbackEx = NULL;
+
+                if (userContextCallbackEx == NULL)
+                {
+                    event_callback->userContextCallback = userContextCallback;
+                }
+
+                if ((userContextCallbackEx != NULL) &&
+                    (NULL == (event_callback->userContextCallbackEx = malloc(userContextCallbackExLength))))
+                {
+                    LogError("Unable to allocate userContextCallback");
+                    delete_event(event_callback);
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else if ((add_to_list == true) && (NULL == singlylinkedlist_add(handleData->event_callbacks, event_callback)))
+                {
+                    LogError("Unable to add eventCallback to list");
+                    delete_event(event_callback);
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    if (userContextCallbackEx != NULL)
+                    {
+                        // Codes_SRS_IOTHUBCLIENT_LL_31_141: [`IoTHubClient_LL_SetInputMessageCallbackEx` shall copy the data passed in extended context. ]
+                        memcpy(event_callback->userContextCallbackEx, userContextCallbackEx, userContextCallbackExLength);
+                    }
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+            else
+            {
+                delete_event(event_callback);
+                result = IOTHUB_CLIENT_ERROR;
+            }
+        }
+    }
+
+    return result;
+}
+
+static IOTHUB_CLIENT_RESULT remove_event_unsubscribe_if_needed(IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData, const char* inputName)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    LIST_ITEM_HANDLE item_handle = singlylinkedlist_find(handleData->event_callbacks, is_event_equal_for_match, (const void*)inputName);
+    if (item_handle == NULL)
+    {
+        // Codes_SRS_IOTHUBCLIENT_LL_31_132: [ If `eventHandlerCallback` is NULL, `IoTHubClient_LL_SetInputMessageCallback` shall return `IOTHUB_CLIENT_ERROR` if the `inputName` is not present. ]
+        LogError("Input name %s was not present", inputName);
+        result = IOTHUB_CLIENT_ERROR;
+    }
+    else
+    {
+        IOTHUB_EVENT_CALLBACK* event_callback = (IOTHUB_EVENT_CALLBACK*)singlylinkedlist_item_get_value(item_handle);
+        if (event_callback == NULL)
+        {
+            LogError("singlylinkedlist_item_get_value failed");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            delete_event(event_callback);
+            // Codes_SRS_IOTHUBCLIENT_LL_31_131: [ If `eventHandlerCallback` is NULL, `IoTHubClient_LL_SetInputMessageCallback` shall remove the `inputName` from its callback list if present. ]
+            if (singlylinkedlist_remove(handleData->event_callbacks, item_handle) != 0)
+            {
+                LogError("singlylinkedlist_remove failed");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                if (singlylinkedlist_get_head_item(handleData->event_callbacks) == NULL)
+                {
+                    // Codes_SRS_IOTHUBCLIENT_LL_31_133: [ If `eventHandlerCallback` is NULL, `IoTHubClient_LL_SetInputMessageCallback` shall invoke `IoTHubTransport_Unsubscribe_InputQueue` if this was the last input callback. ]
+                    handleData->IoTHubTransport_Unsubscribe_InputQueue(handleData);
+                }
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+    }
+
+    return result;
+}
+
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetInputMessageCallbackImpl(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC eventHandlerCallback, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX eventHandlerCallbackEx, void *userContextCallback, void *userContextCallbackEx, size_t userContextCallbackExLength)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    if (iotHubClientHandle == NULL)
+    {
+        // Codes_SRS_IOTHUBCLIENT_LL_31_130: [ If `iotHubClientHandle` or `inputName` is NULL, `IoTHubClient_LL_SetInputMessageCallback` shall return IOTHUB_CLIENT_INVALID_ARG. ]
+        LogError("Invalid argument - iotHubClientHandle=%p, inputName=%p", iotHubClientHandle, inputName);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_CLIENT_CORE_LL_HANDLE_DATA* handleData = (IOTHUB_CLIENT_CORE_LL_HANDLE_DATA*)iotHubClientHandle;
+        if ((eventHandlerCallback == NULL) && (eventHandlerCallbackEx == NULL))
+        {
+            result = (IOTHUB_CLIENT_RESULT)remove_event_unsubscribe_if_needed(handleData, inputName);
+        }
+        else
+        {
+            bool registered_with_transport_handler = (handleData->event_callbacks != NULL) && (singlylinkedlist_get_head_item(handleData->event_callbacks) != NULL);
+            if ((result = (IOTHUB_CLIENT_RESULT)create_event_handler_callback(handleData, inputName, eventHandlerCallback, eventHandlerCallbackEx, userContextCallback, userContextCallbackEx, userContextCallbackExLength)) != IOTHUB_CLIENT_OK)
+            {
+                LogError("create_event_handler_callback call failed, error = %d", result);
+            }
+            // Codes_SRS_IOTHUBCLIENT_LL_31_136: [ `IoTHubClient_LL_SetInputMessageCallback` shall invoke `IoTHubTransport_Subscribe_InputQueue` if this is the first callback being registered. ]
+            else if (!registered_with_transport_handler && (handleData->IoTHubTransport_Subscribe_InputQueue(handleData->deviceHandle) != 0))
+            {
+                LogError("IoTHubTransport_Subscribe_InputQueue failed");
+                delete_event_callback_list(handleData);
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                result = IOTHUB_CLIENT_OK;
+            }
+        }
+    }
+    return result;
+
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetInputMessageCallbackEx(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC_EX eventHandlerCallbackEx, void *userContextCallbackEx, size_t userContextCallbackExLength)
+{
+    return IoTHubClientCore_LL_SetInputMessageCallbackImpl(iotHubClientHandle, inputName, NULL, eventHandlerCallbackEx, NULL, userContextCallbackEx, userContextCallbackExLength);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_SetInputMessageCallback(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* inputName, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC eventHandlerCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SetInputMessageCallbackImpl(iotHubClientHandle, inputName, eventHandlerCallback, NULL, userContextCallback, NULL, 0);
+}
+
+int IoTHubClientCore_LL_GetTransportCallbacks(TRANSPORT_CALLBACKS_INFO* transport_cb)
+{
+    int result;
+    if (transport_cb == NULL)
+    {
+        LogError("Invalid parameter transport callback can not be NULL");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        transport_cb->send_complete_cb = IoTHubClientCore_LL_SendComplete;
+        transport_cb->twin_retrieve_prop_complete_cb = IoTHubClientCore_LL_RetrievePropertyComplete;
+        transport_cb->twin_rpt_state_complete_cb = IoTHubClientCore_LL_ReportedStateComplete;
+        transport_cb->connection_status_cb = IoTHubClientCore_LL_ConnectionStatusCallBack;
+        transport_cb->prod_info_cb = IoTHubClientCore_LL_GetProductInfo;
+        transport_cb->msg_input_cb = IoTHubClientCore_LL_MessageCallbackFromInput;
+        transport_cb->msg_cb = IoTHubClientCore_LL_MessageCallback;
+        transport_cb->method_complete_cb = IoTHubClientCore_LL_DeviceMethodComplete;
+        result = 0;
+    }
+    return result;
+}
+
+#ifdef USE_EDGE_MODULES
+/* These should be replaced during iothub_client refactor */
+IOTHUB_CLIENT_RESULT IoTHubClientCore_LL_GenericMethodInvoke(IOTHUB_CLIENT_CORE_LL_HANDLE iotHubClientHandle, const char* deviceId, const char* moduleId, const char* methodName, const char* methodPayload, unsigned int timeout, int* responseStatus, unsigned char** responsePayload, size_t* responsePayloadSize)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if (iotHubClientHandle != NULL)
+    {
+        if (moduleId != NULL)
+        {
+            result = IoTHubClient_Edge_ModuleMethodInvoke(iotHubClientHandle->methodHandle, deviceId, moduleId, methodName, methodPayload, timeout, responseStatus, responsePayload, responsePayloadSize);
+        }
+        else
+        {
+            result = IoTHubClient_Edge_DeviceMethodInvoke(iotHubClientHandle->methodHandle, deviceId, methodName, methodPayload, timeout, responseStatus, responsePayload, responsePayloadSize);
+
+        }
+    }
+    else
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    return result;
+}
+#endif
+
+/*end*/
+
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_diagnostic.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_diagnostic.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_diagnostic.c	(revision 389)
@@ -0,0 +1,199 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <inttypes.h>
+#include <math.h>
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/buffer_.h"
+
+#include "internal/iothub_client_diagnostic.h"
+
+#define TIME_STRING_BUFFER_LEN 30
+
+static const int BASE_36 = 36;
+
+#define INDEFINITE_TIME ((time_t)-1)
+
+static char* get_epoch_time(char* timeBuffer)
+{
+    char* result;
+    time_t epochTime;
+    int timeLen = sizeof(time_t);
+
+    if ((epochTime = get_time(NULL)) == INDEFINITE_TIME)
+    {
+        LogError("Failed getting current time");
+        result = NULL;
+    }
+    else if (timeLen == sizeof(int64_t))
+    {
+        if (sprintf(timeBuffer, "%"PRIu64, (int64_t)epochTime) < 0)
+        {
+            LogError("Failed sprintf to timeBuffer with 8 bytes of time_t");
+            result = NULL;
+        }
+        else
+        {
+            result = timeBuffer;
+        }
+    }
+    else if (timeLen == sizeof(int32_t))
+    {
+        if (sprintf(timeBuffer, "%"PRIu32, (int32_t)epochTime) < 0)
+        {
+            LogError("Failed sprintf to timeBuffer with 4 bytes of time_t");
+            result = NULL;
+        }
+        else
+        {
+            result = timeBuffer;
+        }
+    }
+    else
+    {
+        LogError("Unknown size of time_t");
+        result = NULL;
+    }
+
+    return result;
+}
+
+static char get_base36_char(unsigned char value)
+{
+    return value <= 9 ? '0' + value : 'a' + value - 10;
+}
+
+static char* generate_eight_random_characters(char *randomString)
+{
+    int i;
+    char* randomStringPos = randomString;
+    for (i = 0; i < 4; ++i)
+    {
+        int rawRandom = rand();
+        int first = rawRandom % BASE_36;
+        int second = rawRandom / BASE_36 % BASE_36;
+        *randomStringPos++ = get_base36_char((unsigned char)first);
+        *randomStringPos++ = get_base36_char((unsigned char)second);
+    }
+    *randomStringPos = 0;
+
+    return randomString;
+}
+
+static bool should_add_diagnostic_info(IOTHUB_DIAGNOSTIC_SETTING_DATA* diagSetting)
+{
+    bool result = false;
+    if (diagSetting->diagSamplingPercentage > 0)
+    {
+        double number;
+        double percentage;
+
+        if (diagSetting->currentMessageNumber == UINT32_MAX)
+        {
+            diagSetting->currentMessageNumber %= diagSetting->diagSamplingPercentage * 100;
+        }
+        ++diagSetting->currentMessageNumber;
+
+        number = diagSetting->currentMessageNumber;
+        percentage = diagSetting->diagSamplingPercentage;
+        result = (floor((number - 2) * percentage / 100.0) < floor((number - 1) * percentage / 100.0));
+    }
+    return result;
+}
+
+static IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* prepare_message_diagnostic_data()
+{
+    IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* result = (IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA*)malloc(sizeof(IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA));
+    if (result == NULL)
+    {
+        LogError("malloc for DiagnosticData failed");
+    }
+    else
+    {
+        char* diagId = (char*)malloc(9);
+        if (diagId == NULL)
+        {
+            LogError("malloc for diagId failed");
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            char* timeBuffer;
+
+            (void)generate_eight_random_characters(diagId);
+            result->diagnosticId = diagId;
+
+            timeBuffer = (char*)malloc(TIME_STRING_BUFFER_LEN);
+            if (timeBuffer == NULL)
+            {
+                LogError("malloc for timeBuffer failed");
+                free(result->diagnosticId);
+                free(result);
+                result = NULL;
+            }
+            else if (get_epoch_time(timeBuffer) == NULL)
+            {
+                LogError("Failed getting current time");
+                free(result->diagnosticId);
+                free(result);
+                free(timeBuffer);
+                result = NULL;
+            }
+            else
+            {
+                result->diagnosticCreationTimeUtc = timeBuffer;
+            }
+        }
+    }
+    return result;
+}
+
+int IoTHubClient_Diagnostic_AddIfNecessary(IOTHUB_DIAGNOSTIC_SETTING_DATA* diagSetting, IOTHUB_MESSAGE_HANDLE messageHandle)
+{
+    int result;
+    /* Codes_SRS_IOTHUB_DIAGNOSTIC_13_001: [ IoTHubClient_Diagnostic_AddIfNecessary should return nonezero if diagSetting or messageHandle is NULL. ]*/
+    if (diagSetting == NULL || messageHandle == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    /* Codes_SRS_IOTHUB_DIAGNOSTIC_13_003: [ If diagSamplingPercentage is equal to 0, message number should not be increased and no diagnostic properties added ]*/
+    else if (should_add_diagnostic_info(diagSetting))
+    {
+        /* Codes_SRS_IOTHUB_DIAGNOSTIC_13_004: [ If diagSamplingPercentage is equal to 100, diagnostic properties should be added to all messages]*/
+        /* Codes_SRS_IOTHUB_DIAGNOSTIC_13_005: [ If diagSamplingPercentage is between(0, 100), diagnostic properties should be added based on percentage]*/
+
+        IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* diagnosticData;
+        if ((diagnosticData = prepare_message_diagnostic_data()) == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (IoTHubMessage_SetDiagnosticPropertyData(messageHandle, diagnosticData) != IOTHUB_MESSAGE_OK)
+            {
+                /* Codes_SRS_IOTHUB_DIAGNOSTIC_13_002: [ IoTHubClient_Diagnostic_AddIfNecessary should return nonezero if failing to add diagnostic property. ]*/
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+
+            free(diagnosticData->diagnosticCreationTimeUtc);
+            free(diagnosticData->diagnosticId);
+            free(diagnosticData);
+            diagnosticData = NULL;
+        }
+    }
+    else
+    {
+        result = 0;
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_ll.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_ll.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_ll.c	(revision 389)
@@ -0,0 +1,141 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <string.h>
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/string_tokenizer.h"
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/constbuffer.h"
+#include "azure_c_shared_utility/platform.h"
+
+#include "iothub_client_core_ll.h"
+#include "internal/iothub_client_authorization.h"
+#include "iothub_client_ll.h"
+#include "iothub_transport_ll.h"
+#include "iothub_device_client_ll.h"
+#include "internal/iothub_client_private.h"
+#include "iothub_client_options.h"
+#include "iothub_client_version.h"
+#include <stdint.h>
+
+#ifndef DONT_USE_UPLOADTOBLOB
+#include "internal/iothub_client_ll_uploadtoblob.h"
+#endif
+
+IOTHUB_CLIENT_LL_HANDLE IoTHubClient_LL_CreateFromConnectionString(const char* connectionString, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    return (IOTHUB_CLIENT_LL_HANDLE)IoTHubClientCore_LL_CreateFromConnectionString(connectionString, protocol);
+}
+
+IOTHUB_CLIENT_LL_HANDLE IoTHubClient_LL_Create(const IOTHUB_CLIENT_CONFIG* config)
+{
+    return (IOTHUB_CLIENT_LL_HANDLE)IoTHubClientCore_LL_Create(config);
+}
+
+IOTHUB_CLIENT_LL_HANDLE IoTHubClient_LL_CreateWithTransport(const IOTHUB_CLIENT_DEVICE_CONFIG * config)
+{
+    return (IOTHUB_CLIENT_LL_HANDLE)IoTHubClientCore_LL_CreateWithTransport(config);
+}
+
+IOTHUB_CLIENT_LL_HANDLE IoTHubClient_LL_CreateFromDeviceAuth(const char* iothub_uri, const char* device_id, IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol)
+{
+    return (IOTHUB_CLIENT_LL_HANDLE)IoTHubClientCore_LL_CreateFromDeviceAuth(iothub_uri, device_id, protocol);
+}
+
+void IoTHubClient_LL_Destroy(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle)
+{
+    IoTHubClientCore_LL_Destroy((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SendEventAsync(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_MESSAGE_HANDLE eventMessageHandle, IOTHUB_CLIENT_EVENT_CONFIRMATION_CALLBACK eventConfirmationCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SendEventAsync((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, eventMessageHandle, eventConfirmationCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_GetSendStatus(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_STATUS *iotHubClientStatus)
+{
+    return IoTHubClientCore_LL_GetSendStatus((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, iotHubClientStatus);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetMessageCallback(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_MESSAGE_CALLBACK_ASYNC messageCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SetMessageCallback((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, messageCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetConnectionStatusCallback(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_CONNECTION_STATUS_CALLBACK connectionStatusCallback, void * userContextCallback)
+{
+    return IoTHubClientCore_LL_SetConnectionStatusCallback((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, connectionStatusCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetRetryPolicy(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitInSeconds)
+{
+    return IoTHubClientCore_LL_SetRetryPolicy((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, retryPolicy, retryTimeoutLimitInSeconds);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_GetRetryPolicy(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_RETRY_POLICY* retryPolicy, size_t* retryTimeoutLimitInSeconds)
+{
+    return IoTHubClientCore_LL_GetRetryPolicy((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, retryPolicy, retryTimeoutLimitInSeconds);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_GetLastMessageReceiveTime(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, time_t* lastMessageReceiveTime)
+{
+    return IoTHubClientCore_LL_GetLastMessageReceiveTime((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, lastMessageReceiveTime);
+}
+
+void IoTHubClient_LL_DoWork(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle)
+{
+    IoTHubClientCore_LL_DoWork((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetDeviceTwinCallback(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK deviceTwinCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SetDeviceTwinCallback((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, deviceTwinCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetOption(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, const char* optionName, const void* value)
+{
+    return IoTHubClientCore_LL_SetOption((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, optionName, value);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SendReportedState(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, const unsigned char* reportedState, size_t size, IOTHUB_CLIENT_REPORTED_STATE_CALLBACK reportedStateCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SendReportedState((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, reportedState, size, reportedStateCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetDeviceMethodCallback(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_DEVICE_METHOD_CALLBACK_ASYNC deviceMethodCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SetDeviceMethodCallback((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, deviceMethodCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_SetDeviceMethodCallback_Ex(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, IOTHUB_CLIENT_INBOUND_DEVICE_METHOD_CALLBACK inboundDeviceMethodCallback, void* userContextCallback)
+{
+    return IoTHubClientCore_LL_SetDeviceMethodCallback_Ex((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, inboundDeviceMethodCallback, userContextCallback);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_DeviceMethodResponse(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, METHOD_HANDLE methodId, const unsigned char* response, size_t response_size, int status_response)
+{
+    return IoTHubClientCore_LL_DeviceMethodResponse((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, methodId, response, response_size, status_response);
+}
+
+#ifndef DONT_USE_UPLOADTOBLOB
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadToBlob(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, const char* destinationFileName, const unsigned char* source, size_t size)
+{
+    return IoTHubClientCore_LL_UploadToBlob((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, destinationFileName, source, size);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadMultipleBlocksToBlob(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK getDataCallback, void* context)
+{
+    return IoTHubClientCore_LL_UploadMultipleBlocksToBlob((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, destinationFileName, getDataCallback, context);
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadMultipleBlocksToBlobEx(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx, void* context)
+{
+    return IoTHubClientCore_LL_UploadMultipleBlocksToBlobEx((IOTHUB_CLIENT_CORE_LL_HANDLE)iotHubClientHandle, destinationFileName, getDataCallbackEx, context);
+}
+#endif
+
+
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_ll_uploadtoblob.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_ll_uploadtoblob.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_ll_uploadtoblob.c	(revision 389)
@@ -0,0 +1,1145 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef DONT_USE_UPLOADTOBLOB
+
+#include <stdlib.h>
+#include <string.h>
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/string_tokenizer.h"
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/httpapiexsas.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+#include "azure_c_shared_utility/urlencode.h"
+
+#include "iothub_client_core_ll.h"
+#include "iothub_client_options.h"
+#include "internal/iothub_client_private.h"
+#include "iothub_client_version.h"
+#include "iothub_transport_ll.h"
+#include "parson.h"
+#include "internal/iothub_client_ll_uploadtoblob.h"
+#include "internal/iothub_client_authorization.h"
+#include "internal/blob.h"
+
+#define API_VERSION "?api-version=2016-11-14"
+
+#ifdef WINCE
+#include <stdarg.h>
+// Returns number of characters copied.
+int snprintf(char * s, size_t n, const char * format, ...)
+{
+    int result;
+    va_list args;
+    va_start(args, format);
+    result = vsnprintf(s, n, format, args);
+    va_end(args);
+    return result;
+}
+#endif
+
+/*Codes_SRS_IOTHUBCLIENT_LL_02_085: [ IoTHubClient_LL_UploadToBlob shall use the same authorization as step 1. to prepare and perform a HTTP request with the following parameters: ]*/
+#define FILE_UPLOAD_FAILED_BODY "{ \"isSuccess\":false, \"statusCode\":-1,\"statusDescription\" : \"client not able to connect with the server\" }"
+#define FILE_UPLOAD_ABORTED_BODY "{ \"isSuccess\":false, \"statusCode\":-1,\"statusDescription\" : \"file upload aborted\" }"
+#define INDEFINITE_TIME                            ((time_t)-1)
+
+static const char* const EMPTY_STRING = "";
+static const char* const HEADER_AUTHORIZATION = "Authorization";
+static const char* const HEADER_APP_JSON = "application/json";
+
+typedef struct UPLOADTOBLOB_X509_CREDENTIALS_TAG
+{
+    char* x509certificate;
+    char* x509privatekey;
+} UPLOADTOBLOB_X509_CREDENTIALS;
+
+typedef enum UPOADTOBLOB_CURL_VERBOSITY_TAG
+{
+    UPOADTOBLOB_CURL_VERBOSITY_UNSET,
+    UPOADTOBLOB_CURL_VERBOSITY_ON,
+    UPOADTOBLOB_CURL_VERBOSITY_OFF
+} UPOADTOBLOB_CURL_VERBOSITY;
+
+typedef struct IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA_TAG
+{
+    const char* deviceId;
+    char* hostname;
+    IOTHUB_AUTHORIZATION_HANDLE authorization_module;
+    IOTHUB_CREDENTIAL_TYPE cred_type;
+    union 
+    {
+        UPLOADTOBLOB_X509_CREDENTIALS x509_credentials;
+        char* supplied_sas_token;
+    } credentials;
+    
+    char* certificates;
+    HTTP_PROXY_OPTIONS http_proxy_options;
+    UPOADTOBLOB_CURL_VERBOSITY curl_verbosity_level;
+    size_t blob_upload_timeout_secs;
+}IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA;
+
+typedef struct BLOB_UPLOAD_CONTEXT_TAG
+{
+    const unsigned char* blobSource; /* source to upload */
+    size_t blobSourceSize; /* size of the source */
+    size_t remainingSizeToUpload; /* size not yet uploaded */
+} BLOB_UPLOAD_CONTEXT;
+
+static int send_http_sas_request(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_client, const char* uri_resource, HTTPAPIEX_HANDLE http_api_handle, const char* relative_path, HTTP_HEADERS_HANDLE request_header, BUFFER_HANDLE blobBuffer, BUFFER_HANDLE response_buff)
+{
+    int result;
+    unsigned int statusCode;
+
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_089: [ If creating the HTTPAPIEX_SAS_HANDLE fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+    HTTPAPIEX_SAS_HANDLE http_sas_handle = HTTPAPIEX_SAS_Create_From_String(IoTHubClient_Auth_Get_DeviceKey(upload_client->authorization_module), uri_resource, EMPTY_STRING);
+    if (http_sas_handle == NULL)
+    {
+        LogError("unable to HTTPAPIEX_SAS_Create");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_32_003: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall execute HTTPAPIEX_ExecuteRequest passing the following information for arguments: ]*/
+        if (HTTPAPIEX_SAS_ExecuteRequest(http_sas_handle, http_api_handle, HTTPAPI_REQUEST_POST, relative_path, request_header,
+            blobBuffer, &statusCode, NULL, response_buff) != HTTPAPIEX_OK)
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_076: [ If HTTPAPIEX_ExecuteRequest call fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+            result = MU_FAILURE;
+            LogError("unable to HTTPAPIEX_ExecuteRequest");
+        }
+        else if (statusCode >= 300)
+        {
+            result = MU_FAILURE;
+            LogError("HTTP code was %u", statusCode);
+        }
+        else
+        {
+            result = 0;
+        }
+        HTTPAPIEX_SAS_Destroy(http_sas_handle);
+    }
+    return result;
+}
+
+static int send_http_request(HTTPAPIEX_HANDLE http_api_handle, const char* relative_path, HTTP_HEADERS_HANDLE request_header, BUFFER_HANDLE blobBuffer, BUFFER_HANDLE response_buff)
+{
+    int result;
+    unsigned int statusCode;
+    /*Codes_SRS_IOTHUBCLIENT_LL_32_003: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall execute HTTPAPIEX_ExecuteRequest passing the following information for arguments: ]*/
+    if (HTTPAPIEX_ExecuteRequest(http_api_handle, HTTPAPI_REQUEST_POST, relative_path, request_header,
+        blobBuffer, &statusCode, NULL, response_buff) != HTTPAPIEX_OK)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_076: [ If HTTPAPIEX_ExecuteRequest call fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+        result = MU_FAILURE;
+        LogError("unable to HTTPAPIEX_ExecuteRequest");
+    }
+    else if (statusCode >= 300)
+    {
+        result = MU_FAILURE;
+        LogError("HTTP code was %u", statusCode);
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+static int parse_result_json(const char* json_response, STRING_HANDLE correlation_id, STRING_HANDLE sas_uri)
+{
+    int result;
+
+    JSON_Object* json_obj;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_081: [ Otherwise, IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall use parson to extract and save the following information from the response buffer: correlationID and SasUri. ]*/
+    JSON_Value* json = json_parse_string(json_response);
+    if (json == NULL)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_082: [ If extracting and saving the correlationId or SasUri fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+        LogError("unable to json_parse_string");
+        result = MU_FAILURE;
+
+    }
+    else
+    {
+        if ((json_obj = json_value_get_object(json)) == NULL)
+        {
+            LogError("unable to get json_value_get_object");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            const char* json_corr_id;
+            const char* json_hostname;
+            const char* json_container_name;
+            const char* json_blob_name;
+            const char* json_sas_token;
+            STRING_HANDLE filename;
+            if ((json_corr_id = json_object_get_string(json_obj, "correlationId")) == NULL)
+            {
+                LogError("unable to retrieve correlation Id from json");
+                result = MU_FAILURE;
+            }
+            else if ((json_hostname = json_object_get_string(json_obj, "hostName")) == NULL)
+            {
+                LogError("unable to retrieve hostname Id from json");
+                result = MU_FAILURE;
+            }
+            else if ((json_container_name = json_object_get_string(json_obj, "containerName")) == NULL)
+            {
+                LogError("unable to retrieve container name Id from json");
+                result = MU_FAILURE;
+            }
+            else if ((json_blob_name = json_object_get_string(json_obj, "blobName")) == NULL)
+            {
+                LogError("unable to retrieve blob name Id from json");
+                result = MU_FAILURE;
+            }
+            else if ((json_sas_token = json_object_get_string(json_obj, "sasToken")) == NULL)
+            {
+                LogError("unable to retrieve sas token from json");
+                result = MU_FAILURE;
+            }
+            /*Codes_SRS_IOTHUBCLIENT_LL_32_008: [ The returned file name shall be URL encoded before passing back to the cloud. ]*/
+            else if ((filename = URL_EncodeString(json_blob_name)) == NULL)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_32_009: [ If URL_EncodeString fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                LogError("unable to URL encode of filename");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                if (STRING_sprintf(sas_uri, "https://%s/%s/%s%s", json_hostname, json_container_name, STRING_c_str(filename), json_sas_token) != 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_082: [ If extracting and saving the correlationId or SasUri fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    LogError("unable to construct uri string");
+                    result = MU_FAILURE;
+                }
+                else if (STRING_copy(correlation_id, json_corr_id) != 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_082: [ If extracting and saving the correlationId or SasUri fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    LogError("unable to copy correlation Id");
+                    result = MU_FAILURE;
+                    STRING_empty(sas_uri);
+                }
+                else
+                {
+                    result = 0;
+                }
+                STRING_delete(filename);
+            }
+        }
+        json_value_free(json);
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE IoTHubClient_LL_UploadToBlob_Create(const IOTHUB_CLIENT_CONFIG* config, IOTHUB_AUTHORIZATION_HANDLE auth_handle)
+{
+    IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data;
+    if (auth_handle == NULL || config == NULL)
+    {
+        LogError("Invalid arguments auth_handle: %p, config: %p", auth_handle, config);
+        upload_data = NULL;
+    }
+    else
+    {
+        upload_data = malloc(sizeof(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA));
+        if (upload_data == NULL)
+        {
+            LogError("Failed malloc allocation");
+            /*return as is*/
+        }
+        else
+        {
+            memset(upload_data, 0, sizeof(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA));
+
+            upload_data->authorization_module = auth_handle;
+
+            size_t iotHubNameLength = strlen(config->iotHubName);
+            size_t iotHubSuffixLength = strlen(config->iotHubSuffix);
+            upload_data->hostname = malloc(iotHubNameLength + 1 + iotHubSuffixLength + 1); /*first +1 is because "." the second +1 is because \0*/
+            if (upload_data->hostname == NULL)
+            {
+                LogError("Failed malloc allocation");
+                free(upload_data);
+                upload_data = NULL;
+            }
+            else if ((upload_data->deviceId = IoTHubClient_Auth_Get_DeviceId(upload_data->authorization_module)) == NULL)
+            {
+                LogError("Failed retrieving device ID");
+                free(upload_data->hostname);
+                free(upload_data);
+                upload_data = NULL;
+            }
+            else
+            {
+                char* insert_pos = (char*)upload_data->hostname;
+                (void)memcpy((char*)insert_pos, config->iotHubName, iotHubNameLength);
+                insert_pos += iotHubNameLength;
+                *insert_pos = '.';
+                insert_pos += 1;
+                (void)memcpy(insert_pos, config->iotHubSuffix, iotHubSuffixLength); /*+1 will copy the \0 too*/
+                insert_pos += iotHubSuffixLength;
+                *insert_pos = '\0';
+
+                upload_data->cred_type = IoTHubClient_Auth_Get_Credential_Type(upload_data->authorization_module);
+                // If the credential type is unknown then it means that we are using x509 because the certs need to get
+                // passed down later in the process.
+                if (upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_UNKNOWN || upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509)
+                {
+                    upload_data->cred_type = IOTHUB_CREDENTIAL_TYPE_X509;
+                    upload_data->credentials.x509_credentials.x509certificate = NULL;
+                    upload_data->credentials.x509_credentials.x509privatekey = NULL;
+                }
+                else if (upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509_ECC)
+                {
+                    if (IoTHubClient_Auth_Get_x509_info(upload_data->authorization_module, &upload_data->credentials.x509_credentials.x509certificate, &upload_data->credentials.x509_credentials.x509privatekey) != 0)
+                    {
+                        LogError("Failed getting x509 certificate information");
+                        free(upload_data->hostname);
+                        free(upload_data);
+                        upload_data = NULL;
+                    }
+                }
+                else if (upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN)
+                {
+                    upload_data->credentials.supplied_sas_token = IoTHubClient_Auth_Get_SasToken(upload_data->authorization_module, NULL, 0, EMPTY_STRING);
+                    if (upload_data->credentials.supplied_sas_token == NULL)
+                    {
+                        LogError("Failed retrieving supplied sas token");
+                        free(upload_data->hostname);
+                        free(upload_data);
+                        upload_data = NULL;
+                    }
+                }
+            }
+        }
+    }
+    return (IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE)upload_data;
+
+}
+
+/*returns 0 when correlationId, sasUri contain data*/
+static int IoTHubClient_LL_UploadToBlob_step1and2(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data, HTTPAPIEX_HANDLE iotHubHttpApiExHandle, HTTP_HEADERS_HANDLE requestHttpHeaders, const char* destinationFileName, STRING_HANDLE correlationId, STRING_HANDLE sasUri)
+{
+    int result;
+
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_066: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall create an HTTP relative path formed from "/devices/" + deviceId + "/files/" + "?api-version=API_VERSION". ]*/
+    STRING_HANDLE relativePath = STRING_construct_sprintf("/devices/%s/files/%s", upload_data->deviceId, API_VERSION);
+    if (relativePath == NULL)
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_067: [ If creating the relativePath fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+        LogError("Failure constructing string");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_32_001: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall create a JSON string formed from "{ \"blobName\": \" + destinationFileName + "\" }" */
+        STRING_HANDLE blobName = STRING_construct_sprintf("{ \"blobName\": \"%s\" }", destinationFileName);
+        if (blobName == NULL)
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_32_002: [ If creating the JSON string fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+            LogError("Failure constructing string");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            BUFFER_HANDLE responseContent;
+            size_t len = STRING_length(blobName);
+            BUFFER_HANDLE blobBuffer = BUFFER_create((const unsigned char *)STRING_c_str(blobName), len);
+            if (blobBuffer == NULL)
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_32_002: [ If creating the JSON string fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                LogError("unable to create BUFFER");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_068: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall create an HTTP responseContent BUFFER_HANDLE. ]*/
+                if ((responseContent = BUFFER_new()) == NULL)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_069: [ If creating the HTTP response buffer handle fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    result = MU_FAILURE;
+                    LogError("unable to BUFFER_new");
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_072: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall add the following name:value to request HTTP headers: ] "Content-Type": "application/json" "Accept": "application/json" "User-Agent": "iothubclient/" IOTHUB_SDK_VERSION*/
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_107: [ - "Authorization" header shall not be build. ]*/
+                    if (!(
+                        (HTTPHeaders_AddHeaderNameValuePair(requestHttpHeaders, "Content-Type", HEADER_APP_JSON) == HTTP_HEADERS_OK) &&
+                        (HTTPHeaders_AddHeaderNameValuePair(requestHttpHeaders, "Accept", HEADER_APP_JSON) == HTTP_HEADERS_OK) &&
+                        (HTTPHeaders_AddHeaderNameValuePair(requestHttpHeaders, "User-Agent", "iothubclient/" IOTHUB_SDK_VERSION) == HTTP_HEADERS_OK) &&
+                        ((upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509 || upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509_ECC) ||
+                        (HTTPHeaders_AddHeaderNameValuePair(requestHttpHeaders, HEADER_AUTHORIZATION, EMPTY_STRING) == HTTP_HEADERS_OK))
+                        ))
+                    {
+                        /*Codes_SRS_IOTHUBCLIENT_LL_02_071: [ If creating the HTTP headers fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                        LogError("unable to HTTPHeaders_AddHeaderNameValuePair");
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        int wasIoTHubRequestSuccess = 0; /*!=0 means responseContent has a buffer that should be parsed by parson after executing the below switch*/
+                        /* set the result to error by default */
+                        result = MU_FAILURE;
+                        switch (upload_data->cred_type)
+                        {
+                            default:
+                            {
+                                /*wasIoTHubRequestSuccess takes care of the return value*/
+                                LogError("Internal Error: unexpected value in auth schema = %d", upload_data->cred_type);
+                                result = MU_FAILURE;
+                                break;
+                            }
+                            case IOTHUB_CREDENTIAL_TYPE_X509_ECC:
+                            case IOTHUB_CREDENTIAL_TYPE_X509:
+                            {
+                                if (send_http_request(iotHubHttpApiExHandle, STRING_c_str(relativePath), requestHttpHeaders, blobBuffer, responseContent) != 0)
+                                {
+                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_076: [ If HTTPAPIEX_ExecuteRequest call fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                    result = MU_FAILURE;
+                                    LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                }
+                                else
+                                {
+                                    wasIoTHubRequestSuccess = 1;
+                                }
+                                break;
+                            }
+                            case IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY:
+                            case IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH:
+                            {
+                                STRING_HANDLE uri_resource = STRING_construct_sprintf("%s/devices/%s", upload_data->hostname, upload_data->deviceId);
+                                if (uri_resource == NULL)
+                                {
+                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_089: [ If creating the HTTPAPIEX_SAS_HANDLE fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                    result = MU_FAILURE;
+                                    LogError("Failure constructing string");
+                                }
+                                else
+                                {
+                                    if (upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH)
+                                    {
+                                        time_t curr_time;
+                                        if ((curr_time = get_time(NULL)) == INDEFINITE_TIME)
+                                        {
+                                            result = MU_FAILURE;
+                                            LogError("failure retrieving time");
+                                        }
+                                        else
+                                        {
+                                            size_t expiry = (size_t)(difftime(curr_time, 0) + 3600);
+                                            char* sas_token = IoTHubClient_Auth_Get_SasToken(upload_data->authorization_module, STRING_c_str(uri_resource), expiry, EMPTY_STRING);
+                                            if (sas_token == NULL)
+                                            {
+                                                result = MU_FAILURE;
+                                                LogError("unable to retrieve sas token");
+                                            }
+                                            else
+                                            {
+                                                if (HTTPHeaders_ReplaceHeaderNameValuePair(requestHttpHeaders, HEADER_AUTHORIZATION, sas_token) != HTTP_HEADERS_OK)
+                                                {
+                                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_074: [ If adding "Authorization" fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR ]*/
+                                                    result = MU_FAILURE;
+                                                    LogError("unable to HTTPHeaders_AddHeaderNameValuePair");
+                                                }
+                                                else if (send_http_request(iotHubHttpApiExHandle, STRING_c_str(relativePath), requestHttpHeaders, blobBuffer, responseContent) != 0)
+                                                {
+                                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_076: [ If HTTPAPIEX_ExecuteRequest call fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                                    result = MU_FAILURE;
+                                                    LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                                }
+                                                else
+                                                {
+                                                    wasIoTHubRequestSuccess = 1;
+                                                }
+                                            }
+                                            free(sas_token);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        if (send_http_sas_request(upload_data, STRING_c_str(uri_resource), iotHubHttpApiExHandle, STRING_c_str(relativePath), requestHttpHeaders, blobBuffer, responseContent) != 0)
+                                        {
+                                            /*Codes_SRS_IOTHUBCLIENT_LL_02_076: [ If HTTPAPIEX_ExecuteRequest call fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                            result = MU_FAILURE;
+                                            LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                        }
+                                        else
+                                        {
+                                            wasIoTHubRequestSuccess = 1;
+                                        }
+                                    }
+                                    STRING_delete(uri_resource);
+                                }
+                                break;
+                            }
+                            case IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN:
+                            {
+                                /*Codes_SRS_IOTHUBCLIENT_LL_02_073: [ If the credentials used to create handle have "sasToken" then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall add the following HTTP request headers: ]*/
+                                if (HTTPHeaders_ReplaceHeaderNameValuePair(requestHttpHeaders, HEADER_AUTHORIZATION, upload_data->credentials.supplied_sas_token) != HTTP_HEADERS_OK)
+                                {
+                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_074: [ If adding "Authorization" fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR ]*/
+                                    result = MU_FAILURE;
+                                    LogError("unable to HTTPHeaders_AddHeaderNameValuePair");
+                                }
+                                else if (send_http_request(iotHubHttpApiExHandle, STRING_c_str(relativePath), requestHttpHeaders, blobBuffer, responseContent) != 0)
+                                {
+                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_076: [ If HTTPAPIEX_ExecuteRequest call fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                    result = MU_FAILURE;
+                                    LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                }
+                                else
+                                {
+                                    wasIoTHubRequestSuccess = 1;
+                                }
+                                break;
+                            }
+                        }
+                        if (wasIoTHubRequestSuccess == 1)
+                        {
+                            const unsigned char*responseContent_u_char = BUFFER_u_char(responseContent);
+                            size_t responseContent_length = BUFFER_length(responseContent);
+                            STRING_HANDLE responseAsString = STRING_from_byte_array(responseContent_u_char, responseContent_length);
+                            if (responseAsString == NULL)
+                            {
+                                result = MU_FAILURE;
+                                LogError("unable to get the response as string");
+                            }
+                            else
+                            {
+                                if (parse_result_json(STRING_c_str(responseAsString), correlationId, sasUri) != 0)
+                                {
+                                    /*Codes_SRS_IOTHUBCLIENT_LL_02_082: [ If extracting and saving the correlationId or SasUri fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                    LogError("unable to parse json result");
+                                    result = MU_FAILURE;
+                                }
+                                else
+                                {
+                                    result = 0;
+                                }
+                                STRING_delete(responseAsString);
+                            }
+                        }
+                    }
+                    BUFFER_delete(responseContent);
+                }
+                BUFFER_delete(blobBuffer);
+            }
+            STRING_delete(blobName);
+        }
+        STRING_delete(relativePath);
+    }
+    return result;
+}
+
+/*returns 0 when the IoTHub has been informed about the file upload status*/
+static int IoTHubClient_LL_UploadToBlob_step3(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data, STRING_HANDLE correlationId, HTTPAPIEX_HANDLE iotHubHttpApiExHandle, HTTP_HEADERS_HANDLE requestHttpHeaders, BUFFER_HANDLE messageBody)
+{
+    int result;
+    /*here is step 3. depending on the outcome of step 2 it needs to inform IoTHub about the file upload status*/
+    /*if step 1 failed, there's nothing that step 3 needs to report.*/
+    /*this POST "tries" to happen*/
+
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_085: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall use the same authorization as step 1. to prepare and perform a HTTP request with the following parameters: ]*/
+    STRING_HANDLE relativePathNotification = STRING_construct_sprintf("/devices/%s/files/notifications/%s%s", upload_data->deviceId, STRING_c_str(correlationId), API_VERSION);
+    if (relativePathNotification == NULL)
+    {
+        result = MU_FAILURE;
+        LogError("Failure constructing string");
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_086: [ If performing the HTTP request fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+        switch (upload_data->cred_type)
+        {
+            default:
+            {
+                LogError("internal error: unknown authorization Scheme");
+                result = MU_FAILURE;
+                break;
+            }
+            case IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN:
+            case IOTHUB_CREDENTIAL_TYPE_X509:
+            case IOTHUB_CREDENTIAL_TYPE_X509_ECC:
+            case IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH:
+            {
+                if (send_http_request(iotHubHttpApiExHandle, STRING_c_str(relativePathNotification), requestHttpHeaders, messageBody, NULL) != 0)
+                {
+                    LogError("unable to execute HTTPAPIEX_ExecuteRequest");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    result = 0;
+                }
+                break;
+            }
+            case IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY:
+            {
+                STRING_HANDLE uriResource = STRING_construct_sprintf("%s/devices/%s/files/notifications", upload_data->hostname, upload_data->deviceId);
+                if (uriResource == NULL)
+                {
+                    LogError("Failure constructing string");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    if (send_http_sas_request(upload_data, STRING_c_str(uriResource), iotHubHttpApiExHandle, STRING_c_str(relativePathNotification), requestHttpHeaders, messageBody, NULL) != 0)
+                    {
+                        LogError("unable to execute HTTPAPIEX_ExecuteRequest");
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        result = 0;
+                    }
+                    STRING_delete(uriResource);
+                }
+                break;
+            }
+        }
+        STRING_delete(relativePathNotification);
+    }
+    return result;
+}
+
+// this callback splits the source data into blocks to be fed to IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex)_Impl
+static IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_RESULT FileUpload_GetData_Callback(IOTHUB_CLIENT_FILE_UPLOAD_RESULT result, unsigned char const ** data, size_t* size, void* context)
+{
+    BLOB_UPLOAD_CONTEXT* uploadContext = (BLOB_UPLOAD_CONTEXT*) context;
+
+    if (data == NULL || size == NULL)
+    {
+        // This is the last call, nothing to do
+    }
+    else if (result != FILE_UPLOAD_OK)
+    {
+        // Last call failed
+        *data = NULL;
+        *size = 0;
+    }
+    else if (uploadContext->remainingSizeToUpload == 0)
+    {
+        // Everything has been uploaded
+        *data = NULL;
+        *size = 0;
+    }
+    else
+    {
+        // Upload next block
+        size_t thisBlockSize = (uploadContext->remainingSizeToUpload > BLOCK_SIZE) ? BLOCK_SIZE : uploadContext->remainingSizeToUpload;
+        *data = (unsigned char*)uploadContext->blobSource + (uploadContext->blobSourceSize - uploadContext->remainingSizeToUpload);
+        *size = thisBlockSize;
+        uploadContext->remainingSizeToUpload -= thisBlockSize;
+    }
+
+    return IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_OK;
+}
+
+static HTTPAPIEX_RESULT set_transfer_timeout(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data, HTTPAPIEX_HANDLE iotHubHttpApiExHandle)
+{
+    HTTPAPIEX_RESULT result;
+    if (upload_data->blob_upload_timeout_secs != 0)
+    {
+        // Convert the timeout to milliseconds for curl
+        long http_timeout = (long)upload_data->blob_upload_timeout_secs * 1000;
+        result = HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_HTTP_TIMEOUT, &http_timeout);
+    }
+    else
+    {
+        result = HTTPAPIEX_OK;
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE handle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx, void* context)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_061: [ If handle is NULL then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_062: [ If destinationFileName is NULL then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/
+
+    if (handle == NULL || destinationFileName == NULL || getDataCallbackEx == NULL)
+    {
+        LogError("invalid argument detected handle=%p destinationFileName=%p getDataCallbackEx=%p", handle, destinationFileName, getDataCallbackEx);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data = (IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA*)handle;
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_064: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall create an HTTPAPIEX_HANDLE to the IoTHub hostname. ]*/
+        HTTPAPIEX_HANDLE iotHubHttpApiExHandle = HTTPAPIEX_Create(upload_data->hostname);
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_065: [ If creating the HTTPAPIEX_HANDLE fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+        if (iotHubHttpApiExHandle == NULL)
+        {
+            LogError("unable to HTTPAPIEX_Create");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        /*Codes_SRS_IOTHUBCLIENT_LL_30_020: [ If the blob_upload_timeout_secs option has been set to non-zero, IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall set the timeout on the underlying transport accordingly. ]*/
+        else if (set_transfer_timeout(upload_data, iotHubHttpApiExHandle) != HTTPAPIEX_OK)
+        {
+            LogError("unable to set blob transfer timeout");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            if (upload_data->curl_verbosity_level != UPOADTOBLOB_CURL_VERBOSITY_UNSET)
+            {
+                size_t curl_verbose = (upload_data->curl_verbosity_level == UPOADTOBLOB_CURL_VERBOSITY_ON);
+                (void)HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_CURL_VERBOSE, &curl_verbose);
+            }
+
+            /*transmit the x509certificate and x509privatekey*/
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_106: [ - x509certificate and x509privatekey saved options shall be passed on the HTTPAPIEX_SetOption ]*/
+            if ((upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509 || upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509_ECC) &&
+                ((HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_X509_CERT, upload_data->credentials.x509_credentials.x509certificate) != HTTPAPIEX_OK) ||
+                (HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_X509_PRIVATE_KEY, upload_data->credentials.x509_credentials.x509privatekey) != HTTPAPIEX_OK))
+                )
+            {
+                LogError("unable to HTTPAPIEX_SetOption for x509 certificate");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_111: [ If certificates is non-NULL then certificates shall be passed to HTTPAPIEX_SetOption with optionName TrustedCerts. ]*/
+                if ((upload_data->certificates != NULL) && (HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_TRUSTED_CERT, upload_data->certificates) != HTTPAPIEX_OK))
+                {
+                    LogError("unable to set TrustedCerts!");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+
+                    if (upload_data->http_proxy_options.host_address != NULL)
+                    {
+                        HTTP_PROXY_OPTIONS proxy_options;
+                        proxy_options = upload_data->http_proxy_options;
+
+                        if (HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_HTTP_PROXY, &proxy_options) != HTTPAPIEX_OK)
+                        {
+                            LogError("unable to set http proxy!");
+                            result = IOTHUB_CLIENT_ERROR;
+                        }
+                        else
+                        {
+                            result = IOTHUB_CLIENT_OK;
+                        }
+                    }
+                    else
+                    {
+                        result = IOTHUB_CLIENT_OK;
+                    }
+
+                    if (result != IOTHUB_CLIENT_ERROR)
+                    {
+                        STRING_HANDLE sasUri;
+                        STRING_HANDLE correlationId;
+                        if ((correlationId = STRING_new()) == NULL)
+                        {
+                            LogError("unable to STRING_new");
+                            result = IOTHUB_CLIENT_ERROR;
+                        }
+                        else if ((sasUri = STRING_new()) == NULL)
+                        {
+                            LogError("unable to create sas uri");
+                            result = IOTHUB_CLIENT_ERROR;
+                            STRING_delete(correlationId);
+                        }
+                        else
+                        {
+                            /*Codes_SRS_IOTHUBCLIENT_LL_02_070: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall create request HTTP headers. ]*/
+                            HTTP_HEADERS_HANDLE requestHttpHeaders = HTTPHeaders_Alloc(); /*these are build by step 1 and used by step 3 too*/
+                            if (requestHttpHeaders == NULL)
+                            {
+                                LogError("unable to HTTPHeaders_Alloc");
+                                result = IOTHUB_CLIENT_ERROR;
+                            }
+                            else
+                            {
+                                /*do step 1*/
+                                if (IoTHubClient_LL_UploadToBlob_step1and2(upload_data, iotHubHttpApiExHandle, requestHttpHeaders, destinationFileName, correlationId, sasUri) != 0)
+                                {
+                                    LogError("error in IoTHubClient_LL_UploadToBlob_step1");
+                                    result = IOTHUB_CLIENT_ERROR;
+                                }
+                                else
+                                {
+                                    /*do step 2.*/
+
+                                    unsigned int httpResponse;
+                                    BUFFER_HANDLE responseToIoTHub = BUFFER_new();
+                                    if (responseToIoTHub == NULL)
+                                    {
+                                        result = IOTHUB_CLIENT_ERROR;
+                                        LogError("unable to BUFFER_new");
+                                    }
+                                    else
+                                    {
+                                        /*Codes_SRS_IOTHUBCLIENT_LL_02_083: [ IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall call Blob_UploadFromSasUri and capture the HTTP return code and HTTP body. ]*/
+                                        BLOB_RESULT uploadMultipleBlocksResult = Blob_UploadMultipleBlocksFromSasUri(STRING_c_str(sasUri), getDataCallbackEx, context, &httpResponse, responseToIoTHub, upload_data->certificates, &(upload_data->http_proxy_options));
+                                        if (uploadMultipleBlocksResult == BLOB_ABORTED)
+                                        {
+                                            /*Codes_SRS_IOTHUBCLIENT_LL_99_008: [ If step 2 is aborted by the client, then the HTTP message body shall look like:  ]*/
+                                            LogInfo("Blob_UploadFromSasUri aborted file upload");
+
+                                            if (BUFFER_build(responseToIoTHub, (const unsigned char*)FILE_UPLOAD_ABORTED_BODY, sizeof(FILE_UPLOAD_ABORTED_BODY) / sizeof(FILE_UPLOAD_ABORTED_BODY[0])) == 0)
+                                            {
+                                                if (IoTHubClient_LL_UploadToBlob_step3(upload_data, correlationId, iotHubHttpApiExHandle, requestHttpHeaders, responseToIoTHub) != 0)
+                                                {
+                                                    LogError("IoTHubClient_LL_UploadToBlob_step3 failed");
+                                                    result = IOTHUB_CLIENT_ERROR;
+                                                }
+                                                else
+                                                {
+                                                    /*Codes_SRS_IOTHUBCLIENT_LL_99_009: [ If step 2 is aborted by the client and if step 3 succeeds, then `IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex)` shall return `IOTHUB_CLIENT_OK`. ] */
+                                                    result = IOTHUB_CLIENT_OK;
+                                                }
+                                            }
+                                            else
+                                            {
+                                                LogError("Unable to BUFFER_build, can't perform IoTHubClient_LL_UploadToBlob_step3");
+                                                result = IOTHUB_CLIENT_ERROR;
+                                            }
+                                        }
+                                        else if (uploadMultipleBlocksResult != BLOB_OK)
+                                        {
+                                            /*Codes_SRS_IOTHUBCLIENT_LL_02_084: [ If Blob_UploadFromSasUri fails then IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                                            LogError("unable to Blob_UploadFromSasUri");
+
+                                            /*do step 3*/ /*try*/
+                                            /*Codes_SRS_IOTHUBCLIENT_LL_02_091: [ If step 2 fails without establishing an HTTP dialogue, then the HTTP message body shall look like: ]*/
+                                            if (BUFFER_build(responseToIoTHub, (const unsigned char*)FILE_UPLOAD_FAILED_BODY, sizeof(FILE_UPLOAD_FAILED_BODY) / sizeof(FILE_UPLOAD_FAILED_BODY[0])) == 0)
+                                            {
+                                                if (IoTHubClient_LL_UploadToBlob_step3(upload_data, correlationId, iotHubHttpApiExHandle, requestHttpHeaders, responseToIoTHub) != 0)
+                                                {
+                                                    LogError("IoTHubClient_LL_UploadToBlob_step3 failed");
+                                                }
+                                            }
+                                            result = IOTHUB_CLIENT_ERROR;
+                                        }
+                                        else
+                                        {
+                                            /*must make a json*/
+                                            unsigned char * response = BUFFER_u_char(responseToIoTHub);
+                                            STRING_HANDLE req_string;
+                                            if(response == NULL)
+                                            {
+                                                req_string = STRING_construct_sprintf("{\"isSuccess\":%s, \"statusCode\":%d, \"statusDescription\":""}", ((httpResponse < 300) ? "true" : "false"), httpResponse);
+                                        	}
+                                            else
+                                            {
+                                                req_string = STRING_construct_sprintf("{\"isSuccess\":%s, \"statusCode\":%d, \"statusDescription\":\"%s\"}", ((httpResponse < 300) ? "true" : "false"), httpResponse, response);
+                                            }
+                                            if (req_string == NULL)
+                                            {
+                                                LogError("Failure constructing string");
+                                                result = IOTHUB_CLIENT_ERROR;
+                                            }
+                                            else
+                                            {
+                                                /*do again snprintf*/
+                                                BUFFER_HANDLE toBeTransmitted = NULL;
+                                                size_t req_string_len = STRING_length(req_string);
+                                                const char* required_string = STRING_c_str(req_string);
+                                                if ((toBeTransmitted = BUFFER_create((const unsigned char*)required_string, req_string_len)) == NULL)
+                                                {
+                                                    LogError("unable to BUFFER_create");
+                                                    result = IOTHUB_CLIENT_ERROR;
+                                                }
+                                                else
+                                                {
+                                                    if (IoTHubClient_LL_UploadToBlob_step3(upload_data, correlationId, iotHubHttpApiExHandle, requestHttpHeaders, toBeTransmitted) != 0)
+                                                    {
+                                                        LogError("IoTHubClient_LL_UploadToBlob_step3 failed");
+                                                        result = IOTHUB_CLIENT_ERROR;
+                                                    }
+                                                    else
+                                                    {
+                                                        result = (httpResponse < 300) ? IOTHUB_CLIENT_OK : IOTHUB_CLIENT_ERROR;
+                                                    }
+                                                    BUFFER_delete(toBeTransmitted);
+                                                }
+                                                STRING_delete(req_string);
+                                            }
+                                        }
+                                        BUFFER_delete(responseToIoTHub);
+                                    }
+                                }
+                                HTTPHeaders_Free(requestHttpHeaders);
+                            }
+                            STRING_delete(sasUri);
+                            STRING_delete(correlationId);
+                        }
+                    }
+                }
+            }
+            HTTPAPIEX_Destroy(iotHubHttpApiExHandle);
+        }
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_99_003: [ If `IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex)` return `IOTHUB_CLIENT_OK`, it shall call `getDataCallbackEx` with `result` set to `FILE_UPLOAD_OK`, and `data` and `size` set to NULL. ]*/
+        /*Codes_SRS_IOTHUBCLIENT_LL_99_004: [ If `IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex)` does not return `IOTHUB_CLIENT_OK`, it shall call `getDataCallbackEx` with `result` set to `FILE_UPLOAD_ERROR`, and `data` and `size` set to NULL. ]*/
+        (void)getDataCallbackEx(result == IOTHUB_CLIENT_OK ? FILE_UPLOAD_OK : FILE_UPLOAD_ERROR, NULL, NULL, context);
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadToBlob_Impl(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE handle, const char* destinationFileName, const unsigned char* source, size_t size)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    if (handle == NULL || destinationFileName == NULL)
+    {
+        LogError("Invalid parameter handle:%p destinationFileName:%p", handle, destinationFileName);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_063: [ If source is NULL and size is greater than 0 then IoTHubClient_LL_UploadToBlob shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/
+    else if (source == NULL && size > 0)
+    {
+        LogError("Invalid source and size combination: source=%p size=%lu", source, (unsigned long)size);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBCLIENT_LL_99_001: [ `IoTHubClient_LL_UploadToBlob` shall create a struct containing the `source`, the `size`, and the remaining size to upload.]*/
+        BLOB_UPLOAD_CONTEXT context;
+        context.blobSource = source;
+        context.blobSourceSize = size;
+        context.remainingSizeToUpload = size;
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_99_002: [ `IoTHubClient_LL_UploadToBlob` shall call `IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl` with `FileUpload_GetData_Callback` as `getDataCallbackEx` and pass the struct created at step SRS_IOTHUBCLIENT_LL_99_001 as `context` ]*/
+        result = IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl(handle, destinationFileName, FileUpload_GetData_Callback, &context);
+    }
+    return result;
+}
+
+void IoTHubClient_LL_UploadToBlob_Destroy(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE handle)
+{
+    if (handle == NULL)
+    {
+        LogError("unexpected NULL argument");
+    }
+    else
+    {
+        IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data = (IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA*)handle;
+
+        if (upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509 || upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_X509_ECC)
+        {
+            free(upload_data->credentials.x509_credentials.x509certificate);
+            free(upload_data->credentials.x509_credentials.x509privatekey);
+        }
+        else if (upload_data->cred_type == IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN)
+        {
+            free(upload_data->credentials.supplied_sas_token);
+        }
+
+        free((void*)upload_data->hostname);
+        if (upload_data->certificates != NULL)
+        {
+            free(upload_data->certificates);
+        }
+        if (upload_data->http_proxy_options.host_address != NULL)
+        {
+            free((char *)upload_data->http_proxy_options.host_address);
+        }
+        if (upload_data->http_proxy_options.username != NULL)
+        {
+            free((char *)upload_data->http_proxy_options.username);
+        }
+        if (upload_data->http_proxy_options.password != NULL)
+        {
+            free((char *)upload_data->http_proxy_options.password);
+        }
+        free(upload_data);
+    }
+}
+
+IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadToBlob_SetOption(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE handle, const char* optionName, const void* value)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_IOTHUBCLIENT_LL_02_110: [ If parameter handle is NULL then IoTHubClient_LL_UploadToBlob_SetOption shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+    if (handle == NULL)
+    {
+        LogError("invalid argument detected: IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE handle=%p, const char* optionName=%s, const void* value=%p", handle, optionName, value);
+        result = IOTHUB_CLIENT_ERROR;
+    }
+    else
+    {
+        IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* upload_data = (IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA*)handle;
+
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_100: [ x509certificate - then value then is a null terminated string that contains the x509 certificate. ]*/
+        if (strcmp(optionName, OPTION_X509_CERT) == 0)
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_109: [ If the authentication scheme is NOT x509 then IoTHubClient_LL_UploadToBlob_SetOption shall return IOTHUB_CLIENT_INVALID_ARG. ]*/
+            if (upload_data->cred_type != IOTHUB_CREDENTIAL_TYPE_X509)
+            {
+                LogError("trying to set a x509 certificate while the authentication scheme is not x509");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_103: [ The options shall be saved. ]*/
+                /*try to make a copy of the certificate*/
+                char* temp;
+                if (mallocAndStrcpy_s(&temp, value) != 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_104: [ If saving fails, then IoTHubClient_LL_UploadToBlob_SetOption shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    LogError("unable to mallocAndStrcpy_s");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_105: [ Otherwise IoTHubClient_LL_UploadToBlob_SetOption shall succeed and return IOTHUB_CLIENT_OK. ]*/
+                    if (upload_data->credentials.x509_credentials.x509certificate != NULL) /*free any previous values, if any*/
+                    {
+                        free(upload_data->credentials.x509_credentials.x509certificate);
+                    }
+                    upload_data->credentials.x509_credentials.x509certificate = temp;
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+        /*Codes_SRS_IOTHUBCLIENT_LL_02_101: [ x509privatekey - then value is a null terminated string that contains the x509 privatekey. ]*/
+        else if (strcmp(optionName, OPTION_X509_PRIVATE_KEY) == 0)
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_109: [ If the authentication scheme is NOT x509 then IoTHubClient_LL_UploadToBlob_SetOption shall return IOTHUB_CLIENT_INVALID_ARG. ]*/
+            if (upload_data->cred_type != IOTHUB_CREDENTIAL_TYPE_X509)
+            {
+                LogError("trying to set a x509 privatekey while the authentication scheme is not x509");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBCLIENT_LL_02_103: [ The options shall be saved. ]*/
+                /*try to make a copy of the privatekey*/
+                char* temp;
+                if (mallocAndStrcpy_s(&temp, value) != 0)
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_104: [ If saving fails, then IoTHubClient_LL_UploadToBlob_SetOption shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+                    LogError("unable to mallocAndStrcpy_s");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_02_105: [ Otherwise IoTHubClient_LL_UploadToBlob_SetOption shall succeed and return IOTHUB_CLIENT_OK. ]*/
+                    if (upload_data->credentials.x509_credentials.x509privatekey != NULL) /*free any previous values, if any*/
+                    {
+                        free(upload_data->credentials.x509_credentials.x509privatekey);
+                    }
+                    upload_data->credentials.x509_credentials.x509privatekey = temp;
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+        else if (strcmp(OPTION_TRUSTED_CERT, optionName) == 0)
+        {
+            if (value == NULL)
+            {
+                LogError("NULL is a not a valid value for TrustedCerts");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            else
+            {
+                char* tempCopy;
+                if (mallocAndStrcpy_s(&tempCopy, value) != 0)
+                {
+                    LogError("failure in mallocAndStrcpy_s");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    if (upload_data->certificates != NULL)
+                    {
+                        free(upload_data->certificates);
+                    }
+                    upload_data->certificates = tempCopy;
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+        /*Codes_SRS_IOTHUBCLIENT_LL_32_008: [ OPTION_HTTP_PROXY - then the value will be a pointer to HTTP_PROXY_OPTIONS structure. ]*/
+        else if (strcmp(optionName, OPTION_HTTP_PROXY) == 0)
+        {
+            HTTP_PROXY_OPTIONS* proxy_options = (HTTP_PROXY_OPTIONS *)value;
+
+            if (proxy_options->host_address == NULL)
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_32_006: [ If `host_address` is NULL, `IoTHubClient_LL_UploadToBlob_SetOption` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+                LogError("NULL host_address in proxy options");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            /* Codes_SRS_IOTHUBCLIENT_LL_32_007: [ If only one of `username` and `password` is NULL, `IoTHubClient_LL_UploadToBlob_SetOption` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+            else if (((proxy_options->username == NULL) || (proxy_options->password == NULL)) &&
+                (proxy_options->username != proxy_options->password))
+            {
+                LogError("Only one of username and password for proxy settings was NULL");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            else
+            {
+                if (upload_data->http_proxy_options.host_address != NULL)
+                {
+                    free((char *)upload_data->http_proxy_options.host_address);
+                    upload_data->http_proxy_options.host_address = NULL;
+                }
+                if (upload_data->http_proxy_options.username != NULL)
+                {
+                    free((char *)upload_data->http_proxy_options.username);
+                    upload_data->http_proxy_options.username = NULL;
+                }
+                if (upload_data->http_proxy_options.password != NULL)
+                {
+                    free((char *)upload_data->http_proxy_options.password);
+                    upload_data->http_proxy_options.password = NULL;
+                }
+
+                upload_data->http_proxy_options.port = proxy_options->port;
+
+                if (mallocAndStrcpy_s((char **)(&upload_data->http_proxy_options.host_address), proxy_options->host_address) != 0)
+                {
+                    LogError("failure in mallocAndStrcpy_s - upload_data->http_proxy_options.host_address");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else if (proxy_options->username != NULL && mallocAndStrcpy_s((char **)(&upload_data->http_proxy_options.username), proxy_options->username) != 0)
+                {
+                    LogError("failure in mallocAndStrcpy_s - upload_data->http_proxy_options.username");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else if (proxy_options->password != NULL && mallocAndStrcpy_s((char **)(&upload_data->http_proxy_options.password), proxy_options->password) != 0)
+                {
+                    LogError("failure in mallocAndStrcpy_s - upload_data->http_proxy_options.password");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+        else if (strcmp(optionName, OPTION_CURL_VERBOSE) == 0)
+        {
+            upload_data->curl_verbosity_level = ((*(bool*)value) == 0) ? UPOADTOBLOB_CURL_VERBOSITY_OFF : UPOADTOBLOB_CURL_VERBOSITY_ON;
+            result = IOTHUB_CLIENT_OK;
+        }
+        else if (strcmp(optionName, OPTION_BLOB_UPLOAD_TIMEOUT_SECS) == 0)
+        {
+            upload_data->blob_upload_timeout_secs = *(size_t*)value;
+            result = IOTHUB_CLIENT_OK;
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUBCLIENT_LL_02_102: [ If an unknown option is presented then IoTHubClient_LL_UploadToBlob_SetOption shall return IOTHUB_CLIENT_INVALID_ARG. ]*/
+            result = IOTHUB_CLIENT_INVALID_ARG;
+        }
+    }
+    return result;
+}
+
+#endif /*DONT_USE_UPLOADTOBLOB*/
+
+
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_retry_control.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_retry_control.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_client_retry_control.c	(revision 389)
@@ -0,0 +1,514 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "internal/iothub_client_retry_control.h"
+
+#include <math.h>
+
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/xlogging.h"
+
+#define RESULT_OK           0
+#define INDEFINITE_TIME     ((time_t)-1)
+
+typedef struct RETRY_CONTROL_INSTANCE_TAG
+{
+    IOTHUB_CLIENT_RETRY_POLICY policy;
+    unsigned int max_retry_time_in_secs;
+
+    unsigned int initial_wait_time_in_secs;
+    unsigned int max_jitter_percent;
+
+    unsigned int retry_count;
+    time_t first_retry_time;
+    time_t last_retry_time;
+    unsigned int current_wait_time_in_secs;
+} RETRY_CONTROL_INSTANCE;
+
+typedef int (*RETRY_ACTION_EVALUATION_FUNCTION)(RETRY_CONTROL_INSTANCE* retry_state, RETRY_ACTION* retry_action);
+
+
+// ========== Helper Functions ========== //
+
+// ---------- Set/Retrieve Options Helpers ----------//
+
+static void* retry_control_clone_option(const char* name, const void* value)
+{
+    void* result;
+
+    if ((name == NULL) || (value == NULL))
+    {
+        LogError("Failed to clone option (either name (%p) or value (%p) are NULL)", name, value);
+        result = NULL;
+    }
+    else if (strcmp(RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS, name) == 0 ||
+            strcmp(RETRY_CONTROL_OPTION_MAX_JITTER_PERCENT, name) == 0)
+    {
+        unsigned int* cloned_value;
+
+        if ((cloned_value = (unsigned int*)malloc(sizeof(unsigned int))) == NULL)
+        {
+            LogError("Failed to clone option '%p' (malloc failed)", name);
+            result = NULL;
+        }
+        else
+        {
+            *cloned_value = *(unsigned int*)value;
+
+            result = (void*)cloned_value;
+        }
+    }
+    else
+    {
+        LogError("Failed to clone option (option with name '%s' is not suppported)", name);
+        result = NULL;
+    }
+
+    return result;
+}
+
+static void retry_control_destroy_option(const char* name, const void* value)
+{
+    if ((name == NULL) || (value == NULL))
+    {
+        LogError("Failed to destroy option (either name (%p) or value (%p) are NULL)", name, value);
+    }
+    else if (strcmp(RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS, name) == 0 ||
+        strcmp(RETRY_CONTROL_OPTION_MAX_JITTER_PERCENT, name) == 0)
+    {
+        free((void*)value);
+    }
+    else
+    {
+        LogError("Failed to destroy option (option with name '%s' is not suppported)", name);
+    }
+}
+
+// ========== _should_retry() Auxiliary Functions ========== //
+
+static int evaluate_retry_action(RETRY_CONTROL_INSTANCE* retry_control, RETRY_ACTION* retry_action)
+{
+    int result;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_019: [If `retry_control->retry_count` is 0, `retry_action` shall be set to RETRY_ACTION_RETRY_NOW]
+    if (retry_control->retry_count == 0)
+    {
+        *retry_action = RETRY_ACTION_RETRY_NOW;
+        result = RESULT_OK;
+    }
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_020: [If `retry_control->last_retry_time` is INDEFINITE_TIME and policy is not IOTHUB_CLIENT_RETRY_IMMEDIATE, the evaluation function shall return non-zero]
+    else if (retry_control->last_retry_time == INDEFINITE_TIME &&
+             retry_control->policy != IOTHUB_CLIENT_RETRY_IMMEDIATE)
+    {
+        LogError("Failed to evaluate retry action (last_retry_time is INDEFINITE_TIME)");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        time_t current_time;
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_021: [`current_time` shall be set using get_time()]
+        if ((current_time = get_time(NULL)) == INDEFINITE_TIME)
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_022: [If get_time() fails, the evaluation function shall return non-zero]
+            LogError("Failed to evaluate retry action (get_time() failed)");
+            result = MU_FAILURE;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_023: [If `retry_control->max_retry_time_in_secs` is not 0 and (`current_time` - `retry_control->first_retry_time`) is greater than or equal to `retry_control->max_retry_time_in_secs`, `retry_action` shall be set to RETRY_ACTION_STOP_RETRYING]
+        else if (retry_control->max_retry_time_in_secs > 0 &&
+            get_difftime(current_time, retry_control->first_retry_time) >= retry_control->max_retry_time_in_secs)
+        {
+            *retry_action = RETRY_ACTION_STOP_RETRYING;
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_026: [If no errors occur, the evaluation function shall return 0]
+            result = RESULT_OK;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_028: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_IMMEDIATE, retry_action shall be set to RETRY_ACTION_RETRY_NOW]
+        else if (retry_control->policy == IOTHUB_CLIENT_RETRY_IMMEDIATE)
+        {
+            *retry_action = RETRY_ACTION_RETRY_NOW;
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_026: [If no errors occur, the evaluation function shall return 0]
+            result = RESULT_OK;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_024: [Otherwise, if (`current_time` - `retry_control->last_retry_time`) is less than `retry_control->current_wait_time_in_secs`, `retry_action` shall be set to RETRY_ACTION_RETRY_LATER]
+        else if (get_difftime(current_time, retry_control->last_retry_time) < retry_control->current_wait_time_in_secs)
+        {
+            *retry_action = RETRY_ACTION_RETRY_LATER;
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_026: [If no errors occur, the evaluation function shall return 0]
+            result = RESULT_OK;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_025: [Otherwise, if (`current_time` - `retry_control->last_retry_time`) is greater or equal to `retry_control->current_wait_time_in_secs`, `retry_action` shall be set to RETRY_ACTION_RETRY_NOW]
+        else
+        {
+            *retry_action = RETRY_ACTION_RETRY_NOW;
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_026: [If no errors occur, the evaluation function shall return 0]
+            result = RESULT_OK;
+        }
+    }
+
+    return result;
+}
+
+static unsigned int calculate_next_wait_time(RETRY_CONTROL_INSTANCE* retry_control)
+{
+    unsigned int result;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_029: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_INTERVAL, `calculate_next_wait_time` shall return `retry_control->initial_wait_time_in_secs`]
+    if (retry_control->policy == IOTHUB_CLIENT_RETRY_INTERVAL)
+    {
+        result = retry_control->initial_wait_time_in_secs;
+    }
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_030: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_LINEAR_BACKOFF, `calculate_next_wait_time` shall return (`retry_control->initial_wait_time_in_secs` * (`retry_control->retry_count`))]
+    else if (retry_control->policy == IOTHUB_CLIENT_RETRY_LINEAR_BACKOFF)
+    {
+        result = retry_control->initial_wait_time_in_secs * (retry_control->retry_count);
+    }
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_031: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF, `calculate_next_wait_time` shall return (pow(2, `retry_control->retry_count` - 1) * `retry_control->initial_wait_time_in_secs`)]
+    else if (retry_control->policy == IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF)
+    {
+        result = (unsigned int)(pow(2, retry_control->retry_count - 1) * retry_control->initial_wait_time_in_secs);
+    }
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_032: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER, `calculate_next_wait_time` shall return ((pow(2, `retry_control->retry_count` - 1) * `retry_control->initial_wait_time_in_secs`) * (1 + (`retry_control->max_jitter_percent` / 100) * (rand() / RAND_MAX)))]
+    else if (retry_control->policy == IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER)
+    {
+        double jitter_percent = (retry_control->max_jitter_percent / 100.0) * (rand() / ((double)RAND_MAX));
+
+        result = (unsigned int)(pow(2, retry_control->retry_count - 1) * retry_control->initial_wait_time_in_secs * (1 + jitter_percent));
+    }
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_033: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_RANDOM, `calculate_next_wait_time` shall return (`retry_control->initial_wait_time_in_secs` * (rand() / RAND_MAX))]
+    else if (retry_control->policy == IOTHUB_CLIENT_RETRY_RANDOM)
+    {
+        double random_percent = ((double)rand() / (double)RAND_MAX);
+        result = (unsigned int)(retry_control->initial_wait_time_in_secs * random_percent);
+    }
+    else
+    {
+        LogError("Failed to calculate the next wait time (policy %d is not expected)", retry_control->policy);
+
+        result = 0;
+    }
+
+    return result;
+}
+
+
+// ========== Public API ========== //
+
+int is_timeout_reached(time_t start_time, unsigned int timeout_in_secs, bool* is_timed_out)
+{
+    int result;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_057: [If `start_time` is INDEFINITE_TIME, `is_timeout_reached` shall fail and return non-zero]
+    if (start_time == INDEFINITE_TIME)
+    {
+        LogError("Failed to verify timeout (start_time is INDEFINITE)");
+        result = MU_FAILURE;
+    }
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_058: [If `is_timed_out` is NULL, `is_timeout_reached` shall fail and return non-zero]
+    else if (is_timed_out == NULL)
+    {
+        LogError("Failed to verify timeout (is_timed_out is NULL)");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        time_t current_time;
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_059: [`is_timeout_reached` shall obtain the `current_time` using get_time()]
+        if ((current_time = get_time(NULL)) == INDEFINITE_TIME)
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_060: [If get_time() fails, `is_timeout_reached` shall fail and return non-zero]
+            LogError("Failed to verify timeout (get_time failed)");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_061: [If (`current_time` - `start_time`) is greater or equal to `timeout_in_secs`, `is_timed_out` shall be set to true]
+            if (get_difftime(current_time, start_time) >= timeout_in_secs)
+            {
+                *is_timed_out = true;
+            }
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_062: [If (`current_time` - `start_time`) is less than `timeout_in_secs`, `is_timed_out` shall be set to false]
+            else
+            {
+                *is_timed_out = false;
+            }
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_063: [If no errors occur, `is_timeout_reached` shall return 0]
+            result = RESULT_OK;
+        }
+    }
+
+    return result;
+}
+
+void retry_control_reset(RETRY_CONTROL_HANDLE retry_control_handle)
+{
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_034: [If `retry_control_handle` is NULL, `retry_control_reset` shall return]
+    if (retry_control_handle == NULL)
+    {
+        LogError("Failed to reset the retry control (retry_state_handle is NULL)");
+    }
+    else
+    {
+        RETRY_CONTROL_INSTANCE* retry_control = (RETRY_CONTROL_INSTANCE*)retry_control_handle;
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_035: [`retry_control` shall have fields `retry_count` and `current_wait_time_in_secs` set to 0 (zero), `first_retry_time` and `last_retry_time` set to INDEFINITE_TIME]
+        retry_control->retry_count = 0;
+        retry_control->current_wait_time_in_secs = 0;
+        retry_control->first_retry_time = INDEFINITE_TIME;
+        retry_control->last_retry_time = INDEFINITE_TIME;
+    }
+}
+
+RETRY_CONTROL_HANDLE retry_control_create(IOTHUB_CLIENT_RETRY_POLICY policy, unsigned int max_retry_time_in_secs)
+{
+    RETRY_CONTROL_INSTANCE* retry_control;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_002: [`retry_control_create` shall allocate memory for the retry control instance structure (a.k.a. `retry_control`)]
+    if ((retry_control = (RETRY_CONTROL_INSTANCE*)malloc(sizeof(RETRY_CONTROL_INSTANCE))) == NULL)
+    {
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_003: [If malloc fails, `retry_control_create` shall fail and return NULL]
+        LogError("Failed creating the retry control (malloc failed)");
+    }
+    else
+    {
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_004: [The parameters passed to `retry_control_create` shall be saved into `retry_control`]
+        memset(retry_control, 0, sizeof(RETRY_CONTROL_INSTANCE));
+        retry_control->policy = policy;
+        retry_control->max_retry_time_in_secs = max_retry_time_in_secs;
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_005: [If `policy` is IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF or IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER, `retry_control->initial_wait_time_in_secs` shall be set to 1]
+        if (retry_control->policy == IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF ||
+            retry_control->policy == IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER)
+        {
+            retry_control->initial_wait_time_in_secs = 1;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_006: [Otherwise `retry_control->initial_wait_time_in_secs` shall be set to 5]
+        else
+        {
+            retry_control->initial_wait_time_in_secs = 5;
+        }
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_007: [`retry_control->max_jitter_percent` shall be set to 5]
+        retry_control->max_jitter_percent = 5;
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_008: [The remaining fields in `retry_control` shall be initialized according to retry_control_reset()]
+        retry_control_reset(retry_control);
+    }
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_009: [If no errors occur, `retry_control_create` shall return a handle to `retry_control`]
+    return (RETRY_CONTROL_HANDLE)retry_control;
+}
+
+void retry_control_destroy(RETRY_CONTROL_HANDLE retry_control_handle)
+{
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_055: [If `retry_control_handle` is NULL, `retry_control_destroy` shall return]
+    if (retry_control_handle == NULL)
+    {
+        LogError("Failed to destroy the retry control (retry_control_handle is NULL)");
+    }
+    else
+    {
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_056: [`retry_control_destroy` shall destroy `retry_control_handle` using free()]
+        free(retry_control_handle);
+    }
+}
+
+int retry_control_should_retry(RETRY_CONTROL_HANDLE retry_control_handle, RETRY_ACTION* retry_action)
+{
+    int result;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_010: [If `retry_control_handle` or `retry_action` are NULL, `retry_control_should_retry` shall fail and return non-zero]
+    if ((retry_control_handle == NULL) || (retry_action == NULL))
+    {
+        LogError("Failed to evaluate if retry should be attempted (either retry_control_handle (%p) or retry_action (%p) are NULL)", retry_control_handle, retry_action);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        RETRY_CONTROL_INSTANCE* retry_control = (RETRY_CONTROL_INSTANCE*)retry_control_handle;
+
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_027: [If `retry_control->policy` is IOTHUB_CLIENT_RETRY_NONE, retry_action shall be set to RETRY_ACTION_STOP_RETRYING and return immediatelly with result 0]
+        if (retry_control->policy == IOTHUB_CLIENT_RETRY_NONE)
+        {
+            *retry_action = RETRY_ACTION_STOP_RETRYING;
+            result = RESULT_OK;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_011: [If `retry_control->first_retry_time` is INDEFINITE_TIME, it shall be set using get_time()]
+        else if (retry_control->first_retry_time == INDEFINITE_TIME && (retry_control->first_retry_time = get_time(NULL)) == INDEFINITE_TIME)
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_012: [If get_time() fails, `retry_control_should_retry` shall fail and return non-zero]
+            LogError("Failed to evaluate if retry should be attempted (get_time() failed)");
+            result = MU_FAILURE;
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_013: [evaluate_retry_action() shall be invoked]
+        else if (evaluate_retry_action(retry_control, retry_action) != RESULT_OK)
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_014: [If evaluate_retry_action() fails, `retry_control_should_retry` shall fail and return non-zero]
+            LogError("Failed to evaluate if retry should be attempted (evaluate_retry_action() failed)");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (*retry_action == RETRY_ACTION_RETRY_NOW)
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_015: [If `retry_action` is set to RETRY_ACTION_RETRY_NOW, `retry_control->retry_count` shall be incremented by 1]
+                retry_control->retry_count++;
+
+                if (retry_control->policy != IOTHUB_CLIENT_RETRY_IMMEDIATE)
+                {
+                    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_016: [If `retry_action` is set to RETRY_ACTION_RETRY_NOW and policy is not IOTHUB_CLIENT_RETRY_IMMEDIATE, `retry_control->last_retry_time` shall be set using get_time()]
+                    retry_control->last_retry_time = get_time(NULL);
+
+                    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_017: [If `retry_action` is set to RETRY_ACTION_RETRY_NOW and policy is not IOTHUB_CLIENT_RETRY_IMMEDIATE, `retry_control->current_wait_time_in_secs` shall be set using calculate_next_wait_time()]
+                    retry_control->current_wait_time_in_secs = calculate_next_wait_time(retry_control);
+                }
+            }
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_018: [If no errors occur, `retry_control_should_retry` shall return 0]
+            result = RESULT_OK;
+        }
+    }
+
+    return result;
+}
+
+int retry_control_set_option(RETRY_CONTROL_HANDLE retry_control_handle, const char* name, const void* value)
+{
+    int result;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_036: [If `retry_control_handle`, `name` or `value` are NULL, `retry_control_set_option` shall fail and return non-zero]
+    if (retry_control_handle == NULL || name == NULL || value == NULL)
+    {
+        LogError("Failed to set option (either retry_state_handle (%p), name (%p) or value (%p) are NULL)", retry_control_handle, name, value);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        RETRY_CONTROL_INSTANCE* retry_control = (RETRY_CONTROL_INSTANCE*)retry_control_handle;
+
+        if (strcmp(RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS, name) == 0)
+        {
+            unsigned int cast_value = *((unsigned int*)value);
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_037: [If `name` is "initial_wait_time_in_secs" and `value` is less than 1, `retry_control_set_option` shall fail and return non-zero]
+            if (cast_value < 1)
+            {
+                LogError("Failed to set option '%s' (value must be equal or greater to 1)", name);
+                result = MU_FAILURE;
+            }
+            else
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_038: [If `name` is "initial_wait_time_in_secs", `value` shall be saved on `retry_control->initial_wait_time_in_secs`]
+                retry_control->initial_wait_time_in_secs = cast_value;
+
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_044: [If no errors occur, retry_control_set_option shall return 0]
+                result = RESULT_OK;
+            }
+        }
+        else if (strcmp(RETRY_CONTROL_OPTION_MAX_JITTER_PERCENT, name) == 0)
+        {
+            unsigned int cast_value = *((unsigned int*)value);
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_039: [If `name` is "max_jitter_percent" and `value` is less than 0 or greater than 100, `retry_control_set_option` shall fail and return non-zero]
+            if (cast_value > 100) // it's unsigned int, it doesn't need to be checked for less than zero.
+            {
+                LogError("Failed to set option '%s' (value must be in the range 0 to 100)", name);
+                result = MU_FAILURE;
+            }
+            else
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_040: [If `name` is "max_jitter_percent", value shall be saved on `retry_control->max_jitter_percent`]
+                retry_control->max_jitter_percent = cast_value;
+
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_044: [If no errors occur, retry_control_set_option shall return 0]
+                result = RESULT_OK;
+            }
+        }
+        else if (strcmp(RETRY_CONTROL_OPTION_SAVED_OPTIONS, name) == 0)
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_041: [If `name` is "retry_control_options", value shall be fed to `retry_control` using OptionHandler_FeedOptions]
+            if (OptionHandler_FeedOptions((OPTIONHANDLER_HANDLE)value, retry_control_handle) != OPTIONHANDLER_OK)
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_042: [If OptionHandler_FeedOptions fails, `retry_control_set_option` shall fail and return non-zero]
+                LogError("messenger_set_option failed (OptionHandler_FeedOptions failed)");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_044: [If no errors occur, `retry_control_set_option` shall return 0]
+                result = RESULT_OK;
+            }
+        }
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_043: [If `name` is not a supported option, `retry_control_set_option` shall fail and return non-zero]
+        else
+        {
+            LogError("messenger_set_option failed (option with name '%s' is not suppported)", name);
+            result = MU_FAILURE;
+        }
+    }
+
+    return result;
+}
+
+OPTIONHANDLER_HANDLE retry_control_retrieve_options(RETRY_CONTROL_HANDLE retry_control_handle)
+{
+    OPTIONHANDLER_HANDLE result;
+
+    // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_045: [If `retry_control_handle`, `retry_control_retrieve_options` shall fail and return NULL]
+    if (retry_control_handle == NULL)
+    {
+        LogError("Failed to retrieve options (retry_state_handle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_046: [An instance of OPTIONHANDLER_HANDLE (a.k.a. `options`) shall be created using OptionHandler_Create]
+        OPTIONHANDLER_HANDLE options = OptionHandler_Create(retry_control_clone_option, retry_control_destroy_option, (pfSetOption)retry_control_set_option);
+
+        if (options == NULL)
+        {
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_047: [If OptionHandler_Create fails, `retry_control_retrieve_options` shall fail and return NULL]
+            LogError("Failed to retrieve options (OptionHandler_Create failed)");
+            result = NULL;
+        }
+        else
+        {
+            RETRY_CONTROL_INSTANCE* retry_control = (RETRY_CONTROL_INSTANCE*)retry_control_handle;
+
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_050: [`retry_control->initial_wait_time_in_secs` shall be added to `options` using OptionHandler_Add]
+            if (OptionHandler_AddOption(options, RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS, (void*)&retry_control->initial_wait_time_in_secs) != OPTIONHANDLER_OK)
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_052: [If any call to OptionHandler_Add fails, `retry_control_retrieve_options` shall fail and return NULL]
+                LogError("Failed to retrieve options (OptionHandler_Create failed for option '%s')", RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS);
+                result = NULL;
+            }
+            // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_051: [`retry_control->max_jitter_percent` shall be added to `options` using OptionHandler_Add]
+            else if (OptionHandler_AddOption(options, RETRY_CONTROL_OPTION_MAX_JITTER_PERCENT, (void*)&retry_control->max_jitter_percent) != OPTIONHANDLER_OK)
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_052: [If any call to OptionHandler_Add fails, `retry_control_retrieve_options` shall fail and return NULL]
+                LogError("Failed to retrieve options (OptionHandler_Create failed for option '%s')", RETRY_CONTROL_OPTION_INITIAL_WAIT_TIME_IN_SECS);
+                result = NULL;
+            }
+            else
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_054: [If no errors occur, `retry_control_retrieve_options` shall return the OPTIONHANDLER_HANDLE instance]
+                result = options;
+            }
+
+            if (result == NULL)
+            {
+                // Codes_SRS_IOTHUB_CLIENT_RETRY_CONTROL_09_053: [If any failures occur, `retry_control_retrieve_options` shall release any memory it has allocated]
+                OptionHandler_Destroy(options);
+            }
+        }
+    }
+
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_message.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_message.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_message.c	(revision 389)
@@ -0,0 +1,1027 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/buffer_.h"
+
+#include "iothub_message.h"
+
+MU_DEFINE_ENUM_STRINGS(IOTHUB_MESSAGE_RESULT, IOTHUB_MESSAGE_RESULT_VALUES);
+MU_DEFINE_ENUM_STRINGS(IOTHUBMESSAGE_CONTENT_TYPE, IOTHUBMESSAGE_CONTENT_TYPE_VALUES);
+
+#define LOG_IOTHUB_MESSAGE_ERROR() \
+    LogError("(result = %s)", MU_ENUM_TO_STRING(IOTHUB_MESSAGE_RESULT, result));
+
+typedef struct IOTHUB_MESSAGE_HANDLE_DATA_TAG
+{
+    IOTHUBMESSAGE_CONTENT_TYPE contentType;
+    union
+    {
+        BUFFER_HANDLE byteArray;
+        STRING_HANDLE string;
+    } value;
+    MAP_HANDLE properties;
+    char* messageId;
+    char* correlationId;
+    char* userDefinedContentType;
+    char* contentEncoding;
+    char* outputName;
+    char* inputName;
+    char* connectionModuleId;
+    char* connectionDeviceId;
+    IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE diagnosticData;
+}IOTHUB_MESSAGE_HANDLE_DATA;
+
+static bool ContainsOnlyUsAscii(const char* asciiValue)
+{
+    bool result = true;
+    const char* iterator = asciiValue;
+    while (iterator != NULL && *iterator != '\0')
+    {
+        // Allow only printable ascii char
+        if (*iterator < ' ' || *iterator > '~')
+        {
+            result = false;
+            break;
+        }
+        iterator++;
+    }
+    return result;
+}
+
+/* Codes_SRS_IOTHUBMESSAGE_07_008: [ValidateAsciiCharactersFilter shall loop through the mapKey and mapValue strings to ensure that they only contain valid US-Ascii characters Ascii value 32 - 126.] */
+static int ValidateAsciiCharactersFilter(const char* mapKey, const char* mapValue)
+{
+    int result;
+    if (!ContainsOnlyUsAscii(mapKey) || !ContainsOnlyUsAscii(mapValue))
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+static void DestroyDiagnosticPropertyData(IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE diagnosticHandle)
+{
+    if (diagnosticHandle != NULL)
+    {
+        free(diagnosticHandle->diagnosticId);
+        free(diagnosticHandle->diagnosticCreationTimeUtc);
+    }
+    free(diagnosticHandle);
+}
+
+static void DestroyMessageData(IOTHUB_MESSAGE_HANDLE_DATA* handleData)
+{
+    if (handleData->contentType == IOTHUBMESSAGE_BYTEARRAY)
+    {
+        BUFFER_delete(handleData->value.byteArray);
+    }
+    else if (handleData->contentType == IOTHUBMESSAGE_STRING)
+    {
+        STRING_delete(handleData->value.string);
+    }
+
+    Map_Destroy(handleData->properties);
+    free(handleData->messageId);
+    handleData->messageId = NULL;
+    free(handleData->correlationId);
+    handleData->correlationId = NULL;
+    free(handleData->userDefinedContentType);
+    free(handleData->contentEncoding);
+    DestroyDiagnosticPropertyData(handleData->diagnosticData);
+    free(handleData->outputName);
+    free(handleData->inputName);
+    free(handleData->connectionModuleId);
+    free(handleData->connectionDeviceId);
+    free(handleData);
+}
+
+static IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE CloneDiagnosticPropertyData(const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* source)
+{
+    IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE result = NULL;
+    if (source == NULL)
+    {
+        LogError("Invalid argument - source is NULL");
+    }
+    else
+    {
+        result = (IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA_HANDLE)malloc(sizeof(IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA));
+        if (result == NULL)
+        {
+            LogError("malloc failed");
+        }
+        else
+        {
+            result->diagnosticCreationTimeUtc = NULL;
+            result->diagnosticId = NULL;
+            if (source->diagnosticCreationTimeUtc != NULL && mallocAndStrcpy_s(&result->diagnosticCreationTimeUtc, source->diagnosticCreationTimeUtc) != 0)
+            {
+                LogError("mallocAndStrcpy_s for diagnosticCreationTimeUtc failed");
+                free(result);
+                result = NULL;
+            }
+            else if (source->diagnosticId != NULL && mallocAndStrcpy_s(&result->diagnosticId, source->diagnosticId) != 0)
+            {
+                LogError("mallocAndStrcpy_s for diagnosticId failed");
+                free(result->diagnosticCreationTimeUtc);
+                free(result);
+                result = NULL;
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_HANDLE IoTHubMessage_CreateFromByteArray(const unsigned char* byteArray, size_t size)
+{
+    IOTHUB_MESSAGE_HANDLE_DATA* result;
+    if ((byteArray == NULL) && (size != 0))
+    {
+        LogError("Invalid argument - byteArray is NULL");
+        result = NULL;
+    }
+    else
+    {
+        result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
+        if (result == NULL)
+        {
+            LogError("unable to malloc");
+            /*Codes_SRS_IOTHUBMESSAGE_02_024: [If there are any errors then IoTHubMessage_CreateFromByteArray shall return NULL.] */
+            /*let it go through*/
+        }
+        else
+        {
+            const unsigned char* source;
+            unsigned char temp = 0x00;
+
+            memset(result, 0, sizeof(*result));
+            /*Codes_SRS_IOTHUBMESSAGE_02_026: [The type of the new message shall be IOTHUBMESSAGE_BYTEARRAY.] */
+            result->contentType = IOTHUBMESSAGE_BYTEARRAY;
+
+            if (size != 0)
+            {
+                /*Codes_SRS_IOTHUBMESSAGE_06_002: [If size is NOT zero then byteArray MUST NOT be NULL*/
+                if (byteArray == NULL)
+                {
+                    LogError("Attempted to create a Hub Message from a NULL pointer!");
+                    DestroyMessageData(result);
+                    result = NULL;
+                    source = NULL;
+                }
+                else
+                {
+                    source = byteArray;
+                }
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBMESSAGE_06_001: [If size is zero then byteArray may be NULL.]*/
+                source = &temp;
+            }
+            if (result != NULL)
+            {
+                /*Codes_SRS_IOTHUBMESSAGE_02_022: [IoTHubMessage_CreateFromByteArray shall call BUFFER_create passing byteArray and size as parameters.] */
+                if ((result->value.byteArray = BUFFER_create(source, size)) == NULL)
+                {
+                    LogError("BUFFER_create failed");
+                    /*Codes_SRS_IOTHUBMESSAGE_02_024: [If there are any errors then IoTHubMessage_CreateFromByteArray shall return NULL.] */
+                    DestroyMessageData(result);
+                    result = NULL;
+                }
+                /*Codes_SRS_IOTHUBMESSAGE_02_023: [IoTHubMessage_CreateFromByteArray shall call Map_Create to create the message properties.] */
+                else if ((result->properties = Map_Create(ValidateAsciiCharactersFilter)) == NULL)
+                {
+                    LogError("Map_Create for properties failed");
+                    /*Codes_SRS_IOTHUBMESSAGE_02_024: [If there are any errors then IoTHubMessage_CreateFromByteArray shall return NULL.] */
+                    DestroyMessageData(result);
+                    result = NULL;
+                }
+                /*Codes_SRS_IOTHUBMESSAGE_02_025: [Otherwise, IoTHubMessage_CreateFromByteArray shall return a non-NULL handle.] */
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_HANDLE IoTHubMessage_CreateFromString(const char* source)
+{
+    IOTHUB_MESSAGE_HANDLE_DATA* result;
+    if (source == NULL)
+    {
+        LogError("Invalid argument - source is NULL");
+        result = NULL;
+    }
+    else
+    {
+        result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
+        if (result == NULL)
+        {
+            LogError("malloc failed");
+            /*Codes_SRS_IOTHUBMESSAGE_02_029: [If there are any encountered in the execution of IoTHubMessage_CreateFromString then IoTHubMessage_CreateFromString shall return NULL.] */
+            /*let it go through*/
+        }
+        else
+        {
+            memset(result, 0, sizeof(*result));
+            /*Codes_SRS_IOTHUBMESSAGE_02_032: [The type of the new message shall be IOTHUBMESSAGE_STRING.] */
+            result->contentType = IOTHUBMESSAGE_STRING;
+
+            /*Codes_SRS_IOTHUBMESSAGE_02_027: [IoTHubMessage_CreateFromString shall call STRING_construct passing source as parameter.] */
+            if ((result->value.string = STRING_construct(source)) == NULL)
+            {
+                LogError("STRING_construct failed");
+                /*Codes_SRS_IOTHUBMESSAGE_02_029: [If there are any encountered in the execution of IoTHubMessage_CreateFromString then IoTHubMessage_CreateFromString shall return NULL.] */
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            /*Codes_SRS_IOTHUBMESSAGE_02_028: [IoTHubMessage_CreateFromString shall call Map_Create to create the message properties.] */
+            else if ((result->properties = Map_Create(ValidateAsciiCharactersFilter)) == NULL)
+            {
+                LogError("Map_Create for properties failed");
+                /*Codes_SRS_IOTHUBMESSAGE_02_029: [If there are any encountered in the execution of IoTHubMessage_CreateFromString then IoTHubMessage_CreateFromString shall return NULL.] */
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            /*Codes_SRS_IOTHUBMESSAGE_02_031: [Otherwise, IoTHubMessage_CreateFromString shall return a non-NULL handle.] */
+        }
+    }
+    return result;
+}
+
+/*Codes_SRS_IOTHUBMESSAGE_03_001: [IoTHubMessage_Clone shall create a new IoT hub message with data content identical to that of the iotHubMessageHandle parameter.]*/
+IOTHUB_MESSAGE_HANDLE IoTHubMessage_Clone(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    IOTHUB_MESSAGE_HANDLE_DATA* result;
+    const IOTHUB_MESSAGE_HANDLE_DATA* source = (const IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+    /* Codes_SRS_IOTHUBMESSAGE_03_005: [IoTHubMessage_Clone shall return NULL if iotHubMessageHandle is NULL.] */
+    if (source == NULL)
+    {
+        result = NULL;
+        LogError("iotHubMessageHandle parameter cannot be NULL for IoTHubMessage_Clone");
+    }
+    else
+    {
+        result = (IOTHUB_MESSAGE_HANDLE_DATA*)malloc(sizeof(IOTHUB_MESSAGE_HANDLE_DATA));
+        /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
+        if (result == NULL)
+        {
+            /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
+            /*do nothing and return as is*/
+            LogError("unable to malloc");
+        }
+        else
+        {
+            memset(result, 0, sizeof(*result));
+            result->contentType = source->contentType;
+
+            if (source->messageId != NULL && mallocAndStrcpy_s(&result->messageId, source->messageId) != 0)
+            {
+                LogError("unable to Copy messageId");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->correlationId != NULL && mallocAndStrcpy_s(&result->correlationId, source->correlationId) != 0)
+            {
+                LogError("unable to Copy correlationId");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->userDefinedContentType != NULL && mallocAndStrcpy_s(&result->userDefinedContentType, source->userDefinedContentType) != 0)
+            {
+                LogError("unable to copy contentType");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->contentEncoding != NULL && mallocAndStrcpy_s(&result->contentEncoding, source->contentEncoding) != 0)
+            {
+                LogError("unable to copy contentEncoding");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->diagnosticData != NULL && (result->diagnosticData = CloneDiagnosticPropertyData(source->diagnosticData)) == NULL)
+            {
+                LogError("unable to copy CloneDiagnosticPropertyData");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->outputName != NULL && mallocAndStrcpy_s(&result->outputName, source->outputName) != 0)
+            {
+                LogError("unable to copy outputName");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->inputName != NULL && mallocAndStrcpy_s(&result->inputName, source->inputName) != 0)
+            {
+                LogError("unable to copy inputName");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->connectionModuleId != NULL && mallocAndStrcpy_s(&result->connectionModuleId, source->connectionModuleId) != 0)
+            {
+                LogError("unable to copy inputName");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->connectionDeviceId != NULL && mallocAndStrcpy_s(&result->connectionDeviceId, source->connectionDeviceId) != 0)
+            {
+                LogError("unable to copy inputName");
+                DestroyMessageData(result);
+                result = NULL;
+            }
+            else if (source->contentType == IOTHUBMESSAGE_BYTEARRAY)
+            {
+                /*Codes_SRS_IOTHUBMESSAGE_02_006: [IoTHubMessage_Clone shall clone to content by a call to BUFFER_clone] */
+                if ((result->value.byteArray = BUFFER_clone(source->value.byteArray)) == NULL)
+                {
+                    /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
+                    LogError("unable to BUFFER_clone");
+                    DestroyMessageData(result);
+                    result = NULL;
+                }
+                /*Codes_SRS_IOTHUBMESSAGE_02_005: [IoTHubMessage_Clone shall clone the properties map by using Map_Clone.] */
+                else if ((result->properties = Map_Clone(source->properties)) == NULL)
+                {
+                    /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
+                    LogError("unable to Map_Clone");
+                    DestroyMessageData(result);
+                    result = NULL;
+                }
+                /*Codes_SRS_IOTHUBMESSAGE_03_002: [IoTHubMessage_Clone shall return upon success a non-NULL handle to the newly created IoT hub message.]*/
+            }
+            else /*can only be STRING*/
+            {
+                /*Codes_SRS_IOTHUBMESSAGE_02_006: [IoTHubMessage_Clone shall clone the content by a call to BUFFER_clone or STRING_clone] */
+                if ((result->value.string = STRING_clone(source->value.string)) == NULL)
+                {
+                    /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
+                    LogError("failed to STRING_clone");
+                    DestroyMessageData(result);
+                    result = NULL;
+                }
+                /*Codes_SRS_IOTHUBMESSAGE_02_005: [IoTHubMessage_Clone shall clone the properties map by using Map_Clone.] */
+                else if ((result->properties = Map_Clone(source->properties)) == NULL)
+                {
+                    /*Codes_SRS_IOTHUBMESSAGE_03_004: [IoTHubMessage_Clone shall return NULL if it fails for any reason.]*/
+                    LogError("unable to Map_Clone");
+                    DestroyMessageData(result);
+                    result = NULL;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_GetByteArray(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const unsigned char** buffer, size_t* size)
+{
+    IOTHUB_MESSAGE_RESULT result;
+    if (
+        (iotHubMessageHandle == NULL) ||
+        (buffer == NULL) ||
+        (size == NULL)
+        )
+    {
+        /*Codes_SRS_IOTHUBMESSAGE_01_014: [If any of the arguments passed to IoTHubMessage_GetByteArray  is NULL IoTHubMessage_GetByteArray shall return IOTHUBMESSAGE_INVALID_ARG.] */
+        LogError("invalid parameter (NULL) to IoTHubMessage_GetByteArray IOTHUB_MESSAGE_HANDLE iotHubMessageHandle=%p, const unsigned char** buffer=%p, size_t* size=%p", iotHubMessageHandle, buffer, size);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        if (handleData->contentType != IOTHUBMESSAGE_BYTEARRAY)
+        {
+            /*Codes_SRS_IOTHUBMESSAGE_02_021: [If iotHubMessageHandle is not a iothubmessage containing BYTEARRAY data, then IoTHubMessage_GetData shall write in *buffer NULL and shall set *size to 0.] */
+            result = IOTHUB_MESSAGE_INVALID_ARG;
+            LogError("invalid type of message %s", MU_ENUM_TO_STRING(IOTHUBMESSAGE_CONTENT_TYPE, handleData->contentType));
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUBMESSAGE_01_011: [The pointer shall be obtained by using BUFFER_u_char and it shall be copied in the buffer argument.]*/
+            *buffer = BUFFER_u_char(handleData->value.byteArray);
+            /*Codes_SRS_IOTHUBMESSAGE_01_012: [The size of the associated data shall be obtained by using BUFFER_length and it shall be copied to the size argument.]*/
+            *size = BUFFER_length(handleData->value.byteArray);
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+    return result;
+}
+
+const char* IoTHubMessage_GetString(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    if (iotHubMessageHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBMESSAGE_02_016: [If any parameter is NULL then IoTHubMessage_GetString  shall return NULL.] */
+        result = NULL;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        if (handleData->contentType != IOTHUBMESSAGE_STRING)
+        {
+            /*Codes_SRS_IOTHUBMESSAGE_02_017: [IoTHubMessage_GetString shall return NULL if the iotHubMessageHandle does not refer to a IOTHUBMESSAGE of type STRING.] */
+            result = NULL;
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUBMESSAGE_02_018: [IoTHubMessage_GetStringData shall return the currently stored null terminated string.] */
+            result = STRING_c_str(handleData->value.string);
+        }
+    }
+    return result;
+}
+
+IOTHUBMESSAGE_CONTENT_TYPE IoTHubMessage_GetContentType(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    IOTHUBMESSAGE_CONTENT_TYPE result;
+    /*Codes_SRS_IOTHUBMESSAGE_02_008: [If any parameter is NULL then IoTHubMessage_GetContentType shall return IOTHUBMESSAGE_UNKNOWN.] */
+    if (iotHubMessageHandle == NULL)
+    {
+        result = IOTHUBMESSAGE_UNKNOWN;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBMESSAGE_02_009: [Otherwise IoTHubMessage_GetContentType shall return the type of the message.] */
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        result = handleData->contentType;
+    }
+    return result;
+}
+
+MAP_HANDLE IoTHubMessage_Properties(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    MAP_HANDLE result;
+    /*Codes_SRS_IOTHUBMESSAGE_02_001: [If iotHubMessageHandle is NULL then IoTHubMessage_Properties shall return NULL.]*/
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("invalid arg (NULL) passed to IoTHubMessage_Properties");
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBMESSAGE_02_002: [Otherwise, for any non-NULL iotHubMessageHandle it shall return a non-NULL MAP_HANDLE.]*/
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+        result = handleData->properties;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetProperty(IOTHUB_MESSAGE_HANDLE msg_handle, const char* key, const char* value)
+{
+    IOTHUB_MESSAGE_RESULT result;
+    if (msg_handle == NULL || key == NULL || value == NULL)
+    {
+        LogError("invalid parameter (NULL) to IoTHubMessage_SetProperty iotHubMessageHandle=%p, key=%p, value=%p", msg_handle, key, value);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        if (Map_AddOrUpdate(msg_handle->properties, key, value) != MAP_OK)
+        {
+            LogError("Failure adding property to internal map");
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+    return result;
+}
+
+const char* IoTHubMessage_GetProperty(IOTHUB_MESSAGE_HANDLE msg_handle, const char* key)
+{
+    const char* result;
+    if (msg_handle == NULL || key == NULL)
+    {
+        LogError("invalid parameter (NULL) to IoTHubMessage_GetProperty iotHubMessageHandle=%p, key=%p", msg_handle, key);
+        result = NULL;
+    }
+    else
+    {
+        bool key_exists = false;
+        // The return value is not neccessary, just check the key_exist variable
+        if ((Map_ContainsKey(msg_handle->properties, key, &key_exists) == MAP_OK) && key_exists)
+        {
+            result = Map_GetValueFromKey(msg_handle->properties, key);
+        }
+        else
+        {
+            result = NULL;
+        }
+    }
+    return result;
+}
+
+const char* IoTHubMessage_GetCorrelationId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    /* Codes_SRS_IOTHUBMESSAGE_07_016: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetCorrelationId shall return a NULL value.] */
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("invalid arg (NULL) passed to IoTHubMessage_GetCorrelationId");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUBMESSAGE_07_017: [IoTHubMessage_GetCorrelationId shall return the correlationId as a const char*.] */
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        result = handleData->correlationId;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetCorrelationId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* correlationId)
+{
+    IOTHUB_MESSAGE_RESULT result;
+    /* Codes_SRS_IOTHUBMESSAGE_07_018: [if any of the parameters are NULL then IoTHubMessage_SetCorrelationId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]*/
+    if (iotHubMessageHandle == NULL || correlationId == NULL)
+    {
+        LogError("invalid arg (NULL) passed to IoTHubMessage_SetCorrelationId");
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        /* Codes_SRS_IOTHUBMESSAGE_07_019: [If the IOTHUB_MESSAGE_HANDLE correlationId is not NULL, then the IOTHUB_MESSAGE_HANDLE correlationId will be deallocated.] */
+        if (handleData->correlationId != NULL)
+        {
+            free(handleData->correlationId);
+            handleData->correlationId = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->correlationId, correlationId) != 0)
+        {
+            /* Codes_SRS_IOTHUBMESSAGE_07_020: [If the allocation or the copying of the correlationId fails, then IoTHubMessage_SetCorrelationId shall return IOTHUB_MESSAGE_ERROR.] */
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUBMESSAGE_07_021: [IoTHubMessage_SetCorrelationId finishes successfully it shall return IOTHUB_MESSAGE_OK.] */
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetMessageId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* messageId)
+{
+    IOTHUB_MESSAGE_RESULT result;
+    /* Codes_SRS_IOTHUBMESSAGE_07_012: [if any of the parameters are NULL then IoTHubMessage_SetMessageId shall return a IOTHUB_MESSAGE_INVALID_ARG value.] */
+    if (iotHubMessageHandle == NULL || messageId == NULL)
+    {
+        LogError("invalid arg (NULL) passed to IoTHubMessage_SetMessageId");
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        /* Codes_SRS_IOTHUBMESSAGE_07_013: [If the IOTHUB_MESSAGE_HANDLE messageId is not NULL, then the IOTHUB_MESSAGE_HANDLE messageId will be freed] */
+        if (handleData->messageId != NULL)
+        {
+            free(handleData->messageId);
+            handleData->messageId = NULL;
+        }
+
+        /* Codes_SRS_IOTHUBMESSAGE_07_014: [If the allocation or the copying of the messageId fails, then IoTHubMessage_SetMessageId shall return IOTHUB_MESSAGE_ERROR.] */
+        if (mallocAndStrcpy_s(&handleData->messageId, messageId) != 0)
+        {
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+    return result;
+}
+
+const char* IoTHubMessage_GetMessageId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    /* Codes_SRS_IOTHUBMESSAGE_07_010: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_MessageId shall return a NULL value.] */
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("invalid arg (NULL) passed to IoTHubMessage_GetMessageId");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUBMESSAGE_07_011: [IoTHubMessage_MessageId shall return the messageId as a const char*.] */
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+        result = handleData->messageId;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetContentTypeSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* contentType)
+{
+    IOTHUB_MESSAGE_RESULT result;
+
+    // Codes_SRS_IOTHUBMESSAGE_09_001: [If any of the parameters are NULL then IoTHubMessage_SetContentTypeSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if (iotHubMessageHandle == NULL || contentType == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, contentType=%p)", iotHubMessageHandle, contentType);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_09_002: [If the IOTHUB_MESSAGE_HANDLE `contentType` is not NULL it shall be deallocated.]
+        if (handleData->userDefinedContentType != NULL)
+        {
+            free(handleData->userDefinedContentType);
+            handleData->userDefinedContentType = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->userDefinedContentType, contentType) != 0)
+        {
+            LogError("Failed saving a copy of contentType");
+            // Codes_SRS_IOTHUBMESSAGE_09_003: [If the allocation or the copying of `contentType` fails, then IoTHubMessage_SetContentTypeSystemProperty shall return IOTHUB_MESSAGE_ERROR.]
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_09_004: [If IoTHubMessage_SetContentTypeSystemProperty finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+
+    return result;
+}
+
+const char* IoTHubMessage_GetContentTypeSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+
+    // Codes_SRS_IOTHUBMESSAGE_09_005: [If any of the parameters are NULL then IoTHubMessage_GetContentTypeSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_09_006: [IoTHubMessage_GetContentTypeSystemProperty shall return the `contentType` as a const char* ]
+        result = (const char*)handleData->userDefinedContentType;
+    }
+
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetContentEncodingSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* contentEncoding)
+{
+    IOTHUB_MESSAGE_RESULT result;
+
+    // Codes_SRS_IOTHUBMESSAGE_09_006: [If any of the parameters are NULL then IoTHubMessage_SetContentEncodingSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if (iotHubMessageHandle == NULL || contentEncoding == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, contentEncoding=%p)", iotHubMessageHandle, contentEncoding);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_09_007: [If the IOTHUB_MESSAGE_HANDLE `contentEncoding` is not NULL it shall be deallocated.]
+        if (handleData->contentEncoding != NULL)
+        {
+            free(handleData->contentEncoding);
+            handleData->contentEncoding = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->contentEncoding, contentEncoding) != 0)
+        {
+            LogError("Failed saving a copy of contentEncoding");
+            // Codes_SRS_IOTHUBMESSAGE_09_008: [If the allocation or the copying of `contentEncoding` fails, then IoTHubMessage_SetContentEncodingSystemProperty shall return IOTHUB_MESSAGE_ERROR.]
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_09_009: [If IoTHubMessage_SetContentEncodingSystemProperty finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+
+    return result;
+}
+
+const char* IoTHubMessage_GetContentEncodingSystemProperty(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+
+    // Codes_SRS_IOTHUBMESSAGE_09_010: [If any of the parameters are NULL then IoTHubMessage_GetContentEncodingSystemProperty shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_09_011: [IoTHubMessage_GetContentEncodingSystemProperty shall return the `contentEncoding` as a const char* ]
+        result = (const char*)handleData->contentEncoding;
+    }
+
+    return result;
+}
+
+const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* IoTHubMessage_GetDiagnosticPropertyData(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* result;
+    // Codes_SRS_IOTHUBMESSAGE_10_001: [If any of the parameters are NULL then IoTHubMessage_GetDiagnosticPropertyData shall return a NULL value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUBMESSAGE_10_002: [IoTHubMessage_GetDiagnosticPropertyData shall return the diagnosticData as a const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA*.] */
+        result = iotHubMessageHandle->diagnosticData;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetDiagnosticPropertyData(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* diagnosticData)
+{
+    IOTHUB_MESSAGE_RESULT result;
+    // Codes_SRS_IOTHUBMESSAGE_10_003: [If any of the parameters are NULL then IoTHubMessage_SetDiagnosticId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if (iotHubMessageHandle == NULL ||
+        diagnosticData == NULL ||
+        diagnosticData->diagnosticCreationTimeUtc == NULL ||
+        diagnosticData->diagnosticId == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, diagnosticData=%p, diagnosticData->diagnosticId=%p, diagnosticData->diagnosticCreationTimeUtc=%p)",
+            iotHubMessageHandle, diagnosticData,
+            diagnosticData == NULL ? NULL : diagnosticData->diagnosticId,
+            diagnosticData == NULL ? NULL : diagnosticData->diagnosticCreationTimeUtc);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUBMESSAGE_10_004: [If the IOTHUB_MESSAGE_HANDLE `diagnosticData` is not NULL it shall be deallocated.]
+        if (iotHubMessageHandle->diagnosticData != NULL)
+        {
+            DestroyDiagnosticPropertyData(iotHubMessageHandle->diagnosticData);
+            iotHubMessageHandle->diagnosticData = NULL;
+        }
+
+        // Codes_SRS_IOTHUBMESSAGE_10_005: [If the allocation or the copying of `diagnosticData` fails, then IoTHubMessage_SetDiagnosticPropertyData shall return IOTHUB_MESSAGE_ERROR.]
+        if ((iotHubMessageHandle->diagnosticData = CloneDiagnosticPropertyData(diagnosticData)) == NULL)
+        {
+            LogError("Failed saving a copy of diagnosticData");
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_10_006: [If IoTHubMessage_SetDiagnosticPropertyData finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+    }
+    return result;
+}
+
+
+const char* IoTHubMessage_GetOutputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    // Codes_SRS_IOTHUBMESSAGE_31_034: [If the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetOutputName shall return a NULL value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUBMESSAGE_31_035: [IoTHubMessage_GetOutputName shall return the OutputName as a const char*.]
+        result = iotHubMessageHandle->outputName;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetOutputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* outputName)
+{
+    IOTHUB_MESSAGE_RESULT result;
+
+    // Codes_SRS_IOTHUBMESSAGE_31_036: [If any of the parameters are NULL then IoTHubMessage_SetOutputName shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if ((iotHubMessageHandle == NULL) || (outputName == NULL))
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, outputName=%p)", iotHubMessageHandle, outputName);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_31_037: [If the IOTHUB_MESSAGE_HANDLE OutputName is not NULL, then the IOTHUB_MESSAGE_HANDLE OutputName will be deallocated.]
+        if (handleData->outputName != NULL)
+        {
+            free(handleData->outputName);
+            handleData->outputName = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->outputName, outputName) != 0)
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_038: [If the allocation or the copying of the OutputName fails, then IoTHubMessage_SetOutputName shall return IOTHUB_MESSAGE_ERROR.]
+            LogError("Failed saving a copy of outputName");
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_039: [IoTHubMessage_SetOutputName finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+
+    }
+
+    return result;
+}
+
+const char* IoTHubMessage_GetInputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    // Codes_SRS_IOTHUBMESSAGE_31_040: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetInputName shall return a NULL value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUBMESSAGE_31_041: [IoTHubMessage_GetInputName shall return the InputName as a const char*.]
+        result = iotHubMessageHandle->inputName;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetInputName(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* inputName)
+{
+    IOTHUB_MESSAGE_RESULT result;
+
+    // Codes_SRS_IOTHUBMESSAGE_31_042: [if any of the parameters are NULL then IoTHubMessage_SetInputName shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if ((iotHubMessageHandle == NULL) || (inputName == NULL))
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, inputName=%p)", iotHubMessageHandle, inputName);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_31_043: [If the IOTHUB_MESSAGE_HANDLE InputName is not NULL, then the IOTHUB_MESSAGE_HANDLE InputName will be deallocated.]
+        if (handleData->inputName != NULL)
+        {
+            free(handleData->inputName);
+            handleData->inputName = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->inputName, inputName) != 0)
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_044: [If the allocation or the copying of the InputName fails, then IoTHubMessage_SetInputName shall return IOTHUB_MESSAGE_ERROR.]
+            LogError("Failed saving a copy of inputName");
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_045: [IoTHubMessage_SetInputName finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+
+    }
+
+    return result;
+}
+
+
+const char* IoTHubMessage_GetConnectionModuleId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    // Codes_SRS_IOTHUBMESSAGE_31_046: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetConnectionModuleId shall return a NULL value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUBMESSAGE_31_047: [IoTHubMessage_GetConnectionModuleId shall return the ConnectionModuleId as a const char*.]
+        result = iotHubMessageHandle->connectionModuleId;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetConnectionModuleId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* connectionModuleId)
+{
+    IOTHUB_MESSAGE_RESULT result;
+
+    // Codes_SRS_IOTHUBMESSAGE_31_048: [if any of the parameters are NULL then IoTHubMessage_SetConnectionModuleId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if ((iotHubMessageHandle == NULL) || (connectionModuleId == NULL))
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, connectionModuleId=%p)", iotHubMessageHandle, connectionModuleId);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_31_049: [If the IOTHUB_MESSAGE_HANDLE ConnectionModuleId is not NULL, then the IOTHUB_MESSAGE_HANDLE ConnectionModuleId will be deallocated.]
+        if (handleData->connectionModuleId != NULL)
+        {
+            free(handleData->connectionModuleId);
+            handleData->connectionModuleId = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->connectionModuleId, connectionModuleId) != 0)
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_050: [If the allocation or the copying of the ConnectionModuleId fails, then IoTHubMessage_SetConnectionModuleId shall return IOTHUB_MESSAGE_ERROR.]
+            LogError("Failed saving a copy of connectionModuleId");
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_051: [IoTHubMessage_SetConnectionModuleId finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+
+    }
+
+    return result;
+}
+
+
+const char* IoTHubMessage_GetConnectionDeviceId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    const char* result;
+    // Codes_SRS_IOTHUBMESSAGE_31_052: [if the iotHubMessageHandle parameter is NULL then IoTHubMessage_GetConnectionDeviceId shall return a NULL value.]
+    if (iotHubMessageHandle == NULL)
+    {
+        LogError("Invalid argument (iotHubMessageHandle is NULL)");
+        result = NULL;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUBMESSAGE_31_053: [IoTHubMessage_GetConnectionDeviceId shall return the ConnectionDeviceId as a const char*.]
+        result = iotHubMessageHandle->connectionDeviceId;
+    }
+    return result;
+}
+
+IOTHUB_MESSAGE_RESULT IoTHubMessage_SetConnectionDeviceId(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle, const char* connectionDeviceId)
+{
+    IOTHUB_MESSAGE_RESULT result;
+
+    // Codes_SRS_IOTHUBMESSAGE_31_054: [if any of the parameters are NULL then IoTHubMessage_SetConnectionDeviceId shall return a IOTHUB_MESSAGE_INVALID_ARG value.]
+    if ((iotHubMessageHandle == NULL) || (connectionDeviceId == NULL))
+    {
+        LogError("Invalid argument (iotHubMessageHandle=%p, connectionDeviceId=%p)", iotHubMessageHandle, connectionDeviceId);
+        result = IOTHUB_MESSAGE_INVALID_ARG;
+    }
+    else
+    {
+        IOTHUB_MESSAGE_HANDLE_DATA* handleData = (IOTHUB_MESSAGE_HANDLE_DATA*)iotHubMessageHandle;
+
+        // Codes_SRS_IOTHUBMESSAGE_31_055: [If the IOTHUB_MESSAGE_HANDLE ConnectionDeviceId is not NULL, then the IOTHUB_MESSAGE_HANDLE ConnectionDeviceId will be deallocated.]
+        if (handleData->connectionDeviceId != NULL)
+        {
+            free(handleData->connectionDeviceId);
+            handleData->connectionDeviceId = NULL;
+        }
+
+        if (mallocAndStrcpy_s(&handleData->connectionDeviceId, connectionDeviceId) != 0)
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_056: [If the allocation or the copying of the ConnectionDeviceId fails, then IoTHubMessage_SetConnectionDeviceId shall return IOTHUB_MESSAGE_ERROR.]
+            LogError("Failed saving a copy of connectionDeviceId");
+            result = IOTHUB_MESSAGE_ERROR;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUBMESSAGE_31_057: [IoTHubMessage_SetConnectionDeviceId finishes successfully it shall return IOTHUB_MESSAGE_OK.]
+            result = IOTHUB_MESSAGE_OK;
+        }
+
+    }
+
+    return result;
+}
+
+void IoTHubMessage_Destroy(IOTHUB_MESSAGE_HANDLE iotHubMessageHandle)
+{
+    /*Codes_SRS_IOTHUBMESSAGE_01_004: [If iotHubMessageHandle is NULL, IoTHubMessage_Destroy shall do nothing.] */
+    if (iotHubMessageHandle != NULL)
+    {
+        /*Codes_SRS_IOTHUBMESSAGE_01_003: [IoTHubMessage_Destroy shall free all resources associated with iotHubMessageHandle.]  */
+        DestroyMessageData((IOTHUB_MESSAGE_HANDLE_DATA* )iotHubMessageHandle);
+    }
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_transport_ll_private.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_transport_ll_private.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothub_transport_ll_private.c	(revision 389)
@@ -0,0 +1,32 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+
+#include "azure_c_shared_utility/xlogging.h"
+#include "internal/iothub_transport_ll_private.h"
+
+int IoTHub_Transport_ValidateCallbacks(const TRANSPORT_CALLBACKS_INFO* transport_cb)
+{
+    int result;
+    if (
+        transport_cb == NULL ||
+        transport_cb->connection_status_cb == NULL ||
+        transport_cb->msg_input_cb == NULL ||
+        transport_cb->msg_cb == NULL ||
+        transport_cb->send_complete_cb == NULL ||
+        transport_cb->prod_info_cb == NULL ||
+        transport_cb->twin_rpt_state_complete_cb == NULL ||
+        transport_cb->twin_retrieve_prop_complete_cb == NULL ||
+        transport_cb->method_complete_cb == NULL
+        )
+    {
+        LogError("Failure callback function NULL");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransport.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransport.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransport.c	(revision 389)
@@ -0,0 +1,465 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <signal.h>
+#include <stddef.h>
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "internal/iothubtransport.h"
+#include "iothub_client_core.h"
+#include "internal/iothub_client_private.h"
+#include "azure_c_shared_utility/threadapi.h"
+#include "azure_c_shared_utility/lock.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/vector.h"
+
+#include "internal/iothubtransport.h"
+#include "internal/iothub_client_private.h"
+#include "iothub_transport_ll.h"
+#include "iothub_client_core.h"
+
+typedef struct TRANSPORT_HANDLE_DATA_TAG
+{
+    TRANSPORT_LL_HANDLE transportLLHandle;
+    THREAD_HANDLE workerThreadHandle;
+    LOCK_HANDLE lockHandle;
+    sig_atomic_t stopThread;
+    TRANSPORT_PROVIDER_FIELDS;
+    VECTOR_HANDLE clients;
+    LOCK_HANDLE clientsLockHandle;
+    IOTHUB_CLIENT_MULTIPLEXED_DO_WORK clientDoWork;
+} TRANSPORT_HANDLE_DATA;
+
+/* Used for Unit test */
+const size_t IoTHubTransport_ThreadTerminationOffset = offsetof(TRANSPORT_HANDLE_DATA, stopThread);
+
+TRANSPORT_HANDLE IoTHubTransport_Create(IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol, const char* iotHubName, const char* iotHubSuffix)
+{
+    TRANSPORT_HANDLE_DATA *result;
+    TRANSPORT_CALLBACKS_INFO transport_cb;
+
+    if (protocol == NULL || iotHubName == NULL || iotHubSuffix == NULL)
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_002: [ If protocol is NULL, this function shall return NULL. ]*/
+        /*Codes_SRS_IOTHUBTRANSPORT_17_003: [ If iotHubName is NULL, this function shall return NULL. ]*/
+        /*Codes_SRS_IOTHUBTRANSPORT_17_004: [ If iotHubSuffix is NULL, this function shall return NULL. ]*/
+        LogError("Invalid NULL argument, protocol [%p], name [%p], suffix [%p].", protocol, iotHubName, iotHubSuffix);
+        result = NULL;
+    }
+    else if (IoTHubClientCore_LL_GetTransportCallbacks(&transport_cb) != 0)
+    {
+        LogError("Failure getting transport callbacks");
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_032: [ IoTHubTransport_Create shall allocate memory for the transport data. ]*/
+        result = (TRANSPORT_HANDLE_DATA*)malloc(sizeof(TRANSPORT_HANDLE_DATA));
+        if (result == NULL)
+        {
+            /*Codes_SRS_IOTHUBTRANSPORT_17_040: [ If memory allocation fails, IoTHubTransport_Create shall return NULL. ]*/
+            LogError("Transport handle was not allocated.");
+        }
+        else
+        {
+            TRANSPORT_PROVIDER * transportProtocol = (TRANSPORT_PROVIDER*)(protocol());
+            IOTHUB_CLIENT_CONFIG upperConfig;
+            upperConfig.deviceId = NULL;
+            upperConfig.deviceKey = NULL;
+            upperConfig.iotHubName = iotHubName;
+            upperConfig.iotHubSuffix = iotHubSuffix;
+            upperConfig.protocol = protocol;
+            upperConfig.protocolGatewayHostName = NULL;
+
+            IOTHUBTRANSPORT_CONFIG transportLLConfig;
+            memset(&transportLLConfig, 0, sizeof(IOTHUBTRANSPORT_CONFIG));
+            transportLLConfig.upperConfig = &upperConfig;
+            transportLLConfig.waitingToSend = NULL;
+
+            /*Codes_SRS_IOTHUBTRANSPORT_17_005: [ IoTHubTransport_Create shall create the lower layer transport by calling the protocol's IoTHubTransport_Create function. ]*/
+            result->transportLLHandle = transportProtocol->IoTHubTransport_Create(&transportLLConfig, &transport_cb, NULL);
+            if (result->transportLLHandle == NULL)
+            {
+                /*Codes_SRS_IOTHUBTRANSPORT_17_006: [ If the creation of the transport fails, IoTHubTransport_Create shall return NULL. ]*/
+                LogError("Lower Layer transport not created.");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUBTRANSPORT_17_007: [ IoTHubTransport_Create shall create the transport lock by Calling Lock_Init. ]*/
+                result->lockHandle = Lock_Init();
+                if (result->lockHandle == NULL)
+                {
+                    /*Codes_SRS_IOTHUBTRANSPORT_17_008: [ If the lock creation fails, IoTHubTransport_Create shall return NULL. ]*/
+                    LogError("transport Lock not created.");
+                    transportProtocol->IoTHubTransport_Destroy(result->transportLLHandle);
+                    free(result);
+                    result = NULL;
+                }
+                else if ((result->clientsLockHandle = Lock_Init()) == NULL)
+                {
+                    LogError("clients Lock not created.");
+                    Lock_Deinit(result->lockHandle);
+                    transportProtocol->IoTHubTransport_Destroy(result->transportLLHandle);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBTRANSPORT_17_038: [ IoTHubTransport_Create shall call VECTOR_Create to make a list of IOTHUB_CLIENT_CORE_HANDLE using this transport. ]*/
+                    result->clients = VECTOR_create(sizeof(IOTHUB_CLIENT_CORE_HANDLE));
+                    if (result->clients == NULL)
+                    {
+                        /*Codes_SRS_IOTHUBTRANSPORT_17_039: [ If the Vector creation fails, IoTHubTransport_Create shall return NULL. ]*/
+                        /*Codes_SRS_IOTHUBTRANSPORT_17_009: [ IoTHubTransport_Create shall clean up any resources it creates if the function does not succeed. ]*/
+                        LogError("clients list not created.");
+                        Lock_Deinit(result->clientsLockHandle);
+                        Lock_Deinit(result->lockHandle);
+                        transportProtocol->IoTHubTransport_Destroy(result->transportLLHandle);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /*Codes_SRS_IOTHUBTRANSPORT_17_001: [ IoTHubTransport_Create shall return a non-NULL handle on success.]*/
+                        result->stopThread = 1;
+                        result->clientDoWork = NULL;
+                        result->workerThreadHandle = NULL; /* create thread when work needs to be done */
+                        result->IoTHubTransport_GetHostname = transportProtocol->IoTHubTransport_GetHostname;
+                        result->IoTHubTransport_SetOption = transportProtocol->IoTHubTransport_SetOption;
+                        result->IoTHubTransport_Create = transportProtocol->IoTHubTransport_Create;
+                        result->IoTHubTransport_Destroy = transportProtocol->IoTHubTransport_Destroy;
+                        result->IoTHubTransport_Register = transportProtocol->IoTHubTransport_Register;
+                        result->IoTHubTransport_Unregister = transportProtocol->IoTHubTransport_Unregister;
+                        result->IoTHubTransport_Subscribe = transportProtocol->IoTHubTransport_Subscribe;
+                        result->IoTHubTransport_Unsubscribe = transportProtocol->IoTHubTransport_Unsubscribe;
+                        result->IoTHubTransport_DoWork = transportProtocol->IoTHubTransport_DoWork;
+                        result->IoTHubTransport_SetRetryPolicy = transportProtocol->IoTHubTransport_SetRetryPolicy;
+                        result->IoTHubTransport_GetSendStatus = transportProtocol->IoTHubTransport_GetSendStatus;
+                    }
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+static void multiplexed_client_do_work(TRANSPORT_HANDLE_DATA* transportData)
+{
+    if (Lock(transportData->clientsLockHandle) != LOCK_OK)
+    {
+        LogError("failed to lock for multiplexed_client_do_work");
+    }
+    else
+    {
+        size_t numberOfClients;
+        size_t iterator;
+
+        numberOfClients = VECTOR_size(transportData->clients);
+        for (iterator = 0; iterator < numberOfClients; iterator++)
+        {
+            IOTHUB_CLIENT_CORE_HANDLE* clientHandle = (IOTHUB_CLIENT_CORE_HANDLE*)VECTOR_element(transportData->clients, iterator);
+
+            if (clientHandle != NULL)
+            {
+                transportData->clientDoWork(*clientHandle);
+            }
+        }
+
+        if (Unlock(transportData->clientsLockHandle) != LOCK_OK)
+        {
+            LogError("failed to unlock on multiplexed_client_do_work");
+        }
+    }
+}
+
+static int transport_worker_thread(void* threadArgument)
+{
+    TRANSPORT_HANDLE_DATA* transportData = (TRANSPORT_HANDLE_DATA*)threadArgument;
+
+    while (1)
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_030: [ All calls to lower layer transport DoWork shall be protected by the lock created in IoTHubTransport_Create. ]*/
+        if (Lock(transportData->lockHandle) == LOCK_OK)
+        {
+            /*Codes_SRS_IOTHUBTRANSPORT_17_031: [ If acquiring the lock fails, lower layer transport DoWork shall not be called. ]*/
+            if (transportData->stopThread)
+            {
+                /*Codes_SRS_IOTHUBTRANSPORT_17_028: [ The thread shall exit when IoTHubTransport_EndWorkerThread has been called for each clientHandle which invoked IoTHubTransport_StartWorkerThread. ]*/
+                (void)Unlock(transportData->lockHandle);
+                break;
+            }
+            else
+            {
+                (transportData->IoTHubTransport_DoWork)(transportData->transportLLHandle);
+
+                (void)Unlock(transportData->lockHandle);
+            }
+        }
+
+        multiplexed_client_do_work(transportData);
+
+        /*Codes_SRS_IOTHUBTRANSPORT_17_029: [ The thread shall call lower layer transport DoWork every 1 ms. ]*/
+        ThreadAPI_Sleep(1);
+    }
+
+    ThreadAPI_Exit(0);
+    return 0;
+}
+
+static bool find_by_handle(const void* element, const void* value)
+{
+    /* data stored at element is device handle */
+    const IOTHUB_CLIENT_CORE_HANDLE * guess = (const IOTHUB_CLIENT_CORE_HANDLE *)element;
+    const IOTHUB_CLIENT_CORE_HANDLE match = (const IOTHUB_CLIENT_CORE_HANDLE)value;
+    return (*guess == match);
+}
+
+static IOTHUB_CLIENT_RESULT start_worker_if_needed(TRANSPORT_HANDLE_DATA * transportData, IOTHUB_CLIENT_CORE_HANDLE clientHandle)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if (transportData->workerThreadHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_018: [ If the worker thread does not exist, IoTHubTransport_StartWorkerThread shall start the thread using ThreadAPI_Create. ]*/
+        transportData->stopThread = 0;
+        if (ThreadAPI_Create(&transportData->workerThreadHandle, transport_worker_thread, transportData) != THREADAPI_OK)
+        {
+            transportData->workerThreadHandle = NULL;
+        }
+    }
+    if (transportData->workerThreadHandle != NULL)
+    {
+        if (Lock(transportData->clientsLockHandle) != LOCK_OK)
+        {
+            LogError("failed to lock for start_worker_if_needed");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUBTRANSPORT_17_020: [ IoTHubTransport_StartWorkerThread shall search for IoTHubClient clientHandle in the list of IoTHubClient handles. ]*/
+            bool addToList = ((VECTOR_size(transportData->clients) == 0) || (VECTOR_find_if(transportData->clients, find_by_handle, clientHandle) == NULL));
+            if (addToList)
+            {
+                /*Codes_SRS_IOTHUBTRANSPORT_17_021: [ If handle is not found, then clientHandle shall be added to the list. ]*/
+                if (VECTOR_push_back(transportData->clients, &clientHandle, 1) != 0)
+                {
+                    LogError("Failed adding device to list (VECTOR_push_back failed)");
+                    /*Codes_SRS_IOTHUBTRANSPORT_17_042: [ If Adding to the client list fails, IoTHubTransport_StartWorkerThread shall return IOTHUB_CLIENT_ERROR. ]*/
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+            else
+            {
+                result = IOTHUB_CLIENT_OK;
+            }
+
+            if (Unlock(transportData->clientsLockHandle) != LOCK_OK)
+            {
+                LogError("failed to unlock on start_worker_if_needed");
+            }
+        }
+    }
+    else
+    {
+        result = IOTHUB_CLIENT_ERROR;
+    }
+    return result;
+}
+
+static void stop_worker_thread(TRANSPORT_HANDLE_DATA* transportData)
+{
+    /*Codes_SRS_IOTHUBTRANSPORT_17_043: [** IoTHubTransport_SignalEndWorkerThread shall signal the worker thread to end.*/
+    if (Lock(transportData->lockHandle) != LOCK_OK)
+    {
+        // Need to setup a critical error function here to inform the user that an critical error
+        // has occured.
+        LogError("Unable to lock - will still attempt to end thread without thread safety");
+        transportData->stopThread = 1;
+    }
+    else
+    {
+        transportData->stopThread = 1;
+        (void)Unlock(transportData->lockHandle);
+    }
+
+}
+
+static void wait_worker_thread(TRANSPORT_HANDLE_DATA * transportData)
+{
+    if (transportData->workerThreadHandle != NULL)
+    {
+        int res;
+        /*Codes_SRS_IOTHUBTRANSPORT_17_027: [ If handle list is empty, IoTHubTransport_EndWorkerThread shall be joined. ]*/
+        if (ThreadAPI_Join(transportData->workerThreadHandle, &res) != THREADAPI_OK)
+        {
+            LogError("ThreadAPI_Join failed");
+        }
+        else
+        {
+            transportData->workerThreadHandle = NULL;
+        }
+    }
+}
+
+static bool signal_end_worker_thread(TRANSPORT_HANDLE_DATA * transportData, IOTHUB_CLIENT_CORE_HANDLE clientHandle)
+{
+    bool okToJoin;
+
+    if (Lock(transportData->clientsLockHandle) != LOCK_OK)
+    {
+        LogError("failed to lock for signal_end_worker_thread");
+        okToJoin = false;
+    }
+    else
+    {
+        void* element = VECTOR_find_if(transportData->clients, find_by_handle, clientHandle);
+        if (element != NULL)
+        {
+            /*Codes_SRS_IOTHUBTRANSPORT_17_026: [ IoTHubTransport_EndWorkerThread shall remove clientHandlehandle from handle list. ]*/
+            VECTOR_erase(transportData->clients, element, 1);
+        }
+        /*Codes_SRS_IOTHUBTRANSPORT_17_025: [ If the worker thread does not exist, then IoTHubTransport_EndWorkerThread shall return. ]*/
+        if (transportData->workerThreadHandle != NULL)
+        {
+            if (VECTOR_size(transportData->clients) == 0)
+            {
+                stop_worker_thread(transportData);
+                okToJoin = true;
+            }
+            else
+            {
+                okToJoin = false;
+            }
+        }
+        else
+        {
+            okToJoin = false;
+        }
+
+        if (Unlock(transportData->clientsLockHandle) != LOCK_OK)
+        {
+            LogError("failed to unlock on signal_end_worker_thread");
+        }
+    }
+    return okToJoin;
+}
+
+void IoTHubTransport_Destroy(TRANSPORT_HANDLE transportHandle)
+{
+    /*Codes_SRS_IOTHUBTRANSPORT_17_011: [ IoTHubTransport_Destroy shall do nothing if transportHandle is NULL. ]*/
+    if (transportHandle != NULL)
+    {
+        TRANSPORT_HANDLE_DATA * transportData = (TRANSPORT_HANDLE_DATA*)transportHandle;
+        /*Codes_SRS_IOTHUBTRANSPORT_17_033: [ IoTHubTransport_Destroy shall lock the transport lock. ]*/
+        stop_worker_thread(transportData);
+        wait_worker_thread(transportData);
+        /*Codes_SRS_IOTHUBTRANSPORT_17_010: [ IoTHubTransport_Destroy shall free all resources. ]*/
+        Lock_Deinit(transportData->lockHandle);
+        (transportData->IoTHubTransport_Destroy)(transportData->transportLLHandle);
+        VECTOR_destroy(transportData->clients);
+        Lock_Deinit(transportData->clientsLockHandle);
+        free(transportHandle);
+    }
+}
+
+LOCK_HANDLE IoTHubTransport_GetLock(TRANSPORT_HANDLE transportHandle)
+{
+    LOCK_HANDLE lock;
+    if (transportHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_013: [ If transportHandle is NULL, IoTHubTransport_GetLock shall return NULL. ]*/
+        lock = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_012: [ IoTHubTransport_GetLock shall return a handle to the transport lock. ]*/
+        TRANSPORT_HANDLE_DATA * transportData = (TRANSPORT_HANDLE_DATA*)transportHandle;
+        lock = transportData->lockHandle;
+    }
+    return lock;
+}
+
+TRANSPORT_LL_HANDLE IoTHubTransport_GetLLTransport(TRANSPORT_HANDLE transportHandle)
+{
+    TRANSPORT_LL_HANDLE llTransport;
+    if (transportHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_015: [ If transportHandle is NULL, IoTHubTransport_GetLLTransport shall return NULL. ]*/
+        llTransport = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_014: [ IoTHubTransport_GetLLTransport shall return a handle to the lower layer transport. ]*/
+        TRANSPORT_HANDLE_DATA * transportData = (TRANSPORT_HANDLE_DATA*)transportHandle;
+        llTransport = transportData->transportLLHandle;
+    }
+    return llTransport;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubTransport_StartWorkerThread(TRANSPORT_HANDLE transportHandle, IOTHUB_CLIENT_CORE_HANDLE clientHandle, IOTHUB_CLIENT_MULTIPLEXED_DO_WORK muxDoWork)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if (transportHandle == NULL || clientHandle == NULL)
+    {
+        /*Codes_SRS_IOTHUBTRANSPORT_17_016: [ If transportHandle is NULL, IoTHubTransport_StartWorkerThread shall return IOTHUB_CLIENT_INVALID_ARG. ]*/
+        /*Codes_SRS_IOTHUBTRANSPORT_17_017: [ If clientHandle is NULL, IoTHubTransport_StartWorkerThread shall return IOTHUB_CLIENT_INVALID_ARG. ]*/
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        TRANSPORT_HANDLE_DATA * transportData = (TRANSPORT_HANDLE_DATA*)transportHandle;
+
+        if (transportData->clientDoWork == NULL)
+        {
+            transportData->clientDoWork = muxDoWork;
+        }
+
+        if ((result = start_worker_if_needed(transportData, clientHandle)) != IOTHUB_CLIENT_OK)
+        {
+            /*Codes_SRS_IOTHUBTRANSPORT_17_019: [ If thread creation fails, IoTHubTransport_StartWorkerThread shall return IOTHUB_CLIENT_ERROR. */
+            LogError("Unable to start thread safely");
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUBTRANSPORT_17_022: [ Upon success, IoTHubTransport_StartWorkerThread shall return IOTHUB_CLIENT_OK. ]*/
+            result = IOTHUB_CLIENT_OK;
+        }
+    }
+    return result;
+}
+
+bool IoTHubTransport_SignalEndWorkerThread(TRANSPORT_HANDLE transportHandle, IOTHUB_CLIENT_CORE_HANDLE clientHandle)
+{
+    bool okToJoin;
+    /*Codes_SRS_IOTHUBTRANSPORT_17_023: [ If transportHandle is NULL, IoTHubTransport_EndWorkerThread shall return. ]*/
+    /*Codes_SRS_IOTHUBTRANSPORT_17_024: [ If clientHandle is NULL, IoTHubTransport_EndWorkerThread shall return. ]*/
+    if (!(transportHandle == NULL || clientHandle == NULL))
+    {
+        TRANSPORT_HANDLE_DATA * transportData = (TRANSPORT_HANDLE_DATA*)transportHandle;
+        okToJoin = signal_end_worker_thread(transportData, clientHandle);
+    }
+    else
+    {
+        okToJoin = false;
+    }
+    return okToJoin;
+}
+
+void IoTHubTransport_JoinWorkerThread(TRANSPORT_HANDLE transportHandle, IOTHUB_CLIENT_CORE_HANDLE clientHandle)
+{
+    /*Codes_SRS_IOTHUBTRANSPORT_17_044: [ If transportHandle is NULL, IoTHubTransport_JoinWorkerThread shall do nothing. ]*/
+    /*Codes_SRS_IOTHUBTRANSPORT_17_045: [ If clientHandle is NULL, IoTHubTransport_JoinWorkerThread shall do nothing. ]*/
+    if (!(transportHandle == NULL || clientHandle == NULL))
+    {
+        TRANSPORT_HANDLE_DATA * transportData = (TRANSPORT_HANDLE_DATA*)transportHandle;
+        /*Codes_SRS_IOTHUBTRANSPORT_17_027: [ The worker thread shall be joined. ]*/
+        wait_worker_thread(transportData);
+    }
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransport_mqtt_common.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransport_mqtt_common.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransport_mqtt_common.c	(revision 389)
@@ -0,0 +1,3594 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/threadapi.h"
+#include "azure_c_shared_utility/sastoken.h"
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/tlsio.h"
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/string_tokenizer.h"
+#include "azure_c_shared_utility/shared_util_options.h"
+#include "azure_c_shared_utility/urlencode.h"
+
+#include "internal/iothub_client_private.h"
+#include "internal/iothub_client_retry_control.h"
+#include "internal/iothub_transport_ll_private.h"
+#include "internal/iothubtransport_mqtt_common.h"
+#include "internal/iothubtransport.h"
+
+#include "azure_umqtt_c/mqtt_client.h"
+
+#include "iothub_client_options.h"
+#include "iothub_client_version.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include <limits.h>
+#include <inttypes.h>
+
+#define SAS_REFRESH_MULTIPLIER              .8
+#define EPOCH_TIME_T_VALUE                  0
+#define DEFAULT_MQTT_KEEPALIVE              4*60 // 4 min
+#define DEFAULT_CONNACK_TIMEOUT             30 // 30 seconds
+#define BUILD_CONFIG_USERNAME               24
+#define SAS_TOKEN_DEFAULT_LEN               10
+#define RESEND_TIMEOUT_VALUE_MIN            1*60
+#define MAX_SEND_RECOUNT_LIMIT              2
+#define DEFAULT_CONNECTION_INTERVAL         30
+#define FAILED_CONN_BACKOFF_VALUE           5
+#define STATUS_CODE_FAILURE_VALUE           500
+#define STATUS_CODE_TIMEOUT_VALUE           408
+
+#define DEFAULT_RETRY_POLICY                IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER
+#define DEFAULT_RETRY_TIMEOUT_IN_SECONDS    0
+#define MAX_DISCONNECT_VALUE                50
+
+#define ON_DEMAND_GET_TWIN_REQUEST_TIMEOUT_SECS    60
+
+static const char TOPIC_DEVICE_TWIN_PREFIX[] = "$iothub/twin";
+static const char TOPIC_DEVICE_METHOD_PREFIX[] = "$iothub/methods";
+
+static const char* TOPIC_GET_DESIRED_STATE = "$iothub/twin/res/#";
+static const char* TOPIC_NOTIFICATION_STATE = "$iothub/twin/PATCH/properties/desired/#";
+
+static const char* TOPIC_DEVICE_MSG = "devices/%s/messages/devicebound/#";
+static const char* TOPIC_DEVICE_MODULE_MSG = "devices/%s/modules/%s/messages/devicebound/#";
+static const char* TOPIC_DEVICE_DEVICE = "devices/%s/messages/events/";
+static const char* TOPIC_DEVICE_DEVICE_MODULE = "devices/%s/modules/%s/messages/events/";
+
+static const char* TOPIC_INPUT_QUEUE_NAME = "devices/%s/modules/%s/#";
+
+static const char* TOPIC_DEVICE_METHOD_SUBSCRIBE = "$iothub/methods/POST/#";
+
+static const char* IOTHUB_API_VERSION = "2017-11-08-preview";
+
+static const char* PROPERTY_SEPARATOR = "&";
+static const char* REPORTED_PROPERTIES_TOPIC = "$iothub/twin/PATCH/properties/reported/?$rid=%"PRIu16;
+static const char* GET_PROPERTIES_TOPIC = "$iothub/twin/GET/?$rid=%"PRIu16;
+static const char* DEVICE_METHOD_RESPONSE_TOPIC = "$iothub/methods/res/%d/?$rid=%s";
+
+static const char* REQUEST_ID_PROPERTY = "?$rid=";
+
+static const char* MESSAGE_ID_PROPERTY = "mid";
+static const char* CORRELATION_ID_PROPERTY = "cid";
+static const char* CONTENT_TYPE_PROPERTY = "ct";
+static const char* CONTENT_ENCODING_PROPERTY = "ce";
+static const char* DIAGNOSTIC_ID_PROPERTY = "diagid";
+static const char* DIAGNOSTIC_CONTEXT_PROPERTY = "diagctx";
+static const char* CONNECTION_DEVICE_ID = "cdid";
+static const char* CONNECTION_MODULE_ID_PROPERTY = "cmid";
+
+static const char* DIAGNOSTIC_CONTEXT_CREATION_TIME_UTC_PROPERTY = "creationtimeutc";
+
+#define TOLOWER(c) (((c>='A') && (c<='Z'))?c-'A'+'a':c)
+
+#define UNSUBSCRIBE_FROM_TOPIC                  0x0000
+#define SUBSCRIBE_GET_REPORTED_STATE_TOPIC      0x0001
+#define SUBSCRIBE_NOTIFICATION_STATE_TOPIC      0x0002
+#define SUBSCRIBE_TELEMETRY_TOPIC               0x0004
+#define SUBSCRIBE_DEVICE_METHOD_TOPIC           0x0008
+#define SUBSCRIBE_INPUT_QUEUE_TOPIC             0x0010
+#define SUBSCRIBE_TOPIC_COUNT                   5
+
+MU_DEFINE_ENUM_STRINGS(MQTT_CLIENT_EVENT_ERROR, MQTT_CLIENT_EVENT_ERROR_VALUES)
+
+typedef struct SYSTEM_PROPERTY_INFO_TAG
+{
+    const char* propName;
+    size_t propLength;
+} SYSTEM_PROPERTY_INFO;
+
+static SYSTEM_PROPERTY_INFO sysPropList[] = {
+    { "%24.exp", 7 },
+    { "%24.mid", 7 },
+    { "%24.uid", 7 },
+    { "%24.to", 6 },
+    { "%24.cid", 7 },
+    { "%24.ct", 6 },
+    { "%24.ce", 6 },
+    { "devices/", 8 },
+    { "iothub-operation", 16 },
+    { "iothub-ack", 10 },
+    { "%24.on", 6 },
+    { "%24.cdid", 8 },
+    { "%24.cmid", 8 }
+};
+
+static const int slashes_to_reach_input_name = 5;
+
+typedef enum DEVICE_TWIN_MSG_TYPE_TAG
+{
+    REPORTED_STATE,
+    RETRIEVE_PROPERTIES
+} DEVICE_TWIN_MSG_TYPE;
+
+typedef enum MQTT_TRANSPORT_CREDENTIAL_TYPE_TAG
+{
+    CREDENTIAL_NOT_BUILD,
+    X509,
+    SAS_TOKEN_FROM_USER,
+    DEVICE_KEY,
+} MQTT_TRANSPORT_CREDENTIAL_TYPE;
+
+typedef enum MQTT_CLIENT_STATUS_TAG
+{
+    MQTT_CLIENT_STATUS_NOT_CONNECTED,
+    MQTT_CLIENT_STATUS_CONNECTING,
+    MQTT_CLIENT_STATUS_CONNECTED,
+    MQTT_CLIENT_STATUS_PENDING_CLOSE,
+    MQTT_CLIENT_STATUS_EXECUTE_DISCONNECT
+} MQTT_CLIENT_STATUS;
+
+typedef struct MQTTTRANSPORT_HANDLE_DATA_TAG
+{
+    // Topic control
+    STRING_HANDLE topic_MqttEvent;
+    STRING_HANDLE topic_MqttMessage;
+    STRING_HANDLE topic_GetState;
+    STRING_HANDLE topic_NotifyState;
+    STRING_HANDLE topic_InputQueue;
+
+    STRING_HANDLE topic_DeviceMethods;
+
+    uint32_t topics_ToSubscribe;
+
+    // Connection related constants
+    STRING_HANDLE hostAddress;
+    STRING_HANDLE device_id;
+    STRING_HANDLE module_id;
+    STRING_HANDLE devicesAndModulesPath;
+    int portNum;
+    bool conn_attempted;
+
+    MQTT_GET_IO_TRANSPORT get_io_transport;
+
+    // The current mqtt iothub implementation requires that the hub name and the domain suffix be passed as the first of a series of segments
+    // passed through the username portion of the connection frame.
+    // The second segment will contain the device id.  The two segments are delemited by a "/".
+    // The first segment can be a maximum 256 characters.
+    // The second segment can be a maximum 128 characters.
+    // With the / delimeter you have 384 chars (Plus a terminator of 0).
+    STRING_HANDLE configPassedThroughUsername;
+
+    // Protocol
+    MQTT_CLIENT_HANDLE mqttClient;
+    XIO_HANDLE xioTransport;
+
+    // Session - connection
+    uint16_t packetId;
+    uint16_t twin_resp_packet_id;
+
+    // Connection state control
+    bool isRegistered;
+    MQTT_CLIENT_STATUS mqttClientStatus;
+    bool isDestroyCalled;
+    bool isRetryExpiredCallbackSet;
+    bool device_twin_get_sent;
+    bool twin_resp_sub_recv;
+    bool isRecoverableError;
+    uint16_t keepAliveValue;
+    uint16_t connect_timeout_in_sec;
+    tickcounter_ms_t mqtt_connect_time;
+    size_t connectFailCount;
+    tickcounter_ms_t connectTick;
+    bool log_trace;
+    bool raw_trace;
+    TICK_COUNTER_HANDLE msgTickCounter;
+    OPTIONHANDLER_HANDLE saved_tls_options; // Here are the options from the xio layer if any is saved.
+
+    // Internal lists for message tracking
+    PDLIST_ENTRY waitingToSend;
+    DLIST_ENTRY ack_waiting_queue;
+
+    DLIST_ENTRY pending_get_twin_queue;
+
+    // Message tracking
+    CONTROL_PACKET_TYPE currPacketState;
+
+    // Telemetry specific
+    DLIST_ENTRY telemetry_waitingForAck;
+    bool auto_url_encode_decode;
+
+    // Controls frequency of reconnection logic.
+    RETRY_CONTROL_HANDLE retry_control_handle;
+
+    // Auth module used to generating handle authorization
+    // with either SAS Token, x509 Certs, and Device SAS Token
+    IOTHUB_AUTHORIZATION_HANDLE authorization_module;
+
+    TRANSPORT_CALLBACKS_INFO transport_callbacks;
+    void* transport_ctx;
+
+    char* http_proxy_hostname;
+    int http_proxy_port;
+    char* http_proxy_username;
+    char* http_proxy_password;
+    bool isProductInfoSet;
+    int disconnect_recv_flag;
+} MQTTTRANSPORT_HANDLE_DATA, *PMQTTTRANSPORT_HANDLE_DATA;
+
+typedef struct MQTT_DEVICE_TWIN_ITEM_TAG
+{
+    tickcounter_ms_t msgEnqueueTime;
+    tickcounter_ms_t msgPublishTime;
+    size_t retryCount;
+    IOTHUB_IDENTITY_TYPE iothub_type;
+    uint16_t packet_id;
+    uint32_t iothub_msg_id;
+    IOTHUB_DEVICE_TWIN* device_twin_data;
+    DEVICE_TWIN_MSG_TYPE device_twin_msg_type;
+    DLIST_ENTRY entry;
+    IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK userCallback;
+    void* userContext;
+} MQTT_DEVICE_TWIN_ITEM;
+
+typedef struct MQTT_MESSAGE_DETAILS_LIST_TAG
+{
+    tickcounter_ms_t msgPublishTime;
+    size_t retryCount;
+    IOTHUB_MESSAGE_LIST* iotHubMessageEntry;
+    void* context;
+    uint16_t packet_id;
+    DLIST_ENTRY entry;
+} MQTT_MESSAGE_DETAILS_LIST, *PMQTT_MESSAGE_DETAILS_LIST;
+
+typedef struct DEVICE_METHOD_INFO_TAG
+{
+    STRING_HANDLE request_id;
+} DEVICE_METHOD_INFO;
+
+static void free_proxy_data(MQTTTRANSPORT_HANDLE_DATA* mqtt_transport_instance)
+{
+    if (mqtt_transport_instance->http_proxy_hostname != NULL)
+    {
+        free(mqtt_transport_instance->http_proxy_hostname);
+        mqtt_transport_instance->http_proxy_hostname = NULL;
+    }
+
+    if (mqtt_transport_instance->http_proxy_username != NULL)
+    {
+        free(mqtt_transport_instance->http_proxy_username);
+        mqtt_transport_instance->http_proxy_username = NULL;
+    }
+
+    if (mqtt_transport_instance->http_proxy_password != NULL)
+    {
+        free(mqtt_transport_instance->http_proxy_password);
+        mqtt_transport_instance->http_proxy_password = NULL;
+    }
+}
+
+static void set_saved_tls_options(PMQTTTRANSPORT_HANDLE_DATA transport, OPTIONHANDLER_HANDLE new_options)
+{
+    if (transport->saved_tls_options != NULL)
+    {
+        OptionHandler_Destroy(transport->saved_tls_options);
+    }
+    transport->saved_tls_options = new_options;
+}
+
+static void free_transport_handle_data(MQTTTRANSPORT_HANDLE_DATA* transport_data)
+{
+    if (transport_data->mqttClient != NULL)
+    {
+        mqtt_client_deinit(transport_data->mqttClient);
+    }
+
+    if (transport_data->retry_control_handle != NULL)
+    {
+        retry_control_destroy(transport_data->retry_control_handle);
+    }
+
+    set_saved_tls_options(transport_data, NULL);
+
+    tickcounter_destroy(transport_data->msgTickCounter);
+
+    free_proxy_data(transport_data);
+
+    STRING_delete(transport_data->devicesAndModulesPath);
+    STRING_delete(transport_data->topic_MqttEvent);
+    STRING_delete(transport_data->topic_MqttMessage);
+    STRING_delete(transport_data->device_id);
+    STRING_delete(transport_data->module_id);
+    STRING_delete(transport_data->hostAddress);
+    STRING_delete(transport_data->configPassedThroughUsername);
+    STRING_delete(transport_data->topic_GetState);
+    STRING_delete(transport_data->topic_NotifyState);
+    STRING_delete(transport_data->topic_DeviceMethods);
+    STRING_delete(transport_data->topic_InputQueue);
+
+    free(transport_data);
+}
+
+int IoTHubTransport_MQTT_Common_SetRetryPolicy(TRANSPORT_LL_HANDLE handle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitInSeconds)
+{
+    int result;
+
+    if (handle == NULL)
+    {
+        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_25_041: [**If any handle is NULL then IoTHubTransport_MQTT_Common_SetRetryPolicy shall return resultant line.] */
+        LogError("Invalid handle parameter. NULL.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        RETRY_CONTROL_HANDLE new_retry_control_handle;
+
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_006: [ IoTHubTransport_MQTT_Common_SetRetryPolicy shall set the retry logic by calling retry_control_create() with retry policy and retryTimeout as parameters]
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_009: [ If retry_control_create() fails then IoTHubTransport_MQTT_Common_SetRetryPolicy shall revert to previous retry policy and return non-zero value ]
+        if ((new_retry_control_handle = retry_control_create(retryPolicy, (unsigned int)retryTimeoutLimitInSeconds)) == NULL)
+        {
+            LogError("Failed creating new retry control handle");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+            RETRY_CONTROL_HANDLE previous_retry_control_handle = transport_data->retry_control_handle;
+
+            transport_data->retry_control_handle = new_retry_control_handle;
+            retry_control_destroy(previous_retry_control_handle);
+
+            /*Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_25_045: [**If retry logic for specified parameters of retry policy and retryTimeoutLimitInSeconds is created successfully then IoTHubTransport_MQTT_Common_SetRetryPolicy shall return 0]*/
+            result = 0;
+        }
+    }
+
+    return result;
+}
+
+static uint16_t get_next_packet_id(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    if (transport_data->packetId + 1 >= USHRT_MAX)
+    {
+        transport_data->packetId = 1;
+    }
+    else
+    {
+        transport_data->packetId++;
+    }
+    return transport_data->packetId;
+}
+
+#ifndef NO_LOGGING
+static const char* retrieve_mqtt_return_codes(CONNECT_RETURN_CODE rtn_code)
+{
+    switch (rtn_code)
+    {
+        case CONNECTION_ACCEPTED:
+            return "Accepted";
+        case CONN_REFUSED_UNACCEPTABLE_VERSION:
+            return "Unacceptable Version";
+        case CONN_REFUSED_ID_REJECTED:
+            return "Id Rejected";
+        case CONN_REFUSED_SERVER_UNAVAIL:
+            return "Server Unavailable";
+        case CONN_REFUSED_BAD_USERNAME_PASSWORD:
+            return "Bad Username/Password";
+        case CONN_REFUSED_NOT_AUTHORIZED:
+            return "Not Authorized";
+        case CONN_REFUSED_UNKNOWN:
+        default:
+            return "Unknown";
+    }
+}
+#endif // NO_LOGGING
+
+static int retrieve_device_method_rid_info(const char* resp_topic, STRING_HANDLE method_name, STRING_HANDLE request_id)
+{
+    int result;
+    STRING_TOKENIZER_HANDLE token_handle = STRING_TOKENIZER_create_from_char(resp_topic);
+    if (token_handle == NULL)
+    {
+        LogError("Failed creating token from device twin topic.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING_HANDLE token_value;
+        if ((token_value = STRING_new()) == NULL)
+        {
+            LogError("Failed allocating new string .");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            size_t token_index = 0;
+            size_t request_id_length = strlen(REQUEST_ID_PROPERTY);
+            result = MU_FAILURE;
+            while (STRING_TOKENIZER_get_next_token(token_handle, token_value, "/") == 0)
+            {
+                if (token_index == 3)
+                {
+                    if (STRING_concat_with_STRING(method_name, token_value) != 0)
+                    {
+                        LogError("Failed STRING_concat_with_STRING.");
+                        result = MU_FAILURE;
+                        break;
+                    }
+                }
+                else if (token_index == 4)
+                {
+                    if (STRING_length(token_value) >= request_id_length)
+                    {
+                        const char* request_id_value = STRING_c_str(token_value);
+                        if (memcmp(request_id_value, REQUEST_ID_PROPERTY, request_id_length) == 0)
+                        {
+                            if (STRING_concat(request_id, request_id_value + request_id_length) != 0)
+                            {
+                                LogError("Failed STRING_concat failed.");
+                                result = MU_FAILURE;
+                            }
+                            else
+                            {
+                                result = 0;
+                            }
+                            break;
+                        }
+                    }
+                }
+                token_index++;
+            }
+            STRING_delete(token_value);
+        }
+        STRING_TOKENIZER_destroy(token_handle);
+    }
+    return result;
+}
+
+static int parse_device_twin_topic_info(const char* resp_topic, bool* patch_msg, size_t* request_id, int* status_code)
+{
+    int result;
+    STRING_TOKENIZER_HANDLE token_handle = STRING_TOKENIZER_create_from_char(resp_topic);
+    if (token_handle == NULL)
+    {
+        LogError("Failed creating token from device twin topic.");
+        result = MU_FAILURE;
+        *status_code = 0;
+        *request_id = 0;
+        *patch_msg = false;
+    }
+    else
+    {
+        STRING_HANDLE token_value;
+        if ((token_value = STRING_new()) == NULL)
+        {
+            LogError("Failed allocating new string .");
+            result = MU_FAILURE;
+            *status_code = 0;
+            *request_id = 0;
+            *patch_msg = false;
+        }
+        else
+        {
+            result = MU_FAILURE;
+            size_t token_count = 0;
+            while (STRING_TOKENIZER_get_next_token(token_handle, token_value, "/") == 0)
+            {
+                if (token_count == 2)
+                {
+                    if (strcmp(STRING_c_str(token_value), "PATCH") == 0)
+                    {
+                        *patch_msg = true;
+                        *status_code = 0;
+                        *request_id = 0;
+                        result = 0;
+                        break;
+                    }
+                    else
+                    {
+                        *patch_msg = false;
+                    }
+                }
+                else if (token_count == 3)
+                {
+                    *status_code = (int)atol(STRING_c_str(token_value));
+                    if (STRING_TOKENIZER_get_next_token(token_handle, token_value, "/?$rid=") == 0)
+                    {
+                        *request_id = (size_t)atol(STRING_c_str(token_value));
+                    }
+                    *patch_msg = false;
+                    result = 0;
+                    break;
+                }
+                token_count++;
+            }
+            STRING_delete(token_value);
+        }
+        STRING_TOKENIZER_destroy(token_handle);
+    }
+    return result;
+}
+
+static int InternStrnicmp(const char* s1, const char* s2, size_t n)
+{
+    int result;
+
+    if (s1 == NULL) result = -1;
+    else if (s2 == NULL) result = 1;
+    else
+    {
+        result = 0;
+
+        while (n-- && result == 0)
+        {
+            if (*s1 == 0) result = -1;
+            else if (*s2 == 0) result = 1;
+            else
+            {
+
+                result = TOLOWER(*s1) - TOLOWER(*s2);
+                ++s1;
+                ++s2;
+            }
+        }
+    }
+    return result;
+}
+
+static IOTHUB_IDENTITY_TYPE retrieve_topic_type(const char* topic_resp, const char* input_queue)
+{
+    IOTHUB_IDENTITY_TYPE type;
+    if (InternStrnicmp(topic_resp, TOPIC_DEVICE_TWIN_PREFIX, sizeof(TOPIC_DEVICE_TWIN_PREFIX) - 1) == 0)
+    {
+        type = IOTHUB_TYPE_DEVICE_TWIN;
+    }
+    else if (InternStrnicmp(topic_resp, TOPIC_DEVICE_METHOD_PREFIX, sizeof(TOPIC_DEVICE_METHOD_PREFIX) - 1) == 0)
+    {
+        type = IOTHUB_TYPE_DEVICE_METHODS;
+    }
+    // input_queue contains additional "#" from subscribe, which we strip off on comparing incoming.
+    else if ((input_queue != NULL) && InternStrnicmp(topic_resp, input_queue, strlen(input_queue) - 1) == 0)
+    {
+        type = IOTHUB_TYPE_EVENT_QUEUE;
+    }
+    else
+    {
+        type = IOTHUB_TYPE_TELEMETRY;
+    }
+    return type;
+
+}
+
+static void sendMsgComplete(IOTHUB_MESSAGE_LIST* iothubMsgList, PMQTTTRANSPORT_HANDLE_DATA transport_data, IOTHUB_CLIENT_CONFIRMATION_RESULT confirmResult)
+{
+    DLIST_ENTRY messageCompleted;
+    DList_InitializeListHead(&messageCompleted);
+    DList_InsertTailList(&messageCompleted, &(iothubMsgList->entry));
+    transport_data->transport_callbacks.send_complete_cb(&messageCompleted, confirmResult, transport_data->transport_ctx);
+}
+
+static int addUserPropertiesTouMqttMessage(IOTHUB_MESSAGE_HANDLE iothub_message_handle, STRING_HANDLE topic_string, size_t* index_ptr, bool urlencode)
+{
+    int result = 0;
+    const char* const* propertyKeys;
+    const char* const* propertyValues;
+    size_t propertyCount;
+    size_t index = *index_ptr;
+    MAP_HANDLE properties_map = IoTHubMessage_Properties(iothub_message_handle);
+    if (properties_map != NULL)
+    {
+        if (Map_GetInternals(properties_map, &propertyKeys, &propertyValues, &propertyCount) != MAP_OK)
+        {
+            LogError("Failed to get the internals of the property map.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (propertyCount != 0)
+            {
+                for (index = 0; index < propertyCount && result == 0; index++)
+                {
+                    if (urlencode)
+                    {
+                        STRING_HANDLE property_key = URL_EncodeString(propertyKeys[index]);
+                        STRING_HANDLE property_value = URL_EncodeString(propertyValues[index]);
+                        if ((property_key == NULL) || (property_value == NULL))
+                        {
+                            LogError("Failed URL Encoding properties");
+                            result = MU_FAILURE;
+                        }
+                        else if (STRING_sprintf(topic_string, "%s=%s%s", STRING_c_str(property_key), STRING_c_str(property_value), propertyCount - 1 == index ? "" : PROPERTY_SEPARATOR) != 0)
+                        {
+                            LogError("Failed constructing property string.");
+                            result = MU_FAILURE;
+                        }
+                        STRING_delete(property_key);
+                        STRING_delete(property_value);
+                    }
+                    else
+                    {
+                        if (STRING_sprintf(topic_string, "%s=%s%s", propertyKeys[index], propertyValues[index], propertyCount - 1 == index ? "" : PROPERTY_SEPARATOR) != 0)
+                        {
+                            LogError("Failed constructing property string.");
+                            result = MU_FAILURE;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    *index_ptr = index;
+    return result;
+}
+
+static int addSystemPropertyToTopicString(STRING_HANDLE topic_string, size_t index, const char* property_key, const char* property_value, bool urlencode)
+{
+    int result = 0;
+
+    if (urlencode)
+    {
+        STRING_HANDLE encoded_property_value = URL_EncodeString(property_value);
+        if (encoded_property_value == NULL)
+        {
+            LogError("Failed URL encoding %s.", property_key);
+            result = MU_FAILURE;
+        }
+        else if (STRING_sprintf(topic_string, "%s%%24.%s=%s", index == 0 ? "" : PROPERTY_SEPARATOR, property_key, STRING_c_str(encoded_property_value)) != 0)
+        {
+            LogError("Failed setting %s.", property_key);
+            result = MU_FAILURE;
+        }
+        STRING_delete(encoded_property_value);
+    }
+    else
+    {
+        if (STRING_sprintf(topic_string, "%s%%24.%s=%s", index == 0 ? "" : PROPERTY_SEPARATOR, property_key, property_value) != 0)
+        {
+            LogError("Failed setting %s.", property_key);
+            result = MU_FAILURE;
+        }
+    }
+    return result;
+}
+
+static int addSystemPropertiesTouMqttMessage(IOTHUB_MESSAGE_HANDLE iothub_message_handle, STRING_HANDLE topic_string, size_t* index_ptr, bool urlencode)
+{
+    (void)urlencode;
+    int result = 0;
+    size_t index = *index_ptr;
+
+    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_052: [ IoTHubTransport_MQTT_Common_DoWork shall check for the CorrelationId property and if found add the value as a system property in the format of $.cid=<id> ] */
+    const char* correlation_id = IoTHubMessage_GetCorrelationId(iothub_message_handle);
+    if (correlation_id != NULL)
+    {
+        result = addSystemPropertyToTopicString(topic_string, index, CORRELATION_ID_PROPERTY, correlation_id, urlencode);
+        index++;
+    }
+    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_053: [ IoTHubTransport_MQTT_Common_DoWork shall check for the MessageId property and if found add the value as a system property in the format of $.mid=<id> ] */
+    if (result == 0)
+    {
+        const char* msg_id = IoTHubMessage_GetMessageId(iothub_message_handle);
+        if (msg_id != NULL)
+        {
+            result = addSystemPropertyToTopicString(topic_string, index, MESSAGE_ID_PROPERTY, msg_id, urlencode);
+            index++;
+        }
+    }
+    // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_010: [ `IoTHubTransport_MQTT_Common_DoWork` shall check for the ContentType property and if found add the `value` as a system property in the format of `$.ct=<value>` ]
+    if (result == 0)
+    {
+        const char* content_type = IoTHubMessage_GetContentTypeSystemProperty(iothub_message_handle);
+        if (content_type != NULL)
+        {
+            result = addSystemPropertyToTopicString(topic_string, index, CONTENT_TYPE_PROPERTY, content_type, urlencode);
+            index++;
+        }
+    }
+    // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_011: [ `IoTHubTransport_MQTT_Common_DoWork` shall check for the ContentEncoding property and if found add the `value` as a system property in the format of `$.ce=<value>` ]
+    if (result == 0)
+    {
+        const char* content_encoding = IoTHubMessage_GetContentEncodingSystemProperty(iothub_message_handle);
+        if (content_encoding != NULL)
+        {
+            result = addSystemPropertyToTopicString(topic_string, index, CONTENT_ENCODING_PROPERTY, content_encoding, urlencode);
+            index++;
+        }
+    }
+    *index_ptr = index;
+    return result;
+}
+
+static int addDiagnosticPropertiesTouMqttMessage(IOTHUB_MESSAGE_HANDLE iothub_message_handle, STRING_HANDLE topic_string, size_t* index_ptr)
+{
+    int result = 0;
+    size_t index = *index_ptr;
+
+    // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_014: [ `IoTHubTransport_MQTT_Common_DoWork` shall check for the diagnostic properties including diagid and diagCreationTimeUtc and if found both add them as system property in the format of `$.diagid` and `$.diagctx` respectively]
+    const IOTHUB_MESSAGE_DIAGNOSTIC_PROPERTY_DATA* diagnosticData = IoTHubMessage_GetDiagnosticPropertyData(iothub_message_handle);
+    if (diagnosticData != NULL)
+    {
+        const char* diag_id = diagnosticData->diagnosticId;
+        const char* creation_time_utc = diagnosticData->diagnosticCreationTimeUtc;
+        //diagid and creationtimeutc must be present/unpresent simultaneously
+        if (diag_id != NULL && creation_time_utc != NULL)
+        {
+            if (STRING_sprintf(topic_string, "%s%%24.%s=%s", index == 0 ? "" : PROPERTY_SEPARATOR, DIAGNOSTIC_ID_PROPERTY, diag_id) != 0)
+            {
+                LogError("Failed setting diagnostic id");
+                result = MU_FAILURE;
+            }
+            index++;
+
+            if (result == 0)
+            {
+                //construct diagnostic context, it should be urlencode(key1=value1,key2=value2)
+                STRING_HANDLE diagContextHandle = STRING_construct_sprintf("%s=%s", DIAGNOSTIC_CONTEXT_CREATION_TIME_UTC_PROPERTY, creation_time_utc);
+                if (diagContextHandle == NULL)
+                {
+                    LogError("Failed constructing diagnostic context");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    //Add other diagnostic context properties here if have more
+                    STRING_HANDLE encodedContextValueHandle = URL_Encode(diagContextHandle);
+                    const char* encodedContextValueString = NULL;
+                    if (encodedContextValueHandle != NULL &&
+                        (encodedContextValueString = STRING_c_str(encodedContextValueHandle)) != NULL)
+                    {
+                        if (STRING_sprintf(topic_string, "%s%%24.%s=%s", index == 0 ? "" : PROPERTY_SEPARATOR, DIAGNOSTIC_CONTEXT_PROPERTY, encodedContextValueString) != 0)
+                        {
+                            LogError("Failed setting diagnostic context");
+                            result = MU_FAILURE;
+                        }
+                        STRING_delete(encodedContextValueHandle);
+                        encodedContextValueHandle = NULL;
+                    }
+                    else
+                    {
+                        LogError("Failed encoding diagnostic context value");
+                        result = MU_FAILURE;
+                    }
+                    STRING_delete(diagContextHandle);
+                    diagContextHandle = NULL;
+                    index++;
+                }
+            }
+        }
+        else if (diag_id != NULL || creation_time_utc != NULL)
+        {
+            // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_015: [ `IoTHubTransport_MQTT_Common_DoWork` shall check whether diagid and diagCreationTimeUtc be present simultaneously, treat as error if not]
+            LogError("diagid and diagcreationtimeutc must be present simultaneously.");
+            result = MU_FAILURE;
+        }
+    }
+    return result;
+}
+
+
+static STRING_HANDLE addPropertiesTouMqttMessage(IOTHUB_MESSAGE_HANDLE iothub_message_handle, const char* eventTopic, bool urlencode)
+{
+    size_t index = 0;
+    STRING_HANDLE result = STRING_construct(eventTopic);
+    if (result == NULL)
+    {
+        LogError("Failed to create event topic string handle");
+    }
+    else if (addUserPropertiesTouMqttMessage(iothub_message_handle, result, &index, urlencode) != 0)
+    {
+        LogError("Failed adding Properties to uMQTT Message");
+        STRING_delete(result);
+        result = NULL;
+    }
+    else if (addSystemPropertiesTouMqttMessage(iothub_message_handle, result, &index, urlencode) != 0)
+    {
+        LogError("Failed adding System Properties to uMQTT Message");
+        STRING_delete(result);
+        result = NULL;
+    }
+    else if (addDiagnosticPropertiesTouMqttMessage(iothub_message_handle, result, &index) != 0)
+    {
+        LogError("Failed adding Diagnostic Properties to uMQTT Message");
+        STRING_delete(result);
+        result = NULL;
+    }
+
+    // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_060: [ `IoTHubTransport_MQTT_Common_DoWork` shall check for the OutputName property and if found add the value as a system property in the format of $.on=<value> ]
+    if (result != NULL)
+    {
+        const char* output_name = IoTHubMessage_GetOutputName(iothub_message_handle);
+        if (output_name != NULL)
+        {
+            if (STRING_sprintf(result, "%s%%24.on=%s/", index == 0 ? "" : PROPERTY_SEPARATOR, output_name) != 0)
+            {
+                LogError("Failed setting output name.");
+                STRING_delete(result);
+                result = NULL;
+            }
+            index++;
+        }
+    }
+
+    return result;
+}
+
+static int publish_mqtt_telemetry_msg(PMQTTTRANSPORT_HANDLE_DATA transport_data, MQTT_MESSAGE_DETAILS_LIST* mqttMsgEntry, const unsigned char* payload, size_t len)
+{
+    int result;
+    STRING_HANDLE msgTopic = addPropertiesTouMqttMessage(mqttMsgEntry->iotHubMessageEntry->messageHandle, STRING_c_str(transport_data->topic_MqttEvent), transport_data->auto_url_encode_decode);
+    if (msgTopic == NULL)
+    {
+        LogError("Failed adding properties to mqtt message");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MQTT_MESSAGE_HANDLE mqttMsg = mqttmessage_create_in_place(mqttMsgEntry->packet_id, STRING_c_str(msgTopic), DELIVER_AT_LEAST_ONCE, payload, len);
+        if (mqttMsg == NULL)
+        {
+            LogError("Failed creating mqtt message");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (tickcounter_get_current_ms(transport_data->msgTickCounter, &mqttMsgEntry->msgPublishTime) != 0)
+            {
+                LogError("Failed retrieving tickcounter info");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                if (mqtt_client_publish(transport_data->mqttClient, mqttMsg) != 0)
+                {
+                    LogError("Failed attempting to publish mqtt message");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    mqttMsgEntry->retryCount++;
+                    result = 0;
+                }
+            }
+            mqttmessage_destroy(mqttMsg);
+        }
+        STRING_delete(msgTopic);
+    }
+    return result;
+}
+
+static int publish_device_method_message(MQTTTRANSPORT_HANDLE_DATA* transport_data, int status_code, STRING_HANDLE request_id, const unsigned char* response, size_t response_size)
+{
+    int result;
+    uint16_t packet_id = get_next_packet_id(transport_data);
+
+    STRING_HANDLE msg_topic = STRING_construct_sprintf(DEVICE_METHOD_RESPONSE_TOPIC, status_code, STRING_c_str(request_id));
+    if (msg_topic == NULL)
+    {
+        LogError("Failed constructing message topic.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MQTT_MESSAGE_HANDLE mqtt_get_msg = mqttmessage_create_in_place(packet_id, STRING_c_str(msg_topic), DELIVER_AT_MOST_ONCE, response, response_size);
+        if (mqtt_get_msg == NULL)
+        {
+            LogError("Failed constructing mqtt message.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mqtt_client_publish(transport_data->mqttClient, mqtt_get_msg) != 0)
+            {
+                LogError("Failed publishing to mqtt client.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+            mqttmessage_destroy(mqtt_get_msg);
+        }
+        STRING_delete(msg_topic);
+    }
+    return result;
+}
+
+
+static void destroy_device_twin_get_message(MQTT_DEVICE_TWIN_ITEM* msg_entry)
+{
+    free(msg_entry);
+}
+
+static MQTT_DEVICE_TWIN_ITEM* create_device_twin_get_message(MQTTTRANSPORT_HANDLE_DATA* transport_data)
+{
+    MQTT_DEVICE_TWIN_ITEM* result;
+
+    if ((result = (MQTT_DEVICE_TWIN_ITEM*)malloc(sizeof(MQTT_DEVICE_TWIN_ITEM))) == NULL)
+    {
+        LogError("Failed allocating device twin data.");
+    }
+    else
+    {
+        result->packet_id = get_next_packet_id(transport_data);
+        result->iothub_msg_id = 0;
+        result->device_twin_msg_type = RETRIEVE_PROPERTIES;
+        result->retryCount = 0;
+        result->msgPublishTime = 0;
+        result->msgEnqueueTime = 0;
+        result->iothub_type = IOTHUB_TYPE_DEVICE_TWIN;
+        result->device_twin_data = NULL;
+        result->userCallback = NULL;
+        result->userContext = NULL;
+    }
+
+    return result;
+}
+
+static int publish_device_twin_get_message(MQTTTRANSPORT_HANDLE_DATA* transport_data, MQTT_DEVICE_TWIN_ITEM* mqtt_info)
+{
+    int result;
+
+    STRING_HANDLE msg_topic = STRING_construct_sprintf(GET_PROPERTIES_TOPIC, mqtt_info->packet_id);
+    if (msg_topic == NULL)
+    {
+        LogError("Failed constructing get Prop topic.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MQTT_MESSAGE_HANDLE mqtt_get_msg = mqttmessage_create(mqtt_info->packet_id, STRING_c_str(msg_topic), DELIVER_AT_MOST_ONCE, NULL, 0);
+        if (mqtt_get_msg == NULL)
+        {
+            LogError("Failed constructing mqtt message.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mqtt_client_publish(transport_data->mqttClient, mqtt_get_msg) != 0)
+            {
+                LogError("Failed publishing to mqtt client.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                DList_InsertTailList(&transport_data->ack_waiting_queue, &mqtt_info->entry);
+                result = 0;
+            }
+            mqttmessage_destroy(mqtt_get_msg);
+        }
+        STRING_delete(msg_topic);
+    }
+
+    return result;
+}
+
+static void sendPendingGetTwinRequests(PMQTTTRANSPORT_HANDLE_DATA transportData)
+{
+    PDLIST_ENTRY dev_twin_item = transportData->pending_get_twin_queue.Flink;
+
+    while (dev_twin_item != &transportData->pending_get_twin_queue)
+    {
+        DLIST_ENTRY saveListEntry;
+        saveListEntry.Flink = dev_twin_item->Flink;
+        MQTT_DEVICE_TWIN_ITEM* msg_entry = containingRecord(dev_twin_item, MQTT_DEVICE_TWIN_ITEM, entry);
+        (void)DList_RemoveEntryList(dev_twin_item);
+
+        if (publish_device_twin_get_message(transportData, msg_entry) != 0)
+        {
+            LogError("Failed sending pending get twin request");
+            destroy_device_twin_get_message(msg_entry);
+        }
+        else
+        {
+            transportData->device_twin_get_sent = true;
+        }
+
+        dev_twin_item = saveListEntry.Flink;
+    }
+}
+
+static void removeExpiredPendingGetTwinRequests(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    tickcounter_ms_t current_ms;
+
+    if (tickcounter_get_current_ms(transport_data->msgTickCounter, &current_ms) == 0)
+    {
+        PDLIST_ENTRY listItem = transport_data->pending_get_twin_queue.Flink;
+
+        while (listItem != &transport_data->pending_get_twin_queue)
+        {
+            DLIST_ENTRY nextListItem;
+            nextListItem.Flink = listItem->Flink;
+            MQTT_DEVICE_TWIN_ITEM* msg_entry = containingRecord(listItem, MQTT_DEVICE_TWIN_ITEM, entry);
+
+            if (((current_ms - msg_entry->msgEnqueueTime) / 1000) >= ON_DEMAND_GET_TWIN_REQUEST_TIMEOUT_SECS)
+            {
+                (void)DList_RemoveEntryList(listItem);
+                msg_entry->userCallback(DEVICE_TWIN_UPDATE_COMPLETE, NULL, 0, msg_entry->userContext);
+                destroy_device_twin_get_message(msg_entry);
+            }
+
+            listItem = nextListItem.Flink;
+        }
+    }
+}
+
+static void removeExpiredGetTwinRequestsPendingAck(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    tickcounter_ms_t current_ms;
+
+    if (tickcounter_get_current_ms(transport_data->msgTickCounter, &current_ms) == 0)
+    {
+        PDLIST_ENTRY listItem = transport_data->ack_waiting_queue.Flink;
+
+        while (listItem != &transport_data->ack_waiting_queue)
+        {
+            DLIST_ENTRY nextListItem;
+            nextListItem.Flink = listItem->Flink;
+            MQTT_DEVICE_TWIN_ITEM* msg_entry = containingRecord(listItem, MQTT_DEVICE_TWIN_ITEM, entry);
+
+            // Check if it is a on-demand get-twin request.
+            if (msg_entry->device_twin_msg_type == RETRIEVE_PROPERTIES && msg_entry->userCallback != NULL)
+            {
+                if (((current_ms - msg_entry->msgEnqueueTime) / 1000) >= ON_DEMAND_GET_TWIN_REQUEST_TIMEOUT_SECS)
+                {
+                    (void)DList_RemoveEntryList(listItem);
+                    msg_entry->userCallback(DEVICE_TWIN_UPDATE_COMPLETE, NULL, 0, msg_entry->userContext);
+                    destroy_device_twin_get_message(msg_entry);
+                }
+            }
+
+            listItem = nextListItem.Flink;
+        }
+    }
+}
+
+static int publish_device_twin_message(MQTTTRANSPORT_HANDLE_DATA* transport_data, IOTHUB_DEVICE_TWIN* device_twin_info, MQTT_DEVICE_TWIN_ITEM* mqtt_info)
+{
+    int result;
+    mqtt_info->packet_id = get_next_packet_id(transport_data);
+    mqtt_info->device_twin_msg_type = REPORTED_STATE;
+
+    STRING_HANDLE msgTopic = STRING_construct_sprintf(REPORTED_PROPERTIES_TOPIC, mqtt_info->packet_id);
+    if (msgTopic == NULL)
+    {
+        LogError("Failed constructing reported prop topic.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        const CONSTBUFFER* data_buff;
+        if ((data_buff = CONSTBUFFER_GetContent(device_twin_info->report_data_handle)) == NULL)
+        {
+            LogError("Failed retrieving buffer content");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            MQTT_MESSAGE_HANDLE mqtt_rpt_msg = mqttmessage_create_in_place(mqtt_info->packet_id, STRING_c_str(msgTopic), DELIVER_AT_MOST_ONCE, data_buff->buffer, data_buff->size);
+            if (mqtt_rpt_msg == NULL)
+            {
+                LogError("Failed creating mqtt message");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                if (tickcounter_get_current_ms(transport_data->msgTickCounter, &mqtt_info->msgPublishTime) != 0)
+                {
+                    LogError("Failed retrieving tickcounter info");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    if (mqtt_client_publish(transport_data->mqttClient, mqtt_rpt_msg) != 0)
+                    {
+                        LogError("Failed publishing mqtt message");
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        mqtt_info->retryCount++;
+                        result = 0;
+                    }
+                }
+                mqttmessage_destroy(mqtt_rpt_msg);
+            }
+        }
+        STRING_delete(msgTopic);
+    }
+    return result;
+}
+
+static void changeStateToSubscribeIfAllowed(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    if (transport_data->currPacketState != CONNACK_TYPE &&
+        transport_data->currPacketState != CONNECT_TYPE &&
+        transport_data->currPacketState != DISCONNECT_TYPE &&
+        transport_data->currPacketState != PACKET_TYPE_ERROR)
+    {
+        transport_data->currPacketState = SUBSCRIBE_TYPE;
+    }
+}
+
+static int subscribeToNotifyStateIfNeeded(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    int result;
+
+    if (transport_data->topic_NotifyState == NULL)
+    {
+        transport_data->topic_NotifyState = STRING_construct(TOPIC_NOTIFICATION_STATE);
+        if (transport_data->topic_NotifyState == NULL)
+        {
+            LogError("Failure: unable constructing notify state topic");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_NOTIFICATION_STATE_TOPIC;
+            result = 0;
+        }
+    }
+    else
+    {
+        result = 0;
+    }
+
+    if (result == 0)
+    {
+        changeStateToSubscribeIfAllowed(transport_data);
+    }
+
+    return result;
+}
+
+
+static bool isSystemProperty(const char* tokenData)
+{
+    bool result = false;
+    size_t propCount = sizeof(sysPropList) / sizeof(sysPropList[0]);
+    size_t index = 0;
+    for (index = 0; index < propCount; index++)
+    {
+        if (memcmp(tokenData, sysPropList[index].propName, sysPropList[index].propLength) == 0)
+        {
+            result = true;
+            break;
+        }
+    }
+    return result;
+}
+
+// Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_061: [ If the message is sent to an input queue, `IoTHubTransport_MQTT_Common_DoWork` shall parse out to the input queue name and store it in the message with IoTHubMessage_SetInputName ]
+// Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_062: [ If IoTHubTransport_MQTT_Common_DoWork receives a malformatted inputQueue, it shall fail ]
+static int addInputNamePropertyToMessage(IOTHUB_MESSAGE_HANDLE IoTHubMessage, const char* topic_name)
+{
+    int result = MU_FAILURE;
+    int number_tokens_read = 0;
+
+    STRING_TOKENIZER_HANDLE token_handle = STRING_TOKENIZER_create_from_char(topic_name);
+    if (token_handle == NULL)
+    {
+        LogError("STRING_TOKENIZER_create_from_char failed\n");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING_HANDLE token_value;
+        if ((token_value = STRING_new()) == NULL)
+        {
+            LogError("Failed allocating token_value");
+        }
+        else
+        {
+            while (STRING_TOKENIZER_get_next_token(token_handle, token_value, "/") == 0)
+            {
+                number_tokens_read++;
+                if (number_tokens_read == (slashes_to_reach_input_name + 1))
+                {
+                    if ((IOTHUB_MESSAGE_OK != IoTHubMessage_SetInputName(IoTHubMessage, STRING_c_str(token_value))))
+                    {
+                        LogError("Failed adding input name to msg");
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        result = 0;
+                    }
+                    break;
+                }
+            }
+        }
+        STRING_delete(token_value);
+
+        if (number_tokens_read != (slashes_to_reach_input_name + 1))
+        {
+            LogError("Not enough '/' to contain input name.  Got %d, need at least %d", number_tokens_read, (slashes_to_reach_input_name + 1));
+            result = MU_FAILURE;
+        }
+        STRING_TOKENIZER_destroy(token_handle);
+    }
+
+    return result;
+}
+
+static int setMqttMessagePropertyIfPossible(IOTHUB_MESSAGE_HANDLE IoTHubMessage, const char* propName, const char* propValue, size_t nameLen)
+{
+    // Not finding a system property to map to isn't an error.
+    int result = 0;
+
+    if (nameLen > 4)
+    {
+        if (strcmp((const char*)&propName[nameLen - 4], CONNECTION_DEVICE_ID) == 0)
+        {
+            // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_063: [ If type is IOTHUB_TYPE_TELEMETRY and the system property `$.cdid` is defined, its value shall be set on the IOTHUB_MESSAGE_HANDLE's ConnectionDeviceId property ]
+            if (IoTHubMessage_SetConnectionDeviceId(IoTHubMessage, propValue) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("Failed to set IOTHUB_MESSAGE_HANDLE 'messageId' property.");
+                result = MU_FAILURE;
+            }
+            return result;
+        }
+        if (strcmp((const char*)&propName[nameLen - 4], CONNECTION_MODULE_ID_PROPERTY) == 0)
+        {
+            // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_064: [ If type is IOTHUB_TYPE_TELEMETRY and the system property `$.cmid` is defined, its value shall be set on the IOTHUB_MESSAGE_HANDLE's ConnectionModuleId property ]
+            if (IoTHubMessage_SetConnectionModuleId(IoTHubMessage, propValue) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("Failed to set IOTHUB_MESSAGE_HANDLE 'correlationId' property.");
+                result = MU_FAILURE;
+            }
+            return result;
+        }
+    }
+    if (nameLen > 3)
+    {
+        if (strcmp((const char*)&propName[nameLen - 3], MESSAGE_ID_PROPERTY) == 0)
+        {
+            if (IoTHubMessage_SetMessageId(IoTHubMessage, propValue) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("Failed to set IOTHUB_MESSAGE_HANDLE 'messageId' property.");
+                result = MU_FAILURE;
+            }
+            return result;
+        }
+        else if (strcmp((const char*)&propName[nameLen - 3], CORRELATION_ID_PROPERTY) == 0)
+        {
+            if (IoTHubMessage_SetCorrelationId(IoTHubMessage, propValue) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("Failed to set IOTHUB_MESSAGE_HANDLE 'correlationId' property.");
+                result = MU_FAILURE;
+            }
+            return result;
+        }
+    }
+
+    if (nameLen > 2)
+    {
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_012: [ If type is IOTHUB_TYPE_TELEMETRY and the system property `$.ct` is defined, its value shall be set on the IOTHUB_MESSAGE_HANDLE's ContentType property ]
+        if (strcmp((const char*)&propName[nameLen - 2], CONTENT_TYPE_PROPERTY) == 0)
+        {
+            if (IoTHubMessage_SetContentTypeSystemProperty(IoTHubMessage, propValue) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("Failed to set IOTHUB_MESSAGE_HANDLE 'customContentType' property.");
+                result = MU_FAILURE;
+            }
+            return result;
+        }
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_013: [ If type is IOTHUB_TYPE_TELEMETRY and the system property `$.ce` is defined, its value shall be set on the IOTHUB_MESSAGE_HANDLE's ContentEncoding property ]
+        else if (strcmp((const char*)&propName[nameLen - 2], CONTENT_ENCODING_PROPERTY) == 0)
+        {
+            if (IoTHubMessage_SetContentEncodingSystemProperty(IoTHubMessage, propValue) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("Failed to set IOTHUB_MESSAGE_HANDLE 'contentEncoding' property.");
+                result = MU_FAILURE;
+            }
+            return result;
+        }
+    }
+
+    return result;
+}
+
+static int extractMqttProperties(IOTHUB_MESSAGE_HANDLE IoTHubMessage, const char* topic_name, bool urldecode)
+{
+    int result;
+    STRING_TOKENIZER_HANDLE token = STRING_TOKENIZER_create_from_char(topic_name);
+    if (token != NULL)
+    {
+        MAP_HANDLE propertyMap = IoTHubMessage_Properties(IoTHubMessage);
+        if (propertyMap == NULL)
+        {
+            LogError("Failure to retrieve IoTHubMessage_properties.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            STRING_HANDLE output = STRING_new();
+            if (output == NULL)
+            {
+                LogError("Failure to allocate STRING_new.");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+
+                while (STRING_TOKENIZER_get_next_token(token, output, PROPERTY_SEPARATOR) == 0 && result == 0)
+                {
+                    const char* tokenData = STRING_c_str(output);
+                    size_t tokenLen = strlen(tokenData);
+                    if (tokenData == NULL || tokenLen == 0)
+                    {
+                        break;
+                    }
+                    else
+                    {
+                        if (isSystemProperty(tokenData))
+                        {
+                            const char* iterator = tokenData;
+                            while (iterator != NULL && *iterator != '\0' && result == 0)
+                            {
+                                if (*iterator == '=')
+                                {
+                                    char* propName = NULL;
+                                    char* propValue = NULL;
+                                    size_t nameLen = iterator - tokenData;
+                                    size_t valLen = tokenLen - (nameLen + 1) + 1;
+
+                                    if ((propName = malloc(nameLen + 1)) == NULL || (propValue = malloc(valLen + 1)) == NULL)
+                                    {
+                                        LogError("Failed allocating property name (%p) and/or value (%p)", propName, propValue);
+                                        free(propName);
+                                        result = MU_FAILURE;
+                                    }
+                                    else
+                                    {
+                                        memcpy(propName, tokenData, nameLen);
+                                        propName[nameLen] = '\0';
+
+                                        memcpy(propValue, iterator + 1, valLen);
+                                        propValue[valLen] = '\0';
+
+                                        if (urldecode)
+                                        {
+                                            STRING_HANDLE propValue_decoded;
+                                            if ((propValue_decoded = URL_DecodeString(propValue)) == NULL)
+                                            {
+                                                LogError("Failed to URL decode property value");
+                                                result = MU_FAILURE;
+                                            }
+                                            else if (setMqttMessagePropertyIfPossible(IoTHubMessage, propName, STRING_c_str(propValue_decoded), nameLen) != 0)
+                                            {
+                                                LogError("Unable to set message property");
+                                                result = MU_FAILURE;
+                                            }
+                                            STRING_delete(propValue_decoded);
+                                        }
+                                        else
+                                        {
+                                            if (setMqttMessagePropertyIfPossible(IoTHubMessage, propName, propValue, nameLen) != 0)
+                                            {
+                                                LogError("Unable to set message property");
+                                                result = MU_FAILURE;
+                                            }
+                                        }
+                                        free(propName);
+                                        free(propValue);
+                                    }
+                                    break;
+                                }
+                                iterator++;
+                            }
+                        }
+                        else //User Properties
+                        {
+                            const char* iterator = tokenData;
+                            while (iterator != NULL && *iterator != '\0' && result == 0)
+                            {
+                                if (*iterator == '=')
+                                {
+                                    char* propName = NULL;
+                                    char* propValue = NULL;
+                                    size_t nameLen = iterator - tokenData;
+                                    size_t valLen = tokenLen - (nameLen + 1) + 1;
+
+                                    if ((propName = (char*)malloc(nameLen + 1)) == NULL || (propValue = (char*)malloc(valLen + 1)) == NULL)
+                                    {
+                                        free(propName);
+                                        LogError("Failed allocating property information");
+                                        result = MU_FAILURE;
+                                    }
+                                    else
+                                    {
+                                        memcpy(propName, tokenData, nameLen);
+                                        propName[nameLen] = '\0';
+
+                                        memcpy(propValue, iterator + 1, valLen);
+                                        propValue[valLen] = '\0';
+
+                                        if (urldecode)
+                                        {
+                                            STRING_HANDLE propName_decoded = URL_DecodeString(propName);
+                                            STRING_HANDLE propValue_decoded = URL_DecodeString(propValue);
+                                            if (propName_decoded == NULL || propValue_decoded == NULL)
+                                            {
+                                                LogError("Failed to URL decode property");
+                                                result = MU_FAILURE;
+                                            }
+                                            else if (Map_AddOrUpdate(propertyMap, STRING_c_str(propName_decoded), STRING_c_str(propValue_decoded)) != MAP_OK)
+                                            {
+                                                LogError("Map_AddOrUpdate failed.");
+                                                result = MU_FAILURE;
+                                            }
+                                            STRING_delete(propName_decoded);
+                                            STRING_delete(propValue_decoded);
+                                        }
+                                        else
+                                        {
+                                            if (Map_AddOrUpdate(propertyMap, propName, propValue) != MAP_OK)
+                                            {
+                                                LogError("Map_AddOrUpdate failed.");
+                                                result = MU_FAILURE;
+                                            }
+                                        }
+                                        free(propName);
+                                        free(propValue);
+                                    }
+                                    break;
+                                }
+                                iterator++;
+                            }
+                        }
+                    }
+                }
+                STRING_delete(output);
+            }
+        }
+        STRING_TOKENIZER_destroy(token);
+    }
+    else
+    {
+        LogError("Unable to create Tokenizer object.");
+        result = MU_FAILURE;
+    }
+    return result;
+}
+
+static void mqtt_notification_callback(MQTT_MESSAGE_HANDLE msgHandle, void* callbackCtx)
+{
+    /* Tests_SRS_IOTHUB_MQTT_TRANSPORT_07_051: [ If msgHandle or callbackCtx is NULL, mqtt_notification_callback shall do nothing. ] */
+    if (msgHandle != NULL && callbackCtx != NULL)
+    {
+        /* Tests_SRS_IOTHUB_MQTT_TRANSPORT_07_052: [ mqtt_notification_callback shall extract the topic Name from the MQTT_MESSAGE_HANDLE. ] */
+        const char* topic_resp = mqttmessage_getTopicName(msgHandle);
+        if (topic_resp == NULL)
+        {
+            LogError("Failure: NULL topic name encountered");
+        }
+        else
+        {
+            PMQTTTRANSPORT_HANDLE_DATA transportData = (PMQTTTRANSPORT_HANDLE_DATA)callbackCtx;
+
+            IOTHUB_IDENTITY_TYPE type = retrieve_topic_type(topic_resp, STRING_c_str(transportData->topic_InputQueue));
+            if (type == IOTHUB_TYPE_DEVICE_TWIN)
+            {
+                size_t request_id;
+                int status_code;
+                bool notification_msg;
+                if (parse_device_twin_topic_info(topic_resp, &notification_msg, &request_id, &status_code) != 0)
+                {
+                    LogError("Failure: parsing device topic info");
+                }
+                else
+                {
+                    const APP_PAYLOAD* payload = mqttmessage_getApplicationMsg(msgHandle);
+                    if (notification_msg)
+                    {
+                        transportData->transport_callbacks.twin_retrieve_prop_complete_cb(DEVICE_TWIN_UPDATE_PARTIAL, payload->message, payload->length, transportData->transport_ctx);
+                    }
+                    else
+                    {
+                        PDLIST_ENTRY dev_twin_item = transportData->ack_waiting_queue.Flink;
+                        while (dev_twin_item != &transportData->ack_waiting_queue)
+                        {
+                            DLIST_ENTRY saveListEntry;
+                            saveListEntry.Flink = dev_twin_item->Flink;
+                            MQTT_DEVICE_TWIN_ITEM* msg_entry = containingRecord(dev_twin_item, MQTT_DEVICE_TWIN_ITEM, entry);
+                            if (request_id == msg_entry->packet_id)
+                            {
+                                (void)DList_RemoveEntryList(dev_twin_item);
+                                if (msg_entry->device_twin_msg_type == RETRIEVE_PROPERTIES)
+                                {
+                                    if (msg_entry->userCallback == NULL)
+                                    {
+                                        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_054: [ If type is IOTHUB_TYPE_DEVICE_TWIN, then on success if msg_type is RETRIEVE_PROPERTIES then mqtt_notification_callback shall call IoTHubClientCore_LL_RetrievePropertyComplete... ] */
+                                        transportData->transport_callbacks.twin_retrieve_prop_complete_cb(DEVICE_TWIN_UPDATE_COMPLETE, payload->message, payload->length, transportData->transport_ctx);
+                                        // Only after receiving device twin request should we start listening for patches.
+                                        (void)subscribeToNotifyStateIfNeeded(transportData);
+                                    }
+                                    else
+                                    {
+                                        // This is a on-demand get twin request.
+                                        msg_entry->userCallback(DEVICE_TWIN_UPDATE_COMPLETE, payload->message, payload->length, msg_entry->userContext);
+                                    }
+                                }
+                                else
+                                {
+                                    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_055: [ if device_twin_msg_type is not RETRIEVE_PROPERTIES then mqtt_notification_callback shall call IoTHubClientCore_LL_ReportedStateComplete ] */
+                                    transportData->transport_callbacks.twin_rpt_state_complete_cb(msg_entry->iothub_msg_id, status_code, transportData->transport_ctx);
+                                    // Only after receiving device twin request should we start listening for patches.
+                                    (void)subscribeToNotifyStateIfNeeded(transportData);
+                                }
+
+                                destroy_device_twin_get_message(msg_entry);
+                                break;
+                            }
+                            dev_twin_item = saveListEntry.Flink;
+                        }
+                    }
+                }
+            }
+            else if (type == IOTHUB_TYPE_DEVICE_METHODS)
+            {
+                STRING_HANDLE method_name = STRING_new();
+                if (method_name == NULL)
+                {
+                    LogError("Failure: allocating method_name string value");
+                }
+                else
+                {
+                    DEVICE_METHOD_INFO* dev_method_info = malloc(sizeof(DEVICE_METHOD_INFO));
+                    if (dev_method_info == NULL)
+                    {
+                        LogError("Failure: allocating DEVICE_METHOD_INFO object");
+                    }
+                    else
+                    {
+                        dev_method_info->request_id = STRING_new();
+                        if (dev_method_info->request_id == NULL)
+                        {
+                            LogError("Failure constructing request_id string");
+                            free(dev_method_info);
+                        }
+                        else if (retrieve_device_method_rid_info(topic_resp, method_name, dev_method_info->request_id) != 0)
+                        {
+                            LogError("Failure: retrieve device topic info");
+                            STRING_delete(dev_method_info->request_id);
+                            free(dev_method_info);
+                        }
+                        else
+                        {
+                            /* CodesSRS_IOTHUB_MQTT_TRANSPORT_07_053: [ If type is IOTHUB_TYPE_DEVICE_METHODS, then on success mqtt_notification_callback shall call IoTHubClientCore_LL_DeviceMethodComplete. ] */
+                            const APP_PAYLOAD* payload = mqttmessage_getApplicationMsg(msgHandle);
+                            if (transportData->transport_callbacks.method_complete_cb(STRING_c_str(method_name), payload->message, payload->length, (void*)dev_method_info, transportData->transport_ctx) != 0)
+                            {
+                                LogError("Failure: IoTHubClientCore_LL_DeviceMethodComplete");
+                                STRING_delete(dev_method_info->request_id);
+                                free(dev_method_info);
+                            }
+                        }
+                    }
+                    STRING_delete(method_name);
+                }
+            }
+            else
+            {
+                const APP_PAYLOAD* appPayload = mqttmessage_getApplicationMsg(msgHandle);
+                IOTHUB_MESSAGE_HANDLE IoTHubMessage = IoTHubMessage_CreateFromByteArray(appPayload->message, appPayload->length);
+                if (IoTHubMessage == NULL)
+                {
+                    LogError("Failure: IotHub Message creation has failed.");
+                }
+                else
+                {
+                    if ((type == IOTHUB_TYPE_EVENT_QUEUE) && (addInputNamePropertyToMessage(IoTHubMessage, topic_resp) != 0))
+                    {
+                        LogError("failure adding input name to property.");
+                    }
+                    // Will need to update this when the service has messages that can be rejected
+                    else if (extractMqttProperties(IoTHubMessage, topic_resp, transportData->auto_url_encode_decode) != 0)
+                    {
+                        LogError("failure extracting mqtt properties.");
+                    }
+                    else
+                    {
+                        MESSAGE_CALLBACK_INFO* messageData = (MESSAGE_CALLBACK_INFO*)malloc(sizeof(MESSAGE_CALLBACK_INFO));
+                        if (messageData == NULL)
+                        {
+                            LogError("malloc failed");
+                        }
+                        else
+                        {
+                            messageData->messageHandle = IoTHubMessage;
+                            messageData->transportContext = NULL;
+
+                            if (type == IOTHUB_TYPE_EVENT_QUEUE)
+                            {
+                                // Codes_SRS_IOTHUB_MQTT_TRANSPORT_31_065: [ If type is IOTHUB_TYPE_TELEMETRY and sent to an input queue, then on success `mqtt_notification_callback` shall call `IoTHubClient_LL_MessageCallback`. ]
+                                if (!transportData->transport_callbacks.msg_input_cb(messageData, transportData->transport_ctx))
+                                {
+                                    LogError("IoTHubClientCore_LL_MessageCallbackreturned false");
+
+                                    IoTHubMessage_Destroy(IoTHubMessage);
+                                    free(messageData);
+                                }
+                            }
+                            else
+                            {
+                                /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_056: [ If type is IOTHUB_TYPE_TELEMETRY, then on success mqtt_notification_callback shall call IoTHubClientCore_LL_MessageCallback. ] */
+                                if (!transportData->transport_callbacks.msg_cb(messageData, transportData->transport_ctx))
+                                {
+                                    LogError("IoTHubClientCore_LL_MessageCallback returned false");
+                                    IoTHubMessage_Destroy(IoTHubMessage);
+                                    free(messageData);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void mqtt_operation_complete_callback(MQTT_CLIENT_HANDLE handle, MQTT_CLIENT_EVENT_RESULT actionResult, const void* msgInfo, void* callbackCtx)
+{
+    (void)handle;
+    if (callbackCtx != NULL)
+    {
+        PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)callbackCtx;
+
+        switch (actionResult)
+        {
+            case MQTT_CLIENT_ON_PUBLISH_ACK:
+            case MQTT_CLIENT_ON_PUBLISH_COMP:
+            {
+                const PUBLISH_ACK* puback = (const PUBLISH_ACK*)msgInfo;
+                if (puback != NULL)
+                {
+                    PDLIST_ENTRY currentListEntry = transport_data->telemetry_waitingForAck.Flink;
+                    while (currentListEntry != &transport_data->telemetry_waitingForAck)
+                    {
+                        MQTT_MESSAGE_DETAILS_LIST* mqttMsgEntry = containingRecord(currentListEntry, MQTT_MESSAGE_DETAILS_LIST, entry);
+                        DLIST_ENTRY saveListEntry;
+                        saveListEntry.Flink = currentListEntry->Flink;
+
+                        if (puback->packetId == mqttMsgEntry->packet_id)
+                        {
+                            (void)DList_RemoveEntryList(currentListEntry); //First remove the item from Waiting for Ack List.
+                            sendMsgComplete(mqttMsgEntry->iotHubMessageEntry, transport_data, IOTHUB_CLIENT_CONFIRMATION_OK);
+                            free(mqttMsgEntry);
+                        }
+                        currentListEntry = saveListEntry.Flink;
+                    }
+                }
+                else
+                {
+                    LogError("Failure: MQTT_CLIENT_ON_PUBLISH_ACK publish_ack structure NULL.");
+                }
+                break;
+            }
+            case MQTT_CLIENT_ON_CONNACK:
+            {
+                const CONNECT_ACK* connack = (const CONNECT_ACK*)msgInfo;
+                if (connack != NULL)
+                {
+                    if (connack->returnCode == CONNECTION_ACCEPTED)
+                    {
+                        // The connect packet has been acked
+                        transport_data->currPacketState = CONNACK_TYPE;
+                        transport_data->isRecoverableError = true;
+                        transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_CONNECTED;
+
+                        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_008: [ Upon successful connection the retry control shall be reset using retry_control_reset() ]
+                        retry_control_reset(transport_data->retry_control_handle);
+
+                        transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_AUTHENTICATED, IOTHUB_CLIENT_CONNECTION_OK, transport_data->transport_ctx);
+                    }
+                    else
+                    {
+                        if (connack->returnCode == CONN_REFUSED_SERVER_UNAVAIL)
+                        {
+                            transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED, transport_data->transport_ctx);
+                        }
+                        else if (connack->returnCode == CONN_REFUSED_BAD_USERNAME_PASSWORD || connack->returnCode == CONN_REFUSED_ID_REJECTED)
+                        {
+                            transport_data->isRecoverableError = false;
+                            transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL, transport_data->transport_ctx);
+                        }
+                        else if (connack->returnCode == CONN_REFUSED_NOT_AUTHORIZED)
+                        {
+                            transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED, transport_data->transport_ctx);
+                        }
+                        else if (connack->returnCode == CONN_REFUSED_UNACCEPTABLE_VERSION)
+                        {
+                            transport_data->isRecoverableError = false;
+                        }
+                        LogError("Connection Not Accepted: 0x%x: %s", connack->returnCode, retrieve_mqtt_return_codes(connack->returnCode));
+                        transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_PENDING_CLOSE;
+                        transport_data->currPacketState = PACKET_TYPE_ERROR;
+                    }
+                }
+                else
+                {
+                    LogError("MQTT_CLIENT_ON_CONNACK CONNACK parameter is NULL.");
+                }
+                break;
+            }
+            case MQTT_CLIENT_ON_SUBSCRIBE_ACK:
+            {
+                const SUBSCRIBE_ACK* suback = (const SUBSCRIBE_ACK*)msgInfo;
+                if (suback != NULL)
+                {
+                    size_t index = 0;
+                    for (index = 0; index < suback->qosCount; index++)
+                    {
+                        if (suback->qosReturn[index] == DELIVER_FAILURE)
+                        {
+                            LogError("Subscribe delivery failure of subscribe %lu", (unsigned long)index);
+                        }
+                    }
+                    // The subscribed packet has been acked
+                    transport_data->currPacketState = SUBACK_TYPE;
+
+                    // Is this a twin message
+                    if (suback->packetId == transport_data->twin_resp_packet_id)
+                    {
+                        transport_data->twin_resp_sub_recv = true;
+                    }
+                }
+                else
+                {
+                    LogError("Failure: MQTT_CLIENT_ON_SUBSCRIBE_ACK SUBSCRIBE_ACK parameter is NULL.");
+                }
+                break;
+            }
+            case MQTT_CLIENT_ON_PUBLISH_RECV:
+            case MQTT_CLIENT_ON_PUBLISH_REL:
+            {
+                // Currently not used
+                break;
+            }
+            case MQTT_CLIENT_ON_DISCONNECT:
+            {
+                // Close the client so we can reconnect again
+                transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED;
+                break;
+            }
+            case MQTT_CLIENT_ON_UNSUBSCRIBE_ACK:
+            case MQTT_CLIENT_ON_PING_RESPONSE:
+            default:
+            {
+                break;
+            }
+        }
+    }
+}
+
+// Prior to creating a new connection, if we have an existing xioTransport that has been connected before
+// we need to clear it now or else cached settings (especially TLS when communicating with HTTP proxies)
+// will break reconnection attempt.
+static void ResetConnectionIfNecessary(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    if (transport_data->xioTransport != NULL && transport_data->conn_attempted)
+    {
+        OPTIONHANDLER_HANDLE options = xio_retrieveoptions(transport_data->xioTransport);
+        set_saved_tls_options(transport_data, options);
+
+        xio_destroy(transport_data->xioTransport);
+        transport_data->xioTransport = NULL;
+    }
+}
+
+static void mqtt_disconnect_cb(void* ctx)
+{
+    if (ctx != NULL)
+    {
+        int* disconn_recv = (int*)ctx;
+        *disconn_recv = 1;
+    }
+}
+
+static void DisconnectFromClient(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    if (transport_data->currPacketState != DISCONNECT_TYPE)
+    {
+        if (!transport_data->isDestroyCalled)
+        {
+            OPTIONHANDLER_HANDLE options = xio_retrieveoptions(transport_data->xioTransport);
+            set_saved_tls_options(transport_data, options);
+        }
+        // Ensure the disconnect message is sent
+        if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_CONNECTED)
+        {
+            transport_data->disconnect_recv_flag = 0;
+            (void)mqtt_client_disconnect(transport_data->mqttClient, mqtt_disconnect_cb, &transport_data->disconnect_recv_flag);
+            size_t disconnect_ctr = 0;
+            do
+            {
+                mqtt_client_dowork(transport_data->mqttClient);
+                disconnect_ctr++;
+                ThreadAPI_Sleep(50);
+            } while ((disconnect_ctr < MAX_DISCONNECT_VALUE) && (transport_data->disconnect_recv_flag == 0));
+        }
+        xio_destroy(transport_data->xioTransport);
+        transport_data->xioTransport = NULL;
+
+        transport_data->device_twin_get_sent = false;
+        transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED;
+        transport_data->currPacketState = DISCONNECT_TYPE;
+    }
+}
+
+static void mqtt_error_callback(MQTT_CLIENT_HANDLE handle, MQTT_CLIENT_EVENT_ERROR error, void* callbackCtx)
+{
+    (void)handle;
+    if (callbackCtx != NULL)
+    {
+        PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)callbackCtx;
+        switch (error)
+        {
+            case MQTT_CLIENT_CONNECTION_ERROR:
+            {
+                transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_NO_NETWORK, transport_data->transport_ctx);
+                break;
+            }
+            case MQTT_CLIENT_COMMUNICATION_ERROR:
+            {
+                transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_COMMUNICATION_ERROR, transport_data->transport_ctx);
+                break;
+            }
+            case MQTT_CLIENT_NO_PING_RESPONSE:
+            {
+                LogError("Mqtt Ping Response was not encountered.  Reconnecting device...");
+                break;
+            }
+            case MQTT_CLIENT_PARSE_ERROR:
+            case MQTT_CLIENT_MEMORY_ERROR:
+            case MQTT_CLIENT_UNKNOWN_ERROR:
+            {
+                LogError("INTERNAL ERROR: unexpected error value received %s", MU_ENUM_TO_STRING(MQTT_CLIENT_EVENT_ERROR, error));
+                break;
+            }
+        }
+        if (transport_data->mqttClientStatus != MQTT_CLIENT_STATUS_PENDING_CLOSE)
+        {
+            // We have encountered an mqtt protocol error in an non-closing state
+            // The best course of action is to execute a shutdown of the mqtt/tls/socket
+            // layer and then attempt to reconnect
+            transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_EXECUTE_DISCONNECT;
+        }
+        transport_data->currPacketState = PACKET_TYPE_ERROR;
+        transport_data->device_twin_get_sent = false;
+        if (transport_data->topic_MqttMessage != NULL)
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_TELEMETRY_TOPIC;
+        }
+        if (transport_data->topic_GetState != NULL)
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_GET_REPORTED_STATE_TOPIC;
+        }
+        if (transport_data->topic_NotifyState != NULL)
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_NOTIFICATION_STATE_TOPIC;
+        }
+        if (transport_data->topic_DeviceMethods != NULL)
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_DEVICE_METHOD_TOPIC;
+        }
+        if (transport_data->topic_InputQueue != NULL)
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_INPUT_QUEUE_TOPIC;
+        }
+    }
+    else
+    {
+        LogError("Failure: mqtt called back with null context.");
+    }
+}
+
+static void SubscribeToMqttProtocol(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    if (transport_data->topics_ToSubscribe != UNSUBSCRIBE_FROM_TOPIC)
+    {
+        uint32_t topic_subscription = 0;
+        size_t subscribe_count = 0;
+        uint16_t packet_id = get_next_packet_id(transport_data);
+        SUBSCRIBE_PAYLOAD subscribe[SUBSCRIBE_TOPIC_COUNT];
+        if ((transport_data->topic_MqttMessage != NULL) && (SUBSCRIBE_TELEMETRY_TOPIC & transport_data->topics_ToSubscribe))
+        {
+            subscribe[subscribe_count].subscribeTopic = STRING_c_str(transport_data->topic_MqttMessage);
+            subscribe[subscribe_count].qosReturn = DELIVER_AT_LEAST_ONCE;
+            topic_subscription |= SUBSCRIBE_TELEMETRY_TOPIC;
+            subscribe_count++;
+        }
+        if ((transport_data->topic_GetState != NULL) && (SUBSCRIBE_GET_REPORTED_STATE_TOPIC & transport_data->topics_ToSubscribe))
+        {
+            subscribe[subscribe_count].subscribeTopic = STRING_c_str(transport_data->topic_GetState);
+            subscribe[subscribe_count].qosReturn = DELIVER_AT_MOST_ONCE;
+            topic_subscription |= SUBSCRIBE_GET_REPORTED_STATE_TOPIC;
+            subscribe_count++;
+            transport_data->twin_resp_packet_id = packet_id;
+        }
+        if ((transport_data->topic_NotifyState != NULL) && (SUBSCRIBE_NOTIFICATION_STATE_TOPIC & transport_data->topics_ToSubscribe))
+        {
+            subscribe[subscribe_count].subscribeTopic = STRING_c_str(transport_data->topic_NotifyState);
+            subscribe[subscribe_count].qosReturn = DELIVER_AT_MOST_ONCE;
+            topic_subscription |= SUBSCRIBE_NOTIFICATION_STATE_TOPIC;
+            subscribe_count++;
+        }
+        if ((transport_data->topic_DeviceMethods != NULL) && (SUBSCRIBE_DEVICE_METHOD_TOPIC & transport_data->topics_ToSubscribe))
+        {
+            subscribe[subscribe_count].subscribeTopic = STRING_c_str(transport_data->topic_DeviceMethods);
+            subscribe[subscribe_count].qosReturn = DELIVER_AT_MOST_ONCE;
+            topic_subscription |= SUBSCRIBE_DEVICE_METHOD_TOPIC;
+            subscribe_count++;
+        }
+        if ((transport_data->topic_InputQueue != NULL) && (SUBSCRIBE_INPUT_QUEUE_TOPIC & transport_data->topics_ToSubscribe))
+        {
+            subscribe[subscribe_count].subscribeTopic = STRING_c_str(transport_data->topic_InputQueue);
+            subscribe[subscribe_count].qosReturn = DELIVER_AT_MOST_ONCE;
+            topic_subscription |= SUBSCRIBE_INPUT_QUEUE_TOPIC;
+            subscribe_count++;
+        }
+
+        if (subscribe_count != 0)
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_016: [IoTHubTransport_MQTT_Common_Subscribe shall call mqtt_client_subscribe to subscribe to the Message Topic.] */
+            if (mqtt_client_subscribe(transport_data->mqttClient, packet_id, subscribe, subscribe_count) != 0)
+            {
+                /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_017: [Upon failure IoTHubTransport_MQTT_Common_Subscribe shall return a non-zero value.] */
+                LogError("Failure: mqtt_client_subscribe returned error.");
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_018: [On success IoTHubTransport_MQTT_Common_Subscribe shall return 0.] */
+                transport_data->topics_ToSubscribe &= ~topic_subscription;
+                transport_data->currPacketState = SUBSCRIBE_TYPE;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_017: [Upon failure IoTHubTransport_MQTT_Common_Subscribe shall return a non-zero value.] */
+            LogError("Failure: subscribe_topic is empty.");
+        }
+        transport_data->currPacketState = SUBSCRIBE_TYPE;
+    }
+    else
+    {
+        transport_data->currPacketState = PUBLISH_TYPE;
+    }
+}
+
+static bool RetrieveMessagePayload(IOTHUB_MESSAGE_HANDLE messageHandle, const unsigned char** payload, size_t* length)
+{
+    bool result;
+    IOTHUBMESSAGE_CONTENT_TYPE contentType = IoTHubMessage_GetContentType(messageHandle);
+    if (contentType == IOTHUBMESSAGE_BYTEARRAY)
+    {
+        if (IoTHubMessage_GetByteArray(messageHandle, &(*payload), length) != IOTHUB_MESSAGE_OK)
+        {
+            LogError("Failure result from IoTHubMessage_GetByteArray");
+            result = false;
+            *length = 0;
+        }
+        else
+        {
+            result = true;
+        }
+    }
+    else if (contentType == IOTHUBMESSAGE_STRING)
+    {
+        *payload = (const unsigned char*)IoTHubMessage_GetString(messageHandle);
+        if (*payload == NULL)
+        {
+            LogError("Failure result from IoTHubMessage_GetString");
+            result = false;
+            *length = 0;
+        }
+        else
+        {
+            *length = strlen((const char*)*payload);
+            result = true;
+        }
+    }
+    else
+    {
+        result = false;
+        *length = 0;
+    }
+    return result;
+}
+
+static void process_queued_ack_messages(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    PDLIST_ENTRY current_entry = transport_data->telemetry_waitingForAck.Flink;
+    tickcounter_ms_t current_ms;
+    (void)tickcounter_get_current_ms(transport_data->msgTickCounter, &current_ms);
+    while (current_entry != &transport_data->telemetry_waitingForAck)
+    {
+        MQTT_MESSAGE_DETAILS_LIST* msg_detail_entry = containingRecord(current_entry, MQTT_MESSAGE_DETAILS_LIST, entry);
+        DLIST_ENTRY nextListEntry;
+        nextListEntry.Flink = current_entry->Flink;
+
+        if (((current_ms - msg_detail_entry->msgPublishTime) / 1000) > RESEND_TIMEOUT_VALUE_MIN)
+        {
+            if (msg_detail_entry->retryCount >= MAX_SEND_RECOUNT_LIMIT)
+            {
+                sendMsgComplete(msg_detail_entry->iotHubMessageEntry, transport_data, IOTHUB_CLIENT_CONFIRMATION_MESSAGE_TIMEOUT);
+                (void)DList_RemoveEntryList(current_entry);
+                free(msg_detail_entry);
+
+                DisconnectFromClient(transport_data);
+            }
+            else
+            {
+                // Ensure that the packet state is PUBLISH_TYPE and then attempt to send the message
+                // again
+                if (transport_data->currPacketState == PUBLISH_TYPE)
+                {
+                    size_t messageLength;
+                    const unsigned char* messagePayload = NULL;
+                    if (!RetrieveMessagePayload(msg_detail_entry->iotHubMessageEntry->messageHandle, &messagePayload, &messageLength))
+                    {
+                        (void)DList_RemoveEntryList(current_entry);
+                        sendMsgComplete(msg_detail_entry->iotHubMessageEntry, transport_data, IOTHUB_CLIENT_CONFIRMATION_ERROR);
+                    }
+                    else
+                    {
+                        if (publish_mqtt_telemetry_msg(transport_data, msg_detail_entry, messagePayload, messageLength) != 0)
+                        {
+                            (void)DList_RemoveEntryList(current_entry);
+                            sendMsgComplete(msg_detail_entry->iotHubMessageEntry, transport_data, IOTHUB_CLIENT_CONFIRMATION_ERROR);
+                            free(msg_detail_entry);
+                        }
+                    }
+                }
+                else
+                {
+                    msg_detail_entry->retryCount++;
+                    msg_detail_entry->msgPublishTime = current_ms;
+                }
+            }
+        }
+        current_entry = nextListEntry.Flink;
+    }
+}
+
+static int GetTransportProviderIfNecessary(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    int result;
+
+    if (transport_data->xioTransport == NULL)
+    {
+        // construct address
+        const char* hostAddress = STRING_c_str(transport_data->hostAddress);
+        MQTT_TRANSPORT_PROXY_OPTIONS mqtt_proxy_options;
+
+        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_011: [ If no `proxy_data` option has been set, NULL shall be passed as the argument `mqtt_transport_proxy_options` when calling the function `get_io_transport` passed in `IoTHubTransport_MQTT_Common__Create`. ]*/
+        mqtt_proxy_options.host_address = transport_data->http_proxy_hostname;
+        mqtt_proxy_options.port = transport_data->http_proxy_port;
+        mqtt_proxy_options.username = transport_data->http_proxy_username;
+        mqtt_proxy_options.password = transport_data->http_proxy_password;
+
+        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_010: [ If the `proxy_data` option has been set, the proxy options shall be filled in the argument `mqtt_transport_proxy_options` when calling the function `get_io_transport` passed in `IoTHubTransport_MQTT_Common__Create` to obtain the underlying IO handle. ]*/
+        transport_data->xioTransport = transport_data->get_io_transport(hostAddress, (transport_data->http_proxy_hostname == NULL) ? NULL : &mqtt_proxy_options);
+        if (transport_data->xioTransport == NULL)
+        {
+            LogError("Unable to create the lower level TLS layer.");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (transport_data->saved_tls_options != NULL)
+            {
+                if (OptionHandler_FeedOptions(transport_data->saved_tls_options, transport_data->xioTransport) != OPTIONHANDLER_OK)
+                {
+                    LogError("Failed feeding existing options to new TLS instance.");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    // The tlsio has the options, so our copy can be deleted
+                    set_saved_tls_options(transport_data, NULL);
+                    result = 0;
+                }
+            }
+            else if (IoTHubClient_Auth_Get_Credential_Type(transport_data->authorization_module) == IOTHUB_CREDENTIAL_TYPE_X509_ECC)
+            {
+                if (IoTHubClient_Auth_Set_xio_Certificate(transport_data->authorization_module, transport_data->xioTransport) != 0)
+                {
+                    LogError("Unable to create the lower level TLS layer.");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    result = 0;
+                }
+            }
+            else
+            {
+                result = 0;
+            }
+        }
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+static STRING_HANDLE buildClientId(const char* device_id, const char* module_id)
+{
+    if (module_id == NULL)
+    {
+        return STRING_construct_sprintf("%s", device_id);
+    }
+    else
+    {
+        return STRING_construct_sprintf("%s/%s", device_id, module_id);
+    }
+}
+
+static int SendMqttConnectMsg(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    int result;
+
+    char* sasToken = NULL;
+    result = 0;
+
+    IOTHUB_CREDENTIAL_TYPE cred_type = IoTHubClient_Auth_Get_Credential_Type(transport_data->authorization_module);
+    if (cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY || cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH)
+    {
+        sasToken = IoTHubClient_Auth_Get_SasToken(transport_data->authorization_module, STRING_c_str(transport_data->devicesAndModulesPath), 0, NULL);
+        if (sasToken == NULL)
+        {
+            LogError("failure getting sas token from IoTHubClient_Auth_Get_SasToken.");
+            result = MU_FAILURE;
+        }
+    }
+    else if (cred_type == IOTHUB_CREDENTIAL_TYPE_SAS_TOKEN)
+    {
+        SAS_TOKEN_STATUS token_status = IoTHubClient_Auth_Is_SasToken_Valid(transport_data->authorization_module);
+        if (token_status == SAS_TOKEN_STATUS_INVALID)
+        {
+            transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN, transport_data->transport_ctx);
+            result = MU_FAILURE;
+        }
+        else if (token_status == SAS_TOKEN_STATUS_FAILED)
+        {
+            transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL, transport_data->transport_ctx);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            sasToken = IoTHubClient_Auth_Get_SasToken(transport_data->authorization_module, NULL, 0, NULL);
+            if (sasToken == NULL)
+            {
+                LogError("failure getting sas Token.");
+                result = MU_FAILURE;
+            }
+        }
+    }
+
+    if (result == 0)
+    {
+        if (!transport_data->isProductInfoSet)
+        {
+            // This requires the iothubClientHandle, which sadly the MQTT transport only gets on DoWork, so this code still needs to remain here.
+            // The correct place for this would be in the Create method, but we don't get the client handle there.
+            // Also, when device multiplexing is used, the customer creates the transport directly and explicitly, when the client is still not created.
+            // This will be a major hurdle when we add device multiplexing to MQTT transport.
+
+            STRING_HANDLE clone;
+            const char* product_info = transport_data->transport_callbacks.prod_info_cb(transport_data->transport_ctx);
+            if (product_info == NULL)
+            {
+                clone = STRING_construct_sprintf("%s%%2F%s", CLIENT_DEVICE_TYPE_PREFIX, IOTHUB_SDK_VERSION);
+            }
+            else
+            {
+                clone = URL_EncodeString(product_info);
+            }
+
+            if (clone == NULL)
+            {
+                LogError("Failed obtaining the product info");
+            }
+            else
+            {
+                if (STRING_concat_with_STRING(transport_data->configPassedThroughUsername, clone) != 0)
+                {
+                    LogError("Failed concatenating the product info");
+                }
+                else
+                {
+                    transport_data->isProductInfoSet = true;
+                }
+
+                STRING_delete(clone);
+            }
+        }
+
+        STRING_HANDLE clientId;
+
+        clientId = buildClientId(STRING_c_str(transport_data->device_id), STRING_c_str(transport_data->module_id));
+        if (NULL == clientId)
+        {
+            LogError("Unable to allocate clientId");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            MQTT_CLIENT_OPTIONS options = { 0 };
+            options.clientId = (char*)STRING_c_str(clientId);
+            options.willMessage = NULL;
+            options.username = (char*)STRING_c_str(transport_data->configPassedThroughUsername);
+            if (sasToken != NULL)
+            {
+                options.password = sasToken;
+            }
+            options.keepAliveInterval = transport_data->keepAliveValue;
+            options.useCleanSession = false;
+            options.qualityOfServiceValue = DELIVER_AT_LEAST_ONCE;
+
+            if (GetTransportProviderIfNecessary(transport_data) == 0)
+            {
+                transport_data->conn_attempted = true;
+                if (mqtt_client_connect(transport_data->mqttClient, transport_data->xioTransport, &options) != 0)
+                {
+                    LogError("failure connecting to address %s.", STRING_c_str(transport_data->hostAddress));
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    transport_data->currPacketState = CONNECT_TYPE;
+                    transport_data->isRetryExpiredCallbackSet = false;
+                    (void)tickcounter_get_current_ms(transport_data->msgTickCounter, &transport_data->mqtt_connect_time);
+                    result = 0;
+                }
+            }
+            else
+            {
+                result = MU_FAILURE;
+            }
+
+            if (sasToken != NULL)
+            {
+                free(sasToken);
+            }
+            STRING_delete(clientId);
+        }
+
+    }
+    return result;
+}
+
+static int InitializeConnection(PMQTTTRANSPORT_HANDLE_DATA transport_data)
+{
+    int result = 0;
+
+    // Make sure we're not destroying the object
+    if (!transport_data->isDestroyCalled)
+    {
+        RETRY_ACTION retry_action = RETRY_ACTION_RETRY_LATER;
+
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_007: [ IoTHubTransport_MQTT_Common_DoWork shall try to reconnect according to the current retry policy set ]
+        if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_NOT_CONNECTED && transport_data->isRecoverableError)
+        {
+            // Note: in case retry_control_should_retry fails, the reconnection shall be attempted anyway (defaulting to policy IOTHUB_CLIENT_RETRY_IMMEDIATE).
+            if (retry_control_should_retry(transport_data->retry_control_handle, &retry_action) != 0 || retry_action == RETRY_ACTION_RETRY_NOW)
+            {
+                if (tickcounter_get_current_ms(transport_data->msgTickCounter, &transport_data->connectTick) != 0)
+                {
+                    transport_data->connectFailCount++;
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    ResetConnectionIfNecessary(transport_data);
+
+                    if (SendMqttConnectMsg(transport_data) != 0)
+                    {
+                        transport_data->connectFailCount++;
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_CONNECTING;
+                        transport_data->connectFailCount = 0;
+                        result = 0;
+                    }
+                }
+            }   
+            else if (retry_action == RETRY_ACTION_STOP_RETRYING)
+            {
+                // Set callback if retry expired
+                if (!transport_data->isRetryExpiredCallbackSet)
+                {
+                    transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_RETRY_EXPIRED, transport_data->transport_ctx);
+                    transport_data->isRetryExpiredCallbackSet = true;
+                }
+                result = MU_FAILURE;
+            }
+            else if (retry_action == RETRY_ACTION_RETRY_LATER)
+            {
+                result = MU_FAILURE;
+            }
+        }
+        else if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_EXECUTE_DISCONNECT)
+        {
+            // Need to disconnect from client
+            DisconnectFromClient(transport_data);
+            result = 0;
+        }
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_001: [ IoTHubTransport_MQTT_Common_DoWork shall trigger reconnection if the mqtt_client_connect does not complete within `keepalive` seconds]
+        else if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_CONNECTING)
+        {
+            tickcounter_ms_t current_time;
+            if (tickcounter_get_current_ms(transport_data->msgTickCounter, &current_time) != 0)
+            {
+                LogError("failed verifying MQTT_CLIENT_STATUS_CONNECTING timeout");
+                result = MU_FAILURE;
+            }
+            else if ((current_time - transport_data->mqtt_connect_time) / 1000 > transport_data->connect_timeout_in_sec)
+            {
+                LogError("mqtt_client timed out waiting for CONNACK");
+                transport_data->currPacketState = PACKET_TYPE_ERROR;
+                DisconnectFromClient(transport_data);
+                result = MU_FAILURE;
+            }
+        }
+        else if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_CONNECTED)
+        {
+            // We are connected and not being closed, so does SAS need to reconnect?
+            tickcounter_ms_t current_time;
+            if (tickcounter_get_current_ms(transport_data->msgTickCounter, &current_time) != 0)
+            {
+                transport_data->connectFailCount++;
+                result = MU_FAILURE;
+            }
+            else
+            {
+                IOTHUB_CREDENTIAL_TYPE cred_type = IoTHubClient_Auth_Get_Credential_Type(transport_data->authorization_module);
+                // If the credential type is not an x509 certificate then we shall renew the Sas_Token
+                if (cred_type != IOTHUB_CREDENTIAL_TYPE_X509 && cred_type != IOTHUB_CREDENTIAL_TYPE_X509_ECC)
+                {
+                    size_t sas_token_expiry = IoTHubClient_Auth_Get_SasToken_Expiry(transport_data->authorization_module);
+                    if ((current_time - transport_data->mqtt_connect_time) / 1000 > (sas_token_expiry*SAS_REFRESH_MULTIPLIER))
+                    {
+                        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_058: [ If the sas token has timed out IoTHubTransport_MQTT_Common_DoWork shall disconnect from the mqtt client and destroy the transport information and wait for reconnect. ] */
+                        DisconnectFromClient(transport_data);
+
+                        transport_data->transport_callbacks.connection_status_cb(IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN, transport_data->transport_ctx);
+                        transport_data->currPacketState = UNKNOWN_TYPE;
+                        if (transport_data->topic_MqttMessage != NULL)
+                        {
+                            transport_data->topics_ToSubscribe |= SUBSCRIBE_TELEMETRY_TOPIC;
+                        }
+                        if (transport_data->topic_GetState != NULL)
+                        {
+                            transport_data->topics_ToSubscribe |= SUBSCRIBE_GET_REPORTED_STATE_TOPIC;
+                        }
+                        if (transport_data->topic_NotifyState != NULL)
+                        {
+                            transport_data->topics_ToSubscribe |= SUBSCRIBE_NOTIFICATION_STATE_TOPIC;
+                        }
+                        if (transport_data->topic_DeviceMethods != NULL)
+                        {
+                            transport_data->topics_ToSubscribe |= SUBSCRIBE_DEVICE_METHOD_TOPIC;
+                        }
+                        if (transport_data->topic_InputQueue != NULL)
+                        {
+                            transport_data->topics_ToSubscribe |= SUBSCRIBE_INPUT_QUEUE_TOPIC;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return result;
+}
+
+static STRING_HANDLE buildConfigForUsername(const IOTHUB_CLIENT_CONFIG* upperConfig, const char* moduleId)
+{
+    if (moduleId == NULL)
+    {
+        return STRING_construct_sprintf("%s.%s/%s/?api-version=%s&DeviceClientType=", upperConfig->iotHubName, upperConfig->iotHubSuffix, upperConfig->deviceId, IOTHUB_API_VERSION);
+    }
+    else
+    {
+        return STRING_construct_sprintf("%s.%s/%s/%s/?api-version=%s&DeviceClientType=", upperConfig->iotHubName, upperConfig->iotHubSuffix, upperConfig->deviceId, moduleId, IOTHUB_API_VERSION);
+    }
+}
+
+static STRING_HANDLE buildMqttEventString(const char* device_id, const char* module_id)
+{
+    if (module_id == NULL)
+    {
+        return STRING_construct_sprintf(TOPIC_DEVICE_DEVICE, device_id);
+    }
+    else
+    {
+        return STRING_construct_sprintf(TOPIC_DEVICE_DEVICE_MODULE, device_id, module_id);
+    }
+}
+
+static STRING_HANDLE buildDevicesAndModulesPath(const IOTHUB_CLIENT_CONFIG* upperConfig, const char* moduleId)
+{
+    if (moduleId == NULL)
+    {
+        return STRING_construct_sprintf("%s.%s/devices/%s", upperConfig->iotHubName, upperConfig->iotHubSuffix, upperConfig->deviceId);
+    }
+    else
+    {
+        return STRING_construct_sprintf("%s.%s/devices/%s/modules/%s", upperConfig->iotHubName, upperConfig->iotHubSuffix, upperConfig->deviceId, moduleId);
+    }
+}
+
+static PMQTTTRANSPORT_HANDLE_DATA InitializeTransportHandleData(const IOTHUB_CLIENT_CONFIG* upperConfig, PDLIST_ENTRY waitingToSend, IOTHUB_AUTHORIZATION_HANDLE auth_module, const char* moduleId)
+{
+    PMQTTTRANSPORT_HANDLE_DATA state = (PMQTTTRANSPORT_HANDLE_DATA)malloc(sizeof(MQTTTRANSPORT_HANDLE_DATA));
+    if (state == NULL)
+    {
+        LogError("Could not create MQTT transport state. Memory allocation failed.");
+    }
+    else
+    {
+        memset(state, 0, sizeof(MQTTTRANSPORT_HANDLE_DATA));
+        if ((state->msgTickCounter = tickcounter_create()) == NULL)
+        {
+            LogError("Invalid Argument: iotHubName is empty");
+            free_transport_handle_data(state);
+            state = NULL;
+        }
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_09_005: [ MQTT transport shall use EXPONENTIAL_WITH_BACK_OFF as default retry policy ]
+        else if ((state->retry_control_handle = retry_control_create(DEFAULT_RETRY_POLICY, DEFAULT_RETRY_TIMEOUT_IN_SECONDS)) == NULL)
+        {
+            LogError("Failed creating default retry control");
+            free_transport_handle_data(state);
+            state = NULL;
+        }
+        else if ((state->device_id = STRING_construct(upperConfig->deviceId)) == NULL)
+        {
+            LogError("failure constructing device_id.");
+            free_transport_handle_data(state);
+            state = NULL;
+        }
+        else if ((moduleId != NULL) && ((state->module_id = STRING_construct(moduleId)) == NULL))
+        {
+            LogError("failure constructing module_id.");
+            free_transport_handle_data(state);
+            state = NULL;
+        }
+        else if ((state->devicesAndModulesPath = buildDevicesAndModulesPath(upperConfig, moduleId)) == NULL)
+        {
+            LogError("failure constructing devicesPath.");
+            free_transport_handle_data(state);
+            state = NULL;
+        }
+        else
+        {
+            if ((state->topic_MqttEvent = buildMqttEventString(upperConfig->deviceId, moduleId)) == NULL)
+            {
+                LogError("Could not create topic_MqttEvent for MQTT");
+                free_transport_handle_data(state);
+                state = NULL;
+            }
+            else
+            {
+                state->mqttClient = mqtt_client_init(mqtt_notification_callback, mqtt_operation_complete_callback, state, mqtt_error_callback, state);
+                if (state->mqttClient == NULL)
+                {
+                    LogError("failure initializing mqtt client.");
+                    free_transport_handle_data(state);
+                    state = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_008: [If the upperConfig contains a valid protocolGatewayHostName value the this shall be used for the hostname, otherwise the hostname shall be constructed using the iothubname and iothubSuffix.] */
+                    if (upperConfig->protocolGatewayHostName == NULL)
+                    {
+                        state->hostAddress = STRING_construct_sprintf("%s.%s", upperConfig->iotHubName, upperConfig->iotHubSuffix);
+                    }
+                    else
+                    {
+                        state->hostAddress = STRING_construct(upperConfig->protocolGatewayHostName);
+                    }
+
+                    if (state->hostAddress == NULL)
+                    {
+                        LogError("failure constructing host address.");
+                        free_transport_handle_data(state);
+                        state = NULL;
+                    }
+                    else if ((state->configPassedThroughUsername = buildConfigForUsername(upperConfig, moduleId)) == NULL)
+                    {
+                        free_transport_handle_data(state);
+                        state = NULL;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_010: [IoTHubTransport_MQTT_Common_Create shall allocate memory to save its internal state where all topics, hostname, device_id, device_key, sasTokenSr and client handle shall be saved.] */
+                        DList_InitializeListHead(&(state->telemetry_waitingForAck));
+                        DList_InitializeListHead(&(state->ack_waiting_queue));
+                        DList_InitializeListHead(&(state->pending_get_twin_queue));
+                        state->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED;
+                        state->isRecoverableError = true;
+                        state->packetId = 1;
+                        state->waitingToSend = waitingToSend;
+                        state->currPacketState = CONNECT_TYPE;
+                        state->keepAliveValue = DEFAULT_MQTT_KEEPALIVE;
+                        state->connect_timeout_in_sec = DEFAULT_CONNACK_TIMEOUT;
+                        state->topics_ToSubscribe = UNSUBSCRIBE_FROM_TOPIC;
+                        srand((unsigned int)get_time(NULL));
+                        state->authorization_module = auth_module;
+
+                        state->isDestroyCalled = false;
+                        state->isRetryExpiredCallbackSet = false;
+                        state->isRegistered = false;
+                        state->device_twin_get_sent = false;
+                        state->xioTransport = NULL;
+                        state->portNum = 0;
+                        state->connectFailCount = 0;
+                        state->connectTick = 0;
+                        state->topic_MqttMessage = NULL;
+                        state->topic_GetState = NULL;
+                        state->topic_NotifyState = NULL;
+                        state->topic_DeviceMethods = NULL;
+                        state->topic_InputQueue = NULL;
+                        state->log_trace = state->raw_trace = false;
+                        state->isProductInfoSet = false;
+                        state->auto_url_encode_decode = false;
+                        state->conn_attempted = false;
+                    }
+                }
+            }
+        }
+    }
+    return state;
+}
+
+TRANSPORT_LL_HANDLE IoTHubTransport_MQTT_Common_Create(const IOTHUBTRANSPORT_CONFIG* config, MQTT_GET_IO_TRANSPORT get_io_transport, TRANSPORT_CALLBACKS_INFO* cb_info, void* ctx)
+{
+    PMQTTTRANSPORT_HANDLE_DATA result;
+    size_t deviceIdSize;
+
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_001: [If parameter config is NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_041: [ if get_io_transport is NULL then IoTHubTransport_MQTT_Common_Create shall return NULL. ] */
+    if (config == NULL || get_io_transport == NULL || cb_info == NULL)
+    {
+        LogError("Invalid Argument config: %p, get_io_transport: %p, cb_info: %p", config, get_io_transport, cb_info);
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_002: [If the parameter config's variables upperConfig, auth_module_handle or waitingToSend are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if (config->auth_module_handle == NULL)
+    {
+        LogError("Invalid Argument: auth_module_handle is NULL)");
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_002: [If the parameter config's variables upperConfig or waitingToSend are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_003: [If the upperConfig's variables deviceId, both deviceKey and deviceSasToken, iotHubName, protocol, or iotHubSuffix are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_03_003: [If both deviceKey & deviceSasToken fields are NOT NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if (config->upperConfig == NULL ||
+        config->upperConfig->protocol == NULL ||
+        config->upperConfig->deviceId == NULL ||
+        ((config->upperConfig->deviceKey != NULL) && (config->upperConfig->deviceSasToken != NULL)) ||
+        config->upperConfig->iotHubName == NULL ||
+        config->upperConfig->iotHubSuffix == NULL)
+    {
+        LogError("Invalid Argument: upperConfig structure contains an invalid parameter");
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_002: [If the parameter config's variables upperConfig, auth_module_handle or waitingToSend are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if (config->waitingToSend == NULL)
+    {
+        LogError("Invalid Argument: waitingToSend is NULL)");
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_006: [If the upperConfig's variables deviceId is an empty strings or length is greater then 128 then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if (((deviceIdSize = strlen(config->upperConfig->deviceId)) > 128U) || (deviceIdSize == 0))
+    {
+        LogError("Invalid Argument: DeviceId is of an invalid size");
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_003: [If the upperConfig's variables deviceId, both deviceKey and deviceSasToken, iotHubName, protocol, or iotHubSuffix are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if ((config->upperConfig->deviceKey != NULL) && (strlen(config->upperConfig->deviceKey) == 0))
+    {
+        LogError("Invalid Argument: deviceKey is empty");
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_003: [If the upperConfig's variables deviceId, both deviceKey and deviceSasToken, iotHubName, protocol, or iotHubSuffix are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if ((config->upperConfig->deviceSasToken != NULL) && (strlen(config->upperConfig->deviceSasToken) == 0))
+    {
+        LogError("Invalid Argument: deviceSasToken is empty");
+        result = NULL;
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_003: [If the upperConfig's variables deviceId, deviceKey, iotHubName, protocol, or iotHubSuffix are NULL then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    else if (strlen(config->upperConfig->iotHubName) == 0)
+    {
+        LogError("Invalid Argument: iotHubName is empty");
+        result = NULL;
+    }
+    else if (IoTHub_Transport_ValidateCallbacks(cb_info) != 0)
+    {
+        LogError("failure checking transport callbacks");
+        result = NULL;
+    }
+    else
+    {
+        result = InitializeTransportHandleData(config->upperConfig, config->waitingToSend, config->auth_module_handle, config->moduleId);
+        if (result != NULL)
+        {
+            result->get_io_transport = get_io_transport;
+            result->http_proxy_hostname = NULL;
+            result->http_proxy_username = NULL;
+            result->http_proxy_password = NULL;
+
+            result->transport_ctx = ctx;
+            memcpy(&result->transport_callbacks, cb_info, sizeof(TRANSPORT_CALLBACKS_INFO));
+        }
+    }
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_009: [If any error is encountered then IoTHubTransport_MQTT_Common_Create shall return NULL.] */
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_011: [On Success IoTHubTransport_MQTT_Common_Create shall return a non-NULL value.] */
+    return result;
+}
+
+void IoTHubTransport_MQTT_Common_Destroy(TRANSPORT_LL_HANDLE handle)
+{
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_012: [IoTHubTransport_MQTT_Common_Destroy shall do nothing if parameter handle is NULL.] */
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    if (transport_data != NULL)
+    {
+        transport_data->isDestroyCalled = true;
+
+        DisconnectFromClient(transport_data);
+
+        //Empty the Waiting for Ack Messages.
+        while (!DList_IsListEmpty(&transport_data->telemetry_waitingForAck))
+        {
+            PDLIST_ENTRY currentEntry = DList_RemoveHeadList(&transport_data->telemetry_waitingForAck);
+            MQTT_MESSAGE_DETAILS_LIST* mqttMsgEntry = containingRecord(currentEntry, MQTT_MESSAGE_DETAILS_LIST, entry);
+            sendMsgComplete(mqttMsgEntry->iotHubMessageEntry, transport_data, IOTHUB_CLIENT_CONFIRMATION_BECAUSE_DESTROY);
+            free(mqttMsgEntry);
+        }
+        while (!DList_IsListEmpty(&transport_data->ack_waiting_queue))
+        {
+            PDLIST_ENTRY currentEntry = DList_RemoveHeadList(&transport_data->ack_waiting_queue);
+            MQTT_DEVICE_TWIN_ITEM* mqtt_device_twin = containingRecord(currentEntry, MQTT_DEVICE_TWIN_ITEM, entry);
+
+            if (mqtt_device_twin->userCallback == NULL)
+            {
+                transport_data->transport_callbacks.twin_rpt_state_complete_cb(mqtt_device_twin->iothub_msg_id, STATUS_CODE_TIMEOUT_VALUE, transport_data->transport_ctx);
+            }
+            else
+            {
+                mqtt_device_twin->userCallback(DEVICE_TWIN_UPDATE_COMPLETE, NULL, 0, mqtt_device_twin->userContext);
+            }
+
+            destroy_device_twin_get_message(mqtt_device_twin);
+        }
+        while (!DList_IsListEmpty(&transport_data->pending_get_twin_queue))
+        {
+            PDLIST_ENTRY currentEntry = DList_RemoveHeadList(&transport_data->pending_get_twin_queue);
+
+            MQTT_DEVICE_TWIN_ITEM* mqtt_device_twin = containingRecord(currentEntry, MQTT_DEVICE_TWIN_ITEM, entry);
+
+            mqtt_device_twin->userCallback(DEVICE_TWIN_UPDATE_COMPLETE, NULL, 0, mqtt_device_twin->userContext);
+
+            destroy_device_twin_get_message(mqtt_device_twin);
+        }
+
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_014: [IoTHubTransport_MQTT_Common_Destroy shall free all the resources currently in use.] */
+        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_012: [ `IoTHubTransport_MQTT_Common_Destroy` shall free the stored proxy options. ]*/
+        free_transport_handle_data(transport_data);
+    }
+}
+
+int IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin(TRANSPORT_LL_HANDLE handle)
+{
+    int result;
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    if (transport_data == NULL)
+    {
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_042: [If the parameter handle is NULL than IoTHubTransport_MQTT_Common_Subscribe shall return a non-zero value.] */
+        LogError("Invalid handle parameter. NULL.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (transport_data->topic_GetState == NULL)
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_044: [IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin shall construct the get state topic string and the notify state topic string.] */
+            transport_data->topic_GetState = STRING_construct(TOPIC_GET_DESIRED_STATE);
+            if (transport_data->topic_GetState == NULL)
+            {
+                /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_046: [Upon failure IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin shall return a non-zero value.] */
+                LogError("Failure: unable constructing reported state topic");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_047: [On success IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin shall return 0.] */
+                transport_data->topics_ToSubscribe |= SUBSCRIBE_GET_REPORTED_STATE_TOPIC;
+                result = 0;
+            }
+        }
+        else
+        {
+            result = 0;
+        }
+        if (result == 0)
+        {
+            changeStateToSubscribeIfAllowed(transport_data);
+        }
+    }
+    return result;
+}
+
+void IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin(TRANSPORT_LL_HANDLE handle)
+{
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_048: [If the parameter handle is NULL than IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin shall do nothing.] */
+    if (transport_data != NULL)
+    {
+        if (transport_data->topic_GetState != NULL)
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_049: [If subscribe_state is set to IOTHUB_DEVICE_TWIN_DESIRED_STATE then IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin shall unsubscribe from the topic_GetState to the mqtt client.] */
+            transport_data->topics_ToSubscribe &= ~SUBSCRIBE_GET_REPORTED_STATE_TOPIC;
+            STRING_delete(transport_data->topic_GetState);
+            transport_data->topic_GetState = NULL;
+        }
+        if (transport_data->topic_NotifyState != NULL)
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_050: [If subscribe_state is set to IOTHUB_DEVICE_TWIN_NOTIFICATION_STATE then IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin shall unsubscribe from the topic_NotifyState to the mqtt client.] */
+            transport_data->topics_ToSubscribe &= ~SUBSCRIBE_NOTIFICATION_STATE_TOPIC;
+            STRING_delete(transport_data->topic_NotifyState);
+            transport_data->topic_NotifyState = NULL;
+        }
+    }
+    else
+    {
+        LogError("Invalid argument to unsubscribe (handle is NULL).");
+    }
+}
+
+IOTHUB_CLIENT_RESULT IoTHubTransport_MQTT_Common_GetTwinAsync(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK completionCallback, void* callbackContext)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    // Codes_SRS_IOTHUB_MQTT_TRANSPORT_09_001: [ If `handle` or `completionCallback` are `NULL` than `IoTHubTransport_MQTT_Common_GetTwinAsync` shall return IOTHUB_CLIENT_INVALID_ARG. ]
+    if (handle == NULL || completionCallback == NULL)
+    {
+        LogError("Invalid argument (handle=%p, completionCallback=%p)", handle, completionCallback);
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+        MQTT_DEVICE_TWIN_ITEM* mqtt_info;
+
+        if ((mqtt_info = create_device_twin_get_message(transport_data)) == NULL)
+        {
+            LogError("Failed creating the device twin get request message");
+            // Codes_SRS_IOTHUB_MQTT_TRANSPORT_09_003: [ If any failure occurs, IoTHubTransport_MQTT_Common_GetTwinAsync shall return IOTHUB_CLIENT_ERROR ]
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else if (tickcounter_get_current_ms(transport_data->msgTickCounter, &mqtt_info->msgEnqueueTime) != 0)
+        {
+            LogError("Failed setting the get twin request enqueue time");
+            destroy_device_twin_get_message(mqtt_info);
+            // Codes_SRS_IOTHUB_MQTT_TRANSPORT_09_003: [ If any failure occurs, IoTHubTransport_MQTT_Common_GetTwinAsync shall return IOTHUB_CLIENT_ERROR ]
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            mqtt_info->userCallback = completionCallback;
+            mqtt_info->userContext = callbackContext;
+
+            // Codes_SRS_IOTHUB_MQTT_TRANSPORT_09_002: [ The request shall be queued to be sent when the transport is connected, through DoWork ]
+            DList_InsertTailList(&transport_data->pending_get_twin_queue, &mqtt_info->entry);
+
+            // Codes_SRS_IOTHUB_MQTT_TRANSPORT_09_004: [ If no failure occurs, IoTHubTransport_MQTT_Common_GetTwinAsync shall return IOTHUB_CLIENT_OK ]
+            result = IOTHUB_CLIENT_OK;
+        }
+    }
+
+    return result;
+}
+
+int IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod(IOTHUB_DEVICE_HANDLE handle)
+{
+    int result;
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+
+    if (transport_data == NULL)
+    {
+        /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_001 : [If the parameter handle is NULL than IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall return a non - zero value.]*/
+        LogError("Invalid handle parameter. NULL.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (transport_data->topic_DeviceMethods == NULL)
+        {
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_004 : [IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall construct the DEVICE_METHOD topic string for subscribe.]*/
+            transport_data->topic_DeviceMethods = STRING_construct(TOPIC_DEVICE_METHOD_SUBSCRIBE);
+            if (transport_data->topic_DeviceMethods == NULL)
+            {
+                /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_006 : [Upon failure IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall return a non - zero value.]*/
+                LogError("Failure: unable constructing device method subscribe topic");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_003 : [IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall set the signaling flag for DEVICE_METHOD topic for the receiver's topic list. ]*/
+                transport_data->topics_ToSubscribe |= SUBSCRIBE_DEVICE_METHOD_TOPIC;
+                result = 0;
+            }
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_002 : [If the MQTT transport has been previously subscribed to DEVICE_METHOD topic IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall do nothing and return 0.]*/
+            result = 0;
+        }
+
+        if (result == 0)
+        {
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_005 : [IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall schedule the send of the subscription.]*/
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_007 : [On success IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod shall return 0.]*/
+            changeStateToSubscribeIfAllowed(transport_data);
+        }
+    }
+    return result;
+}
+
+void IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod(TRANSPORT_LL_HANDLE handle)
+{
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_008 : [If the parameter handle is NULL than IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod shall do nothing and return.]*/
+    if (transport_data != NULL)
+    {
+        /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_009 : [If the MQTT transport has not been subscribed to DEVICE_METHOD topic IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod shall do nothing and return.]*/
+        if (transport_data->topic_DeviceMethods != NULL)
+        {
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_010 : [IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod shall construct the DEVICE_METHOD topic string for unsubscribe.]*/
+            const char* unsubscribe[1];
+            unsubscribe[0] = STRING_c_str(transport_data->topic_DeviceMethods);
+
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_011 : [IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod shall send the unsubscribe.]*/
+            if (mqtt_client_unsubscribe(transport_data->mqttClient, get_next_packet_id(transport_data), unsubscribe, 1) != 0)
+            {
+                LogError("Failure calling mqtt_client_unsubscribe");
+            }
+
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_12_012 : [IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod shall removes the signaling flag for DEVICE_METHOD topic from the receiver's topic list. ]*/
+            STRING_delete(transport_data->topic_DeviceMethods);
+            transport_data->topic_DeviceMethods = NULL;
+            transport_data->topics_ToSubscribe &= ~SUBSCRIBE_DEVICE_METHOD_TOPIC;
+        }
+    }
+    else
+    {
+        LogError("Invalid argument to unsubscribe (NULL).");
+    }
+}
+
+int IoTHubTransport_MQTT_Common_DeviceMethod_Response(TRANSPORT_LL_HANDLE handle, METHOD_HANDLE methodId, const unsigned char* response, size_t respSize, int status)
+{
+    int result;
+    MQTTTRANSPORT_HANDLE_DATA* transport_data = (MQTTTRANSPORT_HANDLE_DATA*)handle;
+    if (transport_data != NULL)
+    {
+        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_042: [ IoTHubTransport_MQTT_Common_DeviceMethod_Response shall publish an mqtt message for the device method response. ] */
+        DEVICE_METHOD_INFO* dev_method_info = (DEVICE_METHOD_INFO*)methodId;
+        if (dev_method_info == NULL)
+        {
+            LogError("Failure: DEVICE_METHOD_INFO was NULL");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (publish_device_method_message(transport_data, status, dev_method_info->request_id, response, respSize) != 0)
+            {
+                /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_051: [ If any error is encountered, IoTHubTransport_MQTT_Common_DeviceMethod_Response shall return a non-zero value. ] */
+                LogError("Failure: publishing device method response");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                result = 0;
+            }
+            STRING_delete(dev_method_info->request_id);
+            free(dev_method_info);
+        }
+    }
+    else
+    {
+        /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_041: [ If the parameter handle is NULL than IoTHubTransport_MQTT_Common_DeviceMethod_Response shall return a non-zero value. ] */
+        result = MU_FAILURE;
+        LogError("Failure: invalid TRANSPORT_LL_HANDLE parameter specified");
+    }
+    return result;
+}
+
+static STRING_HANDLE buildTopicMqttMessage(const char* device_id, const char* module_id)
+{
+    if (module_id == NULL)
+    {
+        return STRING_construct_sprintf(TOPIC_DEVICE_MSG, device_id);
+    }
+    else
+    {
+        return STRING_construct_sprintf(TOPIC_DEVICE_MODULE_MSG, device_id, module_id);
+    }
+}
+
+int IoTHubTransport_MQTT_Common_Subscribe(TRANSPORT_LL_HANDLE handle)
+{
+    int result;
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    if (transport_data == NULL)
+    {
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_015: [If parameter handle is NULL than IoTHubTransport_MQTT_Common_Subscribe shall return a non-zero value.] */
+        LogError("Invalid handle parameter. NULL.");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Code_SRS_IOTHUB_MQTT_TRANSPORT_07_016: [IoTHubTransport_MQTT_Common_Subscribe shall set a flag to enable mqtt_client_subscribe to be called to subscribe to the Message Topic.] */
+        transport_data->topic_MqttMessage = buildTopicMqttMessage(STRING_c_str(transport_data->device_id), STRING_c_str(transport_data->module_id));
+        if (transport_data->topic_MqttMessage == NULL)
+        {
+            LogError("Failure constructing Message Topic");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            transport_data->topics_ToSubscribe |= SUBSCRIBE_TELEMETRY_TOPIC;
+            /* Code_SRS_IOTHUB_MQTT_TRANSPORT_07_035: [If current packet state is not CONNACT, DISCONNECT_TYPE, or PACKET_TYPE_ERROR then IoTHubTransport_MQTT_Common_Subscribe shall set the packet state to SUBSCRIBE_TYPE.]*/
+            changeStateToSubscribeIfAllowed(transport_data);
+            result = 0;
+        }
+    }
+    return result;
+}
+
+void IoTHubTransport_MQTT_Common_Unsubscribe(TRANSPORT_LL_HANDLE handle)
+{
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_019: [If parameter handle is NULL then IoTHubTransport_MQTT_Common_Unsubscribe shall do nothing.] */
+    if (transport_data != NULL)
+    {
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_020: [IoTHubTransport_MQTT_Common_Unsubscribe shall call mqtt_client_unsubscribe to unsubscribe the mqtt message topic.] */
+        const char* unsubscribe[1];
+        unsubscribe[0] = STRING_c_str(transport_data->topic_MqttMessage);
+        if (mqtt_client_unsubscribe(transport_data->mqttClient, get_next_packet_id(transport_data), unsubscribe, 1) != 0)
+        {
+            LogError("Failure calling mqtt_client_unsubscribe");
+        }
+        STRING_delete(transport_data->topic_MqttMessage);
+        transport_data->topic_MqttMessage = NULL;
+        transport_data->topics_ToSubscribe &= ~SUBSCRIBE_TELEMETRY_TOPIC;
+    }
+    else
+    {
+        LogError("Invalid argument to unsubscribe (NULL).");
+    }
+}
+
+IOTHUB_PROCESS_ITEM_RESULT IoTHubTransport_MQTT_Common_ProcessItem(TRANSPORT_LL_HANDLE handle, IOTHUB_IDENTITY_TYPE item_type, IOTHUB_IDENTITY_INFO* iothub_item)
+{
+    IOTHUB_PROCESS_ITEM_RESULT result;
+    /* Codes_SRS_IOTHUBCLIENT_LL_07_001: [ If handle or iothub_item are NULL then IoTHubTransport_MQTT_Common_ProcessItem shall return IOTHUB_PROCESS_ERROR. ]*/
+    if (handle == NULL || iothub_item == NULL)
+    {
+        LogError("Invalid handle parameter iothub_item=%p", iothub_item);
+        result = IOTHUB_PROCESS_ERROR;
+    }
+    else
+    {
+        PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+
+        if (transport_data->currPacketState == PUBLISH_TYPE)
+        {
+            // Ensure the reported property suback has been received
+            if (item_type == IOTHUB_TYPE_DEVICE_TWIN && transport_data->twin_resp_sub_recv)
+            {
+                MQTT_DEVICE_TWIN_ITEM* mqtt_info = (MQTT_DEVICE_TWIN_ITEM*)malloc(sizeof(MQTT_DEVICE_TWIN_ITEM));
+                if (mqtt_info == NULL)
+                {
+                    /* Codes_SRS_IOTHUBCLIENT_LL_07_004: [ If any errors are encountered IoTHubTransport_MQTT_Common_ProcessItem shall return IOTHUB_PROCESS_ERROR. ]*/
+                    result = IOTHUB_PROCESS_ERROR;
+                }
+                else
+                {
+                    /*Codes_SRS_IOTHUBCLIENT_LL_07_003: [ IoTHubTransport_MQTT_Common_ProcessItem shall publish a message to the mqtt protocol with the message topic for the message type.]*/
+                    mqtt_info->iothub_type = item_type;
+                    mqtt_info->iothub_msg_id = iothub_item->device_twin->item_id;
+                    mqtt_info->retryCount = 0;
+                    mqtt_info->userCallback = NULL;
+                    mqtt_info->userContext = NULL;
+                    mqtt_info->msgEnqueueTime = 0;
+
+                    /* Codes_SRS_IOTHUBCLIENT_LL_07_005: [ If successful IoTHubTransport_MQTT_Common_ProcessItem shall add mqtt info structure acknowledgement queue. ] */
+                    DList_InsertTailList(&transport_data->ack_waiting_queue, &mqtt_info->entry);
+
+                    if (publish_device_twin_message(transport_data, iothub_item->device_twin, mqtt_info) != 0)
+                    {
+                        DList_RemoveEntryList(&mqtt_info->entry);
+
+                        free(mqtt_info);
+                        /* Codes_SRS_IOTHUBCLIENT_LL_07_004: [ If any errors are encountered IoTHubTransport_MQTT_Common_ProcessItem shall return IOTHUB_PROCESS_ERROR. ]*/
+                        result = IOTHUB_PROCESS_ERROR;
+                    }
+                    else
+                    {
+                        result = IOTHUB_PROCESS_OK;
+                    }
+                }
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUBCLIENT_LL_07_006: [ If the item_type is not a supported type IoTHubTransport_MQTT_Common_ProcessItem shall return IOTHUB_PROCESS_CONTINUE. ]*/
+                result = IOTHUB_PROCESS_CONTINUE;
+            }
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUBCLIENT_LL_07_002: [ If the mqtt is not ready to publish messages IoTHubTransport_MQTT_Common_ProcessItem shall return IOTHUB_PROCESS_NOT_CONNECTED. ] */
+            result = IOTHUB_PROCESS_NOT_CONNECTED;
+        }
+    }
+    return result;
+}
+
+/* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_054: [ IoTHubTransport_MQTT_Common_DoWork shall subscribe to the Notification and get_state Topics if they are defined. ] */
+void IoTHubTransport_MQTT_Common_DoWork(TRANSPORT_LL_HANDLE handle)
+{
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_026: [IoTHubTransport_MQTT_Common_DoWork shall do nothing if parameter handle and/or iotHubClientHandle is NULL.] */
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    if (transport_data != NULL)
+    {
+        if (InitializeConnection(transport_data) == 0)
+        {
+            if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_PENDING_CLOSE)
+            {
+                mqtt_client_disconnect(transport_data->mqttClient, NULL, NULL);
+                transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED;
+            }
+            else if (transport_data->currPacketState == CONNACK_TYPE || transport_data->currPacketState == SUBSCRIBE_TYPE)
+            {
+                SubscribeToMqttProtocol(transport_data);
+            }
+            else if (transport_data->currPacketState == SUBACK_TYPE)
+            {
+                if ((transport_data->topic_NotifyState != NULL || transport_data->topic_GetState != NULL) &&
+                    !transport_data->device_twin_get_sent)
+                {
+                    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_055: [ IoTHubTransport_MQTT_Common_DoWork shall send a device twin get property message upon successfully retrieving a SUBACK on device twin topics. ] */
+                    MQTT_DEVICE_TWIN_ITEM* mqtt_info;
+
+                    if ((mqtt_info = create_device_twin_get_message(transport_data)) == NULL)
+                    {
+                        LogError("Failure: could not create message for twin get command");
+                    }
+                    else if (publish_device_twin_get_message(transport_data, mqtt_info) == 0)
+                    {
+                        transport_data->device_twin_get_sent = true;
+                    }
+                    else
+                    {
+                        LogError("Failure: sending device twin get property command.");
+                        destroy_device_twin_get_message(mqtt_info);
+                    }
+                }
+                // Publish can be called now
+                transport_data->currPacketState = PUBLISH_TYPE;
+            }
+            else if (transport_data->currPacketState == PUBLISH_TYPE)
+            {
+                PDLIST_ENTRY currentListEntry = transport_data->waitingToSend->Flink;
+                /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_027: [IoTHubTransport_MQTT_Common_DoWork shall inspect the "waitingToSend" DLIST passed in config structure.] */
+                while (currentListEntry != transport_data->waitingToSend)
+                {
+                    IOTHUB_MESSAGE_LIST* iothubMsgList = containingRecord(currentListEntry, IOTHUB_MESSAGE_LIST, entry);
+                    DLIST_ENTRY savedFromCurrentListEntry;
+                    savedFromCurrentListEntry.Flink = currentListEntry->Flink;
+
+                    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_027: [IoTHubTransport_MQTT_Common_DoWork shall inspect the "waitingToSend" DLIST passed in config structure.] */
+                    size_t messageLength;
+                    const unsigned char* messagePayload = NULL;
+                    if (!RetrieveMessagePayload(iothubMsgList->messageHandle, &messagePayload, &messageLength))
+                    {
+                        (void)(DList_RemoveEntryList(currentListEntry));
+                        sendMsgComplete(iothubMsgList, transport_data, IOTHUB_CLIENT_CONFIRMATION_ERROR);
+                        LogError("Failure result from IoTHubMessage_GetData");
+                    }
+                    else
+                    {
+                        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_029: [IoTHubTransport_MQTT_Common_DoWork shall create a MQTT_MESSAGE_HANDLE and pass this to a call to mqtt_client_publish.] */
+                        MQTT_MESSAGE_DETAILS_LIST* mqttMsgEntry = (MQTT_MESSAGE_DETAILS_LIST*)malloc(sizeof(MQTT_MESSAGE_DETAILS_LIST));
+                        if (mqttMsgEntry == NULL)
+                        {
+                            LogError("Allocation Error: Failure allocating MQTT Message Detail List.");
+                        }
+                        else
+                        {
+                            mqttMsgEntry->retryCount = 0;
+                            mqttMsgEntry->iotHubMessageEntry = iothubMsgList;
+                            mqttMsgEntry->packet_id = get_next_packet_id(transport_data);
+                            if (publish_mqtt_telemetry_msg(transport_data, mqttMsgEntry, messagePayload, messageLength) != 0)
+                            {
+                                (void)(DList_RemoveEntryList(currentListEntry));
+                                sendMsgComplete(iothubMsgList, transport_data, IOTHUB_CLIENT_CONFIRMATION_ERROR);
+                                free(mqttMsgEntry);
+                            }
+                            else
+                            {
+                                // Remove the message from the waiting queue ...
+                                (void)(DList_RemoveEntryList(currentListEntry));
+                                // and add it to the ack queue
+                                DList_InsertTailList(&(transport_data->telemetry_waitingForAck), &(mqttMsgEntry->entry));
+                            }
+                        }
+                    }
+                    currentListEntry = savedFromCurrentListEntry.Flink;
+                }
+
+                sendPendingGetTwinRequests(transport_data);
+            }
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_030: [IoTHubTransport_MQTT_Common_DoWork shall call mqtt_client_dowork everytime it is called if it is connected.] */
+            mqtt_client_dowork(transport_data->mqttClient);
+        }
+
+        // Check the ack messages timeouts
+        process_queued_ack_messages(transport_data);
+        removeExpiredPendingGetTwinRequests(transport_data);
+        removeExpiredGetTwinRequestsPendingAck(transport_data);
+    }
+}
+
+IOTHUB_CLIENT_RESULT IoTHubTransport_MQTT_Common_GetSendStatus(TRANSPORT_LL_HANDLE handle, IOTHUB_CLIENT_STATUS *iotHubClientStatus)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    if (handle == NULL || iotHubClientStatus == NULL)
+    {
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_023: [IoTHubTransport_MQTT_Common_GetSendStatus shall return IOTHUB_CLIENT_INVALID_ARG if called with NULL parameter.] */
+        LogError("invalid arument.");
+        result = IOTHUB_CLIENT_INVALID_ARG;
+    }
+    else
+    {
+        MQTTTRANSPORT_HANDLE_DATA* handleData = (MQTTTRANSPORT_HANDLE_DATA*)handle;
+        if (!DList_IsListEmpty(handleData->waitingToSend) || !DList_IsListEmpty(&(handleData->telemetry_waitingForAck)))
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_025: [IoTHubTransport_MQTT_Common_GetSendStatus shall return IOTHUB_CLIENT_OK and status IOTHUB_CLIENT_SEND_STATUS_BUSY if there are currently event items to be sent or being sent.] */
+            *iotHubClientStatus = IOTHUB_CLIENT_SEND_STATUS_BUSY;
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_024: [IoTHubTransport_MQTT_Common_GetSendStatus shall return IOTHUB_CLIENT_OK and status IOTHUB_CLIENT_SEND_STATUS_IDLE if there are currently no event items to be sent or being sent.] */
+            *iotHubClientStatus = IOTHUB_CLIENT_SEND_STATUS_IDLE;
+        }
+        result = IOTHUB_CLIENT_OK;
+    }
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubTransport_MQTT_Common_SetOption(TRANSPORT_LL_HANDLE handle, const char* option, const void* value)
+{
+    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_021: [If any parameter is NULL then IoTHubTransport_MQTT_Common_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    IOTHUB_CLIENT_RESULT result;
+    if (
+        (handle == NULL) ||
+        (option == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("invalid parameter (NULL) passed to IoTHubTransport_MQTT_Common_SetOption.");
+    }
+    else
+    {
+        MQTTTRANSPORT_HANDLE_DATA* transport_data = (MQTTTRANSPORT_HANDLE_DATA*)handle;
+
+        IOTHUB_CREDENTIAL_TYPE cred_type = IoTHubClient_Auth_Get_Credential_Type(transport_data->authorization_module);
+
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_031: [If the option parameter is set to "logtrace" then the value shall be a bool_ptr and the value will determine if the mqtt client log is on or off.] */
+        if (strcmp(OPTION_LOG_TRACE, option) == 0)
+        {
+            transport_data->log_trace = *((bool*)value);
+            mqtt_client_set_trace(transport_data->mqttClient, transport_data->log_trace, transport_data->raw_trace);
+            result = IOTHUB_CLIENT_OK;
+        }
+        else if (strcmp("rawlogtrace", option) == 0)
+        {
+            transport_data->raw_trace = *((bool*)value);
+            mqtt_client_set_trace(transport_data->mqttClient, transport_data->log_trace, transport_data->raw_trace);
+            result = IOTHUB_CLIENT_OK;
+        }
+        else if (strcmp(OPTION_AUTO_URL_ENCODE_DECODE, option) == 0)
+        {
+            transport_data->auto_url_encode_decode = *((bool*)value);
+            result = IOTHUB_CLIENT_OK;
+        }
+        else if (strcmp(OPTION_CONNECTION_TIMEOUT, option) == 0)
+        {
+            int* connection_time = (int*)value;
+            if (*connection_time != transport_data->connect_timeout_in_sec)
+            {
+                transport_data->connect_timeout_in_sec = (uint16_t)(*connection_time);
+            }
+            result = IOTHUB_CLIENT_OK;
+        }
+        else if (strcmp(OPTION_KEEP_ALIVE, option) == 0)
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_036: [If the option parameter is set to "keepalive" then the value shall be a int_ptr and the value will determine the mqtt keepalive time that is set for pings.] */
+            int* keepAliveOption = (int*)value;
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_037 : [If the option parameter is set to supplied int_ptr keepalive is the same value as the existing keepalive then IoTHubTransport_MQTT_Common_SetOption shall do nothing.] */
+            if (*keepAliveOption != transport_data->keepAliveValue)
+            {
+                transport_data->keepAliveValue = (uint16_t)(*keepAliveOption);
+                if (transport_data->mqttClientStatus != MQTT_CLIENT_STATUS_NOT_CONNECTED)
+                {
+                    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_038: [If the client is connected when the keepalive is set then IoTHubTransport_MQTT_Common_SetOption shall disconnect and reconnect with the specified keepalive value.] */
+                    DisconnectFromClient(transport_data);
+                }
+            }
+            result = IOTHUB_CLIENT_OK;
+        }
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_039: [If the option parameter is set to "x509certificate" then the value shall be a const char of the certificate to be used for x509.] */
+        else if ((strcmp(OPTION_X509_CERT, option) == 0) && (cred_type != IOTHUB_CREDENTIAL_TYPE_X509 && cred_type != IOTHUB_CREDENTIAL_TYPE_UNKNOWN))
+        {
+            LogError("x509certificate specified, but authentication method is not x509");
+            result = IOTHUB_CLIENT_INVALID_ARG;
+        }
+        /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_040: [If the option parameter is set to "x509privatekey" then the value shall be a const char of the RSA Private Key to be used for x509.] */
+        else if ((strcmp(OPTION_X509_PRIVATE_KEY, option) == 0) && (cred_type != IOTHUB_CREDENTIAL_TYPE_X509 && cred_type != IOTHUB_CREDENTIAL_TYPE_UNKNOWN))
+        {
+            LogError("x509privatekey specified, but authentication method is not x509");
+            result = IOTHUB_CLIENT_INVALID_ARG;
+        }
+        else if (strcmp(OPTION_HTTP_PROXY, option) == 0)
+        {
+            /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_001: [ If `option` is `proxy_data`, `value` shall be used as an `HTTP_PROXY_OPTIONS*`. ]*/
+            HTTP_PROXY_OPTIONS* proxy_options = (HTTP_PROXY_OPTIONS*)value;
+
+            if (transport_data->xioTransport != NULL)
+            {
+                /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_007: [ If the underlying IO has already been created, then `IoTHubTransport_MQTT_Common_SetOption` shall fail and return `IOTHUB_CLIENT_ERROR`. ]*/
+                LogError("Cannot set proxy option once the underlying IO is created");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else if (proxy_options->host_address == NULL)
+            {
+                /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_003: [ If `host_address` is NULL, `IoTHubTransport_MQTT_Common_SetOption` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+                LogError("NULL host_address in proxy options");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_006: [ If only one of `username` and `password` is NULL, `IoTHubTransport_MQTT_Common_SetOption` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/
+            else if (((proxy_options->username == NULL) || (proxy_options->password == NULL)) &&
+                (proxy_options->username != proxy_options->password))
+            {
+                LogError("Only one of username and password for proxy settings was NULL");
+                result = IOTHUB_CLIENT_INVALID_ARG;
+            }
+            else
+            {
+                char* copied_proxy_hostname = NULL;
+                char* copied_proxy_username = NULL;
+                char* copied_proxy_password = NULL;
+
+                /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_002: [ The fields `host_address`, `port`, `username` and `password` shall be saved for later used (needed when creating the underlying IO to be used by the transport). ]*/
+                transport_data->http_proxy_port = proxy_options->port;
+                if (mallocAndStrcpy_s(&copied_proxy_hostname, proxy_options->host_address) != 0)
+                {
+                    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_004: [ If copying `host_address`, `username` or `password` fails, `IoTHubTransport_MQTT_Common_SetOption` shall fail and return `IOTHUB_CLIENT_ERROR`. ]*/
+                    LogError("Cannot copy HTTP proxy hostname");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_005: [ `username` and `password` shall be allowed to be NULL. ]*/
+                else if ((proxy_options->username != NULL) && (mallocAndStrcpy_s(&copied_proxy_username, proxy_options->username) != 0))
+                {
+                    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_004: [ If copying `host_address`, `username` or `password` fails, `IoTHubTransport_MQTT_Common_SetOption` shall fail and return `IOTHUB_CLIENT_ERROR`. ]*/
+                    free(copied_proxy_hostname);
+                    LogError("Cannot copy HTTP proxy username");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_005: [ `username` and `password` shall be allowed to be NULL. ]*/
+                else if ((proxy_options->password != NULL) && (mallocAndStrcpy_s(&copied_proxy_password, proxy_options->password) != 0))
+                {
+                    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_004: [ If copying `host_address`, `username` or `password` fails, `IoTHubTransport_MQTT_Common_SetOption` shall fail and return `IOTHUB_CLIENT_ERROR`. ]*/
+                    if (copied_proxy_username != NULL)
+                    {
+                        free(copied_proxy_username);
+                    }
+                    free(copied_proxy_hostname);
+                    LogError("Cannot copy HTTP proxy password");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_009: [ When setting the proxy options succeeds any previously saved proxy options shall be freed. ]*/
+                    free_proxy_data(transport_data);
+
+                    transport_data->http_proxy_hostname = copied_proxy_hostname;
+                    transport_data->http_proxy_username = copied_proxy_username;
+                    transport_data->http_proxy_password = copied_proxy_password;
+
+                    /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_01_008: [ If setting the `proxy_data` option suceeds, `IoTHubTransport_MQTT_Common_SetOption` shall return `IOTHUB_CLIENT_OK` ]*/
+                    result = IOTHUB_CLIENT_OK;
+                }
+            }
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_039: [If the option parameter is set to "x509certificate" then the value shall be a const char of the certificate to be used for x509.] */
+            if (((strcmp(OPTION_X509_CERT, option) == 0) || (strcmp(OPTION_X509_PRIVATE_KEY, option) == 0)) && (cred_type != IOTHUB_CREDENTIAL_TYPE_X509))
+            {
+                IoTHubClient_Auth_Set_x509_Type(transport_data->authorization_module, true);
+            }
+
+            /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_032: [IoTHubTransport_MQTT_Common_SetOption shall pass down the option to xio_setoption if the option parameter is not a known option string for the MQTT transport.] */
+            if (GetTransportProviderIfNecessary(transport_data) == 0)
+            {
+                if (xio_setoption(transport_data->xioTransport, option, value) == 0)
+                {
+                    result = IOTHUB_CLIENT_OK;
+                }
+                else
+                {
+                    /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_132: [IoTHubTransport_MQTT_Common_SetOption shall return IOTHUB_CLIENT_INVALID_ARG xio_setoption fails] */
+                    result = IOTHUB_CLIENT_INVALID_ARG;
+                }
+            }
+            else
+            {
+                result = IOTHUB_CLIENT_ERROR;
+            }
+        }
+    }
+    return result;
+}
+
+static bool check_module_ids_equal(const char* transportModuleId, const char* deviceModuleId)
+{
+    if ((transportModuleId != NULL) && (deviceModuleId == NULL))
+    {
+        return false;
+    }
+    else if ((transportModuleId == NULL) && (deviceModuleId != NULL))
+    {
+        return false;
+    }
+    else if ((transportModuleId == NULL) && (deviceModuleId == NULL))
+    {
+        return true;
+    }
+    else
+    {
+        return (0 == strcmp(transportModuleId, deviceModuleId));
+    }
+}
+
+TRANSPORT_LL_HANDLE IoTHubTransport_MQTT_Common_Register(TRANSPORT_LL_HANDLE handle, const IOTHUB_DEVICE_CONFIG* device, PDLIST_ENTRY waitingToSend)
+{
+    TRANSPORT_LL_HANDLE result = NULL;
+
+    // Codes_SRS_IOTHUB_MQTT_TRANSPORT_17_001: [ IoTHubTransport_MQTT_Common_Register shall return NULL if the TRANSPORT_LL_HANDLE is NULL.]
+    // Codes_SRS_IOTHUB_MQTT_TRANSPORT_17_002: [ IoTHubTransport_MQTT_Common_Register shall return NULL if device or waitingToSend are NULL.]
+    if ((handle == NULL) || (device == NULL) || (waitingToSend == NULL))
+    {
+        LogError("IoTHubTransport_MQTT_Common_Register: handle, device or waitingToSend is NULL.");
+        result = NULL;
+    }
+    else
+    {
+        MQTTTRANSPORT_HANDLE_DATA* transport_data = (MQTTTRANSPORT_HANDLE_DATA*)handle;
+
+        // Codes_SRS_IOTHUB_MQTT_TRANSPORT_03_001: [ IoTHubTransport_MQTT_Common_Register shall return NULL if deviceId, or both deviceKey and deviceSasToken are NULL.]
+        if (device->deviceId == NULL)
+        {
+            LogError("IoTHubTransport_MQTT_Common_Register: deviceId is NULL.");
+            result = NULL;
+        }
+        // Codes_SRS_IOTHUB_MQTT_TRANSPORT_03_002: [ IoTHubTransport_MQTT_Common_Register shall return NULL if both deviceKey and deviceSasToken are provided.]
+        else if ((device->deviceKey != NULL) && (device->deviceSasToken != NULL))
+        {
+            LogError("IoTHubTransport_MQTT_Common_Register: Both deviceKey and deviceSasToken are defined. Only one can be used.");
+            result = NULL;
+        }
+        else
+        {
+            // Codes_SRS_IOTHUB_MQTT_TRANSPORT_17_003: [ IoTHubTransport_MQTT_Common_Register shall return NULL if deviceId or deviceKey do not match the deviceId and deviceKey passed in during IoTHubTransport_MQTT_Common_Create.]
+            if (strcmp(STRING_c_str(transport_data->device_id), device->deviceId) != 0)
+            {
+                LogError("IoTHubTransport_MQTT_Common_Register: deviceId does not match.");
+                result = NULL;
+            }
+            else if (!check_module_ids_equal(STRING_c_str(transport_data->module_id), device->moduleId))
+            {
+                LogError("IoTHubTransport_MQTT_Common_Register: moduleId does not match.");
+                result = NULL;
+            }
+            // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_43_001: [ IoTHubTransport_MQTT_Common_Register shall return NULL if deviceKey is NULL when credential type is IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY ]
+            else if (IoTHubClient_Auth_Get_Credential_Type(transport_data->authorization_module) == IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY &&
+                ((device->deviceKey == NULL) || (strcmp(IoTHubClient_Auth_Get_DeviceKey(transport_data->authorization_module), device->deviceKey) != 0)))
+            {
+                LogError("IoTHubTransport_MQTT_Common_Register: deviceKey does not match.");
+                result = NULL;
+            }
+            else
+            {
+                if (transport_data->isRegistered == true)
+                {
+                    LogError("Transport already has device registered by id: [%s]", device->deviceId);
+                    result = NULL;
+                }
+                else
+                {
+                    transport_data->isRegistered = true;
+                    // Codes_SRS_IOTHUB_MQTT_TRANSPORT_17_004: [ IoTHubTransport_MQTT_Common_Register shall return the TRANSPORT_LL_HANDLE as the TRANSPORT_LL_HANDLE. ]
+                    result = (TRANSPORT_LL_HANDLE)handle;
+                }
+            }
+        }
+    }
+
+    return result;
+}
+
+void IoTHubTransport_MQTT_Common_Unregister(TRANSPORT_LL_HANDLE deviceHandle)
+{
+    // Codes_SRS_IOTHUB_MQTT_TRANSPORT_17_005: [ If deviceHandle is NULL `IoTHubTransport_MQTT_Common_Unregister` shall do nothing. ]
+    if (deviceHandle != NULL)
+    {
+        MQTTTRANSPORT_HANDLE_DATA* transport_data = (MQTTTRANSPORT_HANDLE_DATA*)deviceHandle;
+
+        transport_data->isRegistered = false;
+    }
+}
+
+STRING_HANDLE IoTHubTransport_MQTT_Common_GetHostname(TRANSPORT_LL_HANDLE handle)
+{
+    STRING_HANDLE result;
+    /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_02_001: [ If handle is NULL then IoTHubTransport_MQTT_Common_GetHostname shall fail and return NULL. ]*/
+    if (handle == NULL)
+    {
+        result = NULL;
+    }
+    /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_02_002: [ Otherwise IoTHubTransport_MQTT_Common_GetHostname shall return a non-NULL STRING_HANDLE containg the hostname. ]*/
+    else if ((result = STRING_clone(((MQTTTRANSPORT_HANDLE_DATA*)(handle))->hostAddress)) == NULL)
+    {
+        LogError("Cannot provide the target host name (STRING_clone failed).");
+    }
+
+    return result;
+}
+
+IOTHUB_CLIENT_RESULT IoTHubTransport_MQTT_Common_SendMessageDisposition(MESSAGE_CALLBACK_INFO* message_data, IOTHUBMESSAGE_DISPOSITION_RESULT disposition)
+{
+    (void)disposition;
+
+    IOTHUB_CLIENT_RESULT result;
+    if (message_data)
+    {
+        if (message_data->messageHandle)
+        {
+            IoTHubMessage_Destroy(message_data->messageHandle);
+            result = IOTHUB_CLIENT_OK;
+        }
+        else
+        {
+            /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_10_002: [If any of the messageData fields are NULL, IoTHubTransport_MQTT_Common_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+            LogError("message handle is NULL");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        free(message_data);
+    }
+    else
+    {
+        /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_10_001: [If messageData is NULL, IoTHubTransport_MQTT_Common_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR. ]*/
+        LogError("message_data is NULL");
+        result = IOTHUB_CLIENT_ERROR;
+    }
+    return result;
+}
+
+
+int IoTHubTransport_MQTT_Common_Subscribe_InputQueue(TRANSPORT_LL_HANDLE handle)
+{
+    int result;
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    if (transport_data == NULL)
+    {
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_066: [ If parameter handle is NULL than IoTHubTransport_MQTT_Common_Subscribe_InputQueue shall return a non-zero value.]
+        LogError("Invalid handle parameter. NULL.");
+        result = MU_FAILURE;
+    }
+    else if (transport_data->module_id == NULL)
+    {
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_073: [ If module ID is not set on the transpont, IoTHubTransport_MQTT_Common_Unsubscribe_InputQueue shall fail.]
+        LogError("ModuleID must be specified for input queues. NULL.");
+        result = MU_FAILURE;
+    }
+    else if ((transport_data->topic_InputQueue == NULL) &&
+        (transport_data->topic_InputQueue = STRING_construct_sprintf(TOPIC_INPUT_QUEUE_NAME, STRING_c_str(transport_data->device_id), STRING_c_str(transport_data->module_id))) == NULL)
+    {
+        LogError("Failure constructing Message Topic");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_067: [ IoTHubTransport_MQTT_Common_Subscribe_InputQueue shall set a flag to enable mqtt_client_subscribe to be called to subscribe to the input queue Message Topic.]
+        transport_data->topics_ToSubscribe |= SUBSCRIBE_INPUT_QUEUE_TOPIC;
+        changeStateToSubscribeIfAllowed(transport_data);
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_070: [ On success IoTHubTransport_MQTT_Common_Subscribe_InputQueue shall return 0.]
+        result = 0;
+    }
+    return result;
+}
+
+void IoTHubTransport_MQTT_Common_Unsubscribe_InputQueue(TRANSPORT_LL_HANDLE handle)
+{
+    PMQTTTRANSPORT_HANDLE_DATA transport_data = (PMQTTTRANSPORT_HANDLE_DATA)handle;
+    if ((transport_data != NULL) && (transport_data->topic_InputQueue != NULL))
+    {
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_072: [ IoTHubTransport_MQTT_Common_Unsubscribe_InputQueue shall call mqtt_client_unsubscribe to unsubscribe the mqtt input queue message topic.]
+        const char* unsubscribe[1];
+        unsubscribe[0] = STRING_c_str(transport_data->topic_InputQueue);
+        if (mqtt_client_unsubscribe(transport_data->mqttClient, get_next_packet_id(transport_data), unsubscribe, 1) != 0)
+        {
+            LogError("Failure calling mqtt_client_unsubscribe");
+        }
+        STRING_delete(transport_data->topic_InputQueue);
+        transport_data->topic_InputQueue = NULL;
+        transport_data->topics_ToSubscribe &= ~SUBSCRIBE_INPUT_QUEUE_TOPIC;
+    }
+    else
+    {
+        // Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_31_071: [ If parameter handle is NULL then IoTHubTransport_MQTT_Common_Unsubscribe_InputQueue shall do nothing.]
+        LogError("Invalid argument to unsubscribe input queue (NULL).");
+    }
+}
+
+int IoTHubTransport_MQTT_SetCallbackContext(TRANSPORT_LL_HANDLE handle, void* ctx)
+{
+    int result;
+    if (handle == NULL)
+    {
+        LogError("Invalid parameter specified handle: %p", handle);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MQTTTRANSPORT_HANDLE_DATA* transport_data = (MQTTTRANSPORT_HANDLE_DATA*)handle;
+        transport_data->transport_ctx = ctx;
+        result = 0;
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransporthttp.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransporthttp.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransporthttp.c	(revision 389)
@@ -0,0 +1,2540 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/gballoc.h"
+
+#include <time.h>
+#include "iothub_client_options.h"
+#include "iothub_client_version.h"
+#include "iothub_transport_ll.h"
+#include "iothubtransporthttp.h"
+#include "internal/iothub_client_private.h"
+#include "internal/iothubtransport.h"
+#include "internal/iothub_transport_ll_private.h"
+
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/httpapiexsas.h"
+#include "azure_c_shared_utility/urlencode.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/httpapiex.h"
+#include "azure_c_shared_utility/httpapiexsas.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/azure_base64.h"
+#include "azure_c_shared_utility/doublylinkedlist.h"
+#include "azure_c_shared_utility/vector.h"
+#include "azure_c_shared_utility/httpheaders.h"
+#include "azure_c_shared_utility/agenttime.h"
+
+#define IOTHUB_APP_PREFIX "iothub-app-"
+static const char* IOTHUB_MESSAGE_ID = "iothub-messageid";
+static const char* IOTHUB_CORRELATION_ID = "iothub-correlationid";
+static const char* IOTHUB_CONTENT_TYPE_D2C = "iothub-contenttype";
+static const char* IOTHUB_CONTENT_ENCODING_D2C = "iothub-contentencoding";
+static const char* IOTHUB_CONTENT_TYPE_C2D = "ContentType";
+static const char* IOTHUB_CONTENT_ENCODING_C2D = "ContentEncoding";
+
+static const char* IOTHUB_AUTH_HEADER_VALUE = "Authorization";
+
+#define CONTENT_TYPE "Content-Type"
+#define APPLICATION_OCTET_STREAM "application/octet-stream"
+#define APPLICATION_VND_MICROSOFT_IOTHUB_JSON "application/vnd.microsoft.iothub.json"
+#define API_VERSION "?api-version=2016-11-14"
+#define EVENT_ENDPOINT "/messages/events"
+#define MESSAGE_ENDPOINT_HTTP "/messages/devicebound"
+#define MESSAGE_ENDPOINT_HTTP_ETAG "/messages/devicebound/"
+
+/*DEFAULT_GETMINIMUMPOLLINGTIME is the minimum time in seconds allowed between 2 consecutive GET issues to the service (GET=fetch messages)*/
+/*the default is 25 minutes*/
+#define DEFAULT_GETMINIMUMPOLLINGTIME ((unsigned int)25*60)
+
+#define MAXIMUM_MESSAGE_SIZE (255*1024-1)
+#define MAXIMUM_PAYLOAD_OVERHEAD 384
+#define MAXIMUM_PROPERTY_OVERHEAD 16
+
+/*forward declaration*/
+static int appendMapToJSON(STRING_HANDLE existing, const char* const* keys, const char* const* values, size_t count);
+
+typedef struct HTTPTRANSPORT_HANDLE_DATA_TAG
+{
+    STRING_HANDLE hostName;
+    HTTPAPIEX_HANDLE httpApiExHandle;
+    bool doBatchedTransfers;
+    unsigned int getMinimumPollingTime;
+    VECTOR_HANDLE perDeviceList;
+
+    TRANSPORT_CALLBACKS_INFO transport_callbacks;
+    void* transport_ctx;
+
+}HTTPTRANSPORT_HANDLE_DATA;
+
+typedef struct HTTPTRANSPORT_PERDEVICE_DATA_TAG
+{
+    HTTPTRANSPORT_HANDLE_DATA* transportHandle;
+
+    STRING_HANDLE deviceId;
+    STRING_HANDLE deviceKey;
+    STRING_HANDLE deviceSasToken;
+    STRING_HANDLE eventHTTPrelativePath;
+    STRING_HANDLE messageHTTPrelativePath;
+    HTTP_HEADERS_HANDLE eventHTTPrequestHeaders;
+    HTTP_HEADERS_HANDLE messageHTTPrequestHeaders;
+    STRING_HANDLE abandonHTTPrelativePathBegin;
+    HTTPAPIEX_SAS_HANDLE sasObject;
+    bool DoWork_PullMessage;
+    time_t lastPollTime;
+    bool isFirstPoll;
+
+    void* device_transport_ctx;
+    PDLIST_ENTRY waitingToSend;
+    DLIST_ENTRY eventConfirmations; /*holds items for event confirmations*/
+} HTTPTRANSPORT_PERDEVICE_DATA;
+
+typedef struct MESSAGE_DISPOSITION_CONTEXT_TAG
+{
+    HTTPTRANSPORT_HANDLE_DATA* handleData;
+    HTTPTRANSPORT_PERDEVICE_DATA* deviceData;
+    char* etagValue;
+} MESSAGE_DISPOSITION_CONTEXT;
+
+MU_DEFINE_ENUM_STRINGS(IOTHUBMESSAGE_DISPOSITION_RESULT, IOTHUBMESSAGE_DISPOSITION_RESULT_VALUES);
+
+static void destroy_eventHTTPrelativePath(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->eventHTTPrelativePath);
+    handleData->eventHTTPrelativePath = NULL;
+}
+
+static bool create_eventHTTPrelativePath(HTTPTRANSPORT_PERDEVICE_DATA* handleData, const char * deviceId)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_017: [ IoTHubTransportHttp_Register shall create an immutable string (further called "event HTTP relative path") from the following pieces: "/devices/" + URL_ENCODED(deviceId) + "/messages/events" + APIVERSION. ]*/
+    bool result;
+    STRING_HANDLE urlEncodedDeviceId;
+    handleData->eventHTTPrelativePath = STRING_construct("/devices/");
+    if (handleData->eventHTTPrelativePath == NULL)
+    {
+        LogError("STRING_construct failed.");
+        result = false;
+    }
+    else
+    {
+        if (!(
+            ((urlEncodedDeviceId = URL_EncodeString(deviceId)) != NULL) &&
+            (STRING_concat_with_STRING(handleData->eventHTTPrelativePath, urlEncodedDeviceId) == 0) &&
+            (STRING_concat(handleData->eventHTTPrelativePath, EVENT_ENDPOINT API_VERSION) == 0)
+            ))
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_018: [ If creating the string fail for any reason then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+            destroy_eventHTTPrelativePath(handleData);
+            LogError("Creating HTTP event relative path failed.");
+            result = false;
+        }
+        else
+        {
+            result = true;
+        }
+        STRING_delete(urlEncodedDeviceId);
+    }
+    return result;
+}
+
+static int retrieve_message_properties(HTTP_HEADERS_HANDLE resp_header, IOTHUB_MESSAGE_HANDLE recv_msg)
+{
+    int result = 0;
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_090: [All the HTTP headers of the form iothub-app-name:somecontent shall be transformed in message properties {name, somecontent}.]*/
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_091: [The HTTP header of iothub-messageid shall be set in the MessageId.]*/
+    size_t nHeaders;
+    if (HTTPHeaders_GetHeaderCount(resp_header, &nHeaders) != HTTP_HEADERS_OK)
+    {
+        LogError("unable to get the count of HTTP headers");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MAP_HANDLE properties = (nHeaders > 0) ? IoTHubMessage_Properties(recv_msg) : NULL;
+        for (size_t index = 0; index < nHeaders; index++)
+        {
+            char* completeHeader;
+            if (HTTPHeaders_GetHeader(resp_header, index, &completeHeader) != HTTP_HEADERS_OK)
+            {
+                LogError("Failed getting header %lu", (unsigned long)index);
+                result = MU_FAILURE;
+                break;
+            }
+            else
+            {
+                char* colon_pos;
+                if (strncmp(IOTHUB_APP_PREFIX, completeHeader, strlen(IOTHUB_APP_PREFIX)) == 0)
+                {
+                    /*looks like a property headers*/
+                    /*there's a guaranteed ':' in the completeHeader, by HTTP_HEADERS module*/
+                    colon_pos = strchr(completeHeader, ':');
+                    if (colon_pos != NULL)
+                    {
+                        *colon_pos = '\0'; /*cut it down*/
+                        if (Map_AddOrUpdate(properties, completeHeader + strlen(IOTHUB_APP_PREFIX), colon_pos + 2) != MAP_OK) /*whereIsColon+1 is a space because HTTPEHADERS outputs a ": " between name and value*/
+                        {
+                            free(completeHeader);
+                            result = MU_FAILURE;
+                            break;
+                        }
+                    }
+                }
+                else if (strncmp(IOTHUB_MESSAGE_ID, completeHeader, strlen(IOTHUB_MESSAGE_ID)) == 0)
+                {
+                    char* whereIsColon = strchr(completeHeader, ':');
+                    if (whereIsColon != NULL)
+                    {
+                        *whereIsColon = '\0'; /*cut it down*/
+                        if (IoTHubMessage_SetMessageId(recv_msg, whereIsColon + 2) != IOTHUB_MESSAGE_OK)
+                        {
+                            free(completeHeader);
+                            result = MU_FAILURE;
+                            break;
+                        }
+                    }
+                }
+                else if (strncmp(IOTHUB_CORRELATION_ID, completeHeader, strlen(IOTHUB_CORRELATION_ID)) == 0)
+                {
+                    char* whereIsColon = strchr(completeHeader, ':');
+                    if (whereIsColon != NULL)
+                    {
+                        *whereIsColon = '\0'; /*cut it down*/
+                        if (IoTHubMessage_SetCorrelationId(recv_msg, whereIsColon + 2) != IOTHUB_MESSAGE_OK)
+                        {
+                            free(completeHeader);
+                            result = MU_FAILURE;
+                            break;
+                        }
+                    }
+                }
+                // Codes_SRS_TRANSPORTMULTITHTTP_09_003: [ The HTTP header value of `ContentType` shall be set in the `IoTHubMessage_SetContentTypeSystemProperty`. ]
+                else if (strncmp(IOTHUB_CONTENT_TYPE_C2D, completeHeader, strlen(IOTHUB_CONTENT_TYPE_C2D)) == 0)
+                {
+                    char* whereIsColon = strchr(completeHeader, ':');
+                    if (whereIsColon != NULL)
+                    {
+                        *whereIsColon = '\0'; /*cut it down*/
+                        if (IoTHubMessage_SetContentTypeSystemProperty(recv_msg, whereIsColon + 2) != IOTHUB_MESSAGE_OK)
+                        {
+                            LogError("Failed setting IoTHubMessage content-type");
+                            result = MU_FAILURE;
+                            break;
+                        }
+                    }
+                }
+                // Codes_SRS_TRANSPORTMULTITHTTP_09_004: [ The HTTP header value of `ContentEncoding` shall be set in the `IoTHub_SetContentEncoding`. ]
+                else if (strncmp(IOTHUB_CONTENT_ENCODING_C2D, completeHeader, strlen(IOTHUB_CONTENT_ENCODING_C2D)) == 0)
+                {
+                    char* whereIsColon = strchr(completeHeader, ':');
+                    if (whereIsColon != NULL)
+                    {
+                        *whereIsColon = '\0'; /*cut it down*/
+                        if (IoTHubMessage_SetContentEncodingSystemProperty(recv_msg, whereIsColon + 2) != IOTHUB_MESSAGE_OK)
+                        {
+                            LogError("Failed setting IoTHubMessage content-encoding");
+                            break;
+                        }
+                    }
+                }
+                free(completeHeader);
+            }
+        }
+    }
+    return result;
+}
+
+static int set_system_properties(IOTHUB_MESSAGE_LIST* message, HTTP_HEADERS_HANDLE headers)
+{
+    int result;
+    const char* msgId;
+    const char* corrId;
+    const char* content_type;
+    const char* contentEncoding;
+
+    // Add the Message Id and the Correlation Id
+    msgId = IoTHubMessage_GetMessageId(message->messageHandle);
+    if (msgId != NULL && HTTPHeaders_ReplaceHeaderNameValuePair(headers, IOTHUB_MESSAGE_ID, msgId) != HTTP_HEADERS_OK)
+    {
+        LogError("unable to HTTPHeaders_ReplaceHeaderNameValuePair");
+        result = __LINE__;
+    }
+    else if ((corrId = IoTHubMessage_GetCorrelationId(message->messageHandle)) != NULL && HTTPHeaders_ReplaceHeaderNameValuePair(headers, IOTHUB_CORRELATION_ID, corrId) != HTTP_HEADERS_OK)
+    {
+        LogError("unable to HTTPHeaders_ReplaceHeaderNameValuePair");
+        result = __LINE__;
+    }
+    // Codes_SRS_TRANSPORTMULTITHTTP_09_001: [ If the IoTHubMessage being sent contains property `content-type` it shall be added to the HTTP headers as "iothub-contenttype":"value". ]
+    else if ((content_type = IoTHubMessage_GetContentTypeSystemProperty(message->messageHandle)) != NULL && HTTPHeaders_ReplaceHeaderNameValuePair(headers, IOTHUB_CONTENT_TYPE_D2C, content_type) != HTTP_HEADERS_OK)
+    {
+        LogError("unable to HTTPHeaders_ReplaceHeaderNameValuePair (content-type)");
+        result = __LINE__;
+    }
+    // Codes_SRS_TRANSPORTMULTITHTTP_09_002: [ If the IoTHubMessage being sent contains property `content-encoding` it shall be added to the HTTP headers as "iothub-contentencoding":"value". ]
+    else if ((contentEncoding = IoTHubMessage_GetContentEncodingSystemProperty(message->messageHandle)) != NULL && HTTPHeaders_ReplaceHeaderNameValuePair(headers, IOTHUB_CONTENT_ENCODING_D2C, contentEncoding) != HTTP_HEADERS_OK)
+    {
+        LogError("unable to HTTPHeaders_ReplaceHeaderNameValuePair (content-encoding)");
+        result = __LINE__;
+    }
+    else
+    {
+        result = 0;
+    }
+    return result;
+}
+
+static bool set_message_properties(IOTHUB_MESSAGE_LIST* message, size_t* msg_size, HTTP_HEADERS_HANDLE headers, HTTPTRANSPORT_HANDLE_DATA* handleData, HTTPTRANSPORT_PERDEVICE_DATA* deviceData)
+{
+    bool result = true;
+
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_078: [Every message property "property":"value" shall be added to the HTTP headers as an individual header "iothub-app-property":"value".] */
+    MAP_HANDLE map = IoTHubMessage_Properties(message->messageHandle);
+    const char*const* keys;
+    const char*const* values;
+    size_t count;
+    if (Map_GetInternals(map, &keys, &values, &count) != MAP_OK)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_079: [If any HTTP header operation fails, _DoWork shall advance to the next action.] */
+        LogError("unable to Map_GetInternals");
+        result = false;
+    }
+    else
+    {
+        for (size_t index = 0; index < count; index++)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_074: [Every property name shall add  to the message size the length of the property name + the length of the property value + 16 bytes.] */
+            *msg_size += (strlen(values[index]) + strlen(keys[index]) + MAXIMUM_PROPERTY_OVERHEAD);
+            if (*msg_size > MAXIMUM_MESSAGE_SIZE)
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_072: [The message size shall be limited to 255KB -1 bytes.] */
+                PDLIST_ENTRY head = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                DList_InsertTailList(&(deviceData->eventConfirmations), head);
+                handleData->transport_callbacks.send_complete_cb(&(deviceData->eventConfirmations), IOTHUB_CLIENT_CONFIRMATION_ERROR, deviceData->device_transport_ctx); // takes care of emptying the list too
+                result = false;
+                break;
+            }
+            else
+            {
+                STRING_HANDLE app_construct = STRING_construct_sprintf("%s%s", IOTHUB_APP_PREFIX, keys[index]);
+                if (app_construct == NULL)
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_079: [If any HTTP header operation fails, _DoWork shall advance to the next action.] */
+                    LogError("Unable to construct app header");
+                    result = false;
+                    break;
+                }
+                else
+                {
+                    if (HTTPHeaders_ReplaceHeaderNameValuePair(headers, STRING_c_str(app_construct), values[index]) != HTTP_HEADERS_OK)
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_079: [If any HTTP header operation fails, _DoWork shall advance to the next action.] */
+                        LogError("Unable to add app properties to http header");
+                        result = false;
+                        break;
+                    }
+                    STRING_delete(app_construct);
+                }
+            }
+        }
+    }
+    return result;
+}
+
+static void destroy_messageHTTPrelativePath(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->messageHTTPrelativePath);
+    handleData->messageHTTPrelativePath = NULL;
+}
+
+static bool create_messageHTTPrelativePath(HTTPTRANSPORT_PERDEVICE_DATA* handleData, const char * deviceId)
+{
+    bool result;
+    handleData->messageHTTPrelativePath = STRING_construct("/devices/");
+    if (handleData->messageHTTPrelativePath == NULL)
+    {
+        LogError("STRING_construct failed.");
+        result = false;
+    }
+    else
+    {
+        STRING_HANDLE urlEncodedDeviceId;
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_019: [ IoTHubTransportHttp_Register shall create an immutable string (further called "message HTTP relative path") from the following pieces: "/devices/" + URL_ENCODED(deviceId) + "/messages/devicebound" + APIVERSION. ]*/
+        if (!(
+            ((urlEncodedDeviceId = URL_EncodeString(deviceId)) != NULL) &&
+            (STRING_concat_with_STRING(handleData->messageHTTPrelativePath, urlEncodedDeviceId) == 0) &&
+            (STRING_concat(handleData->messageHTTPrelativePath, MESSAGE_ENDPOINT_HTTP API_VERSION) == 0)
+            ))
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_020: [ If creating the message HTTP relative path fails, then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+            LogError("Creating HTTP message relative path failed.");
+            result = false;
+            destroy_messageHTTPrelativePath(handleData);
+        }
+        else
+        {
+            result = true;
+        }
+        STRING_delete(urlEncodedDeviceId);
+    }
+
+    return result;
+}
+
+static void destroy_eventHTTPrequestHeaders(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    HTTPHeaders_Free(handleData->eventHTTPrequestHeaders);
+    handleData->eventHTTPrequestHeaders = NULL;
+}
+
+static HTTP_HEADERS_RESULT addUserAgentHeaderInfo(HTTPTRANSPORT_HANDLE_DATA* transport_data, HTTP_HEADERS_HANDLE eventHTTPrequestHeaders)
+{
+    HTTP_HEADERS_RESULT result;
+    const char* product_info = transport_data->transport_callbacks.prod_info_cb(transport_data->transport_ctx);
+    if (product_info == NULL)
+    {
+        result = HTTPHeaders_AddHeaderNameValuePair(eventHTTPrequestHeaders, "User-Agent", CLIENT_DEVICE_TYPE_PREFIX CLIENT_DEVICE_BACKSLASH IOTHUB_SDK_VERSION);
+    }
+    else
+    {
+        result = HTTPHeaders_AddHeaderNameValuePair(eventHTTPrequestHeaders, "User-Agent", product_info);
+    }
+    return result;
+}
+
+static bool create_eventHTTPrequestHeaders(HTTPTRANSPORT_PERDEVICE_DATA* handleData, HTTPTRANSPORT_HANDLE_DATA* transport_data, const char * deviceId, bool is_x509_used)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_021: [ IoTHubTransportHttp_Register shall create a set of HTTP headers (further called "event HTTP request headers") consisting of the following fixed field names and values: "iothub-to":"/devices/" + URL_ENCODED(deviceId) + "/messages/events"; "Authorization":""
+    "Accept":"application/json"
+    "Connection":"Keep-Alive" ]*/
+    bool result;
+    handleData->eventHTTPrequestHeaders = HTTPHeaders_Alloc();
+    if (handleData->eventHTTPrequestHeaders == NULL)
+    {
+        LogError("HTTPHeaders_Alloc failed.");
+        result = false;
+    }
+    else
+    {
+        STRING_HANDLE temp = STRING_construct("/devices/");
+        if (temp == NULL)
+        {
+            LogError("STRING_construct failed.");
+            result = false;
+            destroy_eventHTTPrequestHeaders(handleData);
+        }
+        else
+        {
+            STRING_HANDLE urlEncodedDeviceId;
+            if (!(
+                ((urlEncodedDeviceId = URL_EncodeString(deviceId)) != NULL) &&
+                (STRING_concat_with_STRING(temp, urlEncodedDeviceId) == 0) &&
+                (STRING_concat(temp, EVENT_ENDPOINT) == 0)
+                ))
+            {
+                LogError("deviceId construction failed.");
+                result = false;
+                destroy_eventHTTPrequestHeaders(handleData);
+            }
+            else
+            {
+                if (!(
+                    (HTTPHeaders_AddHeaderNameValuePair(handleData->eventHTTPrequestHeaders, "iothub-to", STRING_c_str(temp)) == HTTP_HEADERS_OK) &&
+                    (is_x509_used || (HTTPHeaders_AddHeaderNameValuePair(handleData->eventHTTPrequestHeaders, IOTHUB_AUTH_HEADER_VALUE, " ") == HTTP_HEADERS_OK)) &&
+                    (HTTPHeaders_AddHeaderNameValuePair(handleData->eventHTTPrequestHeaders, "Accept", "application/json") == HTTP_HEADERS_OK) &&
+                    (HTTPHeaders_AddHeaderNameValuePair(handleData->eventHTTPrequestHeaders, "Connection", "Keep-Alive") == HTTP_HEADERS_OK) &&
+                    (addUserAgentHeaderInfo(transport_data, handleData->eventHTTPrequestHeaders) == HTTP_HEADERS_OK)
+                    ))
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_022: [ If creating the event HTTP request headers fails, then IoTHubTransportHttp_Register shall fail and return NULL.] */
+                    LogError("adding header properties failed.");
+                    result = false;
+                    destroy_eventHTTPrequestHeaders(handleData);
+                }
+                else
+                {
+                    result = true;
+                }
+            }
+            STRING_delete(urlEncodedDeviceId);
+            STRING_delete(temp);
+        }
+    }
+    return result;
+}
+
+static void destroy_messageHTTPrequestHeaders(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    HTTPHeaders_Free(handleData->messageHTTPrequestHeaders);
+    handleData->messageHTTPrequestHeaders = NULL;
+}
+
+static bool create_messageHTTPrequestHeaders(HTTPTRANSPORT_PERDEVICE_DATA* handleData, HTTPTRANSPORT_HANDLE_DATA* transport_data, bool is_x509_used)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_132: [ IoTHubTransportHttp_Register shall create a set of HTTP headers (further called "message HTTP request headers") consisting of the following fixed field names and values:
+    "Authorization": "" ]*/
+    bool result;
+    handleData->messageHTTPrequestHeaders = HTTPHeaders_Alloc();
+    if (handleData->messageHTTPrequestHeaders == NULL)
+    {
+        LogError("HTTPHeaders_Alloc failed.");
+        result = false;
+    }
+    else
+    {
+        if (!(
+            (addUserAgentHeaderInfo(transport_data, handleData->messageHTTPrequestHeaders) == HTTP_HEADERS_OK) &&
+            (is_x509_used || (HTTPHeaders_AddHeaderNameValuePair(handleData->messageHTTPrequestHeaders, IOTHUB_AUTH_HEADER_VALUE, " ") == HTTP_HEADERS_OK))
+            ))
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_023: [ If creating message HTTP request headers then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+            destroy_messageHTTPrequestHeaders(handleData);
+            LogError("adding header properties failed.");
+            result = false;
+        }
+        else
+        {
+            result = true;
+        }
+    }
+    return result;
+}
+
+static void destroy_abandonHTTPrelativePathBegin(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->abandonHTTPrelativePathBegin);
+    handleData->abandonHTTPrelativePathBegin = NULL;
+}
+
+static bool create_abandonHTTPrelativePathBegin(HTTPTRANSPORT_PERDEVICE_DATA* handleData, const char * deviceId)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_024: [ IoTHubTransportHttp_Register shall create a STRING containing: "/devices/" + URL_ENCODED(device id) +"/messages/deviceBound/" called abandonHTTPrelativePathBegin. ]*/
+    bool result;
+    handleData->abandonHTTPrelativePathBegin = STRING_construct("/devices/");
+    if (handleData->abandonHTTPrelativePathBegin == NULL)
+    {
+        result = false;
+    }
+    else
+    {
+        STRING_HANDLE urlEncodedDeviceId;
+        if (!(
+            ((urlEncodedDeviceId = URL_EncodeString(deviceId)) != NULL) &&
+            (STRING_concat_with_STRING(handleData->abandonHTTPrelativePathBegin, urlEncodedDeviceId) == 0) &&
+            (STRING_concat(handleData->abandonHTTPrelativePathBegin, MESSAGE_ENDPOINT_HTTP_ETAG) == 0)
+            ))
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_025: [ If creating the abandonHTTPrelativePathBegin fails then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+            LogError("unable to create abandon path string.");
+            STRING_delete(handleData->abandonHTTPrelativePathBegin);
+            result = false;
+        }
+        else
+        {
+            result = true;
+        }
+        STRING_delete(urlEncodedDeviceId);
+    }
+    return result;
+}
+
+static void destroy_SASObject(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    HTTPAPIEX_SAS_Destroy(handleData->sasObject);
+    handleData->sasObject = NULL;
+}
+
+static bool create_deviceSASObject(HTTPTRANSPORT_PERDEVICE_DATA* handleData, STRING_HANDLE hostName, const char * deviceId, const char * deviceKey)
+{
+    STRING_HANDLE keyName;
+    bool result;
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_026: [IoTHubTransportHttp_Create shall invoke URL_EncodeString with an argument of device id.]*/
+    keyName = URL_EncodeString(deviceId);
+    if (keyName == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_027: [If the encode fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+        LogError("URL_EncodeString keyname failed");
+        result = false;
+    }
+    else
+    {
+        STRING_HANDLE uriResource;
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_028: [IoTHubTransportHttp_Create shall invoke STRING_clone using the previously created hostname.]*/
+        uriResource = STRING_clone(hostName);
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_029: [If the clone fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+        if (uriResource != NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_030: [IoTHubTransportHttp_Create shall invoke STRING_concat with arguments uriResource and the string "/devices/".]*/
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_141: [If the concat fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_031: [IoTHubTransportHttp_Create shall invoke STRING_concat_with_STRING with arguments uriResource and keyName.]*/
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_032: [If the STRING_concat_with_STRING fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+            if ((STRING_concat(uriResource, "/devices/") == 0) &&
+                (STRING_concat_with_STRING(uriResource, keyName) == 0))
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_033: [IoTHubTransportHttp_Create shall invoke STRING_construct with an argument of config->upperConfig->deviceKey.]*/
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_034: [If the STRING_construct fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+                STRING_HANDLE key = STRING_construct(deviceKey);
+                if (key != NULL)
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_035: [The keyName is shortened to zero length, if that fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+                    if (STRING_empty(keyName) != 0)
+                    {
+                        LogError("Unable to form the device key name for the SAS");
+                        result = false;
+                    }
+                    else
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_036: [IoTHubTransportHttp_Create shall invoke HTTPAPIEX_SAS_Create with arguments key, uriResource, and zero length keyName.]*/
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_037: [If the HTTPAPIEX_SAS_Create fails then IoTHubTransportHttp_Create shall fail and return NULL.]*/
+                        handleData->sasObject = HTTPAPIEX_SAS_Create(key, uriResource, keyName);
+                        result = (handleData->sasObject != NULL) ? (true) : (false);
+                    }
+                    STRING_delete(key);
+                }
+                else
+                {
+                    LogError("STRING_construct Key failed");
+                    result = false;
+                }
+            }
+            else
+            {
+                LogError("STRING_concat uri resource failed");
+                result = false;
+            }
+            STRING_delete(uriResource);
+        }
+        else
+        {
+            LogError("STRING_staticclone uri resource failed");
+            result = false;
+        }
+        STRING_delete(keyName);
+    }
+    return result;
+}
+
+static void destroy_deviceId(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->deviceId);
+    handleData->deviceId = NULL;
+}
+
+static bool create_deviceId(HTTPTRANSPORT_PERDEVICE_DATA* handleData, const char * deviceId)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_133: [ IoTHubTransportHttp_Register shall create an immutable string (further called "deviceId") from config->deviceConfig->deviceId. ]*/
+    bool result;
+    handleData->deviceId = STRING_construct(deviceId);
+    if (handleData->deviceId == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_134: [ If deviceId is not created, then IoTHubTransportHttp_Register shall fail and return NULL. */
+        LogError("STRING_construct deviceId failed");
+        result = false;
+    }
+    else
+    {
+        result = true;
+    }
+    return result;
+}
+
+static void destroy_deviceKey(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->deviceKey);
+    handleData->deviceKey = NULL;
+}
+
+static void destroy_deviceSas(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->deviceSasToken);
+    handleData->deviceSasToken = NULL;
+}
+
+static bool create_deviceKey(HTTPTRANSPORT_PERDEVICE_DATA* handleData, const char * deviceKey)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_135: [ IoTHubTransportHttp_Register shall create an immutable string (further called "deviceKey") from deviceKey. ]*/
+    bool result;
+    handleData->deviceKey = STRING_construct(deviceKey);
+    if (handleData->deviceKey == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_136: [ If deviceKey is not created, then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+        LogError("STRING_construct deviceKey failed");
+        result = false;
+    }
+    else
+    {
+        result = true;
+    }
+    return result;
+}
+
+static void destroy_deviceSasToken(HTTPTRANSPORT_PERDEVICE_DATA* handleData)
+{
+    STRING_delete(handleData->deviceSasToken);
+    handleData->deviceSasToken = NULL;
+}
+
+static bool create_deviceSasToken(HTTPTRANSPORT_PERDEVICE_DATA* handleData, const char * deviceSasToken)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_03_135: [ IoTHubTransportHttp_Register shall create an immutable string (further called "deviceSasToken") from deviceSasToken. ]*/
+    bool result;
+    handleData->deviceSasToken = STRING_construct(deviceSasToken);
+    if (handleData->deviceSasToken == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_03_136: [ If deviceSasToken is not created, then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+        LogError("STRING_construct deviceSasToken failed");
+        result = false;
+    }
+    else
+    {
+        result = true;
+    }
+    return result;
+}
+
+/*
+* List queries  Find by handle and find by device name
+*/
+
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_137: [ IoTHubTransportHttp_Register shall search the devices list for any device matching name deviceId. If deviceId is found it shall return NULL. ]*/
+static bool findDeviceHandle(const void* element, const void* value)
+{
+    bool result;
+    /* data stored at element is device handle */
+    const IOTHUB_DEVICE_HANDLE * guess = (const IOTHUB_DEVICE_HANDLE *)element;
+    IOTHUB_DEVICE_HANDLE match = (IOTHUB_DEVICE_HANDLE)value;
+    result = (*guess == match) ? true : false;
+    return result;
+}
+
+static bool findDeviceById(const void* element, const void* value)
+{
+    bool result;
+    const char* deviceId = (const char *)value;
+    const HTTPTRANSPORT_PERDEVICE_DATA * perDeviceElement = *(const HTTPTRANSPORT_PERDEVICE_DATA **)element;
+
+    result = (strcmp(STRING_c_str(perDeviceElement->deviceId), deviceId) == 0);
+
+    return result;
+}
+
+static IOTHUB_DEVICE_HANDLE IoTHubTransportHttp_Register(TRANSPORT_LL_HANDLE handle, const IOTHUB_DEVICE_CONFIG* device, PDLIST_ENTRY waitingToSend)
+{
+    HTTPTRANSPORT_PERDEVICE_DATA* result;
+    if (handle == NULL || device == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_142: [ If handle is NULL or device is NULL, then IoTHubTransportHttp_Register shall return NULL. ]*/
+        LogError("Transport handle is NULL");
+        result = NULL;
+    }
+    else if (device->deviceId == NULL || ((device->deviceKey != NULL) && (device->deviceSasToken != NULL)) || waitingToSend == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_015: [ If IOTHUB_DEVICE_CONFIG fields deviceKey and deviceSasToken are NULL, then IoTHubTransportHttp_Register shall assume a x509 authentication. ]*/
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_014: [ If IOTHUB_DEVICE_CONFIG field deviceId is NULL, then IoTHubTransportHttp_Register shall return NULL. ]*/
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_016: [ If parameter waitingToSend is NULL, then IoTHubTransportHttp_Register shall return NULL. ]*/
+        LogError("invalid parameters detected TRANSPORT_LL_HANDLE handle=%p, const IOTHUB_DEVICE_CONFIG* device=%p, PDLIST_ENTRY waitingToSend=%p",
+            handle, device, waitingToSend);
+        result = NULL;
+    }
+    else
+    {
+        HTTPTRANSPORT_HANDLE_DATA* handleData = (HTTPTRANSPORT_HANDLE_DATA*)handle;
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_137: [ IoTHubTransportHttp_Register shall search the devices list for any device matching name deviceId. If deviceId is found it shall return NULL. ]*/
+        void* listItem = VECTOR_find_if(handleData->perDeviceList, findDeviceById, device->deviceId);
+        if (listItem != NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_137: [ IoTHubTransportHttp_Register shall search the devices list for any device matching name deviceId. If deviceId is found it shall return NULL. ]*/
+            LogError("Transport already has device registered by id: [%s]", device->deviceId);
+            result = NULL;
+        }
+        else
+        {
+            bool was_create_deviceKey_ok = false;
+            bool was_create_deviceSasToken_ok = false;
+            bool was_sasObject_ok = false;
+            bool was_x509_ok = false; /*there's nothing "created" in the case of x509, it is a flag indicating that x509 is used*/
+
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_038: [ Otherwise, IoTHubTransportHttp_Register shall allocate the IOTHUB_DEVICE_HANDLE structure. ]*/
+            bool was_resultCreated_ok = ((result = (HTTPTRANSPORT_PERDEVICE_DATA *)malloc(sizeof(HTTPTRANSPORT_PERDEVICE_DATA))) != NULL);
+            bool was_create_deviceId_ok = was_resultCreated_ok && create_deviceId(result, device->deviceId);
+
+            if (was_create_deviceId_ok)
+            {
+                if (device->deviceSasToken != NULL)
+                {
+                    /*device->deviceKey is certainly NULL (because of the validation condition (else if (device->deviceId == NULL || ((device->deviceKey != NULL) && (device->deviceSasToken != NULL)) || waitingToSend == NULL))that does not accept that both satoken AND devicekey are non-NULL*/
+                    was_create_deviceSasToken_ok = create_deviceSasToken(result, device->deviceSasToken);
+                    result->deviceKey = NULL;
+                    result->sasObject = NULL;
+                }
+                else /*when deviceSasToken == NULL*/
+                {
+                    if (device->deviceKey != NULL)
+                    {
+                        was_create_deviceKey_ok = create_deviceKey(result, device->deviceKey);
+                        result->deviceSasToken = NULL;
+                    }
+                    else
+                    {
+                        /*when both of them are NULL*/
+                        was_x509_ok = true;
+                        result->deviceKey = NULL;
+                        result->deviceSasToken = NULL;
+                    }
+                }
+            }
+
+            bool was_eventHTTPrelativePath_ok = (was_create_deviceKey_ok || was_create_deviceSasToken_ok || was_x509_ok) && create_eventHTTPrelativePath(result, device->deviceId);
+            bool was_messageHTTPrelativePath_ok = was_eventHTTPrelativePath_ok && create_messageHTTPrelativePath(result, device->deviceId);
+            bool was_eventHTTPrequestHeaders_ok;
+            if (was_messageHTTPrelativePath_ok)
+            {
+                result->device_transport_ctx = handleData->transport_ctx;
+                was_eventHTTPrequestHeaders_ok = create_eventHTTPrequestHeaders(result, handleData, device->deviceId, was_x509_ok);
+            }
+            else
+            {
+                was_eventHTTPrequestHeaders_ok = false;
+            }
+            bool was_messageHTTPrequestHeaders_ok = was_eventHTTPrequestHeaders_ok && create_messageHTTPrequestHeaders(result, handleData, was_x509_ok);
+            bool was_abandonHTTPrelativePathBegin_ok = was_messageHTTPrequestHeaders_ok && create_abandonHTTPrelativePathBegin(result, device->deviceId);
+
+            if (was_x509_ok)
+            {
+                result->sasObject = NULL; /**/
+                was_sasObject_ok = true;
+            }
+            else
+            {
+                if (!was_create_deviceSasToken_ok)
+                {
+                    was_sasObject_ok = was_abandonHTTPrelativePathBegin_ok && create_deviceSASObject(result, handleData->hostName, device->deviceId, device->deviceKey);
+                }
+            }
+
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_041: [ IoTHubTransportHttp_Register shall call VECTOR_push_back to store the new device information. ]*/
+            bool was_list_add_ok = (was_sasObject_ok || was_create_deviceSasToken_ok || was_x509_ok) && (VECTOR_push_back(handleData->perDeviceList, &result, 1) == 0);
+
+            if (was_list_add_ok)
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_043: [ Upon success, IoTHubTransportHttp_Register shall store the transport handle, and the waitingToSend queue in the device handle return a non-NULL value. ]*/
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_040: [ IoTHubTransportHttp_Register shall put event HTTP relative path, message HTTP relative path, event HTTP request headers, message HTTP request headers, abandonHTTPrelativePathBegin, HTTPAPIEX_SAS_HANDLE, and the device handle into a device structure. ]*/
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_128: [ IoTHubTransportHttp_Register shall mark this device as unsubscribed. ]*/
+                result->DoWork_PullMessage = false;
+                result->isFirstPoll = true;
+                result->waitingToSend = waitingToSend;
+                DList_InitializeListHead(&(result->eventConfirmations));
+                result->transportHandle = (HTTPTRANSPORT_HANDLE_DATA *)handle;
+            }
+            else
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_042: [ If the singlylinkedlist_add fails then IoTHubTransportHttp_Register shall fail and return NULL. ]*/
+                if (was_sasObject_ok) destroy_SASObject(result);
+                if (was_abandonHTTPrelativePathBegin_ok) destroy_abandonHTTPrelativePathBegin(result);
+                if (was_messageHTTPrelativePath_ok) destroy_messageHTTPrelativePath(result);
+                if (was_eventHTTPrequestHeaders_ok) destroy_eventHTTPrequestHeaders(result);
+                if (was_messageHTTPrequestHeaders_ok) destroy_messageHTTPrequestHeaders(result);
+                if (was_eventHTTPrelativePath_ok) destroy_eventHTTPrelativePath(result);
+                if (was_create_deviceId_ok) destroy_deviceId(result);
+                if (was_create_deviceKey_ok) destroy_deviceKey(result);
+                if (was_create_deviceSasToken_ok) destroy_deviceSasToken(result);
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_039: [ If the allocating the device handle fails then IoTHubTransportHttp_Register shall fail and return NULL. ] */
+                if (was_resultCreated_ok) free(result);
+                result = NULL;
+            }
+        }
+
+    }
+    return (IOTHUB_DEVICE_HANDLE)result;
+}
+
+
+static void destroy_perDeviceData(HTTPTRANSPORT_PERDEVICE_DATA * perDeviceItem)
+{
+    destroy_deviceId(perDeviceItem);
+    destroy_deviceKey(perDeviceItem);
+    destroy_deviceSas(perDeviceItem);
+    destroy_eventHTTPrelativePath(perDeviceItem);
+    destroy_messageHTTPrelativePath(perDeviceItem);
+    destroy_eventHTTPrequestHeaders(perDeviceItem);
+    destroy_messageHTTPrequestHeaders(perDeviceItem);
+    destroy_abandonHTTPrelativePathBegin(perDeviceItem);
+    destroy_SASObject(perDeviceItem);
+}
+
+static IOTHUB_DEVICE_HANDLE* get_perDeviceDataItem(IOTHUB_DEVICE_HANDLE deviceHandle)
+{
+    HTTPTRANSPORT_PERDEVICE_DATA* deviceHandleData = (HTTPTRANSPORT_PERDEVICE_DATA*)deviceHandle;
+    IOTHUB_DEVICE_HANDLE* listItem;
+
+    HTTPTRANSPORT_HANDLE_DATA* handleData = deviceHandleData->transportHandle;
+
+    listItem = (IOTHUB_DEVICE_HANDLE *)VECTOR_find_if(handleData->perDeviceList, findDeviceHandle, deviceHandle);
+    if (listItem == NULL)
+    {
+        LogError("device handle not found in transport device list");
+        listItem = NULL;
+    }
+    else
+    {
+        /* sucessfully found device in list. */
+    }
+
+    return listItem;
+}
+
+static void IoTHubTransportHttp_Unregister(IOTHUB_DEVICE_HANDLE deviceHandle)
+{
+    if (deviceHandle == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_044: [ If deviceHandle is NULL, then IoTHubTransportHttp_Unregister shall do nothing. ]*/
+        LogError("Unregister a NULL device handle");
+    }
+    else
+    {
+        HTTPTRANSPORT_PERDEVICE_DATA* deviceHandleData = (HTTPTRANSPORT_PERDEVICE_DATA*)deviceHandle;
+        HTTPTRANSPORT_HANDLE_DATA* handleData = deviceHandleData->transportHandle;
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_045: [ IoTHubTransportHttp_Unregister shall locate deviceHandle in the transport device list by calling list_find_if. ]*/
+        IOTHUB_DEVICE_HANDLE* listItem = get_perDeviceDataItem(deviceHandle);
+        if (listItem == NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_046: [ If the device structure is not found, then this function shall fail and do nothing. ]*/
+            LogError("Device Handle [%p] not found in transport", deviceHandle);
+        }
+        else
+        {
+            HTTPTRANSPORT_PERDEVICE_DATA * perDeviceItem = (HTTPTRANSPORT_PERDEVICE_DATA *)(*listItem);
+
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_047: [ IoTHubTransportHttp_Unregister shall free all the resources used in the device structure. ]*/
+            destroy_perDeviceData(perDeviceItem);
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_048: [ IoTHubTransportHttp_Unregister shall call singlylinkedlist_remove to remove device from devices list. ]*/
+            VECTOR_erase(handleData->perDeviceList, listItem, 1);
+            free(deviceHandleData);
+        }
+    }
+
+    return;
+}
+
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_005: [If config->upperConfig->protocolGatewayHostName is NULL, `IoTHubTransportHttp_Create` shall create an immutable string (further called hostname) containing `config->transportConfig->iotHubName + config->transportConfig->iotHubSuffix`.]  */
+/*Codes_SRS_TRANSPORTMULTITHTTP_20_001: [If config->upperConfig->protocolGatewayHostName is not NULL, IoTHubTransportHttp_Create shall use it as hostname] */
+static void destroy_hostName(HTTPTRANSPORT_HANDLE_DATA* handleData)
+{
+    STRING_delete(handleData->hostName);
+    handleData->hostName = NULL;
+}
+
+static bool create_hostName(HTTPTRANSPORT_HANDLE_DATA* handleData, const IOTHUBTRANSPORT_CONFIG* config)
+{
+    bool result;
+    if (config->upperConfig->protocolGatewayHostName != NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_20_001: [If config->upperConfig->protocolGatewayHostName is not NULL, IoTHubTransportHttp_Create shall use it as hostname] */
+        handleData->hostName = STRING_construct(config->upperConfig->protocolGatewayHostName);
+        result = (handleData->hostName != NULL);
+    }
+    else
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_005: [If config->upperConfig->protocolGatewayHostName is NULL, `IoTHubTransportHttp_Create` shall create an immutable string (further called hostname) containing `config->transportConfig->iotHubName + config->transportConfig->iotHubSuffix`.]  */
+        handleData->hostName = STRING_construct(config->upperConfig->iotHubName);
+
+        if (handleData->hostName == NULL)
+        {
+            result = false;
+        }
+        else
+        {
+            if ((STRING_concat(handleData->hostName, ".") != 0) ||
+                (STRING_concat(handleData->hostName, config->upperConfig->iotHubSuffix) != 0))
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_006: [ If creating the hostname fails then IoTHubTransportHttp_Create shall fail and return NULL. ] */
+                destroy_hostName(handleData);
+                result = false;
+            }
+            else
+            {
+                result = true;
+            }
+        }
+    }
+    return result;
+}
+
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_007: [Otherwise, IoTHubTransportHttp_Create shall create a HTTPAPIEX_HANDLE by a call to HTTPAPIEX_Create passing for hostName the hostname so far constructed by IoTHubTransportHttp_Create.]*/
+static void destroy_httpApiExHandle(HTTPTRANSPORT_HANDLE_DATA* handleData)
+{
+    HTTPAPIEX_Destroy(handleData->httpApiExHandle);
+    handleData->httpApiExHandle = NULL;
+}
+
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_007: [ IoTHubTransportHttp_Create shall create a HTTPAPIEX_HANDLE by a call to HTTPAPIEX_Create passing for hostName the hostname so far constructed by IoTHubTransportHttp_Create. ]*/
+static bool create_httpApiExHandle(HTTPTRANSPORT_HANDLE_DATA* handleData, const IOTHUBTRANSPORT_CONFIG* config)
+{
+    bool result;
+    (void)config;
+    handleData->httpApiExHandle = HTTPAPIEX_Create(STRING_c_str(handleData->hostName));
+    if (handleData->httpApiExHandle == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_008: [ If creating the HTTPAPIEX_HANDLE fails then IoTHubTransportHttp_Create shall fail and return NULL. ] */
+        result = false;
+    }
+    else
+    {
+        result = true;
+    }
+    return result;
+}
+
+static void destroy_perDeviceList(HTTPTRANSPORT_HANDLE_DATA* handleData)
+{
+    VECTOR_destroy(handleData->perDeviceList);
+    handleData->perDeviceList = NULL;
+}
+
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_009: [ IoTHubTransportHttp_Create shall call singlylinkedlist_create to create a list of registered devices. ]*/
+static bool create_perDeviceList(HTTPTRANSPORT_HANDLE_DATA* handleData)
+{
+    bool result;
+    handleData->perDeviceList = VECTOR_create(sizeof(IOTHUB_DEVICE_HANDLE));
+    if (handleData == NULL || handleData->perDeviceList == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_010: [ If creating the list fails, then IoTHubTransportHttp_Create shall fail and return NULL. ]*/
+        result = false;
+    }
+    else
+    {
+        result = true;
+    }
+    return result;
+}
+
+static TRANSPORT_LL_HANDLE IoTHubTransportHttp_Create(const IOTHUBTRANSPORT_CONFIG* config, TRANSPORT_CALLBACKS_INFO* cb_info, void* ctx)
+{
+    HTTPTRANSPORT_HANDLE_DATA* result;
+    if (config == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_001: [If parameter config is NULL, then IoTHubTransportHttp_Create shall return NULL.]*/
+        LogError("invalid arg (configuration is missing)");
+        result = NULL;
+    }
+    else if (config->upperConfig == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_002: [ If field transportConfig is NULL, then IoTHubTransportHttp_Create shall return NULL. ]*/
+        LogError("invalid arg (upperConfig is NULL)");
+        result = NULL;
+    }
+    else if (config->upperConfig->protocol == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_003: [ If fields protocol, iotHubName or iotHubSuffix in transportConfig are NULL, then IoTHubTransportHttp_Create shall return NULL. ]*/
+        LogError("invalid arg (protocol is NULL)");
+        result = NULL;
+    }
+    else if (config->upperConfig->iotHubName == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_003: [ If fields protocol, iotHubName or iotHubSuffix in transportConfig are NULL, then IoTHubTransportHttp_Create shall return NULL. ]*/
+        LogError("invalid arg (iotHubName is NULL)");
+        result = NULL;
+    }
+    else if (config->upperConfig->iotHubSuffix == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_003: [ If fields protocol, iotHubName or iotHubSuffix in transportConfig are NULL, then IoTHubTransportHttp_Create shall return NULL. ]*/
+        LogError("invalid arg (iotHubSuffix is NULL)");
+        result = NULL;
+    }
+    else if (IoTHub_Transport_ValidateCallbacks(cb_info) != 0)
+    {
+        LogError("Invalid transport callback information");
+        result = NULL;
+    }
+    else
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_130: [ IoTHubTransportHttp_Create shall allocate memory for the handle. ]*/
+        result = (HTTPTRANSPORT_HANDLE_DATA*)malloc(sizeof(HTTPTRANSPORT_HANDLE_DATA));
+        if (result == NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_131: [ If allocation fails, IoTHubTransportHttp_Create shall fail and return NULL. ]*/
+            LogError("unable to malloc");
+        }
+        else
+        {
+            bool was_hostName_ok = create_hostName(result, config);
+            bool was_httpApiExHandle_ok = was_hostName_ok && create_httpApiExHandle(result, config);
+            bool was_perDeviceList_ok = was_httpApiExHandle_ok && create_perDeviceList(result);
+
+            if (was_perDeviceList_ok)
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_011: [ Otherwise, IoTHubTransportHttp_Create shall succeed and return a non-NULL value. ]*/
+                result->doBatchedTransfers = false;
+                result->getMinimumPollingTime = DEFAULT_GETMINIMUMPOLLINGTIME;
+
+                result->transport_ctx = ctx;
+                memcpy(&result->transport_callbacks, cb_info, sizeof(TRANSPORT_CALLBACKS_INFO));
+            }
+            else
+            {
+                if (was_httpApiExHandle_ok) destroy_httpApiExHandle(result);
+                if (was_hostName_ok) destroy_hostName(result);
+
+                free(result);
+                result = NULL;
+            }
+        }
+    }
+    return result;
+}
+
+static void IoTHubTransportHttp_Destroy(TRANSPORT_LL_HANDLE handle)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_012: [ IoTHubTransportHttp_Destroy shall do nothing is handle is NULL. ]*/
+    if (handle != NULL)
+    {
+        HTTPTRANSPORT_HANDLE_DATA* handleData = (HTTPTRANSPORT_HANDLE_DATA*)handle;
+        IOTHUB_DEVICE_HANDLE* listItem;
+
+        size_t deviceListSize = VECTOR_size(handleData->perDeviceList);
+
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_013: [ Otherwise, IoTHubTransportHttp_Destroy shall free all the resources currently in use. ]*/
+        for (size_t i = 0; i < deviceListSize; i++)
+        {
+            listItem = (IOTHUB_DEVICE_HANDLE *)VECTOR_element(handleData->perDeviceList, i);
+            HTTPTRANSPORT_PERDEVICE_DATA* perDeviceItem = (HTTPTRANSPORT_PERDEVICE_DATA*)(*listItem);
+            destroy_perDeviceData(perDeviceItem);
+            free(perDeviceItem);
+        }
+
+        destroy_hostName((HTTPTRANSPORT_HANDLE_DATA *)handle);
+        destroy_httpApiExHandle((HTTPTRANSPORT_HANDLE_DATA *)handle);
+        destroy_perDeviceList((HTTPTRANSPORT_HANDLE_DATA *)handle);
+        free(handle);
+    }
+}
+
+static int IoTHubTransportHttp_Subscribe(IOTHUB_DEVICE_HANDLE handle)
+{
+    int result;
+    if (handle == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_103: [ If parameter deviceHandle is NULL then IoTHubTransportHttp_Subscribe shall fail and return a non-zero value. ]*/
+        LogError("invalid arg passed to IoTHubTransportHttp_Subscribe");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_104: [ IoTHubTransportHttp_Subscribe shall locate deviceHandle in the transport device list by calling list_find_if. ]*/
+        IOTHUB_DEVICE_HANDLE* listItem = get_perDeviceDataItem(handle);
+
+        if (listItem == NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_105: [ If the device structure is not found, then this function shall fail and return a non-zero value. ]*/
+            LogError("did not find device in transport handle");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            HTTPTRANSPORT_PERDEVICE_DATA * perDeviceItem;
+
+            perDeviceItem = (HTTPTRANSPORT_PERDEVICE_DATA *)(*listItem);
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_106: [ Otherwise, IoTHubTransportHttp_Subscribe shall set the device so that subsequent calls to DoWork should execute HTTP requests. ]*/
+            perDeviceItem->DoWork_PullMessage = true;
+        }
+        result = 0;
+    }
+    return result;
+}
+
+static void IoTHubTransportHttp_Unsubscribe(IOTHUB_DEVICE_HANDLE handle)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_107: [ If parameter deviceHandle is NULL then IoTHubTransportHttp_Unsubscribe shall fail do nothing. ]*/
+    if (handle != NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_108: [ IoTHubTransportHttp_Unsubscribe shall locate deviceHandle in the transport device list by calling list_find_if. ]*/
+        IOTHUB_DEVICE_HANDLE* listItem = get_perDeviceDataItem(handle);
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_109: [ If the device structure is not found, then this function shall fail and do nothing. ]*/
+        if (listItem != NULL)
+        {
+            HTTPTRANSPORT_PERDEVICE_DATA * perDeviceItem = (HTTPTRANSPORT_PERDEVICE_DATA *)(*listItem);
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_110: [ Otherwise, IoTHubTransportHttp_Subscribe shall set the device so that subsequent calls to DoWork shall not execute HTTP requests. ]*/
+            perDeviceItem->DoWork_PullMessage = false;
+        }
+        else
+        {
+            LogError("Device not found to unsuscribe.");
+        }
+    }
+    else
+    {
+        LogError("Null handle passed to Unsuscribe.");
+    }
+}
+
+static int IoTHubTransportHttp_Subscribe_DeviceTwin(IOTHUB_DEVICE_HANDLE handle)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_02_003: [ IoTHubTransportHttp_Subscribe_DeviceTwin shall return a non-zero value. ]*/
+    (void)handle;
+    int result = MU_FAILURE;
+    LogError("IoTHubTransportHttp_Subscribe_DeviceTwin Not supported");
+    return result;
+}
+
+static void IoTHubTransportHttp_Unsubscribe_DeviceTwin(IOTHUB_DEVICE_HANDLE handle)
+{
+    (void)handle;
+    /*Codes_SRS_TRANSPORTMULTITHTTP_02_004: [ IoTHubTransportHttp_Unsubscribe_DeviceTwin shall return ]*/
+    LogError("IoTHubTransportHttp_Unsubscribe_DeviceTwin Not supported");
+}
+
+static IOTHUB_CLIENT_RESULT IoTHubTransportHttp_GetTwinAsync(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK completionCallback, void* callbackContext)
+{
+    (void)handle;
+    (void)completionCallback;
+    (void)callbackContext;
+    LogError("Currently Not Supported.");
+    // Codes_SRS_TRANSPORTMULTITHTTP_09_005: [ `IoTHubTransportHttp_GetTwinAsync` shall return IOTHUB_CLIENT_ERROR]
+    return IOTHUB_CLIENT_ERROR;
+}
+
+static int IoTHubTransportHttp_Subscribe_DeviceMethod(IOTHUB_DEVICE_HANDLE handle)
+{
+    (void)handle;
+    int result = MU_FAILURE;
+    LogError("not implemented (yet)");
+    return result;
+}
+
+static void IoTHubTransportHttp_Unsubscribe_DeviceMethod(IOTHUB_DEVICE_HANDLE handle)
+{
+    (void)handle;
+    LogError("not implemented (yet)");
+}
+
+static int IoTHubTransportHttp_DeviceMethod_Response(IOTHUB_DEVICE_HANDLE handle, METHOD_HANDLE methodId, const unsigned char* response, size_t response_size, int status_response)
+{
+    (void)handle;
+    (void)methodId;
+    (void)response;
+    (void)response_size;
+    (void)status_response;
+    LogError("not implemented (yet)");
+    return MU_FAILURE;
+}
+
+/*produces a representation of the properties, if they exist*/
+/*if they do not exist, produces ""*/
+static int concat_Properties(STRING_HANDLE existing, MAP_HANDLE map, size_t* propertiesMessageSizeContribution)
+{
+    int result;
+    const char*const* keys;
+    const char*const* values;
+    size_t count;
+    if (Map_GetInternals(map, &keys, &values, &count) != MAP_OK)
+    {
+        result = MU_FAILURE;
+        LogError("error while Map_GetInternals");
+    }
+    else
+    {
+
+        if (count == 0)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_064: [If IoTHubMessage does not have properties, then "properties":{...} shall be missing from the payload*/
+            /*no properties - do nothing with existing*/
+            result = 0;
+            *propertiesMessageSizeContribution = 0;
+        }
+        else
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_058: [If IoTHubMessage has properties, then they shall be serialized at the same level as "body" using the following pattern: "properties":{"iothub-app-name1":"value1","iothub-app-name2":"value2*/
+            if (STRING_concat(existing, ",\"properties\":") != 0)
+            {
+                /*go ahead and return it*/
+                result = MU_FAILURE;
+                LogError("failed STRING_concat");
+            }
+            else if (appendMapToJSON(existing, keys, values, count) != 0)
+            {
+                result = MU_FAILURE;
+                LogError("unable to append the properties");
+            }
+            else
+            {
+                /*all is fine*/
+                size_t i;
+                *propertiesMessageSizeContribution = 0;
+                for (i = 0; i < count; i++)
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_063: [Every property name shall add to the message size the length of the property name + the length of the property value + 16 bytes.] */
+                    *propertiesMessageSizeContribution += (strlen(keys[i]) + strlen(values[i]) + MAXIMUM_PROPERTY_OVERHEAD);
+                }
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+/*produces a JSON representation of the map : {"a": "value_of_a","b":"value_of_b"}*/
+static int appendMapToJSON(STRING_HANDLE existing, const char* const* keys, const char* const* values, size_t count) /*under consideration: move to MAP module when it has more than 1 user*/
+{
+    int result;
+    if (STRING_concat(existing, "{") != 0)
+    {
+        /*go on and return it*/
+        LogError("STRING_construct failed");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t i;
+        for (i = 0; i < count; i++)
+        {
+            if (!(
+                (STRING_concat(existing, (i == 0) ? "\"" IOTHUB_APP_PREFIX : ",\"" IOTHUB_APP_PREFIX) == 0) &&
+                (STRING_concat(existing, keys[i]) == 0) &&
+                (STRING_concat(existing, "\":\"") == 0) &&
+                (STRING_concat(existing, values[i]) == 0) &&
+                (STRING_concat(existing, "\"") == 0)
+                ))
+            {
+                LogError("unable to STRING_concat");
+                break;
+            }
+        }
+
+        if (i < count)
+        {
+            result = MU_FAILURE;
+            /*error, let it go through*/
+        }
+        else if (STRING_concat(existing, "}") != 0)
+        {
+            LogError("unable to STRING_concat");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            /*all is fine*/
+            result = 0;
+        }
+    }
+    return result;
+}
+
+/*makes the following string:{"body":"base64 encoding of the message content"[,"properties":{"a":"valueOfA"}]}*/
+/*return NULL if there was a failure, or a non-NULL STRING_HANDLE that contains the intended data*/
+static STRING_HANDLE make1EventJSONitem(PDLIST_ENTRY item, size_t *messageSizeContribution)
+{
+    STRING_HANDLE result; /*temp wants to contain :{"body":"base64 encoding of the message content"[,"properties":{"a":"valueOfA"}]}*/
+    IOTHUB_MESSAGE_LIST* message = containingRecord(item, IOTHUB_MESSAGE_LIST, entry);
+    IOTHUBMESSAGE_CONTENT_TYPE contentType = IoTHubMessage_GetContentType(message->messageHandle);
+
+    switch (contentType)
+    {
+    case IOTHUBMESSAGE_BYTEARRAY:
+    {
+        result = STRING_construct("{\"body\":\"");
+        if (result == NULL)
+        {
+            LogError("unable to STRING_construct");
+        }
+        else
+        {
+            const unsigned char* source;
+            size_t size;
+
+            if (IoTHubMessage_GetByteArray(message->messageHandle, &source, &size) != IOTHUB_MESSAGE_OK)
+            {
+                LogError("unable to get the data for the message.");
+                STRING_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                STRING_HANDLE encoded = Azure_Base64_Encode_Bytes(source, size);
+                if (encoded == NULL)
+                {
+                    LogError("unable to Azure_Base64_Encode_Bytes.");
+                    STRING_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    size_t propertiesSize = 0;
+                    if (!(
+                        (STRING_concat_with_STRING(result, encoded) == 0) &&
+                        (STRING_concat(result, "\"") == 0) && /*\" because closing value*/
+                        (concat_Properties(result, IoTHubMessage_Properties(message->messageHandle), &propertiesSize) == 0) &&
+                        (STRING_concat(result, "},") == 0) /*the last comma shall be replaced by a ']' by DaCr's suggestion (which is awesome enough to receive credits in the source code)*/
+                        ))
+                    {
+                        STRING_delete(result);
+                        result = NULL;
+                        LogError("unable to STRING_concat_with_STRING.");
+                    }
+                    else
+                    {
+                        /*all is fine... */
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_062: [The message size is computed from the length of the payload + 384.] */
+                        *messageSizeContribution = size + MAXIMUM_PAYLOAD_OVERHEAD + propertiesSize;
+                    }
+                    STRING_delete(encoded);
+                }
+            }
+        }
+        break;
+    }
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_057: [If a messages to be send has type IOTHUBMESSAGE_STRING, then its serialization shall be {"body":"JSON encoding of the string", "base64Encoded":false}] */
+    case IOTHUBMESSAGE_STRING:
+    {
+        result = STRING_construct("{\"body\":");
+        if (result == NULL)
+        {
+            LogError("unable to STRING_construct");
+        }
+        else
+        {
+            const char* source = IoTHubMessage_GetString(message->messageHandle);
+            if (source == NULL)
+            {
+                LogError("unable to IoTHubMessage_GetString");
+                STRING_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                STRING_HANDLE asJson = STRING_new_JSON(source);
+                if (asJson == NULL)
+                {
+                    LogError("unable to STRING_new_JSON");
+                    STRING_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    size_t propertiesSize = 0;
+                    if (!(
+                        (STRING_concat_with_STRING(result, asJson) == 0) &&
+                        (STRING_concat(result, ",\"base64Encoded\":false") == 0) &&
+                        (concat_Properties(result, IoTHubMessage_Properties(message->messageHandle), &propertiesSize) == 0) &&
+                        (STRING_concat(result, "},") == 0) /*the last comma shall be replaced by a ']' by DaCr's suggestion (which is awesome enough to receive credits in the source code)*/
+                        ))
+                    {
+                        LogError("unable to STRING_concat_with_STRING");
+                        STRING_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        /*result has the intended content*/
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_062: [The message size is computed from the length of the payload + 384.] */
+                        *messageSizeContribution = strlen(source) + MAXIMUM_PAYLOAD_OVERHEAD + propertiesSize;
+                    }
+                    STRING_delete(asJson);
+                }
+            }
+        }
+        break;
+    }
+    default:
+    {
+        LogError("an unknown message type was encountered (%d)", contentType);
+        result = NULL; /*unknown message type*/
+        break;
+    }
+    }
+    return result;
+}
+
+#define MAKE_PAYLOAD_RESULT_VALUES \
+    MAKE_PAYLOAD_OK, /*returned when there is a payload to be later send by HTTP*/ \
+    MAKE_PAYLOAD_NO_ITEMS, /*returned when there are no items to be send*/ \
+    MAKE_PAYLOAD_ERROR, /*returned when there were errors*/ \
+    MAKE_PAYLOAD_FIRST_ITEM_DOES_NOT_FIT /*returned when the first item doesn't fit*/
+
+MU_DEFINE_ENUM(MAKE_PAYLOAD_RESULT, MAKE_PAYLOAD_RESULT_VALUES);
+
+/*this function assembles several {"body":"base64 encoding of the message content"," base64Encoded": true} into 1 payload*/
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_056: [IoTHubTransportHttp_DoWork shall build the following string:[{"body":"base64 encoding of the message1 content"},{"body":"base64 encoding of the message2 content"}...]]*/
+static MAKE_PAYLOAD_RESULT makePayload(HTTPTRANSPORT_PERDEVICE_DATA* deviceData, STRING_HANDLE* payload)
+{
+    MAKE_PAYLOAD_RESULT result;
+    size_t allMessagesSize = 0;
+    *payload = STRING_construct("[");
+    if (*payload == NULL)
+    {
+        LogError("unable to STRING_construct");
+        result = MAKE_PAYLOAD_ERROR;
+    }
+    else
+    {
+        bool isFirst = true;
+        PDLIST_ENTRY actual;
+        bool keepGoing = true; /*keepGoing gets sometimes to false from within the loop*/
+                               /*either all the items enter the list or only some*/
+        result = MAKE_PAYLOAD_OK; /*optimistically initializing it*/
+        while (keepGoing && ((actual = deviceData->waitingToSend->Flink) != deviceData->waitingToSend))
+        {
+            size_t messageSize;
+            STRING_HANDLE temp = make1EventJSONitem(actual, &messageSize);
+            if (isFirst)
+            {
+                isFirst = false;
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_067: [If there is no valid payload, IoTHubTransportHttp_DoWork shall advance to the next activity.]*/
+                if (temp == NULL) /*first item failed to create, nothing to send*/
+                {
+                    result = MAKE_PAYLOAD_ERROR;
+                    STRING_delete(*payload);
+                    *payload = NULL;
+                    keepGoing = false;
+                }
+                else
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_065: [If the oldest message in waitingToSend causes the message size to exceed the message size limit then it shall be removed from waitingToSend, and IoTHubClientCore_LL_SendComplete shall be called. Parameter PDLIST_ENTRY completed shall point to a list containing only the oldest item, and parameter IOTHUB_CLIENT_CONFIRMATION_RESULT result shall be set to IOTHUB_CLIENT_CONFIRMATION_BATCHSTATE_FAILED.]*/
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_061: [The message size shall be limited to 255KB - 1 byte.]*/
+                    if (messageSize > MAXIMUM_MESSAGE_SIZE)
+                    {
+                        PDLIST_ENTRY head = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                        DList_InsertTailList(&(deviceData->eventConfirmations), head);
+                        result = MAKE_PAYLOAD_FIRST_ITEM_DOES_NOT_FIT;
+                        STRING_delete(*payload);
+                        *payload = NULL;
+                        keepGoing = false;
+                    }
+                    else
+                    {
+                        if (STRING_concat_with_STRING(*payload, temp) != 0)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_067: [If there is no valid payload, IoTHubTransportHttp_DoWork shall advance to the next activity.]*/
+                            result = MAKE_PAYLOAD_ERROR;
+                            STRING_delete(*payload);
+                            *payload = NULL;
+                            keepGoing = false;
+                        }
+                        else
+                        {
+                            /*first item was put nicely in the payload*/
+                            PDLIST_ENTRY head = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                            DList_InsertTailList(&(deviceData->eventConfirmations), head);
+                            allMessagesSize += messageSize;
+                        }
+                    }
+                    STRING_delete(temp);
+                }
+            }
+            else
+            {
+                /*there is at least 1 item already in the payload*/
+                if (temp == NULL)
+                {
+                    /*there are multiple payloads encoded, the last one had an internal error, just go with those - closing the payload happens "after the loop"*/
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_066: [If at any point during construction of the string there are errors, IoTHubTransportHttp_DoWork shall use the so far constructed string as payload.]*/
+                    result = MAKE_PAYLOAD_OK;
+                    keepGoing = false;
+                }
+                else
+                {
+                    if (allMessagesSize + messageSize > MAXIMUM_MESSAGE_SIZE)
+                    {
+                        /*this item doesn't make it to the payload, but the payload is valid so far*/
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_066: [If at any point during construction of the string there are errors, IoTHubTransportHttp_DoWork shall use the so far constructed string as payload.]*/
+                        result = MAKE_PAYLOAD_OK;
+                        keepGoing = false;
+                    }
+                    else if (STRING_concat_with_STRING(*payload, temp) != 0)
+                    {
+                        /*should still send what there is so far...*/
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_066: [If at any point during construction of the string there are errors, IoTHubTransportHttp_DoWork shall use the so far constructed string as payload.]*/
+                        result = MAKE_PAYLOAD_OK;
+                        keepGoing = false;
+                    }
+                    else
+                    {
+                        /*cool, the payload made it there, let's continue... */
+                        PDLIST_ENTRY head = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                        DList_InsertTailList(&(deviceData->eventConfirmations), head);
+                        allMessagesSize += messageSize;
+                    }
+                    STRING_delete(temp);
+                }
+            }
+        }
+
+        /*closing the payload*/
+        if (result == MAKE_PAYLOAD_OK)
+        {
+            ((char*)STRING_c_str(*payload))[STRING_length(*payload) - 1] = ']'; /*TODO - do this in STRING_HANDLE*/
+        }
+        else
+        {
+            /*no need to close anything*/
+        }
+    }
+    return result;
+}
+
+static void reversePutListBackIn(PDLIST_ENTRY source, PDLIST_ENTRY destination)
+{
+    /*this function takes a list, and inserts it in another list. When done in the context of this file, it reverses the effects of a not-able-to-send situation*/
+    DList_AppendTailList(destination->Flink, source);
+    DList_RemoveEntryList(source);
+    DList_InitializeListHead(source);
+}
+
+static void DoEvent(HTTPTRANSPORT_HANDLE_DATA* handleData, HTTPTRANSPORT_PERDEVICE_DATA* deviceData)
+{
+
+    if (DList_IsListEmpty(deviceData->waitingToSend))
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_060: [If the list is empty then IoTHubTransportHttp_DoWork shall proceed to the following action.] */
+    }
+    else
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_053: [If option SetBatching is true then _Dowork shall send batched event message as specced below.] */
+        if (handleData->doBatchedTransfers)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_054: [Request HTTP headers shall have the value of "Content-Type" created or updated to "application/vnd.microsoft.iothub.json" by a call to HTTPHeaders_ReplaceHeaderNameValuePair.] */
+            if (HTTPHeaders_ReplaceHeaderNameValuePair(deviceData->eventHTTPrequestHeaders, CONTENT_TYPE, APPLICATION_VND_MICROSOFT_IOTHUB_JSON) != HTTP_HEADERS_OK)
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_055: [If updating Content-Type fails for any reason, then _DoWork shall advance to the next action.] */
+                LogError("unable to HTTPHeaders_ReplaceHeaderNameValuePair");
+            }
+            else
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_059: [It shall inspect the "waitingToSend" DLIST passed in config structure.] */
+                STRING_HANDLE payload;
+                switch (makePayload(deviceData, &payload))
+                {
+                case MAKE_PAYLOAD_OK:
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_068: [Once a final payload has been obtained, IoTHubTransportHttp_DoWork shall call HTTPAPIEX_SAS_ExecuteRequest passing the following parameters:] */
+                    BUFFER_HANDLE temp = BUFFER_new();
+                    if (temp == NULL)
+                    {
+                        LogError("unable to BUFFER_new");
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_067: [If there is no valid payload, IoTHubTransportHttp_DoWork shall advance to the next activity.]*/
+                        reversePutListBackIn(&(deviceData->eventConfirmations), deviceData->waitingToSend);
+                    }
+                    else
+                    {
+                        if (BUFFER_build(temp, (const unsigned char*)STRING_c_str(payload), STRING_length(payload)) != 0)
+                        {
+                            LogError("unable to BUFFER_build");
+                            //items go back to waitingToSend
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_067: [If there is no valid payload, IoTHubTransportHttp_DoWork shall advance to the next activity.]*/
+                            reversePutListBackIn(&(deviceData->eventConfirmations), deviceData->waitingToSend);
+                        }
+                        else
+                        {
+                            unsigned int statusCode;
+                            if (HTTPAPIEX_SAS_ExecuteRequest(
+                                deviceData->sasObject,
+                                handleData->httpApiExHandle,
+                                HTTPAPI_REQUEST_POST,
+                                STRING_c_str(deviceData->eventHTTPrelativePath),
+                                deviceData->eventHTTPrequestHeaders,
+                                temp,
+                                &statusCode,
+                                NULL,
+                                NULL
+                            ) != HTTPAPIEX_OK)
+                            {
+                                LogError("unable to HTTPAPIEX_ExecuteRequest");
+                                //items go back to waitingToSend
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_069: [if HTTPAPIEX_SAS_ExecuteRequest fails or the http status code >=300 then IoTHubTransportHttp_DoWork shall not do any other action (it is assumed at the next _DoWork it shall be retried).] */
+                                reversePutListBackIn(&(deviceData->eventConfirmations), deviceData->waitingToSend);
+                            }
+                            else
+                            {
+                                if (statusCode < 300)
+                                {
+                                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_070: [If HTTPAPIEX_SAS_ExecuteRequest does not fail and http status code <300 then IoTHubTransportHttp_DoWork shall call IoTHubClientCore_LL_SendComplete. Parameter PDLIST_ENTRY completed shall point to a list containing all the items batched, and parameter IOTHUB_CLIENT_CONFIRMATION_RESULT result shall be set to IOTHUB_CLIENT_CONFIRMATION_OK. The batched items shall be removed from waitingToSend.] */
+                                    handleData->transport_callbacks.send_complete_cb(&(deviceData->eventConfirmations), IOTHUB_CLIENT_CONFIRMATION_OK, deviceData->device_transport_ctx);
+                                }
+                                else
+                                {
+                                    //items go back to waitingToSend
+                                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_069: [if HTTPAPIEX_SAS_ExecuteRequest fails or the http status code >=300 then IoTHubTransportHttp_DoWork shall not do any other action (it is assumed at the next _DoWork it shall be retried).] */
+                                    LogError("unexpected HTTP status code (%u)", statusCode);
+                                    reversePutListBackIn(&(deviceData->eventConfirmations), deviceData->waitingToSend);
+                                }
+                            }
+                        }
+                        BUFFER_delete(temp);
+                    }
+                    STRING_delete(payload);
+                    break;
+                }
+                case MAKE_PAYLOAD_FIRST_ITEM_DOES_NOT_FIT:
+                {
+                    handleData->transport_callbacks.send_complete_cb(&(deviceData->eventConfirmations), IOTHUB_CLIENT_CONFIRMATION_ERROR, deviceData->device_transport_ctx); // takes care of emptying the list too
+                    break;
+                }
+                case MAKE_PAYLOAD_ERROR:
+                {
+                    LogError("unrecoverable errors while building a batch message");
+                    break;
+                }
+                case MAKE_PAYLOAD_NO_ITEMS:
+                {
+                    /*do nothing*/
+                    break;
+                }
+                default:
+                {
+                    LogError("internal error: switch's default branch reached when never intended");
+                    break;
+                }
+                }
+            }
+        }
+        else
+        {
+            const unsigned char* messageContent = NULL;
+            size_t messageSize = 0;
+            size_t originalMessageSize = 0;
+            IOTHUB_MESSAGE_LIST* message = containingRecord(deviceData->waitingToSend->Flink, IOTHUB_MESSAGE_LIST, entry);
+            IOTHUBMESSAGE_CONTENT_TYPE contentType = IoTHubMessage_GetContentType(message->messageHandle);
+
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_073: [The message size is computed from the length of the payload + 384.]*/
+            if (!(
+                (((contentType == IOTHUBMESSAGE_BYTEARRAY) &&
+                (IoTHubMessage_GetByteArray(message->messageHandle, &messageContent, &originalMessageSize) == IOTHUB_MESSAGE_OK))
+                    ? ((void)(messageSize = originalMessageSize + MAXIMUM_PAYLOAD_OVERHEAD), 1)
+                    : 0)
+
+                ||
+
+                ((contentType == IOTHUBMESSAGE_STRING) &&
+                ((void)(messageContent = (const unsigned char*)IoTHubMessage_GetString(message->messageHandle)),
+                    ((void)(messageSize = MAXIMUM_PAYLOAD_OVERHEAD + (originalMessageSize = ((messageContent == NULL)
+                        ? 0
+                        : strlen((const char*)messageContent))))),
+                    messageContent != NULL)
+                    )
+                ))
+            {
+                LogError("unable to get the message content");
+                /*go on...*/
+            }
+            else
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_075: [If the oldest message in waitingToSend causes the message to exceed the message size limit then it shall be removed from waitingToSend, and IoTHubClientCore_LL_SendComplete shall be called. Parameter PDLIST_ENTRY completed shall point to a list containing only the oldest item, and parameter IOTHUB_CLIENT_CONFIRMATION_RESULT result shall be set to IOTHUB_CLIENT_CONFIRMATION_BATCHSTATE_FAILED.]*/
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_072: [The message size shall be limited to 255KB -1 bytes.] */
+                if (messageSize > MAXIMUM_MESSAGE_SIZE)
+                {
+                    PDLIST_ENTRY head = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                    DList_InsertTailList(&(deviceData->eventConfirmations), head);
+                    handleData->transport_callbacks.send_complete_cb(&(deviceData->eventConfirmations), IOTHUB_CLIENT_CONFIRMATION_ERROR, deviceData->device_transport_ctx); // takes care of emptying the list too
+                }
+                else
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_071: [If option SetBatching is false then _Dowork shall send individual event message as specced below.] */
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_076: [A clone of the event HTTP request headers shall be created.]*/
+                    HTTP_HEADERS_HANDLE clonedEventHTTPrequestHeaders = HTTPHeaders_Clone(deviceData->eventHTTPrequestHeaders);
+                    if (clonedEventHTTPrequestHeaders == NULL)
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_079: [If any HTTP header operation fails, _DoWork shall advance to the next action.] */
+                        LogError("HTTPHeaders_Clone failed");
+                    }
+                    else
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_077: [The cloned HTTP headers shall have the HTTP header "Content-Type" set to "application/octet-stream".] */
+                        if (HTTPHeaders_ReplaceHeaderNameValuePair(clonedEventHTTPrequestHeaders, CONTENT_TYPE, APPLICATION_OCTET_STREAM) != HTTP_HEADERS_OK)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_079: [If any HTTP header operation fails, _DoWork shall advance to the next action.] */
+                            LogError("HTTPHeaders_ReplaceHeaderNameValuePair failed");
+                        }
+                        else
+                        {
+                            // set_message_properties returning false does not necessarily mean the the function failed, it just means
+                            // the the adding of messages should not continue and should try the next time.  So you should not log if this 
+                            // returns false
+                            if (set_message_properties(message, &messageSize, clonedEventHTTPrequestHeaders, handleData, deviceData))
+                            {
+
+                                if (set_system_properties(message, clonedEventHTTPrequestHeaders) != 0)
+                                {
+                                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_079: [If any HTTP header operation fails, _DoWork shall advance to the next action.] */
+                                }
+                                else
+                                {
+                                    BUFFER_HANDLE toBeSend = BUFFER_create(messageContent, originalMessageSize);
+                                    if (toBeSend == NULL)
+                                    {
+                                        LogError("unable to BUFFER_new");
+                                    }
+                                    else
+                                    {
+                                        unsigned int statusCode = 0;
+                                        HTTPAPIEX_RESULT r;
+                                        if (deviceData->deviceSasToken != NULL)
+                                        {
+                                            /*Codes_SRS_TRANSPORTMULTITHTTP_03_001: [if a deviceSasToken exists, HTTPHeaders_ReplaceHeaderNameValuePair shall be invoked with "Authorization" as its second argument and STRING_c_str (deviceSasToken) as its third argument.]*/
+                                            if (HTTPHeaders_ReplaceHeaderNameValuePair(clonedEventHTTPrequestHeaders, IOTHUB_AUTH_HEADER_VALUE, STRING_c_str(deviceData->deviceSasToken)) != HTTP_HEADERS_OK)
+                                            {
+                                                r = HTTPAPIEX_ERROR;
+                                                /*Codes_SRS_TRANSPORTMULTITHTTP_03_002: [If the result of the invocation of HTTPHeaders_ReplaceHeaderNameValuePair is NOT HTTP_HEADERS_OK then fallthrough.]*/
+                                                LogError("Unable to replace the old SAS Token.");
+                                            }
+                                            /*Codes_SRS_TRANSPORTMULTITHTTP_03_003: [If a deviceSasToken exists, IoTHubTransportHttp_DoWork shall call HTTPAPIEX_ExecuteRequest passing the following parameters] */
+                                            else if ((r = HTTPAPIEX_ExecuteRequest(
+                                                handleData->httpApiExHandle, HTTPAPI_REQUEST_POST, STRING_c_str(deviceData->eventHTTPrelativePath),
+                                                clonedEventHTTPrequestHeaders, toBeSend, &statusCode, NULL, NULL)) != HTTPAPIEX_OK)
+                                            {
+                                                LogError("Unable to HTTPAPIEX_ExecuteRequest.");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_080: [If a deviceSasToken does not exist, IoTHubTransportHttp_DoWork shall call HTTPAPIEX_SAS_ExecuteRequest passing the following parameters] */
+                                            if ((r = HTTPAPIEX_SAS_ExecuteRequest(deviceData->sasObject, handleData->httpApiExHandle, HTTPAPI_REQUEST_POST, STRING_c_str(deviceData->eventHTTPrelativePath), 
+                                                clonedEventHTTPrequestHeaders, toBeSend, &statusCode, NULL, NULL )) != HTTPAPIEX_OK)
+                                            {
+                                                LogError("unable to HTTPAPIEX_SAS_ExecuteRequest");
+                                            }
+                                        }
+                                        if (r == HTTPAPIEX_OK)
+                                        {
+                                            if (statusCode < 300)
+                                            {
+                                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_082: [If HTTPAPIEX_SAS_ExecuteRequest does not fail and http status code <300 then IoTHubTransportHttp_DoWork shall call IoTHubClientCore_LL_SendComplete. Parameter PDLIST_ENTRY completed shall point to a list the item send, and parameter IOTHUB_CLIENT_CONFIRMATION_RESULT result shall be set to IOTHUB_CLIENT_CONFIRMATION_OK. The item shall be removed from waitingToSend.] */
+                                                PDLIST_ENTRY justSent = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                                                DList_InsertTailList(&(deviceData->eventConfirmations), justSent);
+                                                handleData->transport_callbacks.send_complete_cb(&(deviceData->eventConfirmations), IOTHUB_CLIENT_CONFIRMATION_OK, deviceData->device_transport_ctx); // takes care of emptying the list too
+                                            }
+                                            else
+                                            {
+                                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_081: [If HTTPAPIEX_SAS_ExecuteRequest fails or the http status code >=300 then IoTHubTransportHttp_DoWork shall not do any other action (it is assumed at the next _DoWork it shall be retried).] */
+                                                LogError("unexpected HTTP status code (%u)", statusCode);
+                                            }
+                                        }
+                                        else if (r == HTTPAPIEX_RECOVERYFAILED)
+                                        {
+                                            PDLIST_ENTRY justSent = DList_RemoveHeadList(deviceData->waitingToSend); /*actually this is the same as "actual", but now it is removed*/
+                                            DList_InsertTailList(&(deviceData->eventConfirmations), justSent);
+                                            handleData->transport_callbacks.send_complete_cb(&(deviceData->eventConfirmations), IOTHUB_CLIENT_CONFIRMATION_ERROR, deviceData->device_transport_ctx); // takes care of emptying the list too
+                                        }
+                                    }
+                                    BUFFER_delete(toBeSend);
+                                }
+                            }
+                        }
+                        HTTPHeaders_Free(clonedEventHTTPrequestHeaders);
+                    }
+                }
+            }
+        }
+    }
+}
+
+static bool abandonOrAcceptMessage(HTTPTRANSPORT_HANDLE_DATA* handleData, HTTPTRANSPORT_PERDEVICE_DATA* deviceData, const char* ETag, IOTHUBMESSAGE_DISPOSITION_RESULT action)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_097: [_DoWork shall call HTTPAPIEX_SAS_ExecuteRequest with the following parameters:
+    -requestType: POST
+    -relativePath: abandon relative path begin (as created by _Create) + value of ETag + "/abandon?api-version=2016-11-14"
+    - requestHttpHeadersHandle: an HTTP headers instance containing the following
+    Authorization: " "
+    If-Match: value of ETag
+    - requestContent: NULL
+    - statusCode: a pointer to unsigned int which might be examined for logging
+    - responseHeadearsHandle: NULL
+    - responseContent: NULL]*/
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_099: [_DoWork shall call HTTPAPIEX_SAS_ExecuteRequest with the following parameters:
+    -requestType: DELETE
+    -relativePath: abandon relative path begin + value of ETag + "?api-version=2016-11-14"
+    - requestHttpHeadersHandle: an HTTP headers instance containing the following
+    Authorization: " "
+    If-Match: value of ETag
+    - requestContent: NULL
+    - statusCode: a pointer to unsigned int which might be used by logging
+    - responseHeadearsHandle: NULL
+    - responseContent: NULL]*/
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_101: [_DoWork shall call HTTPAPIEX_SAS_ExecuteRequest with the following parameters:
+    -requestType: DELETE
+    -relativePath: abandon relative path begin + value of ETag +"?api-version=2016-11-14" + "&reject"
+    - requestHttpHeadersHandle: an HTTP headers instance containing the following
+    Authorization: " "
+    If-Match: value of ETag
+    - requestContent: NULL
+    - statusCode: a pointer to unsigned int which might be used by logging
+    - responseHeadearsHandle: NULL
+    - responseContent: NULL]*/
+
+    bool result;
+    STRING_HANDLE fullAbandonRelativePath = STRING_clone(deviceData->abandonHTTPrelativePathBegin);
+    if (fullAbandonRelativePath == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+        LogError("unable to STRING_clone");
+        result = false;
+    }
+    else
+    {
+        STRING_HANDLE ETagUnquoted = STRING_construct_n(ETag + 1, strlen(ETag) - 2); /*skip first character which is '"' and the last one (which is also '"')*/
+        if (ETagUnquoted == NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+            LogError("unable to STRING_construct_n");
+            result = false;
+        }
+        else
+        {
+            if (!(
+                (STRING_concat_with_STRING(fullAbandonRelativePath, ETagUnquoted) == 0) &&
+                (STRING_concat(fullAbandonRelativePath, (action == IOTHUBMESSAGE_ABANDONED) ? "/abandon" API_VERSION : ((action == IOTHUBMESSAGE_REJECTED) ? API_VERSION "&reject" : API_VERSION)) == 0)
+                ))
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                LogError("unable to STRING_concat");
+                result = false;
+            }
+            else
+            {
+                HTTP_HEADERS_HANDLE abandonRequestHttpHeaders = HTTPHeaders_Alloc();
+                if (abandonRequestHttpHeaders == NULL)
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                    LogError("unable to HTTPHeaders_Alloc");
+                    result = false;
+                }
+                else
+                {
+                    if (!(
+                        (addUserAgentHeaderInfo(handleData, abandonRequestHttpHeaders) == HTTP_HEADERS_OK) &&
+                        (HTTPHeaders_AddHeaderNameValuePair(abandonRequestHttpHeaders, IOTHUB_AUTH_HEADER_VALUE, " ") == HTTP_HEADERS_OK) &&
+                        (HTTPHeaders_AddHeaderNameValuePair(abandonRequestHttpHeaders, "If-Match", ETag) == HTTP_HEADERS_OK)
+                        ))
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                        LogError("unable to HTTPHeaders_AddHeaderNameValuePair");
+                        result = false;
+                    }
+                    else
+                    {
+                        unsigned int statusCode = 0;
+                        HTTPAPIEX_RESULT r;
+                        if (deviceData->deviceSasToken != NULL)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_03_001: [if a deviceSasToken exists, HTTPHeaders_ReplaceHeaderNameValuePair shall be invoked with "Authorization" as its second argument and STRING_c_str (deviceSasToken) as its third argument.]*/
+                            if (HTTPHeaders_ReplaceHeaderNameValuePair(abandonRequestHttpHeaders, IOTHUB_AUTH_HEADER_VALUE, STRING_c_str(deviceData->deviceSasToken)) != HTTP_HEADERS_OK)
+                            {
+                                r = HTTPAPIEX_ERROR;
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_03_002: [If the result of the invocation of HTTPHeaders_ReplaceHeaderNameValuePair is NOT HTTP_HEADERS_OK then fallthrough.]*/
+                                LogError("Unable to replace the old SAS Token.");
+                                result = false;
+                            }
+                            else if ((r = HTTPAPIEX_ExecuteRequest(
+                                handleData->httpApiExHandle,
+                                (action == IOTHUBMESSAGE_ABANDONED) ? HTTPAPI_REQUEST_POST : HTTPAPI_REQUEST_DELETE,                               /*-requestType: POST                                                                                                       */
+                                STRING_c_str(fullAbandonRelativePath),              /*-relativePath: abandon relative path begin (as created by _Create) + value of ETag + "/abandon?api-version=2016-11-14"   */
+                                abandonRequestHttpHeaders,                          /*- requestHttpHeadersHandle: an HTTP headers instance containing the following                                            */
+                                NULL,                                               /*- requestContent: NULL                                                                                                   */
+                                &statusCode,                                         /*- statusCode: a pointer to unsigned int which might be examined for logging                                              */
+                                NULL,                                               /*- responseHeadearsHandle: NULL                                                                                           */
+                                NULL                                                /*- responseContent: NULL]                                                                                                 */
+                            )) != HTTPAPIEX_OK)
+                            {
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                                LogError("Unable to HTTPAPIEX_ExecuteRequest.");
+                                result = false;
+                            }
+                        }
+                        else if ((r = HTTPAPIEX_SAS_ExecuteRequest(
+                            deviceData->sasObject,
+                            handleData->httpApiExHandle,
+                            (action == IOTHUBMESSAGE_ABANDONED) ? HTTPAPI_REQUEST_POST : HTTPAPI_REQUEST_DELETE,                               /*-requestType: POST                                                                                                       */
+                            STRING_c_str(fullAbandonRelativePath),              /*-relativePath: abandon relative path begin (as created by _Create) + value of ETag + "/abandon?api-version=2016-11-14"   */
+                            abandonRequestHttpHeaders,                          /*- requestHttpHeadersHandle: an HTTP headers instance containing the following                                            */
+                            NULL,                                               /*- requestContent: NULL                                                                                                   */
+                            &statusCode,                                         /*- statusCode: a pointer to unsigned int which might be examined for logging                                              */
+                            NULL,                                               /*- responseHeadearsHandle: NULL                                                                                           */
+                            NULL                                                /*- responseContent: NULL]                                                                                                 */
+                        )) != HTTPAPIEX_OK)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                            LogError("unable to HTTPAPIEX_SAS_ExecuteRequest");
+                            result = false;
+                        }
+                        if (r == HTTPAPIEX_OK)
+                        {
+                            if (statusCode != 204)
+                            {
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                                LogError("unexpected status code returned %u (was expecting 204)", statusCode);
+                                result = false;
+                            }
+                            else
+                            {
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_098: [Abandoning the message is considered successful if the HTTPAPIEX_SAS_ExecuteRequest doesn't fail and the statusCode is 204.]*/
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_100: [Accepting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_102: [Rejecting a message is successful when HTTPAPIEX_SAS_ExecuteRequest completes successfully and the status code is 204.] */
+                                /*all is fine*/
+                                result = true;
+                            }
+                        }
+                        else
+                        {
+                            result = false;
+                        }
+                    }
+                    HTTPHeaders_Free(abandonRequestHttpHeaders);
+                }
+            }
+            STRING_delete(ETagUnquoted);
+        }
+        STRING_delete(fullAbandonRelativePath);
+    }
+    return result;
+}
+
+static IOTHUB_CLIENT_RESULT IoTHubTransportHttp_SendMessageDisposition(MESSAGE_CALLBACK_INFO* message_data, IOTHUBMESSAGE_DISPOSITION_RESULT disposition)
+{
+    IOTHUB_CLIENT_RESULT result;
+    if (message_data == NULL)
+    {
+        /* Codes_SRS_TRANSPORTMULTITHTTP_10_001: [If messageData is NULL, IoTHubTransportHttp_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR.] */
+        LogError("invalid argument messageData is NULL");
+        result = IOTHUB_CLIENT_ERROR;
+    }
+    else
+    {
+        if (message_data->messageHandle == NULL)
+        {
+            /* Codes_SRS_TRANSPORTMULTITHTTP_10_002: [If any of the messageData fields are NULL, IoTHubTransportHttp_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR.] */
+            LogError("invalid message handle");
+            result = IOTHUB_CLIENT_ERROR;
+        }
+        else
+        {
+            MESSAGE_DISPOSITION_CONTEXT* tc = (MESSAGE_DISPOSITION_CONTEXT*)(message_data->transportContext);
+            if (tc == NULL)
+            {
+                /* Codes_SRS_TRANSPORTMULTITHTTP_10_002: [If any of the messageData fields are NULL, IoTHubTransportHttp_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR.] */
+                LogError("invalid transport context data");
+                result = IOTHUB_CLIENT_ERROR;
+            }
+            else
+            {
+                if ((tc->handleData == NULL) || (tc->deviceData == NULL) || (tc->etagValue == NULL))
+                {
+                    /* Codes_SRS_TRANSPORTMULTITHTTP_10_002: [If any of the messageData fields are NULL, IoTHubTransportHttp_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR.] */
+                    LogError("invalid transport context data");
+                    result = IOTHUB_CLIENT_ERROR;
+                }
+                else
+                {
+                    if (abandonOrAcceptMessage(tc->handleData, tc->deviceData, tc->etagValue, disposition))
+                    {
+                        result = IOTHUB_CLIENT_OK;
+                    }
+                    else
+                    {
+                        /* Codes_SRS_TRANSPORTMULTITHTTP_10_003: [IoTHubTransportHttp_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR if the POST message fails, otherwise return IOTHUB_CLIENT_OK.] */
+                        LogError("HTTP Transport layer failed to report %s disposition", MU_ENUM_TO_STRING(IOTHUBMESSAGE_DISPOSITION_RESULT, disposition));
+                        result = IOTHUB_CLIENT_ERROR;
+                    }
+                }
+                free(tc->etagValue);
+                free(tc);
+            }
+            IoTHubMessage_Destroy(message_data->messageHandle);
+        }
+        free(message_data);
+    }
+    return result;
+}
+
+static MESSAGE_CALLBACK_INFO* MESSAGE_CALLBACK_INFO_Create(IOTHUB_MESSAGE_HANDLE received_message, HTTPTRANSPORT_HANDLE_DATA* handleData, HTTPTRANSPORT_PERDEVICE_DATA* deviceData, const char* etagValue)
+{
+    MESSAGE_CALLBACK_INFO* result = (MESSAGE_CALLBACK_INFO*)malloc(sizeof(MESSAGE_CALLBACK_INFO));
+    if (result == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_10_006: [If assembling the transport context fails, _DoWork shall "abandon" the message.] */
+        LogError("malloc failed");
+    }
+    else
+    {
+        MESSAGE_DISPOSITION_CONTEXT* tc = (MESSAGE_DISPOSITION_CONTEXT*)malloc(sizeof(MESSAGE_DISPOSITION_CONTEXT));
+        if (tc == NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_10_006: [If assembling the transport context fails, _DoWork shall "abandon" the message.] */
+            LogError("malloc failed");
+            free(result);
+            result = NULL;
+        }
+        else
+        {
+            result->messageHandle = IoTHubMessage_Clone(received_message);
+            if (result->messageHandle == NULL)
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_10_007: [If assembling a message clone, _DoWork shall "abandon" the message.]*/
+                LogError("IoTHubMessage_Clone failed");
+                free(tc);
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                if (mallocAndStrcpy_s(&tc->etagValue, etagValue) != 0)
+                {
+                    LogError("mallocAndStrcpy_s failed");
+                    free(tc);
+                    free(result);
+                    result = NULL;
+                }
+                else
+                {
+                    tc->handleData = handleData;
+                    tc->deviceData = deviceData;
+
+                    result->transportContext = tc;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+static void DoMessages(HTTPTRANSPORT_HANDLE_DATA* handleData, HTTPTRANSPORT_PERDEVICE_DATA* deviceData)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_083: [ If device is not subscribed then _DoWork shall advance to the next action. ] */
+    if (deviceData->DoWork_PullMessage)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_123: [After client creation, the first GET shall be allowed no matter what the value of GetMinimumPollingTime.] */
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_124: [If time is not available then all calls shall be treated as if they are the first one.] */
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_122: [A GET request that happens earlier than GetMinimumPollingTime shall be ignored.] */
+        time_t timeNow = get_time(NULL);
+        bool isPollingAllowed = deviceData->isFirstPoll || (timeNow == (time_t)(-1)) || (get_difftime(timeNow, deviceData->lastPollTime) > handleData->getMinimumPollingTime);
+        if (isPollingAllowed)
+        {
+            HTTP_HEADERS_HANDLE responseHTTPHeaders = HTTPHeaders_Alloc();
+            if (responseHTTPHeaders == NULL)
+            {
+                /*Codes_SRS_TRANSPORTMULTITHTTP_17_085: [If the call to HTTPAPIEX_SAS_ExecuteRequest did not executed successfully or building any part of the prerequisites of the call fails, then _DoWork shall advance to the next action in this description.] */
+                LogError("unable to HTTPHeaders_Alloc");
+            }
+            else
+            {
+                BUFFER_HANDLE responseContent = BUFFER_new();
+                if (responseContent == NULL)
+                {
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_085: [If the call to HTTPAPIEX_SAS_ExecuteRequest did not executed successfully or building any part of the prerequisites of the call fails, then _DoWork shall advance to the next action in this description.] */
+                    LogError("unable to BUFFER_new");
+                }
+                else
+                {
+                    unsigned int statusCode = 0;
+                    HTTPAPIEX_RESULT r;
+                    if (deviceData->deviceSasToken != NULL)
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_03_001: [if a deviceSasToken exists, HTTPHeaders_ReplaceHeaderNameValuePair shall be invoked with "Authorization" as its second argument and STRING_c_str (deviceSasToken) as its third argument.]*/
+                        if (HTTPHeaders_ReplaceHeaderNameValuePair(deviceData->messageHTTPrequestHeaders, IOTHUB_AUTH_HEADER_VALUE, STRING_c_str(deviceData->deviceSasToken)) != HTTP_HEADERS_OK)
+                        {
+                            r = HTTPAPIEX_ERROR;
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_03_002: [If the result of the invocation of HTTPHeaders_ReplaceHeaderNameValuePair is NOT HTTP_HEADERS_OK then fallthrough.]*/
+                            LogError("Unable to replace the old SAS Token.");
+                        }
+                        else if ((r = HTTPAPIEX_ExecuteRequest(
+                            handleData->httpApiExHandle,
+                            HTTPAPI_REQUEST_GET,                                            /*requestType: GET*/
+                            STRING_c_str(deviceData->messageHTTPrelativePath),         /*relativePath: the message HTTP relative path*/
+                            deviceData->messageHTTPrequestHeaders,                     /*requestHttpHeadersHandle: message HTTP request headers created by _Create*/
+                            NULL,                                                           /*requestContent: NULL*/
+                            &statusCode,                                                    /*statusCode: a pointer to unsigned int which shall be later examined*/
+                            responseHTTPHeaders,                                            /*responseHeadearsHandle: a new instance of HTTP headers*/
+                            responseContent                                                 /*responseContent: a new instance of buffer*/
+                        )) != HTTPAPIEX_OK)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_085: [If the call to HTTPAPIEX_SAS_ExecuteRequest did not executed successfully or building any part of the prerequisites of the call fails, then _DoWork shall advance to the next action in this description.] */
+                            LogError("Unable to HTTPAPIEX_ExecuteRequest.");
+                        }
+                    }
+
+                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_084: [Otherwise, IoTHubTransportHttp_DoWork shall call HTTPAPIEX_SAS_ExecuteRequest passing the following parameters
+                    requestType: GET
+                    relativePath: the message HTTP relative path
+                    requestHttpHeadersHandle: message HTTP request headers created by _Create
+                    requestContent: NULL
+                    statusCode: a pointer to unsigned int which shall be later examined
+                    responseHeadearsHandle: a new instance of HTTP headers
+                    responseContent: a new instance of buffer]
+                    */
+                    else if ((r = HTTPAPIEX_SAS_ExecuteRequest(
+                        deviceData->sasObject,
+                        handleData->httpApiExHandle,
+                        HTTPAPI_REQUEST_GET,                                            /*requestType: GET*/
+                        STRING_c_str(deviceData->messageHTTPrelativePath),         /*relativePath: the message HTTP relative path*/
+                        deviceData->messageHTTPrequestHeaders,                     /*requestHttpHeadersHandle: message HTTP request headers created by _Create*/
+                        NULL,                                                           /*requestContent: NULL*/
+                        &statusCode,                                                    /*statusCode: a pointer to unsigned int which shall be later examined*/
+                        responseHTTPHeaders,                                            /*responseHeadearsHandle: a new instance of HTTP headers*/
+                        responseContent                                                 /*responseContent: a new instance of buffer*/
+                    )) != HTTPAPIEX_OK)
+                    {
+                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_085: [If the call to HTTPAPIEX_SAS_ExecuteRequest did not executed successfully or building any part of the prerequisites of the call fails, then _DoWork shall advance to the next action in this description.] */
+                        LogError("unable to HTTPAPIEX_SAS_ExecuteRequest");
+                    }
+                    if (r == HTTPAPIEX_OK)
+                    {
+                        /*HTTP dialogue was succesfull*/
+                        if (timeNow == (time_t)(-1))
+                        {
+                            deviceData->isFirstPoll = true;
+                        }
+                        else
+                        {
+                            deviceData->isFirstPoll = false;
+                            deviceData->lastPollTime = timeNow;
+                        }
+                        if (statusCode == 204)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_086: [If the HTTPAPIEX_SAS_ExecuteRequest executed successfully then status code shall be examined. Any status code different than 200 causes _DoWork to advance to the next action.] */
+                            /*this is an expected status code, means "no commands", but logging that creates panic*/
+
+                            /*do nothing, advance to next action*/
+                        }
+                        else if (statusCode != 200)
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_086: [If the HTTPAPIEX_SAS_ExecuteRequest executed successfully then status code shall be examined. Any status code different than 200 causes _DoWork to advance to the next action.] */
+                            LogError("expected status code was 200, but actually was received %u... moving on", statusCode);
+                        }
+                        else
+                        {
+                            /*Codes_SRS_TRANSPORTMULTITHTTP_17_087: [If status code is 200, then _DoWork shall make a copy of the value of the "ETag" http header.]*/
+                            const char* etagValue = HTTPHeaders_FindHeaderValue(responseHTTPHeaders, "ETag");
+                            if (etagValue == NULL)
+                            {
+                                LogError("unable to find a received header called \"E-Tag\"");
+                            }
+                            else
+                            {
+                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_088: [If no such header is found or is invalid, then _DoWork shall advance to the next action.]*/
+                                size_t etagsize = strlen(etagValue);
+                                if (
+                                    (etagsize < 2) ||
+                                    (etagValue[0] != '"') ||
+                                    (etagValue[etagsize - 1] != '"')
+                                    )
+                                {
+                                    LogError("ETag is not a valid quoted string");
+                                }
+                                else
+                                {
+                                    const unsigned char* resp_content;
+                                    size_t resp_len;
+                                    /*Codes_SRS_TRANSPORTMULTITHTTP_17_089: [_DoWork shall assemble an IOTHUBMESSAGE_HANDLE from the received HTTP content (using the responseContent buffer).] */
+                                    resp_content = BUFFER_u_char(responseContent);
+                                    resp_len = BUFFER_length(responseContent);
+                                    IOTHUB_MESSAGE_HANDLE receivedMessage = IoTHubMessage_CreateFromByteArray(resp_content, resp_len);
+                                    if (receivedMessage == NULL)
+                                    {
+                                        /*Codes_SRS_TRANSPORTMULTITHTTP_17_092: [If assembling the message fails in any way, then _DoWork shall "abandon" the message.]*/
+                                        LogError("unable to IoTHubMessage_CreateFromByteArray, trying to abandon the message... ");
+                                        if (!abandonOrAcceptMessage(handleData, deviceData, etagValue, IOTHUBMESSAGE_ABANDONED))
+                                        {
+                                            LogError("HTTP Transport layer failed to report ABANDON disposition");
+                                        }
+                                    }
+                                    else
+                                    {
+                                        if (retrieve_message_properties(responseHTTPHeaders, receivedMessage) != 0)
+                                        {
+                                            if (!abandonOrAcceptMessage(handleData, deviceData, etagValue, IOTHUBMESSAGE_ABANDONED))
+                                            {
+                                                LogError("HTTP Transport layer failed to report ABANDON disposition");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            MESSAGE_CALLBACK_INFO* messageData = MESSAGE_CALLBACK_INFO_Create(receivedMessage, handleData, deviceData, etagValue);
+                                            if (messageData == NULL)
+                                            {
+                                                /*Codes_SRS_TRANSPORTMULTITHTTP_10_006: [If assembling the transport context fails, _DoWork shall "abandon" the message.] */
+                                                LogError("failed to assemble callback info");
+                                                if (!abandonOrAcceptMessage(handleData, deviceData, etagValue, IOTHUBMESSAGE_ABANDONED))
+                                                {
+                                                    LogError("HTTP Transport layer failed to report ABANDON disposition");
+                                                }
+                                            }
+                                            else
+                                            {
+                                                bool abandon;
+                                                if (handleData->transport_callbacks.msg_cb(messageData, deviceData->device_transport_ctx))
+                                                {
+                                                    abandon = false;
+                                                }
+                                                else
+                                                {
+                                                    LogError("IoTHubClientCore_LL_MessageCallback failed");
+                                                    abandon = true;
+                                                }
+
+                                                /*Codes_SRS_TRANSPORTMULTITHTTP_17_096: [If IoTHubClientCore_LL_MessageCallback returns false then _DoWork shall "abandon" the message.] */
+                                                if (abandon)
+                                                {
+                                                    (void)IoTHubTransportHttp_SendMessageDisposition(messageData, IOTHUBMESSAGE_ABANDONED);
+                                                }
+                                            }
+                                        }
+                                        IoTHubMessage_Destroy(receivedMessage);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    BUFFER_delete(responseContent);
+                }
+                HTTPHeaders_Free(responseHTTPHeaders);
+            }
+        }
+        else
+        {
+            /*isPollingAllowed is false... */
+            /*do nothing "shall be ignored*/
+        }
+    }
+}
+
+static IOTHUB_PROCESS_ITEM_RESULT IoTHubTransportHttp_ProcessItem(TRANSPORT_LL_HANDLE handle, IOTHUB_IDENTITY_TYPE item_type, IOTHUB_IDENTITY_INFO* iothub_item)
+{
+    (void)handle;
+    (void)item_type;
+    (void)iothub_item;
+    LogError("Currently Not Supported.");
+    return IOTHUB_PROCESS_ERROR;
+}
+
+static void IoTHubTransportHttp_DoWork(TRANSPORT_LL_HANDLE handle)
+{
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_049: [ If handle is NULL, then IoTHubTransportHttp_DoWork shall do nothing. ]*/
+    if (handle != NULL)
+    {
+        HTTPTRANSPORT_HANDLE_DATA* handleData = (HTTPTRANSPORT_HANDLE_DATA*)handle;
+        IOTHUB_DEVICE_HANDLE* listItem;
+        size_t deviceListSize = VECTOR_size(handleData->perDeviceList);
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_052: [ IoTHubTransportHttp_DoWork shall perform a round-robin loop through every deviceHandle in the transport device list. ]*/
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_050: [ IoTHubTransportHttp_DoWork shall call loop through the device list. ] */
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_051: [ IF the list is empty, then IoTHubTransportHttp_DoWork shall do nothing. ]*/
+        for (size_t i = 0; i < deviceListSize; i++)
+        {
+            listItem = (IOTHUB_DEVICE_HANDLE *)VECTOR_element(handleData->perDeviceList, i);
+            HTTPTRANSPORT_PERDEVICE_DATA* perDeviceItem = *(HTTPTRANSPORT_PERDEVICE_DATA**)(listItem);
+            DoEvent(handleData, perDeviceItem);
+            DoMessages(handleData, perDeviceItem);
+        }
+    }
+    else
+    {
+        LogError("Invalid Argument NULL call on DoWork.");
+    }
+}
+
+static IOTHUB_CLIENT_RESULT IoTHubTransportHttp_GetSendStatus(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_STATUS *iotHubClientStatus)
+{
+    IOTHUB_CLIENT_RESULT result;
+
+    if (handle == NULL)
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_111: [ IoTHubTransportHttp_GetSendStatus shall return IOTHUB_CLIENT_INVALID_ARG if called with NULL parameter. ]*/
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("Invalid handle to IoTHubClient HTTP transport instance.");
+    }
+    else if (iotHubClientStatus == NULL)
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("Invalid pointer to output parameter IOTHUB_CLIENT_STATUS.");
+    }
+    else
+    {
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_138: [ IoTHubTransportHttp_GetSendStatus shall locate deviceHandle in the transport device list by calling list_find_if. ]*/
+        IOTHUB_DEVICE_HANDLE* listItem = get_perDeviceDataItem(handle);
+        if (listItem == NULL)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_139: [ If the device structure is not found, then this function shall fail and return with IOTHUB_CLIENT_INVALID_ARG. ]*/
+            result = IOTHUB_CLIENT_INVALID_ARG;
+            LogError("Device not found in transport list.");
+        }
+        else
+        {
+            HTTPTRANSPORT_PERDEVICE_DATA* deviceData = (HTTPTRANSPORT_PERDEVICE_DATA*)(*listItem);
+            /* Codes_SRS_TRANSPORTMULTITHTTP_17_113: [ IoTHubTransportHttp_GetSendStatus shall return IOTHUB_CLIENT_OK and status IOTHUB_CLIENT_SEND_STATUS_BUSY if there are currently event items to be sent or being sent. ] */
+            if (!DList_IsListEmpty(deviceData->waitingToSend))
+            {
+                *iotHubClientStatus = IOTHUB_CLIENT_SEND_STATUS_BUSY;
+            }
+            /* Codes_SRS_TRANSPORTMULTITHTTP_17_112: [ IoTHubTransportHttp_GetSendStatus shall return IOTHUB_CLIENT_OK and status IOTHUB_CLIENT_SEND_STATUS_IDLE if there are currently no event items to be sent or being sent. ] */
+            else
+            {
+                *iotHubClientStatus = IOTHUB_CLIENT_SEND_STATUS_IDLE;
+            }
+            result = IOTHUB_CLIENT_OK;
+        }
+    }
+
+    return result;
+}
+
+static IOTHUB_CLIENT_RESULT IoTHubTransportHttp_SetOption(TRANSPORT_LL_HANDLE handle, const char* option, const void* value)
+{
+    IOTHUB_CLIENT_RESULT result;
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_114: [If handle parameter is NULL then IoTHubTransportHttp_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_115: [If option parameter is NULL then IoTHubTransportHttp_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    /*Codes_SRS_TRANSPORTMULTITHTTP_17_116: [If value parameter is NULL then IoTHubTransportHttp_SetOption shall return IOTHUB_CLIENT_INVALID_ARG.] */
+    if (
+        (handle == NULL) ||
+        (option == NULL) ||
+        (value == NULL)
+        )
+    {
+        result = IOTHUB_CLIENT_INVALID_ARG;
+        LogError("invalid parameter (NULL) passed to IoTHubTransportHttp_SetOption");
+    }
+    else
+    {
+        HTTPTRANSPORT_HANDLE_DATA* handleData = (HTTPTRANSPORT_HANDLE_DATA*)handle;
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_120: ["Batching"] */
+        if (strcmp(OPTION_BATCHING, option) == 0)
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_117: [If optionName is an option handled by IoTHubTransportHttp then it shall be set.] */
+            handleData->doBatchedTransfers = *(bool*)value;
+            result = IOTHUB_CLIENT_OK;
+        }
+        /*Codes_SRS_TRANSPORTMULTITHTTP_17_121: ["MinimumPollingTime"] */
+        else if (strcmp(OPTION_MIN_POLLING_TIME, option) == 0)
+        {
+            handleData->getMinimumPollingTime = *(unsigned int*)value;
+            result = IOTHUB_CLIENT_OK;
+        }
+        else
+        {
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_126: [ "TrustedCerts"] */
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_127: [ NULL shall be allowed. ]*/
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_129: [ This option shall passed down to the lower layer by calling HTTPAPIEX_SetOption. ]*/
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_118: [Otherwise, IoTHubTransport_Http shall call HTTPAPIEX_SetOption with the same parameters and return the translated code.] */
+            HTTPAPIEX_RESULT HTTPAPIEX_result = HTTPAPIEX_SetOption(handleData->httpApiExHandle, option, value);
+            /*Codes_SRS_TRANSPORTMULTITHTTP_17_119: [The following table translates HTTPAPIEX return codes to IOTHUB_CLIENT_RESULT return codes:] */
+            if (HTTPAPIEX_result == HTTPAPIEX_OK)
+            {
+                result = IOTHUB_CLIENT_OK;
+            }
+            else if (HTTPAPIEX_result == HTTPAPIEX_INVALID_ARG)
+            {
+                result = IOTHUB_CLIENT_INVALID_ARG;
+                LogError("HTTPAPIEX_SetOption failed");
+            }
+            else
+            {
+                result = IOTHUB_CLIENT_ERROR;
+                LogError("HTTPAPIEX_SetOption failed");
+            }
+        }
+    }
+    return result;
+}
+
+static STRING_HANDLE IoTHubTransportHttp_GetHostname(TRANSPORT_LL_HANDLE handle)
+{
+    STRING_HANDLE result;
+    /*Codes_SRS_TRANSPORTMULTITHTTP_02_001: [ If handle is NULL then IoTHubTransportHttp_GetHostname shall fail and return NULL. ]*/
+    if (handle == NULL)
+    {
+        LogError("invalid parameter handle=%p", handle);
+        result = NULL;
+    }
+    /*Codes_SRS_TRANSPORTMULTITHTTP_02_002: [ Otherwise IoTHubTransportHttp_GetHostname shall return a non-NULL STRING_HANDLE containing the hostname. ]*/
+    else if ((result = STRING_clone(((HTTPTRANSPORT_HANDLE_DATA*)(handle))->hostName)) == NULL)
+    {
+        LogError("Cannot provide the target host name (STRING_clone failed).");
+    }
+
+    return result;
+}
+
+static int IoTHubTransportHttp_SetRetryPolicy(TRANSPORT_LL_HANDLE handle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitInSeconds)
+{
+    int result;
+    (void)handle;
+    (void)retryPolicy;
+    (void)retryTimeoutLimitInSeconds;
+
+    /* Retry Policy is not currently not available for HTTP */
+
+    result = 0;
+    return result;
+}
+
+static int IotHubTransportHttp_Subscribe_InputQueue(IOTHUB_DEVICE_HANDLE handle)
+{
+    (void)handle;
+    LogError("HTTP does not support input queues");
+    return MU_FAILURE;
+}
+
+static void IotHubTransportHttp_Unsubscribe_InputQueue(IOTHUB_DEVICE_HANDLE handle)
+{
+    (void)handle;
+    LogError("HTTP does not support input queues");
+}
+
+int IoTHubTransportHttp_SetCallbackContext(TRANSPORT_LL_HANDLE handle, void* ctx)
+{
+    int result;
+    if (handle == NULL)
+    {
+        LogError("Invalid parameter specified handle: %p", handle);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        HTTPTRANSPORT_HANDLE_DATA* handleData = (HTTPTRANSPORT_HANDLE_DATA*)handle;
+        handleData->transport_ctx = ctx;
+        result = 0;
+    }
+    return result;
+}
+
+/*Codes_SRS_TRANSPORTMULTITHTTP_17_125: [This function shall return a pointer to a structure of type TRANSPORT_PROVIDER having the following values for its fields:] */
+static TRANSPORT_PROVIDER thisTransportProvider =
+{
+    IoTHubTransportHttp_SendMessageDisposition,     /*pfIotHubTransport_SendMessageDisposition IoTHubTransport_SendMessageDisposition;*/
+    IoTHubTransportHttp_Subscribe_DeviceMethod,     /*pfIoTHubTransport_Subscribe_DeviceMethod IoTHubTransport_Subscribe_DeviceMethod;*/
+    IoTHubTransportHttp_Unsubscribe_DeviceMethod,   /*pfIoTHubTransport_Unsubscribe_DeviceMethod IoTHubTransport_Unsubscribe_DeviceMethod;*/
+    IoTHubTransportHttp_DeviceMethod_Response,      /*pfIoTHubTransport_DeviceMethod_Response IoTHubTransport_DeviceMethod_Response;*/
+    IoTHubTransportHttp_Subscribe_DeviceTwin,       /*pfIoTHubTransport_Subscribe_DeviceTwin IoTHubTransport_Subscribe_DeviceTwin;*/
+    IoTHubTransportHttp_Unsubscribe_DeviceTwin,     /*pfIoTHubTransport_Unsubscribe_DeviceTwin IoTHubTransport_Unsubscribe_DeviceTwin;*/
+    IoTHubTransportHttp_ProcessItem,                /*pfIoTHubTransport_ProcessItem IoTHubTransport_ProcessItem;*/
+    IoTHubTransportHttp_GetHostname,                /*pfIoTHubTransport_GetHostname IoTHubTransport_GetHostname;*/
+    IoTHubTransportHttp_SetOption,                  /*pfIoTHubTransport_SetOption IoTHubTransport_SetOption;*/
+    IoTHubTransportHttp_Create,                     /*pfIoTHubTransport_Create IoTHubTransport_Create;*/
+    IoTHubTransportHttp_Destroy,                    /*pfIoTHubTransport_Destroy IoTHubTransport_Destroy;*/
+    IoTHubTransportHttp_Register,                   /*pfIotHubTransport_Register IoTHubTransport_Register;*/
+    IoTHubTransportHttp_Unregister,                 /*pfIotHubTransport_Unregister IoTHubTransport_Unegister;*/
+    IoTHubTransportHttp_Subscribe,                  /*pfIoTHubTransport_Subscribe IoTHubTransport_Subscribe;*/
+    IoTHubTransportHttp_Unsubscribe,                /*pfIoTHubTransport_Unsubscribe IoTHubTransport_Unsubscribe;*/
+    IoTHubTransportHttp_DoWork,                     /*pfIoTHubTransport_DoWork IoTHubTransport_DoWork;*/
+    IoTHubTransportHttp_SetRetryPolicy,             /*pfIoTHubTransport_DoWork IoTHubTransport_SetRetryPolicy;*/
+    IoTHubTransportHttp_GetSendStatus,              /*pfIoTHubTransport_GetSendStatus IoTHubTransport_GetSendStatus;*/
+    IotHubTransportHttp_Subscribe_InputQueue,       /*pfIoTHubTransport_Subscribe_InputQueue IoTHubTransport_Subscribe_InputQueue; */
+    IotHubTransportHttp_Unsubscribe_InputQueue,     /*pfIoTHubTransport_Unsubscribe_InputQueue IoTHubTransport_Unsubscribe_InputQueue; */
+    IoTHubTransportHttp_SetCallbackContext,         /*pfIoTHubTransport_SetTransportCallbacks IoTHubTransport_SetTransportCallbacks; */
+    IoTHubTransportHttp_GetTwinAsync                /*pfIoTHubTransport_GetTwinAsync IoTHubTransport_GetTwinAsync;*/
+};
+
+const TRANSPORT_PROVIDER* HTTP_Protocol(void)
+{
+    return &thisTransportProvider;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransportmqtt_websockets.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransportmqtt_websockets.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/iothubtransportmqtt_websockets.c	(revision 389)
@@ -0,0 +1,275 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/wsio.h"
+#include "azure_c_shared_utility/tlsio.h"
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/http_proxy_io.h"
+#include "iothubtransportmqtt_websockets.h"
+#include "internal/iothubtransport_mqtt_common.h"
+
+static XIO_HANDLE getWebSocketsIOTransport(const char* fully_qualified_name, const MQTT_TRANSPORT_PROXY_OPTIONS* mqtt_transport_proxy_options)
+{
+    XIO_HANDLE result;
+    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_001: [ `getIoTransportProvider` shall obtain the WebSocket IO interface handle by calling `wsio_get_interface_description`. ]*/
+    const IO_INTERFACE_DESCRIPTION* io_interface_description = wsio_get_interface_description();
+    TLSIO_CONFIG tls_io_config;
+    HTTP_PROXY_IO_CONFIG http_proxy_io_config;
+
+    if (io_interface_description == NULL)
+    {
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_013: [ If `wsio_get_interface_description` returns NULL `getIoTransportProvider` shall return NULL. ] */
+        LogError("Failure constructing the provider interface");
+        result = NULL;
+    }
+    else
+    {
+        WSIO_CONFIG ws_io_config;
+
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_003: [ - `hostname` shall be set to `fully_qualified_name`. ]*/
+        ws_io_config.hostname = fully_qualified_name;
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_004: [ - `port` shall be set to 443. ]*/
+        ws_io_config.port = 443;
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_005: [ - `protocol` shall be set to `MQTT`. ]*/
+        ws_io_config.protocol = "MQTT";
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_006: [ - `resource_name` shall be set to `/$iothub/websocket`. ]*/
+        ws_io_config.resource_name = "/$iothub/websocket";
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_007: [ - `underlying_io_interface` shall be set to the TLS IO interface description. ]*/
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_009: [ `getIoTransportProvider` shall obtain the TLS IO interface handle by calling `platform_get_default_tlsio`. ]*/
+        ws_io_config.underlying_io_interface = platform_get_default_tlsio();
+
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_029: [ If `platform_get_default_tlsio` returns NULL, NULL shall be set in the WebSocket IO parameters structure for the interface description and parameters. ]*/
+        if (ws_io_config.underlying_io_interface == NULL)
+        {
+            ws_io_config.underlying_io_parameters = NULL;
+        }
+        else
+        {
+            /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_008: [ - `underlying_io_parameters` shall be set to the TLS IO arguments. ]*/
+            /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_010: [ The TLS IO parameters shall be a TLSIO_CONFIG structure filled as below: ]*/
+            ws_io_config.underlying_io_parameters = &tls_io_config;
+
+            /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_011: [ - `hostname` shall be set to `fully_qualified_name`. ]*/
+            tls_io_config.hostname = fully_qualified_name;
+            /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_012: [ - `port` shall be set to 443. ]*/
+            tls_io_config.port = 443;
+
+            if (mqtt_transport_proxy_options != NULL)
+            {
+                /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_015: [ - If `mqtt_transport_proxy_options` is not NULL, `underlying_io_interface` shall be set to the HTTP proxy IO interface description. ]*/
+                /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_022: [ `getIoTransportProvider` shall obtain the HTTP proxy IO interface handle by calling `http_proxy_io_get_interface_description`. ]*/
+                tls_io_config.underlying_io_interface = http_proxy_io_get_interface_description();
+
+                /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_028: [ If `http_proxy_io_get_interface_description` returns NULL, NULL shall be set in the TLS IO parameters structure for the interface description and parameters. ]*/
+                if (tls_io_config.underlying_io_interface == NULL)
+                {
+                    tls_io_config.underlying_io_parameters = NULL;
+                }
+                else
+                {
+                    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_016: [ - If `mqtt_transport_proxy_options` is not NULL `underlying_io_parameters` shall be set to the HTTP proxy IO arguments. ]*/
+                    tls_io_config.underlying_io_parameters = &http_proxy_io_config;
+
+                    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_023: [ The HTTP proxy IO arguments shall be an `HTTP_PROXY_IO_CONFIG` structure, filled as below: ]*/
+                    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_026: [ - `proxy_hostname`, `proxy_port`, `username` and `password` shall be copied from the `mqtt_transport_proxy_options` argument. ]*/
+                    http_proxy_io_config.proxy_hostname = mqtt_transport_proxy_options->host_address;
+                    http_proxy_io_config.proxy_port = mqtt_transport_proxy_options->port;
+                    http_proxy_io_config.username = mqtt_transport_proxy_options->username;
+                    http_proxy_io_config.password = mqtt_transport_proxy_options->password;
+                    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_024: [ - `hostname` shall be set to `fully_qualified_name`. ]*/
+                    http_proxy_io_config.hostname = fully_qualified_name;
+                    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_025: [ - `port` shall be set to 443. ]*/
+                    http_proxy_io_config.port = 443;
+                }
+            }
+            else
+            {
+                /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_013: [ - If `mqtt_transport_proxy_options` is NULL, `underlying_io_interface` shall be set to NULL ]*/
+                tls_io_config.underlying_io_interface = NULL;
+                /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_014: [ - If `mqtt_transport_proxy_options` is NULL `underlying_io_parameters` shall be set to NULL. ]*/
+                tls_io_config.underlying_io_parameters = NULL;
+            }
+        }
+
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_012: [ `getIoTransportProvider` shall return the `XIO_HANDLE` returned by `xio_create`. ] */
+        /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_01_002: [ `getIoTransportProvider` shall call `xio_create` while passing the WebSocket IO interface description to it and the WebSocket configuration as a WSIO_CONFIG structure, filled as below ]*/
+        result = xio_create(io_interface_description, &ws_io_config);
+    }
+    return result;
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_001: [ IoTHubTransportMqtt_WS_Create shall create a TRANSPORT_LL_HANDLE by calling into the IoTHubMqttAbstract_Create function. ] */
+static TRANSPORT_LL_HANDLE IoTHubTransportMqtt_WS_Create(const IOTHUBTRANSPORT_CONFIG* config, TRANSPORT_CALLBACKS_INFO* cb_info, void* ctx)
+{
+    return IoTHubTransport_MQTT_Common_Create(config, getWebSocketsIOTransport, cb_info, ctx);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_002: [ IoTHubTransportMqtt_WS_Destroy shall destroy the TRANSPORT_LL_HANDLE by calling into the IoTHubMqttAbstract_Destroy function. ] */
+static void IoTHubTransportMqtt_WS_Destroy(TRANSPORT_LL_HANDLE handle)
+{
+    IoTHubTransport_MQTT_Common_Destroy(handle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_005: [ IoTHubTransportMqtt_WS_Subscribe shall subscribe the TRANSPORT_LL_HANDLE by calling into the IoTHubMqttAbstract_Subscribe function. ] */
+static int IoTHubTransportMqtt_WS_Subscribe(IOTHUB_DEVICE_HANDLE handle)
+{
+    return IoTHubTransport_MQTT_Common_Subscribe(handle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_006: [ IoTHubTransportMqtt_WS_Unsubscribe shall unsubscribe the TRANSPORT_LL_HANDLE by calling into the IoTHubMqttAbstract_Unsubscribe function. ] */
+static void IoTHubTransportMqtt_WS_Unsubscribe(IOTHUB_DEVICE_HANDLE handle)
+{
+    IoTHubTransport_MQTT_Common_Unsubscribe(handle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_015: [ IoTHubTransportMqtt_WS_Subscribe_DeviceMethod shall call into the IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod function ] */
+static int IoTHubTransportMqtt_WS_Subscribe_DeviceMethod(IOTHUB_DEVICE_HANDLE handle)
+{
+    return IoTHubTransport_MQTT_Common_Subscribe_DeviceMethod(handle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_016: [ IoTHubTransportMqtt_WS_Unsubscribe_DeviceMethod shall call into the IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod ] */
+static void IoTHubTransportMqtt_WS_Unsubscribe_DeviceMethod(IOTHUB_DEVICE_HANDLE handle)
+{
+    IoTHubTransport_MQTT_Common_Unsubscribe_DeviceMethod(handle);
+}
+
+static int IoTHubTransportMqtt_WS_DeviceMethod_Response(IOTHUB_DEVICE_HANDLE handle, METHOD_HANDLE methodId, const unsigned char* response, size_t response_size, int status_response)
+{
+    return IoTHubTransport_MQTT_Common_DeviceMethod_Response(handle, methodId, response, response_size, status_response);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_017: [ IoTHubTransportMqtt_WS_Subscribe_DeviceTwin shall call into the IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin ] */
+static int IoTHubTransportMqtt_WS_Subscribe_DeviceTwin(IOTHUB_DEVICE_HANDLE handle)
+{
+    return IoTHubTransport_MQTT_Common_Subscribe_DeviceTwin(handle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_018: [ IoTHubTransportMqtt_WS_Unsubscribe_DeviceTwin shall call into the IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin ] */
+static void IoTHubTransportMqtt_WS_Unsubscribe_DeviceTwin(IOTHUB_DEVICE_HANDLE handle)
+{
+    IoTHubTransport_MQTT_Common_Unsubscribe_DeviceTwin(handle);
+}
+
+// Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_09_001: [ IoTHubTransportMqtt_WS_GetTwinAsync shall call into the IoTHubTransport_MQTT_Common_GetTwinAsync ]
+static IOTHUB_CLIENT_RESULT IoTHubTransportMqtt_WS_GetTwinAsync(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_DEVICE_TWIN_CALLBACK completionCallback, void* callbackContext)
+{
+    return IoTHubTransport_MQTT_Common_GetTwinAsync(handle, completionCallback, callbackContext);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_014: [ IoTHubTransportMqtt_WS_ProcessItem shall call into the IoTHubTransport_MQTT_Common_DoWork function ] */
+static IOTHUB_PROCESS_ITEM_RESULT IoTHubTransportMqtt_WS_ProcessItem(TRANSPORT_LL_HANDLE handle, IOTHUB_IDENTITY_TYPE item_type, IOTHUB_IDENTITY_INFO* iothub_item)
+{
+    return IoTHubTransport_MQTT_Common_ProcessItem(handle, item_type, iothub_item);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_007: [ IoTHubTransportMqtt_WS_DoWork shall call into the IoTHubMqttAbstract_DoWork function. ] */
+static void IoTHubTransportMqtt_WS_DoWork(TRANSPORT_LL_HANDLE handle)
+{
+    IoTHubTransport_MQTT_Common_DoWork(handle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_008: [ IoTHubTransportMqtt_WS_GetSendStatus shall get the send status by calling into the IoTHubMqttAbstract_GetSendStatus function. ] */
+static IOTHUB_CLIENT_RESULT IoTHubTransportMqtt_WS_GetSendStatus(IOTHUB_DEVICE_HANDLE handle, IOTHUB_CLIENT_STATUS *iotHubClientStatus)
+{
+    return IoTHubTransport_MQTT_Common_GetSendStatus(handle, iotHubClientStatus);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_009: [ IoTHubTransportMqtt_WS_SetOption shall set the options by calling into the IoTHubMqttAbstract_SetOption function. ] */
+static IOTHUB_CLIENT_RESULT IoTHubTransportMqtt_WS_SetOption(TRANSPORT_LL_HANDLE handle, const char* option, const void* value)
+{
+    return IoTHubTransport_MQTT_Common_SetOption(handle, option, value);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_003: [ IoTHubTransportMqtt_WS_Register shall register the TRANSPORT_LL_HANDLE by calling into the IoTHubMqttAbstract_Register function. ]*/
+static IOTHUB_DEVICE_HANDLE IoTHubTransportMqtt_WS_Register(TRANSPORT_LL_HANDLE handle, const IOTHUB_DEVICE_CONFIG* device, PDLIST_ENTRY waitingToSend)
+{
+    return IoTHubTransport_MQTT_Common_Register(handle, device, waitingToSend);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_004: [ IoTHubTransportMqtt_WS_Unregister shall register the TRANSPORT_LL_HANDLE by calling into the IoTHubMqttAbstract_Unregister function. ] */
+static void IoTHubTransportMqtt_WS_Unregister(IOTHUB_DEVICE_HANDLE deviceHandle)
+{
+    IoTHubTransport_MQTT_Common_Unregister(deviceHandle);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_010: [ IoTHubTransportMqtt_WS_GetHostname shall get the hostname by calling into the IoTHubMqttAbstract_GetHostname function. ] */
+static STRING_HANDLE IoTHubTransportMqtt_WS_GetHostname(TRANSPORT_LL_HANDLE handle)
+{
+    return IoTHubTransport_MQTT_Common_GetHostname(handle);
+}
+
+static int IoTHubTransportMqtt_WS_SetRetryPolicy(TRANSPORT_LL_HANDLE handle, IOTHUB_CLIENT_RETRY_POLICY retryPolicy, size_t retryTimeoutLimitinSeconds)
+{
+    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_25_012: [** IoTHubTransportMqtt_WS_SetRetryPolicy shall call into the IoTHubMqttAbstract_SetRetryPolicy function.]*/
+    return IoTHubTransport_MQTT_Common_SetRetryPolicy(handle, retryPolicy, retryTimeoutLimitinSeconds);
+}
+
+static IOTHUB_CLIENT_RESULT IoTHubTransportMqtt_WS_SendMessageDisposition(MESSAGE_CALLBACK_INFO* message_data, IOTHUBMESSAGE_DISPOSITION_RESULT disposition)
+{
+    /* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_10_001: [IoTHubTransportMqtt_WS_SendMessageDisposition shall send the message disposition by calling into the IoTHubTransport_MQTT_Common_SendMessageDisposition()]*/
+    return IoTHubTransport_MQTT_Common_SendMessageDisposition(message_data, disposition);
+}
+
+static int IoTHubTransportMqtt_WS_Subscribe_InputQueue(IOTHUB_DEVICE_HANDLE handle)
+{
+    (void)handle;
+    LogError("IoTHubTransportMqtt_WS_Subscribe_InputQueue not implemented\n");
+    return MU_FAILURE;
+}
+
+static void IoTHubTransportMqtt_WS_Unsubscribe_InputQueue(IOTHUB_DEVICE_HANDLE handle)
+{
+    LogError("IoTHubTransportMqtt_WS_Unsubscribe_InputQueue not implemented\n");
+    (void)handle;
+}
+
+static int IotHubTransportMqtt_WS_SetCallbackContext(TRANSPORT_LL_HANDLE handle, void* ctx)
+{
+    return IoTHubTransport_MQTT_SetCallbackContext(handle, ctx);
+}
+
+/* Codes_SRS_IOTHUB_MQTT_WEBSOCKET_TRANSPORT_07_011: [ This function shall return a pointer to a structure of type TRANSPORT_PROVIDER having the following values for its fields:
+IoTHubTransport_SendMessageDisposition = IoTHubTransport_WS_SendMessageDisposition
+IoTHubTransport_Subscribe_DeviceMethod = IoTHubTransport_WS_Subscribe_DeviceMethod
+IoTHubTransport_Unsubscribe_DeviceMethod IoTHubTransport_WS_Unsubscribe_DeviceMethod
+IoTHubTransport_Subscribe_DeviceTwin IoTHubTransport_WS_Subscribe_DeviceTwin
+IoTHubTransport_Unsubscribe_DeviceTwin IoTHubTransport_WS_Unsubscribe_DeviceTwin
+IoTHubTransport_GetHostname = IoTHubTransportMqtt_WS_GetHostname
+IoTHubTransport_Create = IoTHubTransportMqtt_WS_Create
+IoTHubTransport_Destroy = IoTHubTransportMqtt_WS_Destroy
+IoTHubTransport_Subscribe = IoTHubTransportMqtt_WS_Subscribe
+IoTHubTransport_Unsubscribe = IoTHubTransportMqtt_WS_Unsubscribe
+IoTHubTransport_DoWork = IoTHubTransportMqtt_WS_DoWork
+IoTHubTransport_SetOption = IoTHubTransportMqtt_WS_SetOption ] */
+static TRANSPORT_PROVIDER thisTransportProvider_WebSocketsOverTls = {
+    IoTHubTransportMqtt_WS_SendMessageDisposition,
+    IoTHubTransportMqtt_WS_Subscribe_DeviceMethod,
+    IoTHubTransportMqtt_WS_Unsubscribe_DeviceMethod,
+    IoTHubTransportMqtt_WS_DeviceMethod_Response,
+    IoTHubTransportMqtt_WS_Subscribe_DeviceTwin,
+    IoTHubTransportMqtt_WS_Unsubscribe_DeviceTwin,
+    IoTHubTransportMqtt_WS_ProcessItem,
+    IoTHubTransportMqtt_WS_GetHostname,
+    IoTHubTransportMqtt_WS_SetOption,
+    IoTHubTransportMqtt_WS_Create,
+    IoTHubTransportMqtt_WS_Destroy,
+    IoTHubTransportMqtt_WS_Register,
+    IoTHubTransportMqtt_WS_Unregister,
+    IoTHubTransportMqtt_WS_Subscribe,
+    IoTHubTransportMqtt_WS_Unsubscribe,
+    IoTHubTransportMqtt_WS_DoWork,
+    IoTHubTransportMqtt_WS_SetRetryPolicy,
+    IoTHubTransportMqtt_WS_GetSendStatus,
+    IoTHubTransportMqtt_WS_Subscribe_InputQueue,
+    IoTHubTransportMqtt_WS_Unsubscribe_InputQueue,
+    IotHubTransportMqtt_WS_SetCallbackContext,
+    IoTHubTransportMqtt_WS_GetTwinAsync
+};
+
+const TRANSPORT_PROVIDER* MQTT_WebSocket_Protocol(void)
+{
+    return &thisTransportProvider_WebSocketsOverTls;
+}
Index: azure_iot_hub/trunk/azure_iothub/iothub_client/src/version.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/iothub_client/src/version.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/iothub_client/src/version.c	(revision 389)
@@ -0,0 +1,10 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include "iothub_client_version.h"
+
+const char* IoTHubClient_GetVersionString(void)
+{
+    /*Codes_SRS_IOTHUBCLIENT_05_001: [IoTHubClient_GetVersionString shall return a pointer to a constant string which indicates the version of IoTHubClient API.]*/
+    return IOTHUB_SDK_VERSION;
+}
Index: azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_client.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_client.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_client.h	(revision 389)
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef MQTT_CLIENT_H
+#define MQTT_CLIENT_H
+
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_umqtt_c/mqttconst.h"
+#include "azure_umqtt_c/mqtt_message.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstdint>
+extern "C" {
+#else
+#include <stdint.h>
+#endif // __cplusplus
+
+
+typedef struct MQTT_CLIENT_TAG* MQTT_CLIENT_HANDLE;
+
+#define MQTT_CLIENT_EVENT_VALUES     \
+    MQTT_CLIENT_ON_CONNACK,          \
+    MQTT_CLIENT_ON_PUBLISH_ACK,      \
+    MQTT_CLIENT_ON_PUBLISH_RECV,     \
+    MQTT_CLIENT_ON_PUBLISH_REL,      \
+    MQTT_CLIENT_ON_PUBLISH_COMP,     \
+    MQTT_CLIENT_ON_SUBSCRIBE_ACK,    \
+    MQTT_CLIENT_ON_UNSUBSCRIBE_ACK,  \
+    MQTT_CLIENT_ON_PING_RESPONSE,    \
+    MQTT_CLIENT_ON_DISCONNECT
+
+MU_DEFINE_ENUM(MQTT_CLIENT_EVENT_RESULT, MQTT_CLIENT_EVENT_VALUES);
+
+#define MQTT_CLIENT_EVENT_ERROR_VALUES     \
+    MQTT_CLIENT_CONNECTION_ERROR,          \
+    MQTT_CLIENT_PARSE_ERROR,               \
+    MQTT_CLIENT_MEMORY_ERROR,              \
+    MQTT_CLIENT_COMMUNICATION_ERROR,       \
+    MQTT_CLIENT_NO_PING_RESPONSE,          \
+    MQTT_CLIENT_UNKNOWN_ERROR
+
+MU_DEFINE_ENUM(MQTT_CLIENT_EVENT_ERROR, MQTT_CLIENT_EVENT_ERROR_VALUES);
+
+typedef void(*ON_MQTT_OPERATION_CALLBACK)(MQTT_CLIENT_HANDLE handle, MQTT_CLIENT_EVENT_RESULT actionResult, const void* msgInfo, void* callbackCtx);
+typedef void(*ON_MQTT_ERROR_CALLBACK)(MQTT_CLIENT_HANDLE handle, MQTT_CLIENT_EVENT_ERROR error, void* callbackCtx);
+typedef void(*ON_MQTT_MESSAGE_RECV_CALLBACK)(MQTT_MESSAGE_HANDLE msgHandle, void* callbackCtx);
+typedef void(*ON_MQTT_DISCONNECTED_CALLBACK)(void* callbackCtx);
+
+MOCKABLE_FUNCTION(, MQTT_CLIENT_HANDLE, mqtt_client_init, ON_MQTT_MESSAGE_RECV_CALLBACK, msgRecv, ON_MQTT_OPERATION_CALLBACK, opCallback, void*, opCallbackCtx, ON_MQTT_ERROR_CALLBACK, onErrorCallBack, void*, errorCBCtx);
+MOCKABLE_FUNCTION(, void, mqtt_client_deinit, MQTT_CLIENT_HANDLE, handle);
+
+MOCKABLE_FUNCTION(, int, mqtt_client_connect, MQTT_CLIENT_HANDLE, handle, XIO_HANDLE, xioHandle, MQTT_CLIENT_OPTIONS*, mqttOptions);
+MOCKABLE_FUNCTION(, int, mqtt_client_disconnect, MQTT_CLIENT_HANDLE, handle, ON_MQTT_DISCONNECTED_CALLBACK, callback, void*, ctx);
+
+MOCKABLE_FUNCTION(, int, mqtt_client_subscribe, MQTT_CLIENT_HANDLE, handle, uint16_t, packetId, SUBSCRIBE_PAYLOAD*, subscribeList, size_t, count);
+MOCKABLE_FUNCTION(, int, mqtt_client_unsubscribe, MQTT_CLIENT_HANDLE, handle, uint16_t, packetId, const char**, unsubscribeList, size_t, count);
+
+MOCKABLE_FUNCTION(, int, mqtt_client_publish, MQTT_CLIENT_HANDLE, handle, MQTT_MESSAGE_HANDLE, msgHandle);
+
+MOCKABLE_FUNCTION(, void, mqtt_client_dowork, MQTT_CLIENT_HANDLE, handle);
+
+MOCKABLE_FUNCTION(, void, mqtt_client_set_trace, MQTT_CLIENT_HANDLE, handle, bool, traceOn, bool, rawBytesOn);
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // MQTTCLIENT_H
Index: azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_codec.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_codec.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_codec.h	(revision 389)
@@ -0,0 +1,47 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef MQTT_CODEC_H
+#define MQTT_CODEC_H
+
+#include "azure_c_shared_utility/xio.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+#include "azure_umqtt_c/mqttconst.h"
+#include "azure_c_shared_utility/strings.h"
+
+#ifdef __cplusplus
+#include <cstdint>
+#include <cstddef>
+extern "C" {
+#else
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+#endif // __cplusplus
+
+typedef struct MQTTCODEC_INSTANCE_TAG* MQTTCODEC_HANDLE;
+
+typedef void(*ON_PACKET_COMPLETE_CALLBACK)(void* context, CONTROL_PACKET_TYPE packet, int flags, BUFFER_HANDLE headerData);
+
+MOCKABLE_FUNCTION(, MQTTCODEC_HANDLE, mqtt_codec_create, ON_PACKET_COMPLETE_CALLBACK, packetComplete, void*, callbackCtx);
+MOCKABLE_FUNCTION(, void, mqtt_codec_destroy, MQTTCODEC_HANDLE, handle);
+
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_connect, const MQTT_CLIENT_OPTIONS*, mqttOptions, STRING_HANDLE, trace_log);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_disconnect);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_publish, QOS_VALUE, qosValue, bool, duplicateMsg, bool, serverRetain, uint16_t, packetId, const char*, topicName, const uint8_t*, msgBuffer, size_t, buffLen, STRING_HANDLE, trace_log);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_publishAck, uint16_t, packetId);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_publishReceived, uint16_t, packetId);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_publishRelease, uint16_t, packetId);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_publishComplete, uint16_t, packetId);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_ping);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_subscribe, uint16_t, packetId, SUBSCRIBE_PAYLOAD*, subscribeList, size_t, count, STRING_HANDLE, trace_log);
+MOCKABLE_FUNCTION(, BUFFER_HANDLE, mqtt_codec_unsubscribe, uint16_t, packetId, const char**, unsubscribeList, size_t, count, STRING_HANDLE, trace_log);
+
+MOCKABLE_FUNCTION(, int, mqtt_codec_bytesReceived, MQTTCODEC_HANDLE, handle, const unsigned char*, buffer, size_t, size);
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // MQTT_CODEC_H
Index: azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_message.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_message.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqtt_message.h	(revision 389)
@@ -0,0 +1,50 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef MQTT_MESSAGE_H
+#define MQTT_MESSAGE_H
+
+#include "azure_umqtt_c/mqttconst.h"
+#include "azure_c_shared_utility/umock_c_prod.h"
+
+#ifdef __cplusplus
+#include <cstdint>
+#include <cstddef>
+extern "C" {
+#else
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+#endif // __cplusplus
+
+typedef struct MQTT_MESSAGE_TAG* MQTT_MESSAGE_HANDLE;
+
+MOCKABLE_FUNCTION(, MQTT_MESSAGE_HANDLE, mqttmessage_create_in_place, uint16_t, packetId, const char*, topicName, QOS_VALUE, qosValue, const uint8_t*, appMsg, size_t, appMsgLength);
+MOCKABLE_FUNCTION(, MQTT_MESSAGE_HANDLE, mqttmessage_create, uint16_t, packetId, const char*, topicName, QOS_VALUE, qosValue, const uint8_t*, appMsg, size_t, appMsgLength);
+MOCKABLE_FUNCTION(,void, mqttmessage_destroy, MQTT_MESSAGE_HANDLE, handle);
+MOCKABLE_FUNCTION(,MQTT_MESSAGE_HANDLE, mqttmessage_clone, MQTT_MESSAGE_HANDLE, handle);
+
+MOCKABLE_FUNCTION(, uint16_t, mqttmessage_getPacketId, MQTT_MESSAGE_HANDLE, handle);
+MOCKABLE_FUNCTION(, const char*, mqttmessage_getTopicName, MQTT_MESSAGE_HANDLE, handle);
+
+/*
+*    @brief    Gets the individual names of the MQTT topic levels, in the original order.
+*    @param    handle    Handle to the MQTT message.
+*    @param    levels    Pointer the variable where to store the level names.
+*    @param    count     Number of levels in the topic name.
+*    @return   return    Zero if no failures occur, or non-zero otherwise.
+*/
+MOCKABLE_FUNCTION(, int, mqttmessage_getTopicLevels, MQTT_MESSAGE_HANDLE, handle, char***, levels, size_t*, count);
+
+MOCKABLE_FUNCTION(, QOS_VALUE, mqttmessage_getQosType, MQTT_MESSAGE_HANDLE, handle);
+MOCKABLE_FUNCTION(, bool, mqttmessage_getIsDuplicateMsg, MQTT_MESSAGE_HANDLE, handle);
+MOCKABLE_FUNCTION(, bool, mqttmessage_getIsRetained, MQTT_MESSAGE_HANDLE, handle);
+MOCKABLE_FUNCTION(, int, mqttmessage_setIsDuplicateMsg, MQTT_MESSAGE_HANDLE, handle, bool, duplicateMsg);
+MOCKABLE_FUNCTION(, int, mqttmessage_setIsRetained, MQTT_MESSAGE_HANDLE, handle, bool, retainMsg);
+MOCKABLE_FUNCTION(, const APP_PAYLOAD*, mqttmessage_getApplicationMsg, MQTT_MESSAGE_HANDLE, handle);
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // MQTT_MESSAGE_H
Index: azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqttconst.h
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqttconst.h	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/inc/azure_umqtt_c/mqttconst.h	(revision 389)
@@ -0,0 +1,111 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#ifndef MQTTCONST_H
+#define MQTTCONST_H
+
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/macro_utils.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdint>
+extern "C" {
+#else
+#include <stddef.h>
+#include <stdint.h>
+#endif /* __cplusplus */
+
+#define CONTROL_PACKET_TYPE_VALUES \
+    CONNECT_TYPE = 0x10, \
+    CONNACK_TYPE = 0x20, \
+    PUBLISH_TYPE = 0x30, \
+    PUBACK_TYPE = 0x40, \
+    PUBREC_TYPE = 0x50, \
+    PUBREL_TYPE = 0x60, \
+    PUBCOMP_TYPE = 0x70, \
+    SUBSCRIBE_TYPE = 0x80, \
+    SUBACK_TYPE = 0x90, \
+    UNSUBSCRIBE_TYPE = 0xA0, \
+    UNSUBACK_TYPE = 0xB0, \
+    PINGREQ_TYPE = 0xC0, \
+    PINGRESP_TYPE = 0xD0, \
+    DISCONNECT_TYPE = 0xE0, \
+    PACKET_TYPE_ERROR, \
+    UNKNOWN_TYPE
+
+MU_DEFINE_ENUM(CONTROL_PACKET_TYPE, CONTROL_PACKET_TYPE_VALUES)
+
+#define QOS_VALUE_VALUES \
+    DELIVER_AT_MOST_ONCE = 0x00, \
+    DELIVER_AT_LEAST_ONCE = 0x01, \
+    DELIVER_EXACTLY_ONCE = 0x02, \
+    DELIVER_FAILURE = 0x80
+
+MU_DEFINE_ENUM(QOS_VALUE, QOS_VALUE_VALUES)
+
+typedef struct APP_PAYLOAD_TAG
+{
+    uint8_t* message;
+    size_t length;
+} APP_PAYLOAD;
+
+typedef struct MQTT_CLIENT_OPTIONS_TAG
+{
+    char* clientId;
+    char* willTopic;
+    char* willMessage;
+    char* username;
+    char* password;
+    uint16_t keepAliveInterval;
+    bool messageRetain;
+    bool useCleanSession;
+    QOS_VALUE qualityOfServiceValue;
+    bool log_trace;
+} MQTT_CLIENT_OPTIONS;
+
+typedef enum CONNECT_RETURN_CODE_TAG
+{
+    CONNECTION_ACCEPTED = 0x00,
+    CONN_REFUSED_UNACCEPTABLE_VERSION = 0x01,
+    CONN_REFUSED_ID_REJECTED = 0x02,
+    CONN_REFUSED_SERVER_UNAVAIL = 0x03,
+    CONN_REFUSED_BAD_USERNAME_PASSWORD = 0x04,
+    CONN_REFUSED_NOT_AUTHORIZED = 0x05,
+    CONN_REFUSED_UNKNOWN
+} CONNECT_RETURN_CODE;
+
+typedef struct CONNECT_ACK_TAG
+{
+    bool isSessionPresent;
+    CONNECT_RETURN_CODE returnCode;
+} CONNECT_ACK;
+
+typedef struct SUBSCRIBE_PAYLOAD_TAG
+{
+    const char* subscribeTopic;
+    QOS_VALUE qosReturn;
+} SUBSCRIBE_PAYLOAD;
+
+typedef struct SUBSCRIBE_ACK_TAG
+{
+    uint16_t packetId;
+    QOS_VALUE* qosReturn;
+    size_t qosCount;
+} SUBSCRIBE_ACK;
+
+typedef struct UNSUBSCRIBE_ACK_TAG
+{
+    uint16_t packetId;
+} UNSUBSCRIBE_ACK;
+
+typedef struct PUBLISH_ACK_TAG
+{
+    uint16_t packetId;
+} PUBLISH_ACK;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // MQTTCONST_H
Index: azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_client.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_client.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_client.c	(revision 389)
@@ -0,0 +1,1311 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_c_shared_utility/agenttime.h"
+#include "azure_c_shared_utility/const_defines.h"
+#include "azure_c_shared_utility/crt_abstractions.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/platform.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/threadapi.h"
+#include "azure_c_shared_utility/tickcounter.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/macro_utils.h"
+
+#include "azure_umqtt_c/mqtt_client.h"
+#include "azure_umqtt_c/mqtt_codec.h"
+#include <inttypes.h>
+
+#define VARIABLE_HEADER_OFFSET          2
+#define RETAIN_FLAG_MASK                0x1
+#define QOS_LEAST_ONCE_FLAG_MASK        0x2
+#define QOS_EXACTLY_ONCE_FLAG_MASK      0x4
+#define DUPLICATE_FLAG_MASK             0x8
+#define CONNECT_PACKET_MASK             0xf0
+#define TIME_MAX_BUFFER                 16
+#define DEFAULT_MAX_PING_RESPONSE_TIME  80  // % of time to send pings
+#define MAX_CLOSE_RETRIES               20
+
+static const char* const TRUE_CONST = "true";
+static const char* const FALSE_CONST = "false";
+
+MU_DEFINE_ENUM_STRINGS(QOS_VALUE, QOS_VALUE_VALUES);
+
+typedef struct MQTT_CLIENT_TAG
+{
+    XIO_HANDLE xioHandle;
+    MQTTCODEC_HANDLE codec_handle;
+    CONTROL_PACKET_TYPE packetState;
+    TICK_COUNTER_HANDLE packetTickCntr;
+    tickcounter_ms_t packetSendTimeMs;
+    ON_MQTT_OPERATION_CALLBACK fnOperationCallback;
+    ON_MQTT_MESSAGE_RECV_CALLBACK fnMessageRecv;
+    void* ctx;
+    ON_MQTT_ERROR_CALLBACK fnOnErrorCallBack;
+    void* errorCBCtx;
+    ON_MQTT_DISCONNECTED_CALLBACK disconnect_cb;
+    void* disconnect_ctx;
+    QOS_VALUE qosValue;
+    uint16_t keepAliveInterval;
+    MQTT_CLIENT_OPTIONS mqttOptions;
+    bool clientConnected;
+    bool socketConnected;
+    bool logTrace;
+    bool rawBytesTrace;
+    tickcounter_ms_t timeSincePing;
+    uint16_t maxPingRespTime;
+} MQTT_CLIENT;
+
+static void on_connection_closed(void* context)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)context;
+    if (mqtt_client != NULL)
+    {
+        mqtt_client->socketConnected = false;
+        mqtt_client->clientConnected = false;
+        if (mqtt_client->disconnect_cb)
+        {
+            mqtt_client->disconnect_cb(mqtt_client->disconnect_ctx);
+        }
+    }
+}
+
+static void close_connection(MQTT_CLIENT* mqtt_client)
+{
+    if (mqtt_client->socketConnected)
+    {
+        (void)xio_close(mqtt_client->xioHandle, on_connection_closed, mqtt_client);
+        if (mqtt_client->disconnect_cb == NULL)
+        {
+            size_t counter = 0;
+            do
+            {
+                xio_dowork(mqtt_client->xioHandle);
+                counter++;
+                ThreadAPI_Sleep(2);
+            } while (mqtt_client->clientConnected && counter < MAX_CLOSE_RETRIES);
+        }
+        // Clear the handle because we don't use it anymore
+        mqtt_client->xioHandle = NULL;
+    }
+    else
+    {
+        if (mqtt_client->disconnect_cb)
+        {
+            mqtt_client->disconnect_cb(mqtt_client->disconnect_ctx);
+        }
+    }
+    mqtt_client->xioHandle = NULL;
+}
+
+static void set_error_callback(MQTT_CLIENT* mqtt_client, MQTT_CLIENT_EVENT_ERROR error_type)
+{
+    if (mqtt_client->fnOnErrorCallBack)
+    {
+        mqtt_client->fnOnErrorCallBack(mqtt_client, error_type, mqtt_client->errorCBCtx);
+    }
+    close_connection(mqtt_client);
+}
+
+static STRING_HANDLE construct_trace_log_handle(MQTT_CLIENT* mqtt_client)
+{
+    STRING_HANDLE trace_log;
+    if (mqtt_client->logTrace)
+    {
+        trace_log = STRING_new();
+    }
+    else
+    {
+        trace_log = NULL;
+    }
+    return trace_log;
+}
+
+static uint16_t byteutil_read_uint16(uint8_t** buffer, size_t byteLen)
+{
+    uint16_t result = 0;
+    if (buffer != NULL && *buffer != NULL && byteLen >= 2)
+    {
+        result = 256 * (**buffer) + (*(*buffer + 1));
+        *buffer += 2; // Move the ptr
+    }
+    else
+    {
+        LogError("byteutil_read_uint16 == NULL or less than 2");
+    }
+    return result;
+}
+
+static char* byteutil_readUTF(uint8_t** buffer, size_t* byteLen)
+{
+    char* result = NULL;
+
+    const uint8_t* bufferInitial = *buffer;
+    // Get the length of the string
+    uint16_t stringLen = byteutil_read_uint16(buffer, *byteLen);
+    // Verify that byteutil_read_uint16 succeeded (by stringLen>0) and that we're
+    // not being asked to read a string longer than buffer passed in.
+    if ((stringLen > 0) && ((size_t)(stringLen + (*buffer - bufferInitial)) <= *byteLen))
+    {
+        result = (char*)malloc(stringLen + 1);
+        if (result != NULL)
+        {
+            (void)memcpy(result, *buffer, stringLen);
+            result[stringLen] = '\0';
+            *buffer += stringLen;
+            *byteLen = stringLen;
+         }
+    }
+    else
+    {
+        LogError("String passed not a valid UTF.");
+    }
+
+    return result;
+}
+
+static uint8_t byteutil_readByte(uint8_t** buffer)
+{
+    uint8_t result = 0;
+    if (buffer != NULL)
+    {
+        result = **buffer;
+        (*buffer)++;
+    }
+    else
+    {
+        LogError("readByte buffer == NULL.");
+    }
+    return result;
+}
+
+static void sendComplete(void* context, IO_SEND_RESULT send_result)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)context;
+    if (mqtt_client != NULL)
+    {
+        if (send_result == IO_SEND_OK)
+        {
+            if (mqtt_client->packetState == DISCONNECT_TYPE)
+            {
+                /*Codes_SRS_MQTT_CLIENT_07_032: [If the actionResult parameter is of type MQTT_CLIENT_ON_DISCONNECT the the msgInfo value shall be NULL.]*/
+                if (mqtt_client->fnOperationCallback != NULL)
+                {
+                    mqtt_client->fnOperationCallback(mqtt_client, MQTT_CLIENT_ON_DISCONNECT, NULL, mqtt_client->ctx);
+                }
+                // close the xio
+                close_connection(mqtt_client);
+            }
+        }
+        else if (send_result == IO_SEND_ERROR)
+        {
+            LogError("MQTT Send Complete Failure send_result: %d", (int)send_result);
+            set_error_callback(mqtt_client, MQTT_CLIENT_COMMUNICATION_ERROR);
+        }
+    }
+    else
+    {
+        LogError("MQTT Send Complete Failure with NULL mqtt_client");
+    }
+}
+
+#ifndef NO_LOGGING
+static void getLogTime(char* timeResult, size_t len)
+{
+    if (timeResult != NULL)
+    {
+        time_t agent_time = get_time(NULL);
+        if (agent_time == (time_t)-1)
+        {
+            timeResult[0] = '\0';
+        }
+        else
+        {
+            struct tm* tmInfo = localtime(&agent_time);
+            if (tmInfo == NULL)
+            {
+                timeResult[0] = '\0';
+            }
+            else
+            {
+                if (strftime(timeResult, len, "%H:%M:%S", tmInfo) == 0)
+                {
+                    timeResult[0] = '\0';
+                }
+            }
+        }
+    }
+}
+
+#ifdef ENABLE_RAW_TRACE
+static const char* retrievePacketType(CONTROL_PACKET_TYPE packet)
+{
+    switch (packet&CONNECT_PACKET_MASK)
+    {
+        case CONNECT_TYPE: return "CONNECT";
+        case CONNACK_TYPE:  return "CONNACK";
+        case PUBLISH_TYPE:  return "PUBLISH";
+        case PUBACK_TYPE:  return "PUBACK";
+        case PUBREC_TYPE:  return "PUBREC";
+        case PUBREL_TYPE:  return "PUBREL";
+        case SUBSCRIBE_TYPE:  return "SUBSCRIBE";
+        case SUBACK_TYPE:  return "SUBACK";
+        case UNSUBSCRIBE_TYPE:  return "UNSUBSCRIBE";
+        case UNSUBACK_TYPE:  return "UNSUBACK";
+        case PINGREQ_TYPE:  return "PINGREQ";
+        case PINGRESP_TYPE:  return "PINGRESP";
+        case DISCONNECT_TYPE:  return "DISCONNECT";
+        default:
+        case PACKET_TYPE_ERROR:
+        case UNKNOWN_TYPE:
+            return "UNKNOWN";
+    }
+}
+
+static void logOutgoingRawTrace(MQTT_CLIENT* mqtt_client, const uint8_t* data, size_t length)
+{
+    if (mqtt_client != NULL && data != NULL && length > 0 && mqtt_client->rawBytesTrace)
+    {
+        char tmBuffer[TIME_MAX_BUFFER];
+        getLogTime(tmBuffer, TIME_MAX_BUFFER);
+
+        LOG(AZ_LOG_TRACE, 0, "-> %s %s: ", tmBuffer, retrievePacketType((unsigned char)data[0]));
+        size_t index = 0;
+        for (index = 0; index < length; index++)
+        {
+            LOG(AZ_LOG_TRACE, 0, "0x%02x ", data[index]);
+        }
+        LOG(AZ_LOG_TRACE, LOG_LINE, " ");
+    }
+}
+
+static void logIncomingRawTrace(MQTT_CLIENT* mqtt_client, CONTROL_PACKET_TYPE packet, uint8_t flags, const uint8_t* data, size_t length)
+{
+    if (mqtt_client != NULL && mqtt_client->rawBytesTrace)
+    {
+        if (data != NULL && length > 0)
+        {
+            char tmBuffer[TIME_MAX_BUFFER];
+            getLogTime(tmBuffer, TIME_MAX_BUFFER);
+
+            LOG(AZ_LOG_TRACE, 0, "<- %s %s: 0x%02x 0x%02x ", tmBuffer, retrievePacketType((CONTROL_PACKET_TYPE)packet), (unsigned int)(packet | flags), (unsigned int)length);
+            size_t index = 0;
+            for (index = 0; index < length; index++)
+            {
+                LOG(AZ_LOG_TRACE, 0, "0x%02x ", data[index]);
+            }
+            LOG(AZ_LOG_TRACE, LOG_LINE, " ");
+        }
+        else if (packet == PINGRESP_TYPE)
+        {
+            char tmBuffer[TIME_MAX_BUFFER];
+            getLogTime(tmBuffer, TIME_MAX_BUFFER);
+            LOG(AZ_LOG_TRACE, LOG_LINE, "<- %s %s: 0x%02x 0x%02x ", tmBuffer, retrievePacketType((CONTROL_PACKET_TYPE)packet), (unsigned int)(packet | flags), (unsigned int)length);
+        }
+    }
+}
+#endif // ENABLE_RAW_TRACE
+
+static void log_outgoing_trace(MQTT_CLIENT* mqtt_client, STRING_HANDLE trace_log)
+{
+    if (mqtt_client != NULL && mqtt_client->logTrace && trace_log != NULL)
+    {
+        char tmBuffer[TIME_MAX_BUFFER];
+        getLogTime(tmBuffer, TIME_MAX_BUFFER);
+        LOG(AZ_LOG_TRACE, LOG_LINE, "-> %s %s", tmBuffer, STRING_c_str(trace_log));
+    }
+}
+
+static void log_incoming_trace(MQTT_CLIENT* mqtt_client, STRING_HANDLE trace_log)
+{
+    if (mqtt_client != NULL && mqtt_client->logTrace && trace_log != NULL)
+    {
+        char tmBuffer[TIME_MAX_BUFFER];
+        getLogTime(tmBuffer, TIME_MAX_BUFFER);
+        LOG(AZ_LOG_TRACE, LOG_LINE, "<- %s %s", tmBuffer, STRING_c_str(trace_log) );
+    }
+}
+#else // NO_LOGGING
+static void logOutgoingRawTrace(MQTT_CLIENT* mqtt_client, const uint8_t* data, size_t length)
+{
+    AZURE_UNREFERENCED_PARAMETER(mqtt_client);
+    AZURE_UNREFERENCED_PARAMETER(data);
+    AZURE_UNREFERENCED_PARAMETER(length);
+}
+
+static void log_outgoing_trace(MQTT_CLIENT* mqtt_client, STRING_HANDLE trace_log)
+{
+    AZURE_UNREFERENCED_PARAMETER(mqtt_client);
+    AZURE_UNREFERENCED_PARAMETER(trace_log);
+}
+
+static void log_incoming_trace(MQTT_CLIENT* mqtt_client, STRING_HANDLE trace_log)
+{
+    AZURE_UNREFERENCED_PARAMETER(mqtt_client);
+    AZURE_UNREFERENCED_PARAMETER(trace_log);
+}
+
+static void logIncomingRawTrace(MQTT_CLIENT* mqtt_client, CONTROL_PACKET_TYPE packet, uint8_t flags, const uint8_t* data, size_t length)
+{
+    AZURE_UNREFERENCED_PARAMETER(mqtt_client);
+    AZURE_UNREFERENCED_PARAMETER(packet);
+    AZURE_UNREFERENCED_PARAMETER(flags);
+    AZURE_UNREFERENCED_PARAMETER(data);
+    AZURE_UNREFERENCED_PARAMETER(length);
+}
+#endif // NO_LOGGING
+
+static int sendPacketItem(MQTT_CLIENT* mqtt_client, const unsigned char* data, size_t length)
+{
+    int result;
+
+    if (tickcounter_get_current_ms(mqtt_client->packetTickCntr, &mqtt_client->packetSendTimeMs) != 0)
+    {
+        LogError("Failure getting current ms tickcounter");
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = xio_send(mqtt_client->xioHandle, (const void*)data, length, sendComplete, mqtt_client);
+        if (result != 0)
+        {
+            LogError("%d: Failure sending control packet data", result);
+            result = MU_FAILURE;
+        }
+        else
+        {
+#ifdef ENABLE_RAW_TRACE
+            logOutgoingRawTrace(mqtt_client, (const uint8_t*)data, length);
+#endif
+        }
+    }
+    return result;
+}
+
+static void onOpenComplete(void* context, IO_OPEN_RESULT open_result)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)context;
+    if (mqtt_client != NULL)
+    {
+        if (open_result == IO_OPEN_OK && !mqtt_client->socketConnected)
+        {
+            mqtt_client->packetState = CONNECT_TYPE;
+            mqtt_client->socketConnected = true;
+
+            STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client);
+
+            // Send the Connect packet
+            BUFFER_HANDLE connPacket = mqtt_codec_connect(&mqtt_client->mqttOptions, trace_log);
+            if (connPacket == NULL)
+            {
+                LogError("Error: mqtt_codec_connect failed");
+            }
+            else
+            {
+                size_t size = BUFFER_length(connPacket);
+                /*Codes_SRS_MQTT_CLIENT_07_009: [On success mqtt_client_connect shall send the MQTT CONNECT to the endpoint.]*/
+                if (sendPacketItem(mqtt_client, BUFFER_u_char(connPacket), size) != 0)
+                {
+                    LogError("Error: mqtt_codec_connect failed");
+                }
+                else
+                {
+                    log_outgoing_trace(mqtt_client, trace_log);
+                }
+                BUFFER_delete(connPacket);
+            }
+            if (trace_log != NULL)
+            {
+                STRING_delete(trace_log);
+            }
+        }
+        else
+        {
+            if (mqtt_client->socketConnected == false && mqtt_client->fnOnErrorCallBack)
+            {
+                mqtt_client->fnOnErrorCallBack(mqtt_client, MQTT_CLIENT_CONNECTION_ERROR, mqtt_client->errorCBCtx);
+            }
+            close_connection(mqtt_client);
+        }
+    }
+    else
+    {
+        LogError("Error: mqtt_client is NULL");
+    }
+}
+
+static void onBytesReceived(void* context, const unsigned char* buffer, size_t size)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)context;
+    if (mqtt_client != NULL)
+    {
+        if (mqtt_codec_bytesReceived(mqtt_client->codec_handle, buffer, size) != 0)
+        {
+            set_error_callback(mqtt_client, MQTT_CLIENT_PARSE_ERROR);
+        }
+    }
+    else
+    {
+        LogError("Error: mqtt_client is NULL");
+    }
+}
+
+static void onIoError(void* context)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)context;
+    if (mqtt_client != NULL && mqtt_client->fnOperationCallback)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_032: [If the actionResult parameter is of type MQTT_CLIENT_ON_DISCONNECT the the msgInfo value shall be NULL.]*/
+        /* Codes_SRS_MQTT_CLIENT_07_036: [ If an error is encountered by the ioHandle the mqtt_client shall call xio_close. ] */
+        set_error_callback(mqtt_client, MQTT_CLIENT_CONNECTION_ERROR);
+    }
+    else
+    {
+        LogError("Error invalid parameter: mqtt_client: %p", mqtt_client);
+    }
+}
+
+static void clear_mqtt_options(MQTT_CLIENT* mqtt_client)
+{
+    if (mqtt_client->mqttOptions.clientId != NULL)
+    {
+        free(mqtt_client->mqttOptions.clientId);
+        mqtt_client->mqttOptions.clientId = NULL;
+    }
+
+    if (mqtt_client->mqttOptions.willTopic != NULL)
+    {
+        free(mqtt_client->mqttOptions.willTopic);
+        mqtt_client->mqttOptions.willTopic = NULL;
+    }
+
+    if (mqtt_client->mqttOptions.willMessage != NULL)
+    {
+        free(mqtt_client->mqttOptions.willMessage);
+        mqtt_client->mqttOptions.willMessage = NULL;
+    }
+
+    if (mqtt_client->mqttOptions.username != NULL)
+    {
+        free(mqtt_client->mqttOptions.username);
+        mqtt_client->mqttOptions.username = NULL;
+    }
+
+    if (mqtt_client->mqttOptions.password != NULL)
+    {
+        free(mqtt_client->mqttOptions.password);
+        mqtt_client->mqttOptions.password = NULL;
+    }
+}
+
+static int cloneMqttOptions(MQTT_CLIENT* mqtt_client, const MQTT_CLIENT_OPTIONS* mqttOptions)
+{
+    int result = 0;
+    char* temp_option;
+
+    if (mqttOptions->clientId != NULL)
+    {
+        if (mallocAndStrcpy_s(&temp_option, mqttOptions->clientId) != 0)
+        {
+            result = MU_FAILURE;
+            LogError("mallocAndStrcpy_s clientId");
+        }
+        else
+        {
+            if (mqtt_client->mqttOptions.clientId != NULL)
+            {
+                free(mqtt_client->mqttOptions.clientId);
+            }
+            mqtt_client->mqttOptions.clientId = temp_option;
+        }
+    }
+    if (result == 0 && mqttOptions->willTopic != NULL)
+    {
+        temp_option = NULL;
+        if (mallocAndStrcpy_s(&temp_option, mqttOptions->willTopic) != 0)
+        {
+            result = MU_FAILURE;
+            LogError("mallocAndStrcpy_s willTopic");
+        }
+        else
+        {
+            if (mqtt_client->mqttOptions.willTopic != NULL)
+            {
+                free(mqtt_client->mqttOptions.willTopic);
+            }
+            mqtt_client->mqttOptions.willTopic = temp_option;
+        }
+    }
+    if (result == 0 && mqttOptions->willMessage != NULL)
+    {
+        temp_option = NULL;
+        if (mallocAndStrcpy_s(&temp_option, mqttOptions->willMessage) != 0)
+        {
+            LogError("mallocAndStrcpy_s willMessage");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mqtt_client->mqttOptions.willMessage != NULL)
+            {
+                free(mqtt_client->mqttOptions.willMessage);
+            }
+            mqtt_client->mqttOptions.willMessage = temp_option;
+        }
+    }
+    if (result == 0 && mqttOptions->username != NULL)
+    {
+        temp_option = NULL;
+        if (mallocAndStrcpy_s(&temp_option, mqttOptions->username) != 0)
+        {
+            LogError("mallocAndStrcpy_s username");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mqtt_client->mqttOptions.username != NULL)
+            {
+                free(mqtt_client->mqttOptions.username);
+            }
+            mqtt_client->mqttOptions.username = temp_option;
+        }
+    }
+    if (result == 0 && mqttOptions->password != NULL)
+    {
+        temp_option = NULL;
+        if (mallocAndStrcpy_s(&temp_option, mqttOptions->password) != 0)
+        {
+            LogError("mallocAndStrcpy_s password");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (mqtt_client->mqttOptions.password != NULL)
+            {
+                free(mqtt_client->mqttOptions.password);
+            }
+            mqtt_client->mqttOptions.password = temp_option;
+        }
+    }
+    if (result == 0)
+    {
+        mqtt_client->mqttOptions.keepAliveInterval = mqttOptions->keepAliveInterval;
+        mqtt_client->mqttOptions.messageRetain = mqttOptions->messageRetain;
+        mqtt_client->mqttOptions.useCleanSession = mqttOptions->useCleanSession;
+        mqtt_client->mqttOptions.qualityOfServiceValue = mqttOptions->qualityOfServiceValue;
+    }
+    else
+    {
+        clear_mqtt_options(mqtt_client);
+    }
+    return result;
+}
+
+static void ProcessPublishMessage(MQTT_CLIENT* mqtt_client, uint8_t* initialPos, size_t packetLength, int flags)
+{
+    bool isDuplicateMsg = (flags & DUPLICATE_FLAG_MASK) ? true : false;
+    bool isRetainMsg = (flags & RETAIN_FLAG_MASK) ? true : false;
+    QOS_VALUE qosValue = (flags == 0) ? DELIVER_AT_MOST_ONCE : (flags & QOS_LEAST_ONCE_FLAG_MASK) ? DELIVER_AT_LEAST_ONCE : DELIVER_EXACTLY_ONCE;
+
+    uint8_t* iterator = initialPos;
+    size_t numberOfBytesToBeRead = packetLength;
+    size_t lengthOfTopicName = numberOfBytesToBeRead;
+    char* topicName = byteutil_readUTF(&iterator, &lengthOfTopicName);
+    if (topicName == NULL)
+    {
+        LogError("Publish MSG: failure reading topic name");
+        set_error_callback(mqtt_client, MQTT_CLIENT_PARSE_ERROR);
+    }
+    else
+    {
+        STRING_HANDLE trace_log = NULL;
+
+#ifndef NO_LOGGING
+        if (mqtt_client->logTrace)
+        {
+            trace_log = STRING_construct_sprintf("PUBLISH | IS_DUP: %s | RETAIN: %d | QOS: %s | TOPIC_NAME: %s", isDuplicateMsg ? TRUE_CONST : FALSE_CONST,
+                isRetainMsg ? 1 : 0, MU_ENUM_TO_STRING(QOS_VALUE, qosValue), topicName);
+        }
+#endif
+        uint16_t packetId = 0;
+        numberOfBytesToBeRead = packetLength - (iterator - initialPos);
+        if (qosValue != DELIVER_AT_MOST_ONCE)
+        {
+            packetId = byteutil_read_uint16(&iterator, numberOfBytesToBeRead);
+#ifndef NO_LOGGING
+            if (mqtt_client->logTrace)
+            {
+                STRING_sprintf(trace_log, " | PACKET_ID: %"PRIu16, packetId);
+            }
+#endif
+        }
+        if ((qosValue != DELIVER_AT_MOST_ONCE) && (packetId == 0))
+        {
+            LogError("Publish MSG: packetId=0, invalid");
+            set_error_callback(mqtt_client, MQTT_CLIENT_PARSE_ERROR);
+        }
+        else
+        {
+            numberOfBytesToBeRead = packetLength - (iterator - initialPos);
+
+            MQTT_MESSAGE_HANDLE msgHandle = mqttmessage_create_in_place(packetId, topicName, qosValue, iterator, numberOfBytesToBeRead);
+            if (msgHandle == NULL)
+            {
+                LogError("failure in mqttmessage_create");
+                set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+            }
+            else if (mqttmessage_setIsDuplicateMsg(msgHandle, isDuplicateMsg) != 0 ||
+                     mqttmessage_setIsRetained(msgHandle, isRetainMsg) != 0)
+            {
+                LogError("failure setting mqtt message property");
+                set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+            }
+            else
+            {
+#ifndef NO_LOGGING
+                if (mqtt_client->logTrace)
+                {
+                    STRING_sprintf(trace_log, " | PAYLOAD_LEN: %lu", (unsigned long)numberOfBytesToBeRead);
+                    log_incoming_trace(mqtt_client, trace_log);
+                }
+#endif
+                mqtt_client->fnMessageRecv(msgHandle, mqtt_client->ctx);
+
+                BUFFER_HANDLE pubRel = NULL;
+                if (qosValue == DELIVER_EXACTLY_ONCE)
+                {
+                    pubRel = mqtt_codec_publishReceived(packetId);
+                    if (pubRel == NULL)
+                    {
+                        LogError("Failed to allocate publish receive message.");
+                        set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+                    }
+                }
+                else if (qosValue == DELIVER_AT_LEAST_ONCE)
+                {
+                    pubRel = mqtt_codec_publishAck(packetId);
+                    if (pubRel == NULL)
+                    {
+                        LogError("Failed to allocate publish ack message.");
+                        set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+                    }
+                }
+                if (pubRel != NULL)
+                {
+                    size_t size = BUFFER_length(pubRel);
+                    (void)sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), size);
+                    BUFFER_delete(pubRel);
+                }
+            }
+            mqttmessage_destroy(msgHandle);
+        }
+
+        if (trace_log != NULL)
+        {
+            STRING_delete(trace_log);
+        }
+
+        free(topicName);
+    }
+}
+
+static void recvCompleteCallback(void* context, CONTROL_PACKET_TYPE packet, int flags, BUFFER_HANDLE headerData)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)context;
+    if (mqtt_client != NULL)
+    {
+        size_t packetLength = 0;
+        uint8_t* iterator = NULL;
+        if (headerData != NULL)
+        {
+            packetLength = BUFFER_length(headerData);
+            iterator = BUFFER_u_char(headerData);
+        }
+
+#ifdef ENABLE_RAW_TRACE
+        logIncomingRawTrace(mqtt_client, packet, (uint8_t)flags, iterator, packetLength);
+#endif
+        if ((iterator != NULL && packetLength > 0) || packet == PINGRESP_TYPE)
+        {
+            switch (packet)
+            {
+                case CONNACK_TYPE:
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_028: [If the actionResult parameter is of type CONNECT_ACK then the msgInfo value shall be a CONNECT_ACK structure.]*/
+                    CONNECT_ACK connack = { 0 };
+                    connack.isSessionPresent = (byteutil_readByte(&iterator) == 0x1) ? true : false;
+                    uint8_t rc = byteutil_readByte(&iterator);
+                    connack.returnCode =
+                        (rc < ((uint8_t)CONN_REFUSED_UNKNOWN)) ?
+                        (CONNECT_RETURN_CODE)rc : CONN_REFUSED_UNKNOWN;
+
+#ifndef NO_LOGGING
+                    if (mqtt_client->logTrace)
+                    {
+                        STRING_HANDLE trace_log = STRING_construct_sprintf("CONNACK | SESSION_PRESENT: %s | RETURN_CODE: 0x%x", connack.isSessionPresent ? TRUE_CONST : FALSE_CONST, connack.returnCode);
+                        log_incoming_trace(mqtt_client, trace_log);
+                        STRING_delete(trace_log);
+                    }
+#endif
+                    mqtt_client->fnOperationCallback(mqtt_client, MQTT_CLIENT_ON_CONNACK, (void*)&connack, mqtt_client->ctx);
+
+                    if (connack.returnCode == CONNECTION_ACCEPTED)
+                    {
+                        mqtt_client->clientConnected = true;
+                    }
+                    break;
+                }
+                case PUBLISH_TYPE:
+                {
+                    ProcessPublishMessage(mqtt_client, iterator, packetLength, flags);
+                    break;
+                }
+                case PUBACK_TYPE:
+                case PUBREC_TYPE:
+                case PUBREL_TYPE:
+                case PUBCOMP_TYPE:
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_029: [If the actionResult parameter are of types PUBACK_TYPE, PUBREC_TYPE, PUBREL_TYPE or PUBCOMP_TYPE then the msgInfo value shall be a PUBLISH_ACK structure.]*/
+                    MQTT_CLIENT_EVENT_RESULT action = (packet == PUBACK_TYPE) ? MQTT_CLIENT_ON_PUBLISH_ACK :
+                        (packet == PUBREC_TYPE) ? MQTT_CLIENT_ON_PUBLISH_RECV :
+                        (packet == PUBREL_TYPE) ? MQTT_CLIENT_ON_PUBLISH_REL : MQTT_CLIENT_ON_PUBLISH_COMP;
+
+                    PUBLISH_ACK publish_ack = { 0 };
+                    publish_ack.packetId = byteutil_read_uint16(&iterator, packetLength);
+
+#ifndef NO_LOGGING
+                    if (mqtt_client->logTrace)
+                    {
+                        STRING_HANDLE trace_log = STRING_construct_sprintf("%s | PACKET_ID: %"PRIu16, packet == PUBACK_TYPE ? "PUBACK" : (packet == PUBREC_TYPE) ? "PUBREC" : (packet == PUBREL_TYPE) ? "PUBREL" : "PUBCOMP",
+                            publish_ack.packetId);
+
+                        log_incoming_trace(mqtt_client, trace_log);
+                        STRING_delete(trace_log);
+                    }
+#endif
+                    BUFFER_HANDLE pubRel = NULL;
+                    mqtt_client->fnOperationCallback(mqtt_client, action, (void*)&publish_ack, mqtt_client->ctx);
+                    if (packet == PUBREC_TYPE)
+                    {
+                        pubRel = mqtt_codec_publishRelease(publish_ack.packetId);
+                        if (pubRel == NULL)
+                        {
+                            LogError("Failed to allocate publish release message.");
+                            set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+                        }
+                    }
+                    else if (packet == PUBREL_TYPE)
+                    {
+                        pubRel = mqtt_codec_publishComplete(publish_ack.packetId);
+                        if (pubRel == NULL)
+                        {
+                            LogError("Failed to allocate publish complete message.");
+                            set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+                        }
+                    }
+                    if (pubRel != NULL)
+                    {
+                        size_t size = BUFFER_length(pubRel);
+                        (void)sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), size);
+                        BUFFER_delete(pubRel);
+                    }
+                    break;
+                }
+                case SUBACK_TYPE:
+                {
+
+                    /*Codes_SRS_MQTT_CLIENT_07_030: [If the actionResult parameter is of type SUBACK_TYPE then the msgInfo value shall be a SUBSCRIBE_ACK structure.]*/
+                    SUBSCRIBE_ACK suback = { 0 };
+
+                    size_t remainLen = packetLength;
+                    suback.packetId = byteutil_read_uint16(&iterator, packetLength);
+                    remainLen -= 2;
+
+#ifndef NO_LOGGING
+                    STRING_HANDLE trace_log = NULL;
+                    if (mqtt_client->logTrace)
+                    {
+                        trace_log = STRING_construct_sprintf("SUBACK | PACKET_ID: %"PRIu16, suback.packetId);
+                    }
+#endif
+                    // Allocate the remaining len
+                    suback.qosReturn = (QOS_VALUE*)malloc(sizeof(QOS_VALUE)*remainLen);
+                    if (suback.qosReturn != NULL)
+                    {
+                        while (remainLen > 0)
+                        {
+                            uint8_t qosRet = byteutil_readByte(&iterator);
+                            suback.qosReturn[suback.qosCount++] =
+                                (qosRet <= ((uint8_t)DELIVER_EXACTLY_ONCE)) ?
+                                (QOS_VALUE)qosRet :  DELIVER_FAILURE;
+                            remainLen--;
+#ifndef NO_LOGGING
+                            if (mqtt_client->logTrace)
+                            {
+                                STRING_sprintf(trace_log, " | RETURN_CODE: %"PRIu16, suback.qosReturn[suback.qosCount-1]);
+                            }
+#endif
+                        }
+
+#ifndef NO_LOGGING
+                        if (mqtt_client->logTrace)
+                        {
+                            log_incoming_trace(mqtt_client, trace_log);
+                            STRING_delete(trace_log);
+                        }
+#endif
+                        mqtt_client->fnOperationCallback(mqtt_client, MQTT_CLIENT_ON_SUBSCRIBE_ACK, (void*)&suback, mqtt_client->ctx);
+                        free(suback.qosReturn);
+                    }
+                    else
+                    {
+                        LogError("allocation of quality of service value failed.");
+                        set_error_callback(mqtt_client, MQTT_CLIENT_MEMORY_ERROR);
+                    }
+                    break;
+                }
+                case UNSUBACK_TYPE:
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_031: [If the actionResult parameter is of type UNSUBACK_TYPE then the msgInfo value shall be a UNSUBSCRIBE_ACK structure.]*/
+                    UNSUBSCRIBE_ACK unsuback = { 0 };
+                    unsuback.packetId = byteutil_read_uint16(&iterator, packetLength);
+
+#ifndef NO_LOGGING
+                    if (mqtt_client->logTrace)
+                    {
+                        STRING_HANDLE trace_log = STRING_construct_sprintf("UNSUBACK | PACKET_ID: %"PRIu16, unsuback.packetId);
+                        log_incoming_trace(mqtt_client, trace_log);
+                        STRING_delete(trace_log);
+                    }
+#endif
+                    mqtt_client->fnOperationCallback(mqtt_client, MQTT_CLIENT_ON_UNSUBSCRIBE_ACK, (void*)&unsuback, mqtt_client->ctx);
+                    break;
+                }
+                case PINGRESP_TYPE:
+                    mqtt_client->timeSincePing = 0;
+#ifndef NO_LOGGING
+                    if (mqtt_client->logTrace)
+                    {
+                        STRING_HANDLE trace_log = STRING_construct_sprintf("PINGRESP");
+                        log_incoming_trace(mqtt_client, trace_log);
+                        STRING_delete(trace_log);
+                    }
+#endif
+                    // Forward ping response to operation callback
+                    mqtt_client->fnOperationCallback(mqtt_client, MQTT_CLIENT_ON_PING_RESPONSE, NULL, mqtt_client->ctx);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+    else
+    {
+        LogError("recvCompleteCallback context failed.");
+    }
+}
+
+MQTT_CLIENT_HANDLE mqtt_client_init(ON_MQTT_MESSAGE_RECV_CALLBACK msgRecv, ON_MQTT_OPERATION_CALLBACK operation_cb, void* opCallbackCtx, ON_MQTT_ERROR_CALLBACK onErrorCallBack, void* errorCBCtx)
+{
+    MQTT_CLIENT* result;
+    /*Codes_SRS_MQTT_CLIENT_07_001: [If the parameters ON_MQTT_MESSAGE_RECV_CALLBACK is NULL then mqttclient_init shall return NULL.]*/
+    if (msgRecv == NULL || operation_cb == NULL)
+    {
+        LogError("Invalid parameter specified msgRecv: %p, operation_cb: %p", msgRecv, operation_cb);
+        result = NULL;
+    }
+    else
+    {
+        result = malloc(sizeof(MQTT_CLIENT));
+        if (result == NULL)
+        {
+            /*Codes_SRS_MQTT_CLIENT_07_002: [If any failure is encountered then mqttclient_init shall return NULL.]*/
+            LogError("mqtt_client_init failure: Allocation Failure");
+        }
+        else
+        {
+            memset(result, 0, sizeof(MQTT_CLIENT));
+            /*Codes_SRS_MQTT_CLIENT_07_003: [mqttclient_init shall allocate MQTTCLIENT_DATA_INSTANCE and return the MQTTCLIENT_HANDLE on success.]*/
+            result->packetState = UNKNOWN_TYPE;
+            result->fnOperationCallback = operation_cb;
+            result->ctx = opCallbackCtx;
+            result->fnMessageRecv = msgRecv;
+            result->fnOnErrorCallBack = onErrorCallBack;
+            result->errorCBCtx = errorCBCtx;
+            result->qosValue = DELIVER_AT_MOST_ONCE;
+            result->packetTickCntr = tickcounter_create();
+            result->maxPingRespTime = DEFAULT_MAX_PING_RESPONSE_TIME;
+            if (result->packetTickCntr == NULL)
+            {
+                /*Codes_SRS_MQTT_CLIENT_07_002: [If any failure is encountered then mqttclient_init shall return NULL.]*/
+                LogError("mqtt_client_init failure: tickcounter_create failure");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                result->codec_handle = mqtt_codec_create(recvCompleteCallback, result);
+                if (result->codec_handle == NULL)
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_002: [If any failure is encountered then mqttclient_init shall return NULL.]*/
+                    LogError("mqtt_client_init failure: mqtt_codec_create failure");
+                    tickcounter_destroy(result->packetTickCntr);
+                    free(result);
+                    result = NULL;
+                }
+            }
+        }
+    }
+    return result;
+}
+
+void mqtt_client_deinit(MQTT_CLIENT_HANDLE handle)
+{
+    /*Codes_SRS_MQTT_CLIENT_07_004: [If the parameter handle is NULL then function mqtt_client_deinit shall do nothing.]*/
+    if (handle != NULL)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_005: [mqtt_client_deinit shall deallocate all memory allocated in this unit.]*/
+        MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+        tickcounter_destroy(mqtt_client->packetTickCntr);
+        mqtt_codec_destroy(mqtt_client->codec_handle);
+        clear_mqtt_options(mqtt_client);
+        free(mqtt_client);
+    }
+}
+
+int mqtt_client_connect(MQTT_CLIENT_HANDLE handle, XIO_HANDLE xioHandle, MQTT_CLIENT_OPTIONS* mqttOptions)
+{
+    int result;
+    /*SRS_MQTT_CLIENT_07_006: [If any of the parameters handle, ioHandle, or mqttOptions are NULL then mqtt_client_connect shall return a non-zero value.]*/
+    if (handle == NULL || mqttOptions == NULL || xioHandle == NULL)
+    {
+        LogError("mqtt_client_connect: NULL argument (handle = %p, mqttOptions = %p, xioHandle: %p)", handle, mqttOptions, xioHandle);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+        mqtt_client->xioHandle = xioHandle;
+        mqtt_client->packetState = UNKNOWN_TYPE;
+        mqtt_client->qosValue = mqttOptions->qualityOfServiceValue;
+        mqtt_client->keepAliveInterval = mqttOptions->keepAliveInterval;
+        mqtt_client->maxPingRespTime = (DEFAULT_MAX_PING_RESPONSE_TIME < mqttOptions->keepAliveInterval/2) ? DEFAULT_MAX_PING_RESPONSE_TIME : mqttOptions->keepAliveInterval/2;
+        if (cloneMqttOptions(mqtt_client, mqttOptions) != 0)
+        {
+            LogError("Error: Clone Mqtt Options failed");
+            result = MU_FAILURE;
+        }
+        /*Codes_SRS_MQTT_CLIENT_07_008: [mqtt_client_connect shall open the XIO_HANDLE by calling into the xio_open interface.]*/
+        else if (xio_open(xioHandle, onOpenComplete, mqtt_client, onBytesReceived, mqtt_client, onIoError, mqtt_client) != 0)
+        {
+            /*Codes_SRS_MQTT_CLIENT_07_007: [If any failure is encountered then mqtt_client_connect shall return a non-zero value.]*/
+            LogError("Error: io_open failed");
+            result = MU_FAILURE;
+            mqtt_client->xioHandle = NULL;
+            // Remove cloned options
+            clear_mqtt_options(mqtt_client);
+        }
+        else
+        {
+            result = 0;
+        }
+    }
+    return result;
+}
+
+int mqtt_client_publish(MQTT_CLIENT_HANDLE handle, MQTT_MESSAGE_HANDLE msgHandle)
+{
+    int result;
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+    if (mqtt_client == NULL || msgHandle == NULL)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_019: [If one of the parameters handle or msgHandle is NULL then mqtt_client_publish shall return a non-zero value.]*/
+        LogError("Invalid parameter specified mqtt_client: %p, msgHandle: %p", mqtt_client, msgHandle);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_021: [mqtt_client_publish shall get the message information from the MQTT_MESSAGE_HANDLE.]*/
+        const APP_PAYLOAD* payload = mqttmessage_getApplicationMsg(msgHandle);
+        if (payload == NULL)
+        {
+            /*Codes_SRS_MQTT_CLIENT_07_020: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/
+            LogError("Error: mqttmessage_getApplicationMsg failed");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client);
+
+            QOS_VALUE qos = mqttmessage_getQosType(msgHandle);
+            bool isDuplicate = mqttmessage_getIsDuplicateMsg(msgHandle);
+            bool isRetained = mqttmessage_getIsRetained(msgHandle);
+            uint16_t packetId = mqttmessage_getPacketId(msgHandle);
+            const char* topicName = mqttmessage_getTopicName(msgHandle);
+            BUFFER_HANDLE publishPacket = mqtt_codec_publish(qos, isDuplicate, isRetained, packetId, topicName, payload->message, payload->length, trace_log);
+            if (publishPacket == NULL)
+            {
+                /*Codes_SRS_MQTT_CLIENT_07_020: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/
+                LogError("Error: mqtt_codec_publish failed");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                mqtt_client->packetState = PUBLISH_TYPE;
+
+                /*Codes_SRS_MQTT_CLIENT_07_022: [On success mqtt_client_publish shall send the MQTT SUBCRIBE packet to the endpoint.]*/
+                size_t size = BUFFER_length(publishPacket);
+                if (sendPacketItem(mqtt_client, BUFFER_u_char(publishPacket), size) != 0)
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_020: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/
+                    LogError("Error: mqtt_client_publish send failed");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    log_outgoing_trace(mqtt_client, trace_log);
+                    result = 0;
+                }
+                BUFFER_delete(publishPacket);
+            }
+            if (trace_log != NULL)
+            {
+                STRING_delete(trace_log);
+            }
+        }
+    }
+    return result;
+}
+
+int mqtt_client_subscribe(MQTT_CLIENT_HANDLE handle, uint16_t packetId, SUBSCRIBE_PAYLOAD* subscribeList, size_t count)
+{
+    int result;
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+    if (mqtt_client == NULL || subscribeList == NULL || count == 0 || packetId == 0)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_013: [If any of the parameters handle, subscribeList is NULL or count is 0 then mqtt_client_subscribe shall return a non-zero value.]*/
+        LogError("Invalid parameter specified mqtt_client: %p, subscribeList: %p, count: %lu, packetId: %d", mqtt_client, subscribeList, (unsigned long)count, packetId);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client);
+
+        BUFFER_HANDLE subPacket = mqtt_codec_subscribe(packetId, subscribeList, count, trace_log);
+        if (subPacket == NULL)
+        {
+            /*Codes_SRS_MQTT_CLIENT_07_014: [If any failure is encountered then mqtt_client_subscribe shall return a non-zero value.]*/
+            LogError("Error: mqtt_codec_subscribe failed");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            mqtt_client->packetState = SUBSCRIBE_TYPE;
+
+            size_t size = BUFFER_length(subPacket);
+            /*Codes_SRS_MQTT_CLIENT_07_015: [On success mqtt_client_subscribe shall send the MQTT SUBCRIBE packet to the endpoint.]*/
+            if (sendPacketItem(mqtt_client, BUFFER_u_char(subPacket), size) != 0)
+            {
+                /*Codes_SRS_MQTT_CLIENT_07_014: [If any failure is encountered then mqtt_client_subscribe shall return a non-zero value.]*/
+                LogError("Error: mqtt_client_subscribe send failed");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                log_outgoing_trace(mqtt_client, trace_log);
+                result = 0;
+            }
+            BUFFER_delete(subPacket);
+        }
+        if (trace_log != NULL)
+        {
+            STRING_delete(trace_log);
+        }
+    }
+    return result;
+}
+
+int mqtt_client_unsubscribe(MQTT_CLIENT_HANDLE handle, uint16_t packetId, const char** unsubscribeList, size_t count)
+{
+    int result;
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+    if (mqtt_client == NULL || unsubscribeList == NULL || count == 0 || packetId == 0)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_016: [If any of the parameters handle, unsubscribeList is NULL or count is 0 then mqtt_client_unsubscribe shall return a non-zero value.]*/
+        LogError("Invalid parameter specified mqtt_client: %p, unsubscribeList: %p, count: %lu, packetId: %d", mqtt_client, unsubscribeList, (unsigned long)count, packetId);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client);
+
+        BUFFER_HANDLE unsubPacket = mqtt_codec_unsubscribe(packetId, unsubscribeList, count, trace_log);
+        if (unsubPacket == NULL)
+        {
+            /*Codes_SRS_MQTT_CLIENT_07_017: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/
+            LogError("Error: mqtt_codec_unsubscribe failed");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            mqtt_client->packetState = UNSUBSCRIBE_TYPE;
+
+            size_t size = BUFFER_length(unsubPacket);
+            /*Codes_SRS_MQTT_CLIENT_07_018: [On success mqtt_client_unsubscribe shall send the MQTT SUBCRIBE packet to the endpoint.]*/
+            if (sendPacketItem(mqtt_client, BUFFER_u_char(unsubPacket), size) != 0)
+            {
+                /*Codes_SRS_MQTT_CLIENT_07_017: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.].]*/
+                LogError("Error: mqtt_client_unsubscribe send failed");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                log_outgoing_trace(mqtt_client, trace_log);
+                result = 0;
+            }
+            BUFFER_delete(unsubPacket);
+        }
+        if (trace_log != NULL)
+        {
+            STRING_delete(trace_log);
+        }
+    }
+    return result;
+}
+
+int mqtt_client_disconnect(MQTT_CLIENT_HANDLE handle, ON_MQTT_DISCONNECTED_CALLBACK callback, void* ctx)
+{
+    int result;
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+    if (mqtt_client == NULL)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_010: [If the parameters handle is NULL then mqtt_client_disconnect shall return a non-zero value.]*/
+        result = MU_FAILURE;
+    }
+    else
+    {
+        if (mqtt_client->clientConnected)
+        {
+            BUFFER_HANDLE disconnectPacket = mqtt_codec_disconnect();
+            if (disconnectPacket == NULL)
+            {
+                /*Codes_SRS_MQTT_CLIENT_07_011: [If any failure is encountered then mqtt_client_disconnect shall return a non-zero value.]*/
+                LogError("Error: mqtt_client_disconnect failed");
+                mqtt_client->packetState = PACKET_TYPE_ERROR;
+                result = MU_FAILURE;
+            }
+            else
+            {
+                /* Codes_SRS_MQTT_CLIENT_07_037: [ if callback is not NULL callback shall be called once the mqtt connection has been disconnected ] */
+                mqtt_client->disconnect_cb = callback;
+                mqtt_client->disconnect_ctx = ctx;
+                mqtt_client->packetState = DISCONNECT_TYPE;
+
+                size_t size = BUFFER_length(disconnectPacket);
+                /*Codes_SRS_MQTT_CLIENT_07_012: [On success mqtt_client_disconnect shall send the MQTT DISCONNECT packet to the endpoint.]*/
+                if (sendPacketItem(mqtt_client, BUFFER_u_char(disconnectPacket), size) != 0)
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_011: [If any failure is encountered then mqtt_client_disconnect shall return a non-zero value.]*/
+                    LogError("Error: mqtt_client_disconnect send failed");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    if (mqtt_client->logTrace)
+                    {
+                        STRING_HANDLE trace_log = STRING_construct("DISCONNECT");
+                        log_outgoing_trace(mqtt_client, trace_log);
+                        STRING_delete(trace_log);
+                    }
+                    result = 0;
+                }
+                BUFFER_delete(disconnectPacket);
+            }
+            clear_mqtt_options(mqtt_client);
+        }
+        else
+        {
+            // If the client is not connected then just close the underlying socket
+            mqtt_client->disconnect_cb = callback;
+            mqtt_client->disconnect_ctx = ctx;
+
+            close_connection(mqtt_client);
+            clear_mqtt_options(mqtt_client);
+            result = 0;
+        }
+    }
+    return result;
+}
+
+void mqtt_client_dowork(MQTT_CLIENT_HANDLE handle)
+{
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+    /*Codes_SRS_MQTT_CLIENT_18_001: [If the client is disconnected, mqtt_client_dowork shall do nothing.]*/
+    /*Codes_SRS_MQTT_CLIENT_07_023: [If the parameter handle is NULL then mqtt_client_dowork shall do nothing.]*/
+    if (mqtt_client != NULL && mqtt_client->xioHandle != NULL)
+    {
+        /*Codes_SRS_MQTT_CLIENT_07_024: [mqtt_client_dowork shall call the xio_dowork function to complete operations.]*/
+        xio_dowork(mqtt_client->xioHandle);
+
+        /*Codes_SRS_MQTT_CLIENT_07_025: [mqtt_client_dowork shall retrieve the the last packet send value and ...]*/
+        if (mqtt_client->socketConnected && mqtt_client->clientConnected && mqtt_client->keepAliveInterval > 0)
+        {
+            tickcounter_ms_t current_ms;
+            if (tickcounter_get_current_ms(mqtt_client->packetTickCntr, &current_ms) != 0)
+            {
+                LogError("Error: tickcounter_get_current_ms failed");
+            }
+            else
+            {
+                /* Codes_SRS_MQTT_CLIENT_07_035: [If the timeSincePing has expired past the maxPingRespTime then mqtt_client_dowork shall call the Error Callback function with the message MQTT_CLIENT_NO_PING_RESPONSE] */
+                if (mqtt_client->timeSincePing > 0 && ((current_ms - mqtt_client->timeSincePing)/1000) > mqtt_client->maxPingRespTime)
+                {
+                    // We haven't gotten a ping response in the alloted time
+                    set_error_callback(mqtt_client, MQTT_CLIENT_NO_PING_RESPONSE);
+                    mqtt_client->timeSincePing = 0;
+                    mqtt_client->packetSendTimeMs = 0;
+                    mqtt_client->packetState = UNKNOWN_TYPE;
+                }
+                else if (((current_ms - mqtt_client->packetSendTimeMs) / 1000) >= mqtt_client->keepAliveInterval)
+                {
+                    /*Codes_SRS_MQTT_CLIENT_07_026: [if keepAliveInternal is > 0 and the send time is greater than the MQTT KeepAliveInterval then it shall construct an MQTT PINGREQ packet.]*/
+                    BUFFER_HANDLE pingPacket = mqtt_codec_ping();
+                    if (pingPacket != NULL)
+                    {
+                        size_t size = BUFFER_length(pingPacket);
+                        (void)sendPacketItem(mqtt_client, BUFFER_u_char(pingPacket), size);
+                        BUFFER_delete(pingPacket);
+                        (void)tickcounter_get_current_ms(mqtt_client->packetTickCntr, &mqtt_client->timeSincePing);
+
+                        if (mqtt_client->logTrace)
+                        {
+                            STRING_HANDLE trace_log = STRING_construct("PINGREQ");
+                            log_outgoing_trace(mqtt_client, trace_log);
+                            STRING_delete(trace_log);
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+void mqtt_client_set_trace(MQTT_CLIENT_HANDLE handle, bool traceOn, bool rawBytesOn)
+{
+    AZURE_UNREFERENCED_PARAMETER(handle);
+    AZURE_UNREFERENCED_PARAMETER(traceOn);
+    AZURE_UNREFERENCED_PARAMETER(rawBytesOn);
+#ifndef NO_LOGGING
+    MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle;
+    if (mqtt_client != NULL)
+    {
+        mqtt_client->logTrace = traceOn;
+#ifdef ENABLE_RAW_TRACE
+        mqtt_client->rawBytesTrace = rawBytesOn;
+#endif
+    }
+#endif
+}
Index: azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_codec.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_codec.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_codec.c	(revision 389)
@@ -0,0 +1,1134 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include <limits.h>
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/buffer_.h"
+#include "azure_c_shared_utility/strings.h"
+#include "azure_c_shared_utility/macro_utils.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_umqtt_c/mqtt_codec.h"
+#include <inttypes.h>
+
+#define PAYLOAD_OFFSET                      5
+#define PACKET_TYPE_BYTE(p)                 (CONTROL_PACKET_TYPE)((uint8_t)(((uint8_t)(p)) & 0xf0))
+#define FLAG_VALUE_BYTE(p)                  ((uint8_t)(((uint8_t)(p)) & 0xf))
+
+#define USERNAME_FLAG                       0x80
+#define PASSWORD_FLAG                       0x40
+#define WILL_RETAIN_FLAG                    0x20
+#define WILL_QOS_FLAG_                      0x18
+#define WILL_FLAG_FLAG                      0x04
+#define CLEAN_SESSION_FLAG                  0x02
+
+#define NEXT_128_CHUNK                      0x80
+#define PUBLISH_DUP_FLAG                    0x8
+#define PUBLISH_QOS_EXACTLY_ONCE            0x4
+#define PUBLISH_QOS_AT_LEAST_ONCE           0x2
+#define PUBLISH_QOS_RETAIN                  0x1
+
+#define PROTOCOL_NUMBER                     4
+#define CONN_FLAG_BYTE_OFFSET               7
+
+#define CONNECT_FIXED_HEADER_SIZE           2
+#define CONNECT_VARIABLE_HEADER_SIZE        10
+#define SUBSCRIBE_FIXED_HEADER_FLAG         0x2
+#define UNSUBSCRIBE_FIXED_HEADER_FLAG       0x2
+
+#define MAX_SEND_SIZE                       0xFFFFFF7F
+
+#define CODEC_STATE_VALUES      \
+    CODEC_STATE_FIXED_HEADER,   \
+    CODEC_STATE_VAR_HEADER,     \
+    CODEC_STATE_PAYLOAD
+
+static const char* const TRUE_CONST = "true";
+static const char* const FALSE_CONST = "false";
+
+MU_DEFINE_ENUM(CODEC_STATE_RESULT, CODEC_STATE_VALUES);
+
+typedef struct MQTTCODEC_INSTANCE_TAG
+{
+    CONTROL_PACKET_TYPE currPacket;
+    CODEC_STATE_RESULT codecState;
+    size_t bufferOffset;
+    int headerFlags;
+    BUFFER_HANDLE headerData;
+    ON_PACKET_COMPLETE_CALLBACK packetComplete;
+    void* callContext;
+    uint8_t storeRemainLen[4];
+    size_t remainLenIndex;
+} MQTTCODEC_INSTANCE;
+
+typedef struct PUBLISH_HEADER_INFO_TAG
+{
+    const char* topicName;
+    uint16_t packetId;
+    const char* msgBuffer;
+    QOS_VALUE qualityOfServiceValue;
+} PUBLISH_HEADER_INFO;
+
+static const char* retrieve_qos_value(QOS_VALUE value)
+{
+    switch (value)
+    {
+        case DELIVER_AT_MOST_ONCE:
+            return "DELIVER_AT_MOST_ONCE";
+        case DELIVER_AT_LEAST_ONCE:
+            return "DELIVER_AT_LEAST_ONCE";
+        case DELIVER_EXACTLY_ONCE:
+        default:
+            return "DELIVER_EXACTLY_ONCE";
+    }
+}
+
+static void byteutil_writeByte(uint8_t** buffer, uint8_t value)
+{
+    if (buffer != NULL)
+    {
+        **buffer = value;
+        (*buffer)++;
+    }
+}
+
+static void byteutil_writeInt(uint8_t** buffer, uint16_t value)
+{
+    if (buffer != NULL)
+    {
+        **buffer = (char)(value / 256);
+        (*buffer)++;
+        **buffer = (char)(value % 256);
+        (*buffer)++;
+    }
+}
+
+static void byteutil_writeUTF(uint8_t** buffer, const char* stringData, uint16_t len)
+{
+    if (buffer != NULL)
+    {
+        byteutil_writeInt(buffer, len);
+        (void)memcpy(*buffer, stringData, len);
+        *buffer += len;
+    }
+}
+
+static CONTROL_PACKET_TYPE processControlPacketType(uint8_t pktByte, int* flags)
+{
+    CONTROL_PACKET_TYPE result;
+    result = PACKET_TYPE_BYTE(pktByte);
+    if (flags != NULL)
+    {
+        *flags = FLAG_VALUE_BYTE(pktByte);
+    }
+    return result;
+}
+
+static int addListItemsToUnsubscribePacket(BUFFER_HANDLE ctrlPacket, const char** payloadList, size_t payloadCount, STRING_HANDLE trace_log)
+{
+    int result = 0;
+    if (payloadList == NULL || ctrlPacket == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t index = 0;
+        for (index = 0; index < payloadCount && result == 0; index++)
+        {
+            // Add the Payload
+            size_t offsetLen = BUFFER_length(ctrlPacket);
+            size_t topicLen = strlen(payloadList[index]);
+            if (topicLen > USHRT_MAX)
+            {
+                result = MU_FAILURE;
+            }
+            else if (BUFFER_enlarge(ctrlPacket, topicLen + 2) != 0)
+            {
+                result = MU_FAILURE;
+            }
+            else
+            {
+                uint8_t* iterator = BUFFER_u_char(ctrlPacket);
+                iterator += offsetLen;
+                byteutil_writeUTF(&iterator, payloadList[index], (uint16_t)topicLen);
+            }
+            if (trace_log != NULL)
+            {
+                STRING_sprintf(trace_log, " | TOPIC_NAME: %s", payloadList[index]);
+            }
+        }
+    }
+    return result;
+}
+
+static int addListItemsToSubscribePacket(BUFFER_HANDLE ctrlPacket, SUBSCRIBE_PAYLOAD* payloadList, size_t payloadCount, STRING_HANDLE trace_log)
+{
+    int result = 0;
+    if (payloadList == NULL || ctrlPacket == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t index = 0;
+        for (index = 0; index < payloadCount && result == 0; index++)
+        {
+            // Add the Payload
+            size_t offsetLen = BUFFER_length(ctrlPacket);
+            size_t topicLen = strlen(payloadList[index].subscribeTopic);
+            if (topicLen > USHRT_MAX)
+            {
+                result = MU_FAILURE;
+            }
+            else if (BUFFER_enlarge(ctrlPacket, topicLen + 2 + 1) != 0)
+            {
+                result = MU_FAILURE;
+            }
+            else
+            {
+                uint8_t* iterator = BUFFER_u_char(ctrlPacket);
+                iterator += offsetLen;
+                byteutil_writeUTF(&iterator, payloadList[index].subscribeTopic, (uint16_t)topicLen);
+                *iterator = payloadList[index].qosReturn;
+
+                if (trace_log != NULL)
+                {
+                    STRING_sprintf(trace_log, " | TOPIC_NAME: %s | QOS: %d", payloadList[index].subscribeTopic, (int)payloadList[index].qosReturn);
+                }
+            }
+        }
+    }
+    return result;
+}
+
+static int constructConnectVariableHeader(BUFFER_HANDLE ctrlPacket, const MQTT_CLIENT_OPTIONS* mqttOptions, STRING_HANDLE trace_log)
+{
+    int result = 0;
+    if (BUFFER_enlarge(ctrlPacket, CONNECT_VARIABLE_HEADER_SIZE) != 0)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        uint8_t* iterator = BUFFER_u_char(ctrlPacket);
+        if (iterator == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            if (trace_log != NULL)
+            {
+                STRING_sprintf(trace_log, " | VER: %d | KEEPALIVE: %d | FLAGS:", PROTOCOL_NUMBER, mqttOptions->keepAliveInterval);
+            }
+            byteutil_writeUTF(&iterator, "MQTT", 4);
+            byteutil_writeByte(&iterator, PROTOCOL_NUMBER);
+            byteutil_writeByte(&iterator, 0); // Flags will be entered later
+            byteutil_writeInt(&iterator, mqttOptions->keepAliveInterval);
+            result = 0;
+        }
+    }
+    return result;
+}
+
+static int constructPublishVariableHeader(BUFFER_HANDLE ctrlPacket, const PUBLISH_HEADER_INFO* publishHeader, STRING_HANDLE trace_log)
+{
+    int result = 0;
+    size_t topicLen = 0;
+    size_t spaceLen = 0;
+    size_t idLen = 0;
+
+    size_t currLen = BUFFER_length(ctrlPacket);
+
+    topicLen = strlen(publishHeader->topicName);
+    spaceLen += 2;
+
+    if (publishHeader->qualityOfServiceValue != DELIVER_AT_MOST_ONCE)
+    {
+        // Packet Id is only set if the QOS is not 0
+        idLen = 2;
+    }
+
+    if (topicLen > USHRT_MAX)
+    {
+        result = MU_FAILURE;
+    }
+    else if (BUFFER_enlarge(ctrlPacket, topicLen + idLen + spaceLen) != 0)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        uint8_t* iterator = BUFFER_u_char(ctrlPacket);
+        if (iterator == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            iterator += currLen;
+            /* The Topic Name MUST be present as the first field in the PUBLISH Packet Variable header.It MUST be 792 a UTF-8 encoded string [MQTT-3.3.2-1] as defined in section 1.5.3.*/
+            byteutil_writeUTF(&iterator, publishHeader->topicName, (uint16_t)topicLen);
+            if (trace_log != NULL)
+            {
+                STRING_sprintf(trace_log, " | TOPIC_NAME: %s", publishHeader->topicName);
+            }
+            if (idLen > 0)
+            {
+                if (trace_log != NULL)
+                {
+                    STRING_sprintf(trace_log, " | PACKET_ID: %"PRIu16, publishHeader->packetId);
+                }
+                byteutil_writeInt(&iterator, publishHeader->packetId);
+            }
+            result = 0;
+        }
+    }
+    return result;
+}
+
+static int constructSubscibeTypeVariableHeader(BUFFER_HANDLE ctrlPacket, uint16_t packetId)
+{
+    int result = 0;
+    if (BUFFER_enlarge(ctrlPacket, 2) != 0)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        uint8_t* iterator = BUFFER_u_char(ctrlPacket);
+        if (iterator == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            byteutil_writeInt(&iterator, packetId);
+            result = 0;
+        }
+    }
+    return result;
+}
+
+static BUFFER_HANDLE constructPublishReply(CONTROL_PACKET_TYPE type, uint8_t flags, uint16_t packetId)
+{
+    BUFFER_HANDLE result = BUFFER_new();
+    if (result != NULL)
+    {
+        if (BUFFER_pre_build(result, 4) != 0)
+        {
+            BUFFER_delete(result);
+            result = NULL;
+        }
+        else
+        {
+            uint8_t* iterator = BUFFER_u_char(result);
+            if (iterator == NULL)
+            {
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                *iterator = (uint8_t)type | flags;
+                iterator++;
+                *iterator = 0x2;
+                iterator++;
+                byteutil_writeInt(&iterator, packetId);
+            }
+        }
+    }
+    return result;
+}
+
+static int constructFixedHeader(BUFFER_HANDLE ctrlPacket, CONTROL_PACKET_TYPE packetType, uint8_t flags)
+{
+    int result;
+    if (ctrlPacket == NULL)
+    {
+        return MU_FAILURE;
+    }
+    else
+    {
+        size_t packetLen = BUFFER_length(ctrlPacket);
+        uint8_t remainSize[4] ={ 0 };
+        size_t index = 0;
+
+        // Calculate the length of packet
+        do
+        {
+            uint8_t encode = packetLen % 128;
+            packetLen /= 128;
+            // if there are more data to encode, set the top bit of this byte
+            if (packetLen > 0)
+            {
+                encode |= NEXT_128_CHUNK;
+            }
+            remainSize[index++] = encode;
+        } while (packetLen > 0);
+
+        BUFFER_HANDLE fixedHeader = BUFFER_new();
+        if (fixedHeader == NULL)
+        {
+            result = MU_FAILURE;
+        }
+        else if (BUFFER_pre_build(fixedHeader, index + 1) != 0)
+        {
+            BUFFER_delete(fixedHeader);
+            result = MU_FAILURE;
+        }
+        else
+        {
+            uint8_t* iterator = BUFFER_u_char(fixedHeader);
+            *iterator = (uint8_t)packetType | flags;
+            iterator++;
+            (void)memcpy(iterator, remainSize, index);
+
+            result = BUFFER_prepend(ctrlPacket, fixedHeader);
+            BUFFER_delete(fixedHeader);
+        }
+    }
+    return result;
+}
+
+static int constructConnPayload(BUFFER_HANDLE ctrlPacket, const MQTT_CLIENT_OPTIONS* mqttOptions, STRING_HANDLE trace_log)
+{
+    int result = 0;
+    if (mqttOptions == NULL || ctrlPacket == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        size_t clientLen = 0;
+        size_t usernameLen = 0;
+        size_t passwordLen = 0;
+        size_t willMessageLen = 0;
+        size_t willTopicLen = 0;
+        size_t spaceLen = 0;
+
+        if (mqttOptions->clientId != NULL)
+        {
+            spaceLen += 2;
+            clientLen = strlen(mqttOptions->clientId);
+        }
+        if (mqttOptions->username != NULL)
+        {
+            spaceLen += 2;
+            usernameLen = strlen(mqttOptions->username);
+        }
+        if (mqttOptions->password != NULL)
+        {
+            spaceLen += 2;
+            passwordLen = strlen(mqttOptions->password);
+        }
+        if (mqttOptions->willMessage != NULL)
+        {
+            spaceLen += 2;
+            willMessageLen = strlen(mqttOptions->willMessage);
+        }
+        if (mqttOptions->willTopic != NULL)
+        {
+            spaceLen += 2;
+            willTopicLen = strlen(mqttOptions->willTopic);
+        }
+
+        size_t currLen = BUFFER_length(ctrlPacket);
+        size_t totalLen = clientLen + usernameLen + passwordLen + willMessageLen + willTopicLen + spaceLen;
+
+        // Validate the Username & Password
+        if (clientLen > USHRT_MAX)
+        {
+            result = MU_FAILURE;
+        }
+        else if (usernameLen == 0 && passwordLen > 0)
+        {
+            result = MU_FAILURE;
+        }
+        else if ((willMessageLen > 0 && willTopicLen == 0) || (willTopicLen > 0 && willMessageLen == 0))
+        {
+            result = MU_FAILURE;
+        }
+        else if (BUFFER_enlarge(ctrlPacket, totalLen) != 0)
+        {
+            result = MU_FAILURE;
+        }
+        else
+        {
+            uint8_t* packet = BUFFER_u_char(ctrlPacket);
+            uint8_t* iterator = packet;
+
+            iterator += currLen;
+            byteutil_writeUTF(&iterator, mqttOptions->clientId, (uint16_t)clientLen);
+
+            // TODO: Read on the Will Topic
+            if (willMessageLen > USHRT_MAX || willTopicLen > USHRT_MAX || usernameLen > USHRT_MAX || passwordLen > USHRT_MAX)
+            {
+                result = MU_FAILURE;
+            }
+            else
+            {
+                STRING_HANDLE connect_payload_trace = NULL;
+                if (trace_log != NULL)
+                {
+                    connect_payload_trace = STRING_new();
+                }
+                if (willMessageLen > 0 && willTopicLen > 0)
+                {
+                    if (trace_log != NULL)
+                    {
+                        (void)STRING_sprintf(connect_payload_trace, " | WILL_TOPIC: %s", mqttOptions->willTopic);
+                    }
+                    packet[CONN_FLAG_BYTE_OFFSET] |= WILL_FLAG_FLAG;
+                    byteutil_writeUTF(&iterator, mqttOptions->willTopic, (uint16_t)willTopicLen);
+                    packet[CONN_FLAG_BYTE_OFFSET] |= (mqttOptions->qualityOfServiceValue << 3);
+                    if (mqttOptions->messageRetain)
+                    {
+                        packet[CONN_FLAG_BYTE_OFFSET] |= WILL_RETAIN_FLAG;
+                    }
+                    byteutil_writeUTF(&iterator, mqttOptions->willMessage, (uint16_t)willMessageLen);
+                }
+                if (usernameLen > 0)
+                {
+                    packet[CONN_FLAG_BYTE_OFFSET] |= USERNAME_FLAG;
+                    byteutil_writeUTF(&iterator, mqttOptions->username, (uint16_t)usernameLen);
+                    if (trace_log != NULL)
+                    {
+                        (void)STRING_sprintf(connect_payload_trace, " | USERNAME: %s", mqttOptions->username);
+                    }
+                }
+                if (passwordLen > 0)
+                {
+                    packet[CONN_FLAG_BYTE_OFFSET] |= PASSWORD_FLAG;
+                    byteutil_writeUTF(&iterator, mqttOptions->password, (uint16_t)passwordLen);
+                    if (trace_log != NULL)
+                    {
+                        (void)STRING_sprintf(connect_payload_trace, " | PWD: XXXX");
+                    }
+                }
+                // TODO: Get the rest of the flags
+                if (trace_log != NULL)
+                {
+                    (void)STRING_sprintf(connect_payload_trace, " | CLEAN: %s", mqttOptions->useCleanSession ? "1" : "0");
+                }
+                if (mqttOptions->useCleanSession)
+                {
+                    packet[CONN_FLAG_BYTE_OFFSET] |= CLEAN_SESSION_FLAG;
+                }
+                if (trace_log != NULL)
+                {
+                    (void)STRING_sprintf(trace_log, " %lu", packet[CONN_FLAG_BYTE_OFFSET]);
+                    (void)STRING_concat_with_STRING(trace_log, connect_payload_trace);
+                    STRING_delete(connect_payload_trace);
+                }
+                result = 0;
+            }
+        }
+    }
+    return result;
+}
+
+static int prepareheaderDataInfo(MQTTCODEC_INSTANCE* codecData, uint8_t remainLen)
+{
+    int result;
+    if (codecData == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    else
+    {
+        result = 0;
+        codecData->storeRemainLen[codecData->remainLenIndex++] = remainLen;
+        if (remainLen <= 0x7f)
+        {
+            int multiplier = 1;
+            int totalLen = 0;
+            size_t index = 0;
+            uint8_t encodeByte = 0;
+            do
+            {
+                encodeByte = codecData->storeRemainLen[index++];
+                totalLen += (encodeByte & 127) * multiplier;
+                multiplier *= NEXT_128_CHUNK;
+
+                if (multiplier > 128 * 128 * 128)
+                {
+                    result = MU_FAILURE;
+                    break;
+                }
+            } while ((encodeByte & NEXT_128_CHUNK) != 0);
+
+            codecData->codecState = CODEC_STATE_VAR_HEADER;
+
+            // Reset remainLen Index
+            codecData->remainLenIndex = 0;
+            memset(codecData->storeRemainLen, 0, 4 * sizeof(uint8_t));
+
+            if (totalLen > 0)
+            {
+                codecData->bufferOffset = 0;
+                codecData->headerData = BUFFER_new();
+                if (codecData->headerData == NULL)
+                {
+                    /* Codes_SRS_MQTT_CODEC_07_035: [ If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value. ] */
+                    LogError("Failed BUFFER_new");
+                    result = MU_FAILURE;
+                }
+                else
+                {
+                    if (BUFFER_pre_build(codecData->headerData, totalLen) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_035: [ If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value. ] */
+                        LogError("Failed BUFFER_pre_build");
+                        result = MU_FAILURE;
+                    }
+
+                }
+            }
+        }
+    }
+    return result;
+}
+
+static void completePacketData(MQTTCODEC_INSTANCE* codecData)
+{
+    if (codecData)
+    {
+        if (codecData->packetComplete != NULL)
+        {
+            codecData->packetComplete(codecData->callContext, codecData->currPacket, codecData->headerFlags, codecData->headerData);
+        }
+
+        // Clean up data
+        codecData->currPacket = UNKNOWN_TYPE;
+        codecData->codecState = CODEC_STATE_FIXED_HEADER;
+        codecData->headerFlags = 0;
+        BUFFER_delete(codecData->headerData);
+        codecData->headerData = NULL;
+    }
+}
+
+MQTTCODEC_HANDLE mqtt_codec_create(ON_PACKET_COMPLETE_CALLBACK packetComplete, void* callbackCtx)
+{
+    MQTTCODEC_HANDLE result;
+    result = malloc(sizeof(MQTTCODEC_INSTANCE));
+    /* Codes_SRS_MQTT_CODEC_07_001: [If a failure is encountered then mqtt_codec_create shall return NULL.] */
+    if (result != NULL)
+    {
+        /* Codes_SRS_MQTT_CODEC_07_002: [On success mqtt_codec_create shall return a MQTTCODEC_HANDLE value.] */
+        result->currPacket = UNKNOWN_TYPE;
+        result->codecState = CODEC_STATE_FIXED_HEADER;
+        result->headerFlags = 0;
+        result->bufferOffset = 0;
+        result->packetComplete = packetComplete;
+        result->callContext = callbackCtx;
+        result->headerData = NULL;
+        memset(result->storeRemainLen, 0, 4 * sizeof(uint8_t));
+        result->remainLenIndex = 0;
+    }
+    return result;
+}
+
+void mqtt_codec_destroy(MQTTCODEC_HANDLE handle)
+{
+    /* Codes_SRS_MQTT_CODEC_07_003: [If the handle parameter is NULL then mqtt_codec_destroy shall do nothing.] */
+    if (handle != NULL)
+    {
+        MQTTCODEC_INSTANCE* codecData = (MQTTCODEC_INSTANCE*)handle;
+        /* Codes_SRS_MQTT_CODEC_07_004: [mqtt_codec_destroy shall deallocate all memory that has been allocated by this object.] */
+        BUFFER_delete(codecData->headerData);
+        free(codecData);
+    }
+}
+
+BUFFER_HANDLE mqtt_codec_connect(const MQTT_CLIENT_OPTIONS* mqttOptions, STRING_HANDLE trace_log)
+{
+    BUFFER_HANDLE result;
+    /* Codes_SRS_MQTT_CODEC_07_008: [If the parameters mqttOptions is NULL then mqtt_codec_connect shall return a null value.] */
+    if (mqttOptions == NULL)
+    {
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTT_CODEC_07_009: [mqtt_codec_connect shall construct a BUFFER_HANDLE that represents a MQTT CONNECT packet.] */
+        result = BUFFER_new();
+        if (result != NULL)
+        {
+            STRING_HANDLE varible_header_log = NULL;
+            if (trace_log != NULL)
+            {
+                varible_header_log = STRING_new();
+            }
+            // Add Variable Header Information
+            if (constructConnectVariableHeader(result, mqttOptions, varible_header_log) != 0)
+            {
+                /* Codes_SRS_MQTT_CODEC_07_010: [If any error is encountered then mqtt_codec_connect shall return NULL.] */
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                if (constructConnPayload(result, mqttOptions, varible_header_log) != 0)
+                {
+                    /* Codes_SRS_MQTT_CODEC_07_010: [If any error is encountered then mqtt_codec_connect shall return NULL.] */
+                    BUFFER_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    if (trace_log != NULL)
+                    {
+                        (void)STRING_copy(trace_log, "CONNECT");
+                    }
+                    if (constructFixedHeader(result, CONNECT_TYPE, 0) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_010: [If any error is encountered then mqtt_codec_connect shall return NULL.] */
+                        BUFFER_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        if (trace_log != NULL)
+                        {
+                            (void)STRING_concat_with_STRING(trace_log, varible_header_log);
+                        }
+                    }
+                }
+                if (varible_header_log != NULL)
+                {
+                    STRING_delete(varible_header_log);
+                }
+            }
+        }
+    }
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_disconnect()
+{
+    /* Codes_SRS_MQTT_CODEC_07_011: [On success mqtt_codec_disconnect shall construct a BUFFER_HANDLE that represents a MQTT DISCONNECT packet.] */
+    BUFFER_HANDLE result = BUFFER_new();
+    if (result != NULL)
+    {
+        if (BUFFER_enlarge(result, 2) != 0)
+        {
+            /* Codes_SRS_MQTT_CODEC_07_012: [If any error is encountered mqtt_codec_disconnect shall return NULL.] */
+            BUFFER_delete(result);
+            result = NULL;
+        }
+        else
+        {
+            uint8_t* iterator = BUFFER_u_char(result);
+            if (iterator == NULL)
+            {
+                /* Codes_SRS_MQTT_CODEC_07_012: [If any error is encountered mqtt_codec_disconnect shall return NULL.] */
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                iterator[0] = DISCONNECT_TYPE;
+                iterator[1] = 0;
+            }
+        }
+    }
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_publish(QOS_VALUE qosValue, bool duplicateMsg, bool serverRetain, uint16_t packetId, const char* topicName, const uint8_t* msgBuffer, size_t buffLen, STRING_HANDLE trace_log)
+{
+    BUFFER_HANDLE result;
+    /* Codes_SRS_MQTT_CODEC_07_005: [If the parameters topicName is NULL then mqtt_codec_publish shall return NULL.] */
+    if (topicName == NULL)
+    {
+        result = NULL;
+    }
+    /* Codes_SRS_MQTT_CODEC_07_036: [mqtt_codec_publish shall return NULL if the buffLen variable is greater than the MAX_SEND_SIZE (0xFFFFFF7F).] */
+    else if (buffLen > MAX_SEND_SIZE)
+    {
+        /* Codes_SRS_MQTT_CODEC_07_006: [If any error is encountered then mqtt_codec_publish shall return NULL.] */
+        result = NULL;
+    }
+    else
+    {
+        PUBLISH_HEADER_INFO publishInfo ={ 0 };
+        publishInfo.topicName = topicName;
+        publishInfo.packetId = packetId;
+        publishInfo.qualityOfServiceValue = qosValue;
+
+        uint8_t headerFlags = 0;
+        if (duplicateMsg) headerFlags |= PUBLISH_DUP_FLAG;
+        if (serverRetain) headerFlags |= PUBLISH_QOS_RETAIN;
+        if (qosValue != DELIVER_AT_MOST_ONCE)
+        {
+            if (qosValue == DELIVER_AT_LEAST_ONCE)
+            {
+                headerFlags |= PUBLISH_QOS_AT_LEAST_ONCE;
+            }
+            else
+            {
+                headerFlags |= PUBLISH_QOS_EXACTLY_ONCE;
+            }
+        }
+
+        /* Codes_SRS_MQTT_CODEC_07_007: [mqtt_codec_publish shall return a BUFFER_HANDLE that represents a MQTT PUBLISH message.] */
+        result = BUFFER_new();
+        if (result != NULL)
+        {
+            STRING_HANDLE varible_header_log = NULL;
+            if (trace_log != NULL)
+            {
+                varible_header_log = STRING_construct_sprintf(" | IS_DUP: %s | RETAIN: %d | QOS: %s", duplicateMsg ? TRUE_CONST : FALSE_CONST,
+                    serverRetain ? 1 : 0,
+                    retrieve_qos_value(publishInfo.qualityOfServiceValue) );
+            }
+
+            if (constructPublishVariableHeader(result, &publishInfo, varible_header_log) != 0)
+            {
+                /* Codes_SRS_MQTT_CODEC_07_006: [If any error is encountered then mqtt_codec_publish shall return NULL.] */
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                size_t payloadOffset = BUFFER_length(result);
+                if (buffLen > 0)
+                {
+                    if (BUFFER_enlarge(result, buffLen) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_006: [If any error is encountered then mqtt_codec_publish shall return NULL.] */
+                        BUFFER_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        uint8_t* iterator = BUFFER_u_char(result);
+                        if (iterator == NULL)
+                        {
+                            /* Codes_SRS_MQTT_CODEC_07_006: [If any error is encountered then mqtt_codec_publish shall return NULL.] */
+                            BUFFER_delete(result);
+                            result = NULL;
+                        }
+                        else
+                        {
+                            iterator += payloadOffset;
+                            // Write Message
+                            (void)memcpy(iterator, msgBuffer, buffLen);
+                            if (trace_log)
+                            {
+                                STRING_sprintf(varible_header_log, " | PAYLOAD_LEN: %lu", (unsigned long)buffLen);
+                            }
+                        }
+                    }
+                }
+
+                if (result != NULL)
+                {
+                    if (trace_log != NULL)
+                    {
+                        (void)STRING_copy(trace_log, "PUBLISH");
+                    }
+                    if (constructFixedHeader(result, PUBLISH_TYPE, headerFlags) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_006: [If any error is encountered then mqtt_codec_publish shall return NULL.] */
+                        BUFFER_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        if (trace_log != NULL)
+                        {
+                            (void)STRING_concat_with_STRING(trace_log, varible_header_log);
+                        }
+                    }
+                }
+            }
+            if (varible_header_log != NULL)
+            {
+                STRING_delete(varible_header_log);
+            }
+        }
+    }
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_publishAck(uint16_t packetId)
+{
+    /* Codes_SRS_MQTT_CODEC_07_013: [On success mqtt_codec_publishAck shall return a BUFFER_HANDLE representation of a MQTT PUBACK packet.] */
+    /* Codes_SRS_MQTT_CODEC_07_014 : [If any error is encountered then mqtt_codec_publishAck shall return NULL.] */
+    BUFFER_HANDLE result = constructPublishReply(PUBACK_TYPE, 0, packetId);
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_publishReceived(uint16_t packetId)
+{
+    /* Codes_SRS_MQTT_CODEC_07_015: [On success mqtt_codec_publishRecieved shall return a BUFFER_HANDLE representation of a MQTT PUBREC packet.] */
+    /* Codes_SRS_MQTT_CODEC_07_016 : [If any error is encountered then mqtt_codec_publishRecieved shall return NULL.] */
+    BUFFER_HANDLE result = constructPublishReply(PUBREC_TYPE, 0, packetId);
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_publishRelease(uint16_t packetId)
+{
+    /* Codes_SRS_MQTT_CODEC_07_017: [On success mqtt_codec_publishRelease shall return a BUFFER_HANDLE representation of a MQTT PUBREL packet.] */
+    /* Codes_SRS_MQTT_CODEC_07_018 : [If any error is encountered then mqtt_codec_publishRelease shall return NULL.] */
+    BUFFER_HANDLE result = constructPublishReply(PUBREL_TYPE, 2, packetId);
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_publishComplete(uint16_t packetId)
+{
+    /* Codes_SRS_MQTT_CODEC_07_019: [On success mqtt_codec_publishComplete shall return a BUFFER_HANDLE representation of a MQTT PUBCOMP packet.] */
+    /* Codes_SRS_MQTT_CODEC_07_020 : [If any error is encountered then mqtt_codec_publishComplete shall return NULL.] */
+    BUFFER_HANDLE result = constructPublishReply(PUBCOMP_TYPE, 0, packetId);
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_ping()
+{
+    /* Codes_SRS_MQTT_CODEC_07_021: [On success mqtt_codec_ping shall construct a BUFFER_HANDLE that represents a MQTT PINGREQ packet.] */
+    BUFFER_HANDLE result = BUFFER_new();
+    if (result != NULL)
+    {
+        if (BUFFER_enlarge(result, 2) != 0)
+        {
+            /* Codes_SRS_MQTT_CODEC_07_022: [If any error is encountered mqtt_codec_ping shall return NULL.] */
+            BUFFER_delete(result);
+            result = NULL;
+        }
+        else
+        {
+            uint8_t* iterator = BUFFER_u_char(result);
+            if (iterator == NULL)
+            {
+                /* Codes_SRS_MQTT_CODEC_07_022: [If any error is encountered mqtt_codec_ping shall return NULL.] */
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                iterator[0] = PINGREQ_TYPE;
+                iterator[1] = 0;
+            }
+        }
+    }
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_subscribe(uint16_t packetId, SUBSCRIBE_PAYLOAD* subscribeList, size_t count, STRING_HANDLE trace_log)
+{
+    BUFFER_HANDLE result;
+    /* Codes_SRS_MQTT_CODEC_07_023: [If the parameters subscribeList is NULL or if count is 0 then mqtt_codec_subscribe shall return NULL.] */
+    if (subscribeList == NULL || count == 0)
+    {
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTT_CODEC_07_026: [mqtt_codec_subscribe shall return a BUFFER_HANDLE that represents a MQTT SUBSCRIBE message.]*/
+        result = BUFFER_new();
+        if (result != NULL)
+        {
+            if (constructSubscibeTypeVariableHeader(result, packetId) != 0)
+            {
+                /* Codes_SRS_MQTT_CODEC_07_025: [If any error is encountered then mqtt_codec_subscribe shall return NULL.] */
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                STRING_HANDLE sub_trace = NULL;
+                if (trace_log != NULL)
+                {
+                    sub_trace = STRING_construct_sprintf(" | PACKET_ID: %"PRIu16, packetId);
+                }
+                /* Codes_SRS_MQTT_CODEC_07_024: [mqtt_codec_subscribe shall iterate through count items in the subscribeList.] */
+                if (addListItemsToSubscribePacket(result, subscribeList, count, sub_trace) != 0)
+                {
+                    /* Codes_SRS_MQTT_CODEC_07_025: [If any error is encountered then mqtt_codec_subscribe shall return NULL.] */
+                    BUFFER_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+
+                    if (trace_log != NULL)
+                    {
+                        STRING_concat(trace_log, "SUBSCRIBE");
+                    }
+                    if (constructFixedHeader(result, SUBSCRIBE_TYPE, SUBSCRIBE_FIXED_HEADER_FLAG) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_025: [If any error is encountered then mqtt_codec_subscribe shall return NULL.] */
+                        BUFFER_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        if (trace_log != NULL)
+                        {
+                            (void)STRING_concat_with_STRING(trace_log, sub_trace);
+                        }
+                    }
+                }
+                if (sub_trace != NULL)
+                {
+                    STRING_delete(sub_trace);
+                }
+            }
+        }
+    }
+    return result;
+}
+
+BUFFER_HANDLE mqtt_codec_unsubscribe(uint16_t packetId, const char** unsubscribeList, size_t count, STRING_HANDLE trace_log)
+{
+    BUFFER_HANDLE result;
+    /* Codes_SRS_MQTT_CODEC_07_027: [If the parameters unsubscribeList is NULL or if count is 0 then mqtt_codec_unsubscribe shall return NULL.] */
+    if (unsubscribeList == NULL || count == 0)
+    {
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTT_CODEC_07_030: [mqtt_codec_unsubscribe shall return a BUFFER_HANDLE that represents a MQTT SUBSCRIBE message.] */
+        result = BUFFER_new();
+        if (result != NULL)
+        {
+            if (constructSubscibeTypeVariableHeader(result, packetId) != 0)
+            {
+                /* Codes_SRS_MQTT_CODEC_07_029: [If any error is encountered then mqtt_codec_unsubscribe shall return NULL.] */
+                BUFFER_delete(result);
+                result = NULL;
+            }
+            else
+            {
+                STRING_HANDLE unsub_trace = NULL;
+                if (trace_log != NULL)
+                {
+                    unsub_trace = STRING_construct_sprintf(" | PACKET_ID: %"PRIu16, packetId);
+                }
+                /* Codes_SRS_MQTT_CODEC_07_028: [mqtt_codec_unsubscribe shall iterate through count items in the unsubscribeList.] */
+                if (addListItemsToUnsubscribePacket(result, unsubscribeList, count, unsub_trace) != 0)
+                {
+                    /* Codes_SRS_MQTT_CODEC_07_029: [If any error is encountered then mqtt_codec_unsubscribe shall return NULL.] */
+                    BUFFER_delete(result);
+                    result = NULL;
+                }
+                else
+                {
+                    if (trace_log != NULL)
+                    {
+                        (void)STRING_copy(trace_log, "UNSUBSCRIBE");
+                    }
+                    if (constructFixedHeader(result, UNSUBSCRIBE_TYPE, UNSUBSCRIBE_FIXED_HEADER_FLAG) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_029: [If any error is encountered then mqtt_codec_unsubscribe shall return NULL.] */
+                        BUFFER_delete(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        if (trace_log != NULL)
+                        {
+                            (void)STRING_concat_with_STRING(trace_log, unsub_trace);
+                        }
+                    }
+                }
+                if (unsub_trace != NULL)
+                {
+                    STRING_delete(unsub_trace);
+                }
+            }
+        }
+    }
+    return result;
+}
+
+int mqtt_codec_bytesReceived(MQTTCODEC_HANDLE handle, const unsigned char* buffer, size_t size)
+{
+    int result;
+    MQTTCODEC_INSTANCE* codec_Data = (MQTTCODEC_INSTANCE*)handle;
+    /* Codes_SRS_MQTT_CODEC_07_031: [If the parameters handle or buffer is NULL then mqtt_codec_bytesReceived shall return a non-zero value.] */
+    if (codec_Data == NULL)
+    {
+        result = MU_FAILURE;
+    }
+    /* Codes_SRS_MQTT_CODEC_07_031: [If the parameters handle or buffer is NULL then mqtt_codec_bytesReceived shall return a non-zero value.] */
+    /* Codes_SRS_MQTT_CODEC_07_032: [If the parameters size is zero then mqtt_codec_bytesReceived shall return a non-zero value.] */
+    else if (buffer == NULL || size == 0)
+    {
+        codec_Data->currPacket = PACKET_TYPE_ERROR;
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Codes_SRS_MQTT_CODEC_07_033: [mqtt_codec_bytesReceived constructs a sequence of bytes into the corresponding MQTT packets and on success returns zero.] */
+        result = 0;
+        size_t index = 0;
+        for (index = 0; index < size && result == 0; index++)
+        {
+            uint8_t iterator = ((int8_t*)buffer)[index];
+            if (codec_Data->codecState == CODEC_STATE_FIXED_HEADER)
+            {
+                if (codec_Data->currPacket == UNKNOWN_TYPE)
+                {
+                    codec_Data->currPacket = processControlPacketType(iterator, &codec_Data->headerFlags);
+                }
+                else
+                {
+                    if (prepareheaderDataInfo(codec_Data, iterator) != 0)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_035: [If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value.] */
+                        codec_Data->currPacket = PACKET_TYPE_ERROR;
+                        result = MU_FAILURE;
+                    }
+                    if (codec_Data->currPacket == PINGRESP_TYPE)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_034: [Upon a constructing a complete MQTT packet mqtt_codec_bytesReceived shall call the ON_PACKET_COMPLETE_CALLBACK function.] */
+                        completePacketData(codec_Data);
+                    }
+                }
+            }
+            else if (codec_Data->codecState == CODEC_STATE_VAR_HEADER)
+            {
+                if (codec_Data->headerData == NULL)
+                {
+                    codec_Data->codecState = CODEC_STATE_PAYLOAD;
+                }
+                else
+                {
+                    uint8_t* dataBytes = BUFFER_u_char(codec_Data->headerData);
+                    if (dataBytes == NULL)
+                    {
+                        /* Codes_SRS_MQTT_CODEC_07_035: [If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value.] */
+                        codec_Data->currPacket = PACKET_TYPE_ERROR;
+                        result = MU_FAILURE;
+                    }
+                    else
+                    {
+                        // Increment the data
+                        dataBytes += codec_Data->bufferOffset++;
+                        *dataBytes = iterator;
+
+                        size_t totalLen = BUFFER_length(codec_Data->headerData);
+                        if (codec_Data->bufferOffset >= totalLen)
+                        {
+                            /* Codes_SRS_MQTT_CODEC_07_034: [Upon a constructing a complete MQTT packet mqtt_codec_bytesReceived shall call the ON_PACKET_COMPLETE_CALLBACK function.] */
+                            completePacketData(codec_Data);
+                        }
+                    }
+                }
+            }
+            else
+            {
+                /* Codes_SRS_MQTT_CODEC_07_035: [If any error is encountered then the packet state will be marked as error and mqtt_codec_bytesReceived shall return a non-zero value.] */
+                codec_Data->currPacket = PACKET_TYPE_ERROR;
+                result = MU_FAILURE;
+            }
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_message.c
===================================================================
--- azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_message.c	(revision 389)
+++ azure_iot_hub/trunk/azure_iothub/umqtt/src/mqtt_message.c	(revision 389)
@@ -0,0 +1,372 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#include "azure_umqtt_c/mqtt_message.h"
+#include "azure_c_shared_utility/optimize_size.h"
+#include "azure_c_shared_utility/gballoc.h"
+#include "azure_c_shared_utility/xlogging.h"
+#include "azure_c_shared_utility/string_token.h"
+#include "azure_c_shared_utility/macro_utils.h"
+
+typedef struct MQTT_MESSAGE_TAG
+{
+    uint16_t packetId;
+    QOS_VALUE qosInfo;
+
+    char* topicName;
+    APP_PAYLOAD appPayload;
+
+    const char* const_topic_name;
+    APP_PAYLOAD const_payload;
+
+    bool isDuplicateMsg;
+    bool isMessageRetained;
+} MQTT_MESSAGE;
+
+static MQTT_MESSAGE* create_msg_object(uint16_t packetId, QOS_VALUE qosValue)
+{
+    MQTT_MESSAGE* result;
+    result = (MQTT_MESSAGE*)malloc(sizeof(MQTT_MESSAGE));
+    if (result != NULL)
+    {
+        memset(result, 0, sizeof(MQTT_MESSAGE));
+        result->packetId = packetId;
+        result->isDuplicateMsg = false;
+        result->isMessageRetained = false;
+        result->qosInfo = qosValue;
+    }
+    else
+    {
+        LogError("Failure unable to allocate MQTT Message.");
+    }
+    return result;
+}
+
+MQTT_MESSAGE_HANDLE mqttmessage_create_in_place(uint16_t packetId, const char* topicName, QOS_VALUE qosValue, const uint8_t* appMsg, size_t appMsgLength)
+{
+    /* Codes_SRS_MQTTMESSAGE_07_026: [If the parameters topicName is NULL then mqttmessage_create_in_place shall return NULL.].] */
+    MQTT_MESSAGE* result;
+    if (topicName == NULL)
+    {
+        LogError("Invalid Parameter topicName: %p, packetId: %d.", topicName, packetId);
+        result = NULL;
+    }
+    else
+    {
+        result = create_msg_object(packetId, qosValue);
+        if (result == NULL)
+        {
+            /* Codes_SRS_MQTTMESSAGE_07_028: [If any memory allocation fails mqttmessage_create_in_place shall free any allocated memory and return NULL.] */
+            LogError("Failure creating message object");
+        }
+        else
+        {
+            /* Codes_SRS_MQTTMESSAGE_07_027: [mqttmessage_create_in_place shall use the a pointer to topicName or appMsg .] */
+            result->const_topic_name = topicName;
+            result->const_payload.length = appMsgLength;
+            if (result->const_payload.length > 0)
+            {
+                result->const_payload.message = (uint8_t*)appMsg;
+            }
+        }
+    }
+    /* Codes_SRS_MQTTMESSAGE_07_029: [ Upon success, mqttmessage_create_in_place shall return a NON-NULL MQTT_MESSAGE_HANDLE value.] */
+    return (MQTT_MESSAGE_HANDLE)result;
+}
+
+MQTT_MESSAGE_HANDLE mqttmessage_create(uint16_t packetId, const char* topicName, QOS_VALUE qosValue, const uint8_t* appMsg, size_t appMsgLength)
+{
+    /* Codes_SRS_MQTTMESSAGE_07_001:[If the parameters topicName is NULL is zero then mqttmessage_create shall return NULL.] */
+    MQTT_MESSAGE* result;
+    if (topicName == NULL)
+    {
+        LogError("Invalid Parameter topicName: %p, packetId: %d.", topicName, packetId);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */
+        result = create_msg_object(packetId, qosValue);
+        if (result == NULL)
+        {
+            /* Codes_SRS_MQTTMESSAGE_07_028: [If any memory allocation fails mqttmessage_create_in_place shall free any allocated memory and return NULL.] */
+            LogError("Failure creating message object");
+        }
+        else
+        {
+            if (mallocAndStrcpy_s(&result->topicName, topicName) != 0)
+            {
+                /* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */
+                LogError("Failure allocating topic name");
+                free(result);
+                result = NULL;
+            }
+            else
+            {
+                /* Codes_SRS_MQTTMESSAGE_07_002: [mqttmessage_create shall allocate and copy the topicName and appMsg parameters.] */
+                result->appPayload.length = appMsgLength;
+                if (result->appPayload.length > 0)
+                {
+                    result->appPayload.message = malloc(appMsgLength);
+                    if (result->appPayload.message == NULL)
+                    {
+                        /* Codes_SRS_MQTTMESSAGE_07_003: [If any memory allocation fails mqttmessage_create shall free any allocated memory and return NULL.] */
+                        LogError("Failure allocating message value of %lu", (unsigned long)appMsgLength);
+                        free(result->topicName);
+                        free(result);
+                        result = NULL;
+                    }
+                    else
+                    {
+                        (void)memcpy(result->appPayload.message, appMsg, appMsgLength);
+                    }
+                }
+                else
+                {
+                    result->appPayload.message = NULL;
+                }
+            }
+        }
+    }
+    /* Codes_SRS_MQTTMESSAGE_07_004: [If mqttmessage_createMessage succeeds the it shall return a NON-NULL MQTT_MESSAGE_HANDLE value.] */
+    return (MQTT_MESSAGE_HANDLE)result;
+}
+
+void mqttmessage_destroy(MQTT_MESSAGE_HANDLE handle)
+{
+    /* Codes_SRS_MQTTMESSAGE_07_005: [If the handle parameter is NULL then mqttmessage_destroyMessage shall do nothing] */
+    if (handle != NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_006: [mqttmessage_destroyMessage shall free all resources associated with the MQTT_MESSAGE_HANDLE value] */
+        if (handle->topicName != NULL)
+        {
+            free(handle->topicName);
+        }
+        if (handle->appPayload.message != NULL)
+        {
+            free(handle->appPayload.message);
+        }
+        free(handle);
+    }
+}
+
+MQTT_MESSAGE_HANDLE mqttmessage_clone(MQTT_MESSAGE_HANDLE handle)
+{
+    MQTT_MESSAGE_HANDLE result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_007: [If handle parameter is NULL then mqttmessage_clone shall return NULL.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_008: [mqttmessage_clone shall create a new MQTT_MESSAGE_HANDLE with data content identical of the handle value.] */
+        result = mqttmessage_create(handle->packetId, handle->topicName, handle->qosInfo, handle->appPayload.message, handle->appPayload.length);
+        if (result != NULL)
+        {
+            result->isDuplicateMsg = handle->isDuplicateMsg;
+            result->isMessageRetained = handle->isMessageRetained;
+        }
+    }
+    return result;
+}
+
+uint16_t mqttmessage_getPacketId(MQTT_MESSAGE_HANDLE handle)
+{
+    uint16_t result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_010: [If handle is NULL then mqttmessage_getPacketId shall return 0.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = 0;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_011: [mqttmessage_getPacketId shall return the packetId value contained in MQTT_MESSAGE_HANDLE handle.] */
+        result = handle->packetId;
+    }
+    return result;
+}
+
+const char* mqttmessage_getTopicName(MQTT_MESSAGE_HANDLE handle)
+{
+    const char* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_012: [If handle is NULL then mqttmessage_getTopicName shall return a NULL string.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_013: [mqttmessage_getTopicName shall return the topicName contained in MQTT_MESSAGE_HANDLE handle.] */
+        if (handle->topicName == NULL)
+        {
+            result = handle->const_topic_name;
+        }
+        else
+        {
+            result = handle->topicName;
+        }
+    }
+    return result;
+}
+
+int mqttmessage_getTopicLevels(MQTT_MESSAGE_HANDLE handle, char*** levels, size_t* count)
+{
+    int result;
+
+    // Codes_SRS_MQTTMESSAGE_09_001: [ If `handle`, `levels` or `count` are NULL the function shall return a non-zero value. ]
+    if (handle == NULL || levels == NULL || count == NULL)
+    {
+        LogError("Invalid Parameter handle: %p, levels: %p, count: %p", handle, levels, count);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        MQTT_MESSAGE* msgInfo = (MQTT_MESSAGE*)handle;
+
+        const char* topic_name = msgInfo->topicName != NULL ? msgInfo->topicName : msgInfo->const_topic_name;
+
+        if (topic_name == NULL)
+        {
+            LogError("Topic name is NULL");
+            result = MU_FAILURE;
+        }
+        else
+        {
+            const char* delimiters[1];
+
+            delimiters[0] = "/";
+
+            // Codes_SRS_MQTTMESSAGE_09_002: [ The topic name, excluding the property bag, shall be split into individual tokens using "/" as separator ]
+            // Codes_SRS_MQTTMESSAGE_09_004: [ The split tokens shall be stored in `levels` and its count in `count` ]
+            if (StringToken_Split(topic_name, strlen(topic_name), delimiters, 1, false, levels, count) != 0)
+            {
+                // Codes_SRS_MQTTMESSAGE_09_003: [ If splitting fails the function shall return a non-zero value. ]
+                LogError("Failed splitting topic levels");
+                result = MU_FAILURE;
+            }
+            else
+            {
+                // Codes_SRS_MQTTMESSAGE_09_005: [ If no failures occur the function shall return zero. ]
+                result = 0;
+            }
+        }
+    }
+
+    return result;
+}
+
+QOS_VALUE mqttmessage_getQosType(MQTT_MESSAGE_HANDLE handle)
+{
+    QOS_VALUE result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_014: [If handle is NULL then mqttmessage_getQosType shall return the default DELIVER_AT_MOST_ONCE value.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = DELIVER_AT_MOST_ONCE;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_015: [mqttmessage_getQosType shall return the QOS Type value contained in MQTT_MESSAGE_HANDLE handle.] */
+        result = handle->qosInfo;
+    }
+    return result;
+}
+
+bool mqttmessage_getIsDuplicateMsg(MQTT_MESSAGE_HANDLE handle)
+{
+    bool result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_016: [If handle is NULL then mqttmessage_getIsDuplicateMsg shall return false.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = false;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_017: [mqttmessage_getIsDuplicateMsg shall return the isDuplicateMsg value contained in MQTT_MESSAGE_HANDLE handle.] */
+        result = handle->isDuplicateMsg;
+    }
+    return result;
+}
+
+bool mqttmessage_getIsRetained(MQTT_MESSAGE_HANDLE handle)
+{
+    bool result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_018: [If handle is NULL then mqttmessage_getIsRetained shall return false.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = false;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_019: [mqttmessage_getIsRetained shall return the isRetained value contained in MQTT_MESSAGE_HANDLE handle.] */
+        result = handle->isMessageRetained;
+    }
+    return result;
+}
+
+int mqttmessage_setIsDuplicateMsg(MQTT_MESSAGE_HANDLE handle, bool duplicateMsg)
+{
+    int result;
+    /* Codes_SRS_MQTTMESSAGE_07_022: [If handle is NULL then mqttmessage_setIsDuplicateMsg shall return a non-zero value.] */
+    if (handle == NULL)
+    {
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_023: [mqttmessage_setIsDuplicateMsg shall store the duplicateMsg value in the MQTT_MESSAGE_HANDLE handle.] */
+        handle->isDuplicateMsg = duplicateMsg;
+        result = 0;
+    }
+    return result;
+}
+
+int mqttmessage_setIsRetained(MQTT_MESSAGE_HANDLE handle, bool retainMsg)
+{
+    int result;
+    /* Codes_SRS_MQTTMESSAGE_07_024: [If handle is NULL then mqttmessage_setIsRetained shall return a non-zero value.] */
+    if (handle == NULL)
+    {
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = MU_FAILURE;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_025: [mqttmessage_setIsRetained shall store the retainMsg value in the MQTT_MESSAGE_HANDLE handle.] */
+        handle->isMessageRetained = retainMsg;
+        result = 0;
+    }
+    return result;
+}
+
+const APP_PAYLOAD* mqttmessage_getApplicationMsg(MQTT_MESSAGE_HANDLE handle)
+{
+    const APP_PAYLOAD* result;
+    if (handle == NULL)
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_020: [If handle is NULL or if msgLen is 0 then mqttmessage_getApplicationMsg shall return NULL.] */
+        LogError("Invalid Parameter handle: %p.", handle);
+        result = NULL;
+    }
+    else
+    {
+        /* Codes_SRS_MQTTMESSAGE_07_021: [mqttmessage_getApplicationMsg shall return the applicationMsg value contained in MQTT_MESSAGE_HANDLE handle and the length of the appMsg in the msgLen parameter.] */
+        if (handle->const_payload.length > 0)
+        {
+            result = &handle->const_payload;
+        }
+        else
+        {
+            result = &handle->appPayload;
+        }
+    }
+    return result;
+}
Index: azure_iot_hub/trunk/curl-7.57.0/CHANGES
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/CHANGES	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/CHANGES	(revision 389)
@@ -19,5 +19,5 @@
   RSA_flags(), so we disable that code block for boringssl builds.
   
-  Reported-by: W.âMark Kubacki
+  Reported-by: W. Mark Kubacki
   Fixes #2117
 
@@ -3422,5 +3422,5 @@
   Closes #1756
 
-- metalink: fix error: â*â in boolean context, suggest â&&â instead
+- metalink: fix error: ‘*’ in boolean context, suggest ‘&&’ instead
 
 - dist: fix the cmake build by shipping cmake_uninstall.cmake.in too
@@ -4036,6 +4036,6 @@
   
   GCC 4.6.3 on travis complains:
-  smb.c: In function âget_posix_timeâ:
-  smb.c:725:13: error: declaration of âtimeâ shadows a global declaration
+  smb.c: In function ‘get_posix_time’:
+  smb.c:725:13: error: declaration of ‘time’ shadows a global declaration
   [-Werror=shadow]
   
@@ -4045,5 +4045,5 @@
   
   GCC 4.4 complains:
-  tool_cb_wrt.c:81: error: declaration of âisattyâ shadows a global
+  tool_cb_wrt.c:81: error: declaration of ‘isatty’ shadows a global
   declaration
   /usr/include/unistd.h:782: error: shadowed declaration is here
@@ -4182,5 +4182,5 @@
   Fixes #1619
   Closes #1634
-  Reported-by: David E. NarvÃ¡ez
+  Reported-by: David E. Narváez
 
 - configure: remove checks for 5 functions never used
@@ -4447,5 +4447,5 @@
   Fixes: 1598
 
-- [Henrik S. GaÃmann brought this change]
+- [Henrik S. Gaßmann brought this change]
 
   winbuild: fix boringssl build
@@ -5102,5 +5102,5 @@
   
   GCC 7 complained:
-  â*â in boolean context, suggest â&&â instead [-Wint-in-bool-context]
+  ‘*’ in boolean context, suggest ‘&&’ instead [-Wint-in-bool-context]
 
 - libtest: fix implicit-fallthrough warnings with GCC 7
@@ -5411,7 +5411,7 @@
   .... caused by a typo in the last commit (fixing issue #1504):
   
-  memdebug.c: In function âcurl_fcloseâ:
+  memdebug.c: In function ‘curl_fclose’:
   memdebug.c:444:3: error: implicit declaration of function
-  âDEBUGDEBUGASSERTâ [-Werror=implicit-function-declaration]
+  ‘DEBUGDEBUGASSERT’ [-Werror=implicit-function-declaration]
 
 Daniel Stenberg (22 May 2017)
@@ -6163,8 +6163,8 @@
   
   ../../include/curl/typecheck-gcc.h:126:42: warning: call to
-  â_curl_easy_getinfo_err_curl_slistâ declared with attribute warning:
+  ‘_curl_easy_getinfo_err_curl_slist’ declared with attribute warning:
   curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this
   info [enabled by default]
-  sendrecv.c:90:11: note: in expansion of macro âcurl_easy_getinfoâ
+  sendrecv.c:90:11: note: in expansion of macro ‘curl_easy_getinfo’
   res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
   
@@ -6308,11 +6308,11 @@
   With -Og, GCC complains:
   
-  easy.c:628:7: error: âmcodeâ may be used uninitialized in this function [-Werror=maybe-uninitialized]
-  
-  ../lib/strcase.h:35:29: error: âtok_bufâ may be used uninitialized in this function [-Werror=maybe-uninitialized]
-  vauth/digest.c:208:9: note: âtok_bufâ was declared here
-  
-  ../lib/strcase.h:35:29: error: âtok_bufâ may be used uninitialized in this function [-Werror=maybe-uninitialized]
-  vauth/digest.c:566:15: note: âtok_bufâ was declared here
+  easy.c:628:7: error: ‘mcode’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
+  
+  ../lib/strcase.h:35:29: error: ‘tok_buf’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
+  vauth/digest.c:208:9: note: ‘tok_buf’ was declared here
+  
+  ../lib/strcase.h:35:29: error: ‘tok_buf’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
+  vauth/digest.c:566:15: note: ‘tok_buf’ was declared here
   
   Fix this by initializing the variables.
@@ -6732,5 +6732,5 @@
   Closes #1388
 
-- [DÃ¡niel Bakai brought this change]
+- [Dániel Bakai brought this change]
 
   tests: added test for Curl_splaygetbest to unit1309
@@ -6742,5 +6742,5 @@
   Closes #1358
 
-- [DÃ¡niel Bakai brought this change]
+- [Dániel Bakai brought this change]
 
   multi: fix queueing of pending easy handles
@@ -6776,5 +6776,5 @@
 
 Jay Satiro (4 Apr 2017)
-- [Antti HÃ¤tÃ¤lÃ¤ brought this change]
+- [Antti Hätälä brought this change]
 
   url: don't free postponed data on connection reuse
Index: azure_iot_hub/trunk/curl-7.57.0/COPYING
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/COPYING	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/COPYING	(revision 389)
Index: azure_iot_hub/trunk/curl-7.57.0/README
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/README	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/README	(revision 389)
@@ -46,4 +46,4 @@
 
   Curl contains pieces of source code that is Copyright (c) 1998, 1999
-  Kungliga Tekniska Hæ¦gskolan. This notice is included here to comply with the
+  Kungliga Tekniska H旦gskolan. This notice is included here to comply with the
   distribution terms.
Index: azure_iot_hub/trunk/curl-7.57.0/RELEASE-NOTES
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/RELEASE-NOTES	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/RELEASE-NOTES	(revision 389)
@@ -97,8 +97,8 @@
   Dmitri Tikhonov, Evgeny Grin, Gisle Vanem, hsiao yi, Jakub Zakrzewski,
   John Starks, Juro Bystricky, Kamil Dudka, Luca Boccassi, Marcel Raad,
-  Martin Storsjæ¦, Matthew Kerwin, Max Dymond, Michael Felt, Michael Kaufmann,
+  Martin Storsj旦, Matthew Kerwin, Max Dymond, Michael Felt, Michael Kaufmann,
   moohoorama on github, omau on github, Orgad Shaneh, Patrick Monnerat,
   Paul Howarth, Pavel Gushchin, Pavol Markovic, Per Lundberg, Peter Piekarski,
-  Petr Voytsik, Ray Satiro, Rob Cotrone, Viktor Szakå©ts, youngchopin on github,
+  Petr Voytsik, Ray Satiro, Rob Cotrone, Viktor Szak叩ts, youngchopin on github,
   (41 contributors)
 
Index: azure_iot_hub/trunk/curl-7.57.0/include/README
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/include/README	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/include/README	(revision 389)
Index: azure_iot_hub/trunk/curl-7.57.0/lib/cookie.c
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/lib/cookie.c	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/lib/cookie.c	(revision 389)
@@ -733,5 +733,5 @@
       case 1:
         /* This field got its explanation on the 23rd of May 2001 by
-           André§¸ Garcå:
+           Andr駸 Garc僘:
 
            flag: A TRUE/FALSE value indicating if all machines within a given
@@ -747,5 +747,5 @@
         /* It turns out, that sometimes the file format allows the path
            field to remain not filled in, we try to detect this and work
-           around it! André§¸ Garcå made us aware of this... */
+           around it! Andr駸 Garc僘 made us aware of this... */
         if(strcmp("TRUE", ptr) && strcmp("FALSE", ptr)) {
           /* only if the path doesn't look like a boolean option! */
Index: azure_iot_hub/trunk/curl-7.57.0/lib/curl_setup.h
===================================================================
--- azure_iot_hub/trunk/curl-7.57.0/lib/curl_setup.h	(revision 388)
+++ azure_iot_hub/trunk/curl-7.57.0/lib/curl_setup.h	(revision 389)
@@ -218,5 +218,5 @@
 /*
  * Use getaddrinfo to resolve the IPv4 address literal. If the current network
- * interface doesnât support IPv4, but supports IPv6, NAT64, and DNS64,
+ * interface doesn’t support IPv4, but supports IPv6, NAT64, and DNS64,
  * performing this task will result in a synthesized IPv6 address.
  */
Index: azure_iot_hub/trunk/musl-1.1.18/COPYRIGHT
===================================================================
--- azure_iot_hub/trunk/musl-1.1.18/COPYRIGHT	(revision 388)
+++ azure_iot_hub/trunk/musl-1.1.18/COPYRIGHT	(revision 389)
@@ -2,5 +2,5 @@
 
 ----------------------------------------------------------------------
-Copyright 息 2005-2014 Rich Felker, et al.
+Copyright © 2005-2014 Rich Felker, et al.
 
 Permission is hereby granted, free of charge, to any person obtaining
@@ -34,5 +34,5 @@
 Brent Cook
 Chris Spiegel
-Cl辿ment Vasseur
+Clément Vasseur
 Daniel Micay
 Denys Vlasenko
@@ -72,5 +72,5 @@
 Stefan Kristiansson
 Szabolcs Nagy
-Timo Ter辰s
+Timo Teräs
 Trutz Behn
 Valentin Ochs
@@ -81,5 +81,5 @@
 
 The TRE regular expression implementation (src/regex/reg* and
-src/regex/tre*) is Copyright 息 2001-2008 Ville Laurikari and licensed
+src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
 under a 2-clause BSD license (license text in the source files). The
 included version has been heavily modified by Rich Felker in 2012, in
@@ -87,18 +87,18 @@
 
 Much of the math library code (src/math/* and src/complex/*) is
-Copyright 息 1993,2004 Sun Microsystems or
-Copyright 息 2003-2011 David Schultz or
-Copyright 息 2003-2009 Steven G. Kargl or
-Copyright 息 2003-2009 Bruce D. Evans or
-Copyright 息 2008 Stephen L. Moshier
+Copyright © 1993,2004 Sun Microsystems or
+Copyright © 2003-2011 David Schultz or
+Copyright © 2003-2009 Steven G. Kargl or
+Copyright © 2003-2009 Bruce D. Evans or
+Copyright © 2008 Stephen L. Moshier
 and labelled as such in comments in the individual source files. All
 have been licensed under extremely permissive terms.
 
-The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright 息 2008
+The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright © 2008
 The Android Open Source Project and is licensed under a two-clause BSD
 license. It was taken from Bionic libc, used on Android.
 
 The implementation of DES for crypt (src/crypt/crypt_des.c) is
-Copyright 息 1994 David Burren. It is licensed under a BSD license.
+Copyright © 1994 David Burren. It is licensed under a BSD license.
 
 The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
@@ -107,9 +107,9 @@
 in jurisdictions that may not recognize the public domain.
 
-The smoothsort implementation (src/stdlib/qsort.c) is Copyright 息 2011
+The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
 Valentin Ochs and is licensed under an MIT-style license.
 
 The BSD PRNG implementation (src/prng/random.c) and XSI search API
-(src/search/*.c) functions are Copyright 息 2011 Szabolcs Nagy and
+(src/search/*.c) functions are Copyright © 2011 Szabolcs Nagy and
 licensed under following terms: "Permission to use, copy, modify,
 and/or distribute this code for any purpose with or without fee is
Index: azure_iot_hub/trunk/ntshell/echonet/MANIFEST
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/MANIFEST	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/MANIFEST	(revision 389)
Index: azure_iot_hub/trunk/ntshell/echonet/echonet.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -63,5 +48,5 @@
 
 /*
- * ECHONET Liteãµã¼ãã¹å¦çéå§
+ * ECHONET Liteサービス処理開始
  */
 ER ecn_sta_svc()
@@ -71,5 +56,5 @@
 
 /*
- * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡
+ * インスタンスリスト通知の送信
  */
 ER ecn_ntf_inl()
@@ -79,18 +64,11 @@
 
 /*
- * ECHONETãªãã¸ã§ã¯ãåç
-§
- * å¼æ°
- * ID		fa_eobjid	ECHONETãªãã¸ã§ã¯ãID
- * T_REOBJ	*fp_eobj	ECHONETãªãã¸ã§ã¯ãã®è¨­å®å
-å®¹ã³ãã¼å
-
+ * ECHONETオブジェクト参照
+ * 引数
+ * ID		fa_eobjid	ECHONETオブジェクトID
+ * T_REOBJ	*fp_eobj	ECHONETオブジェクトの設定内容コピー先
  *
- * eobjidã§æå®ããECHONETãªãã¸ã§ã¯ãã®è¨­å®å
-å®¹ãåç
-§ããã
- * åç
-§ããè¨­å®å
-å®¹ã¯pk_eobjã«æå®ããã¡ã¢ãªã«è¿ãããã
+ * eobjidで指定したECHONETオブジェクトの設定内容を参照する。
+ * 参照した設定内容はpk_eobjに指定したメモリに返される。
  */
 ER ecn_ref_eobj(ID fa_eobjid, T_REOBJ *fp_eobj)
@@ -99,8 +77,8 @@
 
 	if (!fp_eobj)
-		return E_PAR;	/* ãã©ã¡ã¼ã¿ã¨ã©ã¼ */
+		return E_PAR;	/* パラメータエラー */
 
 	if ((fa_eobjid <= 0) || (fa_eobjid > tmax_eobjid))
-		return E_OBJ;	/* ãªãã¸ã§ã¯ãæªç»é² */
+		return E_OBJ;	/* オブジェクト未登録 */
 
 	p_obj = &eobjinib_table[fa_eobjid - 1];
@@ -112,19 +90,12 @@
 
 /*
- * ECHONETãã­ããã£åç
-§
- * å¼æ°
- * ID			fa_eobjid	ECHONETãªãã¸ã§ã¯ãID
- * uint8_t		fa_epc		ãã­ããã£ã³ã¼ã
- * T_RPRP		*fp_eprp	ECHONETãªãã¸ã§ã¯ãã®ãã­ããã£è¨­å®å
-å®¹ã³ãã¼å
-
+ * ECHONETプロパティ参照
+ * 引数
+ * ID			fa_eobjid	ECHONETオブジェクトID
+ * uint8_t		fa_epc		プロパティコード
+ * T_RPRP		*fp_eprp	ECHONETオブジェクトのプロパティ設定内容コピー先
  *
- * eobjidã§æå®ããECHONETãªãã¸ã§ã¯ãã®ãepcã§æå®ãããã­ããã£ã®è¨­å®å
-å®¹ãåç
-§ããã
- * åç
-§ããè¨­å®å
-å®¹ã¯pk_eprpã«æå®ããã¡ã¢ãªã«è¿ãããã
+ * eobjidで指定したECHONETオブジェクトの、epcで指定したプロパティの設定内容を参照する。
+ * 参照した設定内容はpk_eprpに指定したメモリに返される。
  */
 ER ecn_ref_eprp(ID fa_eobjid, uint8_t fa_epc, T_RPRP *fp_eprp)
@@ -135,13 +106,12 @@
 
 	if (!fp_eprp)
-		return E_PAR;	/* ãã©ã¡ã¼ã¿ã¨ã©ã¼ */
+		return E_PAR;	/* パラメータエラー */
 
 	if ((fa_eobjid <= 0) || (fa_eobjid > tmax_eobjid))
-		return E_OBJ;	/* ãªãã¸ã§ã¯ãæªç»é² */
+		return E_OBJ;	/* オブジェクト未登録 */
 
 	p_obj = &eobjinib_table[fa_eobjid - 1];
 
-	/* eojã®æã¤ãã­ããã£åæåå®ç¾©é
-åããæ¤ç´¢ */
+	/* eojの持つプロパティ初期化定義配列から検索 */
 	p = p_obj->eprp;
 	for (i = 0; i < p_obj->eprpcnt; i++, p++) {
@@ -152,25 +122,21 @@
 	}
 
-	return E_PAR;	/* ãã©ã¡ã¼ã¿ã¨ã©ã¼ */
-}
-
-/*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼é»æä½æ
- * å¼æ°
- * T_EDATA			**ppk_esv	åå¾ããé»æã®æ ¼ç´å
-
- * ID				fa_deoj		å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_epc		ãã­ããã£ã³ã¼ã
- * uint8_t			fa_pdc		ãã­ããã£å¤ãã¼ã¿ãµã¤ãº
- * const void		*p_edt		ãã­ããã£å¤ãã¼ã¿
+	return E_PAR;	/* パラメータエラー */
+}
+
+/*
+ * プロパティ値書き込み要求（応答不要）電文作成
+ * 引数
+ * T_EDATA			**ppk_esv	取得した電文の格納先
+ * ID				fa_deoj		宛先のECHONETオブジェクトID
+ * uint8_t			fa_epc		プロパティコード
+ * uint8_t			fa_pdc		プロパティ値データサイズ
+ * const void		*p_edt		プロパティ値データ
  *
- *	ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼é»æãä½æããã
- *	é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å
-ã¨ãã
- *	é»æã®åãã®ãã­ããã£å¤ã¨ãã¦ãepcã¨pdcãp_edtã§æå®ããã
- *	ãã­ããã£ã³ã¼ãããã¼ã¿ãµã¤ãºããã¼ã¿ãé»æã«è¨­å®ããã
- *	ä½æããé»æã®å
-é ­ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã
+ *	プロパティ値書き込み要求（応答不要）電文を作成する。
+ *	電文はdeojで指定したECHONETオブジェクトを宛先とし、
+ *	電文の初めのプロパティ値として、epcとpdc、p_edtで指定された
+ *	プロパティコード、データサイズ、データを電文に設定する。
+ *	作成した電文の先頭アドレスはポインタ経由で返される。
  */
 ER ecn_esv_seti(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc,
@@ -181,21 +147,17 @@
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼é»æä½æ
- * å¼æ°
- * T_EDATA			**ppk_esv	åå¾ããé»æã®æ ¼ç´å
-
- * ID				fa_deoj		å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_epc		ãã­ããã£ã³ã¼ã
- * uint8_t			fa_pdc		ãã­ããã£å¤ãã¼ã¿ãµã¤ãº
- * const void		*p_edt		ãã­ããã£å¤ãã¼ã¿
+ * プロパティ値書き込み要求（応答要）電文作成
+ * 引数
+ * T_EDATA			**ppk_esv	取得した電文の格納先
+ * ID				fa_deoj		宛先のECHONETオブジェクトID
+ * uint8_t			fa_epc		プロパティコード
+ * uint8_t			fa_pdc		プロパティ値データサイズ
+ * const void		*p_edt		プロパティ値データ
  *
- *	ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼é»æãä½æããã
- *	é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å
-ã¨ãã
- *	é»æã®åãã®ãã­ããã£å¤ã¨ãã¦ãepcã¨pdcãp_edtã§æå®ããã
- *	ãã­ããã£ã³ã¼ãããã¼ã¿ãµã¤ãºããã¼ã¿ãé»æã«è¨­å®ããã
- *	ä½æããé»æã®å
-é ­ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã
+ *	プロパティ値書き込み要求（応答要）電文を作成する。
+ *	電文はdeojで指定したECHONETオブジェクトを宛先とし、
+ *	電文の初めのプロパティ値として、epcとpdc、p_edtで指定された
+ *	プロパティコード、データサイズ、データを電文に設定する。
+ *	作成した電文の先頭アドレスはポインタ経由で返される。
  */
 ER ecn_esv_setc(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc,
@@ -206,19 +168,15 @@
 
 /*
- * ãã­ããã£å¤èª­ã¿åºãè¦æ±é»æä½æ
- * å¼æ°
- * T_EDATA			**ppk_esv	åå¾ããé»æã®æ ¼ç´å
-
- * ID				fa_deoj		å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_epc		ãã­ããã£ã³ã¼ã
+ * プロパティ値読み出し要求電文作成
+ * 引数
+ * T_EDATA			**ppk_esv	取得した電文の格納先
+ * ID				fa_deoj		宛先のECHONETオブジェクトID
+ * uint8_t			fa_epc		プロパティコード
  *
- * ãã­ããã£å¤èª­ã¿åºãè¦æ±é»æãä½æããã
- * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å
-ã¨ãã
- * é»æã®åãã®ãã­ããã£å¤ã¨ãã¦ãepcã§æå®ããã
- * ãã­ããã£ã³ã¼ããé»æã«è¨­å®ããã
- * ä½æããé»æã®å
-é ­ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã
+ * プロパティ値読み出し要求電文を作成する。
+ * 電文はdeojで指定したECHONETオブジェクトを宛先とし、
+ * 電文の初めのプロパティ値として、epcで指定された
+ * プロパティコードを電文に設定する。
+ * 作成した電文の先頭アドレスはポインタ経由で返される。
  */
 ER ecn_esv_get(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc)
@@ -228,19 +186,15 @@
 
 /*
- * ãã­ããã£å¤éç¥è¦æ±é»æä½æ
- * å¼æ°
- * T_EDATA			**ppk_esv	åå¾ããé»æã®æ ¼ç´å
-
- * ID				fa_deoj		å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_epc		ãã­ããã£ã³ã¼ã
+ * プロパティ値通知要求電文作成
+ * 引数
+ * T_EDATA			**ppk_esv	取得した電文の格納先
+ * ID				fa_deoj		宛先のECHONETオブジェクトID
+ * uint8_t			fa_epc		プロパティコード
  *
- * ãã­ããã£å¤éç¥è¦æ±é»æãä½æããã
- * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å
-ã¨ãã
- * é»æã®åãã®ãã­ããã£å¤ã¨ãã¦ãepcã§æå®ããã
- * ãã­ããã£ã³ã¼ããé»æã«è¨­å®ããã
- * ä½æããé»æã®å
-é ­ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã
+ * プロパティ値通知要求電文を作成する。
+ * 電文はdeojで指定したECHONETオブジェクトを宛先とし、
+ * 電文の初めのプロパティ値として、epcで指定された
+ * プロパティコードを電文に設定する。
+ * 作成した電文の先頭アドレスはポインタ経由で返される。
  */
 ER ecn_esv_inf_req(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc)
@@ -250,21 +204,17 @@
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æä½æ
- * å¼æ°
- * T_EDATA			**ppk_esv	åå¾ããé»æã®æ ¼ç´å
-
- * ID				fa_deoj		å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_epc		ãã­ããã£ã³ã¼ã
- * uint8_t			fa_pdc		ãã­ããã£å¤ãã¼ã¿ãµã¤ãº
- * const void		*p_edt		ãã­ããã£å¤ãã¼ã¿
+ * プロパティ値書き込み・読み出し要求電文作成
+ * 引数
+ * T_EDATA			**ppk_esv	取得した電文の格納先
+ * ID				fa_deoj		宛先のECHONETオブジェクトID
+ * uint8_t			fa_epc		プロパティコード
+ * uint8_t			fa_pdc		プロパティ値データサイズ
+ * const void		*p_edt		プロパティ値データ
  *
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æãä½æããã
- * é»æã¯deojã§æå®ããECHONETãªãã¸ã§ã¯ããå®å
-ã¨ãã
- * é»æã®åãã®ãã­ããã£å¤ã¨ãã¦ãepcã¨pdcãp_edtã§æå®ããã
- * ãã­ããã£ã³ã¼ãããã¼ã¿ãµã¤ãºããã¼ã¿ãé»æã«è¨­å®ããã
- * ä½æããé»æã®å
-é ­ã¢ãã¬ã¹ã¯ãã¤ã³ã¿çµç±ã§è¿ãããã
+ * プロパティ値書き込み・読み出し要求電文を作成する。
+ * 電文はdeojで指定したECHONETオブジェクトを宛先とし、
+ * 電文の初めのプロパティ値として、epcとpdc、p_edtで指定された
+ * プロパティコード、データサイズ、データを電文に設定する。
+ * 作成した電文の先頭アドレスはポインタ経由で返される。
  */
 ER ecn_esv_set_get(T_EDATA **ppk_esv, ID fa_deoj, uint8_t fa_epc, uint8_t fa_pdc,
@@ -275,9 +225,7 @@
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æä½æï¼æãè¿ãæå®
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æä½æä¸­ã®ãæ¸ãè¾¼ã¿ãã­ããã£é
-åãçµãã¦
- * èª­ã¿åºããã­ããã£é
-åã«ç§»ãæã«ç¨ããã
+ * プロパティ値書き込み・読み出し要求電文作成：折り返し指定
+ * プロパティ値書き込み・読み出し要求電文作成中の、書き込みプロパティ配列を終えて
+ * 読み出しプロパティ配列に移る時に用いる。
  */
 ER ecn_trn_set_get(T_EDATA *ppk_esv, int *p_trn_pos)
@@ -290,9 +238,8 @@
 		return E_PAR;
 
-	/* ãã­ããã£èª­ã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ
-å ±ãè¨é² */
+	/* プロパティ読み込み件数書き込み時のヘッド情報を記録 */
 	*p_trn_pos = _ecn_fbs_get_datalen(*(ECN_FBS_ID *)&ppk_esv);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å ã»ãã®æç¹ã§ã®å¿ç­é»æä¸­ãã­ããã£ä»¶æ°ãè¨é² */
+	/* 応答電文用メモリにデータ追加・この時点での応答電文中プロパティ件数を記録 */
 	a_ret = _ecn_fbs_add_data_ex(*(ECN_FBS_ID *)&ppk_esv, &ppk_esv->hdr.edata.opc, 1);
 	if (a_ret) {
@@ -301,5 +248,5 @@
 	}
 
-	/* å¿ç­é»æä¸­ãã­ããã£ä»¶æ°ã 0 ã«æ»ãï¼ä»å¾ãçµäºæå®ããã¾ã§ã¯èª­ã¿åºããã­ããã£ä»¶æ°ã«ãªãï¼ */
+	/* 応答電文中プロパティ件数を 0 に戻す（今後、終了指定するまでは読み出しプロパティ件数になる） */
 	ppk_esv->hdr.edata.opc = 0;
 
@@ -308,7 +255,6 @@
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æä½æï¼çµäºæå®
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æä½æä¸­ã®ãèª­ã¿åºããã­ããã£é
-åãçµããæã«ç¨ããã
+ * プロパティ値書き込み・読み出し要求電文作成：終了指定
+ * プロパティ値書き込み・読み出し要求電文作成中の、読み出しプロパティ配列を終える時に用いる。
  */
 ER ecn_end_set_get(T_EDATA *ppk_esv, int fa_trn_pos)
@@ -321,8 +267,8 @@
 		return E_PAR;
 
-	/* ãã®æç¹ã§ã®å¿ç­é»æä¸­ãã­ããã£ä»¶æ°(èª­ã¿åºããã­ããã£ä»¶æ°)ãä¿æ */
+	/* この時点での応答電文中プロパティ件数(読み出しプロパティ件数)を保持 */
 	a_rd_opc = ppk_esv->hdr.edata.opc;
 
-	/* å¿ç­é»æä¸­ãã­ããã£ä»¶æ°(æ¸ãè¾¼ã¿ãã­ããã£ä»¶æ°)ãä¿å­ä½ç½®ããèª­ã¿åã */
+	/* 応答電文中プロパティ件数(書き込みプロパティ件数)を保存位置から読み取り */
 	a_wr_opc = _ecn_fbs_peek(*(ECN_FBS_ID *)&ppk_esv, fa_trn_pos);
 	if (a_wr_opc < 0) {
@@ -331,9 +277,8 @@
 	}
 
-	/* å¿ç­é»æä¸­ãã­ããã£ä»¶æ°(æ¸ãè¾¼ã¿ãã­ããã£ä»¶æ°)ãå¾©å
- */
+	/* 応答電文中プロパティ件数(書き込みプロパティ件数)を復元 */
 	ppk_esv->hdr.edata.opc = (uint8_t)a_wr_opc;
 
-	/* å¿ç­é»æä¸­ãã­ããã£ä»¶æ°(èª­ã¿åºããã­ããã£ä»¶æ°)ãä¿å­ä½ç½®ã«æ¸ãè¾¼ã¿ */
+	/* 応答電文中プロパティ件数(読み出しプロパティ件数)を保存位置に書き込み */
 	a_ret = _ecn_fbs_poke(*(ECN_FBS_ID *)&ppk_esv, fa_trn_pos, a_rd_opc);
 	if (a_ret) {
@@ -346,14 +291,10 @@
 
 /*
- * ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼é»æä½æ
- * å¼æ°
- * T_EDATA			**ppk_esv	åå¾ããé»æã®æ ¼ç´å
-
- * ID				fa_deoj		å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * ID				fa_seoj		éä¿¡å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_sepc		éä¿¡å
-ã®ãã­ããã£ã³ã¼ã
+ * プロパティ値通知（応答要）電文作成
+ * 引数
+ * T_EDATA			**ppk_esv	取得した電文の格納先
+ * ID				fa_deoj		宛先のECHONETオブジェクトID
+ * ID				fa_seoj		送信元のECHONETオブジェクトID
+ * uint8_t			fa_sepc		送信元のプロパティコード
  */
 ER ecn_esv_infc(T_EDATA **ppk_esv, ID fa_deoj, ID fa_seoj, uint8_t fa_sepc)
@@ -363,5 +304,5 @@
 
 /*
- * è¦æ±é»æã¸ã®ãã­ããã£æå®è¿½å  (ãã­ããã£ãã¼ã¿ãä»éããªãå ´åã«ç¨ãã)
+ * 要求電文へのプロパティ指定追加 (プロパティデータが付随しない場合に用いる)
  */
 ER ecn_add_epc(T_EDATA *pk_esv, uint8_t epc)
@@ -371,5 +312,5 @@
 
 /*
- * è¦æ±é»æã¸ã®ãã­ããã£ãã¼ã¿è¿½å  (ãã­ããã£ããã³ä»éãã¼ã¿ãè¿½å ãã)
+ * 要求電文へのプロパティデータ追加 (プロパティおよび付随データを追加する)
  */
 ER ecn_add_edt(T_EDATA *pk_esv, uint8_t fa_epc, uint8_t fa_pdc, const void *p_edt)
@@ -380,16 +321,15 @@
 
 	if (!pk_esv)
-		return E_PAR; /* åå¾ããFBS_IDã®æ ¼ç´å
-ãNULL */
+		return E_PAR; /* 取得したFBS_IDの格納先がNULL */
 	if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc)
-		return E_PAR; /* ãã­ããã£å¤ãµã¤ãºãå¤§ãããã */
+		return E_PAR; /* プロパティ値サイズが大きすぎる */
 	if (!p_edt && 0 < fa_pdc)
-		return E_PAR; /* ãã­ããã£å¤ãµã¤ãºã1ä»¥ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */
+		return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */
 
 	a_fbs_id.ptr = (T_ECN_FST_BLK *)pk_esv;
 	if (((T_EDATA *)a_fbs_id.ptr)->hdr.edata.opc == 0xFF)
-		return E_PAR; /* ãã­ããã£ãå¤ããã */
-
-	/* è¦æ±é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  */
+		return E_PAR; /* プロパティが多すぎる */
+
+	/* 要求電文用メモリにデータ追加 */
 	memset(&a_ecn_prp, 0, sizeof(a_ecn_prp));
 	a_ecn_prp.epc = fa_epc;
@@ -403,5 +343,5 @@
 	}
 	if (0 < fa_pdc) {
-		/* ä»éãã¼ã¿è¿½å  */
+		/* 付随データ追加 */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_edt, fa_pdc);
 		if (a_ret) {
@@ -412,5 +352,5 @@
 		}
 	}
-	/* ãã­ããã£æ°ã¤ã³ã¯ãªã¡ã³ã */
+	/* プロパティ数インクリメント */
 	((T_EDATA *)a_fbs_id.ptr)->hdr.edata.opc++;
 
@@ -420,8 +360,7 @@
 
 /*
- * è¦æ±é»æã®éä¿¡
- * esvã§æå®ãããè¦æ±é»æãéä¿¡ããã
- * é»æã«æå®ãããå®å
-ããIPã¢ãã¬ã¹ãç¹å®ããUDPãã±ããã¨ãã¦éä¿¡ããã
+ * 要求電文の送信
+ * esvで指定された要求電文を送信する。
+ * 電文に指定された宛先からIPアドレスを特定し、UDPパケットとして送信する。
  */
 ER ecn_snd_esv(T_EDATA *pk_esv)
@@ -433,15 +372,10 @@
 
 /*
- * å¿ç­é»æã®åä¿¡æ°¸é å¾
-ã¡
- * å¿ç­é»æãåä¿¡ããã®ãå¾
-ã¤ã
- * åä¿¡ããå¿ç­é»æã¯ppk_esvã§æå®ãããã¤ã³ã¿ã¼ã«å
-é ­ã¢ãã¬ã¹ãè¿ãããã
- * è¦æ±é»æã®å®å
-ã®ECHONETãªãã¸ã§ã¯ãããããã¯ã¼ã¯ã«å­å¨ããªãå ´åã
- * å¿ç­é»æã¯è¿éãããªãã®ã§ãæ°¸é ã«å¾
-ã¤ãã¨ã«ãªãã®ã§ã¿ã¤ã ã¢ã¦ãä»ãã®
- * ecn_trcv_esvãä½¿ç¨ãããã¨ãæ¨å¥¨ããã
+ * 応答電文の受信永遠待ち
+ * 応答電文を受信するのを待つ。
+ * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。
+ * 要求電文の宛先のECHONETオブジェクトがネットワークに存在しない場合、
+ * 応答電文は返送されないので、永遠に待つことになるのでタイムアウト付きの
+ * ecn_trcv_esvを使用することを推奨する。
  */
 ER ecn_rcv_esv(T_EDATA **ppk_esv)
@@ -451,15 +385,11 @@
 
 /*
- * å¿ç­é»æã®åä¿¡å¾
-ã¡ã¿ã¤ã ã¢ã¦ããã
- * å¿ç­é»æãåä¿¡ããã®ãå¾
-ã¤ã
- * åä¿¡ããå¿ç­é»æã¯ppk_esvã§æå®ãããã¤ã³ã¿ã¼ã«å
-é ­ã¢ãã¬ã¹ãè¿ãããã
- * tmoã§æå®ãããã¿ã¤ã ã¢ã¦ãæéãçµéãã¦ãå¿ç­é»æãåä¿¡ããªãå ´åã
- * å¾
-ã¡ãè§£é¤ãããæ»ãå¤ãE_TMOã§è¿ãããã
- * tmoã«TMO_FEVRãæå®ããã¨ecn_rcv_esvã¨åãæ¯ãèããããã
- * tmoã«0ãæå®ããã¨ecn_prcv_esvã¨åãæ¯ãèããããã
+ * 応答電文の受信待ちタイムアウトあり
+ * 応答電文を受信するのを待つ。
+ * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。
+ * tmoで指定されたタイムアウト時間が経過しても応答電文を受信しない場合、
+ * 待ちが解除され、戻り値がE_TMOで返される。
+ * tmoにTMO_FEVRを指定するとecn_rcv_esvと同じ振る舞いをする。
+ * tmoに0を指定するとecn_prcv_esvと同じ振る舞いをする。
  */
 ER ecn_trcv_esv(T_EDATA **ppk_esv, int fa_tmout)
@@ -482,11 +412,8 @@
 
 /*
- * å¿ç­é»æã®åä¿¡ãã¼ãªã³ã°
- * å¿ç­é»æãåä¿¡ããã®ãå¾
-ã¤ã
- * åä¿¡ããå¿ç­é»æã¯ppk_esvã§æå®ãããã¤ã³ã¿ã¼ã«å
-é ­ã¢ãã¬ã¹ãè¿ãããã
- * å¿ç­é»æã®åä¿¡ã®æç¡ã«ããããããå¾
-ããã«é¢æ°ãæããã
+ * 応答電文の受信ポーリング
+ * 応答電文を受信するのを待つ。
+ * 受信した応答電文はppk_esvで指定したポインターに先頭アドレスが返される。
+ * 応答電文の受信の有無にかかわらず、待たずに関数を抜ける。
  */
 ER ecn_prcv_esv(T_EDATA **ppk_esv)
@@ -496,5 +423,5 @@
 
 /*
- * å¿ç­é»æã®ç ´æ£
+ * 応答電文の破棄
  */
 ER ecn_rel_esv(T_EDATA *pk_esv)
@@ -509,6 +436,5 @@
 
 /*
- * å¿ç­é»æã®éä¿¡å
-ãã¼ããåå¾ãã
+ * 応答電文の送信元ノードを取得する
  */
 ID ecn_get_enod(T_EDATA *pk_esv)
@@ -532,6 +458,5 @@
 
 /*
- * å¿ç­é»æã®éä¿¡å
-æ©å¨ãªãã¸ã§ã¯ããåå¾ãã
+ * 応答電文の送信元機器オブジェクトを取得する
  */
 ID ecn_get_eobj(T_EDATA *pk_esv)
@@ -544,10 +469,10 @@
 	p_snod = _ecn_eno_fnd(((T_ECN_FST_BLK *)pk_esv)->hdr.sender.id);
 	if (p_snod != NULL) {
-		/* ãã¼ããã­ãã¡ã¤ã«ã®å ´å */
+		/* ノードプロファイルの場合 */
 		if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE)
 			&& (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) {
 			p_sobj = p_snod->profile;
 		}
-		/* æ©å¨ãªãã¸ã§ã¯ãã®å ´å */
+		/* 機器オブジェクトの場合 */
 		else {
 			p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj);
@@ -565,5 +490,5 @@
 
 /*
- * å¿ç­é»æè§£æã¤ãã¬ã¼ã¿ã¼åæå
+ * 応答電文解析イテレーター初期化
  */
 ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv)
@@ -577,14 +502,14 @@
 	pk_itr->pk_esv = pk_esv;
 	pk_itr->count = pk_esv->hdr.edata.opc;
-								/* ä»ã®ãã­ãã¯ã§ã®ãã­ããã£ç·æ° */
-	pk_itr->got_ct = 0;			/* ä»ã®ãã­ãã¯ã§ãèª­ã¿åã£ãæ° */
-	pk_itr->next_blk_ct = 0;	/* å¾ç¶ãã­ãã¯æ° */
-	pk_itr->is_eof = 0;			/* çµç«¯ã«éããæãé0 */
+								/* 今のブロックでのプロパティ総数 */
+	pk_itr->got_ct = 0;			/* 今のブロックで、読み取った数 */
+	pk_itr->next_blk_ct = 0;	/* 後続ブロック数 */
+	pk_itr->is_eof = 0;			/* 終端に達した時、非0 */
 	pk_itr->cur = offsetof(T_ECN_EDT_HDR, ecn_prp);
 
 	switch (pk_esv->hdr.edata.esv) {
-	case ESV_SET_GET:		/* 0x6E ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±		*/
-	case ESV_SET_GET_RES:	/* 0x7E ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãå¿ç­		*/
-	case ESV_SET_GET_SNA:	/* 0x5E	ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãä¸å¯å¿ç­	*/
+	case ESV_SET_GET:		/* 0x6E プロパティ値書き込み・読み出し要求		*/
+	case ESV_SET_GET_RES:	/* 0x7E プロパティ値書き込み・読み出し応答		*/
+	case ESV_SET_GET_SNA:	/* 0x5E	プロパティ値書き込み・読み出し不可応答	*/
 		pk_itr->next_blk_ct ++;
 	default:
@@ -596,5 +521,5 @@
 
 /*
- * å¿ç­é»æè§£æã¤ãã¬ã¼ã¿ã¼ã¤ã³ã¯ãªã¡ã³ã
+ * 応答電文解析イテレーターインクリメント
  */
 ER ecn_itr_nxt(T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt)
@@ -616,14 +541,13 @@
 
 	if (pk_itr->is_eof)
-		return E_BOVR; /* ãã¼ã¿çµäº */
+		return E_BOVR; /* データ終了 */
 	if (pk_itr->count <= pk_itr->got_ct && pk_itr->next_blk_ct < 1) {
-		pk_itr->is_eof = 1;			/* çµç«¯ã«éããæãé0 */
-		return E_BOVR; /* ãã¼ã¿çµäº */
+		pk_itr->is_eof = 1;			/* 終端に達した時、非0 */
+		return E_BOVR; /* データ終了 */
 	}
 
 	a_fbs_id.ptr = (T_ECN_FST_BLK *)pk_itr->pk_esv;
 
-	/* å
-ã®ã«ã¼ã½ã«ä½ç½®ãä¿å­ããã¤ãã¬ã¼ã¿ã®ã«ã¼ã½ã«ä½ç½®ã«ãã */
+	/* 元のカーソル位置を保存し、イテレータのカーソル位置にする */
 	a_rd_bak = a_fbs_id.ptr->hdr.rd;
 	a_fbs_id.ptr->hdr.rd = pk_itr->cur;
@@ -633,10 +557,10 @@
 #endif
 	if (pk_itr->count <= pk_itr->got_ct && 0 < pk_itr->next_blk_ct) {
-		/* æ¬¡ãã­ãã¯ã«ç§»å */
+		/* 次ブロックに移動 */
 		pk_itr->next_blk_ct --;
-		pk_itr->count = 0;		/* ä»ã®ãã­ãã¯ã§ã®ãã­ããã£ç·æ° */
-		pk_itr->got_ct = 0;		/* ä»ã®ãã­ãã¯ã§ãèª­ã¿åã£ãæ° */
-
-		/* æ¬¡ãã­ãã¯ã®ãã­ããã£æ°ãèª­ã¿åã */
+		pk_itr->count = 0;		/* 今のブロックでのプロパティ総数 */
+		pk_itr->got_ct = 0;		/* 今のブロックで、読み取った数 */
+
+		/* 次ブロックのプロパティ数を読み取る */
 		a_rd_len = 0;
 		a_ret = _ecn_fbs_get_data(a_fbs_id, &a_ecn_prp.pdc, 1, &a_rd_len);
@@ -644,11 +568,11 @@
 			goto lb_except;
 		if (0 < a_rd_len) {
-			pk_itr->count = a_ecn_prp.pdc;	/* ä»ã®ãã­ãã¯ã§ã®ãã­ããã£ç·æ° */
+			pk_itr->count = a_ecn_prp.pdc;	/* 今のブロックでのプロパティ総数 */
 		}
-		a_ret = E_BOVR;	/* ãã¼ã¿çµäº */
+		a_ret = E_BOVR;	/* データ終了 */
 		goto lb_finally;
 	}
 
-	/* ãã­ããã£ã³ã¼ãã¨ãã¼ã¿ãµã¤ãºãèª­ã¿åã */
+	/* プロパティコードとデータサイズを読み取る */
 	memset(&a_ecn_prp, 0, sizeof(a_ecn_prp));
 	a_rd_len = 0;
@@ -658,6 +582,6 @@
 	if (a_rd_len < sizeof(a_ecn_prp)) {
 		ECN_DBG_PUT_1("ecn_itr_nxt() ecn_prp read fault. rd.cur=%d", pk_itr->cur);
-		pk_itr->is_eof = 1;			/* çµç«¯ã«éããæãé0 */
-		a_ret = E_BOVR;	/* ãã¼ã¿çµäº */
+		pk_itr->is_eof = 1;			/* 終端に達した時、非0 */
+		a_ret = E_BOVR;	/* データ終了 */
 		goto lb_finally;
 	}
@@ -672,5 +596,5 @@
 		}
 		else {
-			/* ä»éãã¼ã¿ãèª­ã¿åã */
+			/* 付随データを読み取る */
 			a_rd_len = 0;
 			a_ret = _ecn_fbs_get_data(a_fbs_id, p_edt, a_ecn_prp.pdc, &a_rd_len);
@@ -680,6 +604,6 @@
 				ECN_DBG_PUT_3("ecn_itr_nxt() edt read fault. rd.cur=%d,epc=0x%02X,pdc=%u",
 					pk_itr->cur, a_ecn_prp.epc , a_ecn_prp.pdc);
-				pk_itr->is_eof = 1;			/* çµç«¯ã«éããæãé0 */
-				a_ret = E_BOVR;	/* ãã¼ã¿çµäº */
+				pk_itr->is_eof = 1;			/* 終端に達した時、非0 */
+				a_ret = E_BOVR;	/* データ終了 */
 				goto lb_finally;
 			}
@@ -693,10 +617,9 @@
 
 lb_finally:
-	/* ã¤ãã¬ã¼ã¿ã®ã«ã¼ã½ã«ä½ç½®ãæ´æ° */
+	/* イテレータのカーソル位置を更新 */
 	pk_itr->cur = a_fbs_id.ptr->hdr.rd;
 
 lb_except:
-	/* å
-ã®ã«ã¼ã½ã«ä½ç½®ã«æ»ã */
+	/* 元のカーソル位置に戻す */
 	a_fbs_id.ptr->hdr.rd = a_rd_bak;
 	return a_ret;
@@ -704,19 +627,17 @@
 
 /*
- * å¿ç­é»æå¾
-ã¡ã®å²ãè¾¼ã¿éä¿¡
+ * 応答電文待ちの割り込み送信
  */
 ER ecn_brk_wai(const void *p_dat, int fa_datsz)
 {
 	ER				a_ret;
-	ECN_FBS_ID		a_fbs_id = { 0 };	/* è¦æ±é»æç¨ã¡ã¢ãª	*/
-
-	/* å¿ç­é»æå¾
-ã¡ã®å²ãè¾¼ã¿é»æä½æ */
+	ECN_FBS_ID		a_fbs_id = { 0 };	/* 要求電文用メモリ	*/
+
+	/* 応答電文待ちの割り込み電文作成 */
 	a_ret = _ecn_mk_brk_wai(&a_fbs_id, p_dat, fa_datsz);
 	if (a_ret)
 		return a_ret;
 
-	/* å²ãè¾¼ã¿éä¿¡ */
+	/* 割り込み送信 */
 	a_ret = _ecn_tsk_snd_dtq(a_fbs_id, true);
 	if (a_ret) {
@@ -725,9 +646,9 @@
 	}
 
-	/* æ­£å¸¸çµäº */
+	/* 正常終了 */
 	return a_ret;
 
 lb_except:
-	/* ãã¼ã¿ä½æå¤±æãããé åè§£æ¾ */
+	/* データ作成失敗したら領域解放 */
 	if (a_fbs_id.ptr)
 		_ecn_fbs_del(a_fbs_id);
@@ -737,5 +658,5 @@
 
 /*
- * å²ãè¾¼ã¿ãã¼ã¿ã®åå¾
+ * 割り込みデータの取得
  */
 ER ecn_get_brk_dat(T_EDATA *pk_esv, void *p_buf, int fa_bufsz, int *p_datsz)
@@ -757,6 +678,5 @@
 	}
 
-	/* èª­ã¿åãä½ç½®ãå
-é ­ã«æ»ã */
+	/* 読み取り位置を先頭に戻す */
 	a_ret = _ecn_fbs_set_rpos(a_fbs, 0);
 	if (a_ret) {
@@ -766,5 +686,5 @@
 	}
 
-	/* ä»éãã¼ã¿ãèª­ã¿è¾¼ã */
+	/* 付随データを読み込む */
 	if (p_buf && 0 < fa_bufsz) {
 		a_len = 0;
@@ -783,5 +703,5 @@
 #ifndef ECN_USER_DATA_PROP_SET
 /*
- * ãã¼ã¿è¨­å®é¢æ°
+ * データ設定関数
  */
 int ecn_data_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno)
@@ -801,5 +721,5 @@
 #ifndef ECN_USER_DATA_PROP_GET
 /*
- * ãã¼ã¿åå¾é¢æ°
+ * データ取得関数
  */
 int ecn_data_prop_get(const EPRPINIB *item, void *dst, int size)
Index: azure_iot_hub/trunk/ntshell/echonet/echonet.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -68,27 +53,26 @@
 
 #define EOBJ_NULL 0x00
-#define EOBJ_LOCAL_NODE 0x01			/* èªãã¼ã */
-#define EOBJ_SYNC_REMOTE_NODE 0x02		/* ä»ãã¼ã */
-#define EOBJ_ASYNC_REMOTE_NODE 0x04		/* ä»ãã¼ãï¼éåæï¼ */
-#define EOBJ_DEVICE 0x08				/* æ©å¨ãªãã¸ã§ã¯ã */
+#define EOBJ_LOCAL_NODE 0x01			/* 自ノード */
+#define EOBJ_SYNC_REMOTE_NODE 0x02		/* 他ノード */
+#define EOBJ_ASYNC_REMOTE_NODE 0x04		/* 他ノード（非同期） */
+#define EOBJ_DEVICE 0x08				/* 機器オブジェクト */
 
 #define EPC_NONE 0x00
-#define EPC_RULE_SET 0x01				/* ã¢ã¯ã»ã¹ã«ã¼ã« Set */
-#define EPC_RULE_GET 0x02				/* ã¢ã¯ã»ã¹ã«ã¼ã« Get */
-#define EPC_RULE_ANNO 0x04				/* ã¢ã¯ã»ã¹ã«ã¼ã« Anno */
-#define EPC_ANNOUNCE 0x40				/* ç¶æ
-å¤åæéç¥ */
-#define EPC_VARIABLE 0x80				/* å¯å¤é·ãã¼ã¿ */
+#define EPC_RULE_SET 0x01				/* アクセスルール Set */
+#define EPC_RULE_GET 0x02				/* アクセスルール Get */
+#define EPC_RULE_ANNO 0x04				/* アクセスルール Anno */
+#define EPC_ANNOUNCE 0x40				/* 状態変化時通知 */
+#define EPC_VARIABLE 0x80				/* 可変長データ */
 
 typedef enum _echonet_enod_id
 {
-	ENOD_NOT_MATCH_ID	= -1,			/* ã¢ãã¬ã¹IDç»é²ãªã */
-	ENOD_MULTICAST_ID	= 0,			/* ãã«ãã­ã£ã¹ãã¢ãã¬ã¹ID */
-	ENOD_LOCAL_ID		= 1,			/* èªãã¼ãã¢ãã¬ã¹ID */
-	ENOD_API_ID			= 2,			/* APIã¢ãã¬ã¹ID */
-	ENOD_REMOTE_ID		= 3,			/* ä»ãã¼ãã¢ãã¬ã¹ID */
+	ENOD_NOT_MATCH_ID	= -1,			/* アドレスID登録なし */
+	ENOD_MULTICAST_ID	= 0,			/* マルチキャストアドレスID */
+	ENOD_LOCAL_ID		= 1,			/* 自ノードアドレスID */
+	ENOD_API_ID			= 2,			/* APIアドレスID */
+	ENOD_REMOTE_ID		= 3,			/* 他ノードアドレスID */
 } ECN_ENOD_ID;
 
-/* ECHONET Liteè¦æ ¼ */
+/* ECHONET Lite規格 */
 typedef enum
 {
@@ -96,78 +80,76 @@
 } ECN_EHD1_ECL_VERSION;
 
-/* é»æå½¢å¼1/2 */
+/* 電文形式1/2 */
 typedef enum
 {
-	ECN_EDH2_FORMAT_1 = 0x81,	/* é»æå½¢å¼1 */
-	ECN_EDH2_FORMAT_2 = 0x82	/* é»æå½¢å¼2 */
+	ECN_EDH2_FORMAT_1 = 0x81,	/* 電文形式1 */
+	ECN_EDH2_FORMAT_2 = 0x82	/* 電文形式2 */
 } ECN_EHD2_FORMAT;
 
-/* ECHONET Liteãµã¼ãã¹ã³ã¼ã */
+/* ECHONET Liteサービスコード */
 typedef enum _echonet_service_code
 {
-	ESV_NOP				=	0,		/* (æ©è½æå®ãªã)							*/
-	ESV_SET_I			=	0x60,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼		*/
-	ESV_SET_C			=	0x61,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼		*/
-	ESV_GET				=	0x62,	/* ãã­ããã£å¤èª­ã¿åºãè¦æ±					*/
-	ESV_INF_REQ			=	0x63,	/* ãã­ããã£å¤éç¥è¦æ±						*/
-	ESV_SET_GET			=	0x6E,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±		*/
-	ESV_SET_RES			=	0x71,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿å¿ç­					*/
-	ESV_GET_RES			=	0x72,	/* ãã­ããã£å¤èª­ã¿åºãå¿ç­					*/
-	ESV_INF				=	0x73,	/* ãã­ããã£å¤éç¥							*/
-	ESV_INFC			=	0x74,	/* ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼				*/
-	ESV_INFC_RES		=	0x7A,	/* ãã­ããã£å¤éç¥å¿ç­						*/
-	ESV_SET_GET_RES		=	0x7E,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãå¿ç­		*/
-	ESV_SET_I_SNA		=	0x50,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç­			*/
-	ESV_SET_C_SNA		=	0x51,	/* ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç­			*/
-	ESV_GET_SNA			=	0x52,	/* ãã­ããã£å¤èª­ã¿åºãä¸å¯å¿ç­				*/
-	ESV_INF_SNA			=	0x53,	/* ãã­ããã£å¤éç¥ä¸å¯å¿ç­					*/
-	ESV_SET_GET_SNA		=	0x5E	/* ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãä¸å¯å¿ç­	*/
+	ESV_NOP				=	0,		/* (機能指定なし)							*/
+	ESV_SET_I			=	0x60,	/* プロパティ値書き込み要求（応答不要）		*/
+	ESV_SET_C			=	0x61,	/* プロパティ値書き込み要求（応答要）		*/
+	ESV_GET				=	0x62,	/* プロパティ値読み出し要求					*/
+	ESV_INF_REQ			=	0x63,	/* プロパティ値通知要求						*/
+	ESV_SET_GET			=	0x6E,	/* プロパティ値書き込み・読み出し要求		*/
+	ESV_SET_RES			=	0x71,	/* プロパティ値書き込み応答					*/
+	ESV_GET_RES			=	0x72,	/* プロパティ値読み出し応答					*/
+	ESV_INF				=	0x73,	/* プロパティ値通知							*/
+	ESV_INFC			=	0x74,	/* プロパティ値通知（応答要）				*/
+	ESV_INFC_RES		=	0x7A,	/* プロパティ値通知応答						*/
+	ESV_SET_GET_RES		=	0x7E,	/* プロパティ値書き込み・読み出し応答		*/
+	ESV_SET_I_SNA		=	0x50,	/* プロパティ値書き込み要求不可応答			*/
+	ESV_SET_C_SNA		=	0x51,	/* プロパティ値書き込み要求不可応答			*/
+	ESV_GET_SNA			=	0x52,	/* プロパティ値読み出し不可応答				*/
+	ESV_INF_SNA			=	0x53,	/* プロパティ値通知不可応答					*/
+	ESV_SET_GET_SNA		=	0x5E	/* プロパティ値書き込み・読み出し不可応答	*/
 } ECN_SRV_CODE;
 
 /*
- *  ECHONET Liteé»æãããã¼
+ *  ECHONET Lite電文ヘッダー
  */
 typedef struct
 {
-	uint8_t	ehd1;		/* ECHONET Liteé»æãããã¼1 ECN_EHD1_ECL_VERSION */
-	uint8_t	ehd2;		/* ECHONET Liteé»æãããã¼2 ECN_EHD2_FORMAT */
-	uint16_t	tid;	/* ãã©ã³ã¶ã¯ã·ã§ã³ID */
+	uint8_t	ehd1;		/* ECHONET Lite電文ヘッダー1 ECN_EHD1_ECL_VERSION */
+	uint8_t	ehd2;		/* ECHONET Lite電文ヘッダー2 ECN_EHD2_FORMAT */
+	uint16_t	tid;	/* トランザクションID */
 } __attribute__((packed)) T_ECN_HDR;
 
 /*
- *  ECHONET Liteãªãã¸ã§ã¯ãã³ã¼ã
+ *  ECHONET Liteオブジェクトコード
  */
 typedef struct
 {
-	uint8_t	eojx1;		/* ã¯ã©ã¹ã°ã«ã¼ãã³ã¼ã */
-	uint8_t	eojx2;		/* ã¯ã©ã¹ã³ã¼ã */
-	uint8_t	eojx3;		/* ã¤ã³ã¹ã¿ã³ã¹ã³ã¼ã */
+	uint8_t	eojx1;		/* クラスグループコード */
+	uint8_t	eojx2;		/* クラスコード */
+	uint8_t	eojx3;		/* インスタンスコード */
 } __attribute__((packed)) T_ECN_EOJ;
 
 /*
- *  ECHONET Liteãã¼ã¿ãããã¼
+ *  ECHONET Liteデータヘッダー
  */
 typedef struct
 {
-	T_ECN_EOJ	seoj;	/* éä¿¡å
-ECHONET Liteãªãã¸ã§ã¯ãæå® */
-	T_ECN_EOJ	deoj;	/* ç¸æå
-ECHONET Liteãªãã¸ã§ã¯ãæå® */
-	uint8_t	esv;		/* ECHONET Liteãµã¼ãã¹ (ECN_SRV_CODE) */
-	uint8_t	opc;		/* å¦çãã­ããã£æ° */
+	T_ECN_EOJ	seoj;	/* 送信元ECHONET Liteオブジェクト指定 */
+	T_ECN_EOJ	deoj;	/* 相手先ECHONET Liteオブジェクト指定 */
+	uint8_t	esv;		/* ECHONET Liteサービス (ECN_SRV_CODE) */
+	uint8_t	opc;		/* 処理プロパティ数 */
 } __attribute__((packed)) T_ECN_EDATA_BODY;
 
 /*
- *  ECHONET Liteãã­ããã£
+ *  ECHONET Liteプロパティ
  */
 typedef struct
 {
-	uint8_t	epc;		/* ECHONET Liteãã­ããã£ã³ã¼ã */
-	uint8_t	pdc;		/* EDTã®ãã¤ãæ° */
-	/*void	*p_edt;*/	/* ãã­ããã£å¤ãã¼ã¿ */
+	uint8_t	epc;		/* ECHONET Liteプロパティコード */
+	uint8_t	pdc;		/* EDTのバイト数 */
+	/*void	*p_edt;*/	/* プロパティ値データ */
 } __attribute__((packed)) T_ECN_PRP;
 
 /*
- *  ECHONET Liteãã¼ã¿
+ *  ECHONET Liteデータ
  */
 typedef struct
@@ -179,5 +161,5 @@
 
 /*
- *  ECHONET Lite é»æ
+ *  ECHONET Lite 電文
  */
 typedef struct echonet_object_data
@@ -189,13 +171,13 @@
 
 /*
- *  å¿ç­é»æè§£æã¤ãã¬ã¼ã¿ã¼
+ *  応答電文解析イテレーター
  */
 typedef struct echonet_epc_enumerator
 {
 	T_EDATA *pk_esv;
-	uint8_t count;			/* ä»èª­ã¿åãä¸­ã®ãã­ãã¯ã«ãããã­ããã£ç·æ° */
-	uint8_t got_ct;			/* ä»èª­ã¿åãä¸­ã®ãã­ãã¯ã§ãèª­ã¿åã£ãæ° */
-	uint8_t next_blk_ct;	/* å¾ç¶ãã­ãã¯æ° */
-	uint8_t is_eof;			/* çµç«¯ã«éããæãé0 */
+	uint8_t count;			/* 今読み取り中のブロックにあるプロパティ総数 */
+	uint8_t got_ct;			/* 今読み取り中のブロックで、読み取った数 */
+	uint8_t next_blk_ct;	/* 後続ブロック数 */
+	uint8_t is_eof;			/* 終端に達した時、非0 */
 	int cur;
 } T_ENUM_EPC;
@@ -204,99 +186,94 @@
 
 /*
- * ECHONET Lite ãã­ããã£ã®è¨­å®é¢æ°
+ * ECHONET Lite プロパティの設定関数
  */
 typedef int (EPRP_SETTER)(const EPRPINIB *item, const void *src, int size, bool_t *anno);
 
 /*
- * ECHONET Lite ãã­ããã£ã®åå¾é¢æ°
+ * ECHONET Lite プロパティの取得関数
  */
 typedef int (EPRP_GETTER)(const EPRPINIB *item, void *dst, int size);
 
 /*
- *  ECHONET Lite ãã­ããã£åæåãã­ãã¯
+ *  ECHONET Lite プロパティ初期化ブロック
  */
 struct echonet_property_initialization_block
 {
-	uint8_t		eprpcd;			/* ECHONET Lite ãã­ããã£ã³ã¼ã */
-	ATR			eprpatr;		/* ECHONET Lite ãã­ããã£å±æ§ */
-	uint8_t		eprpsz;			/* ECHONET Lite ãã­ããã£ã®ãµã¤ãº */
-	intptr_t	exinf;			/* ECHONET Lite ãã­ããã£ã®æ¡å¼µæ
-å ± */
-	EPRP_SETTER	*eprpset;		/* ECHONET Lite ãã­ããã£ã®è¨­å®é¢æ° */
-	EPRP_GETTER	*eprpget;		/* ECHONET Lite ãã­ããã£ã®åå¾é¢æ° */
+	uint8_t		eprpcd;			/* ECHONET Lite プロパティコード */
+	ATR			eprpatr;		/* ECHONET Lite プロパティ属性 */
+	uint8_t		eprpsz;			/* ECHONET Lite プロパティのサイズ */
+	intptr_t	exinf;			/* ECHONET Lite プロパティの拡張情報 */
+	EPRP_SETTER	*eprpset;		/* ECHONET Lite プロパティの設定関数 */
+	EPRP_GETTER	*eprpget;		/* ECHONET Lite プロパティの取得関数 */
 };
 
-#define TMIN_EOBJID		1		/* ECHONET Lite ãªãã¸ã§ã¯ãIDã®æå°å¤ */
-
-/*
- *  ECHONET Lite ãªãã¸ã§ã¯ãåæåãã­ãã¯
+#define TMIN_EOBJID		1		/* ECHONET Lite オブジェクトIDの最小値 */
+
+/*
+ *  ECHONET Lite オブジェクト初期化ブロック
  */
 typedef struct echonet_object_initialization_block
 {
-	ATR			eobjatr;		/* ECHONET Lite ãªãã¸ã§ã¯ãå±æ§ */
-	ID			enodid;			/* ECHONET Lite ãã¼ããã­ãã¡ã¤ã«ãªãã¸ã§ã¯ãID */
-	intptr_t	exinf;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®æ¡å¼µæ
-å ± */
-	uint8_t		eojx1;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®ã¯ã©ã¹ã°ã«ã¼ãã³ã¼ã */
-	uint8_t		eojx2;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®ã¯ã©ã¹ã³ã¼ã */
-	uint8_t		eojx3;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã³ã¼ã */
-	const EPRPINIB *eprp;		/* ECHONET Lite ãã­ããã£åæåãã­ãã¯ */
-	uint_t		eprpcnt;		/* ECHONET Lite ãã­ããã£åæåãã­ãã¯æ° */
+	ATR			eobjatr;		/* ECHONET Lite オブジェクト属性 */
+	ID			enodid;			/* ECHONET Lite ノードプロファイルオブジェクトID */
+	intptr_t	exinf;			/* ECHONET Lite オブジェクトの拡張情報 */
+	uint8_t		eojx1;			/* ECHONET Lite オブジェクトのクラスグループコード */
+	uint8_t		eojx2;			/* ECHONET Lite オブジェクトのクラスコード */
+	uint8_t		eojx3;			/* ECHONET Lite オブジェクトのインスタンスコード */
+	const EPRPINIB *eprp;		/* ECHONET Lite プロパティ初期化ブロック */
+	uint_t		eprpcnt;		/* ECHONET Lite プロパティ初期化ブロック数 */
 } EOBJINIB;
 
 /*
- *  ECHONET Lite ãã¼ãç®¡çãã­ãã¯
+ *  ECHONET Lite ノード管理ブロック
  */
 typedef struct echonet_object_control_block
 {
-	const EOBJINIB *profile;	/* ECHONET Lite ãã¼ããã­ãã¡ã¤ã«ã¸ã®ãã¤ã³ã¿ */
-	const EOBJINIB **eobjs;		/* ECHONET Lite ãªãã¸ã§ã¯ããªã¹ãã¸ã®ãã¤ã³ã¿ */
-	uint_t		eobjcnt;		/* ECHONET Lite ãªãã¸ã§ã¯ãæ° */
+	const EOBJINIB *profile;	/* ECHONET Lite ノードプロファイルへのポインタ */
+	const EOBJINIB **eobjs;		/* ECHONET Lite オブジェクトリストへのポインタ */
+	uint_t		eobjcnt;		/* ECHONET Lite オブジェクト数 */
 } EOBJCB;
 
 /*
- *  ECHONET Lite ãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±ãã­ãã¯ã®å®ç¾©
+ *  ECHONET Lite ノードとIPアドレスの対応情報ブロックの定義
  */
 typedef struct echonet_node_address_block
 {
-	bool_t		inuse;			/* ä½¿ç¨ç¶æ³ */
-	uint8_t		ipaddr[16];		/* IPã¢ãã¬ã¹ */
+	bool_t		inuse;			/* 使用状況 */
+	uint8_t		ipaddr[16];		/* IPアドレス */
 } ENODADRB;
 
 /*
- *  ECHONET Lite ãªãã¸ã§ã¯ãIDã®æå¤§å¤ï¼echonet_cfg.cï¼
+ *  ECHONET Lite オブジェクトIDの最大値（echonet_cfg.c）
  */
 extern const ID	tmax_eobjid;
 
 /*
- *  ECHONET Lite ãªãã¸ã§ã¯ãåæåãã­ãã¯ã®ã¨ãªã¢ï¼echonet_cfg.cï¼
+ *  ECHONET Lite オブジェクト初期化ブロックのエリア（echonet_cfg.c）
  */
 extern const EOBJINIB	eobjinib_table[];
 
 /*
- *  ECHONET Liteãã¼ãç®¡çãã­ãã¯ã®æ°
+ *  ECHONET Liteノード管理ブロックの数
  */
 extern const int tnum_enodid;
 
 /*
- *  ECHONET Lite ãªãã¸ã§ã¯ãç®¡çãã­ãã¯ã®ã¨ãªã¢ï¼echonet_cfg.cï¼
+ *  ECHONET Lite オブジェクト管理ブロックのエリア（echonet_cfg.c）
  */
 extern EOBJCB	eobjcb_table[];
 
 /*
- * ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±ã®æ°
+ * ECHONET LiteノードとIPアドレスの対応情報の数
  */
 extern const int tnum_enodadr;
 
 /*
- *  ECHONET Lite ãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±ãã­ãã¯ã®ã¨ãªã¢ï¼echonet_cfg.cï¼
+ *  ECHONET Lite ノードとIPアドレスの対応情報ブロックのエリア（echonet_cfg.c）
  */
 extern ENODADRB	enodadrb_table[];
 
 /*
- * ECHONET Lite ã«ã¼ãã«ãªãã¸ã§ã¯ãID
+ * ECHONET Lite カーネルオブジェクトID
  */
 extern const ID ecn_svc_taskid;
@@ -311,10 +288,10 @@
 
 /*
- *  ECHONET Lite ãªãã¸ã§ã¯ãç®¡çãã­ãã¯ããECHONET Lite ãªãã¸ã§ã¯ãIDãåãåºãããã®ãã¯ã­
+ *  ECHONET Lite オブジェクト管理ブロックからECHONET Lite オブジェクトIDを取り出すためのマクロ
  */
 #define	EOBJID(p_eobjcb)	((ID)(((p_eobjcb) - eobjcb_table) + TMIN_EOBJID))
 
 /*
- *  ECHONET Lite ãªãã¸ã§ã¯ãæ©è½ã®åæå
+ *  ECHONET Lite オブジェクト機能の初期化
  */
 extern void	initialize_echonet_object(void);
@@ -327,142 +304,135 @@
 
 /*
- * ECHONET Liteãµã¼ãã¹å¦çéå§
+ * ECHONET Liteサービス処理開始
  */
 ER ecn_sta_svc();
 
 /*
- * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡
+ * インスタンスリスト通知の送信
  */
 ER ecn_ntf_inl();
 
 /*
- * ECHONETãªãã¸ã§ã¯ãåç
-§
+ * ECHONETオブジェクト参照
  */
 ER ecn_ref_eobj(ID eobjid, T_REOBJ *pk_eobj);
 
 /*
- * ECHONETãã­ããã£åç
-§
+ * ECHONETプロパティ参照
  */
 ER ecn_ref_eprp(ID eobjid, uint8_t epc, T_RPRP *pk_eprp);
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼é»æä½æ
+ * プロパティ値書き込み要求（応答不要）電文作成
  */
 ER ecn_esv_seti(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼é»æä½æ
+ * プロパティ値書き込み要求（応答要）電文作成
  */
 ER ecn_esv_setc(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
 
 /*
- * ãã­ããã£å¤èª­ã¿åºãè¦æ±é»æä½æ
+ * プロパティ値読み出し要求電文作成
  */
 ER ecn_esv_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
 
 /*
- * ãã­ããã£å¤éç¥è¦æ±é»æä½æ
+ * プロパティ値通知要求電文作成
  */
 ER ecn_esv_inf_req(T_EDATA **ppk_esv, ID eobjid, uint8_t epc);
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æä½æ
+ * プロパティ値書き込み・読み出し要求電文作成
  */
 ER ecn_esv_set_get(T_EDATA **ppk_esv, ID eobjid, uint8_t epc, uint8_t pdc, const void *p_edt);
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»ææãè¿ãæå®
+ * プロパティ値書き込み・読み出し要求電文折り返し指定
  */
 ER ecn_trn_set_get(T_EDATA *pk_esv, int *p_trn_pos);
 
 /*
- * ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±é»æçµäºæå®
+ * プロパティ値書き込み・読み出し要求電文終了指定
  */
 ER ecn_end_set_get(T_EDATA *pk_esv, int trn_pos);
 
 /*
- * ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼é»æä½æ
+ * プロパティ値通知（応答要）電文作成
  */
 ER ecn_esv_infc(T_EDATA **ppk_esv, ID eobjid, ID seobjid, uint8_t sepc);
 
 /*
- * è¦æ±é»æã¸ã®ãã­ããã£æå®è¿½å 
+ * 要求電文へのプロパティ指定追加
  */
 ER ecn_add_epc(T_EDATA *pk_esv, uint8_t epc);
 
 /*
- * è¦æ±é»æã¸ã®ãã­ããã£ãã¼ã¿è¿½å 
+ * 要求電文へのプロパティデータ追加
  */
 ER ecn_add_edt(T_EDATA *pk_esv, uint8_t epc, uint8_t pdc, const void *p_edt);
 
 /*
- * è¦æ±é»æã®éä¿¡
+ * 要求電文の送信
  */
 ER ecn_snd_esv(T_EDATA *pk_esv);
 
 /*
- * å¿ç­é»æã®åä¿¡æ°¸é å¾
-ã¡
+ * 応答電文の受信永遠待ち
  */
 ER ecn_rcv_esv(T_EDATA **ppk_esv);
 
 /*
- * å¿ç­é»æã®åä¿¡å¾
-ã¡ã¿ã¤ã ã¢ã¦ããã
+ * 応答電文の受信待ちタイムアウトあり
  */
 ER ecn_trcv_esv(T_EDATA **ppk_esv, int tmout);
 
 /*
- * å¿ç­é»æã®åä¿¡ãã¼ãªã³ã°
+ * 応答電文の受信ポーリング
  */
 ER ecn_prcv_esv(T_EDATA **ppk_esv);
 
 /*
- * å¿ç­é»æã®ç ´æ£
+ * 応答電文の破棄
  */
 ER ecn_rel_esv(T_EDATA *pk_esv);
 
 /*
- * å¿ç­é»æã®éä¿¡å
-ãã¼ããåå¾ãã
+ * 応答電文の送信元ノードを取得する
  */
 ID ecn_get_enod(T_EDATA *pk_esv);
 
 /*
- * å¿ç­é»æã®éä¿¡å
-æ©å¨ãªãã¸ã§ã¯ããåå¾ãã
+ * 応答電文の送信元機器オブジェクトを取得する
  */
 ID ecn_get_eobj(T_EDATA *pk_esv);
 
 /*
- * å¿ç­é»æè§£æã¤ãã¬ã¼ã¿ã¼åæå
+ * 応答電文解析イテレーター初期化
  */
 ER ecn_itr_ini(T_ENUM_EPC *pk_itr, T_EDATA *pk_esv);
 
 /*
- * å¿ç­é»æè§£æã¤ãã¬ã¼ã¿ã¼ã¤ã³ã¯ãªã¡ã³ã
+ * 応答電文解析イテレーターインクリメント
  */
 ER ecn_itr_nxt(T_ENUM_EPC *pk_itr, uint8_t *p_epc, uint8_t *p_pdc, void *p_edt);
 
 /*
- * å¿ç­é»æå¾
-ã¡ã®å²ãè¾¼ã¿éä¿¡
+ * 応答電文待ちの割り込み送信
  */
 ER ecn_brk_wai(const void *p_dat, int datsz);
 
 /*
- * å²ãè¾¼ã¿ãã¼ã¿ã®åå¾
+ * 割り込みデータの取得
  */
 ER ecn_get_brk_dat(T_EDATA *pk_esv, void *p_buf, int bufsz, int *p_datsz);
 
 /*
- * ãã¼ã¿è¨­å®é¢æ°
+ * データ設定関数
  */
 int ecn_data_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno);
 
 /*
- * ãã¼ã¿åå¾é¢æ°
+ * データ取得関数
  */
 int ecn_data_prop_get(const EPRPINIB *item, void *dst, int size);
Index: azure_iot_hub/trunk/ntshell/echonet/echonet.trb
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet.trb	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet.trb	(revision 389)
@@ -5,47 +5,32 @@
 #  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
-# 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
+# 
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  @(#) $Id$
@@ -54,5 +39,5 @@
 
 # =====================================================================
-# echonet_cfg.hã®çæ
+# echonet_cfg.hの生成
 # =====================================================================
 
@@ -66,5 +51,5 @@
 EOS
 
-# ãã¼ããªã¹ãã®ä½æ
+# ノードリストの作成
 $ENOD_LIST = []
 $LOCAL_NODE = []
@@ -72,8 +57,8 @@
 
 $cfgData[:ECN_CRE_EOBJ].sort.each do |key, params|
-	# ãã¼ããã­ãã¡ã¤ã«ãªãã¸ã§ã¯ãã®å ´å
+	# ノードプロファイルオブジェクトの場合
 	if (params[:eobjatr] & $EOBJ_LOCAL_NODE) != 0
 		$LOCAL_NODE << key
-	# æ©å¨ãªãã¸ã§ã¯ãã®å ´å
+	# 機器オブジェクトの場合
 	elsif (params[:eobjatr] & ($EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
 		$REMOTE_NODE << key
@@ -81,5 +66,5 @@
 end
 
-# ã­ã¼ã«ã«ã®ãã¼ããã­ãã¡ã¤ã«ã¯ï¼ã¤ã ã
+# ローカルのノードプロファイルは１つだけ
 if $LOCAL_NODE.length != 1
 	error_exit("Local node must be only one.")
@@ -100,5 +85,5 @@
 	eprp_list = []
 	prp_map_cnt = 3
-	# ãã¼ããã­ãã¡ã¤ã«ã®å ´å
+	# ノードプロファイルの場合
 	if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
 		prp_map_cnt = prp_map_cnt + 5
@@ -114,5 +99,5 @@
 		end
 
-		# ãã¼ããã­ãã¡ã¤ã«ã®å ´å
+		# ノードプロファイルの場合
 		if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
 			if (params2[:eprpcd] >= 0xD3) && (params2[:eprpcd] <= 0xD7)
@@ -149,5 +134,5 @@
 
 # =====================================================================
-# echonet_cfg.cã®çæ
+# echonet_cfg.cの生成
 # =====================================================================
 
@@ -161,5 +146,5 @@
 
 # 
-#  ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼
+#  インクルードディレクティブ（#include）
 # 
 $echonetCfgC.add(<<EOS)
@@ -178,5 +163,5 @@
 
 # 
-#  ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°
+#  オブジェクトのID番号を保持する変数
 # 
 if $USE_EXTERNAL_ID
@@ -191,5 +176,5 @@
 
 # 
-#  ECHONET Liteãã­ããã£
+#  ECHONET Liteプロパティ
 # 
 $echonetCfgC.add(<<EOS)
@@ -201,5 +186,5 @@
 IncludeTrb("echonet_chk.trb")
 
-# ECHONET Liteãã­ããã£åæåãã­ãã¯ã®çæ
+# ECHONET Liteプロパティ初期化ブロックの生成
 if $cfgData[:ECN_CRE_EOBJ].length > 0 && $cfgData[:ECN_DEF_EPRP].length > 0
 	$ENOD_LIST.each do |enodid|
@@ -225,5 +210,5 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * ã¤ã³ã¹ã¿ã³ã¹æ°")
+		$echonetCfgC.add(" * インスタンス数")
 		$echonetCfgC.add(" */")
 		inst_list_len = $INST_LIST.length
@@ -233,7 +218,7 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * ã¯ã©ã¹æ°")
-		$echonetCfgC.add(" */")
-		# ãã¼ããã­ãã¡ã¤ã«ãå«ããï¼ + 1ï¼
+		$echonetCfgC.add(" * クラス数")
+		$echonetCfgC.add(" */")
+		# ノードプロファイルも含める（ + 1）
 		class_list_len = $CLASS_LIST.length + 1
 		$echonetCfgC.add("const uint8_t _echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_class_count[] = {")
@@ -242,5 +227,5 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ã")
+		$echonetCfgC.add(" * インスタンスリスト")
 		$echonetCfgC.add(" */")
 		pos = 0
@@ -262,5 +247,5 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * ã¯ã©ã¹ãªã¹ã")
+		$echonetCfgC.add(" * クラスリスト")
 		$echonetCfgC.add(" */")
 		pos = 0
@@ -296,10 +281,10 @@
 			get_map[i] = 0x00
 		end
-		# 0x9Dã0x9Eã0x9Fã¯ONã«ãã¦ãã
+		# 0x9D、0x9E、0x9FはONにしておく
 		for i in 13..15 do
 			anno_map[i] = anno_map[i] | 0x02
 			get_map[i] = get_map[i] | 0x02
 		end
-		# ãã¼ããã­ãã¡ã¤ã«ã®å ´å
+		# ノードプロファイルの場合
 		if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
 			anno_map[5] = anno_map[5] | 0x20
@@ -313,20 +298,20 @@
 		$cfgData[:ECN_DEF_EPRP].each do |key2, params2|
 			if params2[:eobjid] == params[:eobjid].str
-				# (0x80 <= eprpcd && eprpcd <= 0xFF)ã§ãªãå ´åï¼E_PARï¼
+				# (0x80 <= eprpcd && eprpcd <= 0xFF)でない場合（E_PAR）
 				if !(0x80 <= params2[:eprpcd] && params2[:eprpcd] <= 0xFF)
 					error_illegal_sym("E_PAR", params2, :eprpcd, :eprpno)
 				end
 
-				# eprpatrãï¼ï¼»EPC_RULE_SET] | [EPC_RULE_GET] | [EPC_RULE_ANNO] | [EPC_ANNOUNCEï¼½| [EPC_VARIABLE]ï¼ã§ãªãå ´åï¼E_RSATRï¼
+				# eprpatrが（［EPC_RULE_SET] | [EPC_RULE_GET] | [EPC_RULE_ANNO] | [EPC_ANNOUNCE］| [EPC_VARIABLE]）でない場合（E_RSATR）
 				if (params2[:eprpatr] & ~($EPC_RULE_SET | $EPC_RULE_GET | $EPC_RULE_ANNO | $EPC_ANNOUNCE | $EPC_VARIABLE)) != 0
 					error_illegal_sym("E_RSATR", params2, :eprpatr, :eprpno)
 				end
 
-				# (0 <= eprpsz && eprpsz <= 255)ã§ãªãå ´åï¼E_PARï¼
+				# (0 <= eprpsz && eprpsz <= 255)でない場合（E_PAR）
 				if !(0 <= params2[:eprpsz] && params2[:eprpsz] <= 255)
 					error_illegal_sym("E_PAR", params2, :eprpsz, :eprpno)
 				end
 
-				# ãã­ããã£ãããã«è¨­å®
+				# プロパティマップに設定
 				pos = params2[:eprpcd] & 0xF
 				bit = (params2[:eprpcd] >> 4) - 8
@@ -348,6 +333,5 @@
 		end
 
-		# å¿
-é ã¢ãã¦ã³ã¹ãã­ããã£ãããããã§ãã¯
+		# 必須アナウンスプロパティがあるかチェック
 		must_anno_map = getPropertyInfo(params[:eojx1], params[:eojx2], $EPC_ANNOUNCE)
 		i = 0
@@ -359,6 +343,5 @@
 		end
 
-		# å¿
-é SETãã­ããã£ãããããã§ãã¯
+		# 必須SETプロパティがあるかチェック
 		must_set_map = getPropertyInfo(params[:eojx1], params[:eojx2], $EPC_RULE_SET)
 		i = 0
@@ -370,6 +353,5 @@
 		end
 
-		# å¿
-é GETãã­ããã£ãããããã§ãã¯
+		# 必須GETプロパティがあるかチェック
 		must_get_map = getPropertyInfo(params[:eojx1], params[:eojx2], $EPC_RULE_GET)
 		i = 0
@@ -382,5 +364,5 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * ã¢ãã¦ã³ã¹ãã­ããã£ããã")
+		$echonetCfgC.add(" * アナウンスプロパティマップ")
 		$echonetCfgC.add(" */")
 		anno_list = anno_list.sort
@@ -406,5 +388,5 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * SETãã­ããã£ããã")
+		$echonetCfgC.add(" * SETプロパティマップ")
 		$echonetCfgC.add(" */")
 		set_list = set_list.sort
@@ -430,5 +412,5 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * GETãã­ããã£ããã")
+		$echonetCfgC.add(" * GETプロパティマップ")
 		$echonetCfgC.add(" */")
 		get_list = get_list.sort
@@ -454,30 +436,29 @@
 
 		$echonetCfgC.add("/*")
-		$echonetCfgC.add(" * ãã­ããã£å®ç¾©")
+		$echonetCfgC.add(" * プロパティ定義")
 		$echonetCfgC.add(" */")
 		$echonetCfgC.add("const EPRPINIB _echonet_#{params[:eobjid]}_eprpinib_table[TNUM_#{params[:eobjid]}_EPRPNO] = {")
 		eprp_list.each do |eprpno|
-			# ECHONET Liteãã­ããã£åæåãã­ãã¯
+			# ECHONET Liteプロパティ初期化ブロック
 			$echonetCfgC.add("	{ (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpcd]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpatr]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpsz]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:exinf]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpset]}), (#{$cfgData[:ECN_DEF_EPRP][eprpno][:eprpget]}) },")
 		end
-		# ç¶æ
-ã¢ãã¦ã³ã¹ãã­ããã£ããã
+		# 状態アナウンスプロパティマップ
 		$echonetCfgC.add("	{ (0x9D), (EPC_RULE_GET), #{sprintf("0x%1$x", anno_len)}, (intptr_t)_echonet_#{params[:eobjid]}_anno_prpmap, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
-		# Setãã­ããã£ããã
+		# Setプロパティマップ
 		$echonetCfgC.add("	{ (0x9E), (EPC_RULE_GET), #{sprintf("0x%1$x", set_len)}, (intptr_t)_echonet_#{params[:eobjid]}_set_prpmap, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
-		# Getãã­ããã£ããã
+		# Getプロパティマップ
 		$echonetCfgC.append("	{ (0x9F), (EPC_RULE_GET), #{sprintf("0x%1$x", get_len)}, (intptr_t)_echonet_#{params[:eobjid]}_get_prpmap, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) }")
-		# ãã¼ããã­ãã¡ã¤ã«ã®å ´å
+		# ノードプロファイルの場合
 		if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
 			$echonetCfgC.add(",")
-			# ã¤ã³ã¹ã¿ã³ã¹æ°
+			# インスタンス数
 			$echonetCfgC.add("	{ (0xD3), (EPC_RULE_GET), (3), (intptr_t)_echonet_#{params[:eobjid]}_inst_count, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
-			# ã¯ã©ã¹æ°
+			# クラス数
 			$echonetCfgC.add("	{ (0xD4), (EPC_RULE_GET), (2), (intptr_t)_echonet_#{params[:eobjid]}_class_count, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
-			# ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥
+			# インスタンスリスト通知
 			$echonetCfgC.add("	{ (0xD5), (EPC_RULE_ANNO), sizeof(_echonet_#{params[:eobjid]}_inst_list), (intptr_t)_echonet_#{params[:eobjid]}_inst_list, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
-			# ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãS
+			# インスタンスリストS
 			$echonetCfgC.add("	{ (0xD6), (EPC_RULE_GET), sizeof(_echonet_#{params[:eobjid]}_inst_list), (intptr_t)_echonet_#{params[:eobjid]}_inst_list, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) },")
-			# ã¯ã©ã¹ãªã¹ãS
+			# クラスリストS
 			$echonetCfgC.add("	{ (0xD7), (EPC_RULE_GET), sizeof(_echonet_#{params[:eobjid]}_class_list), (intptr_t)_echonet_#{params[:eobjid]}_class_list, ((EPRP_SETTER *)NULL), ((EPRP_GETTER *)ecn_data_prop_get) }")
 		else
@@ -492,5 +473,5 @@
 
 # 
-#  ECHONET Liteãªãã¸ã§ã¯ã
+#  ECHONET Liteオブジェクト
 # 
 $echonetCfgC.add("/*")
@@ -499,57 +480,57 @@
 $echonetCfgC.add
 
-# ECHONET Liteãªãã¸ã§ã¯ãIDçªå·ã®æå¤§å¤
+# ECHONET LiteオブジェクトID番号の最大値
 $echonetCfgC.add("const ID _echonet_tmax_eobjid = (TMIN_EOBJID + TNUM_EOBJID - 1);")
 $echonetCfgC.add
 
-# ECHONET Liteãªãã¸ã§ã¯ãåæåãã­ãã¯ã®çæ
+# ECHONET Liteオブジェクト初期化ブロックの生成
 if $cfgData[:ECN_CRE_EOBJ].length > 0
 	$echonetCfgC.add("const EOBJINIB _echonet_eobjinib_table[TNUM_EOBJID] = {")
 	$cfgData[:ECN_CRE_EOBJ].each_with_index do |(key, params), index|
 		$echonetCfgC.add(",") if index > 0
-		# eobjatrãï¼ï¼»EOBJ_LOCAL_NODE] | [EOBJ_SYNC_REMOTE_NODE] | [EOBJ_ASYNC_REMOTE_NODE] | [EOBJ_DEVICEï¼½ï¼ã§ãªãå ´åï¼E_RSATRï¼
+		# eobjatrが（［EOBJ_LOCAL_NODE] | [EOBJ_SYNC_REMOTE_NODE] | [EOBJ_ASYNC_REMOTE_NODE] | [EOBJ_DEVICE］）でない場合（E_RSATR）
 		if (params[:eobjatr] & ~($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE | $EOBJ_DEVICE)) != 0
 			error_illegal_sym("E_RSATR", params, :eobjatr, :eobjid)
 		end
 
-		# ãã¼ããã­ãã¡ã¤ã«ãªãã¸ã§ã¯ãã®å ´å
+		# ノードプロファイルオブジェクトの場合
 		if (params[:eobjatr] & ($EOBJ_LOCAL_NODE | $EOBJ_SYNC_REMOTE_NODE | $EOBJ_ASYNC_REMOTE_NODE)) != 0
-			# (enodid == EOBJ_NULL)ã§ãªãå ´åï¼E_PARï¼
+			# (enodid == EOBJ_NULL)でない場合（E_PAR）
 			if params[:enodid] != "EOBJ_NULL"
 				error_illegal_sym("E_PAR", params, :enodid, :eobjid)
 			end
 
-			# (eojx1 == EOJ_X1_PROFILE)ã§ãªãå ´åï¼E_PARï¼
+			# (eojx1 == EOJ_X1_PROFILE)でない場合（E_PAR）
 			if params[:eojx1] != $EOJ_X1_PROFILE
 				error_illegal_sym("E_PAR", params, :eojx1, :eobjid)
 			end
 
-			# (eojx2 == EOJ_X2_NODE_PROFILE)ã§ãªãå ´åï¼E_PARï¼
+			# (eojx2 == EOJ_X2_NODE_PROFILE)でない場合（E_PAR）
 			if params[:eojx2] != $EOJ_X2_NODE_PROFILE
 				error_illegal_sym("E_PAR", params, :eojx2, :eobjid)
 			end
 
-			# (1 <= eojx3 && eojx3 <= 2)ã§ãªãå ´åï¼E_PARï¼
+			# (1 <= eojx3 && eojx3 <= 2)でない場合（E_PAR）
 			if !(1 <= params[:eojx3] && params[:eojx3] <= 2)
 				error_illegal_sym("E_PAR", params, :eojx3, :eobjid)
 			end
-		# æ©å¨ãªãã¸ã§ã¯ãã®å ´å
-		else
-			# (enodid != EOBJ_NULL)ã§ãªãå ´åï¼E_PARï¼
+		# 機器オブジェクトの場合
+		else
+			# (enodid != EOBJ_NULL)でない場合（E_PAR）
 			if params[:enodid] == "EOBJ_NULL"
 				error_illegal_sym("E_PAR", params, :enodid, :eobjid)
 			end
 
-			# (0 <= eojx1 && eojx1 <= 255)ã§ãªãå ´åï¼E_PARï¼
+			# (0 <= eojx1 && eojx1 <= 255)でない場合（E_PAR）
 			if !(0 <= params[:eojx1] && params[:eojx1] <= 255)
 				error_illegal_sym("E_PAR", params, :eojx1, :eobjid)
 			end
 
-			# (0 <= eojx2 && eojx2 <= 255)ã§ãªãå ´åï¼E_PARï¼
+			# (0 <= eojx2 && eojx2 <= 255)でない場合（E_PAR）
 			if !(0 <= params[:eojx2] && params[:eojx2] <= 255)
 				error_illegal_sym("E_PAR", params, :eojx2, :eobjid)
 			end
 
-			# (0 <= eojx3 && eojx3 <= 255)ã§ãªãå ´åï¼E_PARï¼
+			# (0 <= eojx3 && eojx3 <= 255)でない場合（E_PAR）
 			if !(0 <= params[:eojx3] && params[:eojx3] <= 255)
 				error_illegal_sym("E_PAR", params, :eojx3, :eobjid)
@@ -557,5 +538,5 @@
 		end
 
-		# ECHONET Liteãªãã¸ã§ã¯ãåæåãã­ãã¯
+		# ECHONET Liteオブジェクト初期化ブロック
 		$echonetCfgC.append("	{ (#{params[:eobjatr]}), (#{params[:enodid]}), (#{params[:exinf]}), (#{params[:eojx1]}), (#{params[:eojx2]}), (#{params[:eojx3]}), _echonet_#{params[:eobjid]}_eprpinib_table, TNUM_#{params[:eobjid]}_EPRPNO }")
 	end
@@ -567,9 +548,9 @@
 $echonetCfgC.add
 
-# ECHONET Liteãã¼ãç®¡çãã­ãã¯ã®æ°
+# ECHONET Liteノード管理ブロックの数
 $echonetCfgC.add2("const int _echonet_tnum_enodid = TNUM_ENODID;")
 
 # 
-#  ECHONET Liteãã¼ãç®¡çãã­ãã¯
+#  ECHONET Liteノード管理ブロック
 # 
 $echonetCfgC.add("/*")
@@ -577,6 +558,5 @@
 $echonetCfgC.add(" */")
 $echonetCfgC.add
-# ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±ãã­ãã¯ã®çæ
+# ECHONET LiteノードとIPアドレスの対応情報ブロックの生成
 $ENOD_LIST.each do |enodid|
 	eobjid = $cfgData[:ECN_CRE_EOBJ][enodid][:eobjid].str
@@ -588,5 +568,5 @@
 	end
 	$echonetCfgC.add("/*")
-	$echonetCfgC.add(" * ãã¼ãã«æå±ããæ©å¨ãªãã¸ã§ã¯ãã®ä¸è¦§")
+	$echonetCfgC.add(" * ノードに所属する機器オブジェクトの一覧")
 	$echonetCfgC.add(" */")
 	$echonetCfgC.add("const EOBJINIB *_echonet_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_eobjinib_table[TNUM_#{$cfgData[:ECN_CRE_EOBJ][enodid][:eobjid]}_EOBJNO] = {")
@@ -602,5 +582,5 @@
 if $ENOD_LIST.length > 0
 	$echonetCfgC.add("/*")
-	$echonetCfgC.add(" * ECHONET Liteãã¼ãç®¡çãã­ãã¯")
+	$echonetCfgC.add(" * ECHONET Liteノード管理ブロック")
 	$echonetCfgC.add(" */")
 	$echonetCfgC.add("EOBJCB _echonet_eobjcb_table[TNUM_ENODID] = {")
@@ -616,12 +596,10 @@
 $echonetCfgC.add
 
-# ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±ã®æ°
+# ECHONET LiteノードとIPアドレスの対応情報の数
 $echonetCfgC.add("const int _echonet_tnum_enodadr = TNUM_ENODADR;")
 $echonetCfgC.add
 
 # 
-#  ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±
+#  ECHONET LiteノードとIPアドレスの対応情報
 # 
 $echonetCfgC.add("/*")
@@ -630,6 +608,5 @@
 $echonetCfgC.add
 
-# ECHONET Liteãã¼ãã¨IPã¢ãã¬ã¹ã®å¯¾å¿æ
-å ±ãã­ãã¯ã®çæ
+# ECHONET LiteノードとIPアドレスの対応情報ブロックの生成
 if $cfgData[:ECN_CRE_EOBJ].length > 0
 	$echonetCfgC.add("ENODADRB _echonet_enodadrb_table[TNUM_ENODADR] = {")
@@ -652,5 +629,5 @@
 
 #
-# ECHONET Lite ã«ã¼ãã«ãªãã¸ã§ã¯ãID
+# ECHONET Lite カーネルオブジェクトID
 #
 $echonetCfgC.add(<<EOS)
@@ -670,5 +647,5 @@
 
 #
-# ECHONET Lite TINETãªãã¸ã§ã¯ãID
+# ECHONET Lite TINETオブジェクトID
 #
 $echonetCfgC.add2("const ID _echonet_ecn_udp_cepid = ECHONET_UDP_CEPID;")
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_agent.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_agent.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_agent.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2015 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite åççæãã¼ã
+ *		ECHONET Lite 動的生成ノード
  */
 
@@ -194,7 +179,7 @@
 
 /*
- *  ã­ã¥ã¼ã®åæå
+ *  キューの初期化
  *
- *  p_queueã«ã¯ã­ã¥ã¼ããããæå®ããï¼
+ *  p_queueにはキューヘッダを指定する．
  */
 Inline void
@@ -209,11 +194,8 @@
 
 /*
- *  ã­ã¥ã¼ã®åã¨ã³ããªã¸ã®æ¿å
-¥
+ *  キューの前エントリへの挿入
  *
- *  p_queueã®åã«p_entryãæ¿å
-¥ããï¼p_queueã«ã­ã¥ã¼ããããæå®ããå ´
- *  åã«ã¯ï¼ã­ã¥ã¼ã®æ«å°¾ã«p_entryãæ¿å
-¥ãããã¨ã«ãªãï¼
+ *  p_queueの前にp_entryを挿入する．p_queueにキューヘッダを指定した場
+ *  合には，キューの末尾にp_entryを挿入することになる．
  */
 Inline void
@@ -231,7 +213,7 @@
 
 /*
- *  ã¨ã³ããªã®åé¤
+ *  エントリの削除
  *
- *  p_entryãã­ã¥ã¼ããåé¤ããï¼
+ *  p_entryをキューから削除する．
  */
 Inline void
@@ -346,5 +328,5 @@
 	int i = eobjid;
 
-	/* ãªãã¸ã§ã¯ãIDããå®ä½ãåå¾ */
+	/* オブジェクトIDから実体を取得 */
 	i -= (tmax_eobjid + 1);
 	if ((i < 0)
@@ -357,8 +339,8 @@
 		return false;
 
-	/* ãªãã¸ã§ã¯ãã®EOJãã³ãã¼ */
+	/* オブジェクトのEOJをコピー */
 	memcpy(eoj, &buf->obj.inib.eojx1, sizeof(*eoj));
 
-	/* æå±ãããã¼ãã®ãªãã¸ã§ã¯ãIDãåå¾ */
+	/* 所属するノードのオブジェクトIDを取得 */
 	if(buf->obj.inib.enodid == 0)
 		i = buf->obj.eobjId;
@@ -372,5 +354,5 @@
 	}
 
-	/* ãã¼ãIDãåå¾ */
+	/* ノードIDを取得 */
 	buf = &agent->blockes[i];
 	*enodid = buf->node.enodId;
@@ -413,5 +395,5 @@
 	T_ECN_EOJ *eoj, *end;
 
-	// ãã­ããã£éç¥ãåå¾å¿ç­ã§ã
+	// プロパティ通知か取得応答で、
 	switch (esv->hdr.edata.esv) {
 	case ESV_GET_RES:
@@ -423,5 +405,5 @@
 	}
 
-	// ãã¼ããã­ãã¡ã¤ã«å®ã®å ´å
+	// ノードプロファイル宛の場合
 	eoj = &esv->hdr.edata.seoj;
 	if ((eoj->eojx1 != EOJ_X1_PROFILE) || (eoj->eojx2 != EOJ_X2_NODE_PROFILE)
@@ -436,9 +418,9 @@
 	while (ecn_itr_nxt(&enm, &epc, &pdc, &edt) == E_OK) {
 		switch (epc) {
-		// ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®å ´å
+		// インスタンスリスト通知の場合
 		case 0xD5:
-		// èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³éç¥ã®å ´å
+		// 自ノードインスタンスリストＳ通知の場合
 		case 0xD6:
-			// ãµã¤ãºãåããªãå ´å
+			// サイズが合わない場合
 			if (pdc != (1 + edt[0] * sizeof(T_ECN_EOJ)))
 				return NULL;
@@ -736,8 +718,7 @@
 	ecn_obj_t *sobj;
 
-	/* éçã«å®ç¾©ãããéä¿¡å
-ã®å ´å */
+	/* 静的に定義された送信元の場合 */
 	if ((*ppk_snod != NULL) && (*ppk_snod)->eobjs != NULL) {
-		/* å¦çããªã */
+		/* 処理しない */
 		return;
 	}
@@ -745,10 +726,7 @@
 	snod = ecn_agent_find_node2(*ppk_snod);
 
-	/* éä¿¡å
-ãç¥ããªãã£ãã */
+	/* 送信元を知らなかったら */
 	if (snod == NULL) {
-		/* éä¿¡å
-ã®ãã¼ãæ
-å ±ãæ°è¦ã«ä½æ */
+		/* 送信元のノード情報を新規に作成 */
 		snod = ecn_agent_create_node(agent, esv);
 		if (snod == NULL)
@@ -758,10 +736,10 @@
 	sobj = ecn_agent_find_obj2(snod, *ppk_sobj);
 
-	/* ãã¼ããã­ãã¡ã¤ã«ã®å ´å */
+	/* ノードプロファイルの場合 */
 	if ((esv->hdr.edata.seoj.eojx1 == EOJ_X1_PROFILE)
 		&& (esv->hdr.edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) {
 		sobj = &snod->base;
 	}
-	/* æ©å¨ãªãã¸ã§ã¯ãã®å ´å */
+	/* 機器オブジェクトの場合 */
 	else {
 		sobj = ecn_agent_find_eobj(&snod->eobj, esv->hdr.edata.seoj);
@@ -808,5 +786,5 @@
 	ecn_obj_t *obj = node->current;
 
-	// ãã­ããã£å¤èª­ã¿åºãè¦æ±
+	// プロパティ値読み出し要求
 	ecn_esv_get(&esv, obj->eobjId, 0x9E);
 	ecn_snd_esv(esv);
@@ -821,5 +799,5 @@
 	ecn_obj_t *obj = node->current;
 
-	// ãã­ããã£å¤èª­ã¿åºãè¦æ±
+	// プロパティ値読み出し要求
 	ecn_esv_get(&esv, obj->eobjId, 0x9F);
 	ecn_snd_esv(esv);
@@ -834,5 +812,5 @@
 	ecn_obj_t *obj = node->current;
 
-	// ãã­ããã£å¤èª­ã¿åºãè¦æ±
+	// プロパティ値読み出し要求
 	ecn_esv_get(&esv, obj->eobjId, 0x9D);
 	ecn_snd_esv(esv);
@@ -848,22 +826,21 @@
 	ecn_device_t *device;
 
-	/* objãæå®ããã¦ããªãå ´å */
+	/* objが指定されていない場合 */
 	if(obj == NULL){
-		/* ãã®ãã¼ããè¿ã */
+		/* このノードを返す */
 		node->current = &node->base;
 		return;
 	}
-	/* ãã¼ãã®å ´å */
+	/* ノードの場合 */
 	else if((obj->inib.eojx1 == EOJ_X1_PROFILE) && (obj->inib.eojx2 == EOJ_X2_NODE_PROFILE)){
 		node = (ecn_node_t *)obj;
 
-		/* é
-ä¸ã®æ©å¨ãè¿ã */
+		/* 配下の機器を返す */
 		queue = node->devices.p_next;
 		device = (ecn_device_t *)cast_obj(queue);
 	}
-	/* æ©å¨ã®å ´å */
+	/* 機器の場合 */
 	else{
-		/* æ¬¡ã®æ©å¨ãè¿ã */
+		/* 次の機器を返す */
 		node = ((ecn_device_t *)obj)->node;
 		queue = cast_queue(obj)->p_next;
@@ -871,5 +848,5 @@
 	}
 
-	/* ãã®æ©å¨ãæ«å°¾ã ã£ãå ´å */
+	/* その機器が末尾だった場合 */
 	if(&node->devices == queue){
 		node->current = NULL;
@@ -1000,6 +977,5 @@
 	bool_t has = false;
 
-	/* ãã¼ãã®å ´åã¯ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã¨èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³éç¥ãå¿
-é ã§åãåã */
+	/* ノードの場合はインスタンスリスト通知と自ノードインスタンスリストＳ通知を必須で受け取る */
 	if ((fp_obj->enodid == 0) && ((fa_epc == 0xD5) || (fa_epc == 0xD6)))
 		has = true;
@@ -1035,7 +1011,7 @@
 
 	switch (item->eprpcd) {
-	/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®å ´å */
+	/* インスタンスリスト通知の場合 */
 	case 0xD5:
-	/* èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³éç¥ã®å ´å */
+	/* 自ノードインスタンスリストＳ通知の場合 */
 	case 0xD6:
 		if ((node != NULL) && (node->state == ecn_node_state_idle)) {
@@ -1055,10 +1031,10 @@
 		}
 		break;
-	/* éç¥ãã­ããã£ãããã®å ´å */
+	/* 通知プロパティマップの場合 */
 	case 0x9D:
 		eprpcnt = edt[0];
 
 		if (eprpcnt < 16) {
-			/* ãµã¤ãºãã§ãã¯ */
+			/* サイズチェック */
 			if (eprpcnt + 1 != size)
 				return 0;
@@ -1068,5 +1044,5 @@
 		}
 		else {
-			/* ãµã¤ãºãã§ãã¯ */
+			/* サイズチェック */
 			if (size != 17)
 				return 0;
@@ -1077,10 +1053,10 @@
 		sobj->pmapFlag |= PMAP_FLAG_ANNO;
 		break;
-	/* SETãã­ããã£ãããã®å ´å */
+	/* SETプロパティマップの場合 */
 	case 0x9E:
 		eprpcnt = edt[0];
 
 		if (eprpcnt < 16) {
-			/* ãµã¤ãºãã§ãã¯ */
+			/* サイズチェック */
 			if (eprpcnt + 1 != size)
 				return 0;
@@ -1090,5 +1066,5 @@
 		}
 		else {
-			/* ãµã¤ãºãã§ãã¯ */
+			/* サイズチェック */
 			if (size != 17)
 				return 0;
@@ -1099,10 +1075,10 @@
 		sobj->pmapFlag |= PMAP_FLAG_SET;
 		break;
-	/* GETãã­ããã£ãããã®å ´å */
+	/* GETプロパティマップの場合 */
 	case 0x9F:
 		eprpcnt = edt[0];
 
 		if (eprpcnt < 16) {
-			/* ãµã¤ãºãã§ãã¯ */
+			/* サイズチェック */
 			if (eprpcnt + 1 != size)
 				return 0;
@@ -1112,5 +1088,5 @@
 		}
 		else {
-			/* ãµã¤ãºãã§ãã¯ */
+			/* サイズチェック */
 			if (size != 17)
 				return 0;
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_agent.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_agent.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_agent.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2015 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite åççæãã¼ã
+ *		ECHONET Lite 動的生成ノード
  */
 
@@ -67,12 +52,12 @@
 
 /*
- *  ã­ã¥ã¼ã®ãã¼ã¿æ§é ã®å®ç¾©
+ *  キューのデータ構造の定義
  */
 typedef struct ecn_agent_queue {
 #ifdef _DEBUG
-	struct ecn_agent_queue *p_parent;	/* è¦ªã­ã¥ã¼ã¸ã®ãã¤ã³ã¿ */
+	struct ecn_agent_queue *p_parent;	/* 親キューへのポインタ */
 #endif
-	struct ecn_agent_queue *p_next;		/* æ¬¡ã¨ã³ããªã¸ã®ãã¤ã³ã¿ */
-	struct ecn_agent_queue *p_prev;		/* åã¨ã³ããªã¸ã®ãã¤ã³ã¿ */
+	struct ecn_agent_queue *p_next;		/* 次エントリへのポインタ */
+	struct ecn_agent_queue *p_prev;		/* 前エントリへのポインタ */
 } ecn_agent_queue_t;
 
@@ -86,9 +71,8 @@
 	EOBJINIB inib;
 	uint8_t pmapFlag;
-	uint8_t pmapSet[16];		/* SETãã­ããã£ããã */
-	uint8_t pmapGet[16];		/* GETãã­ããã£ããã */
-	uint8_t pmapAnno[16];		/* ç¶æ
-å¤åæéç¥ãã­ããã£ããã */
-	uint_t eprpcnt;				/* ECHONET Lite ãã­ããã£æ° */
+	uint8_t pmapSet[16];		/* SETプロパティマップ */
+	uint8_t pmapGet[16];		/* GETプロパティマップ */
+	uint8_t pmapAnno[16];		/* 状態変化時通知プロパティマップ */
+	uint_t eprpcnt;				/* ECHONET Lite プロパティ数 */
 } ecn_obj_t;
 
@@ -126,10 +110,10 @@
 typedef struct ecn_inm_get_device_item
 {
-	ID			eobjid;			/* ECHONET Lite ãªãã¸ã§ã¯ãID */
-	ID			enodid;			/* ECHONET Lite ãã¼ããã­ãã¡ã¤ã«ãªãã¸ã§ã¯ãID */
-	uint8_t		eojx1;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®ã¯ã©ã¹ã°ã«ã¼ãã³ã¼ã */
-	uint8_t		eojx2;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®ã¯ã©ã¹ã³ã¼ã */
-	uint8_t		eojx3;			/* ECHONET Lite ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã³ã¼ã */
-	ECN_ENOD_ID	addrid;			/* IPã¢ãã¬ã¹åå¾ç¨ID */
+	ID			eobjid;			/* ECHONET Lite オブジェクトID */
+	ID			enodid;			/* ECHONET Lite ノードプロファイルオブジェクトID */
+	uint8_t		eojx1;			/* ECHONET Lite オブジェクトのクラスグループコード */
+	uint8_t		eojx2;			/* ECHONET Lite オブジェクトのクラスコード */
+	uint8_t		eojx3;			/* ECHONET Lite オブジェクトのインスタンスコード */
+	ECN_ENOD_ID	addrid;			/* IPアドレス取得用ID */
 } ecn_inm_get_device_item_t;
 
@@ -156,30 +140,29 @@
 } ecn_inm_get_device_info_res_t;
 
-/* åæå */
+/* 初期化 */
 void ecn_agent_init(void);
-/* ãã¼ããæ¤ç´¢ */
+/* ノードを検索 */
 ecn_node_t *ecn_agent_find_node(ECN_ENOD_ID enodid);
-/* æ©å¨ãæ¤ç´¢ */
+/* 機器を検索 */
 ecn_obj_t *ecn_agent_find_eobj(const EOBJCB *pk_nod, T_ECN_EOJ eoj);
-/* ãªãã¸ã§ã¯ãIDãåå¾ */
+/* オブジェクトIDを取得 */
 ID ecn_agent_get_eobj(const EOBJINIB *pk_obj);
-/* æ¬¡ã®æ©å¨ãåå¾ */
+/* 次の機器を取得 */
 const EOBJINIB *ecn_agent_next_eobj(const EOBJCB *pk_nod, const EOBJINIB *pk_obj);
-/* ãªãã¸ã§ã¯ãIDããEOJã¨ãã¼ãIDãåå¾ */
+/* オブジェクトIDからEOJとノードIDを取得 */
 bool_t ecn_agent_get_eoj_enodid(ID eobjid, T_ECN_EOJ *eoj, ECN_ENOD_ID *enodid);
-/* ã¿ã¤ã ã¢ã¦ãå¤ãè¿ã */
+/* タイムアウト値を返す */
 int ecn_agent_get_timer();
-/* ã¿ã¤ãã¼ã®æéãé²ãã */
+/* タイマーの時間を進める */
 void ecn_agent_progress(int interval);
-/* ã¿ã¤ã ã¢ã¦ãå¦çï¼ã®ããã®å¼ã³åºãï¼ */
+/* タイムアウト処理（のための呼び出し） */
 void ecn_agent_timeout();
-/* å
-é¨ã¡ãã»ã¼ã¸å¦ç */
+/* 内部メッセージ処理 */
 bool_t ecn_agent_proc_int_msg(ECN_FBS_ID fbs, uint8_t cmd);
-/* ECHONETé»æåä¿¡å¦ç */
+/* ECHONET電文受信処理 */
 void ecn_agent_proc_ecn_msg(const EOBJCB **snod, const EOBJINIB **sobj, T_EDATA *esv);
-/* ECHONETé»æåä¿¡å¦ççµäº */
+/* ECHONET電文受信処理終了 */
 void ecn_agent_proc_ecn_msg_end();
-/* ãã­ããã£ãåå¾ */
+/* プロパティを取得 */
 const EPRPINIB *ecn_agent_get_property(const EOBJINIB *fp_obj, uint8_t fa_epc, const EPRPINIB *item);
 
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_asp.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_asp.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_asp.cfg	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *  ECHONET Lite ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ECHONET Lite コンフィギュレーションファイル
  */
 
@@ -59,5 +44,5 @@
 
 /*
- * ECHONET Lite é»æç¨ã¡ã¢ãª
+ * ECHONET Lite 電文用メモリ
  */
 #ifndef ECHONET_USE_MALLOC
@@ -66,25 +51,25 @@
 
 /*
- * ECHONET Lite APIç¨ãã¼ã¿ã­ã¥ã¼
+ * ECHONET Lite API用データキュー
  */
 CRE_DTQ(ECHONET_API_DATAQUEUE, { TA_TFIFO, ECHONET_API_DATAQUEUE_COUNT, NULL });
 
 /*
- * ECHONET Lite ãµã¼ãã¹å¦çã¿ã¹ã¯ç¨ãã¼ã¿ã­ã¥ã¼
+ * ECHONET Lite サービス処理タスク用データキュー
  */
 CRE_DTQ(ECHONET_SVC_DATAQUEUE, { TA_TFIFO, ECHONET_SVC_DATAQUEUE_COUNT, NULL });
 
 /*
- * ECHONET Lite ãµã¼ãã¹å¦çã¿ã¹ã¯
+ * ECHONET Lite サービス処理タスク
  */
 CRE_TSK(ECHONET_SVC_TASK, { TA_HLNG, 0, echonet_task, ECHONET_TASK_PRIORITY, ECHONET_TASK_STACK_SIZE, NULL });
 
 /*
- * ECHONET Lite UDPéä¿¡å¦çç¨ãã¼ã¿ã­ã¥ã¼
+ * ECHONET Lite UDP通信処理用データキュー
  */
 CRE_DTQ(ECHONET_UDP_DATAQUEUE, { TA_TFIFO, ECHONET_UDP_DATAQUEUE_COUNT, NULL });
 
 /*
- * ECHONET Lite UDPéä¿¡å¦çã¿ã¹ã¯
+ * ECHONET Lite UDP通信処理タスク
  */
 CRE_TSK(ECHONET_UDP_TASK, { TA_HLNG, 0, echonet_udp_task, ECHONET_UDP_TASK_PRIORITY, ECHONET_UDP_TASK_STACK_SIZE, NULL });
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_chk.trb
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_chk.trb	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_chk.trb	(revision 389)
@@ -5,47 +5,32 @@
 #  Copyright (C) 2014 Cores Co., Ltd. Japan
 # 
-#  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#      ã¨ï¼
-#    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#        å ±åãããã¨ï¼
-#  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#      å
-è²¬ãããã¨ï¼
+#  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#      スコード中に含まれていること．
+#  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#      の無保証規定を掲載すること．
+#  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#      と．
+#    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#        作権表示，この利用条件および下記の無保証規定を掲載すること．
+#    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#        報告すること．
+#  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#      免責すること．
 # 
-#  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#  ã®è²¬ä»»ãè² ããªãï¼
+#  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#  の責任を負わない．
 # 
 #  @(#) $Id$
@@ -54,9 +39,8 @@
 
 # =====================================================================
-# å¿
-é ãã­ããã£ã®ãã§ãã¯
+# 必須プロパティのチェック
 # =====================================================================
 
-# ãã­ãã¡ã¤ã«ãªãã¸ã§ã¯ãã¹ã¼ãã¼ã¯ã©ã¹
+# プロファイルオブジェクトスーパークラス
 class ProfileObjectSuperClass
 	EPC = [ 0x88, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x9D, 0x9E, 0x9F ]
@@ -64,5 +48,5 @@
 end
 
-# ãã¼ããã­ãã¡ã¤ã«ã¯ã©ã¹
+# ノードプロファイルクラス
 class NodeProfileClass
 	EPC = [ 0x80, 0x82, 0x83, 0x89, 0xBF, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7 ]
@@ -70,5 +54,5 @@
 end
 
-# æ©å¨ãªãã¸ã§ã¯ãã¹ã¼ãã¼ã¯ã©ã¹
+# 機器オブジェクトスーパークラス
 class DeviceSuperClass
 	EPC = [ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x93, 0x97, 0x98, 0x99, 0x9A, 0x9D, 0x9E, 0x9F ]
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_class.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_class.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_class.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,576 +39,557 @@
 #define ECHONET_CLASS_H
 
-/* ã»ã³ãµã¼é¢é£æ©å¨ */
+/* センサー関連機器 */
 #define EOJ_X1_SENSOR 0x00
 
-/* ç©ºèª¿é¢é£æ©å¨ */
+/* 空調関連機器 */
 #define EOJ_X1_AIR_CONDITIONER 0x01
 
-/* ä½å®
-ã»è¨­åé¢é£æ©å¨ */
+/* 住宅・設備関連機器 */
 #define EOJ_X1_AMENITY 0x02
 
-/* èª¿çã»å®¶äºé¢é£æ©å¨ */
+/* 調理・家事関連機器 */
 #define EOJ_X1_HOUSEWORK 0x03
 
-/* å¥åº·é¢é£æ©å¨ */
+/* 健康関連機器 */
 #define EOJ_X1_WELLNESS 0x04
 
-/* ç®¡çã»æä½é¢é£æ©å¨ */
+/* 管理・操作関連機器 */
 #define EOJ_X1_CONTROLLER 0x05
 
-/* AVé¢é£æ©å¨ */
+/* AV関連機器 */
 #define EOJ_X1_AUDIO_VISUAL 0x06
 
-/* ãã­ãã¡ã¤ã« */
+/* プロファイル */
 #define EOJ_X1_PROFILE 0x0E
 
-/* ã¦ã¼ã¶ã¼å®ç¾© */
+/* ユーザー定義 */
 #define EOJ_X1_USER_DEFINED 0x0F
 
 /*
- * ã»ã³ãµé¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* ã¬ã¹æ¼ãã»ã³ãµ */
+ * センサ関連機器クラスグループ *
+ */
+/* ガス漏れセンサ */
 #define EOJ_X2_GAS_LEAK_SENSOR 0x01
 
-/* é²ç¯ã»ã³ãµ */
+/* 防犯センサ */
 #define EOJ_X2_CRIME_PREVENTION_SENSOR 0x02
 
-/* éå¸¸ãã¿ã³ */
+/* 非常ボタン */
 #define EOJ_X2_EMERGENCY_BUTTON 0x03
 
-/* ææ¥ç¨ã»ã³ãµ */
+/* 救急用センサ */
 #define EOJ_X2_FIRST_AID_SENSOR 0x04
 
-/* å°éã»ã³ãµ */
+/* 地震センサ */
 #define EOJ_X2_EARTHQUAKE_SENSOR 0x05
 
-/* æ¼é»ã»ã³ãµ */
+/* 漏電センサ */
 #define EOJ_X2_ELECTRIC_LEAK_SENSOR 0x06
 
-/* äººä½æ¤ç¥ã»ã³ãµ */
+/* 人体検知センサ */
 #define EOJ_X2_HUMAN_DETECTION_SENSOR 0x07
 
-/* æ¥å®¢ã»ã³ãµ */
+/* 来客センサ */
 #define EOJ_X2_VISITOR_SENSOR 0x08
 
-/* å¼ã³åºãã»ã³ãµ */
+/* 呼び出しセンサ */
 #define EOJ_X2_CALL_SENSOR 0x09
 
-/* çµé²ã»ã³ãµ */
+/* 結露センサ */
 #define EOJ_X2_CONDENSATION_SENSOR 0x0A
 
-/* ç©ºæ°æ±æã»ã³ãµ */
+/* 空気汚染センサ */
 #define EOJ_X2_AIR_POLLUTION_SENSOR 0x0B
 
-/* é
-¸ç´ ã»ã³ãµ */
+/* 酸素センサ */
 #define EOJ_X2_OXYGEN_SENSOR 0x0C
 
-/* ç
-§åº¦ã»ã³ãµ */
+/* 照度センサ */
 #define EOJ_X2_ILLUMINANCE_SENSOR 0x0D
 
-/* é³ã»ã³ãµ */
+/* 音センサ */
 #define EOJ_X2_SOUND_SENSOR 0x0E
 
-/* æå½ã»ã³ãµ */
+/* 投函センサ */
 #define EOJ_X2_MAILING_SENSOR 0x0F
 
-/* éè·ã»ã³ãµ */
+/* 重荷センサ */
 #define EOJ_X2_WEIGHT_SENSOR 0x10
 
-/* æ¸©åº¦ã»ã³ãµ */
+/* 温度センサ */
 #define EOJ_X2_TEMPERATURE_SENSOR 0x11
 
-/* æ¹¿åº¦ã»ã³ãµ */
+/* 湿度センサ */
 #define EOJ_X2_HUMIDITY_SENSOR 0x12
 
-/* é¨ã»ã³ãµ */
+/* 雨センサ */
 #define EOJ_X2_RAIN_SENSOR 0x13
 
-/* æ°´ä½ã»ã³ãµ */
+/* 水位センサ */
 #define EOJ_X2_WATER_LEVEL_SENSOR 0x14
 
-/* é¢¨åæ°´ä½ã»ã³ãµ */
+/* 風呂水位センサ */
 #define EOJ_X2_BATH_WATER_LEVEL_SENSOR 0x15
 
-/* é¢¨åæ²¸ãä¸ããã»ã³ãµ */
+/* 風呂沸き上がりセンサ */
 #define EOJ_X2_BATH_HEATING_STATUS_SENSOR 0x16
 
-/* æ°´æ¼ãã»ã³ãµ */
+/* 水漏れセンサ */
 #define EOJ_X2_WATER_LEAK_SENSOR 0x17
 
-/* æ°´ããµãã»ã³ãµ */
+/* 水あふれセンサ */
 #define EOJ_X2_WATER_OVERFLOW_SENSOR 0x18
 
-/* ç«ç½ã»ã³ãµ */
+/* 火災センサ */
 #define EOJ_X2_FIRE_SENSOR 0x19
 
-/* ã¿ãã³ç
-ã»ã³ãµ */
+/* タバコ煙センサ */
 #define EOJ_X2_CIGARETTE_SMOKE_SENSOR 0x1A
 
-/* ï¼£ï¼¯ï¼ã»ã³ãµ */
+/* ＣＯ２センサ */
 #define EOJ_X2_CO2_SENSOR 0x1B
 
-/* ã¬ã¹ã»ã³ãµ */
+/* ガスセンサ */
 #define EOJ_X2_GAS_SENSOR 0x1C
 
-/* ï¼¶ï¼¯ï¼£ã»ã³ãµ */
+/* ＶＯＣセンサ */
 #define EOJ_X2_VOC_SENSOR 0x1D
 
-/* å·®å§ã»ã³ãµ */
+/* 差圧センサ */
 #define EOJ_X2_DIFFERENTIAL_PRESSURE_SENSOR 0x1E
 
-/* é¢¨éã»ã³ãµ */
+/* 風速センサ */
 #define EOJ_X2_AIR_SPEED_SENSOR 0x1F
 
-/* è­ãã»ã³ãµ */
+/* 臭いセンサ */
 #define EOJ_X2_ODOR_SENSOR 0x20
 
-/* çã»ã³ãµ */
+/* 炎センサ */
 #define EOJ_X2_FLAME_SENSOR 0x21
 
-/* é»åéã»ã³ãµ */
+/* 電力量センサ */
 #define EOJ_X2_ELECTRIC_ENERGY_SENSOR 0x22
 
-/* é»æµéã»ã³ãµ */
+/* 電流量センサ */
 #define EOJ_X2_CURRENT_VALUE_SENSOR 0x23
 
-/* æ¼å
-ã»ã³ãµ */
+/* 昼光センサ */
 #define EOJ_X2_DAYLIGHT_SENSOR 0x24
 
-/* æ°´æµéã»ã³ãµ */
+/* 水流量センサ */
 #define EOJ_X2_WATER_FLOW_RATE_SENSOR 0x25
 
-/* å¾®åã»ã³ãµ */
+/* 微動センサ */
 #define EOJ_X2_MICROMOTION_SENSOR 0x26
 
-/* ééã»ã³ãµ */
+/* 通過センサ */
 #define EOJ_X2_PASSAGE_SENSOR 0x27
 
-/* å¨åºã»ã³ãµ */
+/* 在床センサ */
 #define EOJ_X2_BED_PRESENCE_SENSOR 0x28
 
-/* ééã»ã³ãµ */
+/* 開閉センサ */
 #define EOJ_X2_OPEN_CLOSE_SENSOR 0x29
 
-/* æ´»åéã»ã³ãµ */
+/* 活動量センサ */
 #define EOJ_X2_ACTIVITY_AMOUNT_SENSOR 0x2A
 
-/* äººä½ä½ç½®ã»ã³ãµ */
+/* 人体位置センサ */
 #define EOJ_X2_HUMAN_BODY_LOCATION_SENSOR 0x2B
 
-/* éªã»ã³ãµ */
+/* 雪センサ */
 #define EOJ_X2_SNOW_SENSOR 0x2C
 
 /*
- * ç©ºèª¿é¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* å®¶åº­ç¨ã¨ã¢ã³ã³ */
+ * 空調関連機器クラスグループ *
+ */
+/* 家庭用エアコン */
 #define EOJ_X2_HOME_AIR_CONDITIONER 0x30
 
-/* å·é¢¨æ© */
+/* 冷風機 */
 #define EOJ_X2_COLD_BLASTER 0x31
 
-/* æé¢¨æ© */
+/* 扇風機 */
 #define EOJ_X2_ELECTRIC_FAN 0x32
 
-/* ææ°æ */
+/* 換気扇 */
 #define EOJ_X2_VENTILATION_FAN 0x33
 
-/* ç©ºèª¿ææ°æ */
+/* 空調換気扇 */
 #define EOJ_X2_AIR_CONDITIONING_VENTILATION_FAN 0x34
 
-/* ç©ºæ°æ¸
-æµå¨ */
+/* 空気清浄器 */
 #define EOJ_X2_AIR_CLEANER 0x35
 
-/* å·é¢¨æ */
+/* 冷風扇 */
 #define EOJ_X2_COLD_BLAST_FAN 0x36
 
-/* ãµã¼ã­ã¥ã¬ã¼ã¿ */
+/* サーキュレータ */
 #define EOJ_X2_CIRCULATOR 0x37
 
-/* é¤æ¹¿æ© */
+/* 除湿機 */
 #define EOJ_X2_DEHUMIDIFIER 0x38
 
-/* å æ¹¿å¨ */
+/* 加湿器 */
 #define EOJ_X2_HUMIDIFIER 0x39
 
-/* å¤©äºæ */
+/* 天井扇 */
 #define EOJ_X2_CEILING_FAN 0x3A
 
-/* é»æ°ããã¤ */
+/* 電気こたつ */
 #define EOJ_X2_ELECTRIC_KOTATSU 0x3B
 
-/* é»æ°ããã */
+/* 電気あんか */
 #define EOJ_X2_ELECTRIC_HEATING_PAD 0x3C
 
-/* é»æ°æ¯å¸ */
+/* 電気毛布 */
 #define EOJ_X2_ELECTRIC_BLANKET 0x3D
 
-/* ã¹ãã¼ã */
+/* ストーブ */
 #define EOJ_X2_SPACE_HEATER 0x3E
 
-/* ããã«ãã¼ã¿ */
+/* パネルヒータ */
 #define EOJ_X2_PANEL_HEATER 0x3F
 
-/* é»æ°ã«ã¼ããã */
+/* 電気カーペット */
 #define EOJ_X2_ELECTRIC_CARPET 0x40
 
-/* ãã­ã¢ãã¼ã¿ */
+/* フロアヒータ */
 #define EOJ_X2_FLOOR_HEATER 0x41
 
-/* é»æ°ææ¿å¨ */
+/* 電気暖房器 */
 #define EOJ_X2_ELECTRIC_HEATER 0x42
 
-/* ãã¡ã³ãã¼ã¿ */
+/* ファンヒータ */
 #define EOJ_X2_FAN_HEATER 0x43
 
-/* å
-
-é»å¨ */
+/* 充電器 */
 #define EOJ_X2_BATTERY_CHARGER 0x44
 
-/* æ¥­åç¨ããã±ã¼ã¸ã¨ã¢ã³ã³å®¤å
-æ© */
+/* 業務用パッケージエアコン室内機 */
 #define EOJ_X2_PACKAGE_TYPE_COMMERCIAL_AIR_CONDITIONER_INDOOR_UNIT 0x45
 
-/* æ¥­åç¨ããã±ã¼ã¸ã¨ã¢ã³ã³å®¤å¤æ© */
+/* 業務用パッケージエアコン室外機 */
 #define EOJ_X2_PACKAGE_TYPE_COMMERCIAL_AIR_CONDITIONER_OUTDOOR_UNIT 0x46
 
-/* æ¥­åç¨ããã±ã¼ã¸ã¨ã¢ã³ã³èç±ã¦ããã */
+/* 業務用パッケージエアコン蓄熱ユニット */
 #define EOJ_X2_PACKAGE_TYPE_COMMERCIAL_AIR_CONDITIONER_THERMAL_STORAGE_UNIT 0x47
 
-/* æ¥­åç¨ãã¡ã³ã³ã¤ã«ã¦ããã */
+/* 業務用ファンコイルユニット */
 #define EOJ_X2_COMMERCIAL_FAN_COIL_UNIT 0x48
 
-/* æ¥­åç¨ç©ºèª¿å·ç±æº(ãã©ã¼) */
+/* 業務用空調冷熱源(チラー) */
 #define EOJ_X2_COMMERCIAL_AIR_CONDITIONING_COLD_SOURCE_CHILLER 0x49
 
-/* æ¥­åç¨ç©ºèª¿æ¸©ç±æº(ãã¤ã©ã¼) */
+/* 業務用空調温熱源(ボイラー) */
 #define EOJ_X2_COMMERCIAL_AIR_CONDITIONING_HEAT_SOURCE_BOILER 0x50
 
-/* æ¥­åç¨ç©ºèª¿VAV */
+/* 業務用空調VAV */
 #define EOJ_X2_AIR_CONDITIONING_VAV_FOR_COMMERCIAL_APPLICATION 0x51
 
-/* æ¥­åç¨ç©ºèª¿ã¨ã¢ãã³ããªã³ã°ã¦ããã */
+/* 業務用空調エアハンドリングユニット */
 #define EOJ_X2_AIR_HANDLING_UNIT_AIR_CONDITIONING_FOR_COMMERCIAL_APPLICATION 0x52
 
-/* ã¦ãããã¯ã¼ã©ã¼ */
+/* ユニットクーラー */
 #define EOJ_X2_UNIT_COOLER 0x53
 
-/* æ¥­åç¨ã³ã³ãã³ã·ã³ã°ã¦ããã */
+/* 業務用コンデンシングユニット */
 #define EOJ_X2_CONDENSING_UNIT_FOR_COMMERCIAL_APPLICATION 0x54
 
 /*
- * ä½å®
-ã»è¨­åé¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* é»åãã©ã¤ã³ã */
+ * 住宅・設備関連機器クラスグループ *
+ */
+/* 電動ブラインド */
 #define EOJ_X2_ELECTRICALLY_OPERATED_SHADE 0x60
 
-/* é»åã·ã£ãã¿ã¼ */
+/* 電動シャッター */
 #define EOJ_X2_ELECTRICALLY_OPERATED_SHUTTER 0x61
 
-/* é»åã«ã¼ãã³ */
+/* 電動カーテン */
 #define EOJ_X2_ELECTRICALLY_OPERATED_CURTAIN 0x62
 
-/* é»åé¨æ¸ */
+/* 電動雨戸 */
 #define EOJ_X2_ELECTRICALLY_OPERATED_STORM_WINDOW 0x63
 
-/* é»åã¬ã¬ã¼ã¸ */
+/* 電動ガレージ */
 #define EOJ_X2_ELECTRICALLY_OPERATED_DOOR 0x64
 
-/* é»åå¤©çª */
+/* 電動天窓 */
 #define EOJ_X2_ELECTRICALLY_OPERATED_SKYLIGHT 0x65
 
-/* ãªã¼ãã³ã°ï¼æ¥ããï¼ */
+/* オーニング（日よけ） */
 #define EOJ_X2_AWNING 0x66
 
-/* æ£æ°´å¨ï¼åº­ç¨ï¼ */
+/* 散水器（庭用） */
 #define EOJ_X2_GARDEN_SPRINKLER 0x67
 
-/* æ£æ°´å¨ï¼ç«ç½ç¨ï¼ */
+/* 散水器（火災用） */
 #define EOJ_X2_FIRE_SPRINKLER 0x68
 
-/* å´æ°´ */
+/* 噴水 */
 #define EOJ_X2_FOUNTAIN 0x69
 
-/* ç¬éæ¹¯æ²¸å¨ */
+/* 瞬間湯沸器 */
 #define EOJ_X2_INSTANTANEOUS_WATER_HEATERS 0x6A
 
-/* é»æ°æ¸©æ°´å¨ */
+/* 電気温水器 */
 #define EOJ_X2_ELECTRIC_WATER_HEATER 0x6B
 
-/* å¤ªé½ç±æ¸©æ°´å¨ */
+/* 太陽熱温水器 */
 #define EOJ_X2_SOLAR_WATER_HEATER 0x6C
 
-/* å¾ªç°ãã³ã */
+/* 循環ポンプ */
 #define EOJ_X2_CIRCULATION_PUMP 0x6D
 
-/* é»æ°ä¾¿åº§ï¼æ¸©æ°´æ´æµä¾¿åº§ãææ¿ä¾¿åº§ãªã©ï¼ */
+/* 電気便座（温水洗浄便座、暖房便座など） */
 #define EOJ_X2_BIDET_EQUIPPED_TOILET 0x6E
 
-/* é»æ°é  */
+/* 電気錠 */
 #define EOJ_X2_ELECTRIC_KEY 0x6F
 
-/* ã¬ã¹å
-å¼ */
+/* ガス元弁 */
 #define EOJ_X2_GAS_LINE_VALVE 0x70
 
-/* ãã¼ã ãµã¦ã */
+/* ホームサウナ */
 #define EOJ_X2_HOME_SAUNA 0x71
 
-/* ç¬éå¼çµ¦æ¹¯å¨ */
+/* 瞬間式給湯器 */
 #define EOJ_X2_HOT_WATER_GENERATOR 0x72
 
-/* æµ´å®¤ææ¿ä¹¾ç¥æ© */
+/* 浴室暖房乾燥機 */
 #define EOJ_X2_BATHROOM_DRYER 0x73
 
-/* ãã¼ã ã¨ã¬ãã¼ã¿ */
+/* ホームエレベータ */
 #define EOJ_X2_HOME_ELEVATOR 0x74
 
-/* é»åéä»åã */
+/* 電動間仕切り */
 #define EOJ_X2_ELECTRICALLY_OPERATED_ROOM_DIVIDER 0x75
 
-/* æ°´å¹³ãã©ã³ã¹ãã¡ */
+/* 水平トランスファ */
 #define EOJ_X2_HORIZONTAL_TRANSFER 0x76
 
-/* é»åç©å¹²ã */
+/* 電動物干し */
 #define EOJ_X2_ELECTRICALLY_OPERATED_CLOTHES_DRYING_POLE 0x77
 
-/* æµåæ§½ */
+/* 浄化槽 */
 #define EOJ_X2_SEPTIC_TANK 0x78
 
-/* ä½å®
-ç¨å¤ªé½å
-çºé» */
+/* 住宅用太陽光発電 */
 #define EOJ_X2_HOME_SOLAR_POWER_GENERATION 0x79
 
-/* å·æ¸©æ°´ç±æºæ© */
+/* 冷温水熱源機 */
 #define EOJ_X2_COLD_AND_HOT_WATER_HEAT_SOURCE_EQUIPMENT 0x7A
 
-/* åºææ¿ */
+/* 床暖房 */
 #define EOJ_X2_FLOOR_HEATING 0x7B
 
-/* çæé»æ±  */
+/* 燃料電池 */
 #define EOJ_X2_FUEL_CELL 0x7C
 
-/* èé»æ±  */
+/* 蓄電池 */
 #define EOJ_X2_STORAGE_BATTERY 0x7D
 
-/* é»æ°èªåè»å
-
-æ¾é»ã·ã¹ãã  */
+/* 電気自動車充放電システム */
 #define EOJ_X2_ELECTRIC_VEHICLE 0x7E
 
-/* é»åéã¡ã¼ã¿ */
+/* 電力量メータ */
 #define EOJ_X2_ELECTRIC_ENERGY_METER 0x80
 
-/* æ°´æµéã¡ã¼ã¿ */
+/* 水流量メータ */
 #define EOJ_X2_WATER_FLOW_METER 0x81
 
-/* ã¬ã¹ã¡ã¼ã¿ */
+/* ガスメータ */
 #define EOJ_X2_GAS_METER 0x82
 
-/* LPã¬ã¹ã¡ã¼ã¿ */
+/* LPガスメータ */
 #define EOJ_X2_LP_GAS_METERS 0x83
 
-/* æè¨ */
+/* 時計 */
 #define EOJ_X2_CLOCK 0x84
 
-/* èªåãã¢ */
+/* 自動ドア */
 #define EOJ_X2_AUTOMATIC_DOOR 0x85
 
-/* æ¥­åç¨ã¨ã¬ãã¼ã¿ */
+/* 業務用エレベータ */
 #define EOJ_X2_COMMERCIAL_ELEVATOR 0x86
 
-/* åé»ç¤ã¡ã¼ã¿ãªã³ã° */
+/* 分電盤メータリング */
 #define EOJ_X2_DISTRIBUTION_PANEL_METERING 0x87
 
-/* ã¹ãã¼ãé»åéã¡ã¼ã¿ */
+/* スマート電力量メータ */
 #define EOJ_X2_SMART_ELECTRIC_ENERGY_METER 0x88
 
-/* ã¹ãã¼ãã¬ã¹ã¡ã¼ã¿ */
+/* スマートガスメータ */
 #define EOJ_X2_SMART_GAS_METER 0x89
 
-/* ä¸è¬ç
-§æ */
+/* 一般照明 */
 #define EOJ_X2_GENERAL_LIGHTING_CLASS 0x90
 
-/* éå¸¸ç
-§æ */
+/* 非常照明 */
 #define EOJ_X2_EMERGENCY_LIGHTING 0x99
 
-/* è¨­åç
-§æ */
+/* 設備照明 */
 #define EOJ_X2_EQUIPMENT_LIGHT 0x9D
 
-/* ãã¶ã¼ */
+/* ブザー */
 #define EOJ_X2_BUZZER 0xA0
 
 /*
- * èª¿çã»å®¶äºé¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* ã³ã¼ãã¼ã¡ã¼ã« */
+ * 調理・家事関連機器クラスグループ *
+ */
+/* コーヒーメーカ */
 #define EOJ_X2_COFFEE_MACHINE 0xB0
 
-/* ã³ã¼ãã¼ãã« */
+/* コーヒーミル */
 #define EOJ_X2_COFFEE_MILL 0xB1
 
-/* é»æ°ããã */
+/* 電気ポット */
 #define EOJ_X2_ELECTRIC_HOT_WATER_POT 0xB2
 
-/* é»æ°ããã */
+/* 電気こんろ */
 #define EOJ_X2_ELECTRIC_STOVE 0xB3
 
-/* ãã¼ã¹ã¿ */
+/* トースタ */
 #define EOJ_X2_TOASTER 0xB4
 
-/* ã¸ã¥ã¼ãµã»ãã­ãµ */
+/* ジューサ・ミキサ */
 #define EOJ_X2_JUICER_FOOD_MIXER 0xB5
 
-/* ãã¼ããã­ã»ããµ */
+/* フードプロセッサ */
 #define EOJ_X2_FOOD_PROCESSOR 0xB6
 
-/* å·åå·èµåº« */
+/* 冷凍冷蔵庫 */
 #define EOJ_X2_REFRIGERATOR_FREEZER 0xB7
 
-/* ãªã¼ãã³ã¬ã³ã¸ */
+/* オーブンレンジ */
 #define EOJ_X2_COMBINATION_MICROWAVE_OVEN 0xB8
 
-/* ã¯ãã­ã³ã°ãã¼ã¿ */
+/* クッキングヒータ */
 #define EOJ_X2_COOKING_HEATER 0xB9
 
-/* ãªã¼ãã³ */
+/* オーブン */
 #define EOJ_X2_OVEN 0xBA
 
-/* çé£¯å¨ */
+/* 炊飯器 */
 #define EOJ_X2_RICE_COOKER 0xBB
 
-/* é»å­ã¸ã£ã¼ */
+/* 電子ジャー */
 #define EOJ_X2_ELECTRONIC_JAR 0xBC
 
-/* é£å¨æ´ãæ© */
+/* 食器洗い機 */
 #define EOJ_X2_DISH_WASHER 0xBD
 
-/* é£å¨ä¹¾ç¥æ© */
+/* 食器乾燥機 */
 #define EOJ_X2_DISH_DRYER 0xBE
 
-/* é»æ°ãã¡ã¤ãæ© */
+/* 電気もちつき機 */
 #define EOJ_X2_ELECTRIC_RICE_CAKE_COOKER 0xBF
 
-/* ä¿æ¸©æ© */
+/* 保温機 */
 #define EOJ_X2_KEEP_WARM_MACHINE 0xC0
 
-/* ç²¾ç±³æ© */
+/* 精米機 */
 #define EOJ_X2_RICE_MILL 0xC1
 
-/* èªåè£½ãã³æ© */
+/* 自動製パン機 */
 #define EOJ_X2_AUTOMATIC_BREAD_COOKER 0xC2
 
-/* ã¹ã­ã¼ã¯ãã«ã¼ */
+/* スロークッカー */
 #define EOJ_X2_SLOW_COOKER 0xC3
 
-/* é»æ°æ¼¬ç©æ© */
+/* 電気漬物機 */
 #define EOJ_X2_ELECTRIC_PICKLES_COOKER 0xC4
 
-/* æ´æ¿¯æ© */
+/* 洗濯機 */
 #define EOJ_X2_WASHING_MACHINE 0xC5
 
-/* è¡£é¡ä¹¾ç¥æ© */
+/* 衣類乾燥機 */
 #define EOJ_X2_CLOTH_DRYER 0xC6
 
-/* é»æ°ã¢ã¤ã­ã³ */
+/* 電気アイロン */
 #define EOJ_X2_ELECTRIC_IRON 0xC7
 
-/* ãºãã³ãã¬ããµ */
+/* ズボンプレッサ */
 #define EOJ_X2_TROUSER_PRESS 0xC8
 
-/* ãµã¨ãä¹¾ç¥æ© */
+/* ふとん乾燥機 */
 #define EOJ_X2_FUTON_DRYER 0xC9
 
-/* å°ç©ã»ãã¤ä¹¾ç¥æ© */
+/* 小物・くつ乾燥機 */
 #define EOJ_X2_SMALL_ARTICLE_SHOES_DRYER 0xCA
 
-/* é»æ°æé¤æ©ï¼ã»ã³ãã©ã«ã¯ãªã¼ãå«ãï¼ */
+/* 電気掃除機（セントラルクリーナ含む） */
 #define EOJ_X2_ELECTRIC_VACUUM_CLEANER 0xCB
 
-/* ãã£ã¹ãã¼ã¶ */
+/* ディスポーザ */
 #define EOJ_X2_DISPOSER 0xCC
 
-/* é»æ°èåãæ© */
+/* 電気蚊取り機 */
 #define EOJ_X2_ELECTRIC_MOSQUITO_CATCHER 0xCD
 
-/* æ¥­åç¨ã·ã§ã¼ã±ã¼ã¹ */
+/* 業務用ショーケース */
 #define EOJ_X2_COMMERCIAL_SHOW_CASE 0xCE
 
-/* æ¥­åç¨å·èµåº« */
+/* 業務用冷蔵庫 */
 #define EOJ_X2_COMMERCIAL_REFRIGERATOR 0xCF
 
-/* æ¥­åç¨ãããã±ã¼ã¹ */
+/* 業務用ホットケース */
 #define EOJ_X2_COMMERCIAL_HOT_CASE 0xD0
 
-/* æ¥­åç¨ãã©ã¤ã¤ã¼ */
+/* 業務用フライヤー */
 #define EOJ_X2_COMMERCIAL_FRYER 0xD1
 
-/* æ¥­åç¨é»å­ã¬ã³ã¸ */
+/* 業務用電子レンジ */
 #define EOJ_X2_COMMERCIAL_MICROWAVE_OVEN 0xD2
 
-/* æ´æ¿¯ä¹¾ç¥æ© */
+/* 洗濯乾燥機 */
 #define EOJ_X2_WASHER_AND_DRYER 0xD3
 
 /*
- * å¥åº·é¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* ä½éè¨ */
+ * 健康関連機器クラスグループ *
+ */
+/* 体重計 */
 #define EOJ_X2_WEIGHING_MACHINE 0x01
 
-/* ä½æ¸©è¨ */
+/* 体温計 */
 #define EOJ_X2_CLINICAL_THERMOMETER 0x02
 
-/* è¡å§è¨ */
+/* 血圧計 */
 #define EOJ_X2_BLOOD_PRESSURE_METER 0x03
 
-/* è¡ç³å¤è¨ */
+/* 血糖値計 */
 #define EOJ_X2_BLOOD_SUGAR_METER 0x04
 
-/* ä½èèªè¨ */
+/* 体脂肪計 */
 #define EOJ_X2_BODY_FAT_METER 0x05
 
 /*
- * ç®¡çã»æä½é¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* ã»ã­ã¥ã¢éä¿¡ç¨å
-±æéµè¨­å®ãã¼ã */
+ * 管理・操作関連機器クラスグループ *
+ */
+/* セキュア通信用共有鍵設定ノード */
 #define EOJ_X2_SECURE_COMMUNICATION_SHARED_KEY_SETUP_NODE 0xFC
 
-/* ã¹ã¤ããï¼JEMA/HAç«¯å­å¯¾å¿ï¼ */
+/* スイッチ（JEMA/HA端子対応） */
 #define EOJ_X2_SWITCH 0xFD
 
-/* æºå¸¯ç«¯æ« */
+/* 携帯端末 */
 #define EOJ_X2_PORTABLE_TERMINAL 0xFE
 
-/* ã³ã³ãã­ã¼ã© */
+/* コントローラ */
 #define EOJ_X2_CONTROLLER 0xFF
 
 /*
- * ï¼¡ï¼¶é¢é£æ©å¨ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* ãã£ã¹ãã¬ã¼ */
+ * ＡＶ関連機器クラスグループ *
+ */
+/* ディスプレー */
 #define EOJ_X2_DISPLAY 0x01
 
-/* ãã¬ã */
+/* テレビ */
 #define EOJ_X2_TELEVISION 0x02
 
 /*
- * ãã­ãã¡ã¤ã«ã¯ã©ã¹ã°ã«ã¼ã *
- */
-/* ãã¼ããã­ãã¡ã¤ã« */
+ * プロファイルクラスグループ *
+ */
+/* ノードプロファイル */
 #define EOJ_X2_NODE_PROFILE 0xF0
 
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ã¿ã¹ã¯ ãããã°åºå
+ *		ECHONET Lite タスク デバッグ出力
  */
 
@@ -86,6 +71,5 @@
 static ER _ecn_dbg_wai_syslog(void);
 /*
- *  syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤
+ *  syslog()バッファに余裕ができるまで待つ
  */
 static ER _ecn_dbg_wai_syslog(void)
@@ -128,6 +112,6 @@
 
 /*
- * ãããã°åºå
- * ä¾ï¼		ECN_DBG_PUT("task start");
+ * デバッグ出力
+ * 例：		ECN_DBG_PUT("task start");
  */
 int _ecn_dbg_dbgput(const char *fp_srcloc, const char *fp_form, ...)
@@ -138,10 +122,10 @@
 #ifdef ECN_DBG_PUT_USE_STATIC
  #ifndef SEM_ECN_DBG_PUT
-	/* 256byteãããã¡8æ¬ã­ã¼ãã¼ã·ã§ã³ */
+	/* 256byteバッファ8本ローテーション */
 	static char				a_buf[8][256];
 	static volatile uint_t	a_buf_idx = 0;
 	uint_t					a_buf_idx_a;
  #else
-	/* ã»ããã©ãç¨ãã¦ã1æ¬ã®ãããã¡ä¸ã«æå­åãä¸¦ã¹ã¦ä½¿ã */
+	/* セマフォを用いて、1本のバッファ上に文字列を並べて使う */
 	static char				a_buf[1024];
 	static volatile uint_t	a_buf_pos = 0;
@@ -168,10 +152,9 @@
 	p_buf = a_buf[a_buf_idx_a & 0x07];
  #else
-	if (sizeof(a_buf) - a_buf_pos < 80)	/* æ®ãã80byteæªæºã«ãªã£ãããå
-é ­ã«æ»ã */
+	if (sizeof(a_buf) - a_buf_pos < 80)	/* 残りが80byte未満になったら、先頭に戻る */
 		a_buf_pos = 0;
 	p_buf = a_buf + a_buf_pos;
 	a_buf_len = sizeof(a_buf) - a_buf_pos - 1;
-	if (80 * 2 <= a_buf_len)	/* 80byte*2ä»¥ä¸ã®ä½ç½ããããã¡ã¯ãæ«å°¾80byteãæ®ã */
+	if (80 * 2 <= a_buf_len)	/* 80byte*2以上の余白があるうちは、末尾80byteを残す */
 		a_buf_len -= 80;
  #endif /* #ifdef SEM_ECN_DBG_PUT */
@@ -197,8 +180,7 @@
  #ifdef SEM_ECN_DBG_PUT
 	a_buf_len = strlen(p_buf) + 1;
-	/* æ®ãã80byteæªæºã«ãªã£ãã */
+	/* 残りが80byte未満になったら */
 	if (sizeof(a_buf) - a_buf_pos - a_buf_len < 80) {
-		/* å
-é ­ã«æ»ã */
+		/* 先頭に戻る */
 		a_buf_pos = 0;
 	} else {
@@ -208,6 +190,5 @@
 #endif
 
-	_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+	_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 
 #ifdef SEM_ECN_DBG_PUT
@@ -225,5 +206,5 @@
 }
 
-/* ECN_ENOD_IDã®æå­åå¤æ */
+/* ECN_ENOD_IDの文字列変換 */
 const char *_ecn_dbg_enod2str(ECN_ENOD_ID fa_enod_id)
 {
@@ -273,9 +254,9 @@
 
 /*
- * ãã¤ããªãã³ãåºå
+ * バイナリダンプ出力
  */
 void _ecn_dbg_bindmp(const uint8_t *buffer, size_t len)
 {
-	/* staticé åã®ãããã¡ãåãæ¿ããåæ°(2^n) */
+	/* static領域のバッファを切り替える個数(2^n) */
 	#define _ECN_FBS_DBG_BINDMP_BUF_MAX_BIT (4)
 /*	*/
@@ -283,23 +264,23 @@
  #ifdef _ECN_FBS_DBG_BINDMP_BUF_MAX_BIT
   #undef _ECN_FBS_DBG_BINDMP_BUF_MAX_BIT
-  /* ã»ããã©(SEM_ECN_DBG_BINDMP)ãå®ç¾©ããã¦ããå ´åããããã¡åãæ¿ãã¯ä¸è¦ãªã®ã§undef */
+  /* セマフォ(SEM_ECN_DBG_BINDMP)が定義されている場合、バッファ切り替えは不要なのでundef */
  #endif
 #endif
 #ifndef _ECN_FBS_DBG_BINDMP_BUFLEN
- /* ãããã¡ãµã¤ãº(bindmpä¸­ã®1è¡ãåã¾ããµã¤ãº) */
+ /* バッファサイズ(bindmp中の1行が収まるサイズ) */
  #define _ECN_FBS_DBG_BINDMP_BUFLEN (80)
 #endif
 #ifdef _ECN_FBS_DBG_BINDMP_BUF_MAX_BIT
-	/* staticé åã®ãããã¡ãåãæ¿ããããã®ç®¡çç¨å¤æ° */
+	/* static領域のバッファを切り替えるための管理用変数 */
 	static volatile uint8_t a_idx_vol = 0;
-	/* staticé åã®ãããã¡åãæ¿ãé å */
+	/* static領域のバッファ切り替え領域 */
 	static char a_buf_area[1 << _ECN_FBS_DBG_BINDMP_BUF_MAX_BIT][_ECN_FBS_DBG_BINDMP_BUFLEN];
 	uint8_t a_idx;
 	char *a_buf;
 #else
-	/* staticé åã®ãããã¡é å */
+	/* static領域のバッファ領域 */
 	static char a_buf[_ECN_FBS_DBG_BINDMP_BUFLEN];
 #endif
-	const uint8_t *p = buffer;			/* èª­ã¿åããã¤ã³ã¿ */
+	const uint8_t *p = buffer;			/* 読み取りポインタ */
 	int i, a_blk, a_blk_max, a_pos = 0;
 	const T_ECN_EDT_HDR *p_req_esv;
@@ -319,5 +300,5 @@
 	}
 	#ifndef ECN_DBG_BINDMP_MAXLEN
-	 /* bindmpåºåã®æå¤§ãµã¤ãº */
+	 /* bindmp出力の最大サイズ */
 	 #define ECN_DBG_BINDMP_MAXLEN 1600
 	#endif
@@ -334,6 +315,5 @@
 	for (a_blk = 0; p && a_blk < a_blk_max; p = ((T_ECN_FST_BLK *)buffer)->lnk.p_sub[a_blk++]->dat) {
 		if (0 < a_blk) {
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, "p_sub[%d] (0x%08X)", a_blk - 1, p);
 		}
@@ -342,6 +322,5 @@
 			if (i % 16 == 0) {
 				if (a_buf[0]) {
-					_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+					_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 					syslog(LOG_NOTICE, "%s", a_buf);
 				}
@@ -363,6 +342,5 @@
 		}
 		if (a_buf[0]) {
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, "%s", a_buf);
 		}
@@ -375,23 +353,18 @@
 		case ECN_MSG_ECHONET:
 			p_req_esv = &((const T_ECN_FST_BLK *)buffer)->d.t_esv;
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, " sender: %d %s, target: %d %s",
 				((T_ECN_FST_BLK *)buffer)->hdr.sender, _ecn_dbg_enod2str(((T_ECN_FST_BLK *)buffer)->hdr.sender),
 				((T_ECN_FST_BLK *)buffer)->hdr.target, _ecn_dbg_enod2str(((T_ECN_FST_BLK *)buffer)->hdr.target));
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, " ecn_hdr: 0x%02X 0x%02X 0x%04X", p_req_esv->ecn_hdr.ehd1, p_req_esv->ecn_hdr.ehd2, p_req_esv->ecn_hdr.tid);
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, " edata: 0x%06X 0x%06X 0x%02X 0x%02X (%s)",
 				p_req_esv->edata.seoj.eojx1 << 16 | p_req_esv->edata.seoj.eojx2 << 8 | p_req_esv->edata.seoj.eojx3,
 				p_req_esv->edata.deoj.eojx1 << 16 | p_req_esv->edata.deoj.eojx2 << 8 | p_req_esv->edata.deoj.eojx3,
 				p_req_esv->edata.esv, p_req_esv->edata.opc, _ecn_dbg_esv2str(p_req_esv->edata.esv));
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, " ecn_prp: 0x%02X 0x%02X", p_req_esv->ecn_prp.epc, p_req_esv->ecn_prp.pdc);
-			_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+			_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 			syslog(LOG_NOTICE, " cur(blk/pos): wr %d/%d, rd %d/%d",
 				(int)((T_ECN_FST_BLK *)buffer)->hdr.wr.blk,
@@ -430,15 +403,12 @@
 	&& ((const T_ECN_FST_BLK *)buffer)->bin[1] == 0x81) {
 		p_req_esv = (const T_ECN_EDT_HDR *)&((const T_ECN_FST_BLK *)buffer)->bin[0];
-		_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+		_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 		syslog(LOG_NOTICE, " ecn_hdr: 0x%02X 0x%02X 0x%04X", p_req_esv->ecn_hdr.ehd1, p_req_esv->ecn_hdr.ehd2, p_req_esv->ecn_hdr.tid);
-		_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+		_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 		syslog(LOG_NOTICE, " edata: 0x%06X 0x%06X 0x%02X 0x%02X (%s)",
 			p_req_esv->edata.seoj.eojx1 << 16 | p_req_esv->edata.seoj.eojx2 << 8 | p_req_esv->edata.seoj.eojx3,
 			p_req_esv->edata.deoj.eojx1 << 16 | p_req_esv->edata.deoj.eojx2 << 8 | p_req_esv->edata.deoj.eojx3,
 			p_req_esv->edata.esv, p_req_esv->edata.opc, _ecn_dbg_esv2str(p_req_esv->edata.esv));
-		_ECN_DBG_WAI_SYSLOG; /* syslog()ãããã¡ã«ä½è£ãã§ããã¾ã§å¾
-ã¤ */
+		_ECN_DBG_WAI_SYSLOG; /* syslog()バッファに余裕ができるまで待つ */
 		syslog(LOG_NOTICE, " ecn_prp: 0x%02X 0x%02X", p_req_esv->ecn_prp.epc, p_req_esv->ecn_prp.pdc);
 	}
@@ -449,25 +419,25 @@
 
 /*
- * ECHONET Liteãµã¼ãã¹ã³ã¼ãæå­åå¤æ
+ * ECHONET Liteサービスコード文字列変換
  */
 const char *_ecn_dbg_esv2str(uint8_t fa_esv)
 {
 	switch (fa_esv) {
-	case ESV_SET_I_SNA:		return "ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç­";			/* 0x50 */
-	case ESV_SET_C_SNA:		return "ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç­";			/* 0x51	*/
-	case ESV_GET_SNA:		return "ãã­ããã£å¤èª­ã¿åºãä¸å¯å¿ç­";				/* 0x52	*/
-	case ESV_INF_SNA:		return "ãã­ããã£å¤éç¥ä¸å¯å¿ç­";					/* 0x53 */
-	case ESV_SET_GET_SNA:	return "ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãä¸å¯å¿ç­";	/* 0x5E	*/
-	case ESV_SET_I:			return "ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼";		/* 0x60 */
-	case ESV_SET_C:			return "ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼";		/* 0x61 */
-	case ESV_GET:			return "ãã­ããã£å¤èª­ã¿åºãè¦æ±";					/* 0x62 */
-	case ESV_INF_REQ:		return "ãã­ããã£å¤éç¥è¦æ±";						/* 0x63 */
-	case ESV_SET_GET:		return "ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ±";		/* 0x6E */
-	case ESV_SET_RES:		return "ãã­ããã£å¤æ¸ãè¾¼ã¿å¿ç­";					/* 0x71 */
-	case ESV_GET_RES:		return "ãã­ããã£å¤èª­ã¿åºãå¿ç­";					/* 0x72 */
-	case ESV_INF:			return "ãã­ããã£å¤éç¥";							/* 0x73 */
-	case ESV_INFC:			return "ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼";				/* 0x74 */
-	case ESV_SET_GET_RES:	return "ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãå¿ç­";		/* 0x7E */
-	case ESV_INFC_RES:		return "ãã­ããã£å¤éç¥å¿ç­";						/* 0x7A */
+	case ESV_SET_I_SNA:		return "プロパティ値書き込み要求不可応答";			/* 0x50 */
+	case ESV_SET_C_SNA:		return "プロパティ値書き込み要求不可応答";			/* 0x51	*/
+	case ESV_GET_SNA:		return "プロパティ値読み出し不可応答";				/* 0x52	*/
+	case ESV_INF_SNA:		return "プロパティ値通知不可応答";					/* 0x53 */
+	case ESV_SET_GET_SNA:	return "プロパティ値書き込み・読み出し不可応答";	/* 0x5E	*/
+	case ESV_SET_I:			return "プロパティ値書き込み要求（応答不要）";		/* 0x60 */
+	case ESV_SET_C:			return "プロパティ値書き込み要求（応答要）";		/* 0x61 */
+	case ESV_GET:			return "プロパティ値読み出し要求";					/* 0x62 */
+	case ESV_INF_REQ:		return "プロパティ値通知要求";						/* 0x63 */
+	case ESV_SET_GET:		return "プロパティ値書き込み・読み出し要求";		/* 0x6E */
+	case ESV_SET_RES:		return "プロパティ値書き込み応答";					/* 0x71 */
+	case ESV_GET_RES:		return "プロパティ値読み出し応答";					/* 0x72 */
+	case ESV_INF:			return "プロパティ値通知";							/* 0x73 */
+	case ESV_INFC:			return "プロパティ値通知（応答要）";				/* 0x74 */
+	case ESV_SET_GET_RES:	return "プロパティ値書き込み・読み出し応答";		/* 0x7E */
+	case ESV_INFC_RES:		return "プロパティ値通知応答";						/* 0x7A */
 	default:
 		return "(unknown)";
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.cfg	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,6 +37,6 @@
 
 /*
- *  ãããã¯ã¼ã¯å¯¾å¿ãµã³ãã«ãã­ã°ã©ã (1)ã®
- *  ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ネットワーク対応サンプルプログラム(1)の
+ *  システムコンフィギュレーションファイル
  */
 
@@ -65,5 +50,5 @@
 /* INCLUDE("tinet/tinet_asp.cfg"); // */
 
-/* ã»ããã© */
+/* セマフォ */
 
 CRE_SEM(SEM_ECN_DBG_PUT, { TA_TPRI, 1, 1 });
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_dbg.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ã¿ã¹ã¯ ãããã°åºå
+ *		ECHONET Lite タスク デバッグ出力
  */
 
@@ -69,5 +54,5 @@
 #include "echonet.h"
 
-/* ECN_SRC_LOC: ã½ã¼ã¹ä¸­ã®ãã¡ã¤ã«åã¨è¡çªå·ãç¤ºãæå­åãä½ããã¯ã­ */
+/* ECN_SRC_LOC: ソース中のファイル名と行番号を示す文字列を作るマクロ */
 #ifndef ECN_SRC_LOC
  #ifndef _ECN_BLD_BASE_DIR
@@ -103,5 +88,5 @@
 #endif
 
-/* ãããã°åºå(CARP) */
+/* デバッグ出力(CARP) */
 #ifdef ECN_CAP_PUT_ENA
 #define ECN_CAP_PUT(a)					_ecn_dbg_dbgput(ECN_SRC_LOC, a)
@@ -121,21 +106,21 @@
 
 /*
- * ãããã°åºå
- * ä¾ï¼		ECN_DBG_PUT("task start");
+ * デバッグ出力
+ * 例：		ECN_DBG_PUT("task start");
  */
 int _ecn_dbg_dbgput(const char *, const char *, ...);
 
 /*
- * ãã¤ããªãã³ãåºå
+ * バイナリダンプ出力
  */
 void _ecn_dbg_bindmp(const uint8_t *buffer, size_t len);
 
 /*
- * ECHONET Liteãµã¼ãã¹ã³ã¼ãæå­åå¤æ
+ * ECHONET Liteサービスコード文字列変換
  */
 const char *_ecn_dbg_esv2str(uint8_t fa_esv);
 
 /*
- * ECN_ENOD_IDã®æå­åå¤æ
+ * ECN_ENOD_IDの文字列変換
  */
 const char *_ecn_dbg_enod2str(ECN_ENOD_ID fa_enod_id);
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- * åºå®é·ãããã¡å¯å¤é·ã¹ããªã¼ã 
+ * 固定長バッファ可変長ストリーム
  */
 
@@ -299,5 +284,5 @@
 }
 
-/* ã¡ã¢ãªãã­ãã¯åå¾ ok:ãã¤ã³ã¿ NG:NULL */
+/* メモリブロック取得 ok:ポインタ NG:NULL */
 void *_ecn_fbs_dtq_get(ECN_FBS_SIZE_T fa_req_size)
 {
@@ -325,5 +310,5 @@
 }
 
-/* ã¡ã¢ãªãã­ãã¯è§£æ¾ */
+/* メモリブロック解放 */
 ER _ecn_fbs_dtq_rel(void *p)
 {
@@ -337,5 +322,5 @@
 }
 
-/* é åç¢ºä¿ */
+/* 領域確保 */
 ER _ecn_fbs_cre(ECN_FBS_SIZE_T fa_req_size, ECN_FBS_ID *fp_id)
 {
@@ -343,5 +328,5 @@
 }
 
-/* é åè§£æ¾ */
+/* 領域解放 */
 ER _ecn_fbs_del(ECN_FBS_ID fa_id)
 {
@@ -349,5 +334,5 @@
 }
 
-/* ä¿æãã¼ã¿ã®æç¡ */
+/* 保持データの有無 */
 bool_t _ecn_fbs_exist_data(ECN_FBS_ID fa_id)
 {
@@ -355,5 +340,5 @@
 }
 
-/* ä¿æãã¼ã¿é·ã®åå¾ */
+/* 保持データ長の取得 */
 ECN_FBS_SSIZE_T _ecn_fbs_get_datalen(ECN_FBS_ID fa_id)
 {
@@ -361,5 +346,5 @@
 }
 
-/* èª­ã¿åãã«ã¼ã½ã«ã®ä½ç½®åå¾ */
+/* 読み取りカーソルの位置取得 */
 ECN_FBS_SSIZE_T _ecn_fbs_get_rpos(ECN_FBS_ID fa_id)
 {
@@ -367,8 +352,8 @@
 }
 
-/* èª­ã¿åãã«ã¼ã½ã«ã®ä½ç½®è¨­å® */
+/* 読み取りカーソルの位置設定 */
 ER _ecn_fbs_set_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_pos)
 {
-	if (fa_id.ptr->hdr.length <= (unsigned int)fa_pos)	/* ä½ç½®æå®ãå¤§ãããã */
+	if (fa_id.ptr->hdr.length <= (unsigned int)fa_pos)	/* 位置指定が大きすぎる */
 		return E_PAR;
 
@@ -378,5 +363,5 @@
 }
 
-/* èª­ã¿åãã«ã¼ã½ã«ã®ä½ç½®ç§»å */
+/* 読み取りカーソルの位置移動 */
 ER _ecn_fbs_seek_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek)
 {
@@ -388,5 +373,5 @@
 }
 
-/* ä»»ææå®ä½ç½®ã®1byteèª­ã¿åã */
+/* 任意指定位置の1byte読み取り */
 int _ecn_fbs_peek(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek)
 {
@@ -399,5 +384,5 @@
 }
 
-/* ä»»ææå®ä½ç½®ã®1byteæ¸ãè¾¼ã¿ */
+/* 任意指定位置の1byte書き込み */
 ER _ecn_fbs_poke(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek, int fa_val)
 {
@@ -410,5 +395,5 @@
 }
 
-/* ãã¼ã¿è¿½å  */
+/* データ追加 */
 ER _ecn_fbs_add_data(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len)
 {
@@ -420,5 +405,5 @@
 }
 
-/* ãã¼ã¿è¿½å (é åãèªåçã«æ¡å¼µãã) */
+/* データ追加(領域を自動的に拡張する) */
 ER _ecn_fbs_add_data_ex(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len)
 {
@@ -427,5 +412,5 @@
 }
 
-/* ãã¼ã¿åå¾ */
+/* データ取得 */
 ER _ecn_fbs_get_data(ECN_FBS_ID fa_id, void *fa_buf, ECN_FBS_SSIZE_T fa_maxlen, ECN_FBS_SSIZE_T *p_len)
 {
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_fbs.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- * åºå®é·ãããã¡å¯å¤é·ã¹ããªã¼ã 
+ * 固定長バッファ可変長ストリーム
  */
 
@@ -66,19 +51,19 @@
 
 #ifndef ECHONET_MEMPOOL_GET_TMO
-#define ECHONET_MEMPOOL_GET_TMO	(0)			/* ã¡ã¢ãªãã¼ã«åå¾æã®ã¿ã¤ã ã¢ã¦ãæå® */
+#define ECHONET_MEMPOOL_GET_TMO	(0)			/* メモリプール取得時のタイムアウト指定 */
 #endif /* ECHONET_MEMPOOL_GET_TMO */
 
 #ifndef NUM_ECHONET_MEMPOOL_BLOCK
-#define NUM_ECHONET_MEMPOOL_BLOCK (60)		/* é»æç¨ã¡ã¢ãªãã­ãã¯ã®æ° */
+#define NUM_ECHONET_MEMPOOL_BLOCK (60)		/* 電文用メモリブロックの数 */
 #endif /* NUM_ECHONET_MEMPOOL_BLOCK */
 
 #ifndef ECHONET_MEMPOOL_BLOCK_SIZE
-#define ECHONET_MEMPOOL_BLOCK_SIZE (256)	/* é»æç¨ã¡ã¢ãªãã­ãã¯ã®ãµã¤ãº */
+#define ECHONET_MEMPOOL_BLOCK_SIZE (256)	/* 電文用メモリブロックのサイズ */
 #endif /* ECHONET_MEMPOOL_BLOCK_SIZE */
 
-typedef unsigned int ECN_FBS_SIZE_T;	/* size_tç¸å½  */
-typedef int ECN_FBS_SSIZE_T;			/* ssize_tç¸å½ */
-
-/* T_EDATAç®¡çé åãµã¤ãº */
+typedef unsigned int ECN_FBS_SIZE_T;	/* size_t相当  */
+typedef int ECN_FBS_SSIZE_T;			/* ssize_t相当 */
+
+/* T_EDATA管理領域サイズ */
 #ifndef T_MSG
 typedef intptr_t T_MSG;
@@ -86,33 +71,29 @@
 #define DEF_ECN_EDT_HDR_LEN (sizeof(T_MSG))
 
-/* ç®¡çé åãµã¤ãº(64byte - sizeof(T_MSG)) */
+/* 管理領域サイズ(64byte - sizeof(T_MSG)) */
 /* #define DEF_ECN_FBS_LIB_HDR_LEN ((ECHONET_MEMPOOL_BLOCK_SIZE + sizeof(int) - 1)>> 2) // */
 #define DEF_ECN_FBS_LIB_HDR_LEN (64 - DEF_ECN_EDT_HDR_LEN)
 
-/* ç®¡çé åãå«ããã­ãã¯ã«ä¿æãããã¼ã¿ãµã¤ãº */
+/* 管理領域を含むブロックに保持するデータサイズ */
 #define DEF_ECN_FBS_FST_DAT_LEN (64)
 
-/* ãªã³ã¯ãã¤ã³ã¿é
-åã®ãµã¤ãº(byte) */
+/* リンクポインタ配列のサイズ(byte) */
 #define DEF_ECN_FBS_LNK_LEN (ECHONET_MEMPOOL_BLOCK_SIZE - DEF_ECN_EDT_HDR_LEN - DEF_ECN_FBS_LIB_HDR_LEN - DEF_ECN_FBS_FST_DAT_LEN)
 
-/* åºå®é·ãããã¡æå¤§ãµã¤ãº */
+/* 固定長バッファ最大サイズ */
 #define DEF_ECN_FBS_BUF_MAXLEN ((DEF_ECN_FBS_LNK_LEN / sizeof(void *)) * ECHONET_MEMPOOL_BLOCK_SIZE + DEF_ECN_FBS_FST_DAT_LEN)
 
-/* å­è¦ç´ ãããã¡ã®ãµã¤ãº */
+/* 子要素バッファのサイズ */
 #define DEF_ECN_FBS_SUB_BUF_LEN ECHONET_MEMPOOL_BLOCK_SIZE
 
-/* é»æã®ç¨®å¥(å
-å®¹ã¯ä»®) */
+/* 電文の種別(内容は仮) */
 typedef enum
 {
-	ECN_FBS_TYPE_BLANK		=	0,		/* æªä½¿ç¨ã¹ããªã¼ã  */
-	ECN_FBS_TYPE_INTERNAL	=	1,		/* å
-é¨ã¡ãã»ã¼ã¸ */
-	ECN_FBS_TYPE_ECHONET	=	2		/* ECHONETé»æ */
+	ECN_FBS_TYPE_BLANK		=	0,		/* 未使用ストリーム */
+	ECN_FBS_TYPE_INTERNAL	=	1,		/* 内部メッセージ */
+	ECN_FBS_TYPE_ECHONET	=	2		/* ECHONET電文 */
 } TA_ECN_MSG_TYPE;
 
-/* ãªã³ã¯ãã¤ã³ã¿é
-åã«åæããããå­è¦ç´ ãããã¡ */
+/* リンクポインタ配列に列挙される、子要素バッファ */
 typedef struct
 {
@@ -120,6 +101,5 @@
 } T_ECN_SUB_BLK;
 
-/* ãªã³ã¯ãã¤ã³ã¿é
-å */
+/* リンクポインタ配列 */
 typedef union
 {
@@ -128,45 +108,33 @@
 } T_ECN_FBS_LNK;
 
-/* ç®¡çé å(64byte - sizeof(T_MSG)) */
+/* 管理領域(64byte - sizeof(T_MSG)) */
 typedef struct
 {
-	uint16_t	length;			/* ã¡ãã»ã¼ã¸é· */
-	uint16_t	type;			/* ã¡ãã»ã¼ã¸ã¿ã¤ã */
+	uint16_t	length;			/* メッセージ長 */
+	uint16_t	type;			/* メッセージタイプ */
 	union{
-		ECN_ENOD_ID id;			/* éä¿¡å
-ãã¼ãIDï¼ECHONETé»æï¼ */
-		ID dtqid;				/* éä¿¡å
-ã¡ã¼ã«ããã¯ã¹IDï¼å
-é¨ã¡ãã»ã¼ã¸ï¼ */
+		ECN_ENOD_ID id;			/* 送信元ノードID（ECHONET電文） */
+		ID dtqid;				/* 送信元メールボックスID（内部メッセージ） */
 	}sender;
 	union{
-		ECN_ENOD_ID id;			/* éä¿¡å
-ãã¼ãIDï¼ECHONETé»æï¼ */
-		ID dtqid;				/* éä¿¡å
-ã¡ã¼ã«ããã¯ã¹IDï¼å
-é¨ã¡ãã»ã¼ã¸ï¼ */
+		ECN_ENOD_ID id;			/* 送信先ノードID（ECHONET電文） */
+		ID dtqid;				/* 送信先メールボックスID（内部メッセージ） */
 	}target;
 	union{
-		ECN_ENOD_ID id;			/* è¿ä¿¡å
-ãã¼ãIDï¼ECHONETé»æï¼ */
-		ID dtqid;				/* è¿ä¿¡å
-ã¡ã¼ã«ããã¯ã¹IDï¼å
-é¨ã¡ãã»ã¼ã¸ï¼ */
+		ECN_ENOD_ID id;			/* 返信先ノードID（ECHONET電文） */
+		ID dtqid;				/* 返信先メールボックスID（内部メッセージ） */
 	}reply;
 
-	int			rd;				/*	èª­ã¿åããããæ
-å ±	*/
-	int			wr;				/*	æ¸ãè¾¼ã¿ãããæ
-å ±	*/
+	int			rd;				/*	読み取りヘッド情報	*/
+	int			wr;				/*	書き込みヘッド情報	*/
 } T_ECN_FBS_HDR;
 
-/* ç®¡çé åãå«ããã­ãã¯ã®æ§é  */
+/* 管理領域を含むブロックの構造 */
 typedef struct
 {
 	uint8_t	_msg[DEF_ECN_EDT_HDR_LEN];	/* T_MSG */
-	T_ECN_FBS_HDR	hdr;	/*	ç®¡çé å  64byte  - sizeof(T_MSG)	*/
+	T_ECN_FBS_HDR	hdr;	/*	管理領域  64byte  - sizeof(T_MSG)	*/
 	uint8_t			_gap[DEF_ECN_FBS_LIB_HDR_LEN - sizeof(T_ECN_FBS_HDR)];
-	T_ECN_FBS_LNK	lnk;	/*	ãªã³ã¯ãã¤ã³ã¿é
-å	128byte			*/
+	T_ECN_FBS_LNK	lnk;	/*	リンクポインタ配列	128byte			*/
 	uint8_t			payload[DEF_ECN_FBS_FST_DAT_LEN];
 } T_ECN_FST_BLK;
@@ -178,129 +146,125 @@
 } ECN_FBS_ID;
 
-/* ã¡ãã»ã¼ã¸ã­ã¥ã¼ */
+/* メッセージキュー */
 typedef struct ecn_fbs_queue
 {
-	T_ECN_FST_BLK	*pk_head;		/* å
-é ­ã®ã¡ãã»ã¼ã¸ */
-	T_ECN_FST_BLK	*pk_last;		/* æ«å°¾ã®ã¡ãã»ã¼ã¸ */
+	T_ECN_FST_BLK	*pk_head;		/* 先頭のメッセージ */
+	T_ECN_FST_BLK	*pk_last;		/* 末尾のメッセージ */
 } T_ECN_FBS_QUEUE;
 
-/* ã¡ã¢ãªãã­ãã¯åå¾ ok:ãã¤ã³ã¿ NG:NULL */
+/* メモリブロック取得 ok:ポインタ NG:NULL */
 void *_ecn_fbs_dtq_get(ECN_FBS_SIZE_T fa_req_size);
 
-/* ã¡ã¢ãªãã­ãã¯è§£æ¾ ok:0 NG:é0 */
+/* メモリブロック解放 ok:0 NG:非0 */
 ER _ecn_fbs_dtq_rel(void *p);
 
 /*
- * é åç¢ºä¿
- *	å¼æ°
- *		ECN_FBS_SIZE_T	fa_req_size		è¦æ±ãããã¡ãµã¤ãº(byte)
+ * 領域確保
+ *	引数
+ *		ECN_FBS_SIZE_T	fa_req_size		要求バッファサイズ(byte)
  *										max: DEF_ECN_FBS_BUF_MAXLEN
- *		ECN_FBS_ID		*fp_id			ç¢ºä¿ããFBS-IDã®æ ¼ç´å
-
- *	æ»ãå¤
- *		ER				0:ok é0:NG
+ *		ECN_FBS_ID		*fp_id			確保したFBS-IDの格納先
+ *	戻り値
+ *		ER				0:ok 非0:NG
  */
 ER _ecn_fbs_cre(ECN_FBS_SIZE_T fa_req_size, ECN_FBS_ID *fp_id);
 
 /*
- * é åè§£æ¾
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *	æ»ãå¤
- *		ER				0:ok, é0:NG
+ * 領域解放
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *	戻り値
+ *		ER				0:ok, 非0:NG
  */
 ER _ecn_fbs_del(ECN_FBS_ID fa_id);
 
 /*
- * ä¿æãã¼ã¿ã®æç¡
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *	æ»ãå¤
- *		bool_t			0:ç¡ã, 1:ãã
+ * 保持データの有無
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *	戻り値
+ *		bool_t			0:無し, 1:あり
  */
 bool_t _ecn_fbs_exist_data(ECN_FBS_ID fa_id);
 
 /*
- * ä¿æãã¼ã¿é·ã®åå¾
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *	æ»ãå¤
- *		ECN_FBS_SSIZE_T	ä¿æãã¦ãããã¼ã¿ã®é·ã(byte) -1:NG
+ * 保持データ長の取得
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *	戻り値
+ *		ECN_FBS_SSIZE_T	保持しているデータの長さ(byte) -1:NG
  */
 ECN_FBS_SSIZE_T _ecn_fbs_get_datalen(ECN_FBS_ID fa_id);
 
 /*
- * èª­ã¿åãã«ã¼ã½ã«ã®ä½ç½®åå¾
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *	æ»ãå¤
- *		ECN_FBS_SIZE_T	å
-é ­ããã®çµ¶å¯¾ä½ç½® -1:NG
+ * 読み取りカーソルの位置取得
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *	戻り値
+ *		ECN_FBS_SIZE_T	先頭からの絶対位置 -1:NG
  */
 ECN_FBS_SSIZE_T _ecn_fbs_get_rpos(ECN_FBS_ID fa_id);
 
 /*
- * èª­ã¿åãã«ã¼ã½ã«ã®ä½ç½®è¨­å®
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *		ECN_FBS_SIZE_T	fa_pos	è¨­å®ããä½ç½®(å
-é ­ããã®çµ¶å¯¾ä½ç½®)
- *	æ»ãå¤
- *		ER				0:ok, é0:NG
+ * 読み取りカーソルの位置設定
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *		ECN_FBS_SIZE_T	fa_pos	設定する位置(先頭からの絶対位置)
+ *	戻り値
+ *		ER				0:ok, 非0:NG
  */
 ER _ecn_fbs_set_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_pos);
 
 /*
- * èª­ã¿åãã«ã¼ã½ã«ã®ä½ç½®ç§»å
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *		ECN_FBS_SIZE_T	fa_seek	ç§»åé(ç¾ç¶ãåé²ã®ã¿)
- *	æ»ãå¤
- *		ER				0:ok, é0:NG
+ * 読み取りカーソルの位置移動
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *		ECN_FBS_SIZE_T	fa_seek	移動量(現状、前進のみ)
+ *	戻り値
+ *		ER				0:ok, 非0:NG
  */
 ER _ecn_fbs_seek_rpos(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
 
 /*
- * ä»»ææå®ä½ç½®ã®1byteèª­ã¿åã
+ * 任意指定位置の1byte読み取り
  */
 int _ecn_fbs_peek(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek);
 
 /*
- * ä»»ææå®ä½ç½®ã®1byteæ¸ãè¾¼ã¿
+ * 任意指定位置の1byte書き込み
  */
 ER _ecn_fbs_poke(ECN_FBS_ID fa_id, ECN_FBS_SSIZE_T fa_seek, int fa_val);
 
 /*
- * ãã¼ã¿è¿½å 
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *		const void *	fa_dat	è¿½å ãããã¼ã¿
- *		ECN_FBS_SSIZE_T	fa_len	è¿½å ããé·ã(byte)
- *	æ»ãå¤
- *		ER				0:ok, é0:NG
+ * データ追加
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *		const void *	fa_dat	追加するデータ
+ *		ECN_FBS_SSIZE_T	fa_len	追加する長さ(byte)
+ *	戻り値
+ *		ER				0:ok, 非0:NG
  */
 ER _ecn_fbs_add_data(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
 
 /*
- * ãã¼ã¿è¿½å (é åãèªåçã«æ¡å¼µãã)
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *		const void *	fa_dat	è¿½å ãããã¼ã¿
- *		ECN_FBS_SSIZE_T	fa_len	è¿½å ããé·ã(byte)
- *	æ»ãå¤
- *		ER				0:ok, é0:NG
+ * データ追加(領域を自動的に拡張する)
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *		const void *	fa_dat	追加するデータ
+ *		ECN_FBS_SSIZE_T	fa_len	追加する長さ(byte)
+ *	戻り値
+ *		ER				0:ok, 非0:NG
  */
 ER _ecn_fbs_add_data_ex(ECN_FBS_ID fa_id, const void *fa_dat, ECN_FBS_SSIZE_T fa_len);
 
 /*
- * ãã¼ã¿åå¾
- *	å¼æ°
- *		ecn_fbs_idå	ç¢ºä¿ããFBS-ID
- *		void *			fa_buf		åå¾ãããããã¡
- *		ECN_FBS_SSIZE_T	fa_maxlen	åå¾ããé·ã(byte)
- *		ECN_FBS_SSIZE_T	*p_len		åå¾ããé·ã(byte)
- *	æ»ãå¤
- *		ER				0:ok, é0:NG
+ * データ取得
+ *	引数
+ *		ecn_fbs_id型	確保したFBS-ID
+ *		void *			fa_buf		取得するバッファ
+ *		ECN_FBS_SSIZE_T	fa_maxlen	取得する長さ(byte)
+ *		ECN_FBS_SSIZE_T	*p_len		取得した長さ(byte)
+ *	戻り値
+ *		ER				0:ok, 非0:NG
  */
 ER _ecn_fbs_get_data(ECN_FBS_ID fa_id, void *fa_buf, ECN_FBS_SSIZE_T fa_maxlen,
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_lcl_task.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_lcl_task.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_lcl_task.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ä¸ä½éä¿¡ã¬ã¤ã¤ã¼å¦çã¿ã¹ã¯
+ *		ECHONET Lite 下位通信レイヤー処理タスク
  */
 
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_rename.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_rename.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_rename.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_task.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_task.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_task.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ã¿ã¹ã¯
+ *		ECHONET Lite タスク
  */
 
@@ -86,8 +71,8 @@
 #endif /* ECHONET_TASK_TIMEOUT */
 
-/* ã¢ããªã±ã¼ã·ã§ã³ãè¦æ±ããé»æã®ã·ã¼ã±ã³ã¹çªå· */
+/* アプリケーションが要求した電文のシーケンス番号 */
 static uint16_t g_api_tid;
 
-/* åä¿¡ã¡ãã»ã¼ã¸ãéæ¾ãããå¦ã */
+/* 受信メッセージを開放するか否か */
 static bool_t g_release_esv;
 
@@ -131,5 +116,5 @@
 			i += - ENOD_REMOTE_ID + 1;
 			if (from_app && (i < tnum_enodid)) {
-				/* éåæã®ãªã¢ã¼ããã¼ãã¯ãµã¼ãã¹å¦çã¿ã¹ã¯ã§å¦çãã */
+				/* 非同期のリモートノードはサービス処理タスクで処理する */
 				switch (eobjcb_table[i].profile->eobjatr) {
 				case EOBJ_SYNC_REMOTE_NODE:
@@ -179,12 +164,12 @@
 	ECN_FBS_ID fa_fbs_id, ECN_FBS_ID *fa_fbs_anno);
 
-/* ã¢ã¸ã¥ã¼ã«åæåãã©ã° */
+/* モジュール初期化フラグ */
 static uint8_t		m_eobjlist_need_init = 1;
 
-/* ã·ã¼ã±ã³ã¹çªå· */
+/* シーケンス番号 */
 static uint16_t		g_current_tid = 1;
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯ã®åæåï¼ã³ã³ã¹ãã©ã¯ã¿ç¸å½ï¼
+ *  ECHONET Lite タスクの初期化（コンストラクタ相当）
  */
 void echonet_task_init(intptr_t exinf)
@@ -195,5 +180,5 @@
 
 /*
- * ã¢ã¸ã¥ã¼ã«åæå
+ * モジュール初期化
  */
 static void _ecn_tsk_int_module_init(intptr_t exinf)
@@ -216,5 +201,5 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯ã®æ¬ä½
+ *  ECHONET Lite タスクの本体
  */
 void echonet_task(intptr_t fa_exinf)
@@ -240,5 +225,5 @@
 	}
 
-	/* ã¡ãã»ã¼ã¸ã«ã¼ã */
+	/* メッセージループ */
 	for (;;) {
 		a_prev = a_now;
@@ -278,11 +263,10 @@
 
 			switch (a_mdt.fbs_id.ptr->hdr.type) {
-			/* å
-é¨ä½¿ç¨ã¡ãã»ã¼ã¸ */
+			/* 内部使用メッセージ */
 			case ECN_MSG_INTERNAL:
 				_ecn_tsk_int_msg(fa_exinf, a_mdt.fbs_id);
 				break;
 
-			/* ECHONETç¨ã¡ãã»ã¼ã¸ */
+			/* ECHONET用メッセージ */
 			case ECN_MSG_ECHONET:
 				_ecn_tsk_ecn_msg(fa_exinf, a_mdt.fbs_id);
@@ -293,5 +277,5 @@
 			}
 
-			/* é åè§£æ¾ */
+			/* 領域解放 */
 			if (g_release_esv)
 				_ecn_fbs_del(a_mdt.fbs_id);
@@ -306,5 +290,5 @@
 
 /*
- * ã·ã¼ã±ã³ã¹çªå·çæ
+ * シーケンス番号生成
  */
 static uint16_t _ecn_tsk_new_tid(void)
@@ -314,16 +298,13 @@
 
 /*
- * è¦æ±é»æä½æ
- * å¼æ°
- * ECN_FBS_ID		*fp_fbs_id		åå¾ããFBS_IDã®æ ¼ç´å
-
- * ID				fa_seoj			éä¿¡å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * ID				fa_deoj			å®å
-ã®ECHONETãªãã¸ã§ã¯ãID
- * uint8_t			fa_epc			ãã­ããã£ã³ã¼ã
- * uint8_t			fa_pdc			ãã­ããã£å¤ãã¼ã¿ãµã¤ãº
- * const void		*p_edt			ãã­ããã£å¤ãã¼ã¿
- * ECN_SRV_CODE		fa_esv			ECHONET Light ãµã¼ãã¹ã³ã¼ã
+ * 要求電文作成
+ * 引数
+ * ECN_FBS_ID		*fp_fbs_id		取得したFBS_IDの格納先
+ * ID				fa_seoj			送信元のECHONETオブジェクトID
+ * ID				fa_deoj			宛先のECHONETオブジェクトID
+ * uint8_t			fa_epc			プロパティコード
+ * uint8_t			fa_pdc			プロパティ値データサイズ
+ * const void		*p_edt			プロパティ値データ
+ * ECN_SRV_CODE		fa_esv			ECHONET Light サービスコード
  */
 ER _ecn_tsk_mk_esv(ECN_FBS_ID *fp_fbs_id, ID fa_seoj, ID fa_deoj,
@@ -332,5 +313,5 @@
 	ER				a_ret;
 	int				a_size, i;
-	ECN_FBS_ID		a_fbs_id = { 0 };	/* è¦æ±é»æç¨ã¡ã¢ãª				*/
+	ECN_FBS_ID		a_fbs_id = { 0 };	/* 要求電文用メモリ				*/
 	T_ECN_EDT_HDR	a_ecn_hdp;			/* ecn_hdr+edata+ecn_prp 14byte	*/
 	ID				a_enodid;
@@ -339,29 +320,28 @@
 
 	if (!fp_fbs_id)
-		return E_PAR; /* åå¾ããFBS_IDã®æ ¼ç´å
-ãNULL */
+		return E_PAR; /* 取得したFBS_IDの格納先がNULL */
 	if (ECHONET_MEMPOOL_BLOCK_SIZE <= fa_pdc)
-		return E_PAR; /* ãã­ããã£å¤ãµã¤ãºãå¤§ãããã */
+		return E_PAR; /* プロパティ値サイズが大きすぎる */
 	if (!p_edt && 0 < fa_pdc)
-		return E_PAR; /* ãã­ããã£å¤ãµã¤ãºã1ä»¥ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */
+		return E_PAR; /* プロパティ値サイズが1以上なのにデータポインタがNULL */
 
 	if (fa_seoj <= EOBJ_NULL || tmax_eobjid < fa_seoj)
-		return E_NOEXS; /* ECHONETãªãã¸ã§ã¯ãIDãæªå®ç¾© */
+		return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */
 #ifndef ECHONET_CONTROLLER_EXTENTION
 	if (fa_deoj < EOBJ_NULL || tmax_eobjid < fa_deoj)
-		return E_NOEXS; /* ECHONETãªãã¸ã§ã¯ãIDãæªå®ç¾© */
+		return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */
 #else
 	if (fa_deoj < EOBJ_NULL || (tmax_eobjid + TNUM_AEOBJID) < fa_deoj)
-		return E_NOEXS; /* ECHONETãªãã¸ã§ã¯ãIDãæªå®ç¾© */
+		return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */
 #endif
 	if (fa_deoj == EOBJ_NULL && fa_esv == ESV_INFC)
-		return E_NOEXS; /* ECHONETãªãã¸ã§ã¯ãIDãæªå®ç¾© */
-
-	/* è¦æ±æå°ãµã¤ãºã®åå¾ */
+		return E_NOEXS; /* ECHONETオブジェクトIDが未定義 */
+
+	/* 要求最小サイズの取得 */
 	a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP);
 
-	/* è¦æ±é»æç¨ã¡ã¢ãªã®åå¾ */
+	/* 要求電文用メモリの取得 */
 	a_ret = _ecn_fbs_cre(a_size, &a_fbs_id);
-	if (a_ret != E_OK || !a_fbs_id.ptr) { /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */
 		ECN_DBG_PUT_3("_ecn_fbs_cre(%d) result = %d:%s",
 			a_size,
@@ -370,5 +350,5 @@
 	}
 
-	/* è¦æ±é»æè¨­å®						*/
+	/* 要求電文設定						*/
 	memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp));
 	a_ecn_hdp.ecn_hdr.ehd1 = ECN_EDH1_ECHONET_LITE;
@@ -377,9 +357,9 @@
 	memcpy(&a_ecn_hdp.edata.seoj, &eobjinib_table[fa_seoj - 1].eojx1, sizeof(a_ecn_hdp.edata.seoj));
 	a_ecn_hdp.edata.esv = fa_esv;
-	a_ecn_hdp.edata.opc = 1;		/* å¦çãã­ããã£æ° */
-	a_ecn_hdp.ecn_prp.epc = fa_epc;	/* ãã­ããã£ã³ã¼ã */
-	a_ecn_hdp.ecn_prp.pdc = fa_pdc;	/* ä»éãã¼ã¿ãµã¤ãº */
-
-	/* è¦æ±é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  */
+	a_ecn_hdp.edata.opc = 1;		/* 処理プロパティ数 */
+	a_ecn_hdp.ecn_prp.epc = fa_epc;	/* プロパティコード */
+	a_ecn_hdp.ecn_prp.pdc = fa_pdc;	/* 付随データサイズ */
+
+	/* 要求電文用メモリにデータ追加 */
 	a_ret = _ecn_fbs_add_data_ex(a_fbs_id, &a_ecn_hdp, a_size);
 	if (a_ret) {
@@ -390,5 +370,5 @@
 	}
 	if (0 < fa_pdc) {
-		/* ä»éãã¼ã¿è¿½å  */
+		/* 付随データ追加 */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_edt, fa_pdc);
 		if (a_ret) {
@@ -400,6 +380,6 @@
 	}
 	if (fa_deoj == 0) {
-		ECN_DBG_PUT("ãã«ãã­ã£ã¹ã");
-		/* fa_deoj == 0 : ãã«ãã­ã£ã¹ã */
+		ECN_DBG_PUT("マルチキャスト");
+		/* fa_deoj == 0 : マルチキャスト */
 		((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx1 = EOJ_X1_PROFILE;
 		((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj.eojx2 = EOJ_X2_NODE_PROFILE;
@@ -409,10 +389,10 @@
 	else if (fa_deoj <= tmax_eobjid) {
 		ECN_DBG_PUT_1("fa_deoj = %d", fa_deoj);
-		/* if (fa_deoj < 1 || tmax_eobjid < fa_deoj) â¦ã®ç°å¸¸ç³»ã¯é¢æ°åé ­ã§é¤å¤æ¸ã¿ã¨ãã */
+		/* if (fa_deoj < 1 || tmax_eobjid < fa_deoj) …の異常系は関数冒頭で除外済みとする */
 		a_eobj = &eobjinib_table[fa_deoj - 1];
 		memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &a_eobj->eojx1,
 			sizeof(((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj));
 
-		/* ãã¼ãã«ããæ¤ç´¢ */
+		/* テーブルから検索 */
 		a_fbs_id.ptr->hdr.target.id = ENOD_NOT_MATCH_ID;
 		a_enodid = (a_eobj->enodid == 0) ? fa_deoj : a_eobj->enodid;
@@ -454,5 +434,5 @@
 		ECN_ENOD_ID enodid;
 		ECN_DBG_PUT_1("fa_deoj = %d", fa_deoj);
-		/* ãªãã¸ã§ã¯ãIDããEOJã¨ãã¼ãIDãåå¾ */
+		/* オブジェクトIDからEOJとノードIDを取得 */
 		if(ecn_agent_get_eoj_enodid(fa_deoj, &eoj, &enodid)){
 			memcpy(&((T_EDATA *)a_fbs_id.ptr)->hdr.edata.deoj, &eoj,
@@ -487,10 +467,10 @@
 		a_fbs_id.ptr->hdr.reply.id = ENOD_API_ID;
 
-	/* æ­£å¸¸çµäº */
+	/* 正常終了 */
 	*fp_fbs_id = a_fbs_id;
 	return E_OK;
 
 lb_except:
-	/* ãã¼ã¿ä½æå¤±æãããé åè§£æ¾ */
+	/* データ作成失敗したら領域解放 */
 	if (a_fbs_id.ptr)
 		_ecn_fbs_del(a_fbs_id);
@@ -500,6 +480,5 @@
 
 /*
- * å
-é¨ä½¿ç¨ã¡ãã»ã¼ã¸
+ * 内部使用メッセージ
  */
 static void _ecn_tsk_int_msg(intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id)
@@ -532,5 +511,5 @@
 
 /*
- * ã¿ã¹ã¯åæå
+ * タスク初期化
  */
 static void _ecn_tsk_int_startup(intptr_t fa_exinf)
@@ -541,5 +520,5 @@
 		_ecn_tsk_int_module_init(fa_exinf);
 
-	/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡ */
+	/* インスタンスリスト通知の送信 */
 	a_ret = _ecn_tsk_ntf_inl(fa_exinf);
 	if (a_ret) {
@@ -549,10 +528,10 @@
 
 /*
- * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡
- * ECHONET-Lite_Ver.1.10_02.pdf p.43 å³4-1-4
+ * インスタンスリスト通知の送信
+ * ECHONET-Lite_Ver.1.10_02.pdf p.43 図4-1-4
  */
 ER _ecn_tsk_ntf_inl(intptr_t fa_exinf)
 {
-	const T_ECN_EOJ	a_seoj =	/* 0x01 : ä¸è¬ãã¼ãã0x02ï¼éä¿¡å°ç¨ãã¼ã */
+	const T_ECN_EOJ	a_seoj =	/* 0x01 : 一般ノード、0x02：送信専用ノード */
 		{ EOJ_X1_PROFILE, EOJ_X2_NODE_PROFILE, 0x01 };
 	const T_ECN_EOJ	a_deoj =
@@ -564,5 +543,5 @@
 	int			i;
 	uint8_t		a_count;
-	const EOBJCB	*enod = &eobjcb_table[0];	/* ã­ã¼ã«ã«ãã¼ã */
+	const EOBJCB	*enod = &eobjcb_table[0];	/* ローカルノード */
 	const EOBJINIB *eobj;
 
@@ -582,11 +561,11 @@
 
 		if (!a_eoj_ct) {
-			/* ã¡ã¢ãªç¢ºä¿ã»ãããæ ¼ç´ */
-			a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(); /* ã·ã¼ã±ã³ã¹çªå·çæ */
+			/* メモリ確保・ヘッダ格納 */
+			a_hdr.ecn_hdr.tid = (uint8_t)_ecn_tsk_new_tid(); /* シーケンス番号生成 */
 			a_ret = _ecn_fbs_cre(sizeof(a_hdr), &a_fbs);
-			if (a_ret != E_OK) /* ç¢ºä¿å¤±æ */
+			if (a_ret != E_OK) /* 確保失敗 */
 				goto lb_except;
 			a_ret = _ecn_fbs_add_data(a_fbs, &a_hdr, sizeof(a_hdr));
-			if (a_ret != E_OK) /* ãã¼ã¿è¿½å å¤±æ */
+			if (a_ret != E_OK) /* データ追加失敗 */
 				goto lb_except;
 
@@ -595,26 +574,26 @@
 			a_fbs.ptr->hdr.target.id = ENOD_MULTICAST_ID;
 			a_fbs.ptr->hdr.reply.id = ENOD_LOCAL_ID;
-			((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1;	/* ä»¶æ° */
-			/* ä»¶æ°ãæ ¼ç´ */
+			((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc = 1;	/* 件数 */
+			/* 件数を格納 */
 			a_count = (uint8_t)(enod->eobjcnt - i);
 			if (a_count >= ECN_IST_LST_EOJ_MAX_CT)
 				a_count = ECN_IST_LST_EOJ_MAX_CT;
 			a_ret = _ecn_fbs_add_data_ex(a_fbs, &a_count, sizeof(a_count));
-			if (a_ret != E_OK) /* ãã¼ã¿è¿½å å¤±æ */
+			if (a_ret != E_OK) /* データ追加失敗 */
 				goto lb_except;
 		}
-		/* ECHONETãªãã¸ã§ã¯ãID(3byte)ãæ ¼ç´ */
+		/* ECHONETオブジェクトID(3byte)を格納 */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs, &eobj->eojx1, sizeof(T_ECN_EOJ));
-		if (a_ret != E_OK) /* ãã¼ã¿è¿½å å¤±æ */
+		if (a_ret != E_OK) /* データ追加失敗 */
 			goto lb_except;
 
-		/* ä»¶æ°ã»edtãµã¤ãºå ç® */
+		/* 件数・edtサイズ加算 */
 		((T_EDATA *)a_fbs.ptr)->hdr.ecn_prp.pdc += sizeof(T_ECN_EOJ);
 		if (++a_eoj_ct < ECN_IST_LST_EOJ_MAX_CT)
 			continue;
 
-		/* 1ã¢ãã¦ã³ã¹ã§ã®ä¸éã«éããããä¸æ¦éä¿¡ */
+		/* 1アナウンスでの上限に達したら、一旦送信 */
 		a_ret = _ecn_tsk_snd_dtq(a_fbs, false);
-		if (a_ret != E_OK) /* ãã¼ã¿éä¿¡å¤±æ */
+		if (a_ret != E_OK) /* データ送信失敗 */
 			goto lb_except;
 		a_eoj_ct = 0;
@@ -622,7 +601,7 @@
 	}
 	if (a_eoj_ct) {
-		/* æªéä¿¡ãã¼ã¿ããã£ãããéä¿¡ */
+		/* 未送信データがあったら、送信 */
 		a_ret = _ecn_tsk_snd_dtq(a_fbs, false);
-		if (a_ret != E_OK) /* ãã¼ã¿éä¿¡å¤±æ */
+		if (a_ret != E_OK) /* データ送信失敗 */
 			goto lb_except;
 		a_fbs.ptr = 0;
@@ -668,6 +647,5 @@
 
 /*
- * 3byteã®eobjidã§é
-åä¸­ãæ¤ç´¢ãã
+ * 3byteのeobjidで配列中を検索する
  */
 const EOBJINIB *_ecn_eoj_fnd(const EOBJCB *fp_nod, const T_ECN_EOJ *fp_eoj)
@@ -702,5 +680,5 @@
 
 /*
- * é»æã®æ§æè¦ç´ æ°ã¨ãµã¤ãºã®ãã§ãã¯ãè¡ã
+ * 電文の構成要素数とサイズのチェックを行う
  */
 static bool_t _ecn_tsk_check_format(T_EDATA *edata, int len)
@@ -744,5 +722,5 @@
 
 /*
- * ECHONETç¨ã¡ãã»ã¼ã¸
+ * ECHONET用メッセージ
  */
 static void _ecn_tsk_ecn_msg(intptr_t fa_exinf, ECN_FBS_ID fa_fbs_id)
@@ -793,5 +771,5 @@
 	}
 
-	/* é»æã®æ§æè¦ç´ æ°ã¨ãµã¤ãºã®ãã§ãã¯ãè¡ã */
+	/* 電文の構成要素数とサイズのチェックを行う */
 	if (!_ecn_tsk_check_format((T_EDATA *)fa_fbs_id.ptr, fa_fbs_id.ptr->hdr.length)) {
 		ECN_DBG_PUT("_ecn_tsk_ecn_msg() format fault");
@@ -799,17 +777,16 @@
 	}
 
-	/* éä¿¡å®ãããã¼ããæ¤ç´¢ */
+	/* 送信宛からノードを検索 */
 	p_nod = _ecn_eno_fnd(fa_fbs_id.ptr->hdr.target.id);
-	/* éä¿¡å
-ãããã¼ããæ¤ç´¢ */
+	/* 送信元からノードを検索 */
 	p_snod = _ecn_eno_fnd(fa_fbs_id.ptr->hdr.sender.id);
 	if (p_snod != NULL) {
 		sobjatr = p_snod->profile->eobjatr;
-		/* ãã¼ããã­ãã¡ã¤ã«ã®å ´å */
+		/* ノードプロファイルの場合 */
 		if ((p_esv->edata.seoj.eojx1 == EOJ_X1_PROFILE)
 			&& (p_esv->edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) {
 			p_sobj = p_snod->profile;
 		}
-		/* æ©å¨ãªãã¸ã§ã¯ãã®å ´å */
+		/* 機器オブジェクトの場合 */
 		else {
 			p_sobj = _ecn_eoj_fnd(p_snod, &p_esv->edata.seoj);
@@ -821,6 +798,5 @@
 #endif
 
-	/* ãã¼ãå
-ã®æ©å¨ãªãã¸ã§ã¯ããæ¤ç´¢ */
+	/* ノード内の機器オブジェクトを検索 */
 	a_prc = false;
 	a_fwd = false;
@@ -828,20 +804,20 @@
 		eobjatr = p_nod->profile->eobjatr;
 		p_eoj = &p_esv->edata.deoj;
-		/* ãã¼ããã­ãã¡ã¤ã«ã®å ´å */
+		/* ノードプロファイルの場合 */
 		if ((p_eoj->eojx1 == EOJ_X1_PROFILE)
 			&& (p_eoj->eojx2 == EOJ_X2_NODE_PROFILE)) {
 			if ((p_eoj->eojx3 == p_nod->profile->eojx3)
 				|| (p_eoj->eojx3 == 0)) {
-				/* é»æå¦çå®è¡ */
+				/* 電文処理実行 */
 				if (_ecn_tsk_ecn_msg_main(fa_fbs_id, p_nod->profile, eobjatr, p_sobj, sobjatr) == 1)
 					a_fwd = true;
 				a_prc = true;
 			}
-			/* 0x74 ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼ã®å ´åã®å ´åã¯é»æç ´æ£ */
+			/* 0x74 プロパティ値通知（応答要）の場合の場合は電文破棄 */
 			else if (p_esv->edata.esv == ESV_INFC) {
 				a_prc = true;
 			}
 		}
-		/* æ©å¨ãªãã¸ã§ã¯ãã®å ´å */
+		/* 機器オブジェクトの場合 */
 		else {
 			count = p_nod->eobjcnt;
@@ -862,10 +838,9 @@
 				if (p_obj->eojx2 != p_eoj->eojx2)
 					continue;
-				/* ã¤ã³ã¹ã¿ã³ã¹ã³ã¼ããï¼ã®å ´åãåãã¯ã©ã¹ã®å
-¨ã¦ã®ã¤ã³ã¹ã¿ã³ã¹å® */
+				/* インスタンスコードが０の場合、同じクラスの全てのインスタンス宛 */
 				if ((p_obj->eojx3 != p_eoj->eojx3) && (p_eoj->eojx3 != 0))
 					continue;
 
-				/* é»æå¦çå®è¡ */
+				/* 電文処理実行 */
 				if (_ecn_tsk_ecn_msg_main(fa_fbs_id, p_obj, eobjatr, p_sobj, sobjatr) == 1)
 					a_fwd = true;
@@ -873,5 +848,5 @@
 			}
 
-			/* æ©å¨ãªãã¸ã§ã¯ããè¦ã¤ãããã0x74 ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼ã®å ´åã¯é»æç ´æ£ */
+			/* 機器オブジェクトが見つからず、0x74 プロパティ値通知（応答要）の場合は電文破棄 */
 			if (!a_prc && (p_esv->edata.esv == ESV_INFC)) {
 				a_prc = true;
@@ -879,16 +854,16 @@
 		}
 	}
-	/* æ©å¨ãªãã¸ã§ã¯ããè¦ã¤ãããªãå ´åã§ã */
+	/* 機器オブジェクトが見つからない場合でも */
 	if (!a_prc) {
-		/* é»æå¦çå®è¡ï¼å¿ç­åä¿¡ç¨ï¼ */
+		/* 電文処理実行（応答受信用） */
 		if (_ecn_tsk_ecn_msg_main(fa_fbs_id, NULL, EPC_NONE, p_sobj, sobjatr) == 1)
 			a_fwd = true;
 	}
 
-	/* å¿ç­ã®å ´åã¢ããªã±ã¼ã·ã§ã³ã«è»¢éãã */
+	/* 応答の場合アプリケーションに転送する */
 	if (a_fwd && (p_esv->ecn_hdr.tid == g_api_tid)) {
 		g_release_esv = false;
 
-		ECN_CAP_PUT_1("redirect ecn_svc_dataqueueid â ecn_api_dataqueueid (esv:0x%02X)",
+		ECN_CAP_PUT_1("redirect ecn_svc_dataqueueid → ecn_api_dataqueueid (esv:0x%02X)",
 			p_esv->edata.esv);
 		fa_fbs_id.ptr->hdr.target.id = ENOD_API_ID;
@@ -915,5 +890,5 @@
 
 	switch (p_esv->edata.esv) {
-	/* 0x60 ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼ */
+	/* 0x60 プロパティ値書き込み要求（応答不要） */
 	case ESV_SET_I:
 		if (!p_obj) {
@@ -927,5 +902,5 @@
 		break;
 
-	/* 0x61 ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼ */
+	/* 0x61 プロパティ値書き込み要求（応答要） */
 	case ESV_SET_C:
 		if (!p_obj) {
@@ -939,5 +914,5 @@
 		break;
 
-	/* 0x62 ãã­ããã£å¤èª­ã¿åºãè¦æ± */
+	/* 0x62 プロパティ値読み出し要求 */
 	case ESV_GET:
 		if (!p_obj) {
@@ -951,5 +926,5 @@
 		break;
 
-	/* 0x63 ãã­ããã£å¤éç¥è¦æ± */
+	/* 0x63 プロパティ値通知要求 */
 	case ESV_INF_REQ:
 		if (!p_obj) {
@@ -964,5 +939,5 @@
 		break;
 
-	/* 0x6E ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ± */
+	/* 0x6E プロパティ値書き込み・読み出し要求 */
 	case ESV_SET_GET:
 		if (!p_obj) {
@@ -976,34 +951,32 @@
 		break;
 
-	/* 0x74 ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼ */
+	/* 0x74 プロパティ値通知（応答要） */
 	case ESV_INFC:
 		if (!p_sobj)
-			/* éä¿¡å
-ãæªç¥ã®ä»ãã¼ãã§ãã£ãå ´åãå¿ç­ãè¿ã */
+			/* 送信元が未知の他ノードであった場合、応答を返す */
 			_ecn_tsk_eoj_res(fa_fbs_id, ESV_INFC_RES, ESV_INFC_RES); /* 0x7A; 0x7A */
 		else if (fromapp)
-			/* ã¢ããªã±ã¼ã·ã§ã³ããã®è¦æ±ã®å ´åããã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼ãéä¿¡ãã */
+			/* アプリケーションからの要求の場合、プロパティ値通知（応答要）を送信する */
 			_ecn_tsk_eoj_get(p_sobj, sobjatr, true, (EPC_RULE_GET|EPC_RULE_ANNO), fa_fbs_id, ESV_INFC, ESV_NOP); /* 0x74; 0 */
 		else
-			/* éä¿¡å
-ãæ¢ç¥ã®ä»ãã¼ãã§ãã£ãå ´åããã­ããã£å¤ãæ´æ°ãå¿ç­ãè¿ã */
+			/* 送信元が既知の他ノードであった場合、プロパティ値を更新し応答を返す */
 			_ecn_tsk_eoj_set(p_sobj, sobjatr, fromapp, true, fa_fbs_id, ESV_INFC_RES, ESV_INFC_RES, &a_fbs_anno); /* 0x7A; 0x7A */
 		result = 0;
 		break;
 
-	/* 0x60 ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­ä¸è¦ï¼ */
-	case ESV_SET_I_SNA:		/* 0x50 ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç­ */
+	/* 0x60 プロパティ値書き込み要求（応答不要） */
+	case ESV_SET_I_SNA:		/* 0x50 プロパティ値書き込み要求不可応答 */
 		result = 1;
 		break;
 
-	/* 0x61 ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ï¼å¿ç­è¦ï¼ */
-	case ESV_SET_RES:		/* 0x71 ãã­ããã£å¤æ¸ãè¾¼ã¿å¿ç­ */
-	case ESV_SET_C_SNA:		/* 0x51 ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±ä¸å¯å¿ç­ */
+	/* 0x61 プロパティ値書き込み要求（応答要） */
+	case ESV_SET_RES:		/* 0x71 プロパティ値書き込み応答 */
+	case ESV_SET_C_SNA:		/* 0x51 プロパティ値書き込み要求不可応答 */
 		result = 1;
 		break;
 
-	/* 0x62 ãã­ããã£å¤èª­ã¿åºãè¦æ± */
-	case ESV_GET_RES:		/* 0x72 ãã­ããã£å¤èª­ã¿åºãå¿ç­ */
-	case ESV_GET_SNA:		/* 0x52 ãã­ããã£å¤èª­ã¿åºãä¸å¯å¿ç­ */
+	/* 0x62 プロパティ値読み出し要求 */
+	case ESV_GET_RES:		/* 0x72 プロパティ値読み出し応答 */
+	case ESV_GET_SNA:		/* 0x52 プロパティ値読み出し不可応答 */
 		if (!p_sobj) {
 			ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.",
@@ -1016,7 +989,7 @@
 		break;
 
-	/* 0x63 ãã­ããã£å¤éç¥è¦æ± */
-	case ESV_INF:			/* 0x73 ãã­ããã£å¤éç¥ */
-	case ESV_INF_SNA:		/* 0x53 ãã­ããã£å¤éç¥ä¸å¯å¿ç­ */
+	/* 0x63 プロパティ値通知要求 */
+	case ESV_INF:			/* 0x73 プロパティ値通知 */
+	case ESV_INF_SNA:		/* 0x53 プロパティ値通知不可応答 */
 		if (!p_sobj) {
 			ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.",
@@ -1029,7 +1002,7 @@
 		break;
 
-	/* 0x6E ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãè¦æ± */
-	case ESV_SET_GET_RES:	/* 0x7E ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãå¿ç­ */
-	case ESV_SET_GET_SNA:	/* 0x5E ãã­ããã£å¤æ¸ãè¾¼ã¿ã»èª­ã¿åºãä¸å¯å¿ç­ */
+	/* 0x6E プロパティ値書き込み・読み出し要求 */
+	case ESV_SET_GET_RES:	/* 0x7E プロパティ値書き込み・読み出し応答 */
+	case ESV_SET_GET_SNA:	/* 0x5E プロパティ値書き込み・読み出し不可応答 */
 		if (!p_sobj) {
 			ECN_DBG_PUT_1("_ecn_tsk_ecn_msg_main() eoj %06X not found.",
@@ -1042,6 +1015,6 @@
 		break;
 
-	/* 0x74 ãã­ããã£å¤éç¥ï¼å¿ç­è¦ï¼ */
-	case ESV_INFC_RES:		/* 0x7A ãã­ããã£å¤éç¥å¿ç­ */
+	/* 0x74 プロパティ値通知（応答要） */
+	case ESV_INFC_RES:		/* 0x7A プロパティ値通知応答 */
 		result = 1;
 		break;
@@ -1053,5 +1026,5 @@
 	}
 
-	/* ãã­ããã£éç¥è¦æ±ãéä¿¡ */
+	/* プロパティ通知要求を送信 */
 	if (a_fbs_anno.ptr != NULL) {
 		ER a_ret = _ecn_tsk_snd_dtq(a_fbs_anno, true);
@@ -1133,13 +1106,11 @@
 
 /*
- * ECN_FBS_IDããT_ECN_PRP1ä»¶ã¨ãã®ä»éãã¼ã¿(edt)ãæ½åºããedtã®ãã¤ã³ã¿ãè¿ã
- * å¼æ°
- * ECN_FBS_ID fa_fbs_id					èª­ã¿åãFBS
- * T_ECN_PRP *fp_prp					epc+pdcã®æ ¼ç´å
-
- * T_ECN_SUB_BLK * const fp_prev_blk	ååä½¿ã£ãã¡ã¢ãªã®ãã¤ã³ã¿(ç¡ããã°0)
- * æ­£å¸¸ï¼ãã¤ã³ã¿ NG:0
- * ãã¤ã³ã¿ã¯_ecn_fbs_dtq_rel()ã§è§£æ¾ããå¿
-è¦ããã
+ * ECN_FBS_IDからT_ECN_PRP1件とその付随データ(edt)を抽出し、edtのポインタを返す
+ * 引数
+ * ECN_FBS_ID fa_fbs_id					読み取るFBS
+ * T_ECN_PRP *fp_prp					epc+pdcの格納先
+ * T_ECN_SUB_BLK * const fp_prev_blk	前回使ったメモリのポインタ(無ければ0)
+ * 正常：ポインタ NG:0
+ * ポインタは_ecn_fbs_dtq_rel()で解放する必要がある
  */
 static T_ECN_SUB_BLK *_ecn_tsk_get_prp_pce(ECN_FBS_ID fa_fbs_id, T_ECN_PRP *fp_prp,
@@ -1150,7 +1121,7 @@
 	ER		a_ret;
 
-	/* ãã­ããã£ç¨ã¡ã¢ãªã®åå¾ */
+	/* プロパティ用メモリの取得 */
 	if (fp_prev_blk) {
-		p_blk = fp_prev_blk; /* ååä½¿ã£ãã¡ã¢ãªããããªããåå©ç¨ãã */
+		p_blk = fp_prev_blk; /* 前回使ったメモリがあるなら、再利用する */
 	}
 	else {
@@ -1158,10 +1129,10 @@
 		if (!p_blk) {
 			ECN_DBG_PUT("_ecn_fbs_dtq_get() fault.");
-			return 0;	/* ã¡ã¢ãªä¸è¶³ */
+			return 0;	/* メモリ不足 */
 		}
 	}
 	memset(p_blk, 0, sizeof(*p_blk));
 
-	/* T_ECN_PRPé¨å(epc,pdc)ãèª­ã¿åã */
+	/* T_ECN_PRP部分(epc,pdc)を読み取る */
 	a_size = 0;
 	a_ret = _ecn_fbs_get_data(fa_fbs_id, fp_prp, sizeof(*fp_prp), &a_size);
@@ -1172,5 +1143,5 @@
 
 	if (0 < fp_prp->pdc) {
-		/* ä»éãã¼ã¿é¨å(edt)ãèª­ã¿åã */
+		/* 付随データ部分(edt)を読み取る */
 		a_size = 0;
 		a_ret = _ecn_fbs_get_data(fa_fbs_id, p_blk, fp_prp->pdc, &a_size);
@@ -1184,5 +1155,5 @@
 
 lb_except:
-	/* ãã­ããã£ç¨ã¡ã¢ãªè§£æ¾ */
+	/* プロパティ用メモリ解放 */
 	if (p_blk && !fp_prev_blk)
 		_ecn_fbs_dtq_rel(p_blk);
@@ -1194,5 +1165,5 @@
 	ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count,
 	int *p_sw_ok);
-/* ãã­ããã£å¤æ¸ãè¾¼ã¿å®è¡ */
+/* プロパティ値書き込み実行 */
 static ER _ecn_tsk_eoj_set_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_fromapp, bool_t fa_update,
 	ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, ECN_FBS_ID *fa_fbs_anno, int a_count,
@@ -1210,5 +1181,5 @@
 
 	for (i = 0; i < a_count; i++) {
-		/* ECN_FBS_IDããT_ECN_PRP1ä»¶ã¨ãã®ä»éãã¼ã¿ãæ½åºãããã®ãã¤ã³ã¿ãè¿ã */
+		/* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出し、そのポインタを返す */
 		p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt);
 		if (!p_edt) {
@@ -1217,7 +1188,7 @@
 		}
 
-		/* ãã­ããã£ã®è¨­å® set_prp(obj, reqp, resp) */
+		/* プロパティの設定 set_prp(obj, reqp, resp) */
 		a_size = a_prp.pdc;
-		/* obj,epcã«å¯¾å¿ããseté¢æ°ãå¼ã¶ */
+		/* obj,epcに対応するset関数を呼ぶ */
 		a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc);
 		if ((a_eprp != NULL)
@@ -1241,11 +1212,11 @@
 				fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3,
 				a_prp.epc, p_edt->payload[0], a_size);
-			*p_sw_ok = 0;	/* ãã­ããã£è¨­å®å¤±æ */
-			/* å¿ç­å¦çã®å ´åEDTã¯è¨­å®ããªã */
+			*p_sw_ok = 0;	/* プロパティ設定失敗 */
+			/* 応答処理の場合EDTは設定しない */
 			if (fa_update)
 				a_prp.pdc = 0;
 		}
 
-		/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */
+		/* 応答電文用メモリにデータ追加(epc,pdcの2byte) */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp));
 		if (a_ret) {
@@ -1255,5 +1226,5 @@
 
 		if (0 < a_prp.pdc) {
-			/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (edt n-byte) */
+			/* 応答電文用メモリにデータ追加(edt n-byte) */
 			a_ret = _ecn_fbs_add_data_ex(a_fbs_res, p_edt->payload, a_prp.pdc);
 			if (a_ret) {
@@ -1264,5 +1235,5 @@
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc ++;
 
-		/* ãã­ããã£éç¥ããã®å ´å */
+		/* プロパティ通知ありの場合 */
 		if (a_anno && (a_ans == a_size)) {
 			if (fa_fbs_anno->ptr == NULL) {
@@ -1282,5 +1253,5 @@
 
 lb_finally:
-	/* ãã­ããã£ç¨ã¡ã¢ãªè§£æ¾ */
+	/* プロパティ用メモリ解放 */
 	if (p_edt)
 		_ecn_fbs_dtq_rel(p_edt);
@@ -1291,10 +1262,10 @@
 static ER _ecn_tsk_eoj_get_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access,
 	ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok);
-/* ãã­ããã£å¤èª­ã¿åºãå®è¡ */
+/* プロパティ値読み出し実行 */
 static ER _ecn_tsk_eoj_get_main(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access,
 	ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok)
 {
 	T_ECN_SUB_BLK	*p_edt		=	0;
-	void				*p_prp_buf	=	0;	/* ä½æ¥­é å */
+	void				*p_prp_buf	=	0;	/* 作業領域 */
 	const EPRPINIB		*a_eprp;
 	ER					a_ret		=	E_SYS;
@@ -1304,13 +1275,13 @@
 	((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0;
 
-	/* ä½æ¥­é åç¢ºä¿ */
+	/* 作業領域確保 */
 	p_prp_buf = _ecn_fbs_dtq_get(ECHONET_MEMPOOL_BLOCK_SIZE);
 	if (!p_prp_buf) {
 		ECN_DBG_PUT_2("_ecn_fbs_dtq_get() result = %d:%s", a_ret, itron_strerror(a_ret));
-		goto lb_except;	/* ã¡ã¢ãªä¸è¶³ */
+		goto lb_except;	/* メモリ不足 */
 	}
 
 	for (i = 0; i < a_count; i++) {
-		/* ECN_FBS_IDããT_ECN_PRP1ä»¶ã¨ãã®ä»éãã¼ã¿ãæ½åº */
+		/* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */
 		p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt);
 		if (!p_edt) {
@@ -1319,7 +1290,7 @@
 		}
 
-		/* ãã­ããã£ã®åå¾ get_eprp(obj, reqp, resp, size) */
+		/* プロパティの取得 get_eprp(obj, reqp, resp, size) */
 		memset(p_prp_buf, 0, ECHONET_MEMPOOL_BLOCK_SIZE);
-		/* obj,epcã«å¯¾å¿ããgeté¢æ°ãå¼ã¶ */
+		/* obj,epcに対応するget関数を呼ぶ */
 		a_eprp = _ecn_tsk_eoj_get_property(fp_obj, a_prp.epc);
 		if ((a_eprp != NULL) && (((a_eprp->eprpatr & fa_access) != 0) && ((fa_eobjatr == EOBJ_LOCAL_NODE) || fa_forward))) {
@@ -1332,10 +1303,10 @@
 			a_prp.pdc = (uint8_t)a_ans;
 		} else {
-			*p_sw_ok = 0;	/* ãã­ããã£åå¾å¤±æ */
+			*p_sw_ok = 0;	/* プロパティ取得失敗 */
 			a_ans = 0;
 			a_prp.pdc = 0;
 		}
 
-		/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */
+		/* 応答電文用メモリにデータ追加(epc,pdcの2byte) */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp));
 		if (a_ret) {
@@ -1344,5 +1315,5 @@
 		}
 		if (0 < a_ans) {
-			/* ä»éãã¼ã¿è¿½å  */
+			/* 付随データ追加 */
 			a_ret = _ecn_fbs_add_data_ex(a_fbs_res, p_prp_buf, a_ans);
 			if (a_ret) {
@@ -1360,9 +1331,9 @@
 
 lb_finally:
-	/* ä½æ¥­é åè§£æ¾ */
+	/* 作業領域解放 */
 	if (p_prp_buf)
 		_ecn_fbs_dtq_rel(p_prp_buf);
 
-	/* ãã­ããã£ç¨ã¡ã¢ãªè§£æ¾ */
+	/* プロパティ用メモリ解放 */
 	if (p_edt)
 		_ecn_fbs_dtq_rel(p_edt);
@@ -1372,9 +1343,9 @@
 
 static ER _ecn_tsk_eoj_res_main(ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok);
-/* ãã­ããã£å¤èª­ã¿åºãå®è¡ */
+/* プロパティ値読み出し実行 */
 static ER _ecn_tsk_eoj_res_main(ECN_FBS_ID fa_fbs_id, ECN_FBS_ID a_fbs_res, int a_count, int *p_sw_ok)
 {
 	T_ECN_SUB_BLK	*p_edt		=	0;
-	void				*p_prp_buf	=	0;	/* ä½æ¥­é å */
+	void				*p_prp_buf	=	0;	/* 作業領域 */
 	ER					a_ret		=	E_SYS;
 	T_ECN_PRP			a_prp;			/* epc+pdc */
@@ -1383,13 +1354,13 @@
 	((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0;
 
-	/* ä½æ¥­é åç¢ºä¿ */
+	/* 作業領域確保 */
 	p_prp_buf = _ecn_fbs_dtq_get(ECHONET_MEMPOOL_BLOCK_SIZE);
 	if (!p_prp_buf) {
 		ECN_DBG_PUT_2("_ecn_fbs_dtq_get() result = %d:%s", a_ret, itron_strerror(a_ret));
-		goto lb_except;	/* ã¡ã¢ãªä¸è¶³ */
+		goto lb_except;	/* メモリ不足 */
 	}
 
 	for (i = 0; i < a_count; i++) {
-		/* ECN_FBS_IDããT_ECN_PRP1ä»¶ã¨ãã®ä»éãã¼ã¿ãæ½åº */
+		/* ECN_FBS_IDからT_ECN_PRP1件とその付随データを抽出 */
 		p_edt = _ecn_tsk_get_prp_pce(fa_fbs_id, &a_prp, p_edt);
 		if (!p_edt) {
@@ -1400,5 +1371,5 @@
 		a_prp.pdc = 0;
 
-		/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å (epc,pdcã®2byte) */
+		/* 応答電文用メモリにデータ追加(epc,pdcの2byte) */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_prp, sizeof(a_prp));
 		if (a_ret) {
@@ -1415,9 +1386,9 @@
 
 lb_finally:
-	/* ä½æ¥­é åè§£æ¾ */
+	/* 作業領域解放 */
 	if (p_prp_buf)
 		_ecn_fbs_dtq_rel(p_prp_buf);
 
-	/* ãã­ããã£ç¨ã¡ã¢ãªè§£æ¾ */
+	/* プロパティ用メモリ解放 */
 	if (p_edt)
 		_ecn_fbs_dtq_rel(p_edt);
@@ -1426,5 +1397,5 @@
 }
 
-/* ãã­ããã£å¤èª­ã¿é£ã°ãå®è¡ */
+/* プロパティ値読み飛ばし実行 */
 static ER _ecn_tsk_eoj_skip_main(const EOBJINIB *fp_obj, ECN_FBS_ID fa_fbs_id,
 	int a_count);
@@ -1437,5 +1408,5 @@
 
 	for (i = 0; i < a_count; i++) {
-		/* T_ECN_PRPé¨å(epc,pdc)ãèª­ã¿åã */
+		/* T_ECN_PRP部分(epc,pdc)を読み取る */
 		a_size = 0;
 		a_ret = _ecn_fbs_get_data(fa_fbs_id, &a_prp, sizeof(a_prp), &a_size);
@@ -1445,5 +1416,5 @@
 		}
 
-		/* pdcåèª­ã¿é£ã°ã */
+		/* pdc分読み飛ばし */
 		a_ret = _ecn_fbs_seek_rpos(fa_fbs_id, a_prp.pdc);
 		if (a_ret) {
@@ -1464,5 +1435,5 @@
 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv,
 	T_ECN_EDT_HDR const *fp_req_esv);
-/* å¿ç­é»æè¨­å® */
+/* 応答電文設定 */
 static void _ecn_tsk_mk_rsp_hdr(const EOBJINIB *fp_obj, T_ECN_EDT_HDR *fp_rsp_esv,
 	T_ECN_EDT_HDR const *fp_req_esv)
@@ -1489,7 +1460,7 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å® */
+/* 応答電文用fbs設定 */
 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr);
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 static void _ecn_tsk_set_rsp_fbs(ECN_FBS_ID fa_rsp_fbs, T_ECN_FST_BLK const *fp_req_ptr)
 {
@@ -1500,5 +1471,5 @@
 }
 
-/* ãã­ããã£å¤æ¸ãè¾¼ã¿è¦æ±	*/
+/* プロパティ値書き込み要求	*/
 static void _ecn_tsk_eoj_set(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_fromapp, bool_t fa_update,
 	ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv,
@@ -1515,13 +1486,13 @@
 	memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp));
 
-	/* å¿ç­æå¤§ãµã¤ãºã®åå¾ */
+	/* 応答最大サイズの取得 */
 	a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªã®åå¾ */
+	/* 応答電文用メモリの取得 */
 	a_ret = _ecn_fbs_cre(a_size, &a_fbs_res);
-	if (a_ret != E_OK || !a_fbs_res.ptr) /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */
 		return;
 
-	/* å¿ç­é»æè¨­å® */
+	/* 応答電文設定 */
 	if(p_req_esv->edata.deoj.eojx3 != 0)
 		_ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv);
@@ -1529,10 +1500,7 @@
 		_ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv);
 
-	/* æ­£å¸¸æã®å¿ç­é»æããã­ããã£å¤éç¥å¿ç­ã®å ´å */
+	/* 正常時の応答電文がプロパティ値通知応答の場合 */
 	if (fa_res_esv == ESV_INFC_RES) {
-		/* éä¿¡å
-ã¨å®å
-ãå
-¥ãæ¿ã */
+		/* 送信元と宛先を入れ替え */
 		eoj = a_ecn_hdp.edata.seoj;
 		a_ecn_hdp.edata.seoj = a_ecn_hdp.edata.deoj;
@@ -1540,7 +1508,7 @@
 	}
 
-	f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå */
-
-	/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  */
+	f_put_fbs_eoj("_ecn_tsk_eoj_set", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */
+
+	/* 応答電文用メモリにデータ追加 */
 	a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp,
 				sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata));
@@ -1548,14 +1516,13 @@
 		goto lb_except;
 
-	/* payloadå
-é ­ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèª­ã¿é£ã°ã */
+	/* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */
 	a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp));
 	if (a_ret)
 		goto lb_except;
 
-	/* å¿ç­é»æç¨fbsè¨­å® */
+	/* 応答電文用fbs設定 */
 	_ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr);
 
-	/* ãã­ããã£å¤æ¸ãè¾¼ã¿å®è¡ */
+	/* プロパティ値書き込み実行 */
 	a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_fromapp, fa_update, fa_fbs_id, a_fbs_res,
 		fa_fbs_anno, p_req_esv->edata.opc, &a_sw_ok);
@@ -1563,23 +1530,23 @@
 		goto lb_except;
 
-	/* å¿ç­è¦ã®å ´å */
+	/* 応答要の場合 */
 	if (a_sw_ok) {
 		if (!fa_res_esv) {
-			/* å¿ç­ä¸è¦ã®å ´å */
+			/* 応答不要の場合 */
 			_ecn_fbs_del(a_fbs_res);
 			goto lb_finally;
 		}
-		/* è¨­å®å¦çæå */
+		/* 設定処理成功 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv;
 	} else {
 		if (!fa_sna_esv) {
-			/* å¿ç­ä¸è¦ã®å ´å */
+			/* 応答不要の場合 */
 			_ecn_fbs_del(a_fbs_res);
 			goto lb_finally;
 		}
-		/* è¨­å®å¦çå¤±æ */
+		/* 設定処理失敗 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv;
 	}
-	/* å¿ç­éä¿¡ */
+	/* 応答送信 */
 	a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false);
 	if (a_ret == E_OK)
@@ -1587,5 +1554,5 @@
 
 lb_except:
-	/* ãã¼ã¿éä¿¡å¤±æãããé åè§£æ¾ */
+	/* データ送信失敗したら領域解放 */
 	if (a_fbs_res.ptr)
 		_ecn_fbs_del(a_fbs_res);
@@ -1595,5 +1562,5 @@
 }
 
-/* ãã­ããã£å¤èª­ã¿åºãè¦æ±	*/
+/* プロパティ値読み出し要求	*/
 static void _ecn_tsk_eoj_get(const EOBJINIB *fp_obj, ATR fa_eobjatr, bool_t fa_forward, ATR fa_access,
 	ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv, ECN_SRV_CODE fa_sna_esv)
@@ -1608,15 +1575,15 @@
 	memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp));
 
-	/* åæåå¾ãµã¤ãº */
+	/* 初期取得サイズ */
 	a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªã®åå¾ */
+	/* 応答電文用メモリの取得 */
 	a_ret = _ecn_fbs_cre(a_size, &a_fbs_res);
-	if (a_ret != E_OK || !a_fbs_res.ptr) { /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */
 		ECN_DBG_PUT_2("_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret));
 		goto lb_finally;
 	}
 
-	/* å¿ç­é»æè¨­å® */
+	/* 応答電文設定 */
 	if(p_req_esv->edata.deoj.eojx3 != 0)
 		_ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv);
@@ -1624,7 +1591,7 @@
 		_ecn_tsk_mk_rsp_hdr(fp_obj, &a_ecn_hdp, p_req_esv);
 
-	f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå */
-
-	/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  */
+	f_put_fbs_eoj("_ecn_tsk_eoj_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */
+
+	/* 応答電文用メモリにデータ追加 */
 	a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp,
 			sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata));
@@ -1634,6 +1601,5 @@
 	}
 
-	/* payloadå
-é ­ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèª­ã¿é£ã°ã */
+	/* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */
 	a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp));
 	if (a_ret) {
@@ -1642,8 +1608,8 @@
 	}
 
-	/* å¿ç­é»æç¨fbsè¨­å® */
+	/* 応答電文用fbs設定 */
 	_ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr);
 
-	/* ãã­ããã£å¤èª­ã¿è¾¼ã¿å®è¡ */
+	/* プロパティ値読み込み実行 */
 	a_ret = _ecn_tsk_eoj_get_main(fp_obj, fa_eobjatr, fa_forward, fa_access, fa_fbs_id, a_fbs_res,
 		((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok);
@@ -1655,25 +1621,25 @@
 	if (a_sw_ok) {
 		if (!fa_res_esv) {
-			/* å¿ç­ä¸è¦ã®å ´å */
+			/* 応答不要の場合 */
 			_ecn_fbs_del(a_fbs_res);
 			goto lb_finally;
 		}
-		/* è¨­å®å¦çæå */
+		/* 設定処理成功 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv;
 	} else {
 		if (!fa_sna_esv) {
-			/* å¿ç­ä¸è¦ã®å ´å */
+			/* 応答不要の場合 */
 			_ecn_fbs_del(a_fbs_res);
 			goto lb_finally;
 		}
-		/* è¨­å®å¦çå¤±æ */
+		/* 設定処理失敗 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv;
 
-		/* ä¸å¯å¿ç­ã®å ´åã¯åå¥éä¿¡ãã */
+		/* 不可応答の場合は個別送信する */
 		if (a_fbs_res.ptr->hdr.target.id == ENOD_MULTICAST_ID) {
 			a_fbs_res.ptr->hdr.target.id = fa_fbs_id.ptr->hdr.sender.id;
 		}
 	}
-	/* å¿ç­éä¿¡ */
+	/* 応答送信 */
 	a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false);
 	if (a_ret != E_OK) {
@@ -1684,5 +1650,5 @@
 
 lb_except:
-	/* ãã¼ã¿éä¿¡å¤±æãããé åè§£æ¾ */
+	/* データ送信失敗したら領域解放 */
 	if (a_fbs_res.ptr)
 		_ecn_fbs_del(a_fbs_res);
@@ -1692,5 +1658,5 @@
 }
 
-/* ãã­ããã£å¤èª­ã¿åºãè¦æ±	*/
+/* プロパティ値読み出し要求	*/
 static void _ecn_tsk_eoj_res(ECN_FBS_ID fa_fbs_id, ECN_SRV_CODE fa_res_esv,
 	ECN_SRV_CODE fa_sna_esv)
@@ -1705,20 +1671,20 @@
 	memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp));
 
-	/* åæåå¾ãµã¤ãº */
+	/* 初期取得サイズ */
 	a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªã®åå¾ */
+	/* 応答電文用メモリの取得 */
 	a_ret = _ecn_fbs_cre(a_size, &a_fbs_res);
-	if (a_ret != E_OK || !a_fbs_res.ptr) { /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_res.ptr) { /* 確保失敗 */
 		ECN_DBG_PUT_2("_ecn_fbs_cre() result = %d:%s", a_ret, itron_strerror(a_ret));
 		goto lb_finally;
 	}
 
-	/* å¿ç­é»æè¨­å®						*/
+	/* 応答電文設定						*/
 	_ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv);
 
-	f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå */
-
-	/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  */
+	f_put_fbs_eoj("_ecn_tsk_eoj_res", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */
+
+	/* 応答電文用メモリにデータ追加 */
 	a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp,
 			sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata));
@@ -1728,6 +1694,5 @@
 	}
 
-	/* payloadå
-é ­ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèª­ã¿é£ã°ã */
+	/* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */
 	a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp));
 	if (a_ret) {
@@ -1736,8 +1701,8 @@
 	}
 
-	/* å¿ç­é»æç¨fbsè¨­å® */
+	/* 応答電文用fbs設定 */
 	_ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr);
 
-	/* ãã­ããã£å¤èª­ã¿è¾¼ã¿å®è¡ */
+	/* プロパティ値読み込み実行 */
 	a_ret = _ecn_tsk_eoj_res_main(fa_fbs_id, a_fbs_res,
 		((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc, &a_sw_ok);
@@ -1749,20 +1714,20 @@
 	if (a_sw_ok) {
 		if (!fa_res_esv) {
-			/* å¿ç­ä¸è¦ã®å ´å */
+			/* 応答不要の場合 */
 			_ecn_fbs_del(a_fbs_res);
 			goto lb_finally;
 		}
-		/* è¨­å®å¦çæå */
+		/* 設定処理成功 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv;
 	} else {
 		if (!fa_sna_esv) {
-			/* å¿ç­ä¸è¦ã®å ´å */
+			/* 応答不要の場合 */
 			_ecn_fbs_del(a_fbs_res);
 			goto lb_finally;
 		}
-		/* è¨­å®å¦çå¤±æ */
+		/* 設定処理失敗 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv;
 	}
-	/* å¿ç­éä¿¡ */
+	/* 応答送信 */
 	a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false);
 	if (a_ret != E_OK) {
@@ -1773,5 +1738,5 @@
 
 lb_except:
-	/* ãã¼ã¿éä¿¡å¤±æãããé åè§£æ¾ */
+	/* データ送信失敗したら領域解放 */
 	if (a_fbs_res.ptr)
 		_ecn_fbs_del(a_fbs_res);
@@ -1788,9 +1753,9 @@
 	T_ECN_EDT_HDR	a_ecn_hdp;
 	ECN_FBS_ID		a_fbs_res	= { 0 };
-	int				a_rdprp_wrpos;	/*	ãã­ããã£èª­ã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããä½ç½®	*/
+	int				a_rdprp_wrpos;	/*	プロパティ読み込み件数書き込み時のヘッド位置	*/
 	ER		a_ret;
 	int		i, a_size, a_rdlen;
 	int		a_sw_ok = 1;
-	int		a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc;	/* å¦çãã­ããã£æ° */
+	int		a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc;	/* 処理プロパティ数 */
 
 	memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp));
@@ -1799,13 +1764,13 @@
 		fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3);
 
-	/* åæåå¾ãµã¤ãº */
+	/* 初期取得サイズ */
 	a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªã®åå¾ */
+	/* 応答電文用メモリの取得 */
 	a_ret = _ecn_fbs_cre(a_size, &a_fbs_res);
-	if (a_ret != E_OK || !a_fbs_res.ptr) /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_res.ptr) /* 確保失敗 */
 		goto lb_finally;
 
-	/* å¿ç­é»æè¨­å® */
+	/* 応答電文設定 */
 	if(p_req_esv->edata.deoj.eojx3 != 0)
 		_ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv);
@@ -1814,7 +1779,7 @@
 	a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY);
 
-	f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj ãããã°åºå */
-
-	/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  */
+	f_put_fbs_eoj("_ecn_tsk_eoj_set_get", "fa_fbs_id", fa_fbs_id); /* s/deoj デバッグ出力 */
+
+	/* 応答電文用メモリにデータ追加 */
 	a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &a_ecn_hdp,
 				sizeof(a_ecn_hdp.ecn_hdr) + sizeof(a_ecn_hdp.edata));
@@ -1822,14 +1787,13 @@
 		goto lb_except;
 
-	/* payloadå
-é ­ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèª­ã¿é£ã°ã */
+	/* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */
 	a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp));
 	if (a_ret)
 		goto lb_except;
 
-	/* å¿ç­é»æç¨fbsè¨­å® */
+	/* 応答電文用fbs設定 */
 	_ecn_tsk_set_rsp_fbs(a_fbs_res, fa_fbs_id.ptr);
 
-	/* ãã­ããã£å¤æ¸ãè¾¼ã¿å®è¡ */
+	/* プロパティ値書き込み実行 */
 	a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_fromapp, false, fa_fbs_id, a_fbs_res,
 		fa_fbs_anno, a_count, &a_sw_ok);
@@ -1844,6 +1808,6 @@
 		(a_sw_ok ? "true" : "false"));
 
-	/* æ¬¡ã®ä»¶æ°ãèª­ã¿åã(1byte)						*/
-	/* â ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet]	*/
+	/* 次の件数を読み取る(1byte)						*/
+	/* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet]	*/
 	a_rdlen = i = 0;
 	a_ret = _ecn_fbs_get_data(fa_fbs_id, &i, 1, &a_rdlen);
@@ -1852,18 +1816,17 @@
 	a_count = *(uint8_t *)&i;
 
-	/* ãã­ããã£èª­ã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ
-å ±ãè¨é² */
+	/* プロパティ読み込み件数書き込み時のヘッド情報を記録 */
 	a_rdprp_wrpos = _ecn_fbs_get_datalen(a_fbs_res);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªã«ãã¼ã¿è¿½å  (OPCGet 1byte) */
+	/* 応答電文用メモリにデータ追加 (OPCGet 1byte) */
 	a_ret = _ecn_fbs_add_data_ex(a_fbs_res, &i, 1);
 	if (a_ret)
 		goto lb_except;
 
-	/* ãã®æç¹ã§ã®å¿ç­é»æä¸­ãã­ããã£ä»¶æ°ãè¨é² */
+	/* この時点での応答電文中プロパティ件数を記録 */
 	i = ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc;
 	((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = 0;
 
-	/* ãã­ããã£å¤èª­ã¿è¾¼ã¿å®è¡ */
+	/* プロパティ値読み込み実行 */
 	a_ret = _ecn_tsk_eoj_get_main(fp_obj, fa_eobjatr, false, EPC_RULE_GET, fa_fbs_id, a_fbs_res,
 		a_count, &a_sw_ok);
@@ -1879,20 +1842,19 @@
 		(a_sw_ok ? "true" : "false"));
 
-	/* ãã­ããã£èª­ã¿è¾¼ã¿ä»¶æ°æ¸ãè¾¼ã¿æã®ãããæ
-å ±ã§ãèª­ã¿åºãä»¶æ°ãè¨é² */
+	/* プロパティ読み込み件数書き込み時のヘッド情報で、読み出し件数を記録 */
 	_ecn_fbs_poke(a_fbs_res, a_rdprp_wrpos, ((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc);
 
-	/* è¨é²ãã¦ããããã­ããã£ä»¶æ°ï¼æ¸ãè¾¼ã¿ä»¶æ°ï¼ãæ¸ãæ»ã */
+	/* 記録しておいたプロパティ件数（書き込み件数）を書き戻す */
 	((T_EDATA *)a_fbs_res.ptr)->hdr.edata.opc = (uint8_t)i;
 
-	/* å¿ç­è¦ã®å ´å */
+	/* 応答要の場合 */
 	if (a_sw_ok) {
-		/* è¨­å®å¦çæå */
+		/* 設定処理成功 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_res_esv;
 	} else {
-		/* è¨­å®å¦çå¤±æ */
+		/* 設定処理失敗 */
 		((T_EDATA *)a_fbs_res.ptr)->hdr.edata.esv = fa_sna_esv;
 	}
-	/* å¿ç­éä¿¡ */
+	/* 応答送信 */
 	a_ret = _ecn_tsk_snd_dtq(a_fbs_res, false);
 	if (a_ret == E_OK)
@@ -1900,5 +1862,5 @@
 
 lb_except:
-	/* ãã¼ã¿éä¿¡å¤±æãããé åè§£æ¾ */
+	/* データ送信失敗したら領域解放 */
 	if (a_fbs_res.ptr)
 		_ecn_fbs_del(a_fbs_res);
@@ -1917,5 +1879,5 @@
 	int		i, a_size, a_rdlen;
 	int		a_sw_ok = 1;
-	int		a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc;	/* å¦çãã­ããã£æ° */
+	int		a_count = ((T_EDATA *)fa_fbs_id.ptr)->hdr.edata.opc;	/* 処理プロパティ数 */
 
 	memset(&a_ecn_hdp, 0, sizeof(a_ecn_hdp));
@@ -1924,23 +1886,22 @@
 		fp_obj->eojx1 << 16 | fp_obj->eojx2 << 8 | fp_obj->eojx3);
 
-	/* åæåå¾ãµã¤ãº */
+	/* 初期取得サイズ */
 	a_size = sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY) + sizeof(T_ECN_PRP);
 
-	/* å¿ç­é»æç¨ã¡ã¢ãªï¼ããã¼ï¼ã®åå¾ */
+	/* 応答電文用メモリ（ダミー）の取得 */
 	a_ret = _ecn_fbs_cre(a_size, &a_fbs_dmy);
-	if (a_ret != E_OK || !a_fbs_dmy.ptr) /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_dmy.ptr) /* 確保失敗 */
 		goto lb_finally;
 
-	/* å¿ç­é»æè¨­å®						*/
+	/* 応答電文設定						*/
 	_ecn_tsk_mk_rsp_hdr_res(&a_ecn_hdp, p_req_esv);
 	a_size -= sizeof(T_ECN_HDR) + sizeof(T_ECN_EDATA_BODY);
 
-	/* payloadå
-é ­ã®T_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)ãèª­ã¿é£ã°ã */
+	/* payload先頭のT_ECN_HDR(ecn_hdr), T_ECN_EDATA_BODY(edata)を読み飛ばす */
 	a_ret = _ecn_fbs_set_rpos(fa_fbs_id, offsetof(T_ECN_EDT_HDR, ecn_prp));
 	if (a_ret)
 		goto lb_except;
 
-	/* ãã­ããã£å¤æ¸ãè¾¼ã¿å¿ç­èª­ã¿é£ã°ãå®è¡ */
+	/* プロパティ値書き込み応答読み飛ばし実行 */
 	a_ret = _ecn_tsk_eoj_skip_main(fp_obj, fa_fbs_id, a_count);
 	if (a_ret) {
@@ -1954,6 +1915,6 @@
 		(a_sw_ok ? "true" : "false"));
 
-	/* æ¬¡ã®ä»¶æ°ãèª­ã¿åã(1byte)						*/
-	/* â ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet]	*/
+	/* 次の件数を読み取る(1byte)						*/
+	/* → ECHONET-Lite_Ver.1.10_02.pdf p.40 [OPCGet]	*/
 	a_rdlen = i = 0;
 	a_ret = _ecn_fbs_get_data(fa_fbs_id, &i, 1, &a_rdlen);
@@ -1962,5 +1923,5 @@
 	a_count = *(uint8_t *)&i;
 
-	/* ãã­ããã£å¤èª­ã¿åºãå¿ç­ã®æ¸ãè¾¼ã¿å®è¡ */
+	/* プロパティ値読み出し応答の書き込み実行 */
 	a_ret = _ecn_tsk_eoj_set_main(fp_obj, fa_eobjatr, fa_fromapp, true, fa_fbs_id, a_fbs_dmy,
 		fa_fbs_anno, a_count, &a_sw_ok);
@@ -1979,5 +1940,5 @@
 
 lb_except:
-	/* ãã¼ã¿éä¿¡å¤±æãããé åè§£æ¾ */
+	/* データ送信失敗したら領域解放 */
 	if (a_fbs_dmy.ptr)
 		_ecn_fbs_del(a_fbs_dmy);
@@ -1988,11 +1949,10 @@
 
 /*
- * å¿ç­é»æå¾
-ã¡ã®å²ãè¾¼ã¿é»æä½æ
+ * 応答電文待ちの割り込み電文作成
  */
 ER _ecn_mk_brk_wai(ECN_FBS_ID *pk_fbs_id, const void *p_dat, size_t fa_size)
 {
 	ER				a_ret;
-	ECN_FBS_ID		a_fbs_id = { 0 };	/* è¦æ±é»æç¨ã¡ã¢ãª	*/
+	ECN_FBS_ID		a_fbs_id = { 0 };	/* 要求電文用メモリ	*/
 
 	if (!pk_fbs_id)
@@ -2000,16 +1960,16 @@
 	*pk_fbs_id = a_fbs_id;
 	if (sizeof(a_fbs_id.ptr->payload) <= fa_size)
-		return E_PAR; /* ä»éãã¼ã¿ãå¤§ãããã */
+		return E_PAR; /* 付随データが大きすぎる */
 	if (!p_dat && 0 < fa_size)
-		return E_PAR; /* ä»éãã¼ã¿ãµã¤ãºã1ä»¥ä¸ãªã®ã«ãã¼ã¿ãã¤ã³ã¿ãNULL */
-
-	/* è¦æ±é»æç¨ã¡ã¢ãªã®åå¾ */
+		return E_PAR; /* 付随データサイズが1以上なのにデータポインタがNULL */
+
+	/* 要求電文用メモリの取得 */
 	a_ret = _ecn_fbs_cre((0 < fa_size ? fa_size : 1), &a_fbs_id);
-	if (a_ret != E_OK || !a_fbs_id.ptr) { /* ç¢ºä¿å¤±æ */
+	if (a_ret != E_OK || !a_fbs_id.ptr) { /* 確保失敗 */
 		syslog(LOG_WARNING, "_ecn_fbs_cre(%d) result = %d:%s", fa_size, a_ret, itron_strerror(a_ret));
 		return a_ret;
 	}
 
-	/* è¦æ±é»æè¨­å® */
+	/* 要求電文設定 */
 	a_fbs_id.ptr->hdr.type = ECN_MSG_USER_BREAK;
 	a_fbs_id.ptr->hdr.sender.id = ENOD_API_ID;
@@ -2018,5 +1978,5 @@
 
 	if (0 < fa_size && p_dat) {
-		/* ä»éãã¼ã¿è¿½å  */
+		/* 付随データ追加 */
 		a_ret = _ecn_fbs_add_data_ex(a_fbs_id, p_dat, fa_size);
 		if (a_ret) {
@@ -2030,9 +1990,9 @@
 	*pk_fbs_id = a_fbs_id;
 
-	/* æ­£å¸¸çµäº */
+	/* 正常終了 */
 	return a_ret;
 
 lb_except:
-	/* ãã¼ã¿ä½æå¤±æãããé åè§£æ¾ */
+	/* データ作成失敗したら領域解放 */
 	if (a_fbs_id.ptr)
 		_ecn_fbs_del(a_fbs_id);
@@ -2041,5 +2001,5 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 ER _ecn_tsk_cre_req_fbs(ID sender, uint8_t cmd, ECN_FBS_ID *pk_req)
 {
@@ -2070,5 +2030,5 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 ER _ecn_tsk_cre_res_fbs(ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res)
 {
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_task.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_task.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_task.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ã¿ã¹ã¯
+ *		ECHONET Lite タスク
  */
 
@@ -69,13 +54,12 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯é¢é£ã®å®æ°ã®ããã©ã«ãå¤ã®å®ç¾©
+ *  ECHONET Lite タスク関連の定数のデフォルト値の定義
  */ 
 #ifndef ECHONET_TASK_PRIORITY
-#define ECHONET_TASK_PRIORITY	3		/* åæåªå
-åº¦ */
+#define ECHONET_TASK_PRIORITY	3		/* 初期優先度 */
 #endif /* ECHONET_TASK_PRIORITY */
 
 #ifndef ECHONET_TASK_STACK_SIZE
-#define ECHONET_TASK_STACK_SIZE	1024	/* ã¹ã¿ãã¯é åã®ãµã¤ãº */
+#define ECHONET_TASK_STACK_SIZE	1024	/* スタック領域のサイズ */
 #endif /* ECHONET_TASK_STACK_SIZE */
 
@@ -85,17 +69,17 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯ã®æ¬ä½
+ *  ECHONET Lite タスクの本体
  */
 void echonet_task(intptr_t exinf);
 
-/* ECHONET Lite ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãã®1ã¢ãã¦ã³ã¹å½ããæå¤§ãã¼ãæ° */
+/* ECHONET Lite インスタンスリストの1アナウンス当たり最大ノード数 */
 #define ECN_IST_LST_EOJ_MAX_CT (84)
 
-/* ECHONET Liteãªãã¸ã§ã¯ãã³ã¼ã x1,x2,x3(T_ECN_EOJ)ã24bitæ´æ°ã«å¤æ */
+/* ECHONET Liteオブジェクトコード x1,x2,x3(T_ECN_EOJ)を24bit整数に変換 */
 #define _ECN_EOJ2VALUE(s) (((s).eojx1 << 16) | ((s).eojx2 << 8) | (s).eojx3)
 
 enum ecn_epc_code
 {
-	ECN_EPC_INL_BCS		=	0xD5	/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ãã­ããã£ */
+	ECN_EPC_INL_BCS		=	0xD5	/* インスタンスリスト通知プロパティ */
 };
 
@@ -127,9 +111,9 @@
 
 /* 
- * ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®éä¿¡
+ * インスタンスリスト通知の送信
  */
 ER _ecn_tsk_ntf_inl();
 /*
- * è¦æ±é»æä½æ
+ * 要求電文作成
  */
 ER _ecn_tsk_mk_esv(ECN_FBS_ID *fp_fbs_id, ID fa_seoj, ID fa_deoj,
@@ -139,6 +123,5 @@
 
 /*
- * å¿ç­é»æå¾
-ã¡ã®å²ãè¾¼ã¿é»æä½æ
+ * 応答電文待ちの割り込み電文作成
  */
 ER _ecn_mk_brk_wai(ECN_FBS_ID *pk_fbs_id, const void *p_dat, size_t fa_size);
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_udp.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_udp.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_udp.cfg	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,10 +37,10 @@
 
 /*
- *  ãããã¯ã¼ã¯å¯¾å¿ echonet_udp_task.c ãã­ã°ã©ã ã® UDP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ネットワーク対応 echonet_udp_task.c プログラムの UDP/IP コンフィギュレーションファイル
  */
 
 #include "echonet_lcl_task.h"
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 #ifdef SUPPORT_INET4
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite UDPéä¿¡å¦çã¿ã¹ã¯
+ *		ECHONET Lite UDP通信処理タスク
  */
 #if 0 //def SUPPORT_INET6
@@ -115,5 +100,5 @@
 
 /*
- * åä¿¡ããUDPãã¼ã¿ãMAILBOXã«éã
+ * 受信したUDPデータをMAILBOXに送る
  */
 ER _ecn_udp2dtq(const uint8_t *buffer, size_t fa_len, const T_IPV6EP *dst);
@@ -130,6 +115,6 @@
 
 	a_rcv_pkt.buffer = buffer;
-	if (	a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE	/* ECHONET Liteè¦æ ¼	*/
-	||	a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1			/* é»æå½¢å¼1		*/) {
+	if (	a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE	/* ECHONET Lite規格	*/
+	||	a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1			/* 電文形式1		*/) {
 		ECN_DBG_PUT_2("[UDP ECHO SRV] illegal type (0x%02X,0x%02X)", a_rcv_pkt.t_esv->ecn_hdr.ehd1, a_rcv_pkt.t_esv->ecn_hdr.ehd2);
 		return E_PAR;
@@ -154,5 +139,5 @@
 	a_fbs_id.ptr->hdr.sender.id = ENOD_NOT_MATCH_ID;
 
-	/* IPã¢ãã¬ã¹ãããªã¢ã¼ãECHONETãã¼ãã¸å¤æ */
+	/* IPアドレスからリモートECHONETノードへ変換 */
 	a_enod_id = udp_get_id((T_EDATA *)a_fbs_id.ptr, dst->ipaddr, dst->portno);
 	if (a_enod_id < 0 || tnum_enodadr <= a_enod_id) {
@@ -160,11 +145,10 @@
 			ipv62str(NULL, &dst->ipaddr));
 	} else {
-		/* éä¿¡å
-ECHONETãã¼ããè¨é² */
+		/* 送信元ECHONETノードを記録 */
 		a_fbs_id.ptr->hdr.sender.id = a_enod_id;
 	}
 	a_fbs_id.ptr->hdr.reply.id = a_fbs_id.ptr->hdr.sender.id;
 
-	/* echonet_taskã«éã */
+	/* echonet_taskに送る */
 	a_ret = snd_dtq(ecn_svc_dataqueueid, (intptr_t)a_fbs_id.ptr);
 	if (a_ret != E_OK) {
@@ -179,5 +163,5 @@
 
 /*
- *  ECHONET UDPéä¿¡å¦çã¿ã¹ã¯
+ *  ECHONET UDP通信処理タスク
  */
 void echonet_udp_task(intptr_t exinf)
@@ -211,5 +195,5 @@
 	}
 
-	/* ã¡ãã»ã¼ã¸ã«ã¼ã */
+	/* メッセージループ */
 	for (;;) {
 		a_prev = a_now;
@@ -233,5 +217,5 @@
 
 		if (a_ret == E_OK) {
-			/* éä¿¡ãã¼ã¿é·ãåå¾ */
+			/* 送信データ長を取得 */
 			a_snd_len = _ecn_fbs_get_datalen(a_mdt.fbs_id);
 
@@ -256,5 +240,5 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 static ER _ecn_udp_cre_req_fbs(ID sender, uint8_t cmd, ECN_FBS_ID *pk_req)
 {
@@ -285,5 +269,5 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 static ER _ecn_udp_cre_res_fbs(ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res)
 {
@@ -315,6 +299,5 @@
 
 /*
- *  å
-é¨ã¡ãã»ã¼ã¸åä¿¡å¦ç
+ *  内部メッセージ受信処理
  */
 void _ecn_int_msg(ECN_FBS_ID fbs_id, ECN_FBS_SSIZE_T a_snd_len)
@@ -334,5 +317,5 @@
 
 	switch(cmd){
-	// IPã¢ãã¬ã¹ãè¿ä¿¡
+	// IPアドレスを返信
 	case ECN_UDP_MSG_GET_IPADDR_REQ:
 		if (a_snd_len < sizeof(msg)) {
@@ -403,10 +386,10 @@
 
 /*
- *  ECHONET é»æåä¿¡å¦ç
+ *  ECHONET 電文受信処理
  */
 void _ecn_esv_msg(ECN_FBS_ID fbs_id)
 {
 	const static T_IN6_ADDR locl = IPV6_ADDR_LOCAL_LOOPBACK_INIT;
-	/* UDPåºåé åï¼æ«å®ï¼ */
+	/* UDP出力領域（暫定） */
 	static uint_t buffer[(ETHER_MAX_LEN) / sizeof(uint_t) + 1];
 	T_IPV6EP a_dst;
@@ -416,9 +399,8 @@
 	memset(&a_dst.ipaddr, 0, sizeof(a_dst.ipaddr));
 	a_dst.portno = 0;
-	/* éä¿¡å
-IPã¢ãã¬ã¹ */
+	/* 送信先IPアドレス */
 	a_ret = udp_get_ip(&a_dst, fbs_id.ptr->hdr.target.id);
 	if (!a_ret) {
-		ECN_DBG_PUT_4("[UDP TSK] echonet-node 0x%02X-0x%02X-0x%02X â udp dest(%s)",
+		ECN_DBG_PUT_4("[UDP TSK] echonet-node 0x%02X-0x%02X-0x%02X → udp dest(%s)",
 			((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx1,
 			((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx2,
@@ -426,5 +408,5 @@
 			ipv62str(NULL, &a_dst.ipaddr));
 
-		/* fbsããåºåé åã«ãã¼ã¿ãæ½åº */
+		/* fbsから出力領域にデータを抽出 */
 		a_snd_len = 0;
 		a_ret = _ecn_fbs_get_data(fbs_id, buffer, sizeof(buffer), &a_snd_len);
@@ -433,7 +415,6 @@
 		}
 		else if (memcmp(&a_dst.ipaddr, &locl, sizeof(a_dst.ipaddr)) == 0) {
-			/* éä¿¡å
-ã127.0.0.1 â dtqã«è»¢é */
-			ECN_DBG_PUT_1("redirect ecn_udp_dataqueueid â ecn_svc_dataqueueid (esv:0x%02X)",
+			/* 送信先が127.0.0.1 → dtqに転送 */
+			ECN_DBG_PUT_1("redirect ecn_udp_dataqueueid → ecn_svc_dataqueueid (esv:0x%02X)",
 				((T_EDATA *)fbs_id.ptr)->hdr.edata.esv);
 
@@ -449,5 +430,5 @@
 			_ecn_dbg_bindmp((const uint8_t *)buffer, a_snd_len);
 #endif
-			/* UDPéä¿¡ */
+			/* UDP送信 */
 			a_ret = udp6_snd_dat(ecn_udp_cepid, &a_dst, buffer, a_snd_len, TMO_FEVR);
 			if (a_ret < 0) {
@@ -456,5 +437,5 @@
 		}
 
-		/* ãã¼ã¿ãé·ããã¦1ãã±ããã«åã¾ããªãã£ãå ´å */
+		/* データが長すぎて1パケットに収まらなかった場合 */
 		if (_ecn_fbs_exist_data(fbs_id)) {
 			ECN_DBG_PUT_1("[UDP TSK] send, data so long: %dbyte(s)", _ecn_fbs_get_datalen(fbs_id));
@@ -469,5 +450,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 ER callback_nblk_udp(ID cepid, FN fncd, void *p_parblk)
@@ -490,5 +471,5 @@
 		}
 #ifdef _MSC_VER
-		/* (éçºç¨) ECHONETç¨ãã±ããä»¥å¤ã¯èª­ã¿æ¨ã¦ã */
+		/* (開発用) ECHONET用パケット以外は読み捨てる */
 		if (buffer[0] != 0x10 || buffer[1] != 0x81) {
 			return E_OK;
@@ -524,5 +505,5 @@
 
 /*
- *  ãªã¢ã¼ãECHONETãã¼ãã®é©åç¢ºèª
+ *  リモートECHONETノードの適合確認
  */
 bool_t is_match(const EOBJCB *enodcb, T_EDATA *edata, const void *_ipaddr, uint16_t portno)
@@ -542,5 +523,5 @@
 		return false;
 
-	/* ãã¼ãã¹ã¿ã¼ãæã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ä»¥å¤ã¯é¤å¤ */
+	/* ノードスタート時インスタンスリスト通知以外は除外 */
 	if (	edata->hdr.edata.esv != ESV_INF
 		||	edata->hdr.edata.deoj.eojx1 != EOJ_X1_PROFILE
@@ -564,18 +545,17 @@
 		}
 		ECN_DBG_PUT_2("is_match(): ecn_itr_nxt() result: epc=0x%02X, pdc=%d", epc, pdc);
-		/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã¾ãã¯èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³ä»¥å¤ã¯é¤å¤ */
+		/* インスタンスリスト通知または自ノードインスタンスリストＳ以外は除外 */
 		if ((epc != 0xD5) && (epc != 0xD6)) {
 			continue;
 		}
 
-		/* ï¼ãã¤ãç®ä»¥éã«eojãåæããã¦ãã */
+		/* ２バイト目以降にeojが列挙されている */
 		count = (pdc - 1) / sizeof(T_ECN_EOJ);
 
-		/* ãã¼ãå
-ã®æ©å¨ãªãã¸ã§ã¯ããæ¤ç´¢ */
+		/* ノード内の機器オブジェクトを検索 */
 		for (k = 0; k < enodcb->eobjcnt; k++) {
 			p_eobj = enodcb->eobjs[k];
 
-			/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ããç¢ºèª */
+			/* インスタンスリストを確認 */
 			match = false;
 			for (i = 0, j = 1; i < count; i++, j += sizeof(T_ECN_EOJ)) {
@@ -595,5 +575,5 @@
 		}
 
-		/* ãã¹ã¦æã£ã¦ãããé©åï¼ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãã®æ¹ãå¤ãã¦ããããã¨ã¨ããï¼ */
+		/* すべて揃っていたら適合（インスタンスリストの方が多くてもいいこととする） */
 		return true;
 	}
@@ -603,5 +583,5 @@
 
 /*
- *  IPã¢ãã¬ã¹ãããªã¢ã¼ãECHONETãã¼ãã¸å¤æ
+ *  IPアドレスからリモートECHONETノードへ変換
  */
 ECN_ENOD_ID udp_get_id(T_EDATA *edata, const T_IN6_ADDR ipaddr, uint16_t portno)
@@ -619,5 +599,5 @@
 		return ENOD_MULTICAST_ID;
 
-	/* IPã¢ãã¬ã¹ã®åããã®ãæ¤ç´¢ */
+	/* IPアドレスの同じものを検索 */
 	for (i = 0, ea = enodadrb_table; i < tnum_enodadr; i++, ea++) {
 		if (!ea->inuse)
@@ -631,5 +611,5 @@
 	}
 
-	/* å¯¾å¿ãããªã¢ã¼ããã¼ããæ¤ç´¢ */
+	/* 対応するリモートノードを検索 */
 	for (i = ENOD_REMOTE_ID, ea = &enodadrb_table[ENOD_REMOTE_ID]; i < tnum_enodadr; i++, ea++) {
 		if (!ea->inuse)
@@ -645,5 +625,5 @@
 			continue;
 
-		/* å¯¾å¿ãããªã¢ã¼ããã¼ããããã°IPã¢ãã¬ã¹ãè¨­å® */
+		/* 対応するリモートノードがあればIPアドレスを設定 */
 		memcpy(&ea->ipaddr, &ipaddr, sizeof(T_IN6_ADDR));
 
@@ -653,5 +633,5 @@
 	}
 
-	/* ç©ºãé åãæ¢ãã¦èªåç»é² */
+	/* 空き領域を探して自動登録 */
 	for (i = ENOD_REMOTE_ID, ea = &enodadrb_table[ENOD_REMOTE_ID]; i < tnum_enodadr; i++, ea++) {
 		if (ea->inuse)
@@ -670,5 +650,5 @@
 
 /*
- *  ãªã¢ã¼ãECHONETãã¼ãããIPã¢ãã¬ã¹ã¸å¤æ
+ *  リモートECHONETノードからIPアドレスへ変換
  */
 int udp_get_ip(T_IPV6EP *fp_ipep, ECN_ENOD_ID fa_enodid)
@@ -684,5 +664,5 @@
 
 	if (fa_enodid == ENOD_MULTICAST_ID) {
-		/* targetãENOD_MULTICAST_IDã®å ´åããã«ãã­ã£ã¹ããè¡ã */
+		/* targetがENOD_MULTICAST_IDの場合、マルチキャストを行う */
 		memcpy(&fp_ipep->ipaddr, &mcst, sizeof(T_IN6_ADDR));
 		return 0;	/* ok */
@@ -690,6 +670,5 @@
 
 	if (fa_enodid < ENOD_REMOTE_ID) {
-		/* targetãæªå®ç¾©ã»LOCALã»APIã®å ´åãã­ã¼ã«ã«é
-éãè¡ã */
+		/* targetが未定義・LOCAL・APIの場合、ローカル配送を行う */
 		memcpy(&fp_ipep->ipaddr, &locl, sizeof(T_IN6_ADDR));
 		return 0;	/* ok */
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_udp6_task.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ã¿ã¹ã¯
+ *		ECHONET Lite タスク
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ECHONET Lite ä¸æåå ±ã¢ãã¬ã¹
+ *  ECHONET Lite 一斉同報アドレス
  */
 #define ECHONET_MULTICAST_ADDR 	\
@@ -76,13 +61,12 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯é¢é£ã®å®æ°ã®ããã©ã«ãå¤ã®å®ç¾©
+ *  ECHONET Lite タスク関連の定数のデフォルト値の定義
  */
 #ifndef ECHONET_UDP_TASK_PRIORITY
-#define ECHONET_UDP_TASK_PRIORITY	3		/* åæåªå
-åº¦ */
+#define ECHONET_UDP_TASK_PRIORITY	3		/* 初期優先度 */
 #endif /* ECHONET_UDP_TASK_PRIORITY */
 
 #ifndef ECHONET_UDP_TASK_STACK_SIZE
-#define ECHONET_UDP_TASK_STACK_SIZE	1024	/* ã¹ã¿ãã¯é åã®ãµã¤ãº */
+#define ECHONET_UDP_TASK_STACK_SIZE	1024	/* スタック領域のサイズ */
 #endif /* ECHONET_UDP_TASK_STACK_SIZE */
 
@@ -92,17 +76,17 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯ã®æ¬ä½
+ *  ECHONET Lite タスクの本体
  */
 void echonet_udp_task(intptr_t exinf);
 
-/*  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°  */
+/*  ノンブロッキングコールのコールバック関数  */
 ER callback_nblk_udp(ID cepid, FN fncd, void *p_parblk);
 
 /*
- *  ãªã¢ã¼ãECHONETãã¼ãã®é©åç¢ºèª
+ *  リモートECHONETノードの適合確認
  */
 bool_t is_match(const EOBJCB *eobjcb, T_EDATA *edata, const void *_ipaddr, uint16_t portno);
 
-/* IPã¢ãã¬ã¹ãæå­åã«å¤æ */
+/* IPアドレスを文字列に変換 */
 char *ipaddr2str(char *buf, int bubsz, uint8_t *ipaddr);
 
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_udp_task.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_udp_task.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_udp_task.c	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite UDPéä¿¡å¦çã¿ã¹ã¯
+ *		ECHONET Lite UDP通信処理タスク
  */
 #ifdef SUPPORT_INET4
@@ -110,5 +95,5 @@
 
 /*
- * åä¿¡ããUDPãã¼ã¿ãMAILBOXã«éã
+ * 受信したUDPデータをMAILBOXに送る
  */
 ER _ecn_udp2dtq(const uint8_t *buffer, size_t fa_len, const T_IPV4EP *dst);
@@ -125,6 +110,6 @@
 
 	a_rcv_pkt.buffer = buffer;
-	if (	a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE	/* ECHONET Liteè¦æ ¼	*/
-	||	a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1			/* é»æå½¢å¼1		*/) {
+	if (	a_rcv_pkt.t_esv->ecn_hdr.ehd1 != ECN_EDH1_ECHONET_LITE	/* ECHONET Lite規格	*/
+	||	a_rcv_pkt.t_esv->ecn_hdr.ehd2 != ECN_EDH2_FORMAT_1			/* 電文形式1		*/) {
 		ECN_DBG_PUT_2("[UDP ECHO SRV] illegal type (0x%02X,0x%02X)", a_rcv_pkt.t_esv->ecn_hdr.ehd1, a_rcv_pkt.t_esv->ecn_hdr.ehd2);
 		return E_PAR;
@@ -149,5 +134,5 @@
 	a_fbs_id.ptr->hdr.sender.id = ENOD_NOT_MATCH_ID;
 
-	/* IPã¢ãã¬ã¹ãããªã¢ã¼ãECHONETãã¼ãã¸å¤æ */
+	/* IPアドレスからリモートECHONETノードへ変換 */
 	a_enod_id = udp_get_id((T_EDATA *)a_fbs_id.ptr, dst->ipaddr, dst->portno);
 	if (a_enod_id < 0 || tnum_enodadr <= a_enod_id) {
@@ -155,11 +140,10 @@
 			ip2str(NULL, &dst->ipaddr));
 	} else {
-		/* éä¿¡å
-ECHONETãã¼ããè¨é² */
+		/* 送信元ECHONETノードを記録 */
 		a_fbs_id.ptr->hdr.sender.id = a_enod_id;
 	}
 	a_fbs_id.ptr->hdr.reply.id = a_fbs_id.ptr->hdr.sender.id;
 
-	/* echonet_taskã«éã */
+	/* echonet_taskに送る */
 	a_ret = snd_dtq(ecn_svc_dataqueueid, (intptr_t)a_fbs_id.ptr);
 	if (a_ret != E_OK) {
@@ -174,5 +158,5 @@
 
 /*
- *  ECHONET UDPéä¿¡å¦çã¿ã¹ã¯
+ *  ECHONET UDP通信処理タスク
  */
 void echonet_udp_task(intptr_t exinf)
@@ -216,5 +200,5 @@
 	}
 
-	/* ã¡ãã»ã¼ã¸ã«ã¼ã */
+	/* メッセージループ */
 	for (;;) {
 		a_prev = a_now;
@@ -238,5 +222,5 @@
 
 		if (a_ret == E_OK) {
-			/* éä¿¡ãã¼ã¿é·ãåå¾ */
+			/* 送信データ長を取得 */
 			a_snd_len = _ecn_fbs_get_datalen(a_mdt.fbs_id);
 
@@ -261,5 +245,5 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 static ER _ecn_udp_cre_req_fbs(ID sender, uint8_t cmd, ECN_FBS_ID *pk_req)
 {
@@ -290,5 +274,5 @@
 }
 
-/* å¿ç­é»æç¨fbsè¨­å®(sender/targetã®è¨­å®) */
+/* 応答電文用fbs設定(sender/targetの設定) */
 static ER _ecn_udp_cre_res_fbs(ECN_FBS_ID req, uint8_t cmd, ECN_FBS_ID *pk_res)
 {
@@ -320,6 +304,5 @@
 
 /*
- *  å
-é¨ã¡ãã»ã¼ã¸åä¿¡å¦ç
+ *  内部メッセージ受信処理
  */
 void _ecn_int_msg(ECN_FBS_ID fbs_id, ECN_FBS_SSIZE_T a_snd_len)
@@ -339,5 +322,5 @@
 
 	switch(cmd){
-	// IPã¢ãã¬ã¹ãè¿ä¿¡
+	// IPアドレスを返信
 	case ECN_UDP_MSG_GET_IPADDR_REQ:
 		if (a_snd_len < sizeof(msg)) {
@@ -408,9 +391,9 @@
 
 /*
- *  ECHONET é»æåä¿¡å¦ç
+ *  ECHONET 電文受信処理
  */
 void _ecn_esv_msg(ECN_FBS_ID fbs_id)
 {
-	/* UDPåºåé åï¼æ«å®ï¼ */
+	/* UDP出力領域（暫定） */
 	static uint_t buffer[(ETHER_MAX_LEN) / sizeof(uint_t) + 1];
 	T_IPV4EP a_dst;
@@ -420,9 +403,8 @@
 	a_dst.ipaddr = 0;
 	a_dst.portno = 0;
-	/* éä¿¡å
-IPã¢ãã¬ã¹ */
+	/* 送信先IPアドレス */
 	a_ret = udp_get_ip(&a_dst, fbs_id.ptr->hdr.target.id);
 	if (!a_ret) {
-		ECN_DBG_PUT_4("[UDP TSK] echonet-node 0x%02X-0x%02X-0x%02X â udp dest(%s)",
+		ECN_DBG_PUT_4("[UDP TSK] echonet-node 0x%02X-0x%02X-0x%02X → udp dest(%s)",
 			((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx1,
 			((T_EDATA *)fbs_id.ptr)->hdr.edata.deoj.eojx2,
@@ -430,5 +412,5 @@
 			ip2str(NULL, &a_dst.ipaddr));
 
-		/* fbsããåºåé åã«ãã¼ã¿ãæ½åº */
+		/* fbsから出力領域にデータを抽出 */
 		a_snd_len = 0;
 		a_ret = _ecn_fbs_get_data(fbs_id, buffer, sizeof(buffer), &a_snd_len);
@@ -437,7 +419,6 @@
 		}
 		else if (a_dst.ipaddr == MAKE_IPV4_ADDR(127,0,0,1)) {
-			/* éä¿¡å
-ã127.0.0.1 â dtqã«è»¢é */
-			ECN_DBG_PUT_1("redirect ecn_udp_dataqueueid â ecn_svc_dataqueueid (esv:0x%02X)",
+			/* 送信先が127.0.0.1 → dtqに転送 */
+			ECN_DBG_PUT_1("redirect ecn_udp_dataqueueid → ecn_svc_dataqueueid (esv:0x%02X)",
 				((T_EDATA *)fbs_id.ptr)->hdr.edata.esv);
 
@@ -453,5 +434,5 @@
 			_ecn_dbg_bindmp((const uint8_t *)buffer, a_snd_len);
 #endif
-			/* UDPéä¿¡ */
+			/* UDP送信 */
 			a_ret = udp_snd_dat(ecn_udp_cepid, &a_dst, buffer, a_snd_len, TMO_FEVR);
 			if (a_ret < 0) {
@@ -460,5 +441,5 @@
 		}
 
-		/* ãã¼ã¿ãé·ããã¦1ãã±ããã«åã¾ããªãã£ãå ´å */
+		/* データが長すぎて1パケットに収まらなかった場合 */
 		if (_ecn_fbs_exist_data(fbs_id)) {
 			ECN_DBG_PUT_1("[UDP TSK] send, data so long: %dbyte(s)", _ecn_fbs_get_datalen(fbs_id));
@@ -473,5 +454,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 ER callback_nblk_udp(ID cepid, FN fncd, void *p_parblk)
@@ -494,5 +475,5 @@
 		}
 #ifdef _MSC_VER
-		/* (éçºç¨) ECHONETç¨ãã±ããä»¥å¤ã¯èª­ã¿æ¨ã¦ã */
+		/* (開発用) ECHONET用パケット以外は読み捨てる */
 		if (buffer[0] != 0x10 || buffer[1] != 0x81) {
 			return E_OK;
@@ -528,5 +509,5 @@
 
 /*
- *  ãªã¢ã¼ãECHONETãã¼ãã®é©åç¢ºèª
+ *  リモートECHONETノードの適合確認
  */
 bool_t is_match(const EOBJCB *enodcb, T_EDATA *edata, const void *_ipaddr, uint16_t portno)
@@ -546,5 +527,5 @@
 		return false;
 
-	/* ãã¼ãã¹ã¿ã¼ãæã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ä»¥å¤ã¯é¤å¤ */
+	/* ノードスタート時インスタンスリスト通知以外は除外 */
 	if (	edata->hdr.edata.esv != ESV_INF
 		||	edata->hdr.edata.deoj.eojx1 != EOJ_X1_PROFILE
@@ -568,18 +549,17 @@
 		}
 		ECN_DBG_PUT_2("is_match(): ecn_itr_nxt() result: epc=0x%02X, pdc=%d", epc, pdc);
-		/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã¾ãã¯èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³ä»¥å¤ã¯é¤å¤ */
+		/* インスタンスリスト通知または自ノードインスタンスリストＳ以外は除外 */
 		if ((epc != 0xD5) && (epc != 0xD6)) {
 			continue;
 		}
 
-		/* ï¼ãã¤ãç®ä»¥éã«eojãåæããã¦ãã */
+		/* ２バイト目以降にeojが列挙されている */
 		count = (pdc - 1) / sizeof(T_ECN_EOJ);
 
-		/* ãã¼ãå
-ã®æ©å¨ãªãã¸ã§ã¯ããæ¤ç´¢ */
+		/* ノード内の機器オブジェクトを検索 */
 		for (k = 0; k < enodcb->eobjcnt; k++) {
 			p_eobj = enodcb->eobjs[k];
 
-			/* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ããç¢ºèª */
+			/* インスタンスリストを確認 */
 			match = false;
 			for (i = 0, j = 1; i < count; i++, j += sizeof(T_ECN_EOJ)) {
@@ -599,5 +579,5 @@
 		}
 
-		/* ãã¹ã¦æã£ã¦ãããé©åï¼ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãã®æ¹ãå¤ãã¦ããããã¨ã¨ããï¼ */
+		/* すべて揃っていたら適合（インスタンスリストの方が多くてもいいこととする） */
 		return true;
 	}
@@ -607,5 +587,5 @@
 
 /*
- *  IPã¢ãã¬ã¹ãããªã¢ã¼ãECHONETãã¼ãã¸å¤æ
+ *  IPアドレスからリモートECHONETノードへ変換
  */
 ECN_ENOD_ID udp_get_id(T_EDATA *edata, const T_IN4_ADDR ipaddr, uint16_t portno)
@@ -619,5 +599,5 @@
 		return ENOD_MULTICAST_ID;
 
-	/* IPã¢ãã¬ã¹ã®åããã®ãæ¤ç´¢ */
+	/* IPアドレスの同じものを検索 */
 	for (i = 0, ea = enodadrb_table; i < tnum_enodadr; i++, ea++) {
 		if (!ea->inuse)
@@ -631,5 +611,5 @@
 	}
 
-	/* å¯¾å¿ãããªã¢ã¼ããã¼ããæ¤ç´¢ */
+	/* 対応するリモートノードを検索 */
 	for (i = ENOD_REMOTE_ID, ea = &enodadrb_table[ENOD_REMOTE_ID]; i < tnum_enodadr; i++, ea++) {
 		if (!ea->inuse)
@@ -642,5 +622,5 @@
 			continue;
 
-		/* å¯¾å¿ãããªã¢ã¼ããã¼ããããã°IPã¢ãã¬ã¹ãè¨­å® */
+		/* 対応するリモートノードがあればIPアドレスを設定 */
 		*((T_IN4_ADDR *)ea->ipaddr) = ipaddr;
 
@@ -650,5 +630,5 @@
 	}
 
-	/* ç©ºãé åãæ¢ãã¦èªåç»é² */
+	/* 空き領域を探して自動登録 */
 	for (i = ENOD_REMOTE_ID, ea = &enodadrb_table[ENOD_REMOTE_ID]; i < tnum_enodadr; i++, ea++) {
 		if (ea->inuse)
@@ -667,5 +647,5 @@
 
 /*
- *  ãªã¢ã¼ãECHONETãã¼ãããIPã¢ãã¬ã¹ã¸å¤æ
+ *  リモートECHONETノードからIPアドレスへ変換
  */
 int udp_get_ip(T_IPV4EP *fp_ipep, ECN_ENOD_ID fa_enodid)
@@ -679,5 +659,5 @@
 
 	if (fa_enodid == ENOD_MULTICAST_ID) {
-		/* targetãENOD_MULTICAST_IDã®å ´åããã«ãã­ã£ã¹ããè¡ã */
+		/* targetがENOD_MULTICAST_IDの場合、マルチキャストを行う */
 		fp_ipep->ipaddr = MAKE_IPV4_ADDR(224,0,23,0);
 		return 0;	/* ok */
@@ -685,6 +665,5 @@
 
 	if (fa_enodid < ENOD_REMOTE_ID) {
-		/* targetãæªå®ç¾©ã»LOCALã»APIã®å ´åãã­ã¼ã«ã«é
-éãè¡ã */
+		/* targetが未定義・LOCAL・APIの場合、ローカル配送を行う */
 		fp_ipep->ipaddr = MAKE_IPV4_ADDR(127,0,0,1);
 		return 0;	/* ok */
Index: azure_iot_hub/trunk/ntshell/echonet/echonet_udp_task.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/echonet_udp_task.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/echonet_udp_task.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *		ECHONET Lite ã¿ã¹ã¯
+ *		ECHONET Lite タスク
  */
 
@@ -67,5 +52,5 @@
 
 /*
- *  ECHONET Lite ä¸æåå ±ã¢ãã¬ã¹
+ *  ECHONET Lite 一斉同報アドレス
  */
 #ifdef SIL_ENDIAN_LITTLE
@@ -76,13 +61,12 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯é¢é£ã®å®æ°ã®ããã©ã«ãå¤ã®å®ç¾©
+ *  ECHONET Lite タスク関連の定数のデフォルト値の定義
  */
 #ifndef ECHONET_UDP_TASK_PRIORITY
-#define ECHONET_UDP_TASK_PRIORITY	3		/* åæåªå
-åº¦ */
+#define ECHONET_UDP_TASK_PRIORITY	3		/* 初期優先度 */
 #endif /* ECHONET_UDP_TASK_PRIORITY */
 
 #ifndef ECHONET_UDP_TASK_STACK_SIZE
-#define ECHONET_UDP_TASK_STACK_SIZE	1024	/* ã¹ã¿ãã¯é åã®ãµã¤ãº */
+#define ECHONET_UDP_TASK_STACK_SIZE	1024	/* スタック領域のサイズ */
 #endif /* ECHONET_UDP_TASK_STACK_SIZE */
 
@@ -92,17 +76,17 @@
 
 /*
- *  ECHONET Lite ã¿ã¹ã¯ã®æ¬ä½
+ *  ECHONET Lite タスクの本体
  */
 void echonet_udp_task(intptr_t exinf);
 
-/*  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°  */
+/*  ノンブロッキングコールのコールバック関数  */
 ER callback_nblk_udp(ID cepid, FN fncd, void *p_parblk);
 
 /*
- *  ãªã¢ã¼ãECHONETãã¼ãã®é©åç¢ºèª
+ *  リモートECHONETノードの適合確認
  */
 bool_t is_match(const EOBJCB *eobjcb, T_EDATA *edata, const void *_ipaddr, uint16_t portno);
 
-/* IPã¢ãã¬ã¹ãæå­åã«å¤æ */
+/* IPアドレスを文字列に変換 */
 char *ipaddr2str(char *buf, int bubsz, uint8_t *ipaddr);
 
Index: azure_iot_hub/trunk/ntshell/echonet/fbs_string.c
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/fbs_string.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/fbs_string.c	(revision 389)
@@ -9,47 +9,32 @@
  *  Copyright (C) 2015 Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -62,8 +47,8 @@
 
 /*
- *  æ°å¤ãæå­åã«å¤æ
+ *  数値を文字列に変換
  */
 #define CONVERT_BUFLEN	((sizeof(uintptr_t) * CHAR_BIT + 2) / 3)
-										/* uintptr_tåã®æ°å¤ã®æå¤§æå­æ° */
+										/* uintptr_t型の数値の最大文字数 */
 static ER
 convert(ECN_FBS_ID fbs, ECN_FBS_SSIZE_T *pos, uintptr_t val, uint_t radix, const char *radchar,
@@ -111,5 +96,5 @@
 
 /*
- *  æå­åæ´å½¢åºå
+ *  文字列整形出力
  */
 static const char raddec[] = "0123456789";
Index: azure_iot_hub/trunk/ntshell/echonet/fbs_string.h
===================================================================
--- azure_iot_hub/trunk/ntshell/echonet/fbs_string.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/echonet/fbs_string.h	(revision 389)
@@ -4,47 +4,32 @@
  *  Copyright (C) 2015 Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/fatfs/ff.c
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/ff.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/ff.c	(revision 389)
@@ -326,5 +326,5 @@
 	ret_code[0] = ret_code[1] = ret_code[2] = ret_code[3] = 0;
 
-	if (chr <= 0x7f) {  // ASCIIäºæ
+	if (chr <= 0x7f) {  // ASCII互換
 		ret_code[0] = chr;
 		*ret_size = 1;
@@ -376,5 +376,5 @@
 }
 
-//2ãã¤ãã®UTF-16ã³ã¼ããå¾ããã
+//2バイトのUTF-16コードが得られる
 WCHAR Utf8_to_Utf16(const char *src, int *code_size)
 {
@@ -397,8 +397,8 @@
 	}
 
-	//æ¶è²»æå­æ°è¨­å®
+	//消費文字数設定
 	*code_size = i;
 
-	//ç¾ç¶ã2ãã¤ãéå®
+	//現状、2バイト限定
 	return uc;
 }
Index: azure_iot_hub/trunk/ntshell/fatfs/ffarch.c
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/ffarch.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/ffarch.c	(revision 389)
@@ -1,55 +1,40 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  */
 
 /* 
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®æ¬ä½
+ *  サンプルプログラム(1)の本体
  */
 
@@ -87,5 +72,5 @@
 
 /*
- * FatFSã¿ã¹ã¯
+ * FatFSタスク
  */
 void ffarch_task(intptr_t exinf)
@@ -107,9 +92,8 @@
 		prev = now;
 
-		/* ã¿ã¤ãã¼åå¾ */
+		/* タイマー取得 */
 		timer = ffarch_get_timer();
 
-		/* å¾
-ã¡ */
+		/* 待ち */
 		ret = tslp_tsk(timer);
 		if ((ret != E_OK) && (ret != E_TMOUT)) {
@@ -126,9 +110,9 @@
 		}
 
-		/* æéçµé */
+		/* 時間経過 */
 		int elapse = now - prev;
 		ffarch_progress(elapse);
 
-		/* ã¿ã¤ã ã¢ã¦ãå¦ç */
+		/* タイムアウト処理 */
 		ffarch_timeout();
 	}
@@ -329,6 +313,5 @@
 		//goto case FFS_IDLE;
 	case FFS_IDLE:
-		/* SDã«ã¼ããå
-¥ããããå ´å */
+		/* SDカードが入れられた場合 */
 		if (((mmc_rspi_prev_status & STA_NODISK) != 0) && ((mmc_rspi_status() & STA_NODISK) == 0)) {
 			syslog(LOG_NOTICE, "SD card initializing ...");
@@ -338,5 +321,5 @@
 				syslog(LOG_NOTICE, "SD card (1:) OK!");
 
-				/* uploadãã£ã¬ã¯ããªãä½æãã¦ãã */
+				/* uploadディレクトリを作成しておく */
 				f_mkdir("1:/upload");
 
@@ -351,5 +334,5 @@
 			}
 		}
-		/* SDã«ã¼ããæãããå ´å */
+		/* SDカードが抜かれた場合 */
 		else if (((mmc_rspi_prev_status & STA_NODISK) == 0) && ((mmc_rspi_status() & STA_NODISK) != 0)) {
 			syslog(LOG_NOTICE, "SD card unmount");
Index: azure_iot_hub/trunk/ntshell/fatfs/ffarch.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/ffarch.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/ffarch.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/fatfs/ffarch.h
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/ffarch.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/ffarch.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  */
Index: azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.c
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.c	(revision 389)
@@ -56,7 +56,7 @@
 	/* SPIMISO=PULLUP */
 	sil_wrb_mem(PORTC_PCR_ADDR, sil_reb_mem(PORTC_PDR_ADDR) | PORT_PDR_B7_BIT);
-	/* CMOSãé¸æ */
+	/* CMOSを選択 */
 	sil_wrb_mem(PORTC_ODR0_ADDR, 0x00);
-	/* CMOSãé¸æ */
+	/* CMOSを選択 */
 	sil_wrb_mem(PORTC_ODR1_ADDR, 0x00);
 }
@@ -69,34 +69,34 @@
 {
 	/*
-	 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨­å®(RSPI0)
+	 * モジュールストップ機能の設定(RSPI0)
 	 */
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* æ¸è¾¼ã¿è¨±å¯ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);	/* 書込み許可 */
 	sil_wrw_mem(SYSTEM_MSTPCRB_ADDR,
 		sil_rew_mem(SYSTEM_MSTPCRB_ADDR) & ~SYSTEM_MSTPCRB_MSTPB17_BIT);
-	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* æ¸è¾¼ã¿ç¦æ­¢ */
-
-	/* P15ãGPIOã¨ãã¦ä½¿ç¨ */
+	sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);	/* 書込み禁止 */
+
+	/* P15をGPIOとして使用 */
 	sil_wrb_mem(PORT1_PMR_ADDR,
 		sil_reb_mem(PORT1_PMR_ADDR) & ~PORT_PMR_B5_BIT);
-	/* PC0ãGPIOã¨ãã¦ä½¿ç¨ */
+	/* PC0をGPIOとして使用 */
 	sil_wrb_mem(PORTC_PMR_ADDR,
 		sil_reb_mem(PORTC_PMR_ADDR) & ~PORT_PMR_B0_BIT);
-	/* PC5, PC6, PC7ãå¨è¾ºæ©è½ã¨ãã¦ä½¿ç¨ */
+	/* PC5, PC6, PC7を周辺機能として使用 */
 	sil_wrb_mem(PORTC_PMR_ADDR,
 		sil_reb_mem(PORTC_PMR_ADDR) | PORT_PMR_B5_BIT | PORT_PMR_B6_BIT | PORT_PMR_B7_BIT);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PFSWEãããã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x00);
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® PxxFSã¬ã¸ã¹ã¿ã¸ã®æ¸ãè¾¼ã¿ãè¨±å¯ */
+	/* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x40);
 
-	/* RSPCKAãé¸æ */
+	/* RSPCKAを選択 */
 	sil_wrb_mem(MPC_PC5PFS_ADDR, 0x0d);
-	/* MOSIAãé¸æ */
+	/* MOSIAを選択 */
 	sil_wrb_mem(MPC_PC6PFS_ADDR, 0x0d);
-	/* MISOAãé¸æ */
+	/* MISOAを選択 */
 	sil_wrb_mem(MPC_PC7PFS_ADDR, 0x0d);
 
-	/* æ¸ãè¾¼ã¿ãã­ãã¯ãã¬ã¸ã¹ã¿ã®è¨­å® æ¸ãè¾¼ã¿ãç¦æ­¢ */
+	/* 書き込みプロテクトレジスタの設定 書き込みを禁止 */
 	sil_wrb_mem(MPC_PWPR_ADDR, 0x80);
 }
@@ -104,10 +104,10 @@
 static void FCLK_FAST()
 {
-	/* RSPIæ©è½ãç¡å¹å */
+	/* RSPI機能を無効化 */
 	sil_wrb_mem(RSPI0_SPCR_ADDR,
 		sil_reb_mem(RSPI0_SPCR_ADDR) & ~RSPI_SPCR_SPE_BIT);
-	/* ãããã¬ã¼ãè¨­å® */
+	/* ビットレート設定 */
 	sil_wrb_mem(RSPI0_SPBR_ADDR, F_PCLK / 2 / SCLK_FAST - 1);
-	/* RSPIæ©è½ãæå¹å */
+	/* RSPI機能を有効化 */
 	sil_wrb_mem(RSPI0_SPCR_ADDR,
 		sil_reb_mem(RSPI0_SPCR_ADDR) | RSPI_SPCR_SPE_BIT);
Index: azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -53,5 +38,5 @@
 #include "mmc_rspi.h"
 
-/* å²ãè¾¼ã¿ãã³ãã© */
+/* 割り込みハンドラ */
 
 DEF_INH(INHNO_MMC_RSPI_SPRI, { TA_HLNG, mmc_rspi_spri_handler });
Index: azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.h
===================================================================
--- azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/fatfs/mmc_rspi.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -57,21 +42,18 @@
 #include "diskio.h"
 
-#define INHNO_MMC_RSPI_SPRI		INT_RSPI0_SPRI0	/* åä¿¡å²ãè¾¼ã¿ */
-#define INTNO_MMC_RSPI_SPRI		INT_RSPI0_SPRI0	/* åä¿¡å²ãè¾¼ã¿ */
-#define INTATR_MMC_RSPI_SPRI	(TA_NULL)		/* å²è¾¼ã¿å±æ§	*/
-#define INTPRI_MMC_RSPI_SPRI	(-1)			/* å²è¾¼ã¿åªå
-åº¦	*/
+#define INHNO_MMC_RSPI_SPRI		INT_RSPI0_SPRI0	/* 受信割り込み */
+#define INTNO_MMC_RSPI_SPRI		INT_RSPI0_SPRI0	/* 受信割り込み */
+#define INTATR_MMC_RSPI_SPRI	(TA_NULL)		/* 割込み属性	*/
+#define INTPRI_MMC_RSPI_SPRI	(-1)			/* 割込み優先度	*/
 
-#define INHNO_MMC_RSPI_SPTI		INT_RSPI0_SPTI0	/* éä¿¡å²ãè¾¼ã¿ */
-#define INTNO_MMC_RSPI_SPTI		INT_RSPI0_SPTI0	/* éä¿¡å²ãè¾¼ã¿ */
-#define INTATR_MMC_RSPI_SPTI	(TA_NULL)		/* å²è¾¼ã¿å±æ§	*/
-#define INTPRI_MMC_RSPI_SPTI	(-1)			/* å²è¾¼ã¿åªå
-åº¦	*/
+#define INHNO_MMC_RSPI_SPTI		INT_RSPI0_SPTI0	/* 送信割り込み */
+#define INTNO_MMC_RSPI_SPTI		INT_RSPI0_SPTI0	/* 送信割り込み */
+#define INTATR_MMC_RSPI_SPTI	(TA_NULL)		/* 割込み属性	*/
+#define INTPRI_MMC_RSPI_SPTI	(-1)			/* 割込み優先度	*/
 
-#define INHNO_MMC_RSPI_SPII		INT_RSPI0_SPII0	/* ã¢ã¤ãã«å²ãè¾¼ã¿ */
-#define INTNO_MMC_RSPI_SPII		INT_RSPI0_SPII0	/* ã¢ã¤ãã«å²ãè¾¼ã¿ */
-#define INTATR_MMC_RSPI_SPII	(TA_NULL)		/* å²è¾¼ã¿å±æ§	*/
-#define INTPRI_MMC_RSPI_SPII	(-1)			/* å²è¾¼ã¿åªå
-åº¦	*/
+#define INHNO_MMC_RSPI_SPII		INT_RSPI0_SPII0	/* アイドル割り込み */
+#define INTNO_MMC_RSPI_SPII		INT_RSPI0_SPII0	/* アイドル割り込み */
+#define INTATR_MMC_RSPI_SPII	(TA_NULL)		/* 割込み属性	*/
+#define INTPRI_MMC_RSPI_SPII	(-1)			/* 割込み優先度	*/
 
 DSTATUS mmc_rspi_initialize ();
Index: azure_iot_hub/trunk/ntshell/lcd/adafruit_gfx.c
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/adafruit_gfx.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/adafruit_gfx.c	(revision 389)
@@ -1096,5 +1096,5 @@
 			return;
 
-		//3ãã¤ãã³ã¼ãåè§æå­ç¨
+		//3バイトコード半角文字用
 		if (use_chars == 3) {
 			for_3B_hankaku_code = 0;
@@ -1105,17 +1105,16 @@
 
 		lcd_startWrite(lcd);
-		//1ãã¤ãã³ã¼ãåè§æå­
+		//1バイトコード半角文字
 		if (use_chars == 1) {
 			lcd_drawFont_(lcd, x, y, bitmap_data, FONT_HALF_WIDTH, FONT_HEIGHT, color, bg);
 		}
-		//3ãã¤ãã³ã¼ãåè§æå­
+		//3バイトコード半角文字
 		else if ((use_chars == 3) &&
 			(((0xEFBDA1 <= for_3B_hankaku_code) && (for_3B_hankaku_code <= 0xEFBDBF)) ||
 			((0xEFBE80 <= for_3B_hankaku_code) && (for_3B_hankaku_code <= 0xEFBE9F)))) {
-			//3ãã¤ãã³ã¼ãåè§æå­
+			//3バイトコード半角文字
 			lcd_drawFont_(lcd, x, y, bitmap_data, FONT_HALF_WIDTH, FONT_HEIGHT, color, bg);
 		}
-		//å
-¨è§æå­
+		//全角文字
 		else {
 			lcd_drawFont_(lcd, x, y, bitmap_data, FONT_WIDTH, FONT_HEIGHT, color, bg);
@@ -1266,5 +1265,5 @@
 			return;
 
-		//3ãã¤ãã³ã¼ãåè§æå­ç¨
+		//3バイトコード半角文字用
 		if (use_chars == 3) {
 			for_3B_hankaku_code = 0;
@@ -1276,5 +1275,5 @@
 		current_top += use_chars;
 
-		//1ãã¤ãã³ã¼ãåè§æå­
+		//1バイトコード半角文字
 		if (use_chars == 1) {
 			if (ctrl_code == 0x0D) { // CR
@@ -1296,9 +1295,9 @@
 		}
 
-		//3ãã¤ãã³ã¼ãåè§æå­
+		//3バイトコード半角文字
 		if (use_chars == 3) {
 			if (((0xEFBDA1 <= for_3B_hankaku_code) && (for_3B_hankaku_code <= 0xEFBDBF)) ||
 				((0xEFBE80 <= for_3B_hankaku_code) && (for_3B_hankaku_code <= 0xEFBE9F))) {
-				//3ãã¤ãã³ã¼ãåè§æå­
+				//3バイトコード半角文字
 				if (local_x + FONT_HALF_WIDTH > lcd->_width) {
 					local_x = X_LINE_HALF_TO_PIX(this, 0);
@@ -1311,6 +1310,5 @@
 		}
 
-		//å
-¨è§æå­
+		//全角文字
 		if (local_x + FONT_WIDTH > lcd->_width) {
 			local_x = X_LINE_TO_PIX(this, 0);
Index: azure_iot_hub/trunk/ntshell/lcd/draw_font.c
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/draw_font.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/draw_font.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  *
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ *
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -85,5 +70,5 @@
 	if (len == 2) {
 		code = string[0];
-		// 1ãã¤ãç®ãµã¼ã
+		// 1バイト目サーチ
 		for (i = 0; i < UTF8_CODE_2B_1_NUM; i++) {
 			if (Utf8CodeTable_2B_1st[i][0] == code) {
@@ -107,13 +92,13 @@
 	if (len == 3) {
 		code = string[0];
-		// 1ãã¤ãç®ãµã¼ã
+		// 1バイト目サーチ
 		for (i = 0; i < UTF8_CODE_3B_1_NUM; i++) {
 			if (Utf8CodeTable_3B_1st[i][0] == code) {
 				code = string[1];
-				// 2ãã¤ãç®ãµã¼ã
+				// 2バイト目サーチ
 				for (j = 0; j < Utf8CodeTable_3B_1st[i][1]; j++) {
 					if (Utf8CodeTable_3B_2nd[totalj][0] == code) {
 						code = string[2];
-						// 3ãã¤ãç®ãµã¼ã
+						// 3バイト目サーチ
 						for (k = 0; k < Utf8CodeTable_3B_2nd[totalj][1]; k++) {
 							if (UTF8_3B_CODE_BITMAP[totalk].code == code) {
@@ -126,5 +111,5 @@
 						return;
 					}
-					else {/*èª­ã¿é£ã°ãbitmapåæ°ãèç©*/
+					else {/*読み飛ばすbitmap個数を蓄積*/
 						totalk += Utf8CodeTable_3B_2nd[totalj][1];
 					}
@@ -132,5 +117,5 @@
 				}
 			}
-			else {/*èª­ã¿é£ã°ãbitmapåæ°ãèç©*/
+			else {/*読み飛ばすbitmap個数を蓄積*/
 				for (j = 0; j < Utf8CodeTable_3B_1st[i][1]; j++) {
 					totalk += Utf8CodeTable_3B_2nd[totalj][1];
@@ -207,5 +192,5 @@
 			return;
 
-		//3ãã¤ãã³ã¼ãåè§æå­ç¨
+		//3バイトコード半角文字用
 		if (use_chars == 3) {
 			for_3B_hankaku_code = 0;
@@ -217,5 +202,5 @@
 		current_top += use_chars;
 
-		//1ãã¤ãã³ã¼ãåè§æå­
+		//1バイトコード半角文字
 		if (use_chars == 1) {
 			if (ctrl_code == 0x0D) { // CR
@@ -237,9 +222,9 @@
 		}
 
-		//3ãã¤ãã³ã¼ãåè§æå­
+		//3バイトコード半角文字
 		if (use_chars == 3) {
 			if (((0xEFBDA1 <= for_3B_hankaku_code) && (for_3B_hankaku_code <= 0xEFBDBF)) ||
 				((0xEFBE80 <= for_3B_hankaku_code) && (for_3B_hankaku_code <= 0xEFBE9F))) {
-				//3ãã¤ãã³ã¼ãåè§æå­
+				//3バイトコード半角文字
 				if (local_x + FONT_HALF_WIDTH > hlcd->_width) {
 					local_x = X_LINE_HALF_TO_PIX(hlcd, 0);
@@ -252,6 +237,5 @@
 		}
 
-		//å
-¨è§æå­
+		//全角文字
 		if (local_x + FONT_WIDTH > hlcd->_width) {
 			local_x = X_LINE_TO_PIX(hlcd, 0);
Index: azure_iot_hub/trunk/ntshell/lcd/draw_font.h
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/draw_font.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/draw_font.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/lcd/misaki_font.c
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/misaki_font.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/misaki_font.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- * ç¾å²ãã©ã³ã
+ * 美咲フォント
  * http://www.geocities.jp/littlimi/misaki.htm
  * Licence
@@ -60,5 +45,5 @@
 #include "misaki_font.h"
 
-// 1ãã¤ãã³ã¼ã
+// 1バイトコード
 const uint8_t UTF8_1B_CODE_BITMAP[UTF8_1B_CODE_BITMAP_NUM][FONT_HALF_WIDTH * FONT_HEIGHT / 8] = {
 	{0x00, 0x00, 0x00, 0x00},
@@ -192,5 +177,5 @@
 };
 
-// 2ãã¤ãã³ã¼ãã1ãã¤ãç®
+// 2バイトコード　1バイト目
 const uint8_t Utf8CodeTable_2B_1st[UTF8_CODE_2B_1_NUM][2] = {
 	{0xC2,	0x06},
@@ -201,5 +186,5 @@
 	{0xD1,	0x11}
 };
-// 2ãã¤ãã³ã¼ã 2ãã¤ãç® bitmapãã¼ã¿
+// 2バイトコード 2バイト目 bitmapデータ
 const struct utf8_code_bitmap UTF8_2B_CODE_BITMAP[UTF8_2B_CODE_BITMAP_NUM] = {
 	{0xA7,	{0x1C, 0x20, 0x18, 0x24, 0x18, 0x04, 0x38, 0x00}},
@@ -327,5 +312,5 @@
 };
 
-// 3ãã¤ãã³ã¼ã 1ãã¤ãç®
+// 3バイトコード 1バイト目
 const uint8_t Utf8CodeTable_3B_1st[UTF8_CODE_3B_1_NUM][2] = {
 	{0xE2,	0x0E},
@@ -337,7 +322,7 @@
 	{0xE8,	0x3F},
 	{0xE9,	0x3C},
-	{0xEF,	(0x03+1)}	/*åè§è¿½å 2/2*/
+	{0xEF,	(0x03+1)}	/*半角追加2/2*/
 };
-// 3ãã¤ãã³ã¼ã 2ãã¤ãç®
+// 3バイトコード 2バイト目
 const uint8_t Utf8CodeTable_3B_2nd[UTF8_CODE_3B_2_NUM][2] = {
 	{0x80,	0x0F},
@@ -681,11 +666,11 @@
 	{0xBD,	0x12},
 	{0xBE,	0x05},
-	{0xBC,	0x3C},								/*"ï¼¼"è¿½å */
-	{0xBD,	0x3D/*(0x1E+31)*/},		/*åè§è¿½å 1/2*/
-	{0xBE,	0x20},			/*åè§è¿½å 2/2*/
-	{0xBF,	0x05} 								/*"ï¿¢","ï¿ ","ï¿¡"è¿½å */
+	{0xBC,	0x3C},								/*"＼"追加*/
+	{0xBD,	0x3D/*(0x1E+31)*/},		/*半角追加1/2*/
+	{0xBE,	0x20},			/*半角追加2/2*/
+	{0xBF,	0x05} 								/*"￢","￠","￡"追加*/
 };
 
-// 3ãã¤ãã³ã¼ã 3ãã¤ãç® bitmapãã¼ã¿
+// 3バイトコード 3バイト目 bitmapデータ
 const struct utf8_code_bitmap UTF8_3B_CODE_BITMAP[UTF8_3B_CODE_BITMAP_NUM] = {
 	{ 0x90 ,{0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00}},
@@ -7407,5 +7392,5 @@
 	{ 0xBA ,{0x7E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00}},
 	{ 0xBB ,{0x0E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00}},
-	{ 0xBC ,{0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00}},/*"ï¼¼"*/
+	{ 0xBC ,{0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00}},/*"＼"*/
 	{ 0xBD ,{0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, 0xE0, 0x00}},
 	{ 0xBE ,{0x10, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
@@ -7442,5 +7427,5 @@
 	{ 0x9D ,{0xC0, 0x20, 0x20, 0x10, 0x20, 0x20, 0xC0, 0x00}},
 
-	{ 0xA1 ,{0x00, 0x00, 0x00, 0x40, 0xA0, 0x40, 0x00, 0x00}}, 		/*åè§ã«ã¿ã«ãè¿½å 1/2*/
+	{ 0xA1 ,{0x00, 0x00, 0x00, 0x40, 0xA0, 0x40, 0x00, 0x00}}, 		/*半角カタカナ追加1/2*/
 	{ 0xA2 ,{0xE0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00}}, 
 	{ 0xA3 ,{0x00, 0x20, 0x20, 0x20, 0x20, 0xE0, 0x00, 0x00}}, 
@@ -7473,5 +7458,5 @@
 	{ 0xBE ,{0x80, 0xE0, 0xA0, 0xA0, 0x80, 0xE0, 0x00, 0x00}}, 
 	{ 0xBF ,{0xA0, 0x60, 0x60, 0x20, 0x40, 0x80, 0x00, 0x00}}, 
-	{ 0x80 ,{0x40, 0x60, 0xA0, 0x60, 0x40, 0x80, 0x00, 0x00}}, 		/*åè§ã«ã¿ã«ãè¿½å 2/2*/
+	{ 0x80 ,{0x40, 0x60, 0xA0, 0x60, 0x40, 0x80, 0x00, 0x00}}, 		/*半角カタカナ追加2/2*/
 	{ 0x81 ,{0xE0, 0x40, 0xE0, 0x40, 0x40, 0x80, 0x00, 0x00}}, 
 	{ 0x82 ,{0x00, 0xE0, 0xE0, 0x20, 0x20, 0xC0, 0x00, 0x00}}, 
@@ -7506,7 +7491,7 @@
 	{ 0x9F ,{0x40, 0xA0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}}, 
 
-	{ 0xA0 ,{0x04, 0x3C, 0x4A, 0x48, 0x52, 0x3C, 0x20, 0x00}},/*"ï¿ "*/
-	{ 0xA1 ,{0x18, 0x24, 0x70, 0x20, 0x60, 0x92, 0x6C, 0x00}},/*"ï¿¡"*/
-	{ 0xA2 ,{0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x00, 0x00}},/*"ï¿¢"*/
+	{ 0xA0 ,{0x04, 0x3C, 0x4A, 0x48, 0x52, 0x3C, 0x20, 0x00}},/*"￠"*/
+	{ 0xA1 ,{0x18, 0x24, 0x70, 0x20, 0x60, 0x92, 0x6C, 0x00}},/*"￡"*/
+	{ 0xA2 ,{0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x00, 0x00}},/*"￢"*/
 	{ 0xA3 ,{0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
 	{ 0xA5 ,{0x44, 0x44, 0x28, 0x7C, 0x10, 0x7C, 0x10, 0x00}}
Index: azure_iot_hub/trunk/ntshell/lcd/misaki_font.h
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/misaki_font.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/misaki_font.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -67,24 +52,24 @@
 #define UTF8_CODE_2B_1_NUM		6
 #define UTF8_CODE_3B_1_NUM		9
-#define UTF8_CODE_3B_2_NUM		(343+1)		/*åè§è¿½å 2/2*/
+#define UTF8_CODE_3B_2_NUM		(343+1)		/*半角追加2/2*/
 
 #define UTF8_1B_CODE_BITMAP_NUM	128
-#define UTF8_2B_CODE_BITMAP_NUM	122													/*"ï¿¢","ï¼¼","ï¿ ""ï¿¡"ç§»å)*/
-#define UTF8_3B_CODE_BITMAP_NUM	(6757+31+32)	/*åè§è¿½å 1/2*/	/*åè§è¿½å 2/2*/		/*"ï¿¢","ï¼¼","ï¿ ""ï¿¡"è¿½å )*/
+#define UTF8_2B_CODE_BITMAP_NUM	122													/*"￢","＼","￠""￡"移動)*/
+#define UTF8_3B_CODE_BITMAP_NUM	(6757+31+32)	/*半角追加1/2*/	/*半角追加2/2*/		/*"￢","＼","￠""￡"追加)*/
 
-// 1ãã¤ãã³ã¼ã
+// 1バイトコード
 extern const uint8_t UTF8_1B_CODE_BITMAP[UTF8_1B_CODE_BITMAP_NUM][FONT_HALF_WIDTH * FONT_HEIGHT / 8];
 
-// 2ãã¤ãã³ã¼ãã1ãã¤ãç®
+// 2バイトコード　1バイト目
 extern const uint8_t Utf8CodeTable_2B_1st[UTF8_CODE_2B_1_NUM][2];
-// 2ãã¤ãã³ã¼ã 2ãã¤ãç® bitmapãã¼ã¿
+// 2バイトコード 2バイト目 bitmapデータ
 extern const struct utf8_code_bitmap UTF8_2B_CODE_BITMAP[UTF8_2B_CODE_BITMAP_NUM];
 
-// 3ãã¤ãã³ã¼ã 1ãã¤ãç®
+// 3バイトコード 1バイト目
 extern const uint8_t Utf8CodeTable_3B_1st[UTF8_CODE_3B_1_NUM][2];
-// 3ãã¤ãã³ã¼ã 2ãã¤ãç®
+// 3バイトコード 2バイト目
 extern const uint8_t Utf8CodeTable_3B_2nd[UTF8_CODE_3B_2_NUM][2];
 
-// 3ãã¤ãã³ã¼ã 3ãã¤ãç® bitmapãã¼ã¿
+// 3バイトコード 3バイト目 bitmapデータ
 extern const struct utf8_code_bitmap UTF8_3B_CODE_BITMAP[UTF8_3B_CODE_BITMAP_NUM];
 
Index: azure_iot_hub/trunk/ntshell/lcd/shnm12_font.c
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/shnm12_font.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/shnm12_font.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- * æ±é²ãã©ã³ã
+ * 東雲フォント
  * http://openlab.ring.gr.jp/efont/shinonome/
  * Licence
@@ -61,5 +46,5 @@
 #include "shnm12_font.h"
 
-// 1ãã¤ãã³ã¼ã
+// 1バイトコード
 const uint8_t UTF8_1B_CODE_BITMAP[UTF8_1B_CODE_BITMAP_NUM][FONT_HALF_WIDTH * FONT_HEIGHT / 8] = {
 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
@@ -320,5 +305,5 @@
 	{0x01, 0x40, 0x22, 0x89, 0x25, 0x14, 0x20, 0x84, 0x20},
 };
-// 2ãã¤ãã³ã¼ãã1ãã¤ãç®
+// 2バイトコード　1バイト目
 const uint8_t Utf8CodeTable_2B_1st[UTF8_CODE_2B_1_NUM][2] = {
 	{0xC2, 0x06},
@@ -329,5 +314,5 @@
 	{0xD1, 0x11},
 };
-// 2ãã¤ãã³ã¼ã 2ãã¤ãç® bitmapãã¼ã¿
+// 2バイトコード 2バイト目 bitmapデータ
 const struct utf8_code_bitmap UTF8_2B_CODE_BITMAP[UTF8_2B_CODE_BITMAP_NUM] = {
 	{0xA7, {0x0E, 0x01, 0x10, 0x18, 0x00, 0xC0, 0x0E, 0x01, 0x30, 0x19, 0x00, 0xE0, 0x06, 0x00, 0x30, 0x11, 0x00, 0xE0}},
@@ -455,5 +440,5 @@
 };
 
-// 3ãã¤ãã³ã¼ã 1ãã¤ãç®
+// 3バイトコード 1バイト目
 const uint8_t Utf8CodeTable_3B_1st[UTF8_CODE_3B_1_NUM][2] = {
 	{0xE2, 0x0E},
@@ -467,5 +452,5 @@
 	{0xEF, 0x03},
 };
-// 3ãã¤ãã³ã¼ã 2ãã¤ãç®
+// 3バイトコード 2バイト目
 const uint8_t Utf8CodeTable_3B_2nd[UTF8_CODE_3B_2_NUM][2] = {
 	{0x80, 0x0E},
@@ -813,5 +798,5 @@
 	{0xBF, 0x05},
 };
-// 3ãã¤ãã³ã¼ã 3ãã¤ãç® bitmapãã¼ã¿
+// 3バイトコード 3バイト目 bitmapデータ
 const struct utf8_code_bitmap UTF8_3B_CODE_BITMAP[UTF8_3B_CODE_BITMAP_NUM] = {
 	{0x90, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
Index: azure_iot_hub/trunk/ntshell/lcd/shnm12_font.h
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/shnm12_font.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/shnm12_font.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -67,24 +52,24 @@
 #define UTF8_CODE_2B_1_NUM		6
 #define UTF8_CODE_3B_1_NUM		9
-#define UTF8_CODE_3B_2_NUM		343		/*åè§è¿½å 2/2*/
+#define UTF8_CODE_3B_2_NUM		343		/*半角追加2/2*/
 
 #define UTF8_1B_CODE_BITMAP_NUM	256
-#define UTF8_2B_CODE_BITMAP_NUM	122											/*"ï¿¢","ï¼¼","ï¿ ""ï¿¡"ç§»å)*/
-#define UTF8_3B_CODE_BITMAP_NUM	6757	/*åè§è¿½å 1/2*/	/*åè§è¿½å 2/2*/		/*"ï¿¢","ï¼¼","ï¿ ""ï¿¡"è¿½å )*/
+#define UTF8_2B_CODE_BITMAP_NUM	122											/*"￢","＼","￠""￡"移動)*/
+#define UTF8_3B_CODE_BITMAP_NUM	6757	/*半角追加1/2*/	/*半角追加2/2*/		/*"￢","＼","￠""￡"追加)*/
 
-// 1ãã¤ãã³ã¼ã
+// 1バイトコード
 extern const uint8_t UTF8_1B_CODE_BITMAP[UTF8_1B_CODE_BITMAP_NUM][FONT_HALF_WIDTH * FONT_HEIGHT / 8];
 
-// 2ãã¤ãã³ã¼ãã1ãã¤ãç®
+// 2バイトコード　1バイト目
 extern const uint8_t Utf8CodeTable_2B_1st[UTF8_CODE_2B_1_NUM][2];
-// 2ãã¤ãã³ã¼ã 2ãã¤ãç® bitmapãã¼ã¿
+// 2バイトコード 2バイト目 bitmapデータ
 extern const struct utf8_code_bitmap UTF8_2B_CODE_BITMAP[UTF8_2B_CODE_BITMAP_NUM];
 
-// 3ãã¤ãã³ã¼ã 1ãã¤ãç®
+// 3バイトコード 1バイト目
 extern const uint8_t Utf8CodeTable_3B_1st[UTF8_CODE_3B_1_NUM][2];
-// 3ãã¤ãã³ã¼ã 2ãã¤ãç®
+// 3バイトコード 2バイト目
 extern const uint8_t Utf8CodeTable_3B_2nd[UTF8_CODE_3B_2_NUM][2];
 
-// 3ãã¤ãã³ã¼ã 3ãã¤ãç® bitmapãã¼ã¿
+// 3バイトコード 3バイト目 bitmapデータ
 extern const struct utf8_code_bitmap UTF8_3B_CODE_BITMAP[UTF8_3B_CODE_BITMAP_NUM];
 
Index: azure_iot_hub/trunk/ntshell/lcd/shnm16_font.c
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/shnm16_font.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/shnm16_font.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- * æ±é²ãã©ã³ã
+ * 東雲フォント
  * http://openlab.ring.gr.jp/efont/shinonome/
  * Licence
@@ -61,5 +46,5 @@
 #include "shnm16_font.h"
 
-// 1ãã¤ãã³ã¼ã
+// 1バイトコード
 const uint8_t UTF8_1B_CODE_BITMAP[UTF8_1B_CODE_BITMAP_NUM][FONT_HALF_WIDTH * FONT_HEIGHT / 8] = {
 	{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
@@ -320,5 +305,5 @@
 	{0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x22, 0x24, 0x14, 0x08, 0x08, 0x10, 0x10, 0x20, 0x40},
 };
-// 2ãã¤ãã³ã¼ãã1ãã¤ãç®
+// 2バイトコード　1バイト目
 const uint8_t Utf8CodeTable_2B_1st[UTF8_CODE_2B_1_NUM][2] = {
 	{0xC2, 0x06},
@@ -329,5 +314,5 @@
 	{0xD1, 0x11},
 };
-// 2ãã¤ãã³ã¼ã 2ãã¤ãç® bitmapãã¼ã¿
+// 2バイトコード 2バイト目 bitmapデータ
 const struct utf8_code_bitmap UTF8_2B_CODE_BITMAP[UTF8_2B_CODE_BITMAP_NUM] = {
 	{0xA7, {0x01, 0x80, 0x02, 0x40, 0x04, 0x20, 0x06, 0x20, 0x03, 0x00, 0x03, 0x80, 0x04, 0xC0, 0x04, 0x60, 0x06, 0x20, 0x03, 0x20, 0x01, 0xC0, 0x00, 0xC0, 0x04, 0x60, 0x04, 0x20, 0x02, 0x40, 0x01, 0x80}},
@@ -455,5 +440,5 @@
 };
 
-// 3ãã¤ãã³ã¼ã 1ãã¤ãç®
+// 3バイトコード 1バイト目
 const uint8_t Utf8CodeTable_3B_1st[UTF8_CODE_3B_1_NUM][2] = {
 	{0xE2, 0x0E},
@@ -467,5 +452,5 @@
 	{0xEF, 0x03},
 };
-// 3ãã¤ãã³ã¼ã 2ãã¤ãç®
+// 3バイトコード 2バイト目
 const uint8_t Utf8CodeTable_3B_2nd[UTF8_CODE_3B_2_NUM][2] = {
 	{0x80, 0x0E},
@@ -813,5 +798,5 @@
 	{0xBF, 0x05},
 };
-// 3ãã¤ãã³ã¼ã 3ãã¤ãç® bitmapãã¼ã¿
+// 3バイトコード 3バイト目 bitmapデータ
 const struct utf8_code_bitmap UTF8_3B_CODE_BITMAP[UTF8_3B_CODE_BITMAP_NUM] = {
 	{0x90, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
Index: azure_iot_hub/trunk/ntshell/lcd/shnm16_font.h
===================================================================
--- azure_iot_hub/trunk/ntshell/lcd/shnm16_font.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/lcd/shnm16_font.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -67,24 +52,24 @@
 #define UTF8_CODE_2B_1_NUM		6
 #define UTF8_CODE_3B_1_NUM		9
-#define UTF8_CODE_3B_2_NUM		343		/*åè§è¿½å 2/2*/
+#define UTF8_CODE_3B_2_NUM		343		/*半角追加2/2*/
 
 #define UTF8_1B_CODE_BITMAP_NUM	256
-#define UTF8_2B_CODE_BITMAP_NUM	122											/*"ï¿¢","ï¼¼","ï¿ ""ï¿¡"ç§»å)*/
-#define UTF8_3B_CODE_BITMAP_NUM	6757	/*åè§è¿½å 1/2*/	/*åè§è¿½å 2/2*/		/*"ï¿¢","ï¼¼","ï¿ ""ï¿¡"è¿½å )*/
+#define UTF8_2B_CODE_BITMAP_NUM	122											/*"￢","＼","￠""￡"移動)*/
+#define UTF8_3B_CODE_BITMAP_NUM	6757	/*半角追加1/2*/	/*半角追加2/2*/		/*"￢","＼","￠""￡"追加)*/
 
-// 1ãã¤ãã³ã¼ã
+// 1バイトコード
 extern const uint8_t UTF8_1B_CODE_BITMAP[UTF8_1B_CODE_BITMAP_NUM][FONT_HALF_WIDTH * FONT_HEIGHT / 8];
 
-// 2ãã¤ãã³ã¼ãã1ãã¤ãç®
+// 2バイトコード　1バイト目
 extern const uint8_t Utf8CodeTable_2B_1st[UTF8_CODE_2B_1_NUM][2];
-// 2ãã¤ãã³ã¼ã 2ãã¤ãç® bitmapãã¼ã¿
+// 2バイトコード 2バイト目 bitmapデータ
 extern const struct utf8_code_bitmap UTF8_2B_CODE_BITMAP[UTF8_2B_CODE_BITMAP_NUM];
 
-// 3ãã¤ãã³ã¼ã 1ãã¤ãç®
+// 3バイトコード 1バイト目
 extern const uint8_t Utf8CodeTable_3B_1st[UTF8_CODE_3B_1_NUM][2];
-// 3ãã¤ãã³ã¼ã 2ãã¤ãç®
+// 3バイトコード 2バイト目
 extern const uint8_t Utf8CodeTable_3B_2nd[UTF8_CODE_3B_2_NUM][2];
 
-// 3ãã¤ãã³ã¼ã 3ãã¤ãç® bitmapãã¼ã¿
+// 3バイトコード 3バイト目 bitmapデータ
 extern const struct utf8_code_bitmap UTF8_3B_CODE_BITMAP[UTF8_3B_CODE_BITMAP_NUM];
 
Index: azure_iot_hub/trunk/ntshell/ntshell/core/vtrecv.c
===================================================================
--- azure_iot_hub/trunk/ntshell/ntshell/core/vtrecv.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/ntshell/core/vtrecv.c	(revision 389)
@@ -2666,16 +2666,13 @@
 #if (USE_ORIGINAL_LUT==1)
 	/*
-	 * ãã¼ãã«åç
-§ã«ããå®ç¾ã
-	 * åºå®æéã§åä½ããããã³ã¼ããµã¤ãºã¯æ¯è¼çå¤§ããã
+	 * テーブル参照による実現。
+	 * 固定時間で動作するが、コードサイズは比較的大きい。
 	 */
 	return STATE_TABLE[state - 1][ch];
 #else
 	/*
-	 * ãã­ã°ã©ã ã«ããç·å½¢æ¢ç´¢ãã¼ã¸ã§ã³ã
-	 * ãã¼ãã«ã®å¾æ¹ã«ãããã¼ã¿ã«ãªãã»ã©åä½ã¯é
-ãã
-	 * ã³ã¼ããµã¤ãºã¯ãã¼ãã«åç
-§ãããå°ããã
+	 * プログラムによる線形探索バージョン。
+	 * テーブルの後方にあるデータになるほど動作は遅い。
+	 * コードサイズはテーブル参照よりも小さい。
 	 */
 	const int N = sizeof(table) / sizeof(table[0]);
Index: azure_iot_hub/trunk/ntshell/ntshell/core/vtrecv.h
===================================================================
--- azure_iot_hub/trunk/ntshell/ntshell/core/vtrecv.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/ntshell/core/vtrecv.h	(revision 389)
@@ -44,31 +44,20 @@
 
 /**
- * @brief ãªãªã¸ãã«ã«å«ã¾ããLUTãä½¿ããã©ãããæ±ºå®ããã
+ * @brief オリジナルに含まれるLUTを使うかどうかを決定する。
  * @details
- * ãªãªã¸ãã«ã§ã¯ãã·ã¼ã±ã³ã¹ã®é·ç§»ããã¼ãã«åç
-§ã§å®è£
-ãã¦ãã£ãã
- * 15ã®ã¹ãã¼ãã§åããã256ãã¿ã¼ã³ã®å
-¥åãå
-¨ç¶²ç¾
-ãããã¼ãã«ã§ããã
- * ããã¯3840åã®ãã¼ãã«ãã¼ã¿ãæã¤ãã¨ã«ãªãã
+ * オリジナルでは、シーケンスの遷移をテーブル参照で実装してあった。
+ * 15のステートで取りうる256パターンの入力を全網羅するテーブルである。
+ * これは3840個のテーブルデータを持つことになる。
  *
- * ãã¼ãã«åç
-§ã¯ã¡ã¢ãªã«å¯¾ãã¦ãªãã¢ã¢ã¯ã»ã¹å¯è½ãªãã­ã»ããµã«ããã¦
- * åºå®æéã§åä½ããããã¼ãã«åç
-§ã®ã¡ãªããã¯åºå®æéã§ã®å¦çã§ããã
+ * テーブル参照はメモリに対してリニアアクセス可能なプロセッサにおいて
+ * 固定時間で動作する。テーブル参照のメリットは固定時間での処理である。
  *
- * ä¸æ¹ãæ°ãã«å®è£
-ããæ¹æ³ã¯ãéè¤ãããã¼ã¿ãå¤æ°å­å¨ããäºã«çç®ãã
- * ãã®ã§ãåºéæ¯ã«é©ç¨ããã·ã¼ã±ã³ã¹ãå®ç¾©ãããã¼ãã«ãç¨ããã
- * ããã¯ãã¼ãã«ãç·å½¢æ¢ç´¢ããããå¾æ¹ã«ãããã¼ã¿ã«ãªãã»ã©åä½ã¯é
-ãã
- * ããããã³ã¼ããµã¤ãºã¯ãªãªã¸ãã«ã®å
-¨ç¶²ç¾
-å½¢å¼ã®ãã¼ãã«ãããå°ããã
+ * 一方、新たに実装した方法は、重複するデータが多数存在する事に着目した
+ * もので、区間毎に適用するシーケンスを定義したテーブルを用いる。
+ * これはテーブルを線形探索するため後方にあるデータになるほど動作は遅い。
+ * しかし、コードサイズはオリジナルの全網羅形式のテーブルよりも小さい。
  *
- * @retval 0 ä½¿ããªãã
- * @retval 1 ä½¿ãã
+ * @retval 0 使わない。
+ * @retval 1 使う。
  */
 #define USE_ORIGINAL_LUT (0)
Index: azure_iot_hub/trunk/ntshell/ntshell/usrcmd.c
===================================================================
--- azure_iot_hub/trunk/ntshell/ntshell/usrcmd.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/ntshell/usrcmd.c	(revision 389)
@@ -133,5 +133,5 @@
 #define LS_ALL	0x01
 #define LS_LONG	0x02
-/* lsã³ãã³ã 1è¡è¡¨ç¤º */
+/* lsコマンド 1行表示 */
 void print_one_list(FILINFO *fno, BYTE list_option)
 {
@@ -179,6 +179,5 @@
 
 #define LFN_BUF_SIZE (FF_MAX_LFN + 1)
-/* lsã³ãã³ã dirå
- è¡¨ç¤º */
+/* lsコマンド dir内 表示 */
 void print_ls(char *path_p, char *pattern_p, BYTE list_option)
 {
@@ -220,6 +219,5 @@
 
 	while ((res == FR_OK) && (fno.fname[0] != 0)) {
-		if (pattern_p != NULL && (fno.fattrib & AM_DIR) && ((fno.fname[0] == '.') ? (pattern_p[0] == '.') : 1)) {/* FATFS_DIR ã¨ãã¿ã¼ã³ããããã¦ããå ´åã¯ FATFS_DIR å
-é¨ã ls ãã */
+		if (pattern_p != NULL && (fno.fattrib & AM_DIR) && ((fno.fname[0] == '.') ? (pattern_p[0] == '.') : 1)) {/* FATFS_DIR とパターンマッチしている場合は FATFS_DIR 内部を ls する */
 #if FF_USE_LFN
 			fn = *fno.lfname ? fno.lfname : fno.fname;
@@ -318,5 +316,5 @@
 		return 0;
 
-	/* å¼æ°ãã§ãã¯ */
+	/* 引数チェック */
 	for (i = 1; i < argc; i++) {
 		if (argv[i][0] == '-')
@@ -364,6 +362,5 @@
 	}
 	if (fno.fattrib & AM_DIR) {	/* src is dir */
-		/*******************************************************/	/* from dir */ /* æªå®è£
- */
+		/*******************************************************/	/* from dir */ /* 未実装 */
 	}
 	else {						/* src is file */
@@ -697,5 +694,5 @@
 	}
 
-	/* æ¹è¡ã³ã¼ãã®åé¤ */
+	/* 改行コードの削除 */
 	ret = ntlibc_strlen(buf);
 	buf[ret - 1] = '\0';
Index: azure_iot_hub/trunk/ntshell/src/echonet_app_config.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/echonet_app_config.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/echonet_app_config.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,23 +39,22 @@
 #define _ECHONET_APP_CONFIG_H_
 
-#define ECHONET_TASK_STACK_SIZE	1024	/* ECNL UDPã¿ã¹ã¯ç¨ã¹ã¿ãã¯é åã®ãµã¤ãº */
+#define ECHONET_TASK_STACK_SIZE	1024	/* ECNL UDPタスク用スタック領域のサイズ */
 
-#define ECHONET_API_DATAQUEUE_COUNT 5		/* ECHONET Lite APIç¨ãã¼ã¿ã­ã¥ã¼ */
-#define ECHONET_SVC_DATAQUEUE_COUNT 5		/* ECHONET Lite ãµã¼ãã¹å¦çã¿ã¹ã¯ç¨ãã¼ã¿ã­ã¥ã¼ */
-#define ECHONET_UDP_DATAQUEUE_COUNT 5		/* ECHONET Lite UDPéä¿¡å¦çç¨ãã¼ã¿ã­ã¥ã¼ */
+#define ECHONET_API_DATAQUEUE_COUNT 5		/* ECHONET Lite API用データキュー */
+#define ECHONET_SVC_DATAQUEUE_COUNT 5		/* ECHONET Lite サービス処理タスク用データキュー */
+#define ECHONET_UDP_DATAQUEUE_COUNT 5		/* ECHONET Lite UDP通信処理用データキュー */
 
 /*
- * ãµã¼ãã¹å¦çã¿ã¹ã¯ã«è¿½å ã®å¦çãæ¿å
-¥ãããå ´åã«å®ç¾©ãã
+ * サービス処理タスクに追加の処理を挿入したい場合に定義する
  *
- * ã¿ã¤ã ã¢ã¦ãå¤ãè¿ã
+ * タイムアウト値を返す
  * TMO echonet_task_get_timer();
  * #define ECHONET_TASK_GET_TIMER echonet_task_get_timer
  *
- * ã¿ã¤ãã¼ã®æéãé²ãã
+ * タイマーの時間を進める
  * void echonet_task_progress(TMO interval);
  * #define ECHONET_TASK_PROGRESS(interval) echonet_task_progress(interval)
  *
- * ã¿ã¤ã ã¢ã¦ãå¦çï¼ã®ããã®å¼ã³åºãï¼
+ * タイムアウト処理（のための呼び出し）
  * void echonet_task_timeout();
  * #define ECHONET_TASK_TIMEOUT echonet_task_timeout()
@@ -78,34 +62,32 @@
 
 /*
- * ï¼µï¼¤ï¼°éä¿¡ã¿ã¹ã¯ã«è¿½å ã®å¦çãæ¿å
-¥ãããå ´åã«å®ç¾©ãã
+ * ＵＤＰ通信タスクに追加の処理を挿入したい場合に定義する
  *
- * ã¿ã¤ã ã¢ã¦ãå¤ãè¿ã
+ * タイムアウト値を返す
  * TMO echonet_udp_task_get_timer();
  * #define ECHONET_UDP_TASK_GET_TIMER echonet_udp_task_get_timer
  *
- * ã¿ã¤ãã¼ã®æéãé²ãã
+ * タイマーの時間を進める
  * void echonet_udp_task_progress(TMO interval);
  * #define ECHONET_UDP_TASK_PROGRESS(interval) echonet_udp_task_progress(interval)
  *
- * ã¿ã¤ã ã¢ã¦ãå¦çï¼ã®ããã®å¼ã³åºãï¼
+ * タイムアウト処理（のための呼び出し）
  * void echonet_udp_task_timeout();
  * #define ECHONET_UDP_TASK_TIMEOUT echonet_udp_task_timeout()
  */
 
-/* ãããã°åºåæå¹åè¨­å®ããã¨ãã«å®ç¾© */
+/* デバッグ出力有効化設定するときに定義 */
 /* #define ECN_DBG_PUT_ENA */
 
-/* ãããã°åºå(CARP)æå¹åè¨­å®ããã¨ãã«å®ç¾© */
+/* デバッグ出力(CARP)有効化設定するときに定義 */
 /* #define ECN_CAP_PUT_ENA */
 
-/* syslogç©ºãå¾
-ã¡æå¹åè¨­å®ããã¨ãã«å®ç¾© */
+/* syslog空き待ち有効化設定するときに定義 */
 /* #define ECN_DBG_WAI_ENA */
 
-/* æ¨æºã®ecn_data_prop_setãä½¿ããªãã¨ãã«å®ç¾© */
+/* 標準のecn_data_prop_setを使わないときに定義 */
 /* #define ECN_USER_DATA_PROP_SET */
 
-/* æ¨æºã®ecn_data_prop_getãä½¿ããªãã¨ãã«å®ç¾© */
+/* 標準のecn_data_prop_getを使わないときに定義 */
 /* #define ECN_USER_DATA_PROP_GET */
 
Index: azure_iot_hub/trunk/ntshell/src/fdtable.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/fdtable.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/fdtable.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -367,6 +352,5 @@
 		}
 
-		/* ã¤ãã³ãå¾
-ã¡ */
+		/* イベント待ち */
 		flgptn = 0;
 		ret = twai_flg(FLG_SELECT_WAIT, waitptn, TWF_ORW, &flgptn, tmout);
@@ -381,5 +365,5 @@
 			flgptn &= waitptn;
 
-			/* åãåã£ããã©ã°ã®ã¿ã¯ãªã¢ */
+			/* 受け取ったフラグのみクリア */
 			ret = clr_flg(FLG_SELECT_WAIT, ~flgptn);
 			if (ret != E_OK) {
Index: azure_iot_hub/trunk/ntshell/src/fdtable.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/fdtable.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/fdtable.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/src/io_stub.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/io_stub.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/io_stub.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  *
  *  Copyright (C) 2017 Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -161,12 +146,11 @@
 		break;
 	}
-	/* ãã¡ã¤ã«ãä½æ */
+	/* ファイルを作成 */
 	if (flags & O_CREAT) {
-		/* æ¢å­ã®å
-å®¹ã¯æ¶ã */
+		/* 既存の内容は消す */
 		if (flags & O_TRUNC) {
 			fmd |= FA_CREATE_ALWAYS;
 		}
-		/* æ°è¦ä½æã®ä¿é */
+		/* 新規作成の保障 */
 		else if (flags & O_EXCL) {
 			fmd |= FA_CREATE_NEW;
@@ -176,8 +160,7 @@
 		}
 	}
-	/* ããå ´åã¯éã */
+	/* ある場合は開く */
 	else {
-		/* æ¢å­ã®å
-å®¹ã¯æ¶ã */
+		/* 既存の内容は消す */
 		if (flags & O_TRUNC) {
 			fmd |= FA_CREATE_ALWAYS;
@@ -404,5 +387,5 @@
 		}
 		int l = strlen(cwd);
-		// ã«ã¼ããã£ã¬ã¯ããªã®å ´å
+		// ルートディレクトリの場合
 		if (cwd[l - 2] == ':' && cwd[l - 1] == '/') {
 			st->st_size = 0;
Index: azure_iot_hub/trunk/ntshell/src/net_misc.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/net_misc.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/net_misc.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -97,5 +82,5 @@
 
 /*
- *  DHCP, NTP ã¯ã©ã¤ã¢ã³ã ã¿ã¹ã¯
+ *  DHCP, NTP クライアント タスク
  */
 
@@ -112,5 +97,5 @@
 	syslog(LOG_NOTICE, "[NET MISC:%d,%d] started.", nc->tskid, (ID)exinf);
 
-	/* åæå */
+	/* 初期化 */
 	ct = dhcp4_cli_initialize(nc->tskid, UDP4_DHCP_CLI_CEPID);
 	ntp_cli_initialize(nc, NTP_CLI_CEPID);
@@ -126,9 +111,8 @@
 		prev = time;
 
-		/* ã¿ã¤ãã¼åå¾ */
+		/* タイマー取得 */
 		timer = net_misc_get_timer(ct, nc);
 
-		/* å¾
-ã¡ */
+		/* 待ち */
 		error = tslp_tsk(timer);
 		if ((error != E_OK) && (error != E_TMOUT)) {
@@ -145,10 +129,10 @@
 		}
 
-		/* æéçµé */
+		/* 時間経過 */
 		int elapse = time - prev;
 		dhcp4_cli_progress(ct, elapse);
 		ntp_cli_progress(nc, elapse);
 
-		/* èµ·ããããå ´å */
+		/* 起こされた場合 */
 		if (error == E_OK) {
 			dhcp4_cli_wakeup(ct);
@@ -156,5 +140,5 @@
 		}
 
-		/* ã¿ã¤ã ã¢ã¦ãå¦ç */
+		/* タイムアウト処理 */
 		dhcp4_cli_timeout(ct);
 		ntp_cli_timeout(nc);
Index: azure_iot_hub/trunk/ntshell/src/net_misc.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/src/net_misc.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/net_misc.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,12 +37,12 @@
 
 /*
- *  DHCP, NTP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  DHCP, NTP クライアントのシステムコンフィギュレーションファイル
  */
 
-/* ã»ããã© */
+/* セマフォ */
 
 CRE_SEM(SEM_DHCP4_CLI_LOCK,	{ TA_TPRI, 1, 1 });
 
-/* éåä¿¡ãããã¡ */
+/* 送受信バッファ */
 
 CRE_MPF(MPF_DHCP4_CLI_MSG, {
@@ -69,5 +54,5 @@
 	});
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(NET_MISC_TASK, {
Index: azure_iot_hub/trunk/ntshell/src/net_misc.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/net_misc.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/net_misc.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,15 +39,13 @@
 #define _NET_MISC_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define NET_MISC_STACK_SIZE	2048		/* NTP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv4ï¼ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define NET_MISC_STACK_SIZE	2048		/* NTP クライアントタスク（IPv4）のスタックサイズ	*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define NET_MISC_MAIN_PRIORITY	5		/* NTP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv4ï¼ã®åªå
-åº¦		*/
+#define NET_MISC_MAIN_PRIORITY	5		/* NTP クライアントタスク（IPv4）の優先度		*/
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	net_misc_task(intptr_t exinf);
Index: azure_iot_hub/trunk/ntshell/src/netcmd.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/netcmd.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/netcmd.c	(revision 389)
@@ -5,47 +5,32 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
@@ -87,5 +72,5 @@
 
 /*
- *  str_num -- cons_printf ã®æ°å¤å¤æ
+ *  str_num -- cons_printf の数値変換
  */
 
@@ -100,5 +85,5 @@
 
 /*
- *  str_num -- cons_printf ã®æ°å¤å¤æ
+ *  str_num -- cons_printf の数値変換
  */
 
@@ -133,5 +118,5 @@
 
 	pad = ix;
-	if (!left)	/* å³è©°ã */
+	if (!left)	/* 右詰め */
 		for ( ; pad < width; pad ++)
 			str_chr(text, pos, size, padchar);
@@ -140,5 +125,5 @@
 		str_chr(text, pos, size, digits[ix]);
 
-	if (left)	/* å·¦è©°ã */
+	if (left)	/* 左詰め */
 		for ( ; pad < width; pad ++)
 			str_chr(text, pos, size, padchar);
@@ -148,5 +133,5 @@
 
 /*
- *  str_ipv4addr -- IPv4 ã¢ãã¬ã¹åºå
+ *  str_ipv4addr -- IPv4 アドレス出力
  */
 
@@ -154,5 +139,5 @@
 str_ipv4addr (char *text, int size, T_IN4_ADDR *addr, int width)
 {
-	int len = 3, pos = 0;	/* 3 ã¯ '.' ã®æå­æ° */
+	int len = 3, pos = 0;	/* 3 は '.' の文字数 */
 
 	len += str_num(text, &pos, size, (*addr >> 24) & 0xff, 10, radhex, 0, false, ' '); 
@@ -171,5 +156,5 @@
 
 /*
- *  ipv6addr -- IPv6 ã¢ãã¬ã¹åºå
+ *  ipv6addr -- IPv6 アドレス出力
  */
 
@@ -230,5 +215,5 @@
 
 /*
- *  str_macaddr -- MAC ã¢ãã¬ã¹åºå
+ *  str_macaddr -- MAC アドレス出力
  */
 
@@ -378,5 +363,5 @@
 
 /*
-*  s_show_dns_domain_name -- DNS ã®ãã¡ã¤ã³åãè¡¨ç¤ºããã
+*  s_show_dns_domain_name -- DNS のドメイン名を表示する。
 */
 
@@ -406,5 +391,5 @@
 
 /*
- *  show_dns_soa -- DNS ã® SOA RDATA ãè¡¨ç¤ºããã
+ *  show_dns_soa -- DNS の SOA RDATA を表示する。
  */
 
@@ -436,5 +421,5 @@
 
 /*
- *  show_dns_qdsection -- DNS ã® Question ã»ã¯ã·ã§ã³ãè¡¨ç¤ºããã
+ *  show_dns_qdsection -- DNS の Question セクションを表示する。
  */
 
@@ -462,5 +447,5 @@
 
 /*
- *  show_dns_section -- DNS ã®åã»ã¯ã·ã§ã³ãè¡¨ç¤ºããã
+ *  show_dns_section -- DNS の各セクションを表示する。
  */
 
@@ -536,6 +521,5 @@
 }
 /*
- *  dns_info -- DNS æ
-å ±ã®è¡¨ç¤º
+ *  dns_info -- DNS 情報の表示
  */
 
@@ -587,5 +571,5 @@
 
 /*
- *  name_lookup -- ãã¹ãåï¼IP ã¢ãã¬ã¹å¤æ
+ *  name_lookup -- ホスト名－IP アドレス変換
  */
 
@@ -615,5 +599,5 @@
 	}
 
-	/* ã³ãã³ãã®ãªãã·ã§ã³ãè¨­å®ããã*/
+	/* コマンドのオプションを設定する。*/
 	line = skip_blanks(resolv_options(&flags, line, DEFAULT_API_PROTO));
 	if ((flags & (DNS_LUP_FLAGS_PROTO_IPV6 | DNS_LUP_FLAGS_PROTO_IPV4)) == 0) {
@@ -622,13 +606,11 @@
 	}
 
-	/* ç
-§ä¼ãããã¹ãåã»IP ã¢ãã¬ã¹ãè§£æããã*/
+	/* 照会するホスト名・IP アドレスを解析する。*/
 	resolv_hoststr(&flags, hostname, sizeof(hostname), line);
 
-	/* æ­£å¼ãã§ãéå¼ãã§ããã­ãã³ã«ä¸ã¯æ­£å¼ããæå®ããã*/
+	/* 正引きでも逆引きでもプロトコル上は正引きを指定する。*/
 	flags |= DNS_LUP_OPCODE_FORWARD;
 
-	/* IPv6 ã¢ãã¬ã¹ãã¾ãã¯ IPv4 ã¢ãã¬ã¹ãæå®ãããæã¯ãç
-§ä¼ã¿ã¤ãã¯ PTR ã«è¨­å®ããã*/
+	/* IPv6 アドレス、または IPv4 アドレスが指定された時は、照会タイプは PTR に設定する。*/
 	if (((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_IPV6) ||
 		((flags & DNS_LUP_FLAGS_NAME_MASK) == DNS_LUP_FLAGS_NAME_IPV4))
Index: azure_iot_hub/trunk/ntshell/src/netcmd.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/netcmd.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/netcmd.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/src/ntp_cli.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntp_cli.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntp_cli.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /* 
- *  NTP ã¯ã©ã¤ã¢ã³ã
+ *  NTP クライアント
  */
 
@@ -84,17 +69,17 @@
 #include "ntp_cli.h"
 
-/* NTP ãµã¼ãã®ãã¼ãçªå· */
+/* NTP サーバのポート番号 */
 
 #define NTP_SRV_PORTNO		UINT_C(123)
 
-/* NTP ãµã¼ãã®URL */
+/* NTP サーバのURL */
 
 #define NTP_SRV_URL		"ntp.nict.jp"
 
-/* éä¿¡éé */
+/* 送信間隔 */
 
 #define SLP_ITV		(60*SYSTIM_HZ)
 
-/* é¢æ° */
+/* 関数 */
 
 void ntp_cli_update_time(T_NTP_CLI_CONTEXT *nc);
@@ -105,6 +90,5 @@
 
 /*
- *  å
-¨åå¤æ°
+ *  全域変数
  */
 
@@ -171,6 +155,6 @@
 }
 
-#define NTP_POLL_ASYNC 10		// 1024ç§æ¯ã«æå»åãåãã
-#define NTP_POLL_NORMAL 16		// 65536ç§æ¯ã«æå»åãåãã
+#define NTP_POLL_ASYNC 10		// 1024秒毎に時刻問い合わせ
+#define NTP_POLL_NORMAL 16		// 65536秒毎に時刻問い合わせ
 
 void ntp_cli_initialize(T_NTP_CLI_CONTEXT *nc, ID cepid)
@@ -214,5 +198,5 @@
 	T_NTP_MSG *ntp = &nc->ntp_msg;
 
-	// NTPæå»å¿ç­ã®å ´å
+	// NTP時刻応答の場合
 	if ((ntp->mode == NTP_MODE_SERVER) || (ntp->mode == NTP_MODE_BROADCAST)) {
 		switch (nc->state) {
@@ -221,16 +205,15 @@
 			break;
 		case NTP_CLI_STATE_REQUEST:
-			// ãµã¼ãã¼ããã®å¿ç­æå»ãåå¾
+			// サーバーからの応答時刻を取得
 			memcpy(&nc->receive_timestamp, &ntp->receive_timestamp, sizeof(nc->receive_timestamp));
 			memcpy(&nc->transmit_timestamp, &ntp->transmit_timestamp, sizeof(nc->transmit_timestamp));
 
-			// ç¾å¨æå»åå¾
+			// 現在時刻取得
 			ntp_cli_read_time(nc, &tp);
 
-			// NTPåç
-§æå»ã«ç¾å¨æå»ãè¨­å®
+			// NTP参照時刻に現在時刻を設定
 			set_systime_to_ntptime(&tp, &nc->recv_resp_timestamp);
 
-			// æå»ãæ´æ°
+			// 時刻を更新
 			ntp_cli_update_time(nc);
 
@@ -243,14 +226,14 @@
 		}
 	}
-	// NTPæå»è¦æ±ã®å ´å
+	// NTP時刻要求の場合
 	else if (ntp->mode == NTP_MODE_CLIENT) {
-		// ç¾å¨æå»åå¾
+		// 現在時刻取得
 		ntp_cli_read_time(nc, &tp);
 
-		// NTPåä¿¡ã»éä¿¡æå»ã«ç¾å¨æå»ãè¨­å®
+		// NTP受信・送信時刻に現在時刻を設定
 		set_systime_to_ntptime(&tp, &nc->receive_timestamp);
 		set_systime_to_ntptime(&tp, &nc->transmit_timestamp);
 
-		// NTPãã±ããéä¿¡
+		// NTPパケット送信
 		ntp_cli_time_synchronization(nc, NTP_MODE_SERVER);
 	}
@@ -267,5 +250,5 @@
 	div2_timestamp(&ofs);
 
-	// å·®ãå¤§ããå ´åã¯ãµã¼ãã¼ã®éä¿¡æéãè¨­å®
+	// 差が大きい場合はサーバーの送信時間を設定
 	if (ntohl(ofs.integer) > 2) {
 		memcpy(&nc->reference_timestamp, &nc->transmit_timestamp, sizeof(nc->transmit_timestamp));
@@ -286,5 +269,5 @@
 #endif
 	{
-		/* æ¹è¡ã³ã¼ãã®åé¤ */
+		/* 改行コードの削除 */
 		int len = strnlen(nc->buf, sizeof(nc->buf) - 1);
 		nc->buf[len - 1] = '\0';
@@ -344,17 +327,16 @@
 		/* through */
 	case NTP_CLI_STATE_RESOLVE_ADDR:
-		// ç¾å¨æå»åå¾
+		// 現在時刻取得
 		ntp_cli_read_time(nc, &tp);
 
-		// NTPéå§æå»ã«ç¾å¨æå»ãè¨­å®
+		// NTP開始時刻に現在時刻を設定
 		set_systime_to_ntptime(&tp, &nc->originate_timestamp);
 		memset(&nc->receive_timestamp, 0, sizeof(nc->receive_timestamp));
 		memset(&nc->transmit_timestamp, 0, sizeof(nc->transmit_timestamp));
 
-		// NTPãã±ããéä¿¡
+		// NTPパケット送信
 		ntp_cli_time_synchronization(nc, NTP_MODE_CLIENT);
 
-		// NTPå¿ç­å¾
-ã¡ã«é·ç§»ã500msã§ãªãã©ã¤
+		// NTP応答待ちに遷移、500msでリトライ
 		nc->retry = 0;
 		nc->state = NTP_CLI_STATE_REQUEST;
@@ -366,37 +348,35 @@
 			nc->state = NTP_CLI_STATE_ASYNC;
 			nc->poll = NTP_POLL_ASYNC;
-			nc->timer = (1 << nc->poll) * 1000 * 1000;  // 1024ç§å¾ã«æå»åæ
-			break;
-		}
-		// ç¾å¨æå»åå¾
+			nc->timer = (1 << nc->poll) * 1000 * 1000;  // 1024秒後に時刻同期
+			break;
+		}
+		// 現在時刻取得
 		ntp_cli_read_time(nc, &tp);
 
-		// NTPéå§æå»ã«ç¾å¨æå»ãè¨­å®
+		// NTP開始時刻に現在時刻を設定
 		set_systime_to_ntptime(&tp, &nc->originate_timestamp);
 		memset(&nc->receive_timestamp, 0, sizeof(nc->receive_timestamp));
 		memset(&nc->transmit_timestamp, 0, sizeof(nc->transmit_timestamp));
 
-		// NTPãã±ããéä¿¡
+		// NTPパケット送信
 		ntp_cli_time_synchronization(nc, NTP_MODE_CLIENT);
 
-		// NTPå¿ç­å¾
-ã¡ã«é·ç§»ã500msã§ãªãã©ã¤
+		// NTP応答待ちに遷移、500msでリトライ
 		nc->state = NTP_CLI_STATE_REQUEST;
 		nc->timer = 500 * 1000;
 		break;
 	case NTP_CLI_STATE_SYNC:
-		// ç¾å¨æå»åå¾
+		// 現在時刻取得
 		ntp_cli_read_time(nc, &tp);
 
-		// NTPéå§æå»ã«ç¾å¨æå»ãè¨­å®
+		// NTP開始時刻に現在時刻を設定
 		set_systime_to_ntptime(&tp, &nc->originate_timestamp);
 		memset(&nc->receive_timestamp, 0, sizeof(nc->receive_timestamp));
 		memset(&nc->transmit_timestamp, 0, sizeof(nc->transmit_timestamp));
 
-		// NTPãã±ããéä¿¡
+		// NTPパケット送信
 		ntp_cli_time_synchronization(nc, NTP_MODE_CLIENT);
 
-		// NTPå¿ç­å¾
-ã¡ã«é·ç§»ã500msã§ãªãã©ã¤
+		// NTP応答待ちに遷移、500msでリトライ
 		nc->state = NTP_CLI_STATE_REQUEST;
 		nc->timer = 500 * 1000;
@@ -418,22 +398,21 @@
 	ntp->stratum = (mode == NTP_MODE_CLIENT) ? 2 : 1;
 	ntp->poll = nc->poll;
-	ntp->precision = 0xfa;   // ç²¾åº¦ã¯10^-6(1Î¼s)
+	ntp->precision = 0xfa;   // 精度は10^-6(1μs)
 	ntp->root_delay = htonl(0);
 	ntp->root_dispersion = htonl(0);
-	// åæã®ããã®å¤é¨çãªææ®µã®ãªããµãããã
+	// 同期のための外部的な手段のないサブネット
 	ntp->reference_identifier[0] = 'L';
 	ntp->reference_identifier[1] = 'O';
 	ntp->reference_identifier[2] = 'C';
 	ntp->reference_identifier[3] = 'L';
-	// åç
-§ã¿ã¤ã ã¹ã¿ã³ã
+	// 参照タイムスタンプ
 	memcpy(&ntp->reference_timestamp, &nc->reference_timestamp, sizeof(ntp->reference_timestamp));
-	// éå§ã¿ã¤ã ã¹ã¿ã³ã
+	// 開始タイムスタンプ
 	memcpy(&ntp->originate_timestamp, &nc->originate_timestamp, sizeof(ntp->originate_timestamp));
-	// åä¿¡ã¿ã¤ã ã¹ã¿ã³ã
+	// 受信タイムスタンプ
 	memcpy(&ntp->receive_timestamp, &nc->receive_timestamp, sizeof(ntp->receive_timestamp));
-	// éä¿¡ã¿ã¤ã ã¹ã¿ã³ã
+	// 送信タイムスタンプ
 	memcpy(&ntp->transmit_timestamp, &nc->transmit_timestamp, sizeof(ntp->transmit_timestamp));
-	// éµè­å¥å­
+	// 鍵識別子
 	ntp->key_identifier[0] = 0x08;
 	ntp->key_identifier[1] = 0x18;
@@ -486,5 +465,5 @@
 
 /*
- *  ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ *  ノンブロッキングコールのコールバック関数
  */
 
@@ -497,5 +476,5 @@
 	len = *(ER_UINT*)p_parblk;
 	if (len < 0 && len != E_RLWAI) {
-		/* E_RLWAI ä»¥å¤ã§ã0 ä»¥ä¸ã®å ´åã¯ãã¨ã©ã¼ãæå³ãã¦ããã*/
+		/* E_RLWAI 以外で、0 以下の場合は、エラーを意味している。*/
 		syslog(LOG_NOTICE, "[NTP CLI,%d] callback error: %s, fncd: %s", nc->cepid,
 			itron_strerror(len), in_strtfn(fncd));
@@ -525,5 +504,5 @@
 
 /*
- *  NTP ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯
+ *  NTP クライアント送信タスク
  */
 
@@ -539,5 +518,5 @@
 	syslog(LOG_NOTICE, "[NTP CLI:%d,%d] started.", nc->tskid, (ID)exinf);
 
-	/* åæå */
+	/* 初期化 */
 	ntp_cli_initialize(nc, (ID)exinf);
 
@@ -552,9 +531,8 @@
 		prev = time;
 
-		/* ã¿ã¤ãã¼åå¾ */
+		/* タイマー取得 */
 		timer = ntp_cli_get_timer(nc);
 
-		/* å¾
-ã¡ */
+		/* 待ち */
 		error = tslp_tsk(timer);
 		if ((error != E_OK) && (error != E_TMOUT)) {
@@ -571,13 +549,13 @@
 		}
 
-		/* æéçµé */
+		/* 時間経過 */
 		ntp_cli_progress(nc, time - prev);
 
-		/* èµ·ããããå ´å */
+		/* 起こされた場合 */
 		if (error == E_OK) {
 			ntp_cli_wakeup(nc);
 		}
 
-		/* ã¿ã¤ã ã¢ã¦ãå¦ç */
+		/* タイムアウト処理 */
 		ntp_cli_timeout(nc);
 	}
Index: azure_iot_hub/trunk/ntshell/src/ntp_cli.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntp_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntp_cli.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,8 +37,8 @@
 
 /*
- *  NTP ã¯ã©ã¤ã¢ã³ãã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  NTP クライアントのシステムコンフィギュレーションファイル
  */
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 CRE_TSK(NTP_CLI_TASK, {
Index: azure_iot_hub/trunk/ntshell/src/ntp_cli.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntp_cli.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntp_cli.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -54,19 +39,17 @@
 #define _NTP_CLI_H_
 
-/* ã¹ã¿ãã¯ãµã¤ãº */
+/* スタックサイズ */
 
-#define NTP_CLI_STACK_SIZE	1024		/* NTP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv4ï¼ã®ã¹ã¿ãã¯ãµã¤ãº	*/
+#define NTP_CLI_STACK_SIZE	1024		/* NTP クライアントタスク（IPv4）のスタックサイズ	*/
 
-/* åªå
-åº¦ */
+/* 優先度 */
 
-#define NTP_CLI_MAIN_PRIORITY	5		/* NTP ã¯ã©ã¤ã¢ã³ãã¿ã¹ã¯ï¼IPv4ï¼ã®åªå
-åº¦		*/
+#define NTP_CLI_MAIN_PRIORITY	5		/* NTP クライアントタスク（IPv4）の優先度		*/
 
-/* ã¿ã¹ã¯ */
+/* タスク */
 
 extern void	ntp_cli_task(intptr_t exinf);
 
-/* NTPã¿ã¤ã ã¹ã¿ã³ã */
+/* NTPタイムスタンプ */
 typedef struct ntp_timestamp {
 	uint32_t integer;
@@ -74,5 +57,5 @@
 } __attribute__((packed)) T_NTP_TIMESTAMP;
 
-/* NTPãã±ãã */
+/* NTPパケット */
 typedef struct ntp_msg {
 	uint8_t mode : 3;
@@ -104,6 +87,5 @@
 } ntp_mode_t;
 
-/* NTPã¯ã©ã¤ã¢ã³ãç¶æ
- */
+/* NTPクライアント状態 */
 typedef enum ntp_cli_state {
 	NTP_CLI_STATE_ASYNC,
@@ -137,5 +119,5 @@
 } T_NTP_CLI_CONTEXT;
 
-/* é¢æ° */
+/* 関数 */
 
 void ntp_cli_initialize(T_NTP_CLI_CONTEXT *nc, ID cepid);
Index: azure_iot_hub/trunk/ntshell/src/ntshell.cdl
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntshell.cdl	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntshell.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -59,21 +44,21 @@
 
 /*
- *  ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®ããã©ã«ã
+ *  タスクのスタックサイズのデフォルト
  */
-const size_t DefaultTaskStackSize = 1024;		/* ã¹ã¿ãã¯ãµã¤ãºï¼1KBï¼*/
+const size_t DefaultTaskStackSize = 1024;		/* スタックサイズ（1KB）*/
 
 /*
- *  ã·ã¹ãã ã­ã°ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãºã®å®ç¾©
+ *  システムログタスクのスタックサイズの定義
  */
 const size_t LogTaskStackSize = DefaultTaskStackSize;
 
 /*
- *  ã«ã¼ãã«èµ·åã¡ãã»ã¼ã¸ã«é¢ããå®ç¾©
+ *  カーネル起動メッセージに関する定義
  */
-const char *const BannerTargetName = C_EXP("TARGET_NAME");		/* ã¿ã¼ã²ããå */
-const char *const BannerCopyrightNotice = "";			/* èä½æ¨©è¡¨ç¤º */
+const char *const BannerTargetName = C_EXP("TARGET_NAME");		/* ターゲット名 */
+const char *const BannerCopyrightNotice = "";			/* 著作権表示 */
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®ã»ã«ã¿ã¤ãã®å®ç¾©
+ *  ターゲット依存のセルタイプの定義
  */
 import("syssvc/tPutLogSIOPort.cdl");
@@ -81,5 +66,5 @@
 
 /*
- *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ã®çµã¿ä¸ãè¨è¿°
+ *  シリアルインタフェースドライバのターゲット依存部の組み上げ記述
  */
 cell tSIOPortNTShell SIOPortTarget1 {
@@ -87,8 +72,8 @@
 
 /*
- *  ä½ã¬ãã«åºåã®çµã¿ä¸ãè¨è¿°
+ *  低レベル出力の組み上げ記述
  */
 cell tPutLogSIOPort PutLogTarget {
-	/* SIOãã©ã¤ãã¨ã®çµå */
+	/* SIOドライバとの結合 */
 	cSIOPort = SIOPortTarget1.eSIOPort;
 };
Index: azure_iot_hub/trunk/ntshell/src/ntshell_main.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntshell_main.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntshell_main.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /* 
- *  ãµã³ãã«ãã­ã°ã©ã (1)ã®æ¬ä½
+ *  サンプルプログラム(1)の本体
  */
 
@@ -107,5 +92,5 @@
 
 /*
- *  ntshellã¿ã¹ã¯
+ *  ntshellタスク
  */
 void ntshell_task(intptr_t exinf)
Index: azure_iot_hub/trunk/ntshell/src/ntshell_main.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntshell_main.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntshell_main.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2016 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,5 +37,5 @@
 
 /*
- *  ntshellã®ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ntshellのシステムコンフィギュレーションファイル
  */
 #include "ntshell_main.h"
Index: azure_iot_hub/trunk/ntshell/src/ntshell_main.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/ntshell_main.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/ntshell_main.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014-2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -55,9 +40,9 @@
 
 /*
- *		ntshellã¿ã¹ã¯ã®ããããã¡ã¤ã«
+ *		ntshellタスクのヘッダファイル
  */
 
 /*
- *  ã¿ã¼ã²ããä¾å­ã®å®ç¾©
+ *  ターゲット依存の定義
  */
 #include <kernel.h>
@@ -67,18 +52,15 @@
 
 /*
- *  åã¿ã¹ã¯ã®åªå
-åº¦ã®å®ç¾©
+ *  各タスクの優先度の定義
  */
 
-#define NTSHELL_PRIORITY	8		/* ntshellã¿ã¹ã¯ã®åªå
-åº¦ */
+#define NTSHELL_PRIORITY	8		/* ntshellタスクの優先度 */
 
-#define NTSHELL_STACK_SIZE	10240	/* ntshellã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®ãµã¤ãº */
+#define NTSHELL_STACK_SIZE	10240	/* ntshellタスクのスタック領域のサイズ */
 
-#define NUM_NTSHELL_DATAQUEUE	1	/* ntshellã¿ã¹ã¯ã§å¾
-ã¡åãã¦ãããã¼ã¿ã­ã¥ã¼ã®ãµã¤ãº */
+#define NUM_NTSHELL_DATAQUEUE	1	/* ntshellタスクで待ち受けているデータキューのサイズ */
 
 /*
- *  é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨
+ *  関数のプロトタイプ宣言
  */
 #ifndef TOPPERS_MACRO_ONLY
@@ -94,21 +76,21 @@
 extern PRI main_task_priority;
 
-/* ntshellã®åæå */
+/* ntshellの初期化 */
 void sys_init(intptr_t exinf);
 
-/* ntshellã¿ã¹ã¯åæå */
+/* ntshellタスク初期化 */
 void ntshell_task_init(ID portid);
 
-/* ntshellã¿ã¹ã¯ */
+/* ntshellタスク */
 void ntshell_task(intptr_t exinf);
 
-/* éå§ */
+/* 開始 */
 void ntshell_change_netif_link(uint8_t link_up, uint8_t up);
 
-/* ã³ãã³ãå®è¡ */
+/* コマンド実行 */
 int cmd_execute(const char *text, void *extobj);
 
 /* 
- * ãã³ãã­ãã­ã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°
+ * ノンブロッキングコールのコールバック関数
  */
 extern ER socket_udp_callback(ID cepid, FN fncd, void *p_parblk);
Index: azure_iot_hub/trunk/ntshell/src/route_cfg.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/route_cfg.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/route_cfg.c	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,5 +33,5 @@
 
 /* 
- *  ã«ã¼ãã£ã³ã°è¡¨
+ *  ルーティング表
  */
 
@@ -56,5 +44,5 @@
 #include <netinet/in_var.h>
 
-/* IPv6 ã«é¢ããå®ç¾© */
+/* IPv6 に関する定義 */
 
 #ifdef _IP6_CFG
@@ -68,5 +56,5 @@
 #endif	/* of #ifdef _IP6_CFG */
 
-/* IPv4 ã«é¢ããå®ç¾© */
+/* IPv4 に関する定義 */
 
 #ifdef _IP4_CFG
@@ -92,17 +80,12 @@
 T_IN4_RTENTRY routing4_tbl[NUM_IN4_ROUTE_ENTRY] = {
 
-	/* ç°ãªã LANãdefault gateway ã«ããéæ¥é
-é	*/
+	/* 異なる LAN、default gateway による間接配送	*/
 	{ 0,			0,			IPV4_ADDR_DEFAULT_GW	},
 
-	/* åä¸ LAN å
-ãç´æ¥é
-é				*/
+	/* 同一 LAN 内、直接配送				*/
 	{ IPV4_ADDR_LOCAL &
 	  IPV4_ADDR_LOCAL_MASK,	IPV4_ADDR_LOCAL_MASK,	0			},
 
-	/* åä¸ LAN å
-ã¸ã®ãã­ã¼ãã­ã£ã¹ããç´æ¥é
-é	*/
+	/* 同一 LAN 内へのブロードキャスト、直接配送	*/
 	{ 0xffffffff,		0xffffffff,		0			},
 
Index: azure_iot_hub/trunk/ntshell/src/shellif.h
===================================================================
--- azure_iot_hub/trunk/ntshell/src/shellif.h	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/shellif.h	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -286,5 +271,5 @@
 struct rusage;
 int shell_wait4(pid_t, int *, int, struct rusage *);
-// âââmusl
+// ↑↑↑musl
 
 // arduino.h
Index: azure_iot_hub/trunk/ntshell/src/socket_stub.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/socket_stub.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/socket_stub.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2017 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/src/stdio_stub.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/stdio_stub.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/stdio_stub.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2017-2019 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -403,19 +388,18 @@
 	ER ret;
 
-	// ã¿ã¹ã¯ã³ã³ãã­ã¹ãã§ãªãå ´å
+	// タスクコンテキストでない場合
 	if (sense_context()) {
-		// éä¿¡å¯è½ã«ãªãã¾ã§å¾
-ã¡
+		// 送信可能になるまで待ち
 		while (!serial_writable(serial));
-		// éä¿¡ãã
+		// 送信する
 		serial_putc(serial, c);
 		return;
 	}
 
-	// éä¿¡ãããã¡ãç©ºã§
+	// 送信バッファが空で
 	if (uart->tx_pos_w == uart->tx_pos_r) {
-		// éä¿¡å¯è½ãªã
+		// 送信可能なら
 		if (serial_writable(serial)) {
-			// éä¿¡ãã
+			// 送信する
 			serial_putc(serial, c);
 			return;
@@ -423,10 +407,10 @@
 	}
 
-	// éä¿¡ãããã¡ã«è¿½å ãã
+	// 送信バッファに追加する
 	uart->tx_buf[uart->tx_pos_w++] = c;
 	if (uart->tx_pos_w >= sizeof(uart->tx_buf))
 		uart->tx_pos_w = 0;
 
-	// éä¿¡å¯è½ã«ãªã£ããå²ãè¾¼ã¿ããããããè¨­å®
+	// 送信可能になったら割り込みをもらうよう設定
 	serial_irq_set(serial, TxIrq, true);
 
@@ -475,11 +459,11 @@
 	}
 
-	// éä¿¡ãããã¡ãç©ºãªã
+	// 送信バッファが空なら
 	if (uart->tx_pos_w == uart->tx_pos_r) {
-		// SIOãã©ã¤ãã®éä¿¡
+		// SIOドライバの送信
 		sio_isr_snd(fp->handle);
-		// ãã£ã±ãéä¿¡ãããã¡ãç©ºãªã
+		// やっぱり送信バッファが空なら
 		if (uart->tx_pos_w == uart->tx_pos_r) {
-			// éä¿¡å²ãè¾¼ã¿åæ­¢
+			// 送信割り込み停止
 			serial_irq_set(serial, TxIrq, false);
 			return;
@@ -491,5 +475,5 @@
 		uart->tx_pos_r = 0;
 
-	// éä¿¡ãã
+	// 送信する
 	serial_putc(serial, c);
 }
Index: azure_iot_hub/trunk/ntshell/src/syscall.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/syscall.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/syscall.c	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  *
  *  Copyright (C) 2018 Cores Co., Ltd. Japan
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  *
  *  @(#) $Id$
Index: azure_iot_hub/trunk/ntshell/src/tSIOPortNTShell.cdl
===================================================================
--- azure_iot_hub/trunk/ntshell/src/tSIOPortNTShell.cdl	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/tSIOPortNTShell.cdl	(revision 389)
@@ -9,47 +9,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -57,19 +42,19 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼NTShellç¨ï¼
- *		ã®ã³ã³ãã¼ãã³ãè¨è¿°
+ *		シリアルインタフェースドライバのターゲット依存部（NTShell用）
+ *		のコンポーネント記述
  */
 
 /*
- *  NTShell ã«é¢ããå®ç¾©
+ *  NTShell に関する定義
  */
 import_C("termios.h");
 
 /*
- *  SIOãã©ã¤ãã®æ¬ä½ã®ã»ã«ã¿ã¤ã
+ *  SIOドライバの本体のセルタイプ
  */
 celltype tSIOPortNTShellMain {
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå
+	 *  シリアルインタフェースドライバとの結合
 	 */
 	entry				sSIOPort		eSIOPort;
@@ -77,35 +62,33 @@
 
 	/*
-	 *  çµäºå¦çã«ã¼ãã³
+	 *  終了処理ルーチン
 	 */
 	entry	sRoutineBody	eTerminate;
 
 	attr {
-		const char	*path;				/* ãã¹å */
+		const char	*path;				/* パス名 */
 	};
 
 	var {
-		bool_t			opened = false;	/* ãªã¼ãã³æ¸ã¿ãã©ã° */
-		struct termios	saved_term;		/* å
-ã®ç«¯æ«å¶å¾¡æ
-å ± */
-		int_t			read_fd;		/* èª­åºãç¨ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ */
-		bool_t			rcv_flag;		/* åä¿¡æå­ãããã¡æå¹ãã©ã° */
-		char			rcv_buf;		/* åä¿¡æå­ãããã¡ */
-		bool_t			rcv_rdy;		/* åä¿¡éç¥ã³ã¼ã«ããã¯è¨±å¯ãã©ã° */
-		int_t			write_fd;		/* æ¸è¾¼ã¿ç¨ãã¡ã¤ã«ãã£ã¹ã¯ãªãã¿ */
-		bool_t			snd_flag;		/* éä¿¡æå­ãããã¡æå¹ãã©ã° */
-		char			snd_buf;		/* éä¿¡æå­ãããã¡ */
-		bool_t			snd_rdy;		/* éä¿¡éç¥ã³ã¼ã«ããã¯è¨±å¯ãã©ã° */
+		bool_t			opened = false;	/* オープン済みフラグ */
+		struct termios	saved_term;		/* 元の端末制御情報 */
+		int_t			read_fd;		/* 読出し用ファイルディスクリプタ */
+		bool_t			rcv_flag;		/* 受信文字バッファ有効フラグ */
+		char			rcv_buf;		/* 受信文字バッファ */
+		bool_t			rcv_rdy;		/* 受信通知コールバック許可フラグ */
+		int_t			write_fd;		/* 書込み用ファイルディスクリプタ */
+		bool_t			snd_flag;		/* 送信文字バッファ有効フラグ */
+		char			snd_buf;		/* 送信文字バッファ */
+		bool_t			snd_rdy;		/* 送信通知コールバック許可フラグ */
 	};
 };
 
 /*
- *  SIOãã©ã¤ãï¼è¤åã³ã³ãã¼ãã³ãï¼ã®ã»ã«ã¿ã¤ã
+ *  SIOドライバ（複合コンポーネント）のセルタイプ
  */
 [active]
 composite tSIOPortNTShell {
 	/*
-	 *  ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã¨ã®çµå
+	 *  シリアルインタフェースドライバとの結合
 	 */
 	entry				sSIOPort	eSIOPort;
@@ -113,12 +96,12 @@
 
 	/*
-	 *  å±æ§ã®å®ç¾©
+	 *  属性の定義
 	 */
 	attr {
-		const char	*path = C_EXP("NULL");		/* ãã¹å */
+		const char	*path = C_EXP("NULL");		/* パス名 */
 	};
 
 	/*
-	 *  SIOãã©ã¤ãã®æ¬ä½
+	 *  SIOドライバの本体
 	 */
 	cell tSIOPortNTShellMain SIOPortMain {
@@ -129,5 +112,5 @@
 
 	/*
-	 *  SIOãã©ã¤ãã®çµäºå¦çã«ã¼ãã³
+	 *  SIOドライバの終了処理ルーチン
 	 */
 	cell tTerminateRoutine TerminateSIO {
Index: azure_iot_hub/trunk/ntshell/src/tSIOPortNTShellMain.c
===================================================================
--- azure_iot_hub/trunk/ntshell/src/tSIOPortNTShellMain.c	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/tSIOPortNTShellMain.c	(revision 389)
@@ -7,47 +7,32 @@
  *              Graduate School of Information Science, Nagoya Univ., JAPAN
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
- * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
+ * 
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  $Id$
@@ -55,5 +40,5 @@
 
 /*
- *		ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãã®ã¿ã¼ã²ããä¾å­é¨ï¼NTShellç¨ï¼
+ *		シリアルインタフェースドライバのターゲット依存部（NTShell用）
  */
 
@@ -68,5 +53,5 @@
  
 /*
- *  SIOãã¼ãã®ãªã¼ãã³
+ *  SIOポートのオープン
  */
 void
@@ -79,5 +64,5 @@
 	if (!VAR_opened) {
 		/*
-		 *  æ¢ã«ãªã¼ãã³ãã¦ããå ´åã¯ãäºéã«ãªã¼ãã³ããªãï¼
+		 *  既にオープンしている場合は、二重にオープンしない．
 		 */
 		if (ATTR_path != NULL) {
@@ -88,6 +73,5 @@
 		}
 		else {
-			fd = STDIN_FILENO;				/* æ¨æºå
-¥åºåãä½¿ã */
+			fd = STDIN_FILENO;				/* 標準入出力を使う */
 			VAR_read_fd = STDIN_FILENO;
 			VAR_write_fd = STDOUT_FILENO;
@@ -110,5 +94,5 @@
 
 /*
- *  SIOãã¼ãã®ã¯ã­ã¼ãº
+ *  SIOポートのクローズ
  */
 void
@@ -131,5 +115,5 @@
 
 /*
- *  SIOãã¼ãã¸ã®æå­éä¿¡
+ *  SIOポートへの文字送信
  */
 bool_t
@@ -156,5 +140,5 @@
 
 /*
- *  SIOãã¼ãããã®æå­åä¿¡
+ *  SIOポートからの文字受信
  */
 int_t
@@ -179,5 +163,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
+ *  SIOポートからのコールバックの許可
  */
 void
@@ -197,5 +181,5 @@
 
 /*
- *  SIOãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ­¢
+ *  SIOポートからのコールバックの禁止
  */
 void
@@ -215,5 +199,5 @@
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 bool_t
@@ -240,5 +224,5 @@
 
 /*
- *  SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
+ *  SIOの割込みサービスルーチン
  */
 bool_t
@@ -263,5 +247,5 @@
 
 /*
- *  SIOãã©ã¤ãã®çµäºå¦ç
+ *  SIOドライバの終了処理
  */
 void
Index: azure_iot_hub/trunk/ntshell/src/tinet_main.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/src/tinet_main.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/tinet_main.cfg	(revision 389)
@@ -1,50 +1,35 @@
 /*
- *  TOPPERS ECHONET Lite Communication Middleware
+ *  TOPPERS PROJECT Home Network Working Group Software
  * 
  *  Copyright (C) 2014 Cores Co., Ltd. Japan
  * 
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
- *  ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
- *  å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
- *      ã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *    (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
- *        å ±åãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
- *      ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
- *      ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
- *      å
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+ *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+ *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+ *      と．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+ *        報告すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+ *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+ *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+ *      免責すること．
  * 
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
- *  ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
- *  ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
- *  ã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+ *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+ *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+ *  の責任を負わない．
  * 
  *  @(#) $Id$
@@ -52,10 +37,10 @@
 
 /*
- *  ãããã¯ã¼ã¯å¯¾å¿ main.c ãã­ã°ã©ã ã® TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  ネットワーク対応 main.c プログラムの TCP/IP コンフィギュレーションファイル
  */
 
 #include "main.h"
 
-/* Socketç¨ éä¿¡ç«¯ç¹ */
+/* Socket用 通信端点 */
 
 #ifdef SUPPORT_INET4
Index: azure_iot_hub/trunk/ntshell/src/tinet_ntp_cli.cfg
===================================================================
--- azure_iot_hub/trunk/ntshell/src/tinet_ntp_cli.cfg	(revision 388)
+++ azure_iot_hub/trunk/ntshell/src/tinet_ntp_cli.cfg	(revision 389)
@@ -5,39 +5,27 @@
  *                   Tomakomai National College of Technology, JAPAN
  *
- *  ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 
- *  ã«ãã£ã¦å
-¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
- *  è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
- *  ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼
- *  å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
- *  (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
- *      æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
- *      ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
- *  (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
- *      è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
- *      ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
- *      ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼
- *    (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
- *        ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
- *  (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
- *      å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
+ *  上記著作権者は，以下の (1)～(4) の条件か，Free Software Foundation 
+ *  によって公表されている GNU General Public License の Version 2 に記
+ *  述されている条件を満たす場合に限り，本ソフトウェア（本ソフトウェア
+ *  を改変したものを含む．以下同じ）を使用・複製・改変・再配布（以下，
+ *  利用と呼ぶ）することを無償で許諾する．
+ *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+ *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+ *      スコード中に含まれていること．
+ *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+ *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+ *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+ *      の無保証規定を掲載すること．
+ *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+ *      用できない形で再配布する場合には，次の条件を満たすこと．
+ *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+ *        作権表示，この利用条件および下記の無保証規定を掲載すること．
+ *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+ *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
  *
- *  æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
- *  ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
- *  å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
- *  æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
+ *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+ *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，その適用可能性も
+ *  含めて，いかなる保証も行わない．また，本ソフトウェアの利用により直
+ *  接的または間接的に生じたいかなる損害に関しても，その責任を負わない．
  * 
  *  @(#) $Id$
@@ -45,9 +33,9 @@
 
 /*
- *  NTP ã¯ã©ã¤ã¢ã³ã
- *  TCP/IP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  NTP クライアント
+ *  TCP/IP コンフィギュレーションファイル
  */
 
-/* UDP éä¿¡ç«¯ç¹ */
+/* UDP 通信端点 */
 
 UDP_CRE_CEP (NTP_CLI_CEPID, {
Index: azure_iot_hub/trunk/usbhost/src/usb_hbth.cfg
===================================================================
--- azure_iot_hub/trunk/usbhost/src/usb_hbth.cfg	(revision 388)
+++ azure_iot_hub/trunk/usbhost/src/usb_hbth.cfg	(revision 389)
@@ -1,4 +1,4 @@
 /*
- *  USBãã©ã¤ãï¼RX630ç¨ï¼ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«
+ *  USBドライバ（RX630用）のコンフィギュレーションファイル
  */
 
Index: azure_iot_hub/trunk/usbhost/src/usb_hbth.h
===================================================================
--- azure_iot_hub/trunk/usbhost/src/usb_hbth.h	(revision 388)
+++ azure_iot_hub/trunk/usbhost/src/usb_hbth.h	(revision 389)
@@ -6,5 +6,5 @@
 
 /*
- *  USB HOST ã¿ã¹ã¯ã®ããã®å®æ°
+ *  USB HOST タスクのための定数
  */
 #define USBHOST_PRIORITY			(4)
@@ -33,11 +33,10 @@
 
 /*
- *  USBå²è¾¼ã¿ãã³ãã©ç»é²ã®ããã®å®æ°
+ *  USB割込みハンドラ登録のための定数
  */
-#define INHNO_USB	INT_USB0_USBI0		/* å²è¾¼ã¿ãã³ãã©çªå· */
-#define INTNO_USB	INT_USB0_USBI0		/* å²è¾¼ã¿çªå· */
-#define INTPRI_USB	-5					/* å²è¾¼ã¿åªå
-åº¦ */
-#define INTATR_USB	(TA_EDGE)			/* å²è¾¼ã¿å±æ§ */
+#define INHNO_USB	INT_USB0_USBI0		/* 割込みハンドラ番号 */
+#define INTNO_USB	INT_USB0_USBI0		/* 割込み番号 */
+#define INTPRI_USB	-5					/* 割込み優先度 */
+#define INTATR_USB	(TA_EDGE)			/* 割込み属性 */
 
 void usb_interrupt_handler(void);
Index: azure_iot_hub/trunk/wolfssl-3.15.7/COPYING
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/COPYING	(revision 388)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/COPYING	(revision 389)
Index: azure_iot_hub/trunk/wolfssl-3.15.7/LICENSING
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/LICENSING	(revision 388)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/LICENSING	(revision 389)
Index: azure_iot_hub/trunk/wolfssl-3.15.7/README
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/README	(revision 388)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/README	(revision 389)
@@ -103,5 +103,5 @@
 This release of wolfSSL includes a fix for 1 security vulnerability.
 
-Medium level fix for potential cache attack with a variant of Bleichenbacherâs attack. Earlier versions of wolfSSL leaked PKCS #1 v1.5 padding information during private key decryption that could lead to a potential padding oracle attack. It is recommended that users update to the latest version of wolfSSL if they have RSA cipher suites enabled and have the potential for malicious software to be ran on the same system that is performing RSA operations. Users that have only ECC cipher suites enabled and are not performing RSA PKCS #1 v1.5 Decryption operations are not vulnerable. Also users with TLS 1.3 only connections are not vulnerable to this attack. Thanks to Eyal Ronen (Weizmann Institute), Robert Gillham (University of Adelaide), Daniel Genkin (University of Michigan), Adi Shamir (Weizmann Institute), David Wong (NCC Group), and Yuval Yarom (University of Adelaide and Data61) for the report.
+Medium level fix for potential cache attack with a variant of Bleichenbacher’s attack. Earlier versions of wolfSSL leaked PKCS #1 v1.5 padding information during private key decryption that could lead to a potential padding oracle attack. It is recommended that users update to the latest version of wolfSSL if they have RSA cipher suites enabled and have the potential for malicious software to be ran on the same system that is performing RSA operations. Users that have only ECC cipher suites enabled and are not performing RSA PKCS #1 v1.5 Decryption operations are not vulnerable. Also users with TLS 1.3 only connections are not vulnerable to this attack. Thanks to Eyal Ronen (Weizmann Institute), Robert Gillham (University of Adelaide), Daniel Genkin (University of Michigan), Adi Shamir (Weizmann Institute), David Wong (NCC Group), and Yuval Yarom (University of Adelaide and Data61) for the report.
 
 The paper for further reading on the attack details can be found at http://cat.eyalro.net/cat.pdf.
Index: azure_iot_hub/trunk/wolfssl-3.15.7/user_settings.h
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/user_settings.h	(revision 388)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/user_settings.h	(revision 389)
@@ -1,12 +1,15 @@
 //#define DEBUG_WOLFSSL
 
-//#define HAVE_LIBZ	ã¹ã¿ãã¯ãå¤ãå¿
-è¦
+//#define HAVE_LIBZ	スタックが多く必要
 #define HAVE_ECC
 #define HAVE_AESGCM
 //#define HAVE_FIPS
+// googleで必要
 #define HAVE_TLS_EXTENSIONS
 #define HAVE_SNI
 #define HAVE_SUPPORTED_CURVES
+// AzureのMQTToWSで必要、Open Weather Mapでは害
+//#define HAVE_SECURE_RENEGOTIATION
+//#define WOLFSSL_SECURE_RENEGOTIATION_ON_BY_DEFAULT
 
 #define ECC_TIMING_RESISTANT
@@ -16,6 +19,9 @@
 #define WOLFSSL_SHA512
 #define WOLFSSL_SMALL_STACK
-// curlã§ä½¿ç¨ãã¦ãã
+// curlで使用している
 #define WOLFSSL_ALLOW_TLSV10
+
+#define WOLFSSL_CERT_EXT
+//#define OPENSSL_EXTRA	GR-SAKURAでROMが足らなくなる
 
 #define WC_RSA_BLINDING
Index: azure_iot_hub/trunk/wolfssl-3.15.7/wolfcrypt/src/aes.c
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/wolfcrypt/src/aes.c	(revision 388)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/wolfcrypt/src/aes.c	(revision 389)
@@ -3439,5 +3439,5 @@
 
 
-/* See IntelÂ® Carry-Less Multiplication Instruction
+/* See Intel® Carry-Less Multiplication Instruction
  * and its Usage for Computing the GCM Mode White Paper
  * by Shay Gueron, Intel Mobility Group, Israel Development Center;
@@ -3445,5 +3445,5 @@
 
 
-/* Figure 9. AES-GCM â Encrypt With Single Block Ghash at a Time */
+/* Figure 9. AES-GCM – Encrypt With Single Block Ghash at a Time */
 
 static const __m128i ONE   = M128_INIT(0x0, 0x1);
@@ -6192,5 +6192,5 @@
 
 #ifdef HAVE_AES_DECRYPT
-/* Figure 10. AES-GCM â Decrypt With Single Block Ghash at a Time */
+/* Figure 10. AES-GCM – Decrypt With Single Block Ghash at a Time */
 
 static void AES_GCM_decrypt(const unsigned char *in, unsigned char *out,
Index: azure_iot_hub/trunk/wolfssl-3.15.7/wolfssl/options.h
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/wolfssl/options.h	(revision 389)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/wolfssl/options.h	(revision 389)
@@ -0,0 +1,26 @@
+/* wolfssl options.h
+ * generated from configure options
+ *
+ * Copyright (C) 2006-2015 wolfSSL Inc.
+ *
+ * This file is part of wolfSSL. (formerly known as CyaSSL)
+ *
+ */
+
+#ifndef WOLFSSL_OPTIONS_H
+#define WOLFSSL_OPTIONS_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "user_settings.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* WOLFSSL_OPTIONS_H */
+
Index: azure_iot_hub/trunk/wolfssl-3.15.7/wolfssl/test.h
===================================================================
--- azure_iot_hub/trunk/wolfssl-3.15.7/wolfssl/test.h	(revision 388)
+++ azure_iot_hub/trunk/wolfssl-3.15.7/wolfssl/test.h	(revision 389)
@@ -528,12 +528,11 @@
     /* Japanese */
     {
-        "SSL ãã¼ã¸ã§ã³ã¯",
-        "SSL æå·ã¹ã¤ã¼ãã¯",
-        "SSL æ²ç·åã¯",
-        "SSL DH ãµã¤ãºã¯",
-        "SSL åå©ç¨ã»ãã·ã§ã³",
-        "ä»£æ¿è¨¼æãã§ã¼ã³ãä½¿ç¨",
-        "ç¸ææ¹è¨¼ææ¸æ
-å ±",
+        "SSL バージョンは",
+        "SSL 暗号スイートは",
+        "SSL 曲線名は",
+        "SSL DH サイズは",
+        "SSL 再利用セッション",
+        "代替証明チェーンを使用",
+        "相手方証明書情報",
         NULL
     }
@@ -552,9 +551,8 @@
     /* Japanese */
     {
-        "çºè¡è
-",
-        "ãµãã¸ã§ã¯ã",
-        "ä»£æ¿å",
-        "ã·ãªã¢ã«çªå·",
+        "発行者",
+        "サブジェクト",
+        "代替名",
+        "シリアル番号",
         NULL
     },
Index: azure_iot_hub/trunk/zlib-1.2.11/FAQ
===================================================================
--- azure_iot_hub/trunk/zlib-1.2.11/FAQ	(revision 388)
+++ azure_iot_hub/trunk/zlib-1.2.11/FAQ	(revision 389)
Index: azure_iot_hub/trunk/zlib-1.2.11/INDEX
===================================================================
--- azure_iot_hub/trunk/zlib-1.2.11/INDEX	(revision 388)
+++ azure_iot_hub/trunk/zlib-1.2.11/INDEX	(revision 389)
Index: azure_iot_hub/trunk/zlib-1.2.11/README
===================================================================
--- azure_iot_hub/trunk/zlib-1.2.11/README	(revision 388)
+++ azure_iot_hub/trunk/zlib-1.2.11/README	(revision 389)
